{"version":3,"file":"/Modules/Admin/Assets/js/admin.js","mappings":"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zC,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAC1B,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACtF,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACtF,EAAU,IAAM,EAAU,IAC1B,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,KA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ACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,KACV,IAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,IACV,EAAU,I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AI,EAAGkQ,EAAM+0I,EAAGhlJ,OAAQD,EAAIkQ,EAAKlQ,IAAK,CAC7C,IAAIP,EAAIwlJ,EAAGjlJ,GACX2iD,EAAE/iD,OAAOH,IAAM89C,EAAE99C,EAAGO,EACtB,CACA,OAAO2iD,CACT,CAojF+B6+G,CAAYpgJ,EAAO01D,GACvC8yE,GAAM2X,EAAQx9H,GAAKnO,GAC5B,CACF,EACI6rI,GAAYH,GA/BD,CACb,KACA,KACA,KACA,KACA,KACA,OA0BEI,GAAYJ,GArHH,CACX,UACA,QACA,UACA,MACA,KACA,aACA,SACA,OACA,WACA,SACA,SACA,OACA,OACA,MACA,UACA,UACA,OACA,IACA,KACA,WACA,KACA,SACA,UACA,SACA,aACA,KACA,KACA,KACA,KACA,KACA,KACA,UACA,MACA,MACA,YACA,OACA,MACA,KACA,KACA,KACA,KACA,QACA,QACA,QACA,QACA,KACA,KACA,KACA,YAwEEK,GAAa,SAAU/rI,GACzB,OAAO69H,GAAY79H,KAAU8rI,GAAU9rI,EACzC,EACIgsI,GAAS,SAAUhsI,GACrB,OAAO69H,GAAY79H,IAAwB,OAAfmO,GAAKnO,EACnC,EACIisI,GAAgBP,GAnEH,CACf,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,UACA,MACA,OACA,aACA,SACA,MACA,WACA,SACA,SACA,UACA,UACA,SACA,QACA,MACA,WA6CEQ,GAASR,GA9BD,CACV,KACA,KACA,OA4BES,GAAaT,GApCC,CAChB,KACA,KACA,OAkCEU,GAAiBV,GA3ED,CAClB,QACA,QACA,UAyEEW,GAAgBX,GAhFH,CACf,KACA,OA+EEY,GAAsBZ,GA7BT,CACf,MACA,SACA,WACA,UAgCEa,GAAO,IAQPC,GATY,SAUZC,GARW,SAAUC,GACvB,MAHc,WAGPA,CACT,EAOIC,GANa,SAAUl5I,GACzB,OAAOA,EAAEnpB,QAAQ,UAAW,GAC9B,EAMIsiK,GAAc5L,GACd6L,GAAWrL,GACXsL,GAA0B,SAAU9sI,GAItC,OAHI6sI,GAAS7sI,KACXA,EAAOA,EAAKnrB,YAEP+3J,GAAY5sI,I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","sources":["webpack:///webpack/runtime/chunk loaded","webpack:///./Modules/Admin/node_modules/bootstrap-notify/bootstrap-notify.js","webpack:///./Modules/Admin/node_modules/bootstrap/dist/js/bootstrap.js","webpack:///./Modules/Admin/node_modules/datatables.net/js/jquery.dataTables.js","webpack:///./Modules/Admin/node_modules/jquery-ui-touch-punch/jquery.ui.touch-punch.js","webpack:///./Modules/Admin/node_modules/jquery.scrollbar/index.js","webpack:///./Modules/Admin/node_modules/jquery.scrollbar/jquery.scrollbar.js","webpack:///./Modules/Admin/node_modules/jquery/dist/jquery.js","webpack:///./Modules/Admin/node_modules/lodash/lodash.js","webpack:///./Modules/Admin/node_modules/nprogress/nprogress.js","webpack:///./Modules/Admin/node_modules/popper.js/dist/esm/popper.js","webpack:///./Modules/Admin/node_modules/select2/dist/js/select2.js","webpack:///./Modules/Admin/node_modules/sweetalert/dist/sweetalert.min.js","webpack:///./Modules/Admin/node_modules/tinymce/tinymce.js","webpack:///./Modules/Admin/Resources/assets/js/admin.js","webpack:///./Modules/Admin/Resources/assets/js/form.js","webpack:///./Modules/Admin/Resources/assets/js/datatable.js","webpack:///./Modules/Admin/Resources/assets/js/notify.js","webpack:///./Modules/Admin/Resources/assets/js/app.js","webpack:///./Modules/Admin/Resources/assets/js/datatables.min.js","webpack:///./Modules/Admin/Resources/assets/js/jquery-ui.min.js","webpack:///./Modules/Admin/Resources/assets/js/main.js","webpack:///./Modules/Admin/Resources/assets/js/wysiwyg.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/runtime/node module decorator","webpack:///webpack/runtime/jsonp chunk loading","webpack:///webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/*\n* Project: Bootstrap Notify = v3.1.3\n* Description: Turns standard Bootstrap alerts into \"Growl-like\" notifications.\n* Author: Mouse0270 aka Robert McIntosh\n* License: MIT License\n* Website: https://github.com/mouse0270/bootstrap-growl\n*/\n(function (factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// Node/CommonJS\n\t\tfactory(require('jquery'));\n\t} else {\n\t\t// Browser globals\n\t\tfactory(jQuery);\n\t}\n}(function ($) {\n\t// Create the defaults once\n\tvar defaults = {\n\t\t\telement: 'body',\n\t\t\tposition: null,\n\t\t\ttype: \"info\",\n\t\t\tallow_dismiss: true,\n\t\t\tnewest_on_top: false,\n\t\t\tshowProgressbar: false,\n\t\t\tplacement: {\n\t\t\t\tfrom: \"top\",\n\t\t\t\talign: \"right\"\n\t\t\t},\n\t\t\toffset: 20,\n\t\t\tspacing: 10,\n\t\t\tz_index: 1031,\n\t\t\tdelay: 5000,\n\t\t\ttimer: 1000,\n\t\t\turl_target: '_blank',\n\t\t\tmouse_over: null,\n\t\t\tanimate: {\n\t\t\t\tenter: 'animated fadeInDown',\n\t\t\t\texit: 'animated fadeOutUp'\n\t\t\t},\n\t\t\tonShow: null,\n\t\t\tonShown: null,\n\t\t\tonClose: null,\n\t\t\tonClosed: null,\n\t\t\ticon_type: 'class',\n\t\t\ttemplate: '<div data-notify=\"container\" class=\"col-xs-11 col-sm-4 alert alert-{0}\" role=\"alert\"><button type=\"button\" aria-hidden=\"true\" class=\"close\" data-notify=\"dismiss\">&times;</button><span data-notify=\"icon\"></span> <span data-notify=\"title\">{1}</span> <span data-notify=\"message\">{2}</span><div class=\"progress\" data-notify=\"progressbar\"><div class=\"progress-bar progress-bar-{0}\" role=\"progressbar\" aria-valuenow=\"0\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 0%;\"></div></div><a href=\"{3}\" target=\"{4}\" data-notify=\"url\"></a></div>'\n\t\t};\n\n\tString.format = function() {\n\t\tvar str = arguments[0];\n\t\tfor (var i = 1; i < arguments.length; i++) {\n\t\t\tstr = str.replace(RegExp(\"\\\\{\" + (i - 1) + \"\\\\}\", \"gm\"), arguments[i]);\n\t\t}\n\t\treturn str;\n\t};\n\n\tfunction Notify ( element, content, options ) {\n\t\t// Setup Content of Notify\n\t\tvar content = {\n\t\t\tcontent: {\n\t\t\t\tmessage: typeof content == 'object' ? content.message : content,\n\t\t\t\ttitle: content.title ? content.title : '',\n\t\t\t\ticon: content.icon ? content.icon : '',\n\t\t\t\turl: content.url ? content.url : '#',\n\t\t\t\ttarget: content.target ? content.target : '-'\n\t\t\t}\n\t\t};\n\n\t\toptions = $.extend(true, {}, content, options);\n\t\tthis.settings = $.extend(true, {}, defaults, options);\n\t\tthis._defaults = defaults;\n\t\tif (this.settings.content.target == \"-\") {\n\t\t\tthis.settings.content.target = this.settings.url_target;\n\t\t}\n\t\tthis.animations = {\n\t\t\tstart: 'webkitAnimationStart oanimationstart MSAnimationStart animationstart',\n\t\t\tend: 'webkitAnimationEnd oanimationend MSAnimationEnd animationend'\n\t\t}\n\n\t\tif (typeof this.settings.offset == 'number') {\n\t\t    this.settings.offset = {\n\t\t    \tx: this.settings.offset,\n\t\t    \ty: this.settings.offset\n\t\t    };\n\t\t}\n\n\t\tthis.init();\n\t};\n\n\t$.extend(Notify.prototype, {\n\t\tinit: function () {\n\t\t\tvar self = this;\n\n\t\t\tthis.buildNotify();\n\t\t\tif (this.settings.content.icon) {\n\t\t\t\tthis.setIcon();\n\t\t\t}\n\t\t\tif (this.settings.content.url != \"#\") {\n\t\t\t\tthis.styleURL();\n\t\t\t}\n\t\t\tthis.styleDismiss();\n\t\t\tthis.placement();\n\t\t\tthis.bind();\n\n\t\t\tthis.notify = {\n\t\t\t\t$ele: this.$ele,\n\t\t\t\tupdate: function(command, update) {\n\t\t\t\t\tvar commands = {};\n\t\t\t\t\tif (typeof command == \"string\") {\n\t\t\t\t\t\tcommands[command] = update;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tcommands = command;\n\t\t\t\t\t}\n\t\t\t\t\tfor (var command in commands) {\n\t\t\t\t\t\tswitch (command) {\n\t\t\t\t\t\t\tcase \"type\":\n\t\t\t\t\t\t\t\tthis.$ele.removeClass('alert-' + self.settings.type);\n\t\t\t\t\t\t\t\tthis.$ele.find('[data-notify=\"progressbar\"] > .progress-bar').removeClass('progress-bar-' + self.settings.type);\n\t\t\t\t\t\t\t\tself.settings.type = commands[command];\n\t\t\t\t\t\t\t\tthis.$ele.addClass('alert-' + commands[command]).find('[data-notify=\"progressbar\"] > .progress-bar').addClass('progress-bar-' + commands[command]);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"icon\":\n\t\t\t\t\t\t\t\tvar $icon = this.$ele.find('[data-notify=\"icon\"]');\n\t\t\t\t\t\t\t\tif (self.settings.icon_type.toLowerCase() == 'class') {\n\t\t\t\t\t\t\t\t\t$icon.removeClass(self.settings.content.icon).addClass(commands[command]);\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tif (!$icon.is('img')) {\n\t\t\t\t\t\t\t\t\t\t$icon.find('img');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$icon.attr('src', commands[command]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"progress\":\n\t\t\t\t\t\t\t\tvar newDelay = self.settings.delay - (self.settings.delay * (commands[command] / 100));\n\t\t\t\t\t\t\t\tthis.$ele.data('notify-delay', newDelay);\n\t\t\t\t\t\t\t\tthis.$ele.find('[data-notify=\"progressbar\"] > div').attr('aria-valuenow', commands[command]).css('width', commands[command] + '%');\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"url\":\n\t\t\t\t\t\t\t\tthis.$ele.find('[data-notify=\"url\"]').attr('href', commands[command]);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"target\":\n\t\t\t\t\t\t\t\tthis.$ele.find('[data-notify=\"url\"]').attr('target', commands[command]);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tthis.$ele.find('[data-notify=\"' + command +'\"]').html(commands[command]);\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tvar posX = this.$ele.outerHeight() + parseInt(self.settings.spacing) + parseInt(self.settings.offset.y);\n\t\t\t\t\tself.reposition(posX);\n\t\t\t\t},\n\t\t\t\tclose: function() {\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tbuildNotify: function () {\n\t\t\tvar content = this.settings.content;\n\t\t\tthis.$ele = $(String.format(this.settings.template, this.settings.type, content.title, content.message, content.url, content.target));\n\t\t\tthis.$ele.attr('data-notify-position', this.settings.placement.from + '-' + this.settings.placement.align);\n\t\t\tif (!this.settings.allow_dismiss) {\n\t\t\t\tthis.$ele.find('[data-notify=\"dismiss\"]').css('display', 'none');\n\t\t\t}\n\t\t\tif ((this.settings.delay <= 0 && !this.settings.showProgressbar) || !this.settings.showProgressbar) {\n\t\t\t\tthis.$ele.find('[data-notify=\"progressbar\"]').remove();\n\t\t\t}\n\t\t},\n\t\tsetIcon: function() {\n\t\t\tif (this.settings.icon_type.toLowerCase() == 'class') {\n\t\t\t\tthis.$ele.find('[data-notify=\"icon\"]').addClass(this.settings.content.icon);\n\t\t\t}else{\n\t\t\t\tif (this.$ele.find('[data-notify=\"icon\"]').is('img')) {\n\t\t\t\t\tthis.$ele.find('[data-notify=\"icon\"]').attr('src', this.settings.content.icon);\n\t\t\t\t}else{\n\t\t\t\t\tthis.$ele.find('[data-notify=\"icon\"]').append('<img src=\"'+this.settings.content.icon+'\" alt=\"Notify Icon\" />');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tstyleDismiss: function() {\n\t\t\tthis.$ele.find('[data-notify=\"dismiss\"]').css({\n\t\t\t\tposition: 'absolute',\n\t\t\t\tright: '10px',\n\t\t\t\ttop: '5px',\n\t\t\t\tzIndex: this.settings.z_index + 2\n\t\t\t});\n\t\t},\n\t\tstyleURL: function() {\n\t\t\tthis.$ele.find('[data-notify=\"url\"]').css({\n\t\t\t\tbackgroundImage: 'url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)',\n\t\t\t\theight: '100%',\n\t\t\t\tleft: '0px',\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '0px',\n\t\t\t\twidth: '100%',\n\t\t\t\tzIndex: this.settings.z_index + 1\n\t\t\t});\n\t\t},\n\t\tplacement: function() {\n\t\t\tvar self = this,\n\t\t\t\toffsetAmt = this.settings.offset.y,\n\t\t\t\tcss = {\n\t\t\t\t\tdisplay: 'inline-block',\n\t\t\t\t\tmargin: '0px auto',\n\t\t\t\t\tposition: this.settings.position ?  this.settings.position : (this.settings.element === 'body' ? 'fixed' : 'absolute'),\n\t\t\t\t\ttransition: 'all .5s ease-in-out',\n\t\t\t\t\tzIndex: this.settings.z_index\n\t\t\t\t},\n\t\t\t\thasAnimation = false,\n\t\t\t\tsettings = this.settings;\n\n\t\t\t$('[data-notify-position=\"' + this.settings.placement.from + '-' + this.settings.placement.align + '\"]:not([data-closing=\"true\"])').each(function() {\n\t\t\t\treturn offsetAmt = Math.max(offsetAmt, parseInt($(this).css(settings.placement.from)) +  parseInt($(this).outerHeight()) +  parseInt(settings.spacing));\n\t\t\t});\n\t\t\tif (this.settings.newest_on_top == true) {\n\t\t\t\toffsetAmt = this.settings.offset.y;\n\t\t\t}\n\t\t\tcss[this.settings.placement.from] = offsetAmt+'px';\n\n\t\t\tswitch (this.settings.placement.align) {\n\t\t\t\tcase \"left\":\n\t\t\t\tcase \"right\":\n\t\t\t\t\tcss[this.settings.placement.align] = this.settings.offset.x+'px';\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"center\":\n\t\t\t\t\tcss.left = 0;\n\t\t\t\t\tcss.right = 0;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.$ele.css(css).addClass(this.settings.animate.enter);\n\t\t\t$.each(Array('webkit-', 'moz-', 'o-', 'ms-', ''), function(index, prefix) {\n\t\t\t\tself.$ele[0].style[prefix+'AnimationIterationCount'] = 1;\n\t\t\t});\n\n\t\t\t$(this.settings.element).append(this.$ele);\n\n\t\t\tif (this.settings.newest_on_top == true) {\n\t\t\t\toffsetAmt = (parseInt(offsetAmt)+parseInt(this.settings.spacing)) + this.$ele.outerHeight();\n\t\t\t\tthis.reposition(offsetAmt);\n\t\t\t}\n\n\t\t\tif ($.isFunction(self.settings.onShow)) {\n\t\t\t\tself.settings.onShow.call(this.$ele);\n\t\t\t}\n\n\t\t\tthis.$ele.one(this.animations.start, function(event) {\n\t\t\t\thasAnimation = true;\n\t\t\t}).one(this.animations.end, function(event) {\n\t\t\t\tif ($.isFunction(self.settings.onShown)) {\n\t\t\t\t\tself.settings.onShown.call(this);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetTimeout(function() {\n\t\t\t\tif (!hasAnimation) {\n\t\t\t\t\tif ($.isFunction(self.settings.onShown)) {\n\t\t\t\t\t\tself.settings.onShown.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 600);\n\t\t},\n\t\tbind: function() {\n\t\t\tvar self = this;\n\n\t\t\tthis.$ele.find('[data-notify=\"dismiss\"]').on('click', function() {\n\t\t\t\tself.close();\n\t\t\t})\n\n\t\t\tthis.$ele.mouseover(function(e) {\n\t\t\t\t$(this).data('data-hover', \"true\");\n\t\t\t}).mouseout(function(e) {\n\t\t\t\t$(this).data('data-hover', \"false\");\n\t\t\t});\n\t\t\tthis.$ele.data('data-hover', \"false\");\n\n\t\t\tif (this.settings.delay > 0) {\n\t\t\t\tself.$ele.data('notify-delay', self.settings.delay);\n\t\t\t\tvar timer = setInterval(function() {\n\t\t\t\t\tvar delay = parseInt(self.$ele.data('notify-delay')) - self.settings.timer;\n\t\t\t\t\tif ((self.$ele.data('data-hover') === 'false' && self.settings.mouse_over == \"pause\") || self.settings.mouse_over != \"pause\") {\n\t\t\t\t\t\tvar percent = ((self.settings.delay - delay) / self.settings.delay) * 100;\n\t\t\t\t\t\tself.$ele.data('notify-delay', delay);\n\t\t\t\t\t\tself.$ele.find('[data-notify=\"progressbar\"] > div').attr('aria-valuenow', percent).css('width', percent + '%');\n\t\t\t\t\t}\n\t\t\t\t\tif (delay <= -(self.settings.timer)) {\n\t\t\t\t\t\tclearInterval(timer);\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t}\n\t\t\t\t}, self.settings.timer);\n\t\t\t}\n\t\t},\n\t\tclose: function() {\n\t\t\tvar self = this,\n\t\t\t\t$successors = null,\n\t\t\t\tposX = parseInt(this.$ele.css(this.settings.placement.from)),\n\t\t\t\thasAnimation = false;\n\n\t\t\tthis.$ele.data('closing', 'true').addClass(this.settings.animate.exit);\n\t\t\tself.reposition(posX);\n\n\t\t\tif ($.isFunction(self.settings.onClose)) {\n\t\t\t\tself.settings.onClose.call(this.$ele);\n\t\t\t}\n\n\t\t\tthis.$ele.one(this.animations.start, function(event) {\n\t\t\t\thasAnimation = true;\n\t\t\t}).one(this.animations.end, function(event) {\n\t\t\t\t$(this).remove();\n\t\t\t\tif ($.isFunction(self.settings.onClosed)) {\n\t\t\t\t\tself.settings.onClosed.call(this);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetTimeout(function() {\n\t\t\t\tif (!hasAnimation) {\n\t\t\t\t\tself.$ele.remove();\n\t\t\t\t\tif (self.settings.onClosed) {\n\t\t\t\t\t\tself.settings.onClosed(self.$ele);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 600);\n\t\t},\n\t\treposition: function(posX) {\n\t\t\tvar self = this,\n\t\t\t\tnotifies = '[data-notify-position=\"' + this.settings.placement.from + '-' + this.settings.placement.align + '\"]:not([data-closing=\"true\"])',\n\t\t\t\t$elements = this.$ele.nextAll(notifies);\n\t\t\tif (this.settings.newest_on_top == true) {\n\t\t\t\t$elements = this.$ele.prevAll(notifies);\n\t\t\t}\n\t\t\t$elements.each(function() {\n\t\t\t\t$(this).css(self.settings.placement.from, posX);\n\t\t\t\tposX = (parseInt(posX)+parseInt(self.settings.spacing)) + $(this).outerHeight();\n\t\t\t});\n\t\t}\n\t});\n\n\t$.notify = function ( content, options ) {\n\t\tvar plugin = new Notify( this, content, options );\n\t\treturn plugin.notify;\n\t};\n\t$.notifyDefaults = function( options ) {\n\t\tdefaults = $.extend(true, {}, defaults, options);\n\t\treturn defaults;\n\t};\n\t$.notifyClose = function( command ) {\n\t\tif (typeof command === \"undefined\" || command == \"all\") {\n\t\t\t$('[data-notify]').find('[data-notify=\"dismiss\"]').trigger('click');\n\t\t}else{\n\t\t\t$('[data-notify-position=\"'+command+'\"]').find('[data-notify=\"dismiss\"]').trigger('click');\n\t\t}\n\t};\n\n}));\n","/*!\n  * Bootstrap v4.6.2 (https://getbootstrap.com/)\n  * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :\n  typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));\n})(this, (function (exports, $, Popper) { 'use strict';\n\n  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\n  var $__default = /*#__PURE__*/_interopDefaultLegacy($);\n  var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    Object.defineProperty(Constructor, \"prototype\", {\n      writable: false\n    });\n    return Constructor;\n  }\n\n  function _extends() {\n    _extends = Object.assign ? Object.assign.bind() : function (target) {\n      for (var i = 1; i < arguments.length; i++) {\n        var source = arguments[i];\n\n        for (var key in source) {\n          if (Object.prototype.hasOwnProperty.call(source, key)) {\n            target[key] = source[key];\n          }\n        }\n      }\n\n      return target;\n    };\n    return _extends.apply(this, arguments);\n  }\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n\n    _setPrototypeOf(subClass, superClass);\n  }\n\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n      o.__proto__ = p;\n      return o;\n    };\n    return _setPrototypeOf(o, p);\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.6.2): util.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * Private TransitionEnd Helpers\n   */\n\n  var TRANSITION_END = 'transitionend';\n  var MAX_UID = 1000000;\n  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  function toType(obj) {\n    if (obj === null || typeof obj === 'undefined') {\n      return \"\" + obj;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  }\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType: TRANSITION_END,\n      delegateType: TRANSITION_END,\n      handle: function handle(event) {\n        if ($__default[\"default\"](event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        }\n\n        return undefined;\n      }\n    };\n  }\n\n  function transitionEndEmulator(duration) {\n    var _this = this;\n\n    var called = false;\n    $__default[\"default\"](this).one(Util.TRANSITION_END, function () {\n      called = true;\n    });\n    setTimeout(function () {\n      if (!called) {\n        Util.triggerTransitionEnd(_this);\n      }\n    }, duration);\n    return this;\n  }\n\n  function setTransitionEndSupport() {\n    $__default[\"default\"].fn.emulateTransitionEnd = transitionEndEmulator;\n    $__default[\"default\"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n  }\n  /**\n   * Public Util API\n   */\n\n\n  var Util = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function getUID(prefix) {\n      do {\n        // eslint-disable-next-line no-bitwise\n        prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n      } while (document.getElementById(prefix));\n\n      return prefix;\n    },\n    getSelectorFromElement: function getSelectorFromElement(element) {\n      var selector = element.getAttribute('data-target');\n\n      if (!selector || selector === '#') {\n        var hrefAttr = element.getAttribute('href');\n        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n      }\n\n      try {\n        return document.querySelector(selector) ? selector : null;\n      } catch (_) {\n        return null;\n      }\n    },\n    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n      if (!element) {\n        return 0;\n      } // Get transition-duration of the element\n\n\n      var transitionDuration = $__default[\"default\"](element).css('transition-duration');\n      var transitionDelay = $__default[\"default\"](element).css('transition-delay');\n      var floatTransitionDuration = parseFloat(transitionDuration);\n      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n      if (!floatTransitionDuration && !floatTransitionDelay) {\n        return 0;\n      } // If multiple durations are defined, take the first\n\n\n      transitionDuration = transitionDuration.split(',')[0];\n      transitionDelay = transitionDelay.split(',')[0];\n      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n    },\n    reflow: function reflow(element) {\n      return element.offsetHeight;\n    },\n    triggerTransitionEnd: function triggerTransitionEnd(element) {\n      $__default[\"default\"](element).trigger(TRANSITION_END);\n    },\n    supportsTransitionEnd: function supportsTransitionEnd() {\n      return Boolean(TRANSITION_END);\n    },\n    isElement: function isElement(obj) {\n      return (obj[0] || obj).nodeType;\n    },\n    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n      for (var property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          var expectedTypes = configTypes[property];\n          var value = config[property];\n          var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n          }\n        }\n      }\n    },\n    findShadowRoot: function findShadowRoot(element) {\n      if (!document.documentElement.attachShadow) {\n        return null;\n      } // Can find the shadow root otherwise it'll return the document\n\n\n      if (typeof element.getRootNode === 'function') {\n        var root = element.getRootNode();\n        return root instanceof ShadowRoot ? root : null;\n      }\n\n      if (element instanceof ShadowRoot) {\n        return element;\n      } // when we don't find a shadow root\n\n\n      if (!element.parentNode) {\n        return null;\n      }\n\n      return Util.findShadowRoot(element.parentNode);\n    },\n    jQueryDetection: function jQueryDetection() {\n      if (typeof $__default[\"default\"] === 'undefined') {\n        throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n      }\n\n      var version = $__default[\"default\"].fn.jquery.split(' ')[0].split('.');\n      var minMajor = 1;\n      var ltMajor = 2;\n      var minMinor = 9;\n      var minPatch = 1;\n      var maxMajor = 4;\n\n      if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n        throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n      }\n    }\n  };\n  Util.jQueryDetection();\n  setTransitionEndSupport();\n\n  /**\n   * Constants\n   */\n\n  var NAME$a = 'alert';\n  var VERSION$a = '4.6.2';\n  var DATA_KEY$a = 'bs.alert';\n  var EVENT_KEY$a = \".\" + DATA_KEY$a;\n  var DATA_API_KEY$7 = '.data-api';\n  var JQUERY_NO_CONFLICT$a = $__default[\"default\"].fn[NAME$a];\n  var CLASS_NAME_ALERT = 'alert';\n  var CLASS_NAME_FADE$5 = 'fade';\n  var CLASS_NAME_SHOW$7 = 'show';\n  var EVENT_CLOSE = \"close\" + EVENT_KEY$a;\n  var EVENT_CLOSED = \"closed\" + EVENT_KEY$a;\n  var EVENT_CLICK_DATA_API$6 = \"click\" + EVENT_KEY$a + DATA_API_KEY$7;\n  var SELECTOR_DISMISS = '[data-dismiss=\"alert\"]';\n  /**\n   * Class definition\n   */\n\n  var Alert = /*#__PURE__*/function () {\n    function Alert(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Alert.prototype;\n\n    // Public\n    _proto.close = function close(element) {\n      var rootElement = this._element;\n\n      if (element) {\n        rootElement = this._getRootElement(element);\n      }\n\n      var customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    };\n\n    _proto.dispose = function dispose() {\n      $__default[\"default\"].removeData(this._element, DATA_KEY$a);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._getRootElement = function _getRootElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      var parent = false;\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      if (!parent) {\n        parent = $__default[\"default\"](element).closest(\".\" + CLASS_NAME_ALERT)[0];\n      }\n\n      return parent;\n    };\n\n    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n      var closeEvent = $__default[\"default\"].Event(EVENT_CLOSE);\n      $__default[\"default\"](element).trigger(closeEvent);\n      return closeEvent;\n    };\n\n    _proto._removeElement = function _removeElement(element) {\n      var _this = this;\n\n      $__default[\"default\"](element).removeClass(CLASS_NAME_SHOW$7);\n\n      if (!$__default[\"default\"](element).hasClass(CLASS_NAME_FADE$5)) {\n        this._destroyElement(element);\n\n        return;\n      }\n\n      var transitionDuration = Util.getTransitionDurationFromElement(element);\n      $__default[\"default\"](element).one(Util.TRANSITION_END, function (event) {\n        return _this._destroyElement(element, event);\n      }).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto._destroyElement = function _destroyElement(element) {\n      $__default[\"default\"](element).detach().trigger(EVENT_CLOSED).remove();\n    } // Static\n    ;\n\n    Alert._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $__default[\"default\"](this);\n        var data = $element.data(DATA_KEY$a);\n\n        if (!data) {\n          data = new Alert(this);\n          $element.data(DATA_KEY$a, data);\n        }\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    };\n\n    Alert._handleDismiss = function _handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    };\n\n    _createClass(Alert, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$a;\n      }\n    }]);\n\n    return Alert;\n  }();\n  /**\n   * Data API implementation\n   */\n\n\n  $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));\n  /**\n   * jQuery\n   */\n\n  $__default[\"default\"].fn[NAME$a] = Alert._jQueryInterface;\n  $__default[\"default\"].fn[NAME$a].Constructor = Alert;\n\n  $__default[\"default\"].fn[NAME$a].noConflict = function () {\n    $__default[\"default\"].fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n    return Alert._jQueryInterface;\n  };\n\n  /**\n   * Constants\n   */\n\n  var NAME$9 = 'button';\n  var VERSION$9 = '4.6.2';\n  var DATA_KEY$9 = 'bs.button';\n  var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n  var DATA_API_KEY$6 = '.data-api';\n  var JQUERY_NO_CONFLICT$9 = $__default[\"default\"].fn[NAME$9];\n  var CLASS_NAME_ACTIVE$3 = 'active';\n  var CLASS_NAME_BUTTON = 'btn';\n  var CLASS_NAME_FOCUS = 'focus';\n  var EVENT_CLICK_DATA_API$5 = \"click\" + EVENT_KEY$9 + DATA_API_KEY$6;\n  var EVENT_FOCUS_BLUR_DATA_API = \"focus\" + EVENT_KEY$9 + DATA_API_KEY$6 + \" \" + (\"blur\" + EVENT_KEY$9 + DATA_API_KEY$6);\n  var EVENT_LOAD_DATA_API$2 = \"load\" + EVENT_KEY$9 + DATA_API_KEY$6;\n  var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]';\n  var SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]';\n  var SELECTOR_DATA_TOGGLE$4 = '[data-toggle=\"button\"]';\n  var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn';\n  var SELECTOR_INPUT = 'input:not([type=\"hidden\"])';\n  var SELECTOR_ACTIVE$2 = '.active';\n  var SELECTOR_BUTTON = '.btn';\n  /**\n   * Class definition\n   */\n\n  var Button = /*#__PURE__*/function () {\n    function Button(element) {\n      this._element = element;\n      this.shouldAvoidTriggerChange = false;\n    } // Getters\n\n\n    var _proto = Button.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      var triggerChangeEvent = true;\n      var addAriaPressed = true;\n      var rootElement = $__default[\"default\"](this._element).closest(SELECTOR_DATA_TOGGLES)[0];\n\n      if (rootElement) {\n        var input = this._element.querySelector(SELECTOR_INPUT);\n\n        if (input) {\n          if (input.type === 'radio') {\n            if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE$3)) {\n              triggerChangeEvent = false;\n            } else {\n              var activeElement = rootElement.querySelector(SELECTOR_ACTIVE$2);\n\n              if (activeElement) {\n                $__default[\"default\"](activeElement).removeClass(CLASS_NAME_ACTIVE$3);\n              }\n            }\n          }\n\n          if (triggerChangeEvent) {\n            // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n            if (input.type === 'checkbox' || input.type === 'radio') {\n              input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE$3);\n            }\n\n            if (!this.shouldAvoidTriggerChange) {\n              $__default[\"default\"](input).trigger('change');\n            }\n          }\n\n          input.focus();\n          addAriaPressed = false;\n        }\n      }\n\n      if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n        if (addAriaPressed) {\n          this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE$3));\n        }\n\n        if (triggerChangeEvent) {\n          $__default[\"default\"](this._element).toggleClass(CLASS_NAME_ACTIVE$3);\n        }\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $__default[\"default\"].removeData(this._element, DATA_KEY$9);\n      this._element = null;\n    } // Static\n    ;\n\n    Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) {\n      return this.each(function () {\n        var $element = $__default[\"default\"](this);\n        var data = $element.data(DATA_KEY$9);\n\n        if (!data) {\n          data = new Button(this);\n          $element.data(DATA_KEY$9, data);\n        }\n\n        data.shouldAvoidTriggerChange = avoidTriggerChange;\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Button, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$9;\n      }\n    }]);\n\n    return Button;\n  }();\n  /**\n   * Data API implementation\n   */\n\n\n  $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE_CARROT, function (event) {\n    var button = event.target;\n    var initialButton = button;\n\n    if (!$__default[\"default\"](button).hasClass(CLASS_NAME_BUTTON)) {\n      button = $__default[\"default\"](button).closest(SELECTOR_BUTTON)[0];\n    }\n\n    if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n      event.preventDefault(); // work around Firefox bug #1540995\n    } else {\n      var inputBtn = button.querySelector(SELECTOR_INPUT);\n\n      if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n        event.preventDefault(); // work around Firefox bug #1540995\n\n        return;\n      }\n\n      if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n        Button._jQueryInterface.call($__default[\"default\"](button), 'toggle', initialButton.tagName === 'INPUT');\n      }\n    }\n  }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {\n    var button = $__default[\"default\"](event.target).closest(SELECTOR_BUTTON)[0];\n    $__default[\"default\"](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));\n  });\n  $__default[\"default\"](window).on(EVENT_LOAD_DATA_API$2, function () {\n    // ensure correct active class is set to match the controls' actual values/states\n    // find all checkboxes/readio buttons inside data-toggle groups\n    var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));\n\n    for (var i = 0, len = buttons.length; i < len; i++) {\n      var button = buttons[i];\n      var input = button.querySelector(SELECTOR_INPUT);\n\n      if (input.checked || input.hasAttribute('checked')) {\n        button.classList.add(CLASS_NAME_ACTIVE$3);\n      } else {\n        button.classList.remove(CLASS_NAME_ACTIVE$3);\n      }\n    } // find all button toggles\n\n\n    buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$4));\n\n    for (var _i = 0, _len = buttons.length; _i < _len; _i++) {\n      var _button = buttons[_i];\n\n      if (_button.getAttribute('aria-pressed') === 'true') {\n        _button.classList.add(CLASS_NAME_ACTIVE$3);\n      } else {\n        _button.classList.remove(CLASS_NAME_ACTIVE$3);\n      }\n    }\n  });\n  /**\n   * jQuery\n   */\n\n  $__default[\"default\"].fn[NAME$9] = Button._jQueryInterface;\n  $__default[\"default\"].fn[NAME$9].Constructor = Button;\n\n  $__default[\"default\"].fn[NAME$9].noConflict = function () {\n    $__default[\"default\"].fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n    return Button._jQueryInterface;\n  };\n\n  /**\n   * Constants\n   */\n\n  var NAME$8 = 'carousel';\n  var VERSION$8 = '4.6.2';\n  var DATA_KEY$8 = 'bs.carousel';\n  var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n  var DATA_API_KEY$5 = '.data-api';\n  var JQUERY_NO_CONFLICT$8 = $__default[\"default\"].fn[NAME$8];\n  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  var SWIPE_THRESHOLD = 40;\n  var CLASS_NAME_CAROUSEL = 'carousel';\n  var CLASS_NAME_ACTIVE$2 = 'active';\n  var CLASS_NAME_SLIDE = 'slide';\n  var CLASS_NAME_RIGHT = 'carousel-item-right';\n  var CLASS_NAME_LEFT = 'carousel-item-left';\n  var CLASS_NAME_NEXT = 'carousel-item-next';\n  var CLASS_NAME_PREV = 'carousel-item-prev';\n  var CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  var DIRECTION_NEXT = 'next';\n  var DIRECTION_PREV = 'prev';\n  var DIRECTION_LEFT = 'left';\n  var DIRECTION_RIGHT = 'right';\n  var EVENT_SLIDE = \"slide\" + EVENT_KEY$8;\n  var EVENT_SLID = \"slid\" + EVENT_KEY$8;\n  var EVENT_KEYDOWN = \"keydown\" + EVENT_KEY$8;\n  var EVENT_MOUSEENTER = \"mouseenter\" + EVENT_KEY$8;\n  var EVENT_MOUSELEAVE = \"mouseleave\" + EVENT_KEY$8;\n  var EVENT_TOUCHSTART = \"touchstart\" + EVENT_KEY$8;\n  var EVENT_TOUCHMOVE = \"touchmove\" + EVENT_KEY$8;\n  var EVENT_TOUCHEND = \"touchend\" + EVENT_KEY$8;\n  var EVENT_POINTERDOWN = \"pointerdown\" + EVENT_KEY$8;\n  var EVENT_POINTERUP = \"pointerup\" + EVENT_KEY$8;\n  var EVENT_DRAG_START = \"dragstart\" + EVENT_KEY$8;\n  var EVENT_LOAD_DATA_API$1 = \"load\" + EVENT_KEY$8 + DATA_API_KEY$5;\n  var EVENT_CLICK_DATA_API$4 = \"click\" + EVENT_KEY$8 + DATA_API_KEY$5;\n  var SELECTOR_ACTIVE$1 = '.active';\n  var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  var SELECTOR_ITEM = '.carousel-item';\n  var SELECTOR_ITEM_IMG = '.carousel-item img';\n  var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  var SELECTOR_INDICATORS = '.carousel-indicators';\n  var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';\n  var SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]';\n  var Default$7 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  var DefaultType$7 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  var PointerType = {\n    TOUCH: 'touch',\n    PEN: 'pen'\n  };\n  /**\n   * Class definition\n   */\n\n  var Carousel = /*#__PURE__*/function () {\n    function Carousel(element, config) {\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Carousel.prototype;\n\n    // Public\n    _proto.next = function next() {\n      if (!this._isSliding) {\n        this._slide(DIRECTION_NEXT);\n      }\n    };\n\n    _proto.nextWhenVisible = function nextWhenVisible() {\n      var $element = $__default[\"default\"](this._element); // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n\n      if (!document.hidden && $element.is(':visible') && $element.css('visibility') !== 'hidden') {\n        this.next();\n      }\n    };\n\n    _proto.prev = function prev() {\n      if (!this._isSliding) {\n        this._slide(DIRECTION_PREV);\n      }\n    };\n\n    _proto.pause = function pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n        Util.triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    };\n\n    _proto.cycle = function cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    };\n\n    _proto.to = function to(index) {\n      var _this = this;\n\n      this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);\n\n      var activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        $__default[\"default\"](this._element).one(EVENT_SLID, function () {\n          return _this.to(index);\n        });\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;\n\n      this._slide(direction, this._items[index]);\n    };\n\n    _proto.dispose = function dispose() {\n      $__default[\"default\"](this._element).off(EVENT_KEY$8);\n      $__default[\"default\"].removeData(this._element, DATA_KEY$8);\n      this._items = null;\n      this._config = null;\n      this._element = null;\n      this._interval = null;\n      this._isPaused = null;\n      this._isSliding = null;\n      this._activeElement = null;\n      this._indicatorsElement = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, Default$7, config);\n      Util.typeCheckConfig(NAME$8, config, DefaultType$7);\n      return config;\n    };\n\n    _proto._handleSwipe = function _handleSwipe() {\n      var absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      var direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0; // swipe left\n\n      if (direction > 0) {\n        this.prev();\n      } // swipe right\n\n\n      if (direction < 0) {\n        this.next();\n      }\n    };\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this2 = this;\n\n      if (this._config.keyboard) {\n        $__default[\"default\"](this._element).on(EVENT_KEYDOWN, function (event) {\n          return _this2._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        $__default[\"default\"](this._element).on(EVENT_MOUSEENTER, function (event) {\n          return _this2.pause(event);\n        }).on(EVENT_MOUSELEAVE, function (event) {\n          return _this2.cycle(event);\n        });\n      }\n\n      if (this._config.touch) {\n        this._addTouchEventListeners();\n      }\n    };\n\n    _proto._addTouchEventListeners = function _addTouchEventListeners() {\n      var _this3 = this;\n\n      if (!this._touchSupported) {\n        return;\n      }\n\n      var start = function start(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchStartX = event.originalEvent.clientX;\n        } else if (!_this3._pointerEvent) {\n          _this3.touchStartX = event.originalEvent.touches[0].clientX;\n        }\n      };\n\n      var move = function move(event) {\n        // ensure swiping with one touch and not pinching\n        _this3.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ? 0 : event.originalEvent.touches[0].clientX - _this3.touchStartX;\n      };\n\n      var end = function end(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n        }\n\n        _this3._handleSwipe();\n\n        if (_this3._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          _this3.pause();\n\n          if (_this3.touchTimeout) {\n            clearTimeout(_this3.touchTimeout);\n          }\n\n          _this3.touchTimeout = setTimeout(function (event) {\n            return _this3.cycle(event);\n          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n        }\n      };\n\n      $__default[\"default\"](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {\n        return e.preventDefault();\n      });\n\n      if (this._pointerEvent) {\n        $__default[\"default\"](this._element).on(EVENT_POINTERDOWN, function (event) {\n          return start(event);\n        });\n        $__default[\"default\"](this._element).on(EVENT_POINTERUP, function (event) {\n          return end(event);\n        });\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        $__default[\"default\"](this._element).on(EVENT_TOUCHSTART, function (event) {\n          return start(event);\n        });\n        $__default[\"default\"](this._element).on(EVENT_TOUCHMOVE, function (event) {\n          return move(event);\n        });\n        $__default[\"default\"](this._element).on(EVENT_TOUCHEND, function (event) {\n          return end(event);\n        });\n      }\n    };\n\n    _proto._keydown = function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      switch (event.which) {\n        case ARROW_LEFT_KEYCODE:\n          event.preventDefault();\n          this.prev();\n          break;\n\n        case ARROW_RIGHT_KEYCODE:\n          event.preventDefault();\n          this.next();\n          break;\n      }\n    };\n\n    _proto._getItemIndex = function _getItemIndex(element) {\n      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [];\n      return this._items.indexOf(element);\n    };\n\n    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n      var isNextDirection = direction === DIRECTION_NEXT;\n      var isPrevDirection = direction === DIRECTION_PREV;\n\n      var activeIndex = this._getItemIndex(activeElement);\n\n      var lastItemIndex = this._items.length - 1;\n      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n      if (isGoingToWrap && !this._config.wrap) {\n        return activeElement;\n      }\n\n      var delta = direction === DIRECTION_PREV ? -1 : 1;\n      var itemIndex = (activeIndex + delta) % this._items.length;\n      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n    };\n\n    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      var targetIndex = this._getItemIndex(relatedTarget);\n\n      var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));\n\n      var slideEvent = $__default[\"default\"].Event(EVENT_SLIDE, {\n        relatedTarget: relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n      $__default[\"default\"](this._element).trigger(slideEvent);\n      return slideEvent;\n    };\n\n    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));\n        $__default[\"default\"](indicators).removeClass(CLASS_NAME_ACTIVE$2);\n\n        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n        if (nextIndicator) {\n          $__default[\"default\"](nextIndicator).addClass(CLASS_NAME_ACTIVE$2);\n        }\n      }\n    };\n\n    _proto._updateInterval = function _updateInterval() {\n      var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM);\n\n      if (!element) {\n        return;\n      }\n\n      var elementInterval = parseInt(element.getAttribute('data-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    };\n\n    _proto._slide = function _slide(direction, element) {\n      var _this4 = this;\n\n      var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);\n\n      var activeElementIndex = this._getItemIndex(activeElement);\n\n      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var isCycling = Boolean(this._interval);\n      var directionalClassName;\n      var orderClassName;\n      var eventDirectionName;\n\n      if (direction === DIRECTION_NEXT) {\n        directionalClassName = CLASS_NAME_LEFT;\n        orderClassName = CLASS_NAME_NEXT;\n        eventDirectionName = DIRECTION_LEFT;\n      } else {\n        directionalClassName = CLASS_NAME_RIGHT;\n        orderClassName = CLASS_NAME_PREV;\n        eventDirectionName = DIRECTION_RIGHT;\n      }\n\n      if (nextElement && $__default[\"default\"](nextElement).hasClass(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n      var slidEvent = $__default[\"default\"].Event(EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n\n      if ($__default[\"default\"](this._element).hasClass(CLASS_NAME_SLIDE)) {\n        $__default[\"default\"](nextElement).addClass(orderClassName);\n        Util.reflow(nextElement);\n        $__default[\"default\"](activeElement).addClass(directionalClassName);\n        $__default[\"default\"](nextElement).addClass(directionalClassName);\n        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n        $__default[\"default\"](activeElement).one(Util.TRANSITION_END, function () {\n          $__default[\"default\"](nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(CLASS_NAME_ACTIVE$2);\n          $__default[\"default\"](activeElement).removeClass(CLASS_NAME_ACTIVE$2 + \" \" + orderClassName + \" \" + directionalClassName);\n          _this4._isSliding = false;\n          setTimeout(function () {\n            return $__default[\"default\"](_this4._element).trigger(slidEvent);\n          }, 0);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        $__default[\"default\"](activeElement).removeClass(CLASS_NAME_ACTIVE$2);\n        $__default[\"default\"](nextElement).addClass(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        $__default[\"default\"](this._element).trigger(slidEvent);\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    } // Static\n    ;\n\n    Carousel._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $__default[\"default\"](this).data(DATA_KEY$8);\n\n        var _config = _extends({}, Default$7, $__default[\"default\"](this).data());\n\n        if (typeof config === 'object') {\n          _config = _extends({}, _config, config);\n        }\n\n        var action = typeof config === 'string' ? config : _config.slide;\n\n        if (!data) {\n          data = new Carousel(this, _config);\n          $__default[\"default\"](this).data(DATA_KEY$8, data);\n        }\n\n        if (typeof config === 'number') {\n          data.to(config);\n        } else if (typeof action === 'string') {\n          if (typeof data[action] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n          }\n\n          data[action]();\n        } else if (_config.interval && _config.ride) {\n          data.pause();\n          data.cycle();\n        }\n      });\n    };\n\n    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n      var selector = Util.getSelectorFromElement(this);\n\n      if (!selector) {\n        return;\n      }\n\n      var target = $__default[\"default\"](selector)[0];\n\n      if (!target || !$__default[\"default\"](target).hasClass(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      var config = _extends({}, $__default[\"default\"](target).data(), $__default[\"default\"](this).data());\n\n      var slideIndex = this.getAttribute('data-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel._jQueryInterface.call($__default[\"default\"](target), config);\n\n      if (slideIndex) {\n        $__default[\"default\"](target).data(DATA_KEY$8).to(slideIndex);\n      }\n\n      event.preventDefault();\n    };\n\n    _createClass(Carousel, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$8;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$7;\n      }\n    }]);\n\n    return Carousel;\n  }();\n  /**\n   * Data API implementation\n   */\n\n\n  $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);\n  $__default[\"default\"](window).on(EVENT_LOAD_DATA_API$1, function () {\n    var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));\n\n    for (var i = 0, len = carousels.length; i < len; i++) {\n      var $carousel = $__default[\"default\"](carousels[i]);\n\n      Carousel._jQueryInterface.call($carousel, $carousel.data());\n    }\n  });\n  /**\n   * jQuery\n   */\n\n  $__default[\"default\"].fn[NAME$8] = Carousel._jQueryInterface;\n  $__default[\"default\"].fn[NAME$8].Constructor = Carousel;\n\n  $__default[\"default\"].fn[NAME$8].noConflict = function () {\n    $__default[\"default\"].fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n    return Carousel._jQueryInterface;\n  };\n\n  /**\n   * Constants\n   */\n\n  var NAME$7 = 'collapse';\n  var VERSION$7 = '4.6.2';\n  var DATA_KEY$7 = 'bs.collapse';\n  var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n  var DATA_API_KEY$4 = '.data-api';\n  var JQUERY_NO_CONFLICT$7 = $__default[\"default\"].fn[NAME$7];\n  var CLASS_NAME_SHOW$6 = 'show';\n  var CLASS_NAME_COLLAPSE = 'collapse';\n  var CLASS_NAME_COLLAPSING = 'collapsing';\n  var CLASS_NAME_COLLAPSED = 'collapsed';\n  var DIMENSION_WIDTH = 'width';\n  var DIMENSION_HEIGHT = 'height';\n  var EVENT_SHOW$4 = \"show\" + EVENT_KEY$7;\n  var EVENT_SHOWN$4 = \"shown\" + EVENT_KEY$7;\n  var EVENT_HIDE$4 = \"hide\" + EVENT_KEY$7;\n  var EVENT_HIDDEN$4 = \"hidden\" + EVENT_KEY$7;\n  var EVENT_CLICK_DATA_API$3 = \"click\" + EVENT_KEY$7 + DATA_API_KEY$4;\n  var SELECTOR_ACTIVES = '.show, .collapsing';\n  var SELECTOR_DATA_TOGGLE$3 = '[data-toggle=\"collapse\"]';\n  var Default$6 = {\n    toggle: true,\n    parent: ''\n  };\n  var DefaultType$6 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  /**\n   * Class definition\n   */\n\n  var Collapse = /*#__PURE__*/function () {\n    function Collapse(element, config) {\n      this._isTransitioning = false;\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n      var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$3));\n\n      for (var i = 0, len = toggleList.length; i < len; i++) {\n        var elem = toggleList[i];\n        var selector = Util.getSelectorFromElement(elem);\n        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n          return foundElem === element;\n        });\n\n        if (selector !== null && filterElement.length > 0) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    var _proto = Collapse.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if ($__default[\"default\"](this._element).hasClass(CLASS_NAME_SHOW$6)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._isTransitioning || $__default[\"default\"](this._element).hasClass(CLASS_NAME_SHOW$6)) {\n        return;\n      }\n\n      var actives;\n      var activesData;\n\n      if (this._parent) {\n        actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) {\n          if (typeof _this._config.parent === 'string') {\n            return elem.getAttribute('data-parent') === _this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      if (actives) {\n        activesData = $__default[\"default\"](actives).not(this._selector).data(DATA_KEY$7);\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      var startEvent = $__default[\"default\"].Event(EVENT_SHOW$4);\n      $__default[\"default\"](this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (actives) {\n        Collapse._jQueryInterface.call($__default[\"default\"](actives).not(this._selector), 'hide');\n\n        if (!activesData) {\n          $__default[\"default\"](actives).data(DATA_KEY$7, null);\n        }\n      }\n\n      var dimension = this._getDimension();\n\n      $__default[\"default\"](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        $__default[\"default\"](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        $__default[\"default\"](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + \" \" + CLASS_NAME_SHOW$6);\n        _this._element.style[dimension] = '';\n\n        _this.setTransitioning(false);\n\n        $__default[\"default\"](_this._element).trigger(EVENT_SHOWN$4);\n      };\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\" + capitalizedDimension;\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $__default[\"default\"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      this._element.style[dimension] = this._element[scrollSize] + \"px\";\n    };\n\n    _proto.hide = function hide() {\n      var _this2 = this;\n\n      if (this._isTransitioning || !$__default[\"default\"](this._element).hasClass(CLASS_NAME_SHOW$6)) {\n        return;\n      }\n\n      var startEvent = $__default[\"default\"].Event(EVENT_HIDE$4);\n      $__default[\"default\"](this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n      Util.reflow(this._element);\n      $__default[\"default\"](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + \" \" + CLASS_NAME_SHOW$6);\n      var triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (var i = 0; i < triggerArrayLength; i++) {\n          var trigger = this._triggerArray[i];\n          var selector = Util.getSelectorFromElement(trigger);\n\n          if (selector !== null) {\n            var $elem = $__default[\"default\"]([].slice.call(document.querySelectorAll(selector)));\n\n            if (!$elem.hasClass(CLASS_NAME_SHOW$6)) {\n              $__default[\"default\"](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);\n            }\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        _this2.setTransitioning(false);\n\n        $__default[\"default\"](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN$4);\n      };\n\n      this._element.style[dimension] = '';\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $__default[\"default\"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto.setTransitioning = function setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    };\n\n    _proto.dispose = function dispose() {\n      $__default[\"default\"].removeData(this._element, DATA_KEY$7);\n      this._config = null;\n      this._parent = null;\n      this._element = null;\n      this._triggerArray = null;\n      this._isTransitioning = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, Default$6, config);\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      Util.typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    };\n\n    _proto._getDimension = function _getDimension() {\n      var hasWidth = $__default[\"default\"](this._element).hasClass(DIMENSION_WIDTH);\n      return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;\n    };\n\n    _proto._getParent = function _getParent() {\n      var _this3 = this;\n\n      var parent;\n\n      if (Util.isElement(this._config.parent)) {\n        parent = this._config.parent; // It's a jQuery object\n\n        if (typeof this._config.parent.jquery !== 'undefined') {\n          parent = this._config.parent[0];\n        }\n      } else {\n        parent = document.querySelector(this._config.parent);\n      }\n\n      var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n      var children = [].slice.call(parent.querySelectorAll(selector));\n      $__default[\"default\"](children).each(function (i, element) {\n        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n      });\n      return parent;\n    };\n\n    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n      var isOpen = $__default[\"default\"](element).hasClass(CLASS_NAME_SHOW$6);\n\n      if (triggerArray.length) {\n        $__default[\"default\"](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n      }\n    } // Static\n    ;\n\n    Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      return selector ? document.querySelector(selector) : null;\n    };\n\n    Collapse._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $__default[\"default\"](this);\n        var data = $element.data(DATA_KEY$7);\n\n        var _config = _extends({}, Default$6, $element.data(), typeof config === 'object' && config ? config : {});\n\n        if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\n        if (!data) {\n          data = new Collapse(this, _config);\n          $element.data(DATA_KEY$7, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Collapse, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$6;\n      }\n    }]);\n\n    return Collapse;\n  }();\n  /**\n   * Data API implementation\n   */\n\n\n  $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.currentTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    var $trigger = $__default[\"default\"](this);\n    var selector = Util.getSelectorFromElement(this);\n    var selectors = [].slice.call(document.querySelectorAll(selector));\n    $__default[\"default\"](selectors).each(function () {\n      var $target = $__default[\"default\"](this);\n      var data = $target.data(DATA_KEY$7);\n      var config = data ? 'toggle' : $trigger.data();\n\n      Collapse._jQueryInterface.call($target, config);\n    });\n  });\n  /**\n   * jQuery\n   */\n\n  $__default[\"default\"].fn[NAME$7] = Collapse._jQueryInterface;\n  $__default[\"default\"].fn[NAME$7].Constructor = Collapse;\n\n  $__default[\"default\"].fn[NAME$7].noConflict = function () {\n    $__default[\"default\"].fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n    return Collapse._jQueryInterface;\n  };\n\n  /**\n   * Constants\n   */\n\n  var NAME$6 = 'dropdown';\n  var VERSION$6 = '4.6.2';\n  var DATA_KEY$6 = 'bs.dropdown';\n  var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n  var DATA_API_KEY$3 = '.data-api';\n  var JQUERY_NO_CONFLICT$6 = $__default[\"default\"].fn[NAME$6];\n  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE$1);\n  var CLASS_NAME_DISABLED$1 = 'disabled';\n  var CLASS_NAME_SHOW$5 = 'show';\n  var CLASS_NAME_DROPUP = 'dropup';\n  var CLASS_NAME_DROPRIGHT = 'dropright';\n  var CLASS_NAME_DROPLEFT = 'dropleft';\n  var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';\n  var CLASS_NAME_POSITION_STATIC = 'position-static';\n  var EVENT_HIDE$3 = \"hide\" + EVENT_KEY$6;\n  var EVENT_HIDDEN$3 = \"hidden\" + EVENT_KEY$6;\n  var EVENT_SHOW$3 = \"show\" + EVENT_KEY$6;\n  var EVENT_SHOWN$3 = \"shown\" + EVENT_KEY$6;\n  var EVENT_CLICK = \"click\" + EVENT_KEY$6;\n  var EVENT_CLICK_DATA_API$2 = \"click\" + EVENT_KEY$6 + DATA_API_KEY$3;\n  var EVENT_KEYDOWN_DATA_API = \"keydown\" + EVENT_KEY$6 + DATA_API_KEY$3;\n  var EVENT_KEYUP_DATA_API = \"keyup\" + EVENT_KEY$6 + DATA_API_KEY$3;\n  var SELECTOR_DATA_TOGGLE$2 = '[data-toggle=\"dropdown\"]';\n  var SELECTOR_FORM_CHILD = '.dropdown form';\n  var SELECTOR_MENU = '.dropdown-menu';\n  var SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  var PLACEMENT_TOP = 'top-start';\n  var PLACEMENT_TOPEND = 'top-end';\n  var PLACEMENT_BOTTOM = 'bottom-start';\n  var PLACEMENT_BOTTOMEND = 'bottom-end';\n  var PLACEMENT_RIGHT = 'right-start';\n  var PLACEMENT_LEFT = 'left-start';\n  var Default$5 = {\n    offset: 0,\n    flip: true,\n    boundary: 'scrollParent',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null\n  };\n  var DefaultType$5 = {\n    offset: '(number|string|function)',\n    flip: 'boolean',\n    boundary: '(string|element)',\n    reference: '(string|element)',\n    display: 'string',\n    popperConfig: '(null|object)'\n  };\n  /**\n   * Class definition\n   */\n\n  var Dropdown = /*#__PURE__*/function () {\n    function Dropdown(element, config) {\n      this._element = element;\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Dropdown.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if (this._element.disabled || $__default[\"default\"](this._element).hasClass(CLASS_NAME_DISABLED$1)) {\n        return;\n      }\n\n      var isActive = $__default[\"default\"](this._menu).hasClass(CLASS_NAME_SHOW$5);\n\n      Dropdown._clearMenus();\n\n      if (isActive) {\n        return;\n      }\n\n      this.show(true);\n    };\n\n    _proto.show = function show(usePopper) {\n      if (usePopper === void 0) {\n        usePopper = false;\n      }\n\n      if (this._element.disabled || $__default[\"default\"](this._element).hasClass(CLASS_NAME_DISABLED$1) || $__default[\"default\"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $__default[\"default\"].Event(EVENT_SHOW$3, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $__default[\"default\"](parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (!this._inNavbar && usePopper) {\n        // Check for Popper dependency\n        if (typeof Popper__default[\"default\"] === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        var referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (Util.isElement(this._config.reference)) {\n          referenceElement = this._config.reference; // Check if it's jQuery element\n\n          if (typeof this._config.reference.jquery !== 'undefined') {\n            referenceElement = this._config.reference[0];\n          }\n        } // If boundary is not `scrollParent`, then set position to `static`\n        // to allow the menu to \"escape\" the scroll parent's boundaries\n        // https://github.com/twbs/bootstrap/issues/24251\n\n\n        if (this._config.boundary !== 'scrollParent') {\n          $__default[\"default\"](parent).addClass(CLASS_NAME_POSITION_STATIC);\n        }\n\n        this._popper = new Popper__default[\"default\"](referenceElement, this._menu, this._getPopperConfig());\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && $__default[\"default\"](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n        $__default[\"default\"](document.body).children().on('mouseover', null, $__default[\"default\"].noop);\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      $__default[\"default\"](this._menu).toggleClass(CLASS_NAME_SHOW$5);\n      $__default[\"default\"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default[\"default\"].Event(EVENT_SHOWN$3, relatedTarget));\n    };\n\n    _proto.hide = function hide() {\n      if (this._element.disabled || $__default[\"default\"](this._element).hasClass(CLASS_NAME_DISABLED$1) || !$__default[\"default\"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var hideEvent = $__default[\"default\"].Event(EVENT_HIDE$3, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $__default[\"default\"](parent).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      $__default[\"default\"](this._menu).toggleClass(CLASS_NAME_SHOW$5);\n      $__default[\"default\"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default[\"default\"].Event(EVENT_HIDDEN$3, relatedTarget));\n    };\n\n    _proto.dispose = function dispose() {\n      $__default[\"default\"].removeData(this._element, DATA_KEY$6);\n      $__default[\"default\"](this._element).off(EVENT_KEY$6);\n      this._element = null;\n      this._menu = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    _proto.update = function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Private\n    ;\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this = this;\n\n      $__default[\"default\"](this._element).on(EVENT_CLICK, function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        _this.toggle();\n      });\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, this.constructor.Default, $__default[\"default\"](this._element).data(), config);\n      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getMenuElement = function _getMenuElement() {\n      if (!this._menu) {\n        var parent = Dropdown._getParentFromElement(this._element);\n\n        if (parent) {\n          this._menu = parent.querySelector(SELECTOR_MENU);\n        }\n      }\n\n      return this._menu;\n    };\n\n    _proto._getPlacement = function _getPlacement() {\n      var $parentDropdown = $__default[\"default\"](this._element.parentNode);\n      var placement = PLACEMENT_BOTTOM; // Handle dropup\n\n      if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n        placement = $__default[\"default\"](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n        placement = PLACEMENT_RIGHT;\n      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n        placement = PLACEMENT_LEFT;\n      } else if ($__default[\"default\"](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n        placement = PLACEMENT_BOTTOMEND;\n      }\n\n      return placement;\n    };\n\n    _proto._detectNavbar = function _detectNavbar() {\n      return $__default[\"default\"](this._element).closest('.navbar').length > 0;\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this2 = this;\n\n      var offset = {};\n\n      if (typeof this._config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element));\n          return data;\n        };\n      } else {\n        offset.offset = this._config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getPopperConfig = function _getPopperConfig() {\n      var popperConfig = {\n        placement: this._getPlacement(),\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            enabled: this._config.flip\n          },\n          preventOverflow: {\n            boundariesElement: this._config.boundary\n          }\n        }\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        popperConfig.modifiers.applyStyle = {\n          enabled: false\n        };\n      }\n\n      return _extends({}, popperConfig, this._config.popperConfig);\n    } // Static\n    ;\n\n    Dropdown._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $__default[\"default\"](this).data(DATA_KEY$6);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data) {\n          data = new Dropdown(this, _config);\n          $__default[\"default\"](this).data(DATA_KEY$6, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    Dropdown._clearMenus = function _clearMenus(event) {\n      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n        return;\n      }\n\n      var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));\n\n      for (var i = 0, len = toggles.length; i < len; i++) {\n        var parent = Dropdown._getParentFromElement(toggles[i]);\n\n        var context = $__default[\"default\"](toggles[i]).data(DATA_KEY$6);\n        var relatedTarget = {\n          relatedTarget: toggles[i]\n        };\n\n        if (event && event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n\n        if (!context) {\n          continue;\n        }\n\n        var dropdownMenu = context._menu;\n\n        if (!$__default[\"default\"](parent).hasClass(CLASS_NAME_SHOW$5)) {\n          continue;\n        }\n\n        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default[\"default\"].contains(parent, event.target)) {\n          continue;\n        }\n\n        var hideEvent = $__default[\"default\"].Event(EVENT_HIDE$3, relatedTarget);\n        $__default[\"default\"](parent).trigger(hideEvent);\n\n        if (hideEvent.isDefaultPrevented()) {\n          continue;\n        } // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n          $__default[\"default\"](document.body).children().off('mouseover', null, $__default[\"default\"].noop);\n        }\n\n        toggles[i].setAttribute('aria-expanded', 'false');\n\n        if (context._popper) {\n          context._popper.destroy();\n        }\n\n        $__default[\"default\"](dropdownMenu).removeClass(CLASS_NAME_SHOW$5);\n        $__default[\"default\"](parent).removeClass(CLASS_NAME_SHOW$5).trigger($__default[\"default\"].Event(EVENT_HIDDEN$3, relatedTarget));\n      }\n    };\n\n    Dropdown._getParentFromElement = function _getParentFromElement(element) {\n      var parent;\n      var selector = Util.getSelectorFromElement(element);\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      return parent || element.parentNode;\n    } // eslint-disable-next-line complexity\n    ;\n\n    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE$1 && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default[\"default\"](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n        return;\n      }\n\n      if (this.disabled || $__default[\"default\"](this).hasClass(CLASS_NAME_DISABLED$1)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this);\n\n      var isActive = $__default[\"default\"](parent).hasClass(CLASS_NAME_SHOW$5);\n\n      if (!isActive && event.which === ESCAPE_KEYCODE$1) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (!isActive || event.which === ESCAPE_KEYCODE$1 || event.which === SPACE_KEYCODE) {\n        if (event.which === ESCAPE_KEYCODE$1) {\n          $__default[\"default\"](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');\n        }\n\n        $__default[\"default\"](this).trigger('click');\n        return;\n      }\n\n      var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {\n        return $__default[\"default\"](item).is(':visible');\n      });\n\n      if (items.length === 0) {\n        return;\n      }\n\n      var index = items.indexOf(event.target);\n\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // Up\n        index--;\n      }\n\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // Down\n        index++;\n      }\n\n      if (index < 0) {\n        index = 0;\n      }\n\n      items[index].focus();\n    };\n\n    _createClass(Dropdown, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$6;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$5;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$5;\n      }\n    }]);\n\n    return Dropdown;\n  }();\n  /**\n   * Data API implementation\n   */\n\n\n  $__default[\"default\"](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$2 + \" \" + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    Dropdown._jQueryInterface.call($__default[\"default\"](this), 'toggle');\n  }).on(EVENT_CLICK_DATA_API$2, SELECTOR_FORM_CHILD, function (e) {\n    e.stopPropagation();\n  });\n  /**\n   * jQuery\n   */\n\n  $__default[\"default\"].fn[NAME$6] = Dropdown._jQueryInterface;\n  $__default[\"default\"].fn[NAME$6].Constructor = Dropdown;\n\n  $__default[\"default\"].fn[NAME$6].noConflict = function () {\n    $__default[\"default\"].fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n    return Dropdown._jQueryInterface;\n  };\n\n  /**\n   * Constants\n   */\n\n  var NAME$5 = 'modal';\n  var VERSION$5 = '4.6.2';\n  var DATA_KEY$5 = 'bs.modal';\n  var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n  var DATA_API_KEY$2 = '.data-api';\n  var JQUERY_NO_CONFLICT$5 = $__default[\"default\"].fn[NAME$5];\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';\n  var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';\n  var CLASS_NAME_BACKDROP = 'modal-backdrop';\n  var CLASS_NAME_OPEN = 'modal-open';\n  var CLASS_NAME_FADE$4 = 'fade';\n  var CLASS_NAME_SHOW$4 = 'show';\n  var CLASS_NAME_STATIC = 'modal-static';\n  var EVENT_HIDE$2 = \"hide\" + EVENT_KEY$5;\n  var EVENT_HIDE_PREVENTED = \"hidePrevented\" + EVENT_KEY$5;\n  var EVENT_HIDDEN$2 = \"hidden\" + EVENT_KEY$5;\n  var EVENT_SHOW$2 = \"show\" + EVENT_KEY$5;\n  var EVENT_SHOWN$2 = \"shown\" + EVENT_KEY$5;\n  var EVENT_FOCUSIN = \"focusin\" + EVENT_KEY$5;\n  var EVENT_RESIZE = \"resize\" + EVENT_KEY$5;\n  var EVENT_CLICK_DISMISS$1 = \"click.dismiss\" + EVENT_KEY$5;\n  var EVENT_KEYDOWN_DISMISS = \"keydown.dismiss\" + EVENT_KEY$5;\n  var EVENT_MOUSEUP_DISMISS = \"mouseup.dismiss\" + EVENT_KEY$5;\n  var EVENT_MOUSEDOWN_DISMISS = \"mousedown.dismiss\" + EVENT_KEY$5;\n  var EVENT_CLICK_DATA_API$1 = \"click\" + EVENT_KEY$5 + DATA_API_KEY$2;\n  var SELECTOR_DIALOG = '.modal-dialog';\n  var SELECTOR_MODAL_BODY = '.modal-body';\n  var SELECTOR_DATA_TOGGLE$1 = '[data-toggle=\"modal\"]';\n  var SELECTOR_DATA_DISMISS$1 = '[data-dismiss=\"modal\"]';\n  var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  var SELECTOR_STICKY_CONTENT = '.sticky-top';\n  var Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true,\n    show: true\n  };\n  var DefaultType$4 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean',\n    show: 'boolean'\n  };\n  /**\n   * Class definition\n   */\n\n  var Modal = /*#__PURE__*/function () {\n    function Modal(element, config) {\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._dialog = element.querySelector(SELECTOR_DIALOG);\n      this._backdrop = null;\n      this._isShown = false;\n      this._isBodyOverflowing = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollbarWidth = 0;\n    } // Getters\n\n\n    var _proto = Modal.prototype;\n\n    // Public\n    _proto.toggle = function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    };\n\n    _proto.show = function show(relatedTarget) {\n      var _this = this;\n\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var showEvent = $__default[\"default\"].Event(EVENT_SHOW$2, {\n        relatedTarget: relatedTarget\n      });\n      $__default[\"default\"](this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if ($__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE$4)) {\n        this._isTransitioning = true;\n      }\n\n      this._checkScrollbar();\n\n      this._setScrollbar();\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $__default[\"default\"](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function (event) {\n        return _this.hide(event);\n      });\n      $__default[\"default\"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {\n        $__default[\"default\"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {\n          if ($__default[\"default\"](event.target).is(_this._element)) {\n            _this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(function () {\n        return _this._showElement(relatedTarget);\n      });\n    };\n\n    _proto.hide = function hide(event) {\n      var _this2 = this;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var hideEvent = $__default[\"default\"].Event(EVENT_HIDE$2);\n      $__default[\"default\"](this._element).trigger(hideEvent);\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = false;\n      var transition = $__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE$4);\n\n      if (transition) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $__default[\"default\"](document).off(EVENT_FOCUSIN);\n      $__default[\"default\"](this._element).removeClass(CLASS_NAME_SHOW$4);\n      $__default[\"default\"](this._element).off(EVENT_CLICK_DISMISS$1);\n      $__default[\"default\"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $__default[\"default\"](this._element).one(Util.TRANSITION_END, function (event) {\n          return _this2._hideModal(event);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        this._hideModal();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      [window, this._element, this._dialog].forEach(function (htmlElement) {\n        return $__default[\"default\"](htmlElement).off(EVENT_KEY$5);\n      });\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      $__default[\"default\"](document).off(EVENT_FOCUSIN);\n      $__default[\"default\"].removeData(this._element, DATA_KEY$5);\n      this._config = null;\n      this._element = null;\n      this._dialog = null;\n      this._backdrop = null;\n      this._isShown = null;\n      this._isBodyOverflowing = null;\n      this._ignoreBackdropClick = null;\n      this._isTransitioning = null;\n      this._scrollbarWidth = null;\n    };\n\n    _proto.handleUpdate = function handleUpdate() {\n      this._adjustDialog();\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, Default$4, config);\n      Util.typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    };\n\n    _proto._triggerBackdropTransition = function _triggerBackdropTransition() {\n      var _this3 = this;\n\n      var hideEventPrevented = $__default[\"default\"].Event(EVENT_HIDE_PREVENTED);\n      $__default[\"default\"](this._element).trigger(hideEventPrevented);\n\n      if (hideEventPrevented.isDefaultPrevented()) {\n        return;\n      }\n\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!isModalOverflowing) {\n        this._element.style.overflowY = 'hidden';\n      }\n\n      this._element.classList.add(CLASS_NAME_STATIC);\n\n      var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n      $__default[\"default\"](this._element).off(Util.TRANSITION_END);\n      $__default[\"default\"](this._element).one(Util.TRANSITION_END, function () {\n        _this3._element.classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          $__default[\"default\"](_this3._element).one(Util.TRANSITION_END, function () {\n            _this3._element.style.overflowY = '';\n          }).emulateTransitionEnd(_this3._element, modalTransitionDuration);\n        }\n      }).emulateTransitionEnd(modalTransitionDuration);\n\n      this._element.focus();\n    };\n\n    _proto._showElement = function _showElement(relatedTarget) {\n      var _this4 = this;\n\n      var transition = $__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE$4);\n      var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      if ($__default[\"default\"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n        modalBody.scrollTop = 0;\n      } else {\n        this._element.scrollTop = 0;\n      }\n\n      if (transition) {\n        Util.reflow(this._element);\n      }\n\n      $__default[\"default\"](this._element).addClass(CLASS_NAME_SHOW$4);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      var shownEvent = $__default[\"default\"].Event(EVENT_SHOWN$2, {\n        relatedTarget: relatedTarget\n      });\n\n      var transitionComplete = function transitionComplete() {\n        if (_this4._config.focus) {\n          _this4._element.focus();\n        }\n\n        _this4._isTransitioning = false;\n        $__default[\"default\"](_this4._element).trigger(shownEvent);\n      };\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n        $__default[\"default\"](this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n      } else {\n        transitionComplete();\n      }\n    };\n\n    _proto._enforceFocus = function _enforceFocus() {\n      var _this5 = this;\n\n      $__default[\"default\"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop\n      .on(EVENT_FOCUSIN, function (event) {\n        if (document !== event.target && _this5._element !== event.target && $__default[\"default\"](_this5._element).has(event.target).length === 0) {\n          _this5._element.focus();\n        }\n      });\n    };\n\n    _proto._setEscapeEvent = function _setEscapeEvent() {\n      var _this6 = this;\n\n      if (this._isShown) {\n        $__default[\"default\"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {\n          if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {\n            event.preventDefault();\n\n            _this6.hide();\n          } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {\n            _this6._triggerBackdropTransition();\n          }\n        });\n      } else if (!this._isShown) {\n        $__default[\"default\"](this._element).off(EVENT_KEYDOWN_DISMISS);\n      }\n    };\n\n    _proto._setResizeEvent = function _setResizeEvent() {\n      var _this7 = this;\n\n      if (this._isShown) {\n        $__default[\"default\"](window).on(EVENT_RESIZE, function (event) {\n          return _this7.handleUpdate(event);\n        });\n      } else {\n        $__default[\"default\"](window).off(EVENT_RESIZE);\n      }\n    };\n\n    _proto._hideModal = function _hideModal() {\n      var _this8 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._showBackdrop(function () {\n        $__default[\"default\"](document.body).removeClass(CLASS_NAME_OPEN);\n\n        _this8._resetAdjustments();\n\n        _this8._resetScrollbar();\n\n        $__default[\"default\"](_this8._element).trigger(EVENT_HIDDEN$2);\n      });\n    };\n\n    _proto._removeBackdrop = function _removeBackdrop() {\n      if (this._backdrop) {\n        $__default[\"default\"](this._backdrop).remove();\n        this._backdrop = null;\n      }\n    };\n\n    _proto._showBackdrop = function _showBackdrop(callback) {\n      var _this9 = this;\n\n      var animate = $__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE$4) ? CLASS_NAME_FADE$4 : '';\n\n      if (this._isShown && this._config.backdrop) {\n        this._backdrop = document.createElement('div');\n        this._backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (animate) {\n          this._backdrop.classList.add(animate);\n        }\n\n        $__default[\"default\"](this._backdrop).appendTo(document.body);\n        $__default[\"default\"](this._element).on(EVENT_CLICK_DISMISS$1, function (event) {\n          if (_this9._ignoreBackdropClick) {\n            _this9._ignoreBackdropClick = false;\n            return;\n          }\n\n          if (event.target !== event.currentTarget) {\n            return;\n          }\n\n          if (_this9._config.backdrop === 'static') {\n            _this9._triggerBackdropTransition();\n          } else {\n            _this9.hide();\n          }\n        });\n\n        if (animate) {\n          Util.reflow(this._backdrop);\n        }\n\n        $__default[\"default\"](this._backdrop).addClass(CLASS_NAME_SHOW$4);\n\n        if (!callback) {\n          return;\n        }\n\n        if (!animate) {\n          callback();\n          return;\n        }\n\n        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n        $__default[\"default\"](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n      } else if (!this._isShown && this._backdrop) {\n        $__default[\"default\"](this._backdrop).removeClass(CLASS_NAME_SHOW$4);\n\n        var callbackRemove = function callbackRemove() {\n          _this9._removeBackdrop();\n\n          if (callback) {\n            callback();\n          }\n        };\n\n        if ($__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE$4)) {\n          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n          $__default[\"default\"](this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n        } else {\n          callbackRemove();\n        }\n      } else if (callback) {\n        callback();\n      }\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // todo (fat): these should probably be refactored out of modal.js\n    // ----------------------------------------------------------------------\n    ;\n\n    _proto._adjustDialog = function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!this._isBodyOverflowing && isModalOverflowing) {\n        this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n      }\n\n      if (this._isBodyOverflowing && !isModalOverflowing) {\n        this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n      }\n    };\n\n    _proto._resetAdjustments = function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    };\n\n    _proto._checkScrollbar = function _checkScrollbar() {\n      var rect = document.body.getBoundingClientRect();\n      this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;\n      this._scrollbarWidth = this._getScrollbarWidth();\n    };\n\n    _proto._setScrollbar = function _setScrollbar() {\n      var _this10 = this;\n\n      if (this._isBodyOverflowing) {\n        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n        var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));\n        var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding\n\n        $__default[\"default\"](fixedContent).each(function (index, element) {\n          var actualPadding = element.style.paddingRight;\n          var calculatedPadding = $__default[\"default\"](element).css('padding-right');\n          $__default[\"default\"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + \"px\");\n        }); // Adjust sticky content margin\n\n        $__default[\"default\"](stickyContent).each(function (index, element) {\n          var actualMargin = element.style.marginRight;\n          var calculatedMargin = $__default[\"default\"](element).css('margin-right');\n          $__default[\"default\"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + \"px\");\n        }); // Adjust body padding\n\n        var actualPadding = document.body.style.paddingRight;\n        var calculatedPadding = $__default[\"default\"](document.body).css('padding-right');\n        $__default[\"default\"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n      }\n\n      $__default[\"default\"](document.body).addClass(CLASS_NAME_OPEN);\n    };\n\n    _proto._resetScrollbar = function _resetScrollbar() {\n      // Restore fixed content padding\n      var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));\n      $__default[\"default\"](fixedContent).each(function (index, element) {\n        var padding = $__default[\"default\"](element).data('padding-right');\n        $__default[\"default\"](element).removeData('padding-right');\n        element.style.paddingRight = padding ? padding : '';\n      }); // Restore sticky content\n\n      var elements = [].slice.call(document.querySelectorAll(\"\" + SELECTOR_STICKY_CONTENT));\n      $__default[\"default\"](elements).each(function (index, element) {\n        var margin = $__default[\"default\"](element).data('margin-right');\n\n        if (typeof margin !== 'undefined') {\n          $__default[\"default\"](element).css('margin-right', margin).removeData('margin-right');\n        }\n      }); // Restore body padding\n\n      var padding = $__default[\"default\"](document.body).data('padding-right');\n      $__default[\"default\"](document.body).removeData('padding-right');\n      document.body.style.paddingRight = padding ? padding : '';\n    };\n\n    _proto._getScrollbarWidth = function _getScrollbarWidth() {\n      // thx d.walsh\n      var scrollDiv = document.createElement('div');\n      scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;\n      document.body.appendChild(scrollDiv);\n      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n      return scrollbarWidth;\n    } // Static\n    ;\n\n    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = $__default[\"default\"](this).data(DATA_KEY$5);\n\n        var _config = _extends({}, Default$4, $__default[\"default\"](this).data(), typeof config === 'object' && config ? config : {});\n\n        if (!data) {\n          data = new Modal(this, _config);\n          $__default[\"default\"](this).data(DATA_KEY$5, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](relatedTarget);\n        } else if (_config.show) {\n          data.show(relatedTarget);\n        }\n      });\n    };\n\n    _createClass(Modal, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$5;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$4;\n      }\n    }]);\n\n    return Modal;\n  }();\n  /**\n   * Data API implementation\n   */\n\n\n  $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    var _this11 = this;\n\n    var target;\n    var selector = Util.getSelectorFromElement(this);\n\n    if (selector) {\n      target = document.querySelector(selector);\n    }\n\n    var config = $__default[\"default\"](target).data(DATA_KEY$5) ? 'toggle' : _extends({}, $__default[\"default\"](target).data(), $__default[\"default\"](this).data());\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault();\n    }\n\n    var $target = $__default[\"default\"](target).one(EVENT_SHOW$2, function (showEvent) {\n      if (showEvent.isDefaultPrevented()) {\n        // Only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      $target.one(EVENT_HIDDEN$2, function () {\n        if ($__default[\"default\"](_this11).is(':visible')) {\n          _this11.focus();\n        }\n      });\n    });\n\n    Modal._jQueryInterface.call($__default[\"default\"](target), config, this);\n  });\n  /**\n   * jQuery\n   */\n\n  $__default[\"default\"].fn[NAME$5] = Modal._jQueryInterface;\n  $__default[\"default\"].fn[NAME$5].Constructor = Modal;\n\n  $__default[\"default\"].fn[NAME$5].noConflict = function () {\n    $__default[\"default\"].fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n    return Modal._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.6.2): tools/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.indexOf(attrName) !== -1) {\n      if (uriAttrs.indexOf(attrName) !== -1) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    var regExp = allowedAttributeList.filter(function (attrRegex) {\n      return attrRegex instanceof RegExp;\n    }); // Check if a regular expression validates the attribute.\n\n    for (var i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    var domParser = new window.DOMParser();\n    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    var whitelistKeys = Object.keys(whiteList);\n    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n    var _loop = function _loop(i, len) {\n      var el = elements[i];\n      var elName = el.nodeName.toLowerCase();\n\n      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n        el.parentNode.removeChild(el);\n        return \"continue\";\n      }\n\n      var attributeList = [].slice.call(el.attributes); // eslint-disable-next-line unicorn/prefer-spread\n\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n      attributeList.forEach(function (attr) {\n        if (!allowedAttribute(attr, whitelistedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    };\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var _ret = _loop(i);\n\n      if (_ret === \"continue\") continue;\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * Constants\n   */\n\n  var NAME$4 = 'tooltip';\n  var VERSION$4 = '4.6.2';\n  var DATA_KEY$4 = 'bs.tooltip';\n  var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n  var JQUERY_NO_CONFLICT$4 = $__default[\"default\"].fn[NAME$4];\n  var CLASS_PREFIX$1 = 'bs-tooltip';\n  var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n  var CLASS_NAME_FADE$3 = 'fade';\n  var CLASS_NAME_SHOW$3 = 'show';\n  var HOVER_STATE_SHOW = 'show';\n  var HOVER_STATE_OUT = 'out';\n  var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  var SELECTOR_ARROW = '.arrow';\n  var TRIGGER_HOVER = 'hover';\n  var TRIGGER_FOCUS = 'focus';\n  var TRIGGER_CLICK = 'click';\n  var TRIGGER_MANUAL = 'manual';\n  var AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: 'right',\n    BOTTOM: 'bottom',\n    LEFT: 'left'\n  };\n  var Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: 0,\n    container: false,\n    fallbackPlacement: 'flip',\n    boundary: 'scrollParent',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    whiteList: DefaultWhitelist,\n    popperConfig: null\n  };\n  var DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(number|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacement: '(string|array)',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    whiteList: 'object',\n    popperConfig: '(null|object)'\n  };\n  var Event$1 = {\n    HIDE: \"hide\" + EVENT_KEY$4,\n    HIDDEN: \"hidden\" + EVENT_KEY$4,\n    SHOW: \"show\" + EVENT_KEY$4,\n    SHOWN: \"shown\" + EVENT_KEY$4,\n    INSERTED: \"inserted\" + EVENT_KEY$4,\n    CLICK: \"click\" + EVENT_KEY$4,\n    FOCUSIN: \"focusin\" + EVENT_KEY$4,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$4,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$4,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$4\n  };\n  /**\n   * Class definition\n   */\n\n  var Tooltip = /*#__PURE__*/function () {\n    function Tooltip(element, config) {\n      if (typeof Popper__default[\"default\"] === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      } // Private\n\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this.element = element;\n      this.config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Tooltip.prototype;\n\n    // Public\n    _proto.enable = function enable() {\n      this._isEnabled = true;\n    };\n\n    _proto.disable = function disable() {\n      this._isEnabled = false;\n    };\n\n    _proto.toggleEnabled = function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    };\n\n    _proto.toggle = function toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        var dataKey = this.constructor.DATA_KEY;\n        var context = $__default[\"default\"](event.currentTarget).data(dataKey);\n\n        if (!context) {\n          context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n          $__default[\"default\"](event.currentTarget).data(dataKey, context);\n        }\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if ($__default[\"default\"](this.getTipElement()).hasClass(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      $__default[\"default\"].removeData(this.element, this.constructor.DATA_KEY);\n      $__default[\"default\"](this.element).off(this.constructor.EVENT_KEY);\n      $__default[\"default\"](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        $__default[\"default\"](this.tip).remove();\n      }\n\n      this._isEnabled = null;\n      this._timeout = null;\n      this._hoverState = null;\n      this._activeTrigger = null;\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n      this.element = null;\n      this.config = null;\n      this.tip = null;\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if ($__default[\"default\"](this.element).css('display') === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      var showEvent = $__default[\"default\"].Event(this.constructor.Event.SHOW);\n\n      if (this.isWithContent() && this._isEnabled) {\n        $__default[\"default\"](this.element).trigger(showEvent);\n        var shadowRoot = Util.findShadowRoot(this.element);\n        var isInTheDom = $__default[\"default\"].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n        if (showEvent.isDefaultPrevented() || !isInTheDom) {\n          return;\n        }\n\n        var tip = this.getTipElement();\n        var tipId = Util.getUID(this.constructor.NAME);\n        tip.setAttribute('id', tipId);\n        this.element.setAttribute('aria-describedby', tipId);\n        this.setContent();\n\n        if (this.config.animation) {\n          $__default[\"default\"](tip).addClass(CLASS_NAME_FADE$3);\n        }\n\n        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n        var attachment = this._getAttachment(placement);\n\n        this.addAttachmentClass(attachment);\n\n        var container = this._getContainer();\n\n        $__default[\"default\"](tip).data(this.constructor.DATA_KEY, this);\n\n        if (!$__default[\"default\"].contains(this.element.ownerDocument.documentElement, this.tip)) {\n          $__default[\"default\"](tip).appendTo(container);\n        }\n\n        $__default[\"default\"](this.element).trigger(this.constructor.Event.INSERTED);\n        this._popper = new Popper__default[\"default\"](this.element, tip, this._getPopperConfig(attachment));\n        $__default[\"default\"](tip).addClass(CLASS_NAME_SHOW$3);\n        $__default[\"default\"](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n          $__default[\"default\"](document.body).children().on('mouseover', null, $__default[\"default\"].noop);\n        }\n\n        var complete = function complete() {\n          if (_this.config.animation) {\n            _this._fixTransition();\n          }\n\n          var prevHoverState = _this._hoverState;\n          _this._hoverState = null;\n          $__default[\"default\"](_this.element).trigger(_this.constructor.Event.SHOWN);\n\n          if (prevHoverState === HOVER_STATE_OUT) {\n            _this._leave(null, _this);\n          }\n        };\n\n        if ($__default[\"default\"](this.tip).hasClass(CLASS_NAME_FADE$3)) {\n          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n          $__default[\"default\"](this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n        } else {\n          complete();\n        }\n      }\n    };\n\n    _proto.hide = function hide(callback) {\n      var _this2 = this;\n\n      var tip = this.getTipElement();\n      var hideEvent = $__default[\"default\"].Event(this.constructor.Event.HIDE);\n\n      var complete = function complete() {\n        if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n          tip.parentNode.removeChild(tip);\n        }\n\n        _this2._cleanTipClass();\n\n        _this2.element.removeAttribute('aria-describedby');\n\n        $__default[\"default\"](_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n        if (_this2._popper !== null) {\n          _this2._popper.destroy();\n        }\n\n        if (callback) {\n          callback();\n        }\n      };\n\n      $__default[\"default\"](this.element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $__default[\"default\"](tip).removeClass(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        $__default[\"default\"](document.body).children().off('mouseover', null, $__default[\"default\"].noop);\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n\n      if ($__default[\"default\"](this.tip).hasClass(CLASS_NAME_FADE$3)) {\n        var transitionDuration = Util.getTransitionDurationFromElement(tip);\n        $__default[\"default\"](tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n\n      this._hoverState = '';\n    };\n\n    _proto.update = function update() {\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Protected\n    ;\n\n    _proto.isWithContent = function isWithContent() {\n      return Boolean(this.getTitle());\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $__default[\"default\"](this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $__default[\"default\"](this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var tip = this.getTipElement();\n      this.setElementContent($__default[\"default\"](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());\n      $__default[\"default\"](tip).removeClass(CLASS_NAME_FADE$3 + \" \" + CLASS_NAME_SHOW$3);\n    };\n\n    _proto.setElementContent = function setElementContent($element, content) {\n      if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n        // Content is a DOM node or a jQuery\n        if (this.config.html) {\n          if (!$__default[\"default\"](content).parent().is($element)) {\n            $element.empty().append(content);\n          }\n        } else {\n          $element.text($__default[\"default\"](content).text());\n        }\n\n        return;\n      }\n\n      if (this.config.html) {\n        if (this.config.sanitize) {\n          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n        }\n\n        $element.html(content);\n      } else {\n        $element.text(content);\n      }\n    };\n\n    _proto.getTitle = function getTitle() {\n      var title = this.element.getAttribute('data-original-title');\n\n      if (!title) {\n        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n      }\n\n      return title;\n    } // Private\n    ;\n\n    _proto._getPopperConfig = function _getPopperConfig(attachment) {\n      var _this3 = this;\n\n      var defaultBsConfig = {\n        placement: attachment,\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            behavior: this.config.fallbackPlacement\n          },\n          arrow: {\n            element: SELECTOR_ARROW\n          },\n          preventOverflow: {\n            boundariesElement: this.config.boundary\n          }\n        },\n        onCreate: function onCreate(data) {\n          if (data.originalPlacement !== data.placement) {\n            _this3._handlePopperPlacementChange(data);\n          }\n        },\n        onUpdate: function onUpdate(data) {\n          return _this3._handlePopperPlacementChange(data);\n        }\n      };\n      return _extends({}, defaultBsConfig, this.config.popperConfig);\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this4 = this;\n\n      var offset = {};\n\n      if (typeof this.config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element));\n          return data;\n        };\n      } else {\n        offset.offset = this.config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getContainer = function _getContainer() {\n      if (this.config.container === false) {\n        return document.body;\n      }\n\n      if (Util.isElement(this.config.container)) {\n        return $__default[\"default\"](this.config.container);\n      }\n\n      return $__default[\"default\"](document).find(this.config.container);\n    };\n\n    _proto._getAttachment = function _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this5 = this;\n\n      var triggers = this.config.trigger.split(' ');\n      triggers.forEach(function (trigger) {\n        if (trigger === 'click') {\n          $__default[\"default\"](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {\n            return _this5.toggle(event);\n          });\n        } else if (trigger !== TRIGGER_MANUAL) {\n          var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;\n          var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;\n          $__default[\"default\"](_this5.element).on(eventIn, _this5.config.selector, function (event) {\n            return _this5._enter(event);\n          }).on(eventOut, _this5.config.selector, function (event) {\n            return _this5._leave(event);\n          });\n        }\n      });\n\n      this._hideModalHandler = function () {\n        if (_this5.element) {\n          _this5.hide();\n        }\n      };\n\n      $__default[\"default\"](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);\n\n      if (this.config.selector) {\n        this.config = _extends({}, this.config, {\n          trigger: 'manual',\n          selector: ''\n        });\n      } else {\n        this._fixTitle();\n      }\n    };\n\n    _proto._fixTitle = function _fixTitle() {\n      var titleType = typeof this.element.getAttribute('data-original-title');\n\n      if (this.element.getAttribute('title') || titleType !== 'string') {\n        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n        this.element.setAttribute('title', '');\n      }\n    };\n\n    _proto._enter = function _enter(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $__default[\"default\"](event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $__default[\"default\"](event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if ($__default[\"default\"](context.getTipElement()).hasClass(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context.config.delay || !context.config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context.config.delay.show);\n    };\n\n    _proto._leave = function _leave(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $__default[\"default\"](event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $__default[\"default\"](event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context.config.delay || !context.config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context.config.delay.hide);\n    };\n\n    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n      for (var trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      var dataAttributes = $__default[\"default\"](this.element).data();\n      Object.keys(dataAttributes).forEach(function (dataAttr) {\n        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n      }\n\n      return config;\n    };\n\n    _proto._getDelegateConfig = function _getDelegateConfig() {\n      var config = {};\n\n      if (this.config) {\n        for (var key in this.config) {\n          if (this.constructor.Default[key] !== this.config[key]) {\n            config[key] = this.config[key];\n          }\n        }\n      }\n\n      return config;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $__default[\"default\"](this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    };\n\n    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n      this.tip = popperData.instance.popper;\n\n      this._cleanTipClass();\n\n      this.addAttachmentClass(this._getAttachment(popperData.placement));\n    };\n\n    _proto._fixTransition = function _fixTransition() {\n      var tip = this.getTipElement();\n      var initConfigAnimation = this.config.animation;\n\n      if (tip.getAttribute('x-placement') !== null) {\n        return;\n      }\n\n      $__default[\"default\"](tip).removeClass(CLASS_NAME_FADE$3);\n      this.config.animation = false;\n      this.hide();\n      this.show();\n      this.config.animation = initConfigAnimation;\n    } // Static\n    ;\n\n    Tooltip._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $__default[\"default\"](this);\n        var data = $element.data(DATA_KEY$4);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Tooltip(this, _config);\n          $element.data(DATA_KEY$4, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tooltip, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$4;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$3;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$4;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$4;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$1;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$4;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$3;\n      }\n    }]);\n\n    return Tooltip;\n  }();\n  /**\n   * jQuery\n   */\n\n\n  $__default[\"default\"].fn[NAME$4] = Tooltip._jQueryInterface;\n  $__default[\"default\"].fn[NAME$4].Constructor = Tooltip;\n\n  $__default[\"default\"].fn[NAME$4].noConflict = function () {\n    $__default[\"default\"].fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n    return Tooltip._jQueryInterface;\n  };\n\n  /**\n   * Constants\n   */\n\n  var NAME$3 = 'popover';\n  var VERSION$3 = '4.6.2';\n  var DATA_KEY$3 = 'bs.popover';\n  var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n  var JQUERY_NO_CONFLICT$3 = $__default[\"default\"].fn[NAME$3];\n  var CLASS_PREFIX = 'bs-popover';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var CLASS_NAME_FADE$2 = 'fade';\n  var CLASS_NAME_SHOW$2 = 'show';\n  var SELECTOR_TITLE = '.popover-header';\n  var SELECTOR_CONTENT = '.popover-body';\n\n  var Default$2 = _extends({}, Tooltip.Default, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n  });\n\n  var DefaultType$2 = _extends({}, Tooltip.DefaultType, {\n    content: '(string|element|function)'\n  });\n\n  var Event = {\n    HIDE: \"hide\" + EVENT_KEY$3,\n    HIDDEN: \"hidden\" + EVENT_KEY$3,\n    SHOW: \"show\" + EVENT_KEY$3,\n    SHOWN: \"shown\" + EVENT_KEY$3,\n    INSERTED: \"inserted\" + EVENT_KEY$3,\n    CLICK: \"click\" + EVENT_KEY$3,\n    FOCUSIN: \"focusin\" + EVENT_KEY$3,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$3,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$3,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$3\n  };\n  /**\n   * Class definition\n   */\n\n  var Popover = /*#__PURE__*/function (_Tooltip) {\n    _inheritsLoose(Popover, _Tooltip);\n\n    function Popover() {\n      return _Tooltip.apply(this, arguments) || this;\n    }\n\n    var _proto = Popover.prototype;\n\n    // Overrides\n    _proto.isWithContent = function isWithContent() {\n      return this.getTitle() || this._getContent();\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $__default[\"default\"](this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $__default[\"default\"](this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $__default[\"default\"](this.getTipElement()); // We use append for html objects to maintain js events\n\n      this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());\n\n      var content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this.element);\n      }\n\n      this.setElementContent($tip.find(SELECTOR_CONTENT), content);\n      $tip.removeClass(CLASS_NAME_FADE$2 + \" \" + CLASS_NAME_SHOW$2);\n    } // Private\n    ;\n\n    _proto._getContent = function _getContent() {\n      return this.element.getAttribute('data-content') || this.config.content;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $__default[\"default\"](this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    } // Static\n    ;\n\n    Popover._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $__default[\"default\"](this).data(DATA_KEY$3);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Popover(this, _config);\n          $__default[\"default\"](this).data(DATA_KEY$3, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Popover, null, [{\n      key: \"VERSION\",\n      get: // Getters\n      function get() {\n        return VERSION$3;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$2;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$3;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$3;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$3;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$2;\n      }\n    }]);\n\n    return Popover;\n  }(Tooltip);\n  /**\n   * jQuery\n   */\n\n\n  $__default[\"default\"].fn[NAME$3] = Popover._jQueryInterface;\n  $__default[\"default\"].fn[NAME$3].Constructor = Popover;\n\n  $__default[\"default\"].fn[NAME$3].noConflict = function () {\n    $__default[\"default\"].fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n    return Popover._jQueryInterface;\n  };\n\n  /**\n   * Constants\n   */\n\n  var NAME$2 = 'scrollspy';\n  var VERSION$2 = '4.6.2';\n  var DATA_KEY$2 = 'bs.scrollspy';\n  var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n  var DATA_API_KEY$1 = '.data-api';\n  var JQUERY_NO_CONFLICT$2 = $__default[\"default\"].fn[NAME$2];\n  var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  var CLASS_NAME_ACTIVE$1 = 'active';\n  var EVENT_ACTIVATE = \"activate\" + EVENT_KEY$2;\n  var EVENT_SCROLL = \"scroll\" + EVENT_KEY$2;\n  var EVENT_LOAD_DATA_API = \"load\" + EVENT_KEY$2 + DATA_API_KEY$1;\n  var METHOD_OFFSET = 'offset';\n  var METHOD_POSITION = 'position';\n  var SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]';\n  var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  var SELECTOR_NAV_LINKS = '.nav-link';\n  var SELECTOR_NAV_ITEMS = '.nav-item';\n  var SELECTOR_LIST_ITEMS = '.list-group-item';\n  var SELECTOR_DROPDOWN$1 = '.dropdown';\n  var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';\n  var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  var Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  var DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  /**\n   * Class definition\n   */\n\n  var ScrollSpy = /*#__PURE__*/function () {\n    function ScrollSpy(element, config) {\n      var _this = this;\n\n      this._element = element;\n      this._scrollElement = element.tagName === 'BODY' ? window : element;\n      this._config = this._getConfig(config);\n      this._selector = this._config.target + \" \" + SELECTOR_NAV_LINKS + \",\" + (this._config.target + \" \" + SELECTOR_LIST_ITEMS + \",\") + (this._config.target + \" \" + SELECTOR_DROPDOWN_ITEMS);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      $__default[\"default\"](this._scrollElement).on(EVENT_SCROLL, function (event) {\n        return _this._process(event);\n      });\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    var _proto = ScrollSpy.prototype;\n\n    // Public\n    _proto.refresh = function refresh() {\n      var _this2 = this;\n\n      var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      var targets = [].slice.call(document.querySelectorAll(this._selector));\n      targets.map(function (element) {\n        var target;\n        var targetSelector = Util.getSelectorFromElement(element);\n\n        if (targetSelector) {\n          target = document.querySelector(targetSelector);\n        }\n\n        if (target) {\n          var targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            // TODO (fat): remove sketch reliance on jQuery position/offset\n            return [$__default[\"default\"](target)[offsetMethod]().top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(Boolean).sort(function (a, b) {\n        return a[0] - b[0];\n      }).forEach(function (item) {\n        _this2._offsets.push(item[0]);\n\n        _this2._targets.push(item[1]);\n      });\n    };\n\n    _proto.dispose = function dispose() {\n      $__default[\"default\"].removeData(this._element, DATA_KEY$2);\n      $__default[\"default\"](this._scrollElement).off(EVENT_KEY$2);\n      this._element = null;\n      this._scrollElement = null;\n      this._config = null;\n      this._selector = null;\n      this._offsets = null;\n      this._targets = null;\n      this._activeTarget = null;\n      this._scrollHeight = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, Default$1, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n        var id = $__default[\"default\"](config.target).attr('id');\n\n        if (!id) {\n          id = Util.getUID(NAME$2);\n          $__default[\"default\"](config.target).attr('id', id);\n        }\n\n        config.target = \"#\" + id;\n      }\n\n      Util.typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    };\n\n    _proto._getScrollTop = function _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    };\n\n    _proto._getScrollHeight = function _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    };\n\n    _proto._getOffsetHeight = function _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    };\n\n    _proto._process = function _process() {\n      var scrollTop = this._getScrollTop() + this._config.offset;\n\n      var scrollHeight = this._getScrollHeight();\n\n      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        var target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (var i = this._offsets.length; i--;) {\n        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    };\n\n    _proto._activate = function _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      var queries = this._selector.split(',').map(function (selector) {\n        return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n      });\n\n      var $link = $__default[\"default\"]([].slice.call(document.querySelectorAll(queries.join(','))));\n\n      if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n        $link.closest(SELECTOR_DROPDOWN$1).find(SELECTOR_DROPDOWN_TOGGLE$1).addClass(CLASS_NAME_ACTIVE$1);\n        $link.addClass(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        $link.addClass(CLASS_NAME_ACTIVE$1); // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n        $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_LINKS + \", \" + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$1); // Handle special case when .nav-link is inside .nav-item\n\n        $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$1);\n      }\n\n      $__default[\"default\"](this._scrollElement).trigger(EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    };\n\n    _proto._clear = function _clear() {\n      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n        return node.classList.contains(CLASS_NAME_ACTIVE$1);\n      }).forEach(function (node) {\n        return node.classList.remove(CLASS_NAME_ACTIVE$1);\n      });\n    } // Static\n    ;\n\n    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $__default[\"default\"](this).data(DATA_KEY$2);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new ScrollSpy(this, _config);\n          $__default[\"default\"](this).data(DATA_KEY$2, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(ScrollSpy, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$2;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$1;\n      }\n    }]);\n\n    return ScrollSpy;\n  }();\n  /**\n   * Data API implementation\n   */\n\n\n  $__default[\"default\"](window).on(EVENT_LOAD_DATA_API, function () {\n    var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));\n    var scrollSpysLength = scrollSpys.length;\n\n    for (var i = scrollSpysLength; i--;) {\n      var $spy = $__default[\"default\"](scrollSpys[i]);\n\n      ScrollSpy._jQueryInterface.call($spy, $spy.data());\n    }\n  });\n  /**\n   * jQuery\n   */\n\n  $__default[\"default\"].fn[NAME$2] = ScrollSpy._jQueryInterface;\n  $__default[\"default\"].fn[NAME$2].Constructor = ScrollSpy;\n\n  $__default[\"default\"].fn[NAME$2].noConflict = function () {\n    $__default[\"default\"].fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n    return ScrollSpy._jQueryInterface;\n  };\n\n  /**\n   * Constants\n   */\n\n  var NAME$1 = 'tab';\n  var VERSION$1 = '4.6.2';\n  var DATA_KEY$1 = 'bs.tab';\n  var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT$1 = $__default[\"default\"].fn[NAME$1];\n  var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  var CLASS_NAME_ACTIVE = 'active';\n  var CLASS_NAME_DISABLED = 'disabled';\n  var CLASS_NAME_FADE$1 = 'fade';\n  var CLASS_NAME_SHOW$1 = 'show';\n  var EVENT_HIDE$1 = \"hide\" + EVENT_KEY$1;\n  var EVENT_HIDDEN$1 = \"hidden\" + EVENT_KEY$1;\n  var EVENT_SHOW$1 = \"show\" + EVENT_KEY$1;\n  var EVENT_SHOWN$1 = \"shown\" + EVENT_KEY$1;\n  var EVENT_CLICK_DATA_API = \"click\" + EVENT_KEY$1 + DATA_API_KEY;\n  var SELECTOR_DROPDOWN = '.dropdown';\n  var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  var SELECTOR_ACTIVE = '.active';\n  var SELECTOR_ACTIVE_UL = '> li > .active';\n  var SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]';\n  var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';\n  /**\n   * Class definition\n   */\n\n  var Tab = /*#__PURE__*/function () {\n    function Tab(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Tab.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default[\"default\"](this._element).hasClass(CLASS_NAME_ACTIVE) || $__default[\"default\"](this._element).hasClass(CLASS_NAME_DISABLED) || this._element.hasAttribute('disabled')) {\n        return;\n      }\n\n      var target;\n      var previous;\n      var listElement = $__default[\"default\"](this._element).closest(SELECTOR_NAV_LIST_GROUP)[0];\n      var selector = Util.getSelectorFromElement(this._element);\n\n      if (listElement) {\n        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = $__default[\"default\"].makeArray($__default[\"default\"](listElement).find(itemSelector));\n        previous = previous[previous.length - 1];\n      }\n\n      var hideEvent = $__default[\"default\"].Event(EVENT_HIDE$1, {\n        relatedTarget: this._element\n      });\n      var showEvent = $__default[\"default\"].Event(EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (previous) {\n        $__default[\"default\"](previous).trigger(hideEvent);\n      }\n\n      $__default[\"default\"](this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (selector) {\n        target = document.querySelector(selector);\n      }\n\n      this._activate(this._element, listElement);\n\n      var complete = function complete() {\n        var hiddenEvent = $__default[\"default\"].Event(EVENT_HIDDEN$1, {\n          relatedTarget: _this._element\n        });\n        var shownEvent = $__default[\"default\"].Event(EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n        $__default[\"default\"](previous).trigger(hiddenEvent);\n        $__default[\"default\"](_this._element).trigger(shownEvent);\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $__default[\"default\"].removeData(this._element, DATA_KEY$1);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._activate = function _activate(element, container, callback) {\n      var _this2 = this;\n\n      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $__default[\"default\"](container).find(SELECTOR_ACTIVE_UL) : $__default[\"default\"](container).children(SELECTOR_ACTIVE);\n      var active = activeElements[0];\n      var isTransitioning = callback && active && $__default[\"default\"](active).hasClass(CLASS_NAME_FADE$1);\n\n      var complete = function complete() {\n        return _this2._transitionComplete(element, active, callback);\n      };\n\n      if (active && isTransitioning) {\n        var transitionDuration = Util.getTransitionDurationFromElement(active);\n        $__default[\"default\"](active).removeClass(CLASS_NAME_SHOW$1).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n      if (active) {\n        $__default[\"default\"](active).removeClass(CLASS_NAME_ACTIVE);\n        var dropdownChild = $__default[\"default\"](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];\n\n        if (dropdownChild) {\n          $__default[\"default\"](dropdownChild).removeClass(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      $__default[\"default\"](element).addClass(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      Util.reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      var parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && $__default[\"default\"](parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n        var dropdownElement = $__default[\"default\"](element).closest(SELECTOR_DROPDOWN)[0];\n\n        if (dropdownElement) {\n          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE));\n          $__default[\"default\"](dropdownToggleList).addClass(CLASS_NAME_ACTIVE);\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n    ;\n\n    Tab._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $__default[\"default\"](this);\n        var data = $this.data(DATA_KEY$1);\n\n        if (!data) {\n          data = new Tab(this);\n          $this.data(DATA_KEY$1, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tab, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$1;\n      }\n    }]);\n\n    return Tab;\n  }();\n  /**\n   * Data API implementation\n   */\n\n\n  $__default[\"default\"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    event.preventDefault();\n\n    Tab._jQueryInterface.call($__default[\"default\"](this), 'show');\n  });\n  /**\n   * jQuery\n   */\n\n  $__default[\"default\"].fn[NAME$1] = Tab._jQueryInterface;\n  $__default[\"default\"].fn[NAME$1].Constructor = Tab;\n\n  $__default[\"default\"].fn[NAME$1].noConflict = function () {\n    $__default[\"default\"].fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n    return Tab._jQueryInterface;\n  };\n\n  /**\n   * Constants\n   */\n\n  var NAME = 'toast';\n  var VERSION = '4.6.2';\n  var DATA_KEY = 'bs.toast';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var JQUERY_NO_CONFLICT = $__default[\"default\"].fn[NAME];\n  var CLASS_NAME_FADE = 'fade';\n  var CLASS_NAME_HIDE = 'hide';\n  var CLASS_NAME_SHOW = 'show';\n  var CLASS_NAME_SHOWING = 'showing';\n  var EVENT_CLICK_DISMISS = \"click.dismiss\" + EVENT_KEY;\n  var EVENT_HIDE = \"hide\" + EVENT_KEY;\n  var EVENT_HIDDEN = \"hidden\" + EVENT_KEY;\n  var EVENT_SHOW = \"show\" + EVENT_KEY;\n  var EVENT_SHOWN = \"shown\" + EVENT_KEY;\n  var SELECTOR_DATA_DISMISS = '[data-dismiss=\"toast\"]';\n  var Default = {\n    animation: true,\n    autohide: true,\n    delay: 500\n  };\n  var DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  /**\n   * Class definition\n   */\n\n  var Toast = /*#__PURE__*/function () {\n    function Toast(element, config) {\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._timeout = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Toast.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      var showEvent = $__default[\"default\"].Event(EVENT_SHOW);\n      $__default[\"default\"](this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      var complete = function complete() {\n        _this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        _this._element.classList.add(CLASS_NAME_SHOW);\n\n        $__default[\"default\"](_this._element).trigger(EVENT_SHOWN);\n\n        if (_this._config.autohide) {\n          _this._timeout = setTimeout(function () {\n            _this.hide();\n          }, _this._config.delay);\n        }\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      Util.reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $__default[\"default\"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.hide = function hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      var hideEvent = $__default[\"default\"].Event(EVENT_HIDE);\n      $__default[\"default\"](this._element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._close();\n    };\n\n    _proto.dispose = function dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      $__default[\"default\"](this._element).off(EVENT_CLICK_DISMISS);\n      $__default[\"default\"].removeData(this._element, DATA_KEY);\n      this._element = null;\n      this._config = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, Default, $__default[\"default\"](this._element).data(), typeof config === 'object' && config ? config : {});\n      Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this2 = this;\n\n      $__default[\"default\"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function () {\n        return _this2.hide();\n      });\n    };\n\n    _proto._close = function _close() {\n      var _this3 = this;\n\n      var complete = function complete() {\n        _this3._element.classList.add(CLASS_NAME_HIDE);\n\n        $__default[\"default\"](_this3._element).trigger(EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $__default[\"default\"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._clearTimeout = function _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n    ;\n\n    Toast._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $__default[\"default\"](this);\n        var data = $element.data(DATA_KEY);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new Toast(this, _config);\n          $element.data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](this);\n        }\n      });\n    };\n\n    _createClass(Toast, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n\n    return Toast;\n  }();\n  /**\n   * jQuery\n   */\n\n\n  $__default[\"default\"].fn[NAME] = Toast._jQueryInterface;\n  $__default[\"default\"].fn[NAME].Constructor = Toast;\n\n  $__default[\"default\"].fn[NAME].noConflict = function () {\n    $__default[\"default\"].fn[NAME] = JQUERY_NO_CONFLICT;\n    return Toast._jQueryInterface;\n  };\n\n  exports.Alert = Alert;\n  exports.Button = Button;\n  exports.Carousel = Carousel;\n  exports.Collapse = Collapse;\n  exports.Dropdown = Dropdown;\n  exports.Modal = Modal;\n  exports.Popover = Popover;\n  exports.Scrollspy = ScrollSpy;\n  exports.Tab = Tab;\n  exports.Toast = Toast;\n  exports.Tooltip = Tooltip;\n  exports.Util = Util;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=bootstrap.js.map\n","/*! DataTables 1.12.1\n * ©2008-2022 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * @summary     DataTables\n * @description Paginate, search and order HTML tables\n * @version     1.12.1\n * @author      SpryMedia Ltd\n * @contact     www.datatables.net\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/*jslint evil: true, undef: true, browser: true */\n/*globals $,require,jQuery,define,_selector_run,_selector_opts,_selector_first,_selector_row_indexes,_ext,_Api,_api_register,_api_registerPlural,_re_new_lines,_re_html,_re_formatted_numeric,_re_escape_regex,_empty,_intVal,_numToDecimal,_isNumber,_isHtml,_htmlNumeric,_pluck,_pluck_order,_range,_stripHtml,_unique,_fnBuildAjax,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnAjaxDataSrc,_fnAddColumn,_fnColumnOptions,_fnAdjustColumnSizing,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnVisbleColumns,_fnGetColumns,_fnColumnTypes,_fnApplyColumnDefs,_fnHungarianMap,_fnCamelToHungarian,_fnLanguageCompat,_fnBrowserDetect,_fnAddData,_fnAddTr,_fnNodeToDataIndex,_fnNodeToColumnIndex,_fnGetCellData,_fnSetCellData,_fnSplitObjNotation,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnGetDataMaster,_fnClearTable,_fnDeleteIndex,_fnInvalidate,_fnGetRowElements,_fnCreateTr,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAddOptionsHtml,_fnDetectHeader,_fnGetUniqueThs,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnFilterCreateSearch,_fnEscapeRegex,_fnFilterData,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnInfoMacros,_fnInitialise,_fnInitComplete,_fnLengthChange,_fnFeatureHtmlLength,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnFeatureHtmlTable,_fnScrollDraw,_fnApplyToChildren,_fnCalculateColumnWidths,_fnThrottle,_fnConvertToWidth,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnSortFlatten,_fnSort,_fnSortAria,_fnSortListener,_fnSortAttachListener,_fnSortingClasses,_fnSortData,_fnSaveState,_fnLoadState,_fnSettingsFromNode,_fnLog,_fnMap,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnLengthOverflow,_fnRenderer,_fnDataSource,_fnRowAttributes*/\n\n(function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tmodule.exports = function (root, $) {\n\t\t\tif ( ! root ) {\n\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t// root. This will give an error otherwise\n\t\t\t\troot = window;\n\t\t\t}\n\n\t\t\tif ( ! $ ) {\n\t\t\t\t$ = typeof window !== 'undefined' ? // jQuery's factory checks for a global window\n\t\t\t\t\trequire('jquery') :\n\t\t\t\t\trequire('jquery')( root );\n\t\t\t}\n\n\t\t\treturn factory( $, root, root.document );\n\t\t};\n\t}\n\telse {\n\t\t// Browser\n\t\twindow.DataTable = factory( jQuery, window, document );\n\t}\n}\n(function( $, window, document, undefined ) {\n\t\"use strict\";\n\n\t\n\tvar DataTable = function ( selector, options )\n\t{\n\t\t// When creating with `new`, create a new DataTable, returning the API instance\n\t\tif (this instanceof DataTable) {\n\t\t\treturn $(selector).DataTable(options);\n\t\t}\n\t\telse {\n\t\t\t// Argument switching\n\t\t\toptions = selector;\n\t\t}\n\t\n\t\t/**\n\t\t * Perform a jQuery selector action on the table's TR elements (from the tbody) and\n\t\t * return the resulting jQuery object.\n\t\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t\t *  @param {string} [oOpts.filter=none] Select TR elements that meet the current filter\n\t\t *    criterion (\"applied\") or all TR elements (i.e. no filter).\n\t\t *  @param {string} [oOpts.order=current] Order of the TR elements in the processed array.\n\t\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t\t *    'original' whereby the original order the data was read into the table is used.\n\t\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t\t *  @returns {object} jQuery object, filtered by the given selector.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Highlight every second row\n\t\t *      oTable.$('tr:odd').css('backgroundColor', 'blue');\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Filter to rows with 'Webkit' in them, add a background colour and then\n\t\t *      // remove the filter, thus highlighting the 'Webkit' rows only.\n\t\t *      oTable.fnFilter('Webkit');\n\t\t *      oTable.$('tr', {\"search\": \"applied\"}).css('backgroundColor', 'blue');\n\t\t *      oTable.fnFilter('');\n\t\t *    } );\n\t\t */\n\t\tthis.$ = function ( sSelector, oOpts )\n\t\t{\n\t\t\treturn this.api(true).$( sSelector, oOpts );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Almost identical to $ in operation, but in this case returns the data for the matched\n\t\t * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes\n\t\t * rather than any descendants, so the data can be obtained for the row/cell. If matching\n\t\t * rows are found, the data returned is the original data array/object that was used to\n\t\t * create the row (or a generated array if from a DOM source).\n\t\t *\n\t\t * This method is often useful in-combination with $ where both functions are given the\n\t\t * same parameters and the array indexes will match identically.\n\t\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t\t *  @param {string} [oOpts.filter=none] Select elements that meet the current filter\n\t\t *    criterion (\"applied\") or all elements (i.e. no filter).\n\t\t *  @param {string} [oOpts.order=current] Order of the data in the processed array.\n\t\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t\t *    'original' whereby the original order the data was read into the table is used.\n\t\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t\t *  @returns {array} Data for the matched elements. If any elements, as a result of the\n\t\t *    selector, were not TR, TD or TH elements in the DataTable, they will have a null\n\t\t *    entry in the array.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Get the data from the first row in the table\n\t\t *      var data = oTable._('tr:first');\n\t\t *\n\t\t *      // Do something useful with the data\n\t\t *      alert( \"First cell is: \"+data[0] );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Filter to 'Webkit' and get all data for\n\t\t *      oTable.fnFilter('Webkit');\n\t\t *      var data = oTable._('tr', {\"search\": \"applied\"});\n\t\t *\n\t\t *      // Do something with the data\n\t\t *      alert( data.length+\" rows matched the search\" );\n\t\t *    } );\n\t\t */\n\t\tthis._ = function ( sSelector, oOpts )\n\t\t{\n\t\t\treturn this.api(true).rows( sSelector, oOpts ).data();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Create a DataTables Api instance, with the currently selected tables for\n\t\t * the Api's context.\n\t\t * @param {boolean} [traditional=false] Set the API instance's context to be\n\t\t *   only the table referred to by the `DataTable.ext.iApiIndex` option, as was\n\t\t *   used in the API presented by DataTables 1.9- (i.e. the traditional mode),\n\t\t *   or if all tables captured in the jQuery object should be used.\n\t\t * @return {DataTables.Api}\n\t\t */\n\t\tthis.api = function ( traditional )\n\t\t{\n\t\t\treturn traditional ?\n\t\t\t\tnew _Api(\n\t\t\t\t\t_fnSettingsFromNode( this[ _ext.iApiIndex ] )\n\t\t\t\t) :\n\t\t\t\tnew _Api( this );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Add a single new row or multiple rows of data to the table. Please note\n\t\t * that this is suitable for client-side processing only - if you are using\n\t\t * server-side processing (i.e. \"bServerSide\": true), then to add data, you\n\t\t * must add it to the data source, i.e. the server-side, through an Ajax call.\n\t\t *  @param {array|object} data The data to be added to the table. This can be:\n\t\t *    <ul>\n\t\t *      <li>1D array of data - add a single row with the data provided</li>\n\t\t *      <li>2D array of arrays - add multiple rows in a single call</li>\n\t\t *      <li>object - data object when using <i>mData</i></li>\n\t\t *      <li>array of objects - multiple data objects when using <i>mData</i></li>\n\t\t *    </ul>\n\t\t *  @param {bool} [redraw=true] redraw the table or not\n\t\t *  @returns {array} An array of integers, representing the list of indexes in\n\t\t *    <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to\n\t\t *    the table.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    // Global var for counter\n\t\t *    var giCount = 2;\n\t\t *\n\t\t *    $(document).ready(function() {\n\t\t *      $('#example').dataTable();\n\t\t *    } );\n\t\t *\n\t\t *    function fnClickAddRow() {\n\t\t *      $('#example').dataTable().fnAddData( [\n\t\t *        giCount+\".1\",\n\t\t *        giCount+\".2\",\n\t\t *        giCount+\".3\",\n\t\t *        giCount+\".4\" ]\n\t\t *      );\n\t\t *\n\t\t *      giCount++;\n\t\t *    }\n\t\t */\n\t\tthis.fnAddData = function( data, redraw )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\t/* Check if we want to add multiple rows or not */\n\t\t\tvar rows = Array.isArray(data) && ( Array.isArray(data[0]) || $.isPlainObject(data[0]) ) ?\n\t\t\t\tapi.rows.add( data ) :\n\t\t\t\tapi.row.add( data );\n\t\t\n\t\t\tif ( redraw === undefined || redraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\n\t\t\treturn rows.flatten().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * This function will make DataTables recalculate the column sizes, based on the data\n\t\t * contained in the table and the sizes applied to the columns (in the DOM, CSS or\n\t\t * through the sWidth parameter). This can be useful when the width of the table's\n\t\t * parent element changes (for example a window resize).\n\t\t *  @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable( {\n\t\t *        \"sScrollY\": \"200px\",\n\t\t *        \"bPaginate\": false\n\t\t *      } );\n\t\t *\n\t\t *      $(window).on('resize', function () {\n\t\t *        oTable.fnAdjustColumnSizing();\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\tthis.fnAdjustColumnSizing = function ( bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).columns.adjust();\n\t\t\tvar settings = api.settings()[0];\n\t\t\tvar scroll = settings.oScroll;\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw( false );\n\t\t\t}\n\t\t\telse if ( scroll.sX !== \"\" || scroll.sY !== \"\" ) {\n\t\t\t\t/* If not redrawing, but scrolling, we want to apply the new column sizes anyway */\n\t\t\t\t_fnScrollDraw( settings );\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Quickly and simply clear a table\n\t\t *  @param {bool} [bRedraw=true] redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)\n\t\t *      oTable.fnClearTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnClearTable = function( bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).clear();\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * The exact opposite of 'opening' a row, this function will close any rows which\n\t\t * are currently 'open'.\n\t\t *  @param {node} nTr the table row to 'close'\n\t\t *  @returns {int} 0 on success, or 1 if failed (can't find the row)\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnClose = function( nTr )\n\t\t{\n\t\t\tthis.api( true ).row( nTr ).child.hide();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Remove a row for the table\n\t\t *  @param {mixed} target The index of the row from aoData to be deleted, or\n\t\t *    the TR element you want to delete\n\t\t *  @param {function|null} [callBack] Callback function\n\t\t *  @param {bool} [redraw=true] Redraw the table or not\n\t\t *  @returns {array} The row that was deleted\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Immediately remove the first row\n\t\t *      oTable.fnDeleteRow( 0 );\n\t\t *    } );\n\t\t */\n\t\tthis.fnDeleteRow = function( target, callback, redraw )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\tvar rows = api.rows( target );\n\t\t\tvar settings = rows.settings()[0];\n\t\t\tvar data = settings.aoData[ rows[0][0] ];\n\t\t\n\t\t\trows.remove();\n\t\t\n\t\t\tif ( callback ) {\n\t\t\t\tcallback.call( this, settings, data );\n\t\t\t}\n\t\t\n\t\t\tif ( redraw === undefined || redraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\n\t\t\treturn data;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Restore the table to it's original state in the DOM by removing all of DataTables\n\t\t * enhancements, alterations to the DOM structure of the table and event listeners.\n\t\t *  @param {boolean} [remove=false] Completely remove the table from the DOM\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      // This example is fairly pointless in reality, but shows how fnDestroy can be used\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnDestroy();\n\t\t *    } );\n\t\t */\n\t\tthis.fnDestroy = function ( remove )\n\t\t{\n\t\t\tthis.api( true ).destroy( remove );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Redraw the table\n\t\t *  @param {bool} [complete=true] Re-filter and resort (if enabled) the table before the draw.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Re-draw the table - you wouldn't want to do it here, but it's an example :-)\n\t\t *      oTable.fnDraw();\n\t\t *    } );\n\t\t */\n\t\tthis.fnDraw = function( complete )\n\t\t{\n\t\t\t// Note that this isn't an exact match to the old call to _fnDraw - it takes\n\t\t\t// into account the new data, but can hold position.\n\t\t\tthis.api( true ).draw( complete );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Filter the input based on data\n\t\t *  @param {string} sInput String to filter the table on\n\t\t *  @param {int|null} [iColumn] Column to limit filtering to\n\t\t *  @param {bool} [bRegex=false] Treat as regular expression or not\n\t\t *  @param {bool} [bSmart=true] Perform smart filtering or not\n\t\t *  @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)\n\t\t *  @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sometime later - filter...\n\t\t *      oTable.fnFilter( 'test string' );\n\t\t *    } );\n\t\t */\n\t\tthis.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( iColumn === null || iColumn === undefined ) {\n\t\t\t\tapi.search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tapi.column( iColumn ).search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t\t}\n\t\t\n\t\t\tapi.draw();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the data for the whole table, an individual row or an individual cell based on the\n\t\t * provided parameters.\n\t\t *  @param {int|node} [src] A TR row node, TD/TH cell node or an integer. If given as\n\t\t *    a TR node then the data source for the whole row will be returned. If given as a\n\t\t *    TD/TH cell node then iCol will be automatically calculated and the data for the\n\t\t *    cell returned. If given as an integer, then this is treated as the aoData internal\n\t\t *    data index for the row (see fnGetPosition) and the data for that row used.\n\t\t *  @param {int} [col] Optional column index that you want the data of.\n\t\t *  @returns {array|object|string} If mRow is undefined, then the data for all rows is\n\t\t *    returned. If mRow is defined, just data for that row, and is iCol is\n\t\t *    defined, only data for the designated cell is returned.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    // Row data\n\t\t *    $(document).ready(function() {\n\t\t *      oTable = $('#example').dataTable();\n\t\t *\n\t\t *      oTable.$('tr').click( function () {\n\t\t *        var data = oTable.fnGetData( this );\n\t\t *        // ... do something with the array / object of data for the row\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Individual cell data\n\t\t *    $(document).ready(function() {\n\t\t *      oTable = $('#example').dataTable();\n\t\t *\n\t\t *      oTable.$('td').click( function () {\n\t\t *        var sData = oTable.fnGetData( this );\n\t\t *        alert( 'The cell clicked on had the value of '+sData );\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetData = function( src, col )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( src !== undefined ) {\n\t\t\t\tvar type = src.nodeName ? src.nodeName.toLowerCase() : '';\n\t\t\n\t\t\t\treturn col !== undefined || type == 'td' || type == 'th' ?\n\t\t\t\t\tapi.cell( src, col ).data() :\n\t\t\t\t\tapi.row( src ).data() || null;\n\t\t\t}\n\t\t\n\t\t\treturn api.data().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get an array of the TR nodes that are used in the table's body. Note that you will\n\t\t * typically want to use the '$' API method in preference to this as it is more\n\t\t * flexible.\n\t\t *  @param {int} [iRow] Optional row index for the TR element you want\n\t\t *  @returns {array|node} If iRow is undefined, returns an array of all TR elements\n\t\t *    in the table's body, or iRow is defined, just the TR element requested.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Get the nodes from the table\n\t\t *      var nNodes = oTable.fnGetNodes( );\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetNodes = function( iRow )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\treturn iRow !== undefined ?\n\t\t\t\tapi.row( iRow ).node() :\n\t\t\t\tapi.rows().nodes().flatten().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the array indexes of a particular cell from it's DOM element\n\t\t * and column index including hidden columns\n\t\t *  @param {node} node this can either be a TR, TD or TH in the table's body\n\t\t *  @returns {int} If nNode is given as a TR, then a single index is returned, or\n\t\t *    if given as a cell, an array of [row index, column index (visible),\n\t\t *    column index (all)] is given.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      $('#example tbody td').click( function () {\n\t\t *        // Get the position of the current data from the node\n\t\t *        var aPos = oTable.fnGetPosition( this );\n\t\t *\n\t\t *        // Get the data array for this row\n\t\t *        var aData = oTable.fnGetData( aPos[0] );\n\t\t *\n\t\t *        // Update the data array and return the value\n\t\t *        aData[ aPos[1] ] = 'clicked';\n\t\t *        this.innerHTML = 'clicked';\n\t\t *      } );\n\t\t *\n\t\t *      // Init DataTables\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetPosition = function( node )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\tvar nodeName = node.nodeName.toUpperCase();\n\t\t\n\t\t\tif ( nodeName == 'TR' ) {\n\t\t\t\treturn api.row( node ).index();\n\t\t\t}\n\t\t\telse if ( nodeName == 'TD' || nodeName == 'TH' ) {\n\t\t\t\tvar cell = api.cell( node ).index();\n\t\t\n\t\t\t\treturn [\n\t\t\t\t\tcell.row,\n\t\t\t\t\tcell.columnVisible,\n\t\t\t\t\tcell.column\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Check to see if a row is 'open' or not.\n\t\t *  @param {node} nTr the table row to check\n\t\t *  @returns {boolean} true if the row is currently open, false otherwise\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnIsOpen = function( nTr )\n\t\t{\n\t\t\treturn this.api( true ).row( nTr ).child.isShown();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * This function will place a new row directly after a row which is currently\n\t\t * on display on the page, with the HTML contents that is passed into the\n\t\t * function. This can be used, for example, to ask for confirmation that a\n\t\t * particular record should be deleted.\n\t\t *  @param {node} nTr The table row to 'open'\n\t\t *  @param {string|node|jQuery} mHtml The HTML to put into the row\n\t\t *  @param {string} sClass Class to give the new TD cell\n\t\t *  @returns {node} The row opened. Note that if the table row passed in as the\n\t\t *    first parameter, is not found in the table, this method will silently\n\t\t *    return.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnOpen = function( nTr, mHtml, sClass )\n\t\t{\n\t\t\treturn this.api( true )\n\t\t\t\t.row( nTr )\n\t\t\t\t.child( mHtml, sClass )\n\t\t\t\t.show()\n\t\t\t\t.child()[0];\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Change the pagination - provides the internal logic for pagination in a simple API\n\t\t * function. With this function you can have a DataTables table go to the next,\n\t\t * previous, first or last pages.\n\t\t *  @param {string|int} mAction Paging action to take: \"first\", \"previous\", \"next\" or \"last\"\n\t\t *    or page number to jump to (integer), note that page 0 is the first page.\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnPageChange( 'next' );\n\t\t *    } );\n\t\t */\n\t\tthis.fnPageChange = function ( mAction, bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).page( mAction );\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw(false);\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Show a particular column\n\t\t *  @param {int} iCol The column whose display should be changed\n\t\t *  @param {bool} bShow Show (true) or hide (false) the column\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Hide the second column after initialisation\n\t\t *      oTable.fnSetColumnVis( 1, false );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSetColumnVis = function ( iCol, bShow, bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).column( iCol ).visible( bShow );\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.columns.adjust().draw();\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the settings for a particular table for external manipulation\n\t\t *  @returns {object} DataTables settings object. See\n\t\t *    {@link DataTable.models.oSettings}\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      var oSettings = oTable.fnSettings();\n\t\t *\n\t\t *      // Show an example parameter from the settings\n\t\t *      alert( oSettings._iDisplayStart );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSettings = function()\n\t\t{\n\t\t\treturn _fnSettingsFromNode( this[_ext.iApiIndex] );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Sort the table by a particular column\n\t\t *  @param {int} iCol the data index to sort on. Note that this will not match the\n\t\t *    'display index' if you have hidden data entries\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sort immediately with columns 0 and 1\n\t\t *      oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSort = function( aaSort )\n\t\t{\n\t\t\tthis.api( true ).order( aaSort ).draw();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Attach a sort listener to an element for a given column\n\t\t *  @param {node} nNode the element to attach the sort listener to\n\t\t *  @param {int} iColumn the column that a click on this node will sort on\n\t\t *  @param {function} [fnCallback] callback function when sort is run\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sort on column 1, when 'sorter' is clicked on\n\t\t *      oTable.fnSortListener( document.getElementById('sorter'), 1 );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSortListener = function( nNode, iColumn, fnCallback )\n\t\t{\n\t\t\tthis.api( true ).order.listener( nNode, iColumn, fnCallback );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Update a table cell or row - this method will accept either a single value to\n\t\t * update the cell with, an array of values with one element for each column or\n\t\t * an object in the same format as the original data source. The function is\n\t\t * self-referencing in order to make the multi column updates easier.\n\t\t *  @param {object|array|string} mData Data to update the cell/row with\n\t\t *  @param {node|int} mRow TR element you want to update or the aoData index\n\t\t *  @param {int} [iColumn] The column to update, give as null or undefined to\n\t\t *    update a whole row.\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @param {bool} [bAction=true] Perform pre-draw actions or not\n\t\t *  @returns {int} 0 on success, 1 on error\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell\n\t\t *      oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], $('tbody tr')[0] ); // Row\n\t\t *    } );\n\t\t */\n\t\tthis.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( iColumn === undefined || iColumn === null ) {\n\t\t\t\tapi.row( mRow ).data( mData );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tapi.cell( mRow, iColumn ).data( mData );\n\t\t\t}\n\t\t\n\t\t\tif ( bAction === undefined || bAction ) {\n\t\t\t\tapi.columns.adjust();\n\t\t\t}\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\treturn 0;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Provide a common method for plug-ins to check the version of DataTables being used, in order\n\t\t * to ensure compatibility.\n\t\t *  @param {string} sVersion Version string to check for, in the format \"X.Y.Z\". Note that the\n\t\t *    formats \"X\" and \"X.Y\" are also acceptable.\n\t\t *  @returns {boolean} true if this version of DataTables is greater or equal to the required\n\t\t *    version, or false if this version of DataTales is not suitable\n\t\t *  @method\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      alert( oTable.fnVersionCheck( '1.9.0' ) );\n\t\t *    } );\n\t\t */\n\t\tthis.fnVersionCheck = _ext.fnVersionCheck;\n\t\t\n\t\n\t\tvar _that = this;\n\t\tvar emptyInit = options === undefined;\n\t\tvar len = this.length;\n\t\n\t\tif ( emptyInit ) {\n\t\t\toptions = {};\n\t\t}\n\t\n\t\tthis.oApi = this.internal = _ext.internal;\n\t\n\t\t// Extend with old style plug-in API methods\n\t\tfor ( var fn in DataTable.ext.internal ) {\n\t\t\tif ( fn ) {\n\t\t\t\tthis[fn] = _fnExternApiFunc(fn);\n\t\t\t}\n\t\t}\n\t\n\t\tthis.each(function() {\n\t\t\t// For each initialisation we want to give it a clean initialisation\n\t\t\t// object that can be bashed around\n\t\t\tvar o = {};\n\t\t\tvar oInit = len > 1 ? // optimisation for single table case\n\t\t\t\t_fnExtend( o, options, true ) :\n\t\t\t\toptions;\n\t\n\t\t\t/*global oInit,_that,emptyInit*/\n\t\t\tvar i=0, iLen, j, jLen, k, kLen;\n\t\t\tvar sId = this.getAttribute( 'id' );\n\t\t\tvar bInitHandedOff = false;\n\t\t\tvar defaults = DataTable.defaults;\n\t\t\tvar $this = $(this);\n\t\t\t\n\t\t\t\n\t\t\t/* Sanity check */\n\t\t\tif ( this.nodeName.toLowerCase() != 'table' )\n\t\t\t{\n\t\t\t\t_fnLog( null, 0, 'Non-table node initialisation ('+this.nodeName+')', 2 );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\t/* Backwards compatibility for the defaults */\n\t\t\t_fnCompatOpts( defaults );\n\t\t\t_fnCompatCols( defaults.column );\n\t\t\t\n\t\t\t/* Convert the camel-case defaults to Hungarian */\n\t\t\t_fnCamelToHungarian( defaults, defaults, true );\n\t\t\t_fnCamelToHungarian( defaults.column, defaults.column, true );\n\t\t\t\n\t\t\t/* Setting up the initialisation object */\n\t\t\t_fnCamelToHungarian( defaults, $.extend( oInit, $this.data() ), true );\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t/* Check to see if we are re-initialising a table */\n\t\t\tvar allSettings = DataTable.settings;\n\t\t\tfor ( i=0, iLen=allSettings.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tvar s = allSettings[i];\n\t\t\t\n\t\t\t\t/* Base check on table node */\n\t\t\t\tif (\n\t\t\t\t\ts.nTable == this ||\n\t\t\t\t\t(s.nTHead && s.nTHead.parentNode == this) ||\n\t\t\t\t\t(s.nTFoot && s.nTFoot.parentNode == this)\n\t\t\t\t) {\n\t\t\t\t\tvar bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;\n\t\t\t\t\tvar bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;\n\t\t\t\n\t\t\t\t\tif ( emptyInit || bRetrieve )\n\t\t\t\t\t{\n\t\t\t\t\t\treturn s.oInstance;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( bDestroy )\n\t\t\t\t\t{\n\t\t\t\t\t\ts.oInstance.fnDestroy();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t_fnLog( s, 0, 'Cannot reinitialise DataTable', 3 );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* If the element we are initialising has the same ID as a table which was previously\n\t\t\t\t * initialised, but the table nodes don't match (from before) then we destroy the old\n\t\t\t\t * instance by simply deleting it. This is under the assumption that the table has been\n\t\t\t\t * destroyed by other methods. Anyone using non-id selectors will need to do this manually\n\t\t\t\t */\n\t\t\t\tif ( s.sTableId == this.id )\n\t\t\t\t{\n\t\t\t\t\tallSettings.splice( i, 1 );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t/* Ensure the table has an ID - required for accessibility */\n\t\t\tif ( sId === null || sId === \"\" )\n\t\t\t{\n\t\t\t\tsId = \"DataTables_Table_\"+(DataTable.ext._unique++);\n\t\t\t\tthis.id = sId;\n\t\t\t}\n\t\t\t\n\t\t\t/* Create the settings object for this table and set some of the default parameters */\n\t\t\tvar oSettings = $.extend( true, {}, DataTable.models.oSettings, {\n\t\t\t\t\"sDestroyWidth\": $this[0].style.width,\n\t\t\t\t\"sInstance\":     sId,\n\t\t\t\t\"sTableId\":      sId\n\t\t\t} );\n\t\t\toSettings.nTable = this;\n\t\t\toSettings.oApi   = _that.internal;\n\t\t\toSettings.oInit  = oInit;\n\t\t\t\n\t\t\tallSettings.push( oSettings );\n\t\t\t\n\t\t\t// Need to add the instance after the instance after the settings object has been added\n\t\t\t// to the settings array, so we can self reference the table instance if more than one\n\t\t\toSettings.oInstance = (_that.length===1) ? _that : $this.dataTable();\n\t\t\t\n\t\t\t// Backwards compatibility, before we apply all the defaults\n\t\t\t_fnCompatOpts( oInit );\n\t\t\t_fnLanguageCompat( oInit.oLanguage );\n\t\t\t\n\t\t\t// If the length menu is given, but the init display length is not, use the length menu\n\t\t\tif ( oInit.aLengthMenu && ! oInit.iDisplayLength )\n\t\t\t{\n\t\t\t\toInit.iDisplayLength = Array.isArray( oInit.aLengthMenu[0] ) ?\n\t\t\t\t\toInit.aLengthMenu[0][0] : oInit.aLengthMenu[0];\n\t\t\t}\n\t\t\t\n\t\t\t// Apply the defaults and init options to make a single init object will all\n\t\t\t// options defined from defaults and instance options.\n\t\t\toInit = _fnExtend( $.extend( true, {}, defaults ), oInit );\n\t\t\t\n\t\t\t\n\t\t\t// Map the initialisation options onto the settings object\n\t\t\t_fnMap( oSettings.oFeatures, oInit, [\n\t\t\t\t\"bPaginate\",\n\t\t\t\t\"bLengthChange\",\n\t\t\t\t\"bFilter\",\n\t\t\t\t\"bSort\",\n\t\t\t\t\"bSortMulti\",\n\t\t\t\t\"bInfo\",\n\t\t\t\t\"bProcessing\",\n\t\t\t\t\"bAutoWidth\",\n\t\t\t\t\"bSortClasses\",\n\t\t\t\t\"bServerSide\",\n\t\t\t\t\"bDeferRender\"\n\t\t\t] );\n\t\t\t_fnMap( oSettings, oInit, [\n\t\t\t\t\"asStripeClasses\",\n\t\t\t\t\"ajax\",\n\t\t\t\t\"fnServerData\",\n\t\t\t\t\"fnFormatNumber\",\n\t\t\t\t\"sServerMethod\",\n\t\t\t\t\"aaSorting\",\n\t\t\t\t\"aaSortingFixed\",\n\t\t\t\t\"aLengthMenu\",\n\t\t\t\t\"sPaginationType\",\n\t\t\t\t\"sAjaxSource\",\n\t\t\t\t\"sAjaxDataProp\",\n\t\t\t\t\"iStateDuration\",\n\t\t\t\t\"sDom\",\n\t\t\t\t\"bSortCellsTop\",\n\t\t\t\t\"iTabIndex\",\n\t\t\t\t\"fnStateLoadCallback\",\n\t\t\t\t\"fnStateSaveCallback\",\n\t\t\t\t\"renderer\",\n\t\t\t\t\"searchDelay\",\n\t\t\t\t\"rowId\",\n\t\t\t\t[ \"iCookieDuration\", \"iStateDuration\" ], // backwards compat\n\t\t\t\t[ \"oSearch\", \"oPreviousSearch\" ],\n\t\t\t\t[ \"aoSearchCols\", \"aoPreSearchCols\" ],\n\t\t\t\t[ \"iDisplayLength\", \"_iDisplayLength\" ]\n\t\t\t] );\n\t\t\t_fnMap( oSettings.oScroll, oInit, [\n\t\t\t\t[ \"sScrollX\", \"sX\" ],\n\t\t\t\t[ \"sScrollXInner\", \"sXInner\" ],\n\t\t\t\t[ \"sScrollY\", \"sY\" ],\n\t\t\t\t[ \"bScrollCollapse\", \"bCollapse\" ]\n\t\t\t] );\n\t\t\t_fnMap( oSettings.oLanguage, oInit, \"fnInfoCallback\" );\n\t\t\t\n\t\t\t/* Callback functions which are array driven */\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback',       oInit.fnDrawCallback,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoServerParams',       oInit.fnServerParams,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateSaveParams',    oInit.fnStateSaveParams,   'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateLoadParams',    oInit.fnStateLoadParams,   'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateLoaded',        oInit.fnStateLoaded,       'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoRowCallback',        oInit.fnRowCallback,       'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow,        'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoHeaderCallback',     oInit.fnHeaderCallback,    'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoFooterCallback',     oInit.fnFooterCallback,    'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoInitComplete',       oInit.fnInitComplete,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoPreDrawCallback',    oInit.fnPreDrawCallback,   'user' );\n\t\t\t\n\t\t\toSettings.rowIdFn = _fnGetObjectDataFn( oInit.rowId );\n\t\t\t\n\t\t\t/* Browser support detection */\n\t\t\t_fnBrowserDetect( oSettings );\n\t\t\t\n\t\t\tvar oClasses = oSettings.oClasses;\n\t\t\t\n\t\t\t$.extend( oClasses, DataTable.ext.classes, oInit.oClasses );\n\t\t\t$this.addClass( oClasses.sTable );\n\t\t\t\n\t\t\t\n\t\t\tif ( oSettings.iInitDisplayStart === undefined )\n\t\t\t{\n\t\t\t\t/* Display start point, taking into account the save saving */\n\t\t\t\toSettings.iInitDisplayStart = oInit.iDisplayStart;\n\t\t\t\toSettings._iDisplayStart = oInit.iDisplayStart;\n\t\t\t}\n\t\t\t\n\t\t\tif ( oInit.iDeferLoading !== null )\n\t\t\t{\n\t\t\t\toSettings.bDeferLoading = true;\n\t\t\t\tvar tmp = Array.isArray( oInit.iDeferLoading );\n\t\t\t\toSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;\n\t\t\t\toSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;\n\t\t\t}\n\t\t\t\n\t\t\t/* Language definitions */\n\t\t\tvar oLanguage = oSettings.oLanguage;\n\t\t\t$.extend( true, oLanguage, oInit.oLanguage );\n\t\t\t\n\t\t\tif ( oLanguage.sUrl )\n\t\t\t{\n\t\t\t\t/* Get the language definitions from a file - because this Ajax call makes the language\n\t\t\t\t * get async to the remainder of this function we use bInitHandedOff to indicate that\n\t\t\t\t * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor\n\t\t\t\t */\n\t\t\t\t$.ajax( {\n\t\t\t\t\tdataType: 'json',\n\t\t\t\t\turl: oLanguage.sUrl,\n\t\t\t\t\tsuccess: function ( json ) {\n\t\t\t\t\t\t_fnCamelToHungarian( defaults.oLanguage, json );\n\t\t\t\t\t\t_fnLanguageCompat( json );\n\t\t\t\t\t\t$.extend( true, oLanguage, json, oSettings.oInit.oLanguage );\n\t\t\t\n\t\t\t\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings]);\n\t\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t\t},\n\t\t\t\t\terror: function () {\n\t\t\t\t\t\t// Error occurred loading language file, continue on as best we can\n\t\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tbInitHandedOff = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings]);\n\t\t\t}\n\t\t\t\n\t\t\t/*\n\t\t\t * Stripes\n\t\t\t */\n\t\t\tif ( oInit.asStripeClasses === null )\n\t\t\t{\n\t\t\t\toSettings.asStripeClasses =[\n\t\t\t\t\toClasses.sStripeOdd,\n\t\t\t\t\toClasses.sStripeEven\n\t\t\t\t];\n\t\t\t}\n\t\t\t\n\t\t\t/* Remove row stripe classes if they are already on the table row */\n\t\t\tvar stripeClasses = oSettings.asStripeClasses;\n\t\t\tvar rowOne = $this.children('tbody').find('tr').eq(0);\n\t\t\tif ( $.inArray( true, $.map( stripeClasses, function(el, i) {\n\t\t\t\treturn rowOne.hasClass(el);\n\t\t\t} ) ) !== -1 ) {\n\t\t\t\t$('tbody tr', this).removeClass( stripeClasses.join(' ') );\n\t\t\t\toSettings.asDestroyStripes = stripeClasses.slice();\n\t\t\t}\n\t\t\t\n\t\t\t/*\n\t\t\t * Columns\n\t\t\t * See if we should load columns automatically or use defined ones\n\t\t\t */\n\t\t\tvar anThs = [];\n\t\t\tvar aoColumnsInit;\n\t\t\tvar nThead = this.getElementsByTagName('thead');\n\t\t\tif ( nThead.length !== 0 )\n\t\t\t{\n\t\t\t\t_fnDetectHeader( oSettings.aoHeader, nThead[0] );\n\t\t\t\tanThs = _fnGetUniqueThs( oSettings );\n\t\t\t}\n\t\t\t\n\t\t\t/* If not given a column array, generate one with nulls */\n\t\t\tif ( oInit.aoColumns === null )\n\t\t\t{\n\t\t\t\taoColumnsInit = [];\n\t\t\t\tfor ( i=0, iLen=anThs.length ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\taoColumnsInit.push( null );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\taoColumnsInit = oInit.aoColumns;\n\t\t\t}\n\t\t\t\n\t\t\t/* Add the columns */\n\t\t\tfor ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\t_fnAddColumn( oSettings, anThs ? anThs[i] : null );\n\t\t\t}\n\t\t\t\n\t\t\t/* Apply the column definitions */\n\t\t\t_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {\n\t\t\t\t_fnColumnOptions( oSettings, iCol, oDef );\n\t\t\t} );\n\t\t\t\n\t\t\t/* HTML5 attribute detection - build an mData object automatically if the\n\t\t\t * attributes are found\n\t\t\t */\n\t\t\tif ( rowOne.length ) {\n\t\t\t\tvar a = function ( cell, name ) {\n\t\t\t\t\treturn cell.getAttribute( 'data-'+name ) !== null ? name : null;\n\t\t\t\t};\n\t\t\t\n\t\t\t\t$( rowOne[0] ).children('th, td').each( function (i, cell) {\n\t\t\t\t\tvar col = oSettings.aoColumns[i];\n\t\t\t\n\t\t\t\t\tif ( col.mData === i ) {\n\t\t\t\t\t\tvar sort = a( cell, 'sort' ) || a( cell, 'order' );\n\t\t\t\t\t\tvar filter = a( cell, 'filter' ) || a( cell, 'search' );\n\t\t\t\n\t\t\t\t\t\tif ( sort !== null || filter !== null ) {\n\t\t\t\t\t\t\tcol.mData = {\n\t\t\t\t\t\t\t\t_:      i+'.display',\n\t\t\t\t\t\t\t\tsort:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\t\ttype:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\t\tfilter: filter !== null ? i+'.@data-'+filter : undefined\n\t\t\t\t\t\t\t};\n\t\t\t\n\t\t\t\t\t\t\t_fnColumnOptions( oSettings, i );\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\t\n\t\t\tvar features = oSettings.oFeatures;\n\t\t\tvar loadedInit = function () {\n\t\t\t\t/*\n\t\t\t\t * Sorting\n\t\t\t\t * @todo For modularisation (1.11) this needs to do into a sort start up handler\n\t\t\t\t */\n\t\t\t\n\t\t\t\t// If aaSorting is not defined, then we use the first indicator in asSorting\n\t\t\t\t// in case that has been altered, so the default sort reflects that option\n\t\t\t\tif ( oInit.aaSorting === undefined ) {\n\t\t\t\t\tvar sorting = oSettings.aaSorting;\n\t\t\t\t\tfor ( i=0, iLen=sorting.length ; i<iLen ; i++ ) {\n\t\t\t\t\t\tsorting[i][1] = oSettings.aoColumns[ i ].asSorting[0];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* Do a first pass on the sorting classes (allows any size changes to be taken into\n\t\t\t\t * account, and also will apply sorting disabled classes if disabled\n\t\t\t\t */\n\t\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\n\t\t\t\tif ( features.bSort ) {\n\t\t\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\t\t\tif ( oSettings.bSorted ) {\n\t\t\t\t\t\t\tvar aSort = _fnSortFlatten( oSettings );\n\t\t\t\t\t\t\tvar sortedColumns = {};\n\t\t\t\n\t\t\t\t\t\t\t$.each( aSort, function (i, val) {\n\t\t\t\t\t\t\t\tsortedColumns[ val.src ] = val.dir;\n\t\t\t\t\t\t\t} );\n\t\t\t\n\t\t\t\t\t\t\t_fnCallbackFire( oSettings, null, 'order', [oSettings, aSort, sortedColumns] );\n\t\t\t\t\t\t\t_fnSortAria( oSettings );\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\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\t\tif ( oSettings.bSorted || _fnDataSource( oSettings ) === 'ssp' || features.bDeferRender ) {\n\t\t\t\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\t\t}\n\t\t\t\t}, 'sc' );\n\t\t\t\n\t\t\t\n\t\t\t\t/*\n\t\t\t\t * Final init\n\t\t\t\t * Cache the header, body and footer as required, creating them if needed\n\t\t\t\t */\n\t\t\t\n\t\t\t\t// Work around for Webkit bug 83867 - store the caption-side before removing from doc\n\t\t\t\tvar captions = $this.children('caption').each( function () {\n\t\t\t\t\tthis._captionSide = $(this).css('caption-side');\n\t\t\t\t} );\n\t\t\t\n\t\t\t\tvar thead = $this.children('thead');\n\t\t\t\tif ( thead.length === 0 ) {\n\t\t\t\t\tthead = $('<thead/>').appendTo($this);\n\t\t\t\t}\n\t\t\t\toSettings.nTHead = thead[0];\n\t\t\t\n\t\t\t\tvar tbody = $this.children('tbody');\n\t\t\t\tif ( tbody.length === 0 ) {\n\t\t\t\t\ttbody = $('<tbody/>').insertAfter(thead);\n\t\t\t\t}\n\t\t\t\toSettings.nTBody = tbody[0];\n\t\t\t\n\t\t\t\tvar tfoot = $this.children('tfoot');\n\t\t\t\tif ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== \"\" || oSettings.oScroll.sY !== \"\") ) {\n\t\t\t\t\t// If we are a scrolling table, and no footer has been given, then we need to create\n\t\t\t\t\t// a tfoot element for the caption element to be appended to\n\t\t\t\t\ttfoot = $('<tfoot/>').appendTo($this);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tif ( tfoot.length === 0 || tfoot.children().length === 0 ) {\n\t\t\t\t\t$this.addClass( oClasses.sNoFooter );\n\t\t\t\t}\n\t\t\t\telse if ( tfoot.length > 0 ) {\n\t\t\t\t\toSettings.nTFoot = tfoot[0];\n\t\t\t\t\t_fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* Check if there is data passing into the constructor */\n\t\t\t\tif ( oInit.aaData ) {\n\t\t\t\t\tfor ( i=0 ; i<oInit.aaData.length ; i++ ) {\n\t\t\t\t\t\t_fnAddData( oSettings, oInit.aaData[ i ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( oSettings.bDeferLoading || _fnDataSource( oSettings ) == 'dom' ) {\n\t\t\t\t\t/* Grab the data from the page - only do this when deferred loading or no Ajax\n\t\t\t\t\t * source since there is no point in reading the DOM data if we are then going\n\t\t\t\t\t * to replace it with Ajax data\n\t\t\t\t\t */\n\t\t\t\t\t_fnAddTr( oSettings, $(oSettings.nTBody).children('tr') );\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* Copy the data index array */\n\t\t\t\toSettings.aiDisplay = oSettings.aiDisplayMaster.slice();\n\t\t\t\n\t\t\t\t/* Initialisation complete - table can be drawn */\n\t\t\t\toSettings.bInitialised = true;\n\t\t\t\n\t\t\t\t/* Check if we need to initialise the table (it might not have been handed off to the\n\t\t\t\t * language processor)\n\t\t\t\t */\n\t\t\t\tif ( bInitHandedOff === false ) {\n\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\t/* Must be done after everything which can be overridden by the state saving! */\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );\n\t\t\t\n\t\t\tif ( oInit.bStateSave )\n\t\t\t{\n\t\t\t\tfeatures.bStateSave = true;\n\t\t\t\t_fnLoadState( oSettings, oInit, loadedInit );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tloadedInit();\n\t\t\t}\n\t\t\t\n\t\t} );\n\t\t_that = null;\n\t\treturn this;\n\t};\n\t\n\t\n\t/*\n\t * It is useful to have variables which are scoped locally so only the\n\t * DataTables functions can access them and they don't leak into global space.\n\t * At the same time these functions are often useful over multiple files in the\n\t * core and API, so we list, or at least document, all variables which are used\n\t * by DataTables as private variables here. This also ensures that there is no\n\t * clashing of variable names and that they can easily referenced for reuse.\n\t */\n\t\n\t\n\t// Defined else where\n\t//  _selector_run\n\t//  _selector_opts\n\t//  _selector_first\n\t//  _selector_row_indexes\n\t\n\tvar _ext; // DataTable.ext\n\tvar _Api; // DataTable.Api\n\tvar _api_register; // DataTable.Api.register\n\tvar _api_registerPlural; // DataTable.Api.registerPlural\n\t\n\tvar _re_dic = {};\n\tvar _re_new_lines = /[\\r\\n\\u2028]/g;\n\tvar _re_html = /<.*?>/g;\n\t\n\t// This is not strict ISO8601 - Date.parse() is quite lax, although\n\t// implementations differ between browsers.\n\tvar _re_date = /^\\d{2,4}[\\.\\/\\-]\\d{1,2}[\\.\\/\\-]\\d{1,2}([T ]{1}\\d{1,2}[:\\.]\\d{2}([\\.:]\\d{2})?)?$/;\n\t\n\t// Escape regular expression special characters\n\tvar _re_escape_regex = new RegExp( '(\\\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\', '$', '^', '-' ].join('|\\\\') + ')', 'g' );\n\t\n\t// http://en.wikipedia.org/wiki/Foreign_exchange_market\n\t// - \\u20BD - Russian ruble.\n\t// - \\u20a9 - South Korean Won\n\t// - \\u20BA - Turkish Lira\n\t// - \\u20B9 - Indian Rupee\n\t// - R - Brazil (R$) and South Africa\n\t// - fr - Swiss Franc\n\t// - kr - Swedish krona, Norwegian krone and Danish krone\n\t// - \\u2009 is thin space and \\u202F is narrow no-break space, both used in many\n\t// - Ƀ - Bitcoin\n\t// - Ξ - Ethereum\n\t//   standards as thousands separators.\n\tvar _re_formatted_numeric = /['\\u00A0,$£€¥%\\u2009\\u202F\\u20BD\\u20a9\\u20BArfkɃΞ]/gi;\n\t\n\t\n\tvar _empty = function ( d ) {\n\t\treturn !d || d === true || d === '-' ? true : false;\n\t};\n\t\n\t\n\tvar _intVal = function ( s ) {\n\t\tvar integer = parseInt( s, 10 );\n\t\treturn !isNaN(integer) && isFinite(s) ? integer : null;\n\t};\n\t\n\t// Convert from a formatted number with characters other than `.` as the\n\t// decimal place, to a Javascript number\n\tvar _numToDecimal = function ( num, decimalPoint ) {\n\t\t// Cache created regular expressions for speed as this function is called often\n\t\tif ( ! _re_dic[ decimalPoint ] ) {\n\t\t\t_re_dic[ decimalPoint ] = new RegExp( _fnEscapeRegex( decimalPoint ), 'g' );\n\t\t}\n\t\treturn typeof num === 'string' && decimalPoint !== '.' ?\n\t\t\tnum.replace( /\\./g, '' ).replace( _re_dic[ decimalPoint ], '.' ) :\n\t\t\tnum;\n\t};\n\t\n\t\n\tvar _isNumber = function ( d, decimalPoint, formatted ) {\n\t\tvar strType = typeof d === 'string';\n\t\n\t\t// If empty return immediately so there must be a number if it is a\n\t\t// formatted string (this stops the string \"k\", or \"kr\", etc being detected\n\t\t// as a formatted number for currency\n\t\tif ( _empty( d ) ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tif ( decimalPoint && strType ) {\n\t\t\td = _numToDecimal( d, decimalPoint );\n\t\t}\n\t\n\t\tif ( formatted && strType ) {\n\t\t\td = d.replace( _re_formatted_numeric, '' );\n\t\t}\n\t\n\t\treturn !isNaN( parseFloat(d) ) && isFinite( d );\n\t};\n\t\n\t\n\t// A string without HTML in it can be considered to be HTML still\n\tvar _isHtml = function ( d ) {\n\t\treturn _empty( d ) || typeof d === 'string';\n\t};\n\t\n\t\n\tvar _htmlNumeric = function ( d, decimalPoint, formatted ) {\n\t\tif ( _empty( d ) ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tvar html = _isHtml( d );\n\t\treturn ! html ?\n\t\t\tnull :\n\t\t\t_isNumber( _stripHtml( d ), decimalPoint, formatted ) ?\n\t\t\t\ttrue :\n\t\t\t\tnull;\n\t};\n\t\n\t\n\tvar _pluck = function ( a, prop, prop2 ) {\n\t\tvar out = [];\n\t\tvar i=0, ien=a.length;\n\t\n\t\t// Could have the test in the loop for slightly smaller code, but speed\n\t\t// is essential here\n\t\tif ( prop2 !== undefined ) {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[i] && a[i][ prop ] ) {\n\t\t\t\t\tout.push( a[i][ prop ][ prop2 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[i] ) {\n\t\t\t\t\tout.push( a[i][ prop ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\t// Basically the same as _pluck, but rather than looping over `a` we use `order`\n\t// as the indexes to pick from `a`\n\tvar _pluck_order = function ( a, order, prop, prop2 )\n\t{\n\t\tvar out = [];\n\t\tvar i=0, ien=order.length;\n\t\n\t\t// Could have the test in the loop for slightly smaller code, but speed\n\t\t// is essential here\n\t\tif ( prop2 !== undefined ) {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[ order[i] ][ prop ] ) {\n\t\t\t\t\tout.push( a[ order[i] ][ prop ][ prop2 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tout.push( a[ order[i] ][ prop ] );\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _range = function ( len, start )\n\t{\n\t\tvar out = [];\n\t\tvar end;\n\t\n\t\tif ( start === undefined ) {\n\t\t\tstart = 0;\n\t\t\tend = len;\n\t\t}\n\t\telse {\n\t\t\tend = start;\n\t\t\tstart = len;\n\t\t}\n\t\n\t\tfor ( var i=start ; i<end ; i++ ) {\n\t\t\tout.push( i );\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _removeEmpty = function ( a )\n\t{\n\t\tvar out = [];\n\t\n\t\tfor ( var i=0, ien=a.length ; i<ien ; i++ ) {\n\t\t\tif ( a[i] ) { // careful - will remove all falsy values!\n\t\t\t\tout.push( a[i] );\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _stripHtml = function ( d ) {\n\t\treturn d.replace( _re_html, '' );\n\t};\n\t\n\t\n\t/**\n\t * Determine if all values in the array are unique. This means we can short\n\t * cut the _unique method at the cost of a single loop. A sorted array is used\n\t * to easily check the values.\n\t *\n\t * @param  {array} src Source array\n\t * @return {boolean} true if all unique, false otherwise\n\t * @ignore\n\t */\n\tvar _areAllUnique = function ( src ) {\n\t\tif ( src.length < 2 ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tvar sorted = src.slice().sort();\n\t\tvar last = sorted[0];\n\t\n\t\tfor ( var i=1, ien=sorted.length ; i<ien ; i++ ) {\n\t\t\tif ( sorted[i] === last ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\tlast = sorted[i];\n\t\t}\n\t\n\t\treturn true;\n\t};\n\t\n\t\n\t/**\n\t * Find the unique elements in a source array.\n\t *\n\t * @param  {array} src Source array\n\t * @return {array} Array of unique items\n\t * @ignore\n\t */\n\tvar _unique = function ( src )\n\t{\n\t\tif ( _areAllUnique( src ) ) {\n\t\t\treturn src.slice();\n\t\t}\n\t\n\t\t// A faster unique method is to use object keys to identify used values,\n\t\t// but this doesn't work with arrays or objects, which we must also\n\t\t// consider. See jsperf.com/compare-array-unique-versions/4 for more\n\t\t// information.\n\t\tvar\n\t\t\tout = [],\n\t\t\tval,\n\t\t\ti, ien=src.length,\n\t\t\tj, k=0;\n\t\n\t\tagain: for ( i=0 ; i<ien ; i++ ) {\n\t\t\tval = src[i];\n\t\n\t\t\tfor ( j=0 ; j<k ; j++ ) {\n\t\t\t\tif ( out[j] === val ) {\n\t\t\t\t\tcontinue again;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tout.push( val );\n\t\t\tk++;\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t// Surprisingly this is faster than [].concat.apply\n\t// https://jsperf.com/flatten-an-array-loop-vs-reduce/2\n\tvar _flatten = function (out, val) {\n\t\tif (Array.isArray(val)) {\n\t\t\tfor (var i=0 ; i<val.length ; i++) {\n\t\t\t\t_flatten(out, val[i]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tout.push(val);\n\t\t}\n\t  \n\t\treturn out;\n\t}\n\t\n\tvar _includes = function (search, start) {\n\t\tif (start === undefined) {\n\t\t\tstart = 0;\n\t\t}\n\t\n\t\treturn this.indexOf(search, start) !== -1;\t\n\t};\n\t\n\t// Array.isArray polyfill.\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\n\tif (! Array.isArray) {\n\t    Array.isArray = function(arg) {\n\t        return Object.prototype.toString.call(arg) === '[object Array]';\n\t    };\n\t}\n\t\n\tif (! Array.prototype.includes) {\n\t\tArray.prototype.includes = _includes;\n\t}\n\t\n\t// .trim() polyfill\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim\n\tif (!String.prototype.trim) {\n\t  String.prototype.trim = function () {\n\t    return this.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\t  };\n\t}\n\t\n\tif (! String.prototype.includes) {\n\t\tString.prototype.includes = _includes;\n\t}\n\t\n\t/**\n\t * DataTables utility methods\n\t * \n\t * This namespace provides helper methods that DataTables uses internally to\n\t * create a DataTable, but which are not exclusively used only for DataTables.\n\t * These methods can be used by extension authors to save the duplication of\n\t * code.\n\t *\n\t *  @namespace\n\t */\n\tDataTable.util = {\n\t\t/**\n\t\t * Throttle the calls to a function. Arguments and context are maintained\n\t\t * for the throttled function.\n\t\t *\n\t\t * @param {function} fn Function to be called\n\t\t * @param {integer} freq Call frequency in mS\n\t\t * @return {function} Wrapped function\n\t\t */\n\t\tthrottle: function ( fn, freq ) {\n\t\t\tvar\n\t\t\t\tfrequency = freq !== undefined ? freq : 200,\n\t\t\t\tlast,\n\t\t\t\ttimer;\n\t\n\t\t\treturn function () {\n\t\t\t\tvar\n\t\t\t\t\tthat = this,\n\t\t\t\t\tnow  = +new Date(),\n\t\t\t\t\targs = arguments;\n\t\n\t\t\t\tif ( last && now < last + frequency ) {\n\t\t\t\t\tclearTimeout( timer );\n\t\n\t\t\t\t\ttimer = setTimeout( function () {\n\t\t\t\t\t\tlast = undefined;\n\t\t\t\t\t\tfn.apply( that, args );\n\t\t\t\t\t}, frequency );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlast = now;\n\t\t\t\t\tfn.apply( that, args );\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Escape a string such that it can be used in a regular expression\n\t\t *\n\t\t *  @param {string} val string to escape\n\t\t *  @returns {string} escaped string\n\t\t */\n\t\tescapeRegex: function ( val ) {\n\t\t\treturn val.replace( _re_escape_regex, '\\\\$1' );\n\t\t},\n\t\n\t\t/**\n\t\t * Create a function that will write to a nested object or array\n\t\t * @param {*} source JSON notation string\n\t\t * @returns Write function\n\t\t */\n\t\tset: function ( source ) {\n\t\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t\t/* Unlike get, only the underscore (global) option is used for for\n\t\t\t\t * setting data since we don't know the type here. This is why an object\n\t\t\t\t * option is not documented for `mData` (which is read/write), but it is\n\t\t\t\t * for `mRender` which is read only.\n\t\t\t\t */\n\t\t\t\treturn DataTable.util.set( source._ );\n\t\t\t}\n\t\t\telse if ( source === null ) {\n\t\t\t\t// Nothing to do when the data source is null\n\t\t\t\treturn function () {};\n\t\t\t}\n\t\t\telse if ( typeof source === 'function' ) {\n\t\t\t\treturn function (data, val, meta) {\n\t\t\t\t\tsource( data, 'set', val, meta );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( typeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\t\t\t  source.indexOf('[') !== -1 || source.indexOf('(') !== -1) )\n\t\t\t{\n\t\t\t\t// Like the get, we need to get data from a nested object\n\t\t\t\tvar setData = function (data, val, src) {\n\t\t\t\t\tvar a = _fnSplitObjNotation( src ), b;\n\t\t\t\t\tvar aLast = a[a.length-1];\n\t\t\t\t\tvar arrayNotation, funcNotation, o, innerSrc;\n\t\t\n\t\t\t\t\tfor ( var i=0, iLen=a.length-1 ; i<iLen ; i++ ) {\n\t\t\t\t\t\t// Protect against prototype pollution\n\t\t\t\t\t\tif (a[i] === '__proto__' || a[i] === 'constructor') {\n\t\t\t\t\t\t\tthrow new Error('Cannot set prototype values');\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t// Check if we are dealing with an array notation request\n\t\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\t\n\t\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\t\t\t\t\t\tdata[ a[i] ] = [];\n\t\t\n\t\t\t\t\t\t\t// Get the remainder of the nested object to set so we can recurse\n\t\t\t\t\t\t\tb = a.slice();\n\t\t\t\t\t\t\tb.splice( 0, i+1 );\n\t\t\t\t\t\t\tinnerSrc = b.join('.');\n\t\t\n\t\t\t\t\t\t\t// Traverse each entry in the array setting the properties requested\n\t\t\t\t\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t\t\t\t\tfor ( var j=0, jLen=val.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\t\to = {};\n\t\t\t\t\t\t\t\t\tsetData( o, val[j], innerSrc );\n\t\t\t\t\t\t\t\t\tdata[ a[i] ].push( o );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// We've been asked to save data to an array, but it\n\t\t\t\t\t\t\t\t// isn't array data to be saved. Best that can be done\n\t\t\t\t\t\t\t\t// is to just save the value.\n\t\t\t\t\t\t\t\tdata[ a[i] ] = val;\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t// The inner call to setData has already traversed through the remainder\n\t\t\t\t\t\t\t// of the source and has set the data, thus we can exit here\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t\t// Function call\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\t\tdata = data[ a[i] ]( val );\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t// If the nested object doesn't currently exist - since we are\n\t\t\t\t\t\t// trying to set the value - create it\n\t\t\t\t\t\tif ( data[ a[i] ] === null || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\t\tdata[ a[i] ] = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\t// Last item in the input - i.e, the actual set\n\t\t\t\t\tif ( aLast.match(__reFn ) ) {\n\t\t\t\t\t\t// Function call\n\t\t\t\t\t\tdata = data[ aLast.replace(__reFn, '') ]( val );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// If array notation is used, we just want to strip it and use the property name\n\t\t\t\t\t\t// and assign the value. If it isn't used, then we get the result we want anyway\n\t\t\t\t\t\tdata[ aLast.replace(__reArray, '') ] = val;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\n\t\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\t\treturn setData( data, val, source );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Array or flat object mapping\n\t\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\t\tdata[source] = val;\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Create a function that will read nested objects from arrays, based on JSON notation\n\t\t * @param {*} source JSON notation string\n\t\t * @returns Value read\n\t\t */\n\t\tget: function ( source ) {\n\t\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t\t// Build an object of get functions, and wrap them in a single call\n\t\t\t\tvar o = {};\n\t\t\t\t$.each( source, function (key, val) {\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\to[key] = DataTable.util.get( val );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\n\t\t\t\treturn function (data, type, row, meta) {\n\t\t\t\t\tvar t = o[type] || o._;\n\t\t\t\t\treturn t !== undefined ?\n\t\t\t\t\t\tt(data, type, row, meta) :\n\t\t\t\t\t\tdata;\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( source === null ) {\n\t\t\t\t// Give an empty string for rendering / sorting etc\n\t\t\t\treturn function (data) { // type, row and meta also passed, but not used\n\t\t\t\t\treturn data;\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( typeof source === 'function' ) {\n\t\t\t\treturn function (data, type, row, meta) {\n\t\t\t\t\treturn source( data, type, row, meta );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( typeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\t\t\t  source.indexOf('[') !== -1 || source.indexOf('(') !== -1) )\n\t\t\t{\n\t\t\t\t/* If there is a . in the source string then the data source is in a\n\t\t\t\t * nested object so we loop over the data for each level to get the next\n\t\t\t\t * level down. On each loop we test for undefined, and if found immediately\n\t\t\t\t * return. This allows entire objects to be missing and sDefaultContent to\n\t\t\t\t * be used if defined, rather than throwing an error\n\t\t\t\t */\n\t\t\t\tvar fetchData = function (data, type, src) {\n\t\t\t\t\tvar arrayNotation, funcNotation, out, innerSrc;\n\t\t\n\t\t\t\t\tif ( src !== \"\" ) {\n\t\t\t\t\t\tvar a = _fnSplitObjNotation( src );\n\t\t\n\t\t\t\t\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ ) {\n\t\t\t\t\t\t\t// Check if we are dealing with special notation\n\t\t\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\t\n\t\t\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\t\t\t// Array notation\n\t\t\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\t\n\t\t\t\t\t\t\t\t// Condition allows simply [] to be passed in\n\t\t\t\t\t\t\t\tif ( a[i] !== \"\" ) {\n\t\t\t\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tout = [];\n\t\t\n\t\t\t\t\t\t\t\t// Get the remainder of the nested object to get\n\t\t\t\t\t\t\t\ta.splice( 0, i+1 );\n\t\t\t\t\t\t\t\tinnerSrc = a.join('.');\n\t\t\n\t\t\t\t\t\t\t\t// Traverse each entry in the array getting the properties requested\n\t\t\t\t\t\t\t\tif ( Array.isArray( data ) ) {\n\t\t\t\t\t\t\t\t\tfor ( var j=0, jLen=data.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\t\t\tout.push( fetchData( data[j], type, innerSrc ) );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t\t// If a string is given in between the array notation indicators, that\n\t\t\t\t\t\t\t\t// is used to join the strings together, otherwise an array is returned\n\t\t\t\t\t\t\t\tvar join = arrayNotation[0].substring(1, arrayNotation[0].length-1);\n\t\t\t\t\t\t\t\tdata = (join===\"\") ? out : out.join(join);\n\t\t\n\t\t\t\t\t\t\t\t// The inner call to fetchData has already traversed through the remainder\n\t\t\t\t\t\t\t\t// of the source requested, so we exit from the loop\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t\t\t// Function call\n\t\t\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\t\t\tdata = data[ a[i] ]();\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\tif ( data === null || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\treturn data;\n\t\t\t\t};\n\t\t\n\t\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\t\treturn fetchData( data, type, source );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Array or flat object mapping\n\t\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\t\treturn data[source];\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\t\n\t/**\n\t * Create a mapping object that allows camel case parameters to be looked up\n\t * for their Hungarian counterparts. The mapping is stored in a private\n\t * parameter called `_hungarianMap` which can be accessed on the source object.\n\t *  @param {object} o\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnHungarianMap ( o )\n\t{\n\t\tvar\n\t\t\thungarian = 'a aa ai ao as b fn i m o s ',\n\t\t\tmatch,\n\t\t\tnewKey,\n\t\t\tmap = {};\n\t\n\t\t$.each( o, function (key, val) {\n\t\t\tmatch = key.match(/^([^A-Z]+?)([A-Z])/);\n\t\n\t\t\tif ( match && hungarian.indexOf(match[1]+' ') !== -1 )\n\t\t\t{\n\t\t\t\tnewKey = key.replace( match[0], match[2].toLowerCase() );\n\t\t\t\tmap[ newKey ] = key;\n\t\n\t\t\t\tif ( match[1] === 'o' )\n\t\t\t\t{\n\t\t\t\t\t_fnHungarianMap( o[key] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t\n\t\to._hungarianMap = map;\n\t}\n\t\n\t\n\t/**\n\t * Convert from camel case parameters to Hungarian, based on a Hungarian map\n\t * created by _fnHungarianMap.\n\t *  @param {object} src The model object which holds all parameters that can be\n\t *    mapped.\n\t *  @param {object} user The object to convert from camel case to Hungarian.\n\t *  @param {boolean} force When set to `true`, properties which already have a\n\t *    Hungarian value in the `user` object will be overwritten. Otherwise they\n\t *    won't be.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCamelToHungarian ( src, user, force )\n\t{\n\t\tif ( ! src._hungarianMap ) {\n\t\t\t_fnHungarianMap( src );\n\t\t}\n\t\n\t\tvar hungarianKey;\n\t\n\t\t$.each( user, function (key, val) {\n\t\t\thungarianKey = src._hungarianMap[ key ];\n\t\n\t\t\tif ( hungarianKey !== undefined && (force || user[hungarianKey] === undefined) )\n\t\t\t{\n\t\t\t\t// For objects, we need to buzz down into the object to copy parameters\n\t\t\t\tif ( hungarianKey.charAt(0) === 'o' )\n\t\t\t\t{\n\t\t\t\t\t// Copy the camelCase options over to the hungarian\n\t\t\t\t\tif ( ! user[ hungarianKey ] ) {\n\t\t\t\t\t\tuser[ hungarianKey ] = {};\n\t\t\t\t\t}\n\t\t\t\t\t$.extend( true, user[hungarianKey], user[key] );\n\t\n\t\t\t\t\t_fnCamelToHungarian( src[hungarianKey], user[hungarianKey], force );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tuser[hungarianKey] = user[ key ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Language compatibility - when certain options are given, and others aren't, we\n\t * need to duplicate the values over, in order to provide backwards compatibility\n\t * with older language files.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLanguageCompat( lang )\n\t{\n\t\t// Note the use of the Hungarian notation for the parameters in this method as\n\t\t// this is called after the mapping of camelCase to Hungarian\n\t\tvar defaults = DataTable.defaults.oLanguage;\n\t\n\t\t// Default mapping\n\t\tvar defaultDecimal = defaults.sDecimal;\n\t\tif ( defaultDecimal ) {\n\t\t\t_addNumericSort( defaultDecimal );\n\t\t}\n\t\n\t\tif ( lang ) {\n\t\t\tvar zeroRecords = lang.sZeroRecords;\n\t\n\t\t\t// Backwards compatibility - if there is no sEmptyTable given, then use the same as\n\t\t\t// sZeroRecords - assuming that is given.\n\t\t\tif ( ! lang.sEmptyTable && zeroRecords &&\n\t\t\t\tdefaults.sEmptyTable === \"No data available in table\" )\n\t\t\t{\n\t\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sEmptyTable' );\n\t\t\t}\n\t\n\t\t\t// Likewise with loading records\n\t\t\tif ( ! lang.sLoadingRecords && zeroRecords &&\n\t\t\t\tdefaults.sLoadingRecords === \"Loading...\" )\n\t\t\t{\n\t\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sLoadingRecords' );\n\t\t\t}\n\t\n\t\t\t// Old parameter name of the thousands separator mapped onto the new\n\t\t\tif ( lang.sInfoThousands ) {\n\t\t\t\tlang.sThousands = lang.sInfoThousands;\n\t\t\t}\n\t\n\t\t\tvar decimal = lang.sDecimal;\n\t\t\tif ( decimal && defaultDecimal !== decimal ) {\n\t\t\t\t_addNumericSort( decimal );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Map one parameter onto another\n\t *  @param {object} o Object to map\n\t *  @param {*} knew The new parameter name\n\t *  @param {*} old The old parameter name\n\t */\n\tvar _fnCompatMap = function ( o, knew, old ) {\n\t\tif ( o[ knew ] !== undefined ) {\n\t\t\to[ old ] = o[ knew ];\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Provide backwards compatibility for the main DT options. Note that the new\n\t * options are mapped onto the old parameters, so this is an external interface\n\t * change only.\n\t *  @param {object} init Object to map\n\t */\n\tfunction _fnCompatOpts ( init )\n\t{\n\t\t_fnCompatMap( init, 'ordering',      'bSort' );\n\t\t_fnCompatMap( init, 'orderMulti',    'bSortMulti' );\n\t\t_fnCompatMap( init, 'orderClasses',  'bSortClasses' );\n\t\t_fnCompatMap( init, 'orderCellsTop', 'bSortCellsTop' );\n\t\t_fnCompatMap( init, 'order',         'aaSorting' );\n\t\t_fnCompatMap( init, 'orderFixed',    'aaSortingFixed' );\n\t\t_fnCompatMap( init, 'paging',        'bPaginate' );\n\t\t_fnCompatMap( init, 'pagingType',    'sPaginationType' );\n\t\t_fnCompatMap( init, 'pageLength',    'iDisplayLength' );\n\t\t_fnCompatMap( init, 'searching',     'bFilter' );\n\t\n\t\t// Boolean initialisation of x-scrolling\n\t\tif ( typeof init.sScrollX === 'boolean' ) {\n\t\t\tinit.sScrollX = init.sScrollX ? '100%' : '';\n\t\t}\n\t\tif ( typeof init.scrollX === 'boolean' ) {\n\t\t\tinit.scrollX = init.scrollX ? '100%' : '';\n\t\t}\n\t\n\t\t// Column search objects are in an array, so it needs to be converted\n\t\t// element by element\n\t\tvar searchCols = init.aoSearchCols;\n\t\n\t\tif ( searchCols ) {\n\t\t\tfor ( var i=0, ien=searchCols.length ; i<ien ; i++ ) {\n\t\t\t\tif ( searchCols[i] ) {\n\t\t\t\t\t_fnCamelToHungarian( DataTable.models.oSearch, searchCols[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Provide backwards compatibility for column options. Note that the new options\n\t * are mapped onto the old parameters, so this is an external interface change\n\t * only.\n\t *  @param {object} init Object to map\n\t */\n\tfunction _fnCompatCols ( init )\n\t{\n\t\t_fnCompatMap( init, 'orderable',     'bSortable' );\n\t\t_fnCompatMap( init, 'orderData',     'aDataSort' );\n\t\t_fnCompatMap( init, 'orderSequence', 'asSorting' );\n\t\t_fnCompatMap( init, 'orderDataType', 'sortDataType' );\n\t\n\t\t// orderData can be given as an integer\n\t\tvar dataSort = init.aDataSort;\n\t\tif ( typeof dataSort === 'number' && ! Array.isArray( dataSort ) ) {\n\t\t\tinit.aDataSort = [ dataSort ];\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Browser feature detection for capabilities, quirks\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBrowserDetect( settings )\n\t{\n\t\t// We don't need to do this every time DataTables is constructed, the values\n\t\t// calculated are specific to the browser and OS configuration which we\n\t\t// don't expect to change between initialisations\n\t\tif ( ! DataTable.__browser ) {\n\t\t\tvar browser = {};\n\t\t\tDataTable.__browser = browser;\n\t\n\t\t\t// Scrolling feature / quirks detection\n\t\t\tvar n = $('<div/>')\n\t\t\t\t.css( {\n\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: $(window).scrollLeft()*-1, // allow for scrolling\n\t\t\t\t\theight: 1,\n\t\t\t\t\twidth: 1,\n\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\ttop: 1,\n\t\t\t\t\t\t\tleft: 1,\n\t\t\t\t\t\t\twidth: 100,\n\t\t\t\t\t\t\toverflow: 'scroll'\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\t\theight: 10\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.appendTo( 'body' );\n\t\n\t\t\tvar outer = n.children();\n\t\t\tvar inner = outer.children();\n\t\n\t\t\t// Numbers below, in order, are:\n\t\t\t// inner.offsetWidth, inner.clientWidth, outer.offsetWidth, outer.clientWidth\n\t\t\t//\n\t\t\t// IE6 XP:                           100 100 100  83\n\t\t\t// IE7 Vista:                        100 100 100  83\n\t\t\t// IE 8+ Windows:                     83  83 100  83\n\t\t\t// Evergreen Windows:                 83  83 100  83\n\t\t\t// Evergreen Mac with scrollbars:     85  85 100  85\n\t\t\t// Evergreen Mac without scrollbars: 100 100 100 100\n\t\n\t\t\t// Get scrollbar width\n\t\t\tbrowser.barWidth = outer[0].offsetWidth - outer[0].clientWidth;\n\t\n\t\t\t// IE6/7 will oversize a width 100% element inside a scrolling element, to\n\t\t\t// include the width of the scrollbar, while other browsers ensure the inner\n\t\t\t// element is contained without forcing scrolling\n\t\t\tbrowser.bScrollOversize = inner[0].offsetWidth === 100 && outer[0].clientWidth !== 100;\n\t\n\t\t\t// In rtl text layout, some browsers (most, but not all) will place the\n\t\t\t// scrollbar on the left, rather than the right.\n\t\t\tbrowser.bScrollbarLeft = Math.round( inner.offset().left ) !== 1;\n\t\n\t\t\t// IE8- don't provide height and width for getBoundingClientRect\n\t\t\tbrowser.bBounding = n[0].getBoundingClientRect().width ? true : false;\n\t\n\t\t\tn.remove();\n\t\t}\n\t\n\t\t$.extend( settings.oBrowser, DataTable.__browser );\n\t\tsettings.oScroll.iBarWidth = DataTable.__browser.barWidth;\n\t}\n\t\n\t\n\t/**\n\t * Array.prototype reduce[Right] method, used for browsers which don't support\n\t * JS 1.6. Done this way to reduce code size, since we iterate either way\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnReduce ( that, fn, init, start, end, inc )\n\t{\n\t\tvar\n\t\t\ti = start,\n\t\t\tvalue,\n\t\t\tisSet = false;\n\t\n\t\tif ( init !== undefined ) {\n\t\t\tvalue = init;\n\t\t\tisSet = true;\n\t\t}\n\t\n\t\twhile ( i !== end ) {\n\t\t\tif ( ! that.hasOwnProperty(i) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\tvalue = isSet ?\n\t\t\t\tfn( value, that[i], i, that ) :\n\t\t\t\tthat[i];\n\t\n\t\t\tisSet = true;\n\t\t\ti += inc;\n\t\t}\n\t\n\t\treturn value;\n\t}\n\t\n\t/**\n\t * Add a column to the list used for the table with default values\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} nTh The th element for this column\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddColumn( oSettings, nTh )\n\t{\n\t\t// Add column to aoColumns array\n\t\tvar oDefaults = DataTable.defaults.column;\n\t\tvar iCol = oSettings.aoColumns.length;\n\t\tvar oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {\n\t\t\t\"nTh\": nTh ? nTh : document.createElement('th'),\n\t\t\t\"sTitle\":    oDefaults.sTitle    ? oDefaults.sTitle    : nTh ? nTh.innerHTML : '',\n\t\t\t\"aDataSort\": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],\n\t\t\t\"mData\": oDefaults.mData ? oDefaults.mData : iCol,\n\t\t\tidx: iCol\n\t\t} );\n\t\toSettings.aoColumns.push( oCol );\n\t\n\t\t// Add search object for column specific search. Note that the `searchCols[ iCol ]`\n\t\t// passed into extend can be undefined. This allows the user to give a default\n\t\t// with only some of the parameters defined, and also not give a default\n\t\tvar searchCols = oSettings.aoPreSearchCols;\n\t\tsearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] );\n\t\n\t\t// Use the default column options function to initialise classes etc\n\t\t_fnColumnOptions( oSettings, iCol, $(nTh).data() );\n\t}\n\t\n\t\n\t/**\n\t * Apply options for a column\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iCol column index to consider\n\t *  @param {object} oOptions object with sType, bVisible and bSearchable etc\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnOptions( oSettings, iCol, oOptions )\n\t{\n\t\tvar oCol = oSettings.aoColumns[ iCol ];\n\t\tvar oClasses = oSettings.oClasses;\n\t\tvar th = $(oCol.nTh);\n\t\n\t\t// Try to get width information from the DOM. We can't get it from CSS\n\t\t// as we'd need to parse the CSS stylesheet. `width` option can override\n\t\tif ( ! oCol.sWidthOrig ) {\n\t\t\t// Width attribute\n\t\t\toCol.sWidthOrig = th.attr('width') || null;\n\t\n\t\t\t// Style attribute\n\t\t\tvar t = (th.attr('style') || '').match(/width:\\s*(\\d+[pxem%]+)/);\n\t\t\tif ( t ) {\n\t\t\t\toCol.sWidthOrig = t[1];\n\t\t\t}\n\t\t}\n\t\n\t\t/* User specified column options */\n\t\tif ( oOptions !== undefined && oOptions !== null )\n\t\t{\n\t\t\t// Backwards compatibility\n\t\t\t_fnCompatCols( oOptions );\n\t\n\t\t\t// Map camel case parameters to their Hungarian counterparts\n\t\t\t_fnCamelToHungarian( DataTable.defaults.column, oOptions, true );\n\t\n\t\t\t/* Backwards compatibility for mDataProp */\n\t\t\tif ( oOptions.mDataProp !== undefined && !oOptions.mData )\n\t\t\t{\n\t\t\t\toOptions.mData = oOptions.mDataProp;\n\t\t\t}\n\t\n\t\t\tif ( oOptions.sType )\n\t\t\t{\n\t\t\t\toCol._sManualType = oOptions.sType;\n\t\t\t}\n\t\n\t\t\t// `class` is a reserved word in Javascript, so we need to provide\n\t\t\t// the ability to use a valid name for the camel case input\n\t\t\tif ( oOptions.className && ! oOptions.sClass )\n\t\t\t{\n\t\t\t\toOptions.sClass = oOptions.className;\n\t\t\t}\n\t\t\tif ( oOptions.sClass ) {\n\t\t\t\tth.addClass( oOptions.sClass );\n\t\t\t}\n\t\n\t\t\tvar origClass = oCol.sClass;\n\t\n\t\t\t$.extend( oCol, oOptions );\n\t\t\t_fnMap( oCol, oOptions, \"sWidth\", \"sWidthOrig\" );\n\t\n\t\t\t// Merge class from previously defined classes with this one, rather than just\n\t\t\t// overwriting it in the extend above\n\t\t\tif (origClass !== oCol.sClass) {\n\t\t\t\toCol.sClass = origClass + ' ' + oCol.sClass;\n\t\t\t}\n\t\n\t\t\t/* iDataSort to be applied (backwards compatibility), but aDataSort will take\n\t\t\t * priority if defined\n\t\t\t */\n\t\t\tif ( oOptions.iDataSort !== undefined )\n\t\t\t{\n\t\t\t\toCol.aDataSort = [ oOptions.iDataSort ];\n\t\t\t}\n\t\t\t_fnMap( oCol, oOptions, \"aDataSort\" );\n\t\t}\n\t\n\t\t/* Cache the data get and set functions for speed */\n\t\tvar mDataSrc = oCol.mData;\n\t\tvar mData = _fnGetObjectDataFn( mDataSrc );\n\t\tvar mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;\n\t\n\t\tvar attrTest = function( src ) {\n\t\t\treturn typeof src === 'string' && src.indexOf('@') !== -1;\n\t\t};\n\t\toCol._bAttrSrc = $.isPlainObject( mDataSrc ) && (\n\t\t\tattrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter)\n\t\t);\n\t\toCol._setter = null;\n\t\n\t\toCol.fnGetData = function (rowData, type, meta) {\n\t\t\tvar innerData = mData( rowData, type, undefined, meta );\n\t\n\t\t\treturn mRender && type ?\n\t\t\t\tmRender( innerData, type, rowData, meta ) :\n\t\t\t\tinnerData;\n\t\t};\n\t\toCol.fnSetData = function ( rowData, val, meta ) {\n\t\t\treturn _fnSetObjectDataFn( mDataSrc )( rowData, val, meta );\n\t\t};\n\t\n\t\t// Indicate if DataTables should read DOM data as an object or array\n\t\t// Used in _fnGetRowElements\n\t\tif ( typeof mDataSrc !== 'number' ) {\n\t\t\toSettings._rowReadObject = true;\n\t\t}\n\t\n\t\t/* Feature sorting overrides column specific when off */\n\t\tif ( !oSettings.oFeatures.bSort )\n\t\t{\n\t\t\toCol.bSortable = false;\n\t\t\tth.addClass( oClasses.sSortableNone ); // Have to add class here as order event isn't called\n\t\t}\n\t\n\t\t/* Check that the class assignment is correct for sorting */\n\t\tvar bAsc = $.inArray('asc', oCol.asSorting) !== -1;\n\t\tvar bDesc = $.inArray('desc', oCol.asSorting) !== -1;\n\t\tif ( !oCol.bSortable || (!bAsc && !bDesc) )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableNone;\n\t\t\toCol.sSortingClassJUI = \"\";\n\t\t}\n\t\telse if ( bAsc && !bDesc )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableAsc;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed;\n\t\t}\n\t\telse if ( !bAsc && bDesc )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableDesc;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed;\n\t\t}\n\t\telse\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortable;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUI;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Adjust the table column widths for new data. Note: you would probably want to\n\t * do a redraw after calling this function!\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAdjustColumnSizing ( settings )\n\t{\n\t\t/* Not interested in doing column width calculation if auto-width is disabled */\n\t\tif ( settings.oFeatures.bAutoWidth !== false )\n\t\t{\n\t\t\tvar columns = settings.aoColumns;\n\t\n\t\t\t_fnCalculateColumnWidths( settings );\n\t\t\tfor ( var i=0 , iLen=columns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tcolumns[i].nTh.style.width = columns[i].sWidth;\n\t\t\t}\n\t\t}\n\t\n\t\tvar scroll = settings.oScroll;\n\t\tif ( scroll.sY !== '' || scroll.sX !== '')\n\t\t{\n\t\t\t_fnScrollDraw( settings );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'column-sizing', [settings] );\n\t}\n\t\n\t\n\t/**\n\t * Convert the index of a visible column to the index in the data array (take account\n\t * of hidden columns)\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iMatch Visible column index to lookup\n\t *  @returns {int} i the data index\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnVisibleToColumnIndex( oSettings, iMatch )\n\t{\n\t\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\t\n\t\treturn typeof aiVis[iMatch] === 'number' ?\n\t\t\taiVis[iMatch] :\n\t\t\tnull;\n\t}\n\t\n\t\n\t/**\n\t * Convert the index of an index in the data array and convert it to the visible\n\t *   column index (take account of hidden columns)\n\t *  @param {int} iMatch Column index to lookup\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {int} i the data index\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnIndexToVisible( oSettings, iMatch )\n\t{\n\t\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\t\tvar iPos = $.inArray( iMatch, aiVis );\n\t\n\t\treturn iPos !== -1 ? iPos : null;\n\t}\n\t\n\t\n\t/**\n\t * Get the number of visible columns\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {int} i the number of visible columns\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnVisbleColumns( oSettings )\n\t{\n\t\tvar vis = 0;\n\t\n\t\t// No reduce in IE8, use a loop for now\n\t\t$.each( oSettings.aoColumns, function ( i, col ) {\n\t\t\tif ( col.bVisible && $(col.nTh).css('display') !== 'none' ) {\n\t\t\t\tvis++;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn vis;\n\t}\n\t\n\t\n\t/**\n\t * Get an array of column indexes that match a given property\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sParam Parameter in aoColumns to look for - typically\n\t *    bVisible or bSearchable\n\t *  @returns {array} Array of indexes with matched properties\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetColumns( oSettings, sParam )\n\t{\n\t\tvar a = [];\n\t\n\t\t$.map( oSettings.aoColumns, function(val, i) {\n\t\t\tif ( val[sParam] ) {\n\t\t\t\ta.push( i );\n\t\t\t}\n\t\t} );\n\t\n\t\treturn a;\n\t}\n\t\n\t\n\t/**\n\t * Calculate the 'type' of a column\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnTypes ( settings )\n\t{\n\t\tvar columns = settings.aoColumns;\n\t\tvar data = settings.aoData;\n\t\tvar types = DataTable.ext.type.detect;\n\t\tvar i, ien, j, jen, k, ken;\n\t\tvar col, cell, detectedType, cache;\n\t\n\t\t// For each column, spin over the \n\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\tcol = columns[i];\n\t\t\tcache = [];\n\t\n\t\t\tif ( ! col.sType && col._sManualType ) {\n\t\t\t\tcol.sType = col._sManualType;\n\t\t\t}\n\t\t\telse if ( ! col.sType ) {\n\t\t\t\tfor ( j=0, jen=types.length ; j<jen ; j++ ) {\n\t\t\t\t\tfor ( k=0, ken=data.length ; k<ken ; k++ ) {\n\t\t\t\t\t\t// Use a cache array so we only need to get the type data\n\t\t\t\t\t\t// from the formatter once (when using multiple detectors)\n\t\t\t\t\t\tif ( cache[k] === undefined ) {\n\t\t\t\t\t\t\tcache[k] = _fnGetCellData( settings, k, i, 'type' );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tdetectedType = types[j]( cache[k], settings );\n\t\n\t\t\t\t\t\t// If null, then this type can't apply to this column, so\n\t\t\t\t\t\t// rather than testing all cells, break out. There is an\n\t\t\t\t\t\t// exception for the last type which is `html`. We need to\n\t\t\t\t\t\t// scan all rows since it is possible to mix string and HTML\n\t\t\t\t\t\t// types\n\t\t\t\t\t\tif ( ! detectedType && j !== types.length-1 ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Only a single match is needed for html type since it is\n\t\t\t\t\t\t// bottom of the pile and very similar to string - but it\n\t\t\t\t\t\t// must not be empty\n\t\t\t\t\t\tif ( detectedType === 'html' && ! _empty(cache[k]) ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Type is valid for all data points in the column - use this\n\t\t\t\t\t// type\n\t\t\t\t\tif ( detectedType ) {\n\t\t\t\t\t\tcol.sType = detectedType;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Fall back - if no type was detected, always use string\n\t\t\t\tif ( ! col.sType ) {\n\t\t\t\t\tcol.sType = 'string';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Take the column definitions and static columns arrays and calculate how\n\t * they relate to column indexes. The callback function will then apply the\n\t * definition found for a column to a suitable configuration object.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {array} aoColDefs The aoColumnDefs array that is to be applied\n\t *  @param {array} aoCols The aoColumns array that defines columns individually\n\t *  @param {function} fn Callback function - takes two parameters, the calculated\n\t *    column index and the definition for that column.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )\n\t{\n\t\tvar i, iLen, j, jLen, k, kLen, def;\n\t\tvar columns = oSettings.aoColumns;\n\t\n\t\t// Column definitions with aTargets\n\t\tif ( aoColDefs )\n\t\t{\n\t\t\t/* Loop over the definitions array - loop in reverse so first instance has priority */\n\t\t\tfor ( i=aoColDefs.length-1 ; i>=0 ; i-- )\n\t\t\t{\n\t\t\t\tdef = aoColDefs[i];\n\t\n\t\t\t\t/* Each definition can target multiple columns, as it is an array */\n\t\t\t\tvar aTargets = def.target !== undefined\n\t\t\t\t\t? def.target\n\t\t\t\t\t: def.targets !== undefined\n\t\t\t\t\t\t? def.targets\n\t\t\t\t\t\t: def.aTargets;\n\t\n\t\t\t\tif ( ! Array.isArray( aTargets ) )\n\t\t\t\t{\n\t\t\t\t\taTargets = [ aTargets ];\n\t\t\t\t}\n\t\n\t\t\t\tfor ( j=0, jLen=aTargets.length ; j<jLen ; j++ )\n\t\t\t\t{\n\t\t\t\t\tif ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Add columns that we don't yet know about */\n\t\t\t\t\t\twhile( columns.length <= aTargets[j] )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t_fnAddColumn( oSettings );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t/* Integer, basic index */\n\t\t\t\t\t\tfn( aTargets[j], def );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Negative integer, right to left column counting */\n\t\t\t\t\t\tfn( columns.length+aTargets[j], def );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof aTargets[j] === 'string' )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Class name matching on TH element */\n\t\t\t\t\t\tfor ( k=0, kLen=columns.length ; k<kLen ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif ( aTargets[j] == \"_all\" ||\n\t\t\t\t\t\t\t     $(columns[k].nTh).hasClass( aTargets[j] ) )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfn( k, def );\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\t\t// Statically defined columns array\n\t\tif ( aoCols )\n\t\t{\n\t\t\tfor ( i=0, iLen=aoCols.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tfn( i, aoCols[i] );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Add a data array to the table, creating DOM node etc. This is the parallel to\n\t * _fnGatherData, but for adding rows from a Javascript source, rather than a\n\t * DOM source.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {array} aData data array to be added\n\t *  @param {node} [nTr] TR element to add to the table - optional. If not given,\n\t *    DataTables will create a row automatically\n\t *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n\t *    if nTr is.\n\t *  @returns {int} >=0 if successful (index of new aoData entry), -1 if failed\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddData ( oSettings, aDataIn, nTr, anTds )\n\t{\n\t\t/* Create the object for storing information about this new row */\n\t\tvar iRow = oSettings.aoData.length;\n\t\tvar oData = $.extend( true, {}, DataTable.models.oRow, {\n\t\t\tsrc: nTr ? 'dom' : 'data',\n\t\t\tidx: iRow\n\t\t} );\n\t\n\t\toData._aData = aDataIn;\n\t\toSettings.aoData.push( oData );\n\t\n\t\t/* Create the cells */\n\t\tvar nTd, sThisType;\n\t\tvar columns = oSettings.aoColumns;\n\t\n\t\t// Invalidate the column types as the new data needs to be revalidated\n\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tcolumns[i].sType = null;\n\t\t}\n\t\n\t\t/* Add to the display array */\n\t\toSettings.aiDisplayMaster.push( iRow );\n\t\n\t\tvar id = oSettings.rowIdFn( aDataIn );\n\t\tif ( id !== undefined ) {\n\t\t\toSettings.aIds[ id ] = oData;\n\t\t}\n\t\n\t\t/* Create the DOM information, or register it if already present */\n\t\tif ( nTr || ! oSettings.oFeatures.bDeferRender )\n\t\t{\n\t\t\t_fnCreateTr( oSettings, iRow, nTr, anTds );\n\t\t}\n\t\n\t\treturn iRow;\n\t}\n\t\n\t\n\t/**\n\t * Add one or more TR elements to the table. Generally we'd expect to\n\t * use this for reading data from a DOM sourced table, but it could be\n\t * used for an TR element. Note that if a TR is given, it is used (i.e.\n\t * it is not cloned).\n\t *  @param {object} settings dataTables settings object\n\t *  @param {array|node|jQuery} trs The TR element(s) to add to the table\n\t *  @returns {array} Array of indexes for the added rows\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddTr( settings, trs )\n\t{\n\t\tvar row;\n\t\n\t\t// Allow an individual node to be passed in\n\t\tif ( ! (trs instanceof $) ) {\n\t\t\ttrs = $(trs);\n\t\t}\n\t\n\t\treturn trs.map( function (i, el) {\n\t\t\trow = _fnGetRowElements( settings, el );\n\t\t\treturn _fnAddData( settings, row.data, el, row.cells );\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Take a TR element and convert it to an index in aoData\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} n the TR element to find\n\t *  @returns {int} index if the node is found, null if not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnNodeToDataIndex( oSettings, n )\n\t{\n\t\treturn (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null;\n\t}\n\t\n\t\n\t/**\n\t * Take a TD element and convert it into a column data index (not the visible index)\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow The row number the TD/TH can be found in\n\t *  @param {node} n The TD/TH element to find\n\t *  @returns {int} index if the node is found, -1 if not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnNodeToColumnIndex( oSettings, iRow, n )\n\t{\n\t\treturn $.inArray( n, oSettings.aoData[ iRow ].anCells );\n\t}\n\t\n\t\n\t/**\n\t * Get the data for a given cell from the internal cache, taking into account data mapping\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} rowIdx aoData row id\n\t *  @param {int} colIdx Column index\n\t *  @param {string} type data get type ('display', 'type' 'filter|search' 'sort|order')\n\t *  @returns {*} Cell data\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetCellData( settings, rowIdx, colIdx, type )\n\t{\n\t\tif (type === 'search') {\n\t\t\ttype = 'filter';\n\t\t}\n\t\telse if (type === 'order') {\n\t\t\ttype = 'sort';\n\t\t}\n\t\n\t\tvar draw           = settings.iDraw;\n\t\tvar col            = settings.aoColumns[colIdx];\n\t\tvar rowData        = settings.aoData[rowIdx]._aData;\n\t\tvar defaultContent = col.sDefaultContent;\n\t\tvar cellData       = col.fnGetData( rowData, type, {\n\t\t\tsettings: settings,\n\t\t\trow:      rowIdx,\n\t\t\tcol:      colIdx\n\t\t} );\n\t\n\t\tif ( cellData === undefined ) {\n\t\t\tif ( settings.iDrawError != draw && defaultContent === null ) {\n\t\t\t\t_fnLog( settings, 0, \"Requested unknown parameter \"+\n\t\t\t\t\t(typeof col.mData=='function' ? '{function}' : \"'\"+col.mData+\"'\")+\n\t\t\t\t\t\" for row \"+rowIdx+\", column \"+colIdx, 4 );\n\t\t\t\tsettings.iDrawError = draw;\n\t\t\t}\n\t\t\treturn defaultContent;\n\t\t}\n\t\n\t\t// When the data source is null and a specific data type is requested (i.e.\n\t\t// not the original data), we can use default column data\n\t\tif ( (cellData === rowData || cellData === null) && defaultContent !== null && type !== undefined ) {\n\t\t\tcellData = defaultContent;\n\t\t}\n\t\telse if ( typeof cellData === 'function' ) {\n\t\t\t// If the data source is a function, then we run it and use the return,\n\t\t\t// executing in the scope of the data object (for instances)\n\t\t\treturn cellData.call( rowData );\n\t\t}\n\t\n\t\tif ( cellData === null && type === 'display' ) {\n\t\t\treturn '';\n\t\t}\n\t\n\t\tif ( type === 'filter' ) {\n\t\t\tvar fomatters = DataTable.ext.type.search;\n\t\n\t\t\tif ( fomatters[ col.sType ] ) {\n\t\t\t\tcellData = fomatters[ col.sType ]( cellData );\n\t\t\t}\n\t\t}\n\t\n\t\treturn cellData;\n\t}\n\t\n\t\n\t/**\n\t * Set the value for a specific cell, into the internal data cache\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} rowIdx aoData row id\n\t *  @param {int} colIdx Column index\n\t *  @param {*} val Value to set\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSetCellData( settings, rowIdx, colIdx, val )\n\t{\n\t\tvar col     = settings.aoColumns[colIdx];\n\t\tvar rowData = settings.aoData[rowIdx]._aData;\n\t\n\t\tcol.fnSetData( rowData, val, {\n\t\t\tsettings: settings,\n\t\t\trow:      rowIdx,\n\t\t\tcol:      colIdx\n\t\t}  );\n\t}\n\t\n\t\n\t// Private variable that is used to match action syntax in the data property object\n\tvar __reArray = /\\[.*?\\]$/;\n\tvar __reFn = /\\(\\)$/;\n\t\n\t/**\n\t * Split string on periods, taking into account escaped periods\n\t * @param  {string} str String to split\n\t * @return {array} Split string\n\t */\n\tfunction _fnSplitObjNotation( str )\n\t{\n\t\treturn $.map( str.match(/(\\\\.|[^\\.])+/g) || [''], function ( s ) {\n\t\t\treturn s.replace(/\\\\\\./g, '.');\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Return a function that can be used to get data from a source object, taking\n\t * into account the ability to use nested objects as a source\n\t *  @param {string|int|function} mSource The data source for the object\n\t *  @returns {function} Data get function\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnGetObjectDataFn = DataTable.util.get;\n\t\n\t\n\t/**\n\t * Return a function that can be used to set data from a source object, taking\n\t * into account the ability to use nested objects as a source\n\t *  @param {string|int|function} mSource The data source for the object\n\t *  @returns {function} Data set function\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnSetObjectDataFn = DataTable.util.set;\n\t\n\t\n\t/**\n\t * Return an array with the full table data\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns array {array} aData Master data array\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetDataMaster ( settings )\n\t{\n\t\treturn _pluck( settings.aoData, '_aData' );\n\t}\n\t\n\t\n\t/**\n\t * Nuke the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnClearTable( settings )\n\t{\n\t\tsettings.aoData.length = 0;\n\t\tsettings.aiDisplayMaster.length = 0;\n\t\tsettings.aiDisplay.length = 0;\n\t\tsettings.aIds = {};\n\t}\n\t\n\t\n\t /**\n\t * Take an array of integers (index array) and remove a target integer (value - not\n\t * the key!)\n\t *  @param {array} a Index array to target\n\t *  @param {int} iTarget value to find\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDeleteIndex( a, iTarget, splice )\n\t{\n\t\tvar iTargetIndex = -1;\n\t\n\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( a[i] == iTarget )\n\t\t\t{\n\t\t\t\tiTargetIndex = i;\n\t\t\t}\n\t\t\telse if ( a[i] > iTarget )\n\t\t\t{\n\t\t\t\ta[i]--;\n\t\t\t}\n\t\t}\n\t\n\t\tif ( iTargetIndex != -1 && splice === undefined )\n\t\t{\n\t\t\ta.splice( iTargetIndex, 1 );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Mark cached data as invalid such that a re-read of the data will occur when\n\t * the cached data is next requested. Also update from the data source object.\n\t *\n\t * @param {object} settings DataTables settings object\n\t * @param {int}    rowIdx   Row index to invalidate\n\t * @param {string} [src]    Source to invalidate from: undefined, 'auto', 'dom'\n\t *     or 'data'\n\t * @param {int}    [colIdx] Column index to invalidate. If undefined the whole\n\t *     row will be invalidated\n\t * @memberof DataTable#oApi\n\t *\n\t * @todo For the modularisation of v1.11 this will need to become a callback, so\n\t *   the sort and filter methods can subscribe to it. That will required\n\t *   initialisation options for sorting, which is why it is not already baked in\n\t */\n\tfunction _fnInvalidate( settings, rowIdx, src, colIdx )\n\t{\n\t\tvar row = settings.aoData[ rowIdx ];\n\t\tvar i, ien;\n\t\tvar cellWrite = function ( cell, col ) {\n\t\t\t// This is very frustrating, but in IE if you just write directly\n\t\t\t// to innerHTML, and elements that are overwritten are GC'ed,\n\t\t\t// even if there is a reference to them elsewhere\n\t\t\twhile ( cell.childNodes.length ) {\n\t\t\t\tcell.removeChild( cell.firstChild );\n\t\t\t}\n\t\n\t\t\tcell.innerHTML = _fnGetCellData( settings, rowIdx, col, 'display' );\n\t\t};\n\t\n\t\t// Are we reading last data from DOM or the data object?\n\t\tif ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {\n\t\t\t// Read the data from the DOM\n\t\t\trow._aData = _fnGetRowElements(\n\t\t\t\t\tsettings, row, colIdx, colIdx === undefined ? undefined : row._aData\n\t\t\t\t)\n\t\t\t\t.data;\n\t\t}\n\t\telse {\n\t\t\t// Reading from data object, update the DOM\n\t\t\tvar cells = row.anCells;\n\t\n\t\t\tif ( cells ) {\n\t\t\t\tif ( colIdx !== undefined ) {\n\t\t\t\t\tcellWrite( cells[colIdx], colIdx );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\t\t\tcellWrite( cells[i], i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// For both row and cell invalidation, the cached data for sorting and\n\t\t// filtering is nulled out\n\t\trow._aSortData = null;\n\t\trow._aFilterData = null;\n\t\n\t\t// Invalidate the type for a specific column (if given) or all columns since\n\t\t// the data might have changed\n\t\tvar cols = settings.aoColumns;\n\t\tif ( colIdx !== undefined ) {\n\t\t\tcols[ colIdx ].sType = null;\n\t\t}\n\t\telse {\n\t\t\tfor ( i=0, ien=cols.length ; i<ien ; i++ ) {\n\t\t\t\tcols[i].sType = null;\n\t\t\t}\n\t\n\t\t\t// Update DataTables special `DT_*` attributes for the row\n\t\t\t_fnRowAttributes( settings, row );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Build a data source object from an HTML row, reading the contents of the\n\t * cells that are in the row.\n\t *\n\t * @param {object} settings DataTables settings object\n\t * @param {node|object} TR element from which to read data or existing row\n\t *   object from which to re-read the data from the cells\n\t * @param {int} [colIdx] Optional column index\n\t * @param {array|object} [d] Data source object. If `colIdx` is given then this\n\t *   parameter should also be given and will be used to write the data into.\n\t *   Only the column in question will be written\n\t * @returns {object} Object with two parameters: `data` the data read, in\n\t *   document order, and `cells` and array of nodes (they can be useful to the\n\t *   caller, so rather than needing a second traversal to get them, just return\n\t *   them from here).\n\t * @memberof DataTable#oApi\n\t */\n\tfunction _fnGetRowElements( settings, row, colIdx, d )\n\t{\n\t\tvar\n\t\t\ttds = [],\n\t\t\ttd = row.firstChild,\n\t\t\tname, col, o, i=0, contents,\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tobjectRead = settings._rowReadObject;\n\t\n\t\t// Allow the data object to be passed in, or construct\n\t\td = d !== undefined ?\n\t\t\td :\n\t\t\tobjectRead ?\n\t\t\t\t{} :\n\t\t\t\t[];\n\t\n\t\tvar attr = function ( str, td  ) {\n\t\t\tif ( typeof str === 'string' ) {\n\t\t\t\tvar idx = str.indexOf('@');\n\t\n\t\t\t\tif ( idx !== -1 ) {\n\t\t\t\t\tvar attr = str.substring( idx+1 );\n\t\t\t\t\tvar setter = _fnSetObjectDataFn( str );\n\t\t\t\t\tsetter( d, td.getAttribute( attr ) );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\n\t\t// Read data from a cell and store into the data object\n\t\tvar cellProcess = function ( cell ) {\n\t\t\tif ( colIdx === undefined || colIdx === i ) {\n\t\t\t\tcol = columns[i];\n\t\t\t\tcontents = (cell.innerHTML).trim();\n\t\n\t\t\t\tif ( col && col._bAttrSrc ) {\n\t\t\t\t\tvar setter = _fnSetObjectDataFn( col.mData._ );\n\t\t\t\t\tsetter( d, contents );\n\t\n\t\t\t\t\tattr( col.mData.sort, cell );\n\t\t\t\t\tattr( col.mData.type, cell );\n\t\t\t\t\tattr( col.mData.filter, cell );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Depending on the `data` option for the columns the data can\n\t\t\t\t\t// be read to either an object or an array.\n\t\t\t\t\tif ( objectRead ) {\n\t\t\t\t\t\tif ( ! col._setter ) {\n\t\t\t\t\t\t\t// Cache the setter function\n\t\t\t\t\t\t\tcol._setter = _fnSetObjectDataFn( col.mData );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcol._setter( d, contents );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\td[i] = contents;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\ti++;\n\t\t};\n\t\n\t\tif ( td ) {\n\t\t\t// `tr` element was passed in\n\t\t\twhile ( td ) {\n\t\t\t\tname = td.nodeName.toUpperCase();\n\t\n\t\t\t\tif ( name == \"TD\" || name == \"TH\" ) {\n\t\t\t\t\tcellProcess( td );\n\t\t\t\t\ttds.push( td );\n\t\t\t\t}\n\t\n\t\t\t\ttd = td.nextSibling;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Existing row object passed in\n\t\t\ttds = row.anCells;\n\t\n\t\t\tfor ( var j=0, jen=tds.length ; j<jen ; j++ ) {\n\t\t\t\tcellProcess( tds[j] );\n\t\t\t}\n\t\t}\n\t\n\t\t// Read the ID from the DOM if present\n\t\tvar rowNode = row.firstChild ? row : row.nTr;\n\t\n\t\tif ( rowNode ) {\n\t\t\tvar id = rowNode.getAttribute( 'id' );\n\t\n\t\t\tif ( id ) {\n\t\t\t\t_fnSetObjectDataFn( settings.rowId )( d, id );\n\t\t\t}\n\t\t}\n\t\n\t\treturn {\n\t\t\tdata: d,\n\t\t\tcells: tds\n\t\t};\n\t}\n\t/**\n\t * Create a new TR element (and it's TD children) for a row\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow Row to consider\n\t *  @param {node} [nTrIn] TR element to add to the table - optional. If not given,\n\t *    DataTables will create a row automatically\n\t *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n\t *    if nTr is.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCreateTr ( oSettings, iRow, nTrIn, anTds )\n\t{\n\t\tvar\n\t\t\trow = oSettings.aoData[iRow],\n\t\t\trowData = row._aData,\n\t\t\tcells = [],\n\t\t\tnTr, nTd, oCol,\n\t\t\ti, iLen, create;\n\t\n\t\tif ( row.nTr === null )\n\t\t{\n\t\t\tnTr = nTrIn || document.createElement('tr');\n\t\n\t\t\trow.nTr = nTr;\n\t\t\trow.anCells = cells;\n\t\n\t\t\t/* Use a private property on the node to allow reserve mapping from the node\n\t\t\t * to the aoData array for fast look up\n\t\t\t */\n\t\t\tnTr._DT_RowIndex = iRow;\n\t\n\t\t\t/* Special parameters can be given by the data source to be used on the row */\n\t\t\t_fnRowAttributes( oSettings, row );\n\t\n\t\t\t/* Process each column */\n\t\t\tfor ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\toCol = oSettings.aoColumns[i];\n\t\t\t\tcreate = nTrIn ? false : true;\n\t\n\t\t\t\tnTd = create ? document.createElement( oCol.sCellType ) : anTds[i];\n\t\t\t\tnTd._DT_CellIndex = {\n\t\t\t\t\trow: iRow,\n\t\t\t\t\tcolumn: i\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tcells.push( nTd );\n\t\n\t\t\t\t// Need to create the HTML if new, or if a rendering function is defined\n\t\t\t\tif ( create || ((oCol.mRender || oCol.mData !== i) &&\n\t\t\t\t\t (!$.isPlainObject(oCol.mData) || oCol.mData._ !== i+'.display')\n\t\t\t\t)) {\n\t\t\t\t\tnTd.innerHTML = _fnGetCellData( oSettings, iRow, i, 'display' );\n\t\t\t\t}\n\t\n\t\t\t\t/* Add user defined class */\n\t\t\t\tif ( oCol.sClass )\n\t\t\t\t{\n\t\t\t\t\tnTd.className += ' '+oCol.sClass;\n\t\t\t\t}\n\t\n\t\t\t\t// Visibility - add or remove as required\n\t\t\t\tif ( oCol.bVisible && ! nTrIn )\n\t\t\t\t{\n\t\t\t\t\tnTr.appendChild( nTd );\n\t\t\t\t}\n\t\t\t\telse if ( ! oCol.bVisible && nTrIn )\n\t\t\t\t{\n\t\t\t\t\tnTd.parentNode.removeChild( nTd );\n\t\t\t\t}\n\t\n\t\t\t\tif ( oCol.fnCreatedCell )\n\t\t\t\t{\n\t\t\t\t\toCol.fnCreatedCell.call( oSettings.oInstance,\n\t\t\t\t\t\tnTd, _fnGetCellData( oSettings, iRow, i ), rowData, iRow, i\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t_fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [nTr, rowData, iRow, cells] );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Add attributes to a row based on the special `DT_*` parameters in a data\n\t * source object.\n\t *  @param {object} settings DataTables settings object\n\t *  @param {object} DataTables row object for the row to be modified\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnRowAttributes( settings, row )\n\t{\n\t\tvar tr = row.nTr;\n\t\tvar data = row._aData;\n\t\n\t\tif ( tr ) {\n\t\t\tvar id = settings.rowIdFn( data );\n\t\n\t\t\tif ( id ) {\n\t\t\t\ttr.id = id;\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowClass ) {\n\t\t\t\t// Remove any classes added by DT_RowClass before\n\t\t\t\tvar a = data.DT_RowClass.split(' ');\n\t\t\t\trow.__rowc = row.__rowc ?\n\t\t\t\t\t_unique( row.__rowc.concat( a ) ) :\n\t\t\t\t\ta;\n\t\n\t\t\t\t$(tr)\n\t\t\t\t\t.removeClass( row.__rowc.join(' ') )\n\t\t\t\t\t.addClass( data.DT_RowClass );\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowAttr ) {\n\t\t\t\t$(tr).attr( data.DT_RowAttr );\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowData ) {\n\t\t\t\t$(tr).data( data.DT_RowData );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Create the HTML header for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBuildHead( oSettings )\n\t{\n\t\tvar i, ien, cell, row, column;\n\t\tvar thead = oSettings.nTHead;\n\t\tvar tfoot = oSettings.nTFoot;\n\t\tvar createHeader = $('th, td', thead).length === 0;\n\t\tvar classes = oSettings.oClasses;\n\t\tvar columns = oSettings.aoColumns;\n\t\n\t\tif ( createHeader ) {\n\t\t\trow = $('<tr/>').appendTo( thead );\n\t\t}\n\t\n\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\t\tcell = $( column.nTh ).addClass( column.sClass );\n\t\n\t\t\tif ( createHeader ) {\n\t\t\t\tcell.appendTo( row );\n\t\t\t}\n\t\n\t\t\t// 1.11 move into sorting\n\t\t\tif ( oSettings.oFeatures.bSort ) {\n\t\t\t\tcell.addClass( column.sSortingClass );\n\t\n\t\t\t\tif ( column.bSortable !== false ) {\n\t\t\t\t\tcell\n\t\t\t\t\t\t.attr( 'tabindex', oSettings.iTabIndex )\n\t\t\t\t\t\t.attr( 'aria-controls', oSettings.sTableId );\n\t\n\t\t\t\t\t_fnSortAttachListener( oSettings, column.nTh, i );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( column.sTitle != cell[0].innerHTML ) {\n\t\t\t\tcell.html( column.sTitle );\n\t\t\t}\n\t\n\t\t\t_fnRenderer( oSettings, 'header' )(\n\t\t\t\toSettings, cell, column, classes\n\t\t\t);\n\t\t}\n\t\n\t\tif ( createHeader ) {\n\t\t\t_fnDetectHeader( oSettings.aoHeader, thead );\n\t\t}\n\t\n\t\t/* Deal with the footer - add classes if required */\n\t\t$(thead).children('tr').children('th, td').addClass( classes.sHeaderTH );\n\t\t$(tfoot).children('tr').children('th, td').addClass( classes.sFooterTH );\n\t\n\t\t// Cache the footer cells. Note that we only take the cells from the first\n\t\t// row in the footer. If there is more than one row the user wants to\n\t\t// interact with, they need to use the table().foot() method. Note also this\n\t\t// allows cells to be used for multiple columns using colspan\n\t\tif ( tfoot !== null ) {\n\t\t\tvar cells = oSettings.aoFooter[0];\n\t\n\t\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tcolumn = columns[i];\n\t\t\t\tcolumn.nTf = cells[i].cell;\n\t\n\t\t\t\tif ( column.sClass ) {\n\t\t\t\t\t$(column.nTf).addClass( column.sClass );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Draw the header (or footer) element based on the column visibility states. The\n\t * methodology here is to use the layout array from _fnDetectHeader, modified for\n\t * the instantaneous column visibility, to construct the new layout. The grid is\n\t * traversed over cell at a time in a rows x columns grid fashion, although each\n\t * cell insert can cover multiple elements in the grid - which is tracks using the\n\t * aApplied array. Cell inserts in the grid will only occur where there isn't\n\t * already a cell in that position.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param array {objects} aoSource Layout array from _fnDetectHeader\n\t *  @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc,\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDrawHead( oSettings, aoSource, bIncludeHidden )\n\t{\n\t\tvar i, iLen, j, jLen, k, kLen, n, nLocalTr;\n\t\tvar aoLocal = [];\n\t\tvar aApplied = [];\n\t\tvar iColumns = oSettings.aoColumns.length;\n\t\tvar iRowspan, iColspan;\n\t\n\t\tif ( ! aoSource )\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\n\t\tif (  bIncludeHidden === undefined )\n\t\t{\n\t\t\tbIncludeHidden = false;\n\t\t}\n\t\n\t\t/* Make a copy of the master layout array, but without the visible columns in it */\n\t\tfor ( i=0, iLen=aoSource.length ; i<iLen ; i++ )\n\t\t{\n\t\t\taoLocal[i] = aoSource[i].slice();\n\t\t\taoLocal[i].nTr = aoSource[i].nTr;\n\t\n\t\t\t/* Remove any columns which are currently hidden */\n\t\t\tfor ( j=iColumns-1 ; j>=0 ; j-- )\n\t\t\t{\n\t\t\t\tif ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden )\n\t\t\t\t{\n\t\t\t\t\taoLocal[i].splice( j, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t/* Prep the applied array - it needs an element for each row */\n\t\t\taApplied.push( [] );\n\t\t}\n\t\n\t\tfor ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tnLocalTr = aoLocal[i].nTr;\n\t\n\t\t\t/* All cells are going to be replaced, so empty out the row */\n\t\t\tif ( nLocalTr )\n\t\t\t{\n\t\t\t\twhile( (n = nLocalTr.firstChild) )\n\t\t\t\t{\n\t\t\t\t\tnLocalTr.removeChild( n );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tiRowspan = 1;\n\t\t\t\tiColspan = 1;\n\t\n\t\t\t\t/* Check to see if there is already a cell (row/colspan) covering our target\n\t\t\t\t * insert point. If there is, then there is nothing to do.\n\t\t\t\t */\n\t\t\t\tif ( aApplied[i][j] === undefined )\n\t\t\t\t{\n\t\t\t\t\tnLocalTr.appendChild( aoLocal[i][j].cell );\n\t\t\t\t\taApplied[i][j] = 1;\n\t\n\t\t\t\t\t/* Expand the cell to cover as many rows as needed */\n\t\t\t\t\twhile ( aoLocal[i+iRowspan] !== undefined &&\n\t\t\t\t\t        aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell )\n\t\t\t\t\t{\n\t\t\t\t\t\taApplied[i+iRowspan][j] = 1;\n\t\t\t\t\t\tiRowspan++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Expand the cell to cover as many columns as needed */\n\t\t\t\t\twhile ( aoLocal[i][j+iColspan] !== undefined &&\n\t\t\t\t\t        aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Must update the applied array over the rows for the columns */\n\t\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\taApplied[i+k][j+iColspan] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tiColspan++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Do the actual expansion in the DOM */\n\t\t\t\t\t$(aoLocal[i][j].cell)\n\t\t\t\t\t\t.attr('rowspan', iRowspan)\n\t\t\t\t\t\t.attr('colspan', iColspan);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Insert the required TR nodes into the table for display\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param ajaxComplete true after ajax call to complete rendering\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDraw( oSettings, ajaxComplete )\n\t{\n\t\t// Allow for state saving and a custom start position\n\t\t_fnStart( oSettings );\n\t\n\t\t/* Provide a pre-callback function which can be used to cancel the draw is false is returned */\n\t\tvar aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );\n\t\tif ( $.inArray( false, aPreDraw ) !== -1 )\n\t\t{\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar anRows = [];\n\t\tvar iRowCount = 0;\n\t\tvar asStripeClasses = oSettings.asStripeClasses;\n\t\tvar iStripes = asStripeClasses.length;\n\t\tvar oLang = oSettings.oLanguage;\n\t\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\t\tvar aiDisplay = oSettings.aiDisplay;\n\t\tvar iDisplayStart = oSettings._iDisplayStart;\n\t\tvar iDisplayEnd = oSettings.fnDisplayEnd();\n\t\n\t\toSettings.bDrawing = true;\n\t\n\t\t/* Server-side processing draw intercept */\n\t\tif ( oSettings.bDeferLoading )\n\t\t{\n\t\t\toSettings.bDeferLoading = false;\n\t\t\toSettings.iDraw++;\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t}\n\t\telse if ( !bServerSide )\n\t\t{\n\t\t\toSettings.iDraw++;\n\t\t}\n\t\telse if ( !oSettings.bDestroying && !ajaxComplete)\n\t\t{\n\t\t\t_fnAjaxUpdate( oSettings );\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( aiDisplay.length !== 0 )\n\t\t{\n\t\t\tvar iStart = bServerSide ? 0 : iDisplayStart;\n\t\t\tvar iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;\n\t\n\t\t\tfor ( var j=iStart ; j<iEnd ; j++ )\n\t\t\t{\n\t\t\t\tvar iDataIndex = aiDisplay[j];\n\t\t\t\tvar aoData = oSettings.aoData[ iDataIndex ];\n\t\t\t\tif ( aoData.nTr === null )\n\t\t\t\t{\n\t\t\t\t\t_fnCreateTr( oSettings, iDataIndex );\n\t\t\t\t}\n\t\n\t\t\t\tvar nRow = aoData.nTr;\n\t\n\t\t\t\t/* Remove the old striping classes and then add the new one */\n\t\t\t\tif ( iStripes !== 0 )\n\t\t\t\t{\n\t\t\t\t\tvar sStripe = asStripeClasses[ iRowCount % iStripes ];\n\t\t\t\t\tif ( aoData._sRowStripe != sStripe )\n\t\t\t\t\t{\n\t\t\t\t\t\t$(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe );\n\t\t\t\t\t\taoData._sRowStripe = sStripe;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Row callback functions - might want to manipulate the row\n\t\t\t\t// iRowCount and j are not currently documented. Are they at all\n\t\t\t\t// useful?\n\t\t\t\t_fnCallbackFire( oSettings, 'aoRowCallback', null,\n\t\t\t\t\t[nRow, aoData._aData, iRowCount, j, iDataIndex] );\n\t\n\t\t\t\tanRows.push( nRow );\n\t\t\t\tiRowCount++;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Table is empty - create a row with an empty message in it */\n\t\t\tvar sZero = oLang.sZeroRecords;\n\t\t\tif ( oSettings.iDraw == 1 &&  _fnDataSource( oSettings ) == 'ajax' )\n\t\t\t{\n\t\t\t\tsZero = oLang.sLoadingRecords;\n\t\t\t}\n\t\t\telse if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 )\n\t\t\t{\n\t\t\t\tsZero = oLang.sEmptyTable;\n\t\t\t}\n\t\n\t\t\tanRows[ 0 ] = $( '<tr/>', { 'class': iStripes ? asStripeClasses[0] : '' } )\n\t\t\t\t.append( $('<td />', {\n\t\t\t\t\t'valign':  'top',\n\t\t\t\t\t'colSpan': _fnVisbleColumns( oSettings ),\n\t\t\t\t\t'class':   oSettings.oClasses.sRowEmpty\n\t\t\t\t} ).html( sZero ) )[0];\n\t\t}\n\t\n\t\t/* Header and footer callbacks */\n\t\t_fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0],\n\t\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\t\n\t\t_fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0],\n\t\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\t\n\t\tvar body = $(oSettings.nTBody);\n\t\n\t\tbody.children().detach();\n\t\tbody.append( $(anRows) );\n\t\n\t\t/* Call all required callback functions for the end of a draw */\n\t\t_fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] );\n\t\n\t\t/* Draw is complete, sorting and filtering must be as well */\n\t\toSettings.bSorted = false;\n\t\toSettings.bFiltered = false;\n\t\toSettings.bDrawing = false;\n\t}\n\t\n\t\n\t/**\n\t * Redraw the table - taking account of the various features which are enabled\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {boolean} [holdPosition] Keep the current paging position. By default\n\t *    the paging is reset to the first page\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnReDraw( settings, holdPosition )\n\t{\n\t\tvar\n\t\t\tfeatures = settings.oFeatures,\n\t\t\tsort     = features.bSort,\n\t\t\tfilter   = features.bFilter;\n\t\n\t\tif ( sort ) {\n\t\t\t_fnSort( settings );\n\t\t}\n\t\n\t\tif ( filter ) {\n\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch );\n\t\t}\n\t\telse {\n\t\t\t// No filtering, so we want to just use the display master\n\t\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\t}\n\t\n\t\tif ( holdPosition !== true ) {\n\t\t\tsettings._iDisplayStart = 0;\n\t\t}\n\t\n\t\t// Let any modules know about the draw hold position state (used by\n\t\t// scrolling internally)\n\t\tsettings._drawHold = holdPosition;\n\t\n\t\t_fnDraw( settings );\n\t\n\t\tsettings._drawHold = false;\n\t}\n\t\n\t\n\t/**\n\t * Add the options to the page HTML for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddOptionsHtml ( oSettings )\n\t{\n\t\tvar classes = oSettings.oClasses;\n\t\tvar table = $(oSettings.nTable);\n\t\tvar holding = $('<div/>').insertBefore( table ); // Holding element for speed\n\t\tvar features = oSettings.oFeatures;\n\t\n\t\t// All DataTables are wrapped in a div\n\t\tvar insert = $('<div/>', {\n\t\t\tid:      oSettings.sTableId+'_wrapper',\n\t\t\t'class': classes.sWrapper + (oSettings.nTFoot ? '' : ' '+classes.sNoFooter)\n\t\t} );\n\t\n\t\toSettings.nHolding = holding[0];\n\t\toSettings.nTableWrapper = insert[0];\n\t\toSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;\n\t\n\t\t/* Loop over the user set positioning and place the elements as needed */\n\t\tvar aDom = oSettings.sDom.split('');\n\t\tvar featureNode, cOption, nNewNode, cNext, sAttr, j;\n\t\tfor ( var i=0 ; i<aDom.length ; i++ )\n\t\t{\n\t\t\tfeatureNode = null;\n\t\t\tcOption = aDom[i];\n\t\n\t\t\tif ( cOption == '<' )\n\t\t\t{\n\t\t\t\t/* New container div */\n\t\t\t\tnNewNode = $('<div/>')[0];\n\t\n\t\t\t\t/* Check to see if we should append an id and/or a class name to the container */\n\t\t\t\tcNext = aDom[i+1];\n\t\t\t\tif ( cNext == \"'\" || cNext == '\"' )\n\t\t\t\t{\n\t\t\t\t\tsAttr = \"\";\n\t\t\t\t\tj = 2;\n\t\t\t\t\twhile ( aDom[i+j] != cNext )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr += aDom[i+j];\n\t\t\t\t\t\tj++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Replace jQuery UI constants @todo depreciated */\n\t\t\t\t\tif ( sAttr == \"H\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr = classes.sJUIHeader;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( sAttr == \"F\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr = classes.sJUIFooter;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* The attribute can be in the format of \"#id.class\", \"#id\" or \"class\" This logic\n\t\t\t\t\t * breaks the string into parts and applies them as needed\n\t\t\t\t\t */\n\t\t\t\t\tif ( sAttr.indexOf('.') != -1 )\n\t\t\t\t\t{\n\t\t\t\t\t\tvar aSplit = sAttr.split('.');\n\t\t\t\t\t\tnNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);\n\t\t\t\t\t\tnNewNode.className = aSplit[1];\n\t\t\t\t\t}\n\t\t\t\t\telse if ( sAttr.charAt(0) == \"#\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tnNewNode.id = sAttr.substr(1, sAttr.length-1);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tnNewNode.className = sAttr;\n\t\t\t\t\t}\n\t\n\t\t\t\t\ti += j; /* Move along the position array */\n\t\t\t\t}\n\t\n\t\t\t\tinsert.append( nNewNode );\n\t\t\t\tinsert = $(nNewNode);\n\t\t\t}\n\t\t\telse if ( cOption == '>' )\n\t\t\t{\n\t\t\t\t/* End container div */\n\t\t\t\tinsert = insert.parent();\n\t\t\t}\n\t\t\t// @todo Move options into their own plugins?\n\t\t\telse if ( cOption == 'l' && features.bPaginate && features.bLengthChange )\n\t\t\t{\n\t\t\t\t/* Length */\n\t\t\t\tfeatureNode = _fnFeatureHtmlLength( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'f' && features.bFilter )\n\t\t\t{\n\t\t\t\t/* Filter */\n\t\t\t\tfeatureNode = _fnFeatureHtmlFilter( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'r' && features.bProcessing )\n\t\t\t{\n\t\t\t\t/* pRocessing */\n\t\t\t\tfeatureNode = _fnFeatureHtmlProcessing( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 't' )\n\t\t\t{\n\t\t\t\t/* Table */\n\t\t\t\tfeatureNode = _fnFeatureHtmlTable( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption ==  'i' && features.bInfo )\n\t\t\t{\n\t\t\t\t/* Info */\n\t\t\t\tfeatureNode = _fnFeatureHtmlInfo( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'p' && features.bPaginate )\n\t\t\t{\n\t\t\t\t/* Pagination */\n\t\t\t\tfeatureNode = _fnFeatureHtmlPaginate( oSettings );\n\t\t\t}\n\t\t\telse if ( DataTable.ext.feature.length !== 0 )\n\t\t\t{\n\t\t\t\t/* Plug-in features */\n\t\t\t\tvar aoFeatures = DataTable.ext.feature;\n\t\t\t\tfor ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )\n\t\t\t\t{\n\t\t\t\t\tif ( cOption == aoFeatures[k].cFeature )\n\t\t\t\t\t{\n\t\t\t\t\t\tfeatureNode = aoFeatures[k].fnInit( oSettings );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t/* Add to the 2D features array */\n\t\t\tif ( featureNode )\n\t\t\t{\n\t\t\t\tvar aanFeatures = oSettings.aanFeatures;\n\t\n\t\t\t\tif ( ! aanFeatures[cOption] )\n\t\t\t\t{\n\t\t\t\t\taanFeatures[cOption] = [];\n\t\t\t\t}\n\t\n\t\t\t\taanFeatures[cOption].push( featureNode );\n\t\t\t\tinsert.append( featureNode );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Built our DOM structure - replace the holding div with what we want */\n\t\tholding.replaceWith( insert );\n\t\toSettings.nHolding = null;\n\t}\n\t\n\t\n\t/**\n\t * Use the DOM source to create up an array of header cells. The idea here is to\n\t * create a layout grid (array) of rows x columns, which contains a reference\n\t * to the cell that that point in the grid (regardless of col/rowspan), such that\n\t * any column / row could be removed and the new grid constructed\n\t *  @param array {object} aLayout Array to store the calculated layout in\n\t *  @param {node} nThead The header/footer element for the table\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDetectHeader ( aLayout, nThead )\n\t{\n\t\tvar nTrs = $(nThead).children('tr');\n\t\tvar nTr, nCell;\n\t\tvar i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan;\n\t\tvar bUnique;\n\t\tvar fnShiftCol = function ( a, i, j ) {\n\t\t\tvar k = a[i];\n\t                while ( k[j] ) {\n\t\t\t\tj++;\n\t\t\t}\n\t\t\treturn j;\n\t\t};\n\t\n\t\taLayout.splice( 0, aLayout.length );\n\t\n\t\t/* We know how many rows there are in the layout - so prep it */\n\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t{\n\t\t\taLayout.push( [] );\n\t\t}\n\t\n\t\t/* Calculate a layout array */\n\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tnTr = nTrs[i];\n\t\t\tiColumn = 0;\n\t\n\t\t\t/* For every cell in the row... */\n\t\t\tnCell = nTr.firstChild;\n\t\t\twhile ( nCell ) {\n\t\t\t\tif ( nCell.nodeName.toUpperCase() == \"TD\" ||\n\t\t\t\t     nCell.nodeName.toUpperCase() == \"TH\" )\n\t\t\t\t{\n\t\t\t\t\t/* Get the col and rowspan attributes from the DOM and sanitise them */\n\t\t\t\t\tiColspan = nCell.getAttribute('colspan') * 1;\n\t\t\t\t\tiRowspan = nCell.getAttribute('rowspan') * 1;\n\t\t\t\t\tiColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;\n\t\t\t\t\tiRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;\n\t\n\t\t\t\t\t/* There might be colspan cells already in this row, so shift our target\n\t\t\t\t\t * accordingly\n\t\t\t\t\t */\n\t\t\t\t\tiColShifted = fnShiftCol( aLayout, i, iColumn );\n\t\n\t\t\t\t\t/* Cache calculation for unique columns */\n\t\t\t\t\tbUnique = iColspan === 1 ? true : false;\n\t\n\t\t\t\t\t/* If there is col / rowspan, copy the information into the layout grid */\n\t\t\t\t\tfor ( l=0 ; l<iColspan ; l++ )\n\t\t\t\t\t{\n\t\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\taLayout[i+k][iColShifted+l] = {\n\t\t\t\t\t\t\t\t\"cell\": nCell,\n\t\t\t\t\t\t\t\t\"unique\": bUnique\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\taLayout[i+k].nTr = nTr;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnCell = nCell.nextSibling;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Get an array of unique th elements, one for each column\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} nHeader automatically detect the layout from this node - optional\n\t *  @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional\n\t *  @returns array {node} aReturn list of unique th's\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetUniqueThs ( oSettings, nHeader, aLayout )\n\t{\n\t\tvar aReturn = [];\n\t\tif ( !aLayout )\n\t\t{\n\t\t\taLayout = oSettings.aoHeader;\n\t\t\tif ( nHeader )\n\t\t\t{\n\t\t\t\taLayout = [];\n\t\t\t\t_fnDetectHeader( aLayout, nHeader );\n\t\t\t}\n\t\t}\n\t\n\t\tfor ( var i=0, iLen=aLayout.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tfor ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tif ( aLayout[i][j].unique &&\n\t\t\t\t\t (!aReturn[j] || !oSettings.bSortCellsTop) )\n\t\t\t\t{\n\t\t\t\t\taReturn[j] = aLayout[i][j].cell;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn aReturn;\n\t}\n\t\n\t/**\n\t * Set the start position for draw\n\t *  @param {object} oSettings dataTables settings object\n\t */\n\tfunction _fnStart( oSettings )\n\t{\n\t\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\t\tvar iInitDisplayStart = oSettings.iInitDisplayStart;\n\t\n\t\t// Check and see if we have an initial draw position from state saving\n\t\tif ( iInitDisplayStart !== undefined && iInitDisplayStart !== -1 )\n\t\t{\n\t\t\toSettings._iDisplayStart = bServerSide ?\n\t\t\t\tiInitDisplayStart :\n\t\t\t\tiInitDisplayStart >= oSettings.fnRecordsDisplay() ?\n\t\t\t\t\t0 :\n\t\t\t\t\tiInitDisplayStart;\n\t\n\t\t\toSettings.iInitDisplayStart = -1;\n\t\t}\n\t}\n\t\n\t/**\n\t * Create an Ajax call based on the table's settings, taking into account that\n\t * parameters can have multiple forms, and backwards compatibility.\n\t *\n\t * @param {object} oSettings dataTables settings object\n\t * @param {array} data Data to send to the server, required by\n\t *     DataTables - may be augmented by developer callbacks\n\t * @param {function} fn Callback function to run when data is obtained\n\t */\n\tfunction _fnBuildAjax( oSettings, data, fn )\n\t{\n\t\t// Compatibility with 1.9-, allow fnServerData and event to manipulate\n\t\t_fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [data] );\n\t\n\t\t// Convert to object based for 1.10+ if using the old array scheme which can\n\t\t// come from server-side processing or serverParams\n\t\tif ( data && Array.isArray(data) ) {\n\t\t\tvar tmp = {};\n\t\t\tvar rbracket = /(.*?)\\[\\]$/;\n\t\n\t\t\t$.each( data, function (key, val) {\n\t\t\t\tvar match = val.name.match(rbracket);\n\t\n\t\t\t\tif ( match ) {\n\t\t\t\t\t// Support for arrays\n\t\t\t\t\tvar name = match[0];\n\t\n\t\t\t\t\tif ( ! tmp[ name ] ) {\n\t\t\t\t\t\ttmp[ name ] = [];\n\t\t\t\t\t}\n\t\t\t\t\ttmp[ name ].push( val.value );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttmp[val.name] = val.value;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tdata = tmp;\n\t\t}\n\t\n\t\tvar ajaxData;\n\t\tvar ajax = oSettings.ajax;\n\t\tvar instance = oSettings.oInstance;\n\t\tvar callback = function ( json ) {\n\t\t\tvar status = oSettings.jqXHR\n\t\t\t\t? oSettings.jqXHR.status\n\t\t\t\t: null;\n\t\n\t\t\tif ( json === null || (typeof status === 'number' && status == 204 ) ) {\n\t\t\t\tjson = {};\n\t\t\t\t_fnAjaxDataSrc( oSettings, json, [] );\n\t\t\t}\n\t\n\t\t\tvar error = json.error || json.sError;\n\t\t\tif ( error ) {\n\t\t\t\t_fnLog( oSettings, 0, error );\n\t\t\t}\n\t\n\t\t\toSettings.json = json;\n\t\n\t\t\t_fnCallbackFire( oSettings, null, 'xhr', [oSettings, json, oSettings.jqXHR] );\n\t\t\tfn( json );\n\t\t};\n\t\n\t\tif ( $.isPlainObject( ajax ) && ajax.data )\n\t\t{\n\t\t\tajaxData = ajax.data;\n\t\n\t\t\tvar newData = typeof ajaxData === 'function' ?\n\t\t\t\tajaxData( data, oSettings ) :  // fn can manipulate data or return\n\t\t\t\tajaxData;                      // an object object or array to merge\n\t\n\t\t\t// If the function returned something, use that alone\n\t\t\tdata = typeof ajaxData === 'function' && newData ?\n\t\t\t\tnewData :\n\t\t\t\t$.extend( true, data, newData );\n\t\n\t\t\t// Remove the data property as we've resolved it already and don't want\n\t\t\t// jQuery to do it again (it is restored at the end of the function)\n\t\t\tdelete ajax.data;\n\t\t}\n\t\n\t\tvar baseAjax = {\n\t\t\t\"data\": data,\n\t\t\t\"success\": callback,\n\t\t\t\"dataType\": \"json\",\n\t\t\t\"cache\": false,\n\t\t\t\"type\": oSettings.sServerMethod,\n\t\t\t\"error\": function (xhr, error, thrown) {\n\t\t\t\tvar ret = _fnCallbackFire( oSettings, null, 'xhr', [oSettings, null, oSettings.jqXHR] );\n\t\n\t\t\t\tif ( $.inArray( true, ret ) === -1 ) {\n\t\t\t\t\tif ( error == \"parsererror\" ) {\n\t\t\t\t\t\t_fnLog( oSettings, 0, 'Invalid JSON response', 1 );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( xhr.readyState === 4 ) {\n\t\t\t\t\t\t_fnLog( oSettings, 0, 'Ajax error', 7 );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t\t}\n\t\t};\n\t\n\t\t// Store the data submitted for the API\n\t\toSettings.oAjaxData = data;\n\t\n\t\t// Allow plug-ins and external processes to modify the data\n\t\t_fnCallbackFire( oSettings, null, 'preXhr', [oSettings, data] );\n\t\n\t\tif ( oSettings.fnServerData )\n\t\t{\n\t\t\t// DataTables 1.9- compatibility\n\t\t\toSettings.fnServerData.call( instance,\n\t\t\t\toSettings.sAjaxSource,\n\t\t\t\t$.map( data, function (val, key) { // Need to convert back to 1.9 trad format\n\t\t\t\t\treturn { name: key, value: val };\n\t\t\t\t} ),\n\t\t\t\tcallback,\n\t\t\t\toSettings\n\t\t\t);\n\t\t}\n\t\telse if ( oSettings.sAjaxSource || typeof ajax === 'string' )\n\t\t{\n\t\t\t// DataTables 1.9- compatibility\n\t\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, {\n\t\t\t\turl: ajax || oSettings.sAjaxSource\n\t\t\t} ) );\n\t\t}\n\t\telse if ( typeof ajax === 'function' )\n\t\t{\n\t\t\t// Is a function - let the caller define what needs to be done\n\t\t\toSettings.jqXHR = ajax.call( instance, data, callback, oSettings );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Object to extend the base settings\n\t\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, ajax ) );\n\t\n\t\t\t// Restore for next time around\n\t\t\tajax.data = ajaxData;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Update the table using an Ajax call\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {boolean} Block the table drawing or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxUpdate( settings )\n\t{\n\t\tsettings.iDraw++;\n\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t_fnBuildAjax(\n\t\t\tsettings,\n\t\t\t_fnAjaxParameters( settings ),\n\t\t\tfunction(json) {\n\t\t\t\t_fnAjaxUpdateDraw( settings, json );\n\t\t\t}\n\t\t);\n\t}\n\t\n\t\n\t/**\n\t * Build up the parameters in an object needed for a server-side processing\n\t * request. Note that this is basically done twice, is different ways - a modern\n\t * method which is used by default in DataTables 1.10 which uses objects and\n\t * arrays, or the 1.9- method with is name / value pairs. 1.9 method is used if\n\t * the sAjaxSource option is used in the initialisation, or the legacyAjax\n\t * option is set.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {bool} block the table drawing or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxParameters( settings )\n\t{\n\t\tvar\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tcolumnCount = columns.length,\n\t\t\tfeatures = settings.oFeatures,\n\t\t\tpreSearch = settings.oPreviousSearch,\n\t\t\tpreColSearch = settings.aoPreSearchCols,\n\t\t\ti, data = [], dataProp, column, columnSearch,\n\t\t\tsort = _fnSortFlatten( settings ),\n\t\t\tdisplayStart = settings._iDisplayStart,\n\t\t\tdisplayLength = features.bPaginate !== false ?\n\t\t\t\tsettings._iDisplayLength :\n\t\t\t\t-1;\n\t\n\t\tvar param = function ( name, value ) {\n\t\t\tdata.push( { 'name': name, 'value': value } );\n\t\t};\n\t\n\t\t// DataTables 1.9- compatible method\n\t\tparam( 'sEcho',          settings.iDraw );\n\t\tparam( 'iColumns',       columnCount );\n\t\tparam( 'sColumns',       _pluck( columns, 'sName' ).join(',') );\n\t\tparam( 'iDisplayStart',  displayStart );\n\t\tparam( 'iDisplayLength', displayLength );\n\t\n\t\t// DataTables 1.10+ method\n\t\tvar d = {\n\t\t\tdraw:    settings.iDraw,\n\t\t\tcolumns: [],\n\t\t\torder:   [],\n\t\t\tstart:   displayStart,\n\t\t\tlength:  displayLength,\n\t\t\tsearch:  {\n\t\t\t\tvalue: preSearch.sSearch,\n\t\t\t\tregex: preSearch.bRegex\n\t\t\t}\n\t\t};\n\t\n\t\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\t\tcolumnSearch = preColSearch[i];\n\t\t\tdataProp = typeof column.mData==\"function\" ? 'function' : column.mData ;\n\t\n\t\t\td.columns.push( {\n\t\t\t\tdata:       dataProp,\n\t\t\t\tname:       column.sName,\n\t\t\t\tsearchable: column.bSearchable,\n\t\t\t\torderable:  column.bSortable,\n\t\t\t\tsearch:     {\n\t\t\t\t\tvalue: columnSearch.sSearch,\n\t\t\t\t\tregex: columnSearch.bRegex\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\tparam( \"mDataProp_\"+i, dataProp );\n\t\n\t\t\tif ( features.bFilter ) {\n\t\t\t\tparam( 'sSearch_'+i,     columnSearch.sSearch );\n\t\t\t\tparam( 'bRegex_'+i,      columnSearch.bRegex );\n\t\t\t\tparam( 'bSearchable_'+i, column.bSearchable );\n\t\t\t}\n\t\n\t\t\tif ( features.bSort ) {\n\t\t\t\tparam( 'bSortable_'+i, column.bSortable );\n\t\t\t}\n\t\t}\n\t\n\t\tif ( features.bFilter ) {\n\t\t\tparam( 'sSearch', preSearch.sSearch );\n\t\t\tparam( 'bRegex', preSearch.bRegex );\n\t\t}\n\t\n\t\tif ( features.bSort ) {\n\t\t\t$.each( sort, function ( i, val ) {\n\t\t\t\td.order.push( { column: val.col, dir: val.dir } );\n\t\n\t\t\t\tparam( 'iSortCol_'+i, val.col );\n\t\t\t\tparam( 'sSortDir_'+i, val.dir );\n\t\t\t} );\n\t\n\t\t\tparam( 'iSortingCols', sort.length );\n\t\t}\n\t\n\t\t// If the legacy.ajax parameter is null, then we automatically decide which\n\t\t// form to use, based on sAjaxSource\n\t\tvar legacy = DataTable.ext.legacy.ajax;\n\t\tif ( legacy === null ) {\n\t\t\treturn settings.sAjaxSource ? data : d;\n\t\t}\n\t\n\t\t// Otherwise, if legacy has been specified then we use that to decide on the\n\t\t// form\n\t\treturn legacy ? data : d;\n\t}\n\t\n\t\n\t/**\n\t * Data the data from the server (nuking the old) and redraw the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} json json data return from the server.\n\t *  @param {string} json.sEcho Tracking flag for DataTables to match requests\n\t *  @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering\n\t *  @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering\n\t *  @param {array} json.aaData The data to display on this page\n\t *  @param {string} [json.sColumns] Column ordering (sName, comma separated)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxUpdateDraw ( settings, json )\n\t{\n\t\t// v1.10 uses camelCase variables, while 1.9 uses Hungarian notation.\n\t\t// Support both\n\t\tvar compat = function ( old, modern ) {\n\t\t\treturn json[old] !== undefined ? json[old] : json[modern];\n\t\t};\n\t\n\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\tvar draw            = compat( 'sEcho',                'draw' );\n\t\tvar recordsTotal    = compat( 'iTotalRecords',        'recordsTotal' );\n\t\tvar recordsFiltered = compat( 'iTotalDisplayRecords', 'recordsFiltered' );\n\t\n\t\tif ( draw !== undefined ) {\n\t\t\t// Protect against out of sequence returns\n\t\t\tif ( draw*1 < settings.iDraw ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettings.iDraw = draw * 1;\n\t\t}\n\t\n\t\t// No data in returned object, so rather than an array, we show an empty table\n\t\tif ( ! data ) {\n\t\t\tdata = [];\n\t\t}\n\t\n\t\t_fnClearTable( settings );\n\t\tsettings._iRecordsTotal   = parseInt(recordsTotal, 10);\n\t\tsettings._iRecordsDisplay = parseInt(recordsFiltered, 10);\n\t\n\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t_fnAddData( settings, data[i] );\n\t\t}\n\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\n\t\t_fnDraw( settings, true );\n\t\n\t\tif ( ! settings._bInitComplete ) {\n\t\t\t_fnInitComplete( settings, json );\n\t\t}\n\t\n\t\t_fnProcessingDisplay( settings, false );\n\t}\n\t\n\t\n\t/**\n\t * Get the data from the JSON data source to use for drawing a table. Using\n\t * `_fnGetObjectDataFn` allows the data to be sourced from a property of the\n\t * source object, or from a processing function.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param  {object} json Data source object / array from the server\n\t *  @return {array} Array of data to use\n\t */\n\t function _fnAjaxDataSrc ( oSettings, json, write )\n\t {\n\t\tvar dataSrc = $.isPlainObject( oSettings.ajax ) && oSettings.ajax.dataSrc !== undefined ?\n\t\t\toSettings.ajax.dataSrc :\n\t\t\toSettings.sAjaxDataProp; // Compatibility with 1.9-.\n\t\n\t\tif ( ! write ) {\n\t\t\tif ( dataSrc === 'data' ) {\n\t\t\t\t// If the default, then we still want to support the old style, and safely ignore\n\t\t\t\t// it if possible\n\t\t\t\treturn json.aaData || json[dataSrc];\n\t\t\t}\n\t\n\t\t\treturn dataSrc !== \"\" ?\n\t\t\t\t_fnGetObjectDataFn( dataSrc )( json ) :\n\t\t\t\tjson;\n\t\t}\n\t\n\t\t// set\n\t\t_fnSetObjectDataFn( dataSrc )( json, write );\n\t}\n\t\n\t/**\n\t * Generate the node required for filtering text\n\t *  @returns {node} Filter control element\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlFilter ( settings )\n\t{\n\t\tvar classes = settings.oClasses;\n\t\tvar tableId = settings.sTableId;\n\t\tvar language = settings.oLanguage;\n\t\tvar previousSearch = settings.oPreviousSearch;\n\t\tvar features = settings.aanFeatures;\n\t\tvar input = '<input type=\"search\" class=\"'+classes.sFilterInput+'\"/>';\n\t\n\t\tvar str = language.sSearch;\n\t\tstr = str.match(/_INPUT_/) ?\n\t\t\tstr.replace('_INPUT_', input) :\n\t\t\tstr+input;\n\t\n\t\tvar filter = $('<div/>', {\n\t\t\t\t'id': ! features.f ? tableId+'_filter' : null,\n\t\t\t\t'class': classes.sFilter\n\t\t\t} )\n\t\t\t.append( $('<label/>' ).append( str ) );\n\t\n\t\tvar searchFn = function(event) {\n\t\t\t/* Update all other filter input elements for the new display */\n\t\t\tvar n = features.f;\n\t\t\tvar val = !this.value ? \"\" : this.value; // mental IE8 fix :-(\n\t\t\tif(previousSearch.return && event.key !== \"Enter\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t/* Now do the filter */\n\t\t\tif ( val != previousSearch.sSearch ) {\n\t\t\t\t_fnFilterComplete( settings, {\n\t\t\t\t\t\"sSearch\": val,\n\t\t\t\t\t\"bRegex\": previousSearch.bRegex,\n\t\t\t\t\t\"bSmart\": previousSearch.bSmart ,\n\t\t\t\t\t\"bCaseInsensitive\": previousSearch.bCaseInsensitive,\n\t\t\t\t\t\"return\": previousSearch.return\n\t\t\t\t} );\n\t\n\t\t\t\t// Need to redraw, without resorting\n\t\t\t\tsettings._iDisplayStart = 0;\n\t\t\t\t_fnDraw( settings );\n\t\t\t}\n\t\t};\n\t\n\t\tvar searchDelay = settings.searchDelay !== null ?\n\t\t\tsettings.searchDelay :\n\t\t\t_fnDataSource( settings ) === 'ssp' ?\n\t\t\t\t400 :\n\t\t\t\t0;\n\t\n\t\tvar jqFilter = $('input', filter)\n\t\t\t.val( previousSearch.sSearch )\n\t\t\t.attr( 'placeholder', language.sSearchPlaceholder )\n\t\t\t.on(\n\t\t\t\t'keyup.DT search.DT input.DT paste.DT cut.DT',\n\t\t\t\tsearchDelay ?\n\t\t\t\t\t_fnThrottle( searchFn, searchDelay ) :\n\t\t\t\t\tsearchFn\n\t\t\t)\n\t\t\t.on( 'mouseup', function(e) {\n\t\t\t\t// Edge fix! Edge 17 does not trigger anything other than mouse events when clicking\n\t\t\t\t// on the clear icon (Edge bug 17584515). This is safe in other browsers as `searchFn`\n\t\t\t\t// checks the value to see if it has changed. In other browsers it won't have.\n\t\t\t\tsetTimeout( function () {\n\t\t\t\t\tsearchFn.call(jqFilter[0], e);\n\t\t\t\t}, 10);\n\t\t\t} )\n\t\t\t.on( 'keypress.DT', function(e) {\n\t\t\t\t/* Prevent form submission */\n\t\t\t\tif ( e.keyCode == 13 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.attr('aria-controls', tableId);\n\t\n\t\t// Update the input elements whenever the table is filtered\n\t\t$(settings.nTable).on( 'search.dt.DT', function ( ev, s ) {\n\t\t\tif ( settings === s ) {\n\t\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t\t// inside an iframe or frame...\n\t\t\t\ttry {\n\t\t\t\t\tif ( jqFilter[0] !== document.activeElement ) {\n\t\t\t\t\t\tjqFilter.val( previousSearch.sSearch );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch ( e ) {}\n\t\t\t}\n\t\t} );\n\t\n\t\treturn filter[0];\n\t}\n\t\n\t\n\t/**\n\t * Filter the table using both the global filter and column based filtering\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} oSearch search information\n\t *  @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterComplete ( oSettings, oInput, iForce )\n\t{\n\t\tvar oPrevSearch = oSettings.oPreviousSearch;\n\t\tvar aoPrevSearch = oSettings.aoPreSearchCols;\n\t\tvar fnSaveFilter = function ( oFilter ) {\n\t\t\t/* Save the filtering values */\n\t\t\toPrevSearch.sSearch = oFilter.sSearch;\n\t\t\toPrevSearch.bRegex = oFilter.bRegex;\n\t\t\toPrevSearch.bSmart = oFilter.bSmart;\n\t\t\toPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;\n\t\t\toPrevSearch.return = oFilter.return;\n\t\t};\n\t\tvar fnRegex = function ( o ) {\n\t\t\t// Backwards compatibility with the bEscapeRegex option\n\t\t\treturn o.bEscapeRegex !== undefined ? !o.bEscapeRegex : o.bRegex;\n\t\t};\n\t\n\t\t// Resolve any column types that are unknown due to addition or invalidation\n\t\t// @todo As per sort - can this be moved into an event handler?\n\t\t_fnColumnTypes( oSettings );\n\t\n\t\t/* In server-side processing all filtering is done by the server, so no point hanging around here */\n\t\tif ( _fnDataSource( oSettings ) != 'ssp' )\n\t\t{\n\t\t\t/* Global filter */\n\t\t\t_fnFilter( oSettings, oInput.sSearch, iForce, fnRegex(oInput), oInput.bSmart, oInput.bCaseInsensitive, oInput.return );\n\t\t\tfnSaveFilter( oInput );\n\t\n\t\t\t/* Now do the individual column filter */\n\t\t\tfor ( var i=0 ; i<aoPrevSearch.length ; i++ )\n\t\t\t{\n\t\t\t\t_fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, fnRegex(aoPrevSearch[i]),\n\t\t\t\t\taoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );\n\t\t\t}\n\t\n\t\t\t/* Custom filtering */\n\t\t\t_fnFilterCustom( oSettings );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfnSaveFilter( oInput );\n\t\t}\n\t\n\t\t/* Tell the draw function we have been filtering */\n\t\toSettings.bFiltered = true;\n\t\t_fnCallbackFire( oSettings, null, 'search', [oSettings] );\n\t}\n\t\n\t\n\t/**\n\t * Apply custom filtering functions\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterCustom( settings )\n\t{\n\t\tvar filters = DataTable.ext.search;\n\t\tvar displayRows = settings.aiDisplay;\n\t\tvar row, rowIdx;\n\t\n\t\tfor ( var i=0, ien=filters.length ; i<ien ; i++ ) {\n\t\t\tvar rows = [];\n\t\n\t\t\t// Loop over each row and see if it should be included\n\t\t\tfor ( var j=0, jen=displayRows.length ; j<jen ; j++ ) {\n\t\t\t\trowIdx = displayRows[ j ];\n\t\t\t\trow = settings.aoData[ rowIdx ];\n\t\n\t\t\t\tif ( filters[i]( settings, row._aFilterData, rowIdx, row._aData, j ) ) {\n\t\t\t\t\trows.push( rowIdx );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// So the array reference doesn't break set the results into the\n\t\t\t// existing array\n\t\t\tdisplayRows.length = 0;\n\t\t\t$.merge( displayRows, rows );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Filter the table on a per-column basis\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sInput string to filter on\n\t *  @param {int} iColumn column to filter\n\t *  @param {bool} bRegex treat search string as a regular expression or not\n\t *  @param {bool} bSmart use smart filtering or not\n\t *  @param {bool} bCaseInsensitive Do case insensitive matching or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, caseInsensitive )\n\t{\n\t\tif ( searchStr === '' ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar data;\n\t\tvar out = [];\n\t\tvar display = settings.aiDisplay;\n\t\tvar rpSearch = _fnFilterCreateSearch( searchStr, regex, smart, caseInsensitive );\n\t\n\t\tfor ( var i=0 ; i<display.length ; i++ ) {\n\t\t\tdata = settings.aoData[ display[i] ]._aFilterData[ colIdx ];\n\t\n\t\t\tif ( rpSearch.test( data ) ) {\n\t\t\t\tout.push( display[i] );\n\t\t\t}\n\t\t}\n\t\n\t\tsettings.aiDisplay = out;\n\t}\n\t\n\t\n\t/**\n\t * Filter the data table based on user input and draw the table\n\t *  @param {object} settings dataTables settings object\n\t *  @param {string} input string to filter on\n\t *  @param {int} force optional - force a research of the master array (1) or not (undefined or 0)\n\t *  @param {bool} regex treat as a regular expression or not\n\t *  @param {bool} smart perform smart filtering or not\n\t *  @param {bool} caseInsensitive Do case insensitive matching or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilter( settings, input, force, regex, smart, caseInsensitive )\n\t{\n\t\tvar rpSearch = _fnFilterCreateSearch( input, regex, smart, caseInsensitive );\n\t\tvar prevSearch = settings.oPreviousSearch.sSearch;\n\t\tvar displayMaster = settings.aiDisplayMaster;\n\t\tvar display, invalidated, i;\n\t\tvar filtered = [];\n\t\n\t\t// Need to take account of custom filtering functions - always filter\n\t\tif ( DataTable.ext.search.length !== 0 ) {\n\t\t\tforce = true;\n\t\t}\n\t\n\t\t// Check if any of the rows were invalidated\n\t\tinvalidated = _fnFilterData( settings );\n\t\n\t\t// If the input is blank - we just want the full data set\n\t\tif ( input.length <= 0 ) {\n\t\t\tsettings.aiDisplay = displayMaster.slice();\n\t\t}\n\t\telse {\n\t\t\t// New search - start from the master array\n\t\t\tif ( invalidated ||\n\t\t\t\t force ||\n\t\t\t\t regex ||\n\t\t\t\t prevSearch.length > input.length ||\n\t\t\t\t input.indexOf(prevSearch) !== 0 ||\n\t\t\t\t settings.bSorted // On resort, the display master needs to be\n\t\t\t\t                  // re-filtered since indexes will have changed\n\t\t\t) {\n\t\t\t\tsettings.aiDisplay = displayMaster.slice();\n\t\t\t}\n\t\n\t\t\t// Search the display array\n\t\t\tdisplay = settings.aiDisplay;\n\t\n\t\t\tfor ( i=0 ; i<display.length ; i++ ) {\n\t\t\t\tif ( rpSearch.test( settings.aoData[ display[i] ]._sFilterRow ) ) {\n\t\t\t\t\tfiltered.push( display[i] );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tsettings.aiDisplay = filtered;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Build a regular expression object suitable for searching a table\n\t *  @param {string} sSearch string to search for\n\t *  @param {bool} bRegex treat as a regular expression or not\n\t *  @param {bool} bSmart perform smart filtering or not\n\t *  @param {bool} bCaseInsensitive Do case insensitive matching or not\n\t *  @returns {RegExp} constructed object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterCreateSearch( search, regex, smart, caseInsensitive )\n\t{\n\t\tsearch = regex ?\n\t\t\tsearch :\n\t\t\t_fnEscapeRegex( search );\n\t\t\n\t\tif ( smart ) {\n\t\t\t/* For smart filtering we want to allow the search to work regardless of\n\t\t\t * word order. We also want double quoted text to be preserved, so word\n\t\t\t * order is important - a la google. So this is what we want to\n\t\t\t * generate:\n\t\t\t * \n\t\t\t * ^(?=.*?\\bone\\b)(?=.*?\\btwo three\\b)(?=.*?\\bfour\\b).*$\n\t\t\t */\n\t\t\tvar a = $.map( search.match( /\"[^\"]+\"|[^ ]+/g ) || [''], function ( word ) {\n\t\t\t\tif ( word.charAt(0) === '\"' ) {\n\t\t\t\t\tvar m = word.match( /^\"(.*)\"$/ );\n\t\t\t\t\tword = m ? m[1] : word;\n\t\t\t\t}\n\t\n\t\t\t\treturn word.replace('\"', '');\n\t\t\t} );\n\t\n\t\t\tsearch = '^(?=.*?'+a.join( ')(?=.*?' )+').*$';\n\t\t}\n\t\n\t\treturn new RegExp( search, caseInsensitive ? 'i' : '' );\n\t}\n\t\n\t\n\t/**\n\t * Escape a string such that it can be used in a regular expression\n\t *  @param {string} sVal string to escape\n\t *  @returns {string} escaped string\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnEscapeRegex = DataTable.util.escapeRegex;\n\t\n\tvar __filter_div = $('<div>')[0];\n\tvar __filter_div_textContent = __filter_div.textContent !== undefined;\n\t\n\t// Update the filtering data for each row if needed (by invalidation or first run)\n\tfunction _fnFilterData ( settings )\n\t{\n\t\tvar columns = settings.aoColumns;\n\t\tvar column;\n\t\tvar i, j, ien, jen, filterData, cellData, row;\n\t\tvar wasInvalidated = false;\n\t\n\t\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\trow = settings.aoData[i];\n\t\n\t\t\tif ( ! row._aFilterData ) {\n\t\t\t\tfilterData = [];\n\t\n\t\t\t\tfor ( j=0, jen=columns.length ; j<jen ; j++ ) {\n\t\t\t\t\tcolumn = columns[j];\n\t\n\t\t\t\t\tif ( column.bSearchable ) {\n\t\t\t\t\t\tcellData = _fnGetCellData( settings, i, j, 'filter' );\n\t\n\t\t\t\t\t\t// Search in DataTables 1.10 is string based. In 1.11 this\n\t\t\t\t\t\t// should be altered to also allow strict type checking.\n\t\t\t\t\t\tif ( cellData === null ) {\n\t\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif ( typeof cellData !== 'string' && cellData.toString ) {\n\t\t\t\t\t\t\tcellData = cellData.toString();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If it looks like there is an HTML entity in the string,\n\t\t\t\t\t// attempt to decode it so sorting works as expected. Note that\n\t\t\t\t\t// we could use a single line of jQuery to do this, but the DOM\n\t\t\t\t\t// method used here is much faster http://jsperf.com/html-decode\n\t\t\t\t\tif ( cellData.indexOf && cellData.indexOf('&') !== -1 ) {\n\t\t\t\t\t\t__filter_div.innerHTML = cellData;\n\t\t\t\t\t\tcellData = __filter_div_textContent ?\n\t\t\t\t\t\t\t__filter_div.textContent :\n\t\t\t\t\t\t\t__filter_div.innerText;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif ( cellData.replace ) {\n\t\t\t\t\t\tcellData = cellData.replace(/[\\r\\n\\u2028]/g, '');\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfilterData.push( cellData );\n\t\t\t\t}\n\t\n\t\t\t\trow._aFilterData = filterData;\n\t\t\t\trow._sFilterRow = filterData.join('  ');\n\t\t\t\twasInvalidated = true;\n\t\t\t}\n\t\t}\n\t\n\t\treturn wasInvalidated;\n\t}\n\t\n\t\n\t/**\n\t * Convert from the internal Hungarian notation to camelCase for external\n\t * interaction\n\t *  @param {object} obj Object to convert\n\t *  @returns {object} Inverted object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSearchToCamel ( obj )\n\t{\n\t\treturn {\n\t\t\tsearch:          obj.sSearch,\n\t\t\tsmart:           obj.bSmart,\n\t\t\tregex:           obj.bRegex,\n\t\t\tcaseInsensitive: obj.bCaseInsensitive\n\t\t};\n\t}\n\t\n\t\n\t\n\t/**\n\t * Convert from camelCase notation to the internal Hungarian. We could use the\n\t * Hungarian convert function here, but this is cleaner\n\t *  @param {object} obj Object to convert\n\t *  @returns {object} Inverted object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSearchToHung ( obj )\n\t{\n\t\treturn {\n\t\t\tsSearch:          obj.search,\n\t\t\tbSmart:           obj.smart,\n\t\t\tbRegex:           obj.regex,\n\t\t\tbCaseInsensitive: obj.caseInsensitive\n\t\t};\n\t}\n\t\n\t/**\n\t * Generate the node required for the info display\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {node} Information element\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlInfo ( settings )\n\t{\n\t\tvar\n\t\t\ttid = settings.sTableId,\n\t\t\tnodes = settings.aanFeatures.i,\n\t\t\tn = $('<div/>', {\n\t\t\t\t'class': settings.oClasses.sInfo,\n\t\t\t\t'id': ! nodes ? tid+'_info' : null\n\t\t\t} );\n\t\n\t\tif ( ! nodes ) {\n\t\t\t// Update display on each draw\n\t\t\tsettings.aoDrawCallback.push( {\n\t\t\t\t\"fn\": _fnUpdateInfo,\n\t\t\t\t\"sName\": \"information\"\n\t\t\t} );\n\t\n\t\t\tn\n\t\t\t\t.attr( 'role', 'status' )\n\t\t\t\t.attr( 'aria-live', 'polite' );\n\t\n\t\t\t// Table is described by our info div\n\t\t\t$(settings.nTable).attr( 'aria-describedby', tid+'_info' );\n\t\t}\n\t\n\t\treturn n[0];\n\t}\n\t\n\t\n\t/**\n\t * Update the information elements in the display\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnUpdateInfo ( settings )\n\t{\n\t\t/* Show information about the table */\n\t\tvar nodes = settings.aanFeatures.i;\n\t\tif ( nodes.length === 0 ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\tlang  = settings.oLanguage,\n\t\t\tstart = settings._iDisplayStart+1,\n\t\t\tend   = settings.fnDisplayEnd(),\n\t\t\tmax   = settings.fnRecordsTotal(),\n\t\t\ttotal = settings.fnRecordsDisplay(),\n\t\t\tout   = total ?\n\t\t\t\tlang.sInfo :\n\t\t\t\tlang.sInfoEmpty;\n\t\n\t\tif ( total !== max ) {\n\t\t\t/* Record set after filtering */\n\t\t\tout += ' ' + lang.sInfoFiltered;\n\t\t}\n\t\n\t\t// Convert the macros\n\t\tout += lang.sInfoPostFix;\n\t\tout = _fnInfoMacros( settings, out );\n\t\n\t\tvar callback = lang.fnInfoCallback;\n\t\tif ( callback !== null ) {\n\t\t\tout = callback.call( settings.oInstance,\n\t\t\t\tsettings, start, end, max, total, out\n\t\t\t);\n\t\t}\n\t\n\t\t$(nodes).html( out );\n\t}\n\t\n\t\n\tfunction _fnInfoMacros ( settings, str )\n\t{\n\t\t// When infinite scrolling, we are always starting at 1. _iDisplayStart is used only\n\t\t// internally\n\t\tvar\n\t\t\tformatter  = settings.fnFormatNumber,\n\t\t\tstart      = settings._iDisplayStart+1,\n\t\t\tlen        = settings._iDisplayLength,\n\t\t\tvis        = settings.fnRecordsDisplay(),\n\t\t\tall        = len === -1;\n\t\n\t\treturn str.\n\t\t\treplace(/_START_/g, formatter.call( settings, start ) ).\n\t\t\treplace(/_END_/g,   formatter.call( settings, settings.fnDisplayEnd() ) ).\n\t\t\treplace(/_MAX_/g,   formatter.call( settings, settings.fnRecordsTotal() ) ).\n\t\t\treplace(/_TOTAL_/g, formatter.call( settings, vis ) ).\n\t\t\treplace(/_PAGE_/g,  formatter.call( settings, all ? 1 : Math.ceil( start / len ) ) ).\n\t\t\treplace(/_PAGES_/g, formatter.call( settings, all ? 1 : Math.ceil( vis / len ) ) );\n\t}\n\t\n\t\n\t\n\t/**\n\t * Draw the table for the first time, adding all required features\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnInitialise ( settings )\n\t{\n\t\tvar i, iLen, iAjaxStart=settings.iInitDisplayStart;\n\t\tvar columns = settings.aoColumns, column;\n\t\tvar features = settings.oFeatures;\n\t\tvar deferLoading = settings.bDeferLoading; // value modified by the draw\n\t\n\t\t/* Ensure that the table data is fully initialised */\n\t\tif ( ! settings.bInitialised ) {\n\t\t\tsetTimeout( function(){ _fnInitialise( settings ); }, 200 );\n\t\t\treturn;\n\t\t}\n\t\n\t\t/* Show the display HTML options */\n\t\t_fnAddOptionsHtml( settings );\n\t\n\t\t/* Build and draw the header / footer for the table */\n\t\t_fnBuildHead( settings );\n\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\n\t\t/* Okay to show that something is going on now */\n\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t/* Calculate sizes for columns */\n\t\tif ( features.bAutoWidth ) {\n\t\t\t_fnCalculateColumnWidths( settings );\n\t\t}\n\t\n\t\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\n\t\t\tif ( column.sWidth ) {\n\t\t\t\tcolumn.nTh.style.width = _fnStringToCss( column.sWidth );\n\t\t\t}\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'preInit', [settings] );\n\t\n\t\t// If there is default sorting required - let's do it. The sort function\n\t\t// will do the drawing for us. Otherwise we draw the table regardless of the\n\t\t// Ajax source - this allows the table to look initialised for Ajax sourcing\n\t\t// data (show 'loading' message possibly)\n\t\t_fnReDraw( settings );\n\t\n\t\t// Server-side processing init complete is done by _fnAjaxUpdateDraw\n\t\tvar dataSrc = _fnDataSource( settings );\n\t\tif ( dataSrc != 'ssp' || deferLoading ) {\n\t\t\t// if there is an ajax source load the data\n\t\t\tif ( dataSrc == 'ajax' ) {\n\t\t\t\t_fnBuildAjax( settings, [], function(json) {\n\t\t\t\t\tvar aData = _fnAjaxDataSrc( settings, json );\n\t\n\t\t\t\t\t// Got the data - add it to the table\n\t\t\t\t\tfor ( i=0 ; i<aData.length ; i++ ) {\n\t\t\t\t\t\t_fnAddData( settings, aData[i] );\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Reset the init display for cookie saving. We've already done\n\t\t\t\t\t// a filter, and therefore cleared it before. So we need to make\n\t\t\t\t\t// it appear 'fresh'\n\t\t\t\t\tsettings.iInitDisplayStart = iAjaxStart;\n\t\n\t\t\t\t\t_fnReDraw( settings );\n\t\n\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t\t_fnInitComplete( settings, json );\n\t\t\t\t}, settings );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t_fnInitComplete( settings );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Draw the table for the first time, adding all required features\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} [json] JSON from the server that completed the table, if using Ajax source\n\t *    with client-side processing (optional)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnInitComplete ( settings, json )\n\t{\n\t\tsettings._bInitComplete = true;\n\t\n\t\t// When data was added after the initialisation (data or Ajax) we need to\n\t\t// calculate the column sizing\n\t\tif ( json || settings.oInit.aaData ) {\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'plugin-init', [settings, json] );\n\t\t_fnCallbackFire( settings, 'aoInitComplete', 'init', [settings, json] );\n\t}\n\t\n\t\n\tfunction _fnLengthChange ( settings, val )\n\t{\n\t\tvar len = parseInt( val, 10 );\n\t\tsettings._iDisplayLength = len;\n\t\n\t\t_fnLengthOverflow( settings );\n\t\n\t\t// Fire length change event\n\t\t_fnCallbackFire( settings, null, 'length', [settings, len] );\n\t}\n\t\n\t\n\t/**\n\t * Generate the node required for user display length changing\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Display length feature node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlLength ( settings )\n\t{\n\t\tvar\n\t\t\tclasses  = settings.oClasses,\n\t\t\ttableId  = settings.sTableId,\n\t\t\tmenu     = settings.aLengthMenu,\n\t\t\td2       = Array.isArray( menu[0] ),\n\t\t\tlengths  = d2 ? menu[0] : menu,\n\t\t\tlanguage = d2 ? menu[1] : menu;\n\t\n\t\tvar select = $('<select/>', {\n\t\t\t'name':          tableId+'_length',\n\t\t\t'aria-controls': tableId,\n\t\t\t'class':         classes.sLengthSelect\n\t\t} );\n\t\n\t\tfor ( var i=0, ien=lengths.length ; i<ien ; i++ ) {\n\t\t\tselect[0][ i ] = new Option(\n\t\t\t\ttypeof language[i] === 'number' ?\n\t\t\t\t\tsettings.fnFormatNumber( language[i] ) :\n\t\t\t\t\tlanguage[i],\n\t\t\t\tlengths[i]\n\t\t\t);\n\t\t}\n\t\n\t\tvar div = $('<div><label/></div>').addClass( classes.sLength );\n\t\tif ( ! settings.aanFeatures.l ) {\n\t\t\tdiv[0].id = tableId+'_length';\n\t\t}\n\t\n\t\tdiv.children().append(\n\t\t\tsettings.oLanguage.sLengthMenu.replace( '_MENU_', select[0].outerHTML )\n\t\t);\n\t\n\t\t// Can't use `select` variable as user might provide their own and the\n\t\t// reference is broken by the use of outerHTML\n\t\t$('select', div)\n\t\t\t.val( settings._iDisplayLength )\n\t\t\t.on( 'change.DT', function(e) {\n\t\t\t\t_fnLengthChange( settings, $(this).val() );\n\t\t\t\t_fnDraw( settings );\n\t\t\t} );\n\t\n\t\t// Update node value whenever anything changes the table's length\n\t\t$(settings.nTable).on( 'length.dt.DT', function (e, s, len) {\n\t\t\tif ( settings === s ) {\n\t\t\t\t$('select', div).val( len );\n\t\t\t}\n\t\t} );\n\t\n\t\treturn div[0];\n\t}\n\t\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Note that most of the paging logic is done in\n\t * DataTable.ext.pager\n\t */\n\t\n\t/**\n\t * Generate the node required for default pagination\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {node} Pagination feature node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlPaginate ( settings )\n\t{\n\t\tvar\n\t\t\ttype   = settings.sPaginationType,\n\t\t\tplugin = DataTable.ext.pager[ type ],\n\t\t\tmodern = typeof plugin === 'function',\n\t\t\tredraw = function( settings ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t},\n\t\t\tnode = $('<div/>').addClass( settings.oClasses.sPaging + type )[0],\n\t\t\tfeatures = settings.aanFeatures;\n\t\n\t\tif ( ! modern ) {\n\t\t\tplugin.fnInit( settings, node, redraw );\n\t\t}\n\t\n\t\t/* Add a draw callback for the pagination on first instance, to update the paging display */\n\t\tif ( ! features.p )\n\t\t{\n\t\t\tnode.id = settings.sTableId+'_paginate';\n\t\n\t\t\tsettings.aoDrawCallback.push( {\n\t\t\t\t\"fn\": function( settings ) {\n\t\t\t\t\tif ( modern ) {\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\tstart      = settings._iDisplayStart,\n\t\t\t\t\t\t\tlen        = settings._iDisplayLength,\n\t\t\t\t\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\t\t\t\t\tall        = len === -1,\n\t\t\t\t\t\t\tpage = all ? 0 : Math.ceil( start / len ),\n\t\t\t\t\t\t\tpages = all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\t\t\t\tbuttons = plugin(page, pages),\n\t\t\t\t\t\t\ti, ien;\n\t\n\t\t\t\t\t\tfor ( i=0, ien=features.p.length ; i<ien ; i++ ) {\n\t\t\t\t\t\t\t_fnRenderer( settings, 'pageButton' )(\n\t\t\t\t\t\t\t\tsettings, features.p[i], i, buttons, page, pages\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\telse {\n\t\t\t\t\t\tplugin.fnUpdate( settings, redraw );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"sName\": \"pagination\"\n\t\t\t} );\n\t\t}\n\t\n\t\treturn node;\n\t}\n\t\n\t\n\t/**\n\t * Alter the display settings to change the page\n\t *  @param {object} settings DataTables settings object\n\t *  @param {string|int} action Paging action to take: \"first\", \"previous\",\n\t *    \"next\" or \"last\" or page number to jump to (integer)\n\t *  @param [bool] redraw Automatically draw the update or not\n\t *  @returns {bool} true page has changed, false - no change\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnPageChange ( settings, action, redraw )\n\t{\n\t\tvar\n\t\t\tstart     = settings._iDisplayStart,\n\t\t\tlen       = settings._iDisplayLength,\n\t\t\trecords   = settings.fnRecordsDisplay();\n\t\n\t\tif ( records === 0 || len === -1 )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\telse if ( typeof action === \"number\" )\n\t\t{\n\t\t\tstart = action * len;\n\t\n\t\t\tif ( start > records )\n\t\t\t{\n\t\t\t\tstart = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"first\" )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\telse if ( action == \"previous\" )\n\t\t{\n\t\t\tstart = len >= 0 ?\n\t\t\t\tstart - len :\n\t\t\t\t0;\n\t\n\t\t\tif ( start < 0 )\n\t\t\t{\n\t\t\t  start = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"next\" )\n\t\t{\n\t\t\tif ( start + len < records )\n\t\t\t{\n\t\t\t\tstart += len;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"last\" )\n\t\t{\n\t\t\tstart = Math.floor( (records-1) / len) * len;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t_fnLog( settings, 0, \"Unknown paging action: \"+action, 5 );\n\t\t}\n\t\n\t\tvar changed = settings._iDisplayStart !== start;\n\t\tsettings._iDisplayStart = start;\n\t\n\t\tif ( changed ) {\n\t\t\t_fnCallbackFire( settings, null, 'page', [settings] );\n\t\n\t\t\tif ( redraw ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t}\n\t\t}\n\t\n\t\treturn changed;\n\t}\n\t\n\t\n\t\n\t/**\n\t * Generate the node required for the processing node\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Processing element\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlProcessing ( settings )\n\t{\n\t\treturn $('<div/>', {\n\t\t\t\t'id': ! settings.aanFeatures.r ? settings.sTableId+'_processing' : null,\n\t\t\t\t'class': settings.oClasses.sProcessing\n\t\t\t} )\n\t\t\t.html( settings.oLanguage.sProcessing )\n\t\t\t.append('<div><div></div><div></div><div></div><div></div></div>')\n\t\t\t.insertBefore( settings.nTable )[0];\n\t}\n\t\n\t\n\t/**\n\t * Display or hide the processing indicator\n\t *  @param {object} settings dataTables settings object\n\t *  @param {bool} show Show the processing indicator (true) or not (false)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnProcessingDisplay ( settings, show )\n\t{\n\t\tif ( settings.oFeatures.bProcessing ) {\n\t\t\t$(settings.aanFeatures.r).css( 'display', show ? 'block' : 'none' );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'processing', [settings, show] );\n\t}\n\t\n\t/**\n\t * Add any control elements for the table - specifically scrolling\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Node to add to the DOM\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlTable ( settings )\n\t{\n\t\tvar table = $(settings.nTable);\n\t\n\t\t// Scrolling from here on in\n\t\tvar scroll = settings.oScroll;\n\t\n\t\tif ( scroll.sX === '' && scroll.sY === '' ) {\n\t\t\treturn settings.nTable;\n\t\t}\n\t\n\t\tvar scrollX = scroll.sX;\n\t\tvar scrollY = scroll.sY;\n\t\tvar classes = settings.oClasses;\n\t\tvar caption = table.children('caption');\n\t\tvar captionSide = caption.length ? caption[0]._captionSide : null;\n\t\tvar headerClone = $( table[0].cloneNode(false) );\n\t\tvar footerClone = $( table[0].cloneNode(false) );\n\t\tvar footer = table.children('tfoot');\n\t\tvar _div = '<div/>';\n\t\tvar size = function ( s ) {\n\t\t\treturn !s ? null : _fnStringToCss( s );\n\t\t};\n\t\n\t\tif ( ! footer.length ) {\n\t\t\tfooter = null;\n\t\t}\n\t\n\t\t/*\n\t\t * The HTML structure that we want to generate in this function is:\n\t\t *  div - scroller\n\t\t *    div - scroll head\n\t\t *      div - scroll head inner\n\t\t *        table - scroll head table\n\t\t *          thead - thead\n\t\t *    div - scroll body\n\t\t *      table - table (master table)\n\t\t *        thead - thead clone for sizing\n\t\t *        tbody - tbody\n\t\t *    div - scroll foot\n\t\t *      div - scroll foot inner\n\t\t *        table - scroll foot table\n\t\t *          tfoot - tfoot\n\t\t */\n\t\tvar scroller = $( _div, { 'class': classes.sScrollWrapper } )\n\t\t\t.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollHead } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$(_div, { 'class': classes.sScrollHeadInner } )\n\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\t'box-sizing': 'content-box',\n\t\t\t\t\t\t\t\twidth: scroll.sXInner || '100%'\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\theaderClone\n\t\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t\t.append( captionSide === 'top' ? caption : null )\n\t\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\t\ttable.children('thead')\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollBody } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\t\twidth: size( scrollX )\n\t\t\t\t\t} )\n\t\t\t\t\t.append( table )\n\t\t\t);\n\t\n\t\tif ( footer ) {\n\t\t\tscroller.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollFoot } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$(_div, { 'class': classes.sScrollFootInner } )\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\tfooterClone\n\t\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t\t.append( captionSide === 'bottom' ? caption : null )\n\t\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\t\ttable.children('tfoot')\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\n\t\tvar children = scroller.children();\n\t\tvar scrollHead = children[0];\n\t\tvar scrollBody = children[1];\n\t\tvar scrollFoot = footer ? children[2] : null;\n\t\n\t\t// When the body is scrolled, then we also want to scroll the headers\n\t\tif ( scrollX ) {\n\t\t\t$(scrollBody).on( 'scroll.DT', function (e) {\n\t\t\t\tvar scrollLeft = this.scrollLeft;\n\t\n\t\t\t\tscrollHead.scrollLeft = scrollLeft;\n\t\n\t\t\t\tif ( footer ) {\n\t\t\t\t\tscrollFoot.scrollLeft = scrollLeft;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\n\t\t$(scrollBody).css('max-height', scrollY);\n\t\tif (! scroll.bCollapse) {\n\t\t\t$(scrollBody).css('height', scrollY);\n\t\t}\n\t\n\t\tsettings.nScrollHead = scrollHead;\n\t\tsettings.nScrollBody = scrollBody;\n\t\tsettings.nScrollFoot = scrollFoot;\n\t\n\t\t// On redraw - align columns\n\t\tsettings.aoDrawCallback.push( {\n\t\t\t\"fn\": _fnScrollDraw,\n\t\t\t\"sName\": \"scrolling\"\n\t\t} );\n\t\n\t\treturn scroller[0];\n\t}\n\t\n\t\n\t\n\t/**\n\t * Update the header, footer and body tables for resizing - i.e. column\n\t * alignment.\n\t *\n\t * Welcome to the most horrible function DataTables. The process that this\n\t * function follows is basically:\n\t *   1. Re-create the table inside the scrolling div\n\t *   2. Take live measurements from the DOM\n\t *   3. Apply the measurements to align the columns\n\t *   4. Clean up\n\t *\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnScrollDraw ( settings )\n\t{\n\t\t// Given that this is such a monster function, a lot of variables are use\n\t\t// to try and keep the minimised size as small as possible\n\t\tvar\n\t\t\tscroll         = settings.oScroll,\n\t\t\tscrollX        = scroll.sX,\n\t\t\tscrollXInner   = scroll.sXInner,\n\t\t\tscrollY        = scroll.sY,\n\t\t\tbarWidth       = scroll.iBarWidth,\n\t\t\tdivHeader      = $(settings.nScrollHead),\n\t\t\tdivHeaderStyle = divHeader[0].style,\n\t\t\tdivHeaderInner = divHeader.children('div'),\n\t\t\tdivHeaderInnerStyle = divHeaderInner[0].style,\n\t\t\tdivHeaderTable = divHeaderInner.children('table'),\n\t\t\tdivBodyEl      = settings.nScrollBody,\n\t\t\tdivBody        = $(divBodyEl),\n\t\t\tdivBodyStyle   = divBodyEl.style,\n\t\t\tdivFooter      = $(settings.nScrollFoot),\n\t\t\tdivFooterInner = divFooter.children('div'),\n\t\t\tdivFooterTable = divFooterInner.children('table'),\n\t\t\theader         = $(settings.nTHead),\n\t\t\ttable          = $(settings.nTable),\n\t\t\ttableEl        = table[0],\n\t\t\ttableStyle     = tableEl.style,\n\t\t\tfooter         = settings.nTFoot ? $(settings.nTFoot) : null,\n\t\t\tbrowser        = settings.oBrowser,\n\t\t\tie67           = browser.bScrollOversize,\n\t\t\tdtHeaderCells  = _pluck( settings.aoColumns, 'nTh' ),\n\t\t\theaderTrgEls, footerTrgEls,\n\t\t\theaderSrcEls, footerSrcEls,\n\t\t\theaderCopy, footerCopy,\n\t\t\theaderWidths=[], footerWidths=[],\n\t\t\theaderContent=[], footerContent=[],\n\t\t\tidx, correction, sanityWidth,\n\t\t\tzeroOut = function(nSizer) {\n\t\t\t\tvar style = nSizer.style;\n\t\t\t\tstyle.paddingTop = \"0\";\n\t\t\t\tstyle.paddingBottom = \"0\";\n\t\t\t\tstyle.borderTopWidth = \"0\";\n\t\t\t\tstyle.borderBottomWidth = \"0\";\n\t\t\t\tstyle.height = 0;\n\t\t\t};\n\t\n\t\t// If the scrollbar visibility has changed from the last draw, we need to\n\t\t// adjust the column sizes as the table width will have changed to account\n\t\t// for the scrollbar\n\t\tvar scrollBarVis = divBodyEl.scrollHeight > divBodyEl.clientHeight;\n\t\t\n\t\tif ( settings.scrollBarVis !== scrollBarVis && settings.scrollBarVis !== undefined ) {\n\t\t\tsettings.scrollBarVis = scrollBarVis;\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t\treturn; // adjust column sizing will call this function again\n\t\t}\n\t\telse {\n\t\t\tsettings.scrollBarVis = scrollBarVis;\n\t\t}\n\t\n\t\t/*\n\t\t * 1. Re-create the table inside the scrolling div\n\t\t */\n\t\n\t\t// Remove the old minimised thead and tfoot elements in the inner table\n\t\ttable.children('thead, tfoot').remove();\n\t\n\t\tif ( footer ) {\n\t\t\tfooterCopy = footer.clone().prependTo( table );\n\t\t\tfooterTrgEls = footer.find('tr'); // the original tfoot is in its own table and must be sized\n\t\t\tfooterSrcEls = footerCopy.find('tr');\n\t\t\tfooterCopy.find('[id]').removeAttr('id');\n\t\t}\n\t\n\t\t// Clone the current header and footer elements and then place it into the inner table\n\t\theaderCopy = header.clone().prependTo( table );\n\t\theaderTrgEls = header.find('tr'); // original header is in its own table\n\t\theaderSrcEls = headerCopy.find('tr');\n\t\theaderCopy.find('th, td').removeAttr('tabindex');\n\t\theaderCopy.find('[id]').removeAttr('id');\n\t\n\t\n\t\t/*\n\t\t * 2. Take live measurements from the DOM - do not alter the DOM itself!\n\t\t */\n\t\n\t\t// Remove old sizing and apply the calculated column widths\n\t\t// Get the unique column headers in the newly created (cloned) header. We want to apply the\n\t\t// calculated sizes to this header\n\t\tif ( ! scrollX )\n\t\t{\n\t\t\tdivBodyStyle.width = '100%';\n\t\t\tdivHeader[0].style.width = '100%';\n\t\t}\n\t\n\t\t$.each( _fnGetUniqueThs( settings, headerCopy ), function ( i, el ) {\n\t\t\tidx = _fnVisibleToColumnIndex( settings, i );\n\t\t\tel.style.width = settings.aoColumns[idx].sWidth;\n\t\t} );\n\t\n\t\tif ( footer ) {\n\t\t\t_fnApplyToChildren( function(n) {\n\t\t\t\tn.style.width = \"\";\n\t\t\t}, footerSrcEls );\n\t\t}\n\t\n\t\t// Size the table as a whole\n\t\tsanityWidth = table.outerWidth();\n\t\tif ( scrollX === \"\" ) {\n\t\t\t// No x scrolling\n\t\t\ttableStyle.width = \"100%\";\n\t\n\t\t\t// IE7 will make the width of the table when 100% include the scrollbar\n\t\t\t// - which is shouldn't. When there is a scrollbar we need to take this\n\t\t\t// into account.\n\t\t\tif ( ie67 && (table.find('tbody').height() > divBodyEl.offsetHeight ||\n\t\t\t\tdivBody.css('overflow-y') == \"scroll\")\n\t\t\t) {\n\t\t\t\ttableStyle.width = _fnStringToCss( table.outerWidth() - barWidth);\n\t\t\t}\n\t\n\t\t\t// Recalculate the sanity width\n\t\t\tsanityWidth = table.outerWidth();\n\t\t}\n\t\telse if ( scrollXInner !== \"\" ) {\n\t\t\t// legacy x scroll inner has been given - use it\n\t\t\ttableStyle.width = _fnStringToCss(scrollXInner);\n\t\n\t\t\t// Recalculate the sanity width\n\t\t\tsanityWidth = table.outerWidth();\n\t\t}\n\t\n\t\t// Hidden header should have zero height, so remove padding and borders. Then\n\t\t// set the width based on the real headers\n\t\n\t\t// Apply all styles in one pass\n\t\t_fnApplyToChildren( zeroOut, headerSrcEls );\n\t\n\t\t// Read all widths in next pass\n\t\t_fnApplyToChildren( function(nSizer) {\n\t\t\tvar style = window.getComputedStyle ?\n\t\t\t\twindow.getComputedStyle(nSizer).width :\n\t\t\t\t_fnStringToCss( $(nSizer).width() );\n\t\n\t\t\theaderContent.push( nSizer.innerHTML );\n\t\t\theaderWidths.push( style );\n\t\t}, headerSrcEls );\n\t\n\t\t// Apply all widths in final pass\n\t\t_fnApplyToChildren( function(nToSize, i) {\n\t\t\tnToSize.style.width = headerWidths[i];\n\t\t}, headerTrgEls );\n\t\n\t\t$(headerSrcEls).css('height', 0);\n\t\n\t\t/* Same again with the footer if we have one */\n\t\tif ( footer )\n\t\t{\n\t\t\t_fnApplyToChildren( zeroOut, footerSrcEls );\n\t\n\t\t\t_fnApplyToChildren( function(nSizer) {\n\t\t\t\tfooterContent.push( nSizer.innerHTML );\n\t\t\t\tfooterWidths.push( _fnStringToCss( $(nSizer).css('width') ) );\n\t\t\t}, footerSrcEls );\n\t\n\t\t\t_fnApplyToChildren( function(nToSize, i) {\n\t\t\t\tnToSize.style.width = footerWidths[i];\n\t\t\t}, footerTrgEls );\n\t\n\t\t\t$(footerSrcEls).height(0);\n\t\t}\n\t\n\t\n\t\t/*\n\t\t * 3. Apply the measurements\n\t\t */\n\t\n\t\t// \"Hide\" the header and footer that we used for the sizing. We need to keep\n\t\t// the content of the cell so that the width applied to the header and body\n\t\t// both match, but we want to hide it completely. We want to also fix their\n\t\t// width to what they currently are\n\t\t_fnApplyToChildren( function(nSizer, i) {\n\t\t\tnSizer.innerHTML = '<div class=\"dataTables_sizing\">'+headerContent[i]+'</div>';\n\t\t\tnSizer.childNodes[0].style.height = \"0\";\n\t\t\tnSizer.childNodes[0].style.overflow = \"hidden\";\n\t\t\tnSizer.style.width = headerWidths[i];\n\t\t}, headerSrcEls );\n\t\n\t\tif ( footer )\n\t\t{\n\t\t\t_fnApplyToChildren( function(nSizer, i) {\n\t\t\t\tnSizer.innerHTML = '<div class=\"dataTables_sizing\">'+footerContent[i]+'</div>';\n\t\t\t\tnSizer.childNodes[0].style.height = \"0\";\n\t\t\t\tnSizer.childNodes[0].style.overflow = \"hidden\";\n\t\t\t\tnSizer.style.width = footerWidths[i];\n\t\t\t}, footerSrcEls );\n\t\t}\n\t\n\t\t// Sanity check that the table is of a sensible width. If not then we are going to get\n\t\t// misalignment - try to prevent this by not allowing the table to shrink below its min width\n\t\tif ( Math.round(table.outerWidth()) < Math.round(sanityWidth) )\n\t\t{\n\t\t\t// The min width depends upon if we have a vertical scrollbar visible or not */\n\t\t\tcorrection = ((divBodyEl.scrollHeight > divBodyEl.offsetHeight ||\n\t\t\t\tdivBody.css('overflow-y') == \"scroll\")) ?\n\t\t\t\t\tsanityWidth+barWidth :\n\t\t\t\t\tsanityWidth;\n\t\n\t\t\t// IE6/7 are a law unto themselves...\n\t\t\tif ( ie67 && (divBodyEl.scrollHeight >\n\t\t\t\tdivBodyEl.offsetHeight || divBody.css('overflow-y') == \"scroll\")\n\t\t\t) {\n\t\t\t\ttableStyle.width = _fnStringToCss( correction-barWidth );\n\t\t\t}\n\t\n\t\t\t// And give the user a warning that we've stopped the table getting too small\n\t\t\tif ( scrollX === \"\" || scrollXInner !== \"\" ) {\n\t\t\t\t_fnLog( settings, 1, 'Possible column misalignment', 6 );\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcorrection = '100%';\n\t\t}\n\t\n\t\t// Apply to the container elements\n\t\tdivBodyStyle.width = _fnStringToCss( correction );\n\t\tdivHeaderStyle.width = _fnStringToCss( correction );\n\t\n\t\tif ( footer ) {\n\t\t\tsettings.nScrollFoot.style.width = _fnStringToCss( correction );\n\t\t}\n\t\n\t\n\t\t/*\n\t\t * 4. Clean up\n\t\t */\n\t\tif ( ! scrollY ) {\n\t\t\t/* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting\n\t\t\t * the scrollbar height from the visible display, rather than adding it on. We need to\n\t\t\t * set the height in order to sort this. Don't want to do it in any other browsers.\n\t\t\t */\n\t\t\tif ( ie67 ) {\n\t\t\t\tdivBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+barWidth );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Finally set the width's of the header and footer tables */\n\t\tvar iOuterWidth = table.outerWidth();\n\t\tdivHeaderTable[0].style.width = _fnStringToCss( iOuterWidth );\n\t\tdivHeaderInnerStyle.width = _fnStringToCss( iOuterWidth );\n\t\n\t\t// Figure out if there are scrollbar present - if so then we need a the header and footer to\n\t\t// provide a bit more space to allow \"overflow\" scrolling (i.e. past the scrollbar)\n\t\tvar bScrolling = table.height() > divBodyEl.clientHeight || divBody.css('overflow-y') == \"scroll\";\n\t\tvar padding = 'padding' + (browser.bScrollbarLeft ? 'Left' : 'Right' );\n\t\tdivHeaderInnerStyle[ padding ] = bScrolling ? barWidth+\"px\" : \"0px\";\n\t\n\t\tif ( footer ) {\n\t\t\tdivFooterTable[0].style.width = _fnStringToCss( iOuterWidth );\n\t\t\tdivFooterInner[0].style.width = _fnStringToCss( iOuterWidth );\n\t\t\tdivFooterInner[0].style[padding] = bScrolling ? barWidth+\"px\" : \"0px\";\n\t\t}\n\t\n\t\t// Correct DOM ordering for colgroup - comes before the thead\n\t\ttable.children('colgroup').insertBefore( table.children('thead') );\n\t\n\t\t/* Adjust the position of the header in case we loose the y-scrollbar */\n\t\tdivBody.trigger('scroll');\n\t\n\t\t// If sorting or filtering has occurred, jump the scrolling back to the top\n\t\t// only if we aren't holding the position\n\t\tif ( (settings.bSorted || settings.bFiltered) && ! settings._drawHold ) {\n\t\t\tdivBodyEl.scrollTop = 0;\n\t\t}\n\t}\n\t\n\t\n\t\n\t/**\n\t * Apply a given function to the display child nodes of an element array (typically\n\t * TD children of TR rows\n\t *  @param {function} fn Method to apply to the objects\n\t *  @param array {nodes} an1 List of elements to look through for display children\n\t *  @param array {nodes} an2 Another list (identical structure to the first) - optional\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnApplyToChildren( fn, an1, an2 )\n\t{\n\t\tvar index=0, i=0, iLen=an1.length;\n\t\tvar nNode1, nNode2;\n\t\n\t\twhile ( i < iLen ) {\n\t\t\tnNode1 = an1[i].firstChild;\n\t\t\tnNode2 = an2 ? an2[i].firstChild : null;\n\t\n\t\t\twhile ( nNode1 ) {\n\t\t\t\tif ( nNode1.nodeType === 1 ) {\n\t\t\t\t\tif ( an2 ) {\n\t\t\t\t\t\tfn( nNode1, nNode2, index );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfn( nNode1, index );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\t\n\t\t\t\tnNode1 = nNode1.nextSibling;\n\t\t\t\tnNode2 = an2 ? nNode2.nextSibling : null;\n\t\t\t}\n\t\n\t\t\ti++;\n\t\t}\n\t}\n\t\n\t\n\t\n\tvar __re_html_remove = /<.*?>/g;\n\t\n\t\n\t/**\n\t * Calculate the width of columns for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCalculateColumnWidths ( oSettings )\n\t{\n\t\tvar\n\t\t\ttable = oSettings.nTable,\n\t\t\tcolumns = oSettings.aoColumns,\n\t\t\tscroll = oSettings.oScroll,\n\t\t\tscrollY = scroll.sY,\n\t\t\tscrollX = scroll.sX,\n\t\t\tscrollXInner = scroll.sXInner,\n\t\t\tcolumnCount = columns.length,\n\t\t\tvisibleColumns = _fnGetColumns( oSettings, 'bVisible' ),\n\t\t\theaderCells = $('th', oSettings.nTHead),\n\t\t\ttableWidthAttr = table.getAttribute('width'), // from DOM element\n\t\t\ttableContainer = table.parentNode,\n\t\t\tuserInputs = false,\n\t\t\ti, column, columnIdx, width, outerWidth,\n\t\t\tbrowser = oSettings.oBrowser,\n\t\t\tie67 = browser.bScrollOversize;\n\t\n\t\tvar styleWidth = table.style.width;\n\t\tif ( styleWidth && styleWidth.indexOf('%') !== -1 ) {\n\t\t\ttableWidthAttr = styleWidth;\n\t\t}\n\t\n\t\t/* Convert any user input sizes into pixel sizes */\n\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\n\t\t\tif ( column.sWidth !== null ) {\n\t\t\t\tcolumn.sWidth = _fnConvertToWidth( column.sWidthOrig, tableContainer );\n\t\n\t\t\t\tuserInputs = true;\n\t\t\t}\n\t\t}\n\t\n\t\t/* If the number of columns in the DOM equals the number that we have to\n\t\t * process in DataTables, then we can use the offsets that are created by\n\t\t * the web- browser. No custom sizes can be set in order for this to happen,\n\t\t * nor scrolling used\n\t\t */\n\t\tif ( ie67 || ! userInputs && ! scrollX && ! scrollY &&\n\t\t     columnCount == _fnVisbleColumns( oSettings ) &&\n\t\t     columnCount == headerCells.length\n\t\t) {\n\t\t\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\t\t\tvar colIdx = _fnVisibleToColumnIndex( oSettings, i );\n\t\n\t\t\t\tif ( colIdx !== null ) {\n\t\t\t\t\tcolumns[ colIdx ].sWidth = _fnStringToCss( headerCells.eq(i).width() );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Otherwise construct a single row, worst case, table with the widest\n\t\t\t// node in the data, assign any user defined widths, then insert it into\n\t\t\t// the DOM and allow the browser to do all the hard work of calculating\n\t\t\t// table widths\n\t\t\tvar tmpTable = $(table).clone() // don't use cloneNode - IE8 will remove events on the main table\n\t\t\t\t.css( 'visibility', 'hidden' )\n\t\t\t\t.removeAttr( 'id' );\n\t\n\t\t\t// Clean up the table body\n\t\t\ttmpTable.find('tbody tr').remove();\n\t\t\tvar tr = $('<tr/>').appendTo( tmpTable.find('tbody') );\n\t\n\t\t\t// Clone the table header and footer - we can't use the header / footer\n\t\t\t// from the cloned table, since if scrolling is active, the table's\n\t\t\t// real header and footer are contained in different table tags\n\t\t\ttmpTable.find('thead, tfoot').remove();\n\t\t\ttmpTable\n\t\t\t\t.append( $(oSettings.nTHead).clone() )\n\t\t\t\t.append( $(oSettings.nTFoot).clone() );\n\t\n\t\t\t// Remove any assigned widths from the footer (from scrolling)\n\t\t\ttmpTable.find('tfoot th, tfoot td').css('width', '');\n\t\n\t\t\t// Apply custom sizing to the cloned header\n\t\t\theaderCells = _fnGetUniqueThs( oSettings, tmpTable.find('thead')[0] );\n\t\n\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\n\t\t\t\theaderCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !== '' ?\n\t\t\t\t\t_fnStringToCss( column.sWidthOrig ) :\n\t\t\t\t\t'';\n\t\n\t\t\t\t// For scrollX we need to force the column width otherwise the\n\t\t\t\t// browser will collapse it. If this width is smaller than the\n\t\t\t\t// width the column requires, then it will have no effect\n\t\t\t\tif ( column.sWidthOrig && scrollX ) {\n\t\t\t\t\t$( headerCells[i] ).append( $('<div/>').css( {\n\t\t\t\t\t\twidth: column.sWidthOrig,\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\theight: 1\n\t\t\t\t\t} ) );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Find the widest cell for each column and put it into the table\n\t\t\tif ( oSettings.aoData.length ) {\n\t\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\t\tcolumnIdx = visibleColumns[i];\n\t\t\t\t\tcolumn = columns[ columnIdx ];\n\t\n\t\t\t\t\t$( _fnGetWidestNode( oSettings, columnIdx ) )\n\t\t\t\t\t\t.clone( false )\n\t\t\t\t\t\t.append( column.sContentPadding )\n\t\t\t\t\t\t.appendTo( tr );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Tidy the temporary table - remove name attributes so there aren't\n\t\t\t// duplicated in the dom (radio elements for example)\n\t\t\t$('[name]', tmpTable).removeAttr('name');\n\t\n\t\t\t// Table has been built, attach to the document so we can work with it.\n\t\t\t// A holding element is used, positioned at the top of the container\n\t\t\t// with minimal height, so it has no effect on if the container scrolls\n\t\t\t// or not. Otherwise it might trigger scrolling when it actually isn't\n\t\t\t// needed\n\t\t\tvar holder = $('<div/>').css( scrollX || scrollY ?\n\t\t\t\t\t{\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\theight: 1,\n\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t\t} :\n\t\t\t\t\t{}\n\t\t\t\t)\n\t\t\t\t.append( tmpTable )\n\t\t\t\t.appendTo( tableContainer );\n\t\n\t\t\t// When scrolling (X or Y) we want to set the width of the table as \n\t\t\t// appropriate. However, when not scrolling leave the table width as it\n\t\t\t// is. This results in slightly different, but I think correct behaviour\n\t\t\tif ( scrollX && scrollXInner ) {\n\t\t\t\ttmpTable.width( scrollXInner );\n\t\t\t}\n\t\t\telse if ( scrollX ) {\n\t\t\t\ttmpTable.css( 'width', 'auto' );\n\t\t\t\ttmpTable.removeAttr('width');\n\t\n\t\t\t\t// If there is no width attribute or style, then allow the table to\n\t\t\t\t// collapse\n\t\t\t\tif ( tmpTable.width() < tableContainer.clientWidth && tableWidthAttr ) {\n\t\t\t\t\ttmpTable.width( tableContainer.clientWidth );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( scrollY ) {\n\t\t\t\ttmpTable.width( tableContainer.clientWidth );\n\t\t\t}\n\t\t\telse if ( tableWidthAttr ) {\n\t\t\t\ttmpTable.width( tableWidthAttr );\n\t\t\t}\n\t\n\t\t\t// Get the width of each column in the constructed table - we need to\n\t\t\t// know the inner width (so it can be assigned to the other table's\n\t\t\t// cells) and the outer width so we can calculate the full width of the\n\t\t\t// table. This is safe since DataTables requires a unique cell for each\n\t\t\t// column, but if ever a header can span multiple columns, this will\n\t\t\t// need to be modified.\n\t\t\tvar total = 0;\n\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\tvar cell = $(headerCells[i]);\n\t\t\t\tvar border = cell.outerWidth() - cell.width();\n\t\n\t\t\t\t// Use getBounding... where possible (not IE8-) because it can give\n\t\t\t\t// sub-pixel accuracy, which we then want to round up!\n\t\t\t\tvar bounding = browser.bBounding ?\n\t\t\t\t\tMath.ceil( headerCells[i].getBoundingClientRect().width ) :\n\t\t\t\t\tcell.outerWidth();\n\t\n\t\t\t\t// Total is tracked to remove any sub-pixel errors as the outerWidth\n\t\t\t\t// of the table might not equal the total given here (IE!).\n\t\t\t\ttotal += bounding;\n\t\n\t\t\t\t// Width for each column to use\n\t\t\t\tcolumns[ visibleColumns[i] ].sWidth = _fnStringToCss( bounding - border );\n\t\t\t}\n\t\n\t\t\ttable.style.width = _fnStringToCss( total );\n\t\n\t\t\t// Finished with the table - ditch it\n\t\t\tholder.remove();\n\t\t}\n\t\n\t\t// If there is a width attr, we want to attach an event listener which\n\t\t// allows the table sizing to automatically adjust when the window is\n\t\t// resized. Use the width attr rather than CSS, since we can't know if the\n\t\t// CSS is a relative value or absolute - DOM read is always px.\n\t\tif ( tableWidthAttr ) {\n\t\t\ttable.style.width = _fnStringToCss( tableWidthAttr );\n\t\t}\n\t\n\t\tif ( (tableWidthAttr || scrollX) && ! oSettings._reszEvt ) {\n\t\t\tvar bindResize = function () {\n\t\t\t\t$(window).on('resize.DT-'+oSettings.sInstance, _fnThrottle( function () {\n\t\t\t\t\t_fnAdjustColumnSizing( oSettings );\n\t\t\t\t} ) );\n\t\t\t};\n\t\n\t\t\t// IE6/7 will crash if we bind a resize event handler on page load.\n\t\t\t// To be removed in 1.11 which drops IE6/7 support\n\t\t\tif ( ie67 ) {\n\t\t\t\tsetTimeout( bindResize, 1000 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbindResize();\n\t\t\t}\n\t\n\t\t\toSettings._reszEvt = true;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Throttle the calls to a function. Arguments and context are maintained for\n\t * the throttled function\n\t *  @param {function} fn Function to be called\n\t *  @param {int} [freq=200] call frequency in mS\n\t *  @returns {function} wrapped function\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnThrottle = DataTable.util.throttle;\n\t\n\t\n\t/**\n\t * Convert a CSS unit width to pixels (e.g. 2em)\n\t *  @param {string} width width to be converted\n\t *  @param {node} parent parent to get the with for (required for relative widths) - optional\n\t *  @returns {int} width in pixels\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnConvertToWidth ( width, parent )\n\t{\n\t\tif ( ! width ) {\n\t\t\treturn 0;\n\t\t}\n\t\n\t\tvar n = $('<div/>')\n\t\t\t.css( 'width', _fnStringToCss( width ) )\n\t\t\t.appendTo( parent || document.body );\n\t\n\t\tvar val = n[0].offsetWidth;\n\t\tn.remove();\n\t\n\t\treturn val;\n\t}\n\t\n\t\n\t/**\n\t * Get the widest node\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} colIdx column of interest\n\t *  @returns {node} widest table node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetWidestNode( settings, colIdx )\n\t{\n\t\tvar idx = _fnGetMaxLenString( settings, colIdx );\n\t\tif ( idx < 0 ) {\n\t\t\treturn null;\n\t\t}\n\t\n\t\tvar data = settings.aoData[ idx ];\n\t\treturn ! data.nTr ? // Might not have been created when deferred rendering\n\t\t\t$('<td/>').html( _fnGetCellData( settings, idx, colIdx, 'display' ) )[0] :\n\t\t\tdata.anCells[ colIdx ];\n\t}\n\t\n\t\n\t/**\n\t * Get the maximum strlen for each data column\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} colIdx column of interest\n\t *  @returns {string} max string length for each column\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetMaxLenString( settings, colIdx )\n\t{\n\t\tvar s, max=-1, maxIdx = -1;\n\t\n\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\ts = _fnGetCellData( settings, i, colIdx, 'display' )+'';\n\t\t\ts = s.replace( __re_html_remove, '' );\n\t\t\ts = s.replace( /&nbsp;/g, ' ' );\n\t\n\t\t\tif ( s.length > max ) {\n\t\t\t\tmax = s.length;\n\t\t\t\tmaxIdx = i;\n\t\t\t}\n\t\t}\n\t\n\t\treturn maxIdx;\n\t}\n\t\n\t\n\t/**\n\t * Append a CSS unit (only if required) to a string\n\t *  @param {string} value to css-ify\n\t *  @returns {string} value with css unit\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnStringToCss( s )\n\t{\n\t\tif ( s === null ) {\n\t\t\treturn '0px';\n\t\t}\n\t\n\t\tif ( typeof s == 'number' ) {\n\t\t\treturn s < 0 ?\n\t\t\t\t'0px' :\n\t\t\t\ts+'px';\n\t\t}\n\t\n\t\t// Check it has a unit character already\n\t\treturn s.match(/\\d$/) ?\n\t\t\ts+'px' :\n\t\t\ts;\n\t}\n\t\n\t\n\t\n\tfunction _fnSortFlatten ( settings )\n\t{\n\t\tvar\n\t\t\ti, iLen, k, kLen,\n\t\t\taSort = [],\n\t\t\taiOrig = [],\n\t\t\taoColumns = settings.aoColumns,\n\t\t\taDataSort, iCol, sType, srcCol,\n\t\t\tfixed = settings.aaSortingFixed,\n\t\t\tfixedObj = $.isPlainObject( fixed ),\n\t\t\tnestedSort = [],\n\t\t\tadd = function ( a ) {\n\t\t\t\tif ( a.length && ! Array.isArray( a[0] ) ) {\n\t\t\t\t\t// 1D array\n\t\t\t\t\tnestedSort.push( a );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// 2D array\n\t\t\t\t\t$.merge( nestedSort, a );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t// Build the sort array, with pre-fix and post-fix options if they have been\n\t\t// specified\n\t\tif ( Array.isArray( fixed ) ) {\n\t\t\tadd( fixed );\n\t\t}\n\t\n\t\tif ( fixedObj && fixed.pre ) {\n\t\t\tadd( fixed.pre );\n\t\t}\n\t\n\t\tadd( settings.aaSorting );\n\t\n\t\tif (fixedObj && fixed.post ) {\n\t\t\tadd( fixed.post );\n\t\t}\n\t\n\t\tfor ( i=0 ; i<nestedSort.length ; i++ )\n\t\t{\n\t\t\tsrcCol = nestedSort[i][0];\n\t\t\taDataSort = aoColumns[ srcCol ].aDataSort;\n\t\n\t\t\tfor ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )\n\t\t\t{\n\t\t\t\tiCol = aDataSort[k];\n\t\t\t\tsType = aoColumns[ iCol ].sType || 'string';\n\t\n\t\t\t\tif ( nestedSort[i]._idx === undefined ) {\n\t\t\t\t\tnestedSort[i]._idx = $.inArray( nestedSort[i][1], aoColumns[iCol].asSorting );\n\t\t\t\t}\n\t\n\t\t\t\taSort.push( {\n\t\t\t\t\tsrc:       srcCol,\n\t\t\t\t\tcol:       iCol,\n\t\t\t\t\tdir:       nestedSort[i][1],\n\t\t\t\t\tindex:     nestedSort[i]._idx,\n\t\t\t\t\ttype:      sType,\n\t\t\t\t\tformatter: DataTable.ext.type.order[ sType+\"-pre\" ]\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\n\t\treturn aSort;\n\t}\n\t\n\t/**\n\t * Change the order of the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t *  @todo This really needs split up!\n\t */\n\tfunction _fnSort ( oSettings )\n\t{\n\t\tvar\n\t\t\ti, ien, iLen, j, jLen, k, kLen,\n\t\t\tsDataType, nTh,\n\t\t\taiOrig = [],\n\t\t\toExtSort = DataTable.ext.type.order,\n\t\t\taoData = oSettings.aoData,\n\t\t\taoColumns = oSettings.aoColumns,\n\t\t\taDataSort, data, iCol, sType, oSort,\n\t\t\tformatters = 0,\n\t\t\tsortCol,\n\t\t\tdisplayMaster = oSettings.aiDisplayMaster,\n\t\t\taSort;\n\t\n\t\t// Resolve any column types that are unknown due to addition or invalidation\n\t\t// @todo Can this be moved into a 'data-ready' handler which is called when\n\t\t//   data is going to be used in the table?\n\t\t_fnColumnTypes( oSettings );\n\t\n\t\taSort = _fnSortFlatten( oSettings );\n\t\n\t\tfor ( i=0, ien=aSort.length ; i<ien ; i++ ) {\n\t\t\tsortCol = aSort[i];\n\t\n\t\t\t// Track if we can use the fast sort algorithm\n\t\t\tif ( sortCol.formatter ) {\n\t\t\t\tformatters++;\n\t\t\t}\n\t\n\t\t\t// Load the data needed for the sort, for each cell\n\t\t\t_fnSortData( oSettings, sortCol.col );\n\t\t}\n\t\n\t\t/* No sorting required if server-side or no sorting array */\n\t\tif ( _fnDataSource( oSettings ) != 'ssp' && aSort.length !== 0 )\n\t\t{\n\t\t\t// Create a value - key array of the current row positions such that we can use their\n\t\t\t// current position during the sort, if values match, in order to perform stable sorting\n\t\t\tfor ( i=0, iLen=displayMaster.length ; i<iLen ; i++ ) {\n\t\t\t\taiOrig[ displayMaster[i] ] = i;\n\t\t\t}\n\t\n\t\t\t/* Do the sort - here we want multi-column sorting based on a given data source (column)\n\t\t\t * and sorting function (from oSort) in a certain direction. It's reasonably complex to\n\t\t\t * follow on it's own, but this is what we want (example two column sorting):\n\t\t\t *  fnLocalSorting = function(a,b){\n\t\t\t *    var iTest;\n\t\t\t *    iTest = oSort['string-asc']('data11', 'data12');\n\t\t\t *      if (iTest !== 0)\n\t\t\t *        return iTest;\n\t\t\t *    iTest = oSort['numeric-desc']('data21', 'data22');\n\t\t\t *    if (iTest !== 0)\n\t\t\t *      return iTest;\n\t\t\t *    return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );\n\t\t\t *  }\n\t\t\t * Basically we have a test for each sorting column, if the data in that column is equal,\n\t\t\t * test the next column. If all columns match, then we use a numeric sort on the row\n\t\t\t * positions in the original data array to provide a stable sort.\n\t\t\t *\n\t\t\t * Note - I know it seems excessive to have two sorting methods, but the first is around\n\t\t\t * 15% faster, so the second is only maintained for backwards compatibility with sorting\n\t\t\t * methods which do not have a pre-sort formatting function.\n\t\t\t */\n\t\t\tif ( formatters === aSort.length ) {\n\t\t\t\t// All sort types have formatting functions\n\t\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\t\tvar\n\t\t\t\t\t\tx, y, k, test, sort,\n\t\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\t\tdataB = aoData[b]._aSortData;\n\t\n\t\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\t\tsort = aSort[k];\n\t\n\t\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\t\ty = dataB[ sort.col ];\n\t\n\t\t\t\t\t\ttest = x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\t\treturn sort.dir === 'asc' ? test : -test;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tx = aiOrig[a];\n\t\t\t\t\ty = aiOrig[b];\n\t\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t} );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Depreciated - remove in 1.11 (providing a plug-in option)\n\t\t\t\t// Not all sort types have formatting methods, so we have to call their sorting\n\t\t\t\t// methods.\n\t\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\t\tvar\n\t\t\t\t\t\tx, y, k, l, test, sort, fn,\n\t\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\t\tdataB = aoData[b]._aSortData;\n\t\n\t\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\t\tsort = aSort[k];\n\t\n\t\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\t\ty = dataB[ sort.col ];\n\t\n\t\t\t\t\t\tfn = oExtSort[ sort.type+\"-\"+sort.dir ] || oExtSort[ \"string-\"+sort.dir ];\n\t\t\t\t\t\ttest = fn( x, y );\n\t\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\t\treturn test;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tx = aiOrig[a];\n\t\t\t\t\ty = aiOrig[b];\n\t\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Tell the draw function that we have sorted the data */\n\t\toSettings.bSorted = true;\n\t}\n\t\n\t\n\tfunction _fnSortAria ( settings )\n\t{\n\t\tvar label;\n\t\tvar nextSort;\n\t\tvar columns = settings.aoColumns;\n\t\tvar aSort = _fnSortFlatten( settings );\n\t\tvar oAria = settings.oLanguage.oAria;\n\t\n\t\t// ARIA attributes - need to loop all columns, to update all (removing old\n\t\t// attributes as needed)\n\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tvar col = columns[i];\n\t\t\tvar asSorting = col.asSorting;\n\t\t\tvar sTitle = col.ariaTitle || col.sTitle.replace( /<.*?>/g, \"\" );\n\t\t\tvar th = col.nTh;\n\t\n\t\t\t// IE7 is throwing an error when setting these properties with jQuery's\n\t\t\t// attr() and removeAttr() methods...\n\t\t\tth.removeAttribute('aria-sort');\n\t\n\t\t\t/* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */\n\t\t\tif ( col.bSortable ) {\n\t\t\t\tif ( aSort.length > 0 && aSort[0].col == i ) {\n\t\t\t\t\tth.setAttribute('aria-sort', aSort[0].dir==\"asc\" ? \"ascending\" : \"descending\" );\n\t\t\t\t\tnextSort = asSorting[ aSort[0].index+1 ] || asSorting[0];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnextSort = asSorting[0];\n\t\t\t\t}\n\t\n\t\t\t\tlabel = sTitle + ( nextSort === \"asc\" ?\n\t\t\t\t\toAria.sSortAscending :\n\t\t\t\t\toAria.sSortDescending\n\t\t\t\t);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlabel = sTitle;\n\t\t\t}\n\t\n\t\t\tth.setAttribute('aria-label', label);\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Function to run on user sort request\n\t *  @param {object} settings dataTables settings object\n\t *  @param {node} attachTo node to attach the handler to\n\t *  @param {int} colIdx column sorting index\n\t *  @param {boolean} [append=false] Append the requested sort to the existing\n\t *    sort if true (i.e. multi-column sort)\n\t *  @param {function} [callback] callback function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortListener ( settings, colIdx, append, callback )\n\t{\n\t\tvar col = settings.aoColumns[ colIdx ];\n\t\tvar sorting = settings.aaSorting;\n\t\tvar asSorting = col.asSorting;\n\t\tvar nextSortIdx;\n\t\tvar next = function ( a, overflow ) {\n\t\t\tvar idx = a._idx;\n\t\t\tif ( idx === undefined ) {\n\t\t\t\tidx = $.inArray( a[1], asSorting );\n\t\t\t}\n\t\n\t\t\treturn idx+1 < asSorting.length ?\n\t\t\t\tidx+1 :\n\t\t\t\toverflow ?\n\t\t\t\t\tnull :\n\t\t\t\t\t0;\n\t\t};\n\t\n\t\t// Convert to 2D array if needed\n\t\tif ( typeof sorting[0] === 'number' ) {\n\t\t\tsorting = settings.aaSorting = [ sorting ];\n\t\t}\n\t\n\t\t// If appending the sort then we are multi-column sorting\n\t\tif ( append && settings.oFeatures.bSortMulti ) {\n\t\t\t// Are we already doing some kind of sort on this column?\n\t\t\tvar sortIdx = $.inArray( colIdx, _pluck(sorting, '0') );\n\t\n\t\t\tif ( sortIdx !== -1 ) {\n\t\t\t\t// Yes, modify the sort\n\t\t\t\tnextSortIdx = next( sorting[sortIdx], true );\n\t\n\t\t\t\tif ( nextSortIdx === null && sorting.length === 1 ) {\n\t\t\t\t\tnextSortIdx = 0; // can't remove sorting completely\n\t\t\t\t}\n\t\n\t\t\t\tif ( nextSortIdx === null ) {\n\t\t\t\t\tsorting.splice( sortIdx, 1 );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsorting[sortIdx][1] = asSorting[ nextSortIdx ];\n\t\t\t\t\tsorting[sortIdx]._idx = nextSortIdx;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// No sort on this column yet\n\t\t\t\tsorting.push( [ colIdx, asSorting[0], 0 ] );\n\t\t\t\tsorting[sorting.length-1]._idx = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( sorting.length && sorting[0][0] == colIdx ) {\n\t\t\t// Single column - already sorting on this column, modify the sort\n\t\t\tnextSortIdx = next( sorting[0] );\n\t\n\t\t\tsorting.length = 1;\n\t\t\tsorting[0][1] = asSorting[ nextSortIdx ];\n\t\t\tsorting[0]._idx = nextSortIdx;\n\t\t}\n\t\telse {\n\t\t\t// Single column - sort only on this column\n\t\t\tsorting.length = 0;\n\t\t\tsorting.push( [ colIdx, asSorting[0] ] );\n\t\t\tsorting[0]._idx = 0;\n\t\t}\n\t\n\t\t// Run the sort by calling a full redraw\n\t\t_fnReDraw( settings );\n\t\n\t\t// callback used for async user interaction\n\t\tif ( typeof callback == 'function' ) {\n\t\t\tcallback( settings );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Attach a sort handler (click) to a node\n\t *  @param {object} settings dataTables settings object\n\t *  @param {node} attachTo node to attach the handler to\n\t *  @param {int} colIdx column sorting index\n\t *  @param {function} [callback] callback function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortAttachListener ( settings, attachTo, colIdx, callback )\n\t{\n\t\tvar col = settings.aoColumns[ colIdx ];\n\t\n\t\t_fnBindAction( attachTo, {}, function (e) {\n\t\t\t/* If the column is not sortable - don't to anything */\n\t\t\tif ( col.bSortable === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// If processing is enabled use a timeout to allow the processing\n\t\t\t// display to be shown - otherwise to it synchronously\n\t\t\tif ( settings.oFeatures.bProcessing ) {\n\t\t\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\t\n\t\t\t\t\t// In server-side processing, the draw callback will remove the\n\t\t\t\t\t// processing display\n\t\t\t\t\tif ( _fnDataSource( settings ) !== 'ssp' ) {\n\t\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t\t}\n\t\t\t\t}, 0 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\t\t\t}\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Set the sorting classes on table's body, Note: it is safe to call this function\n\t * when bSort and bSortClasses are false\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortingClasses( settings )\n\t{\n\t\tvar oldSort = settings.aLastSort;\n\t\tvar sortClass = settings.oClasses.sSortColumn;\n\t\tvar sort = _fnSortFlatten( settings );\n\t\tvar features = settings.oFeatures;\n\t\tvar i, ien, colIdx;\n\t\n\t\tif ( features.bSort && features.bSortClasses ) {\n\t\t\t// Remove old sorting classes\n\t\t\tfor ( i=0, ien=oldSort.length ; i<ien ; i++ ) {\n\t\t\t\tcolIdx = oldSort[i].src;\n\t\n\t\t\t\t// Remove column sorting\n\t\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t\t.removeClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t\t}\n\t\n\t\t\t// Add new column sorting\n\t\t\tfor ( i=0, ien=sort.length ; i<ien ; i++ ) {\n\t\t\t\tcolIdx = sort[i].src;\n\t\n\t\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t\t.addClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t\t}\n\t\t}\n\t\n\t\tsettings.aLastSort = sort;\n\t}\n\t\n\t\n\t// Get the data to sort a column, be it from cache, fresh (populating the\n\t// cache), or from a sort formatter\n\tfunction _fnSortData( settings, idx )\n\t{\n\t\t// Custom sorting function - provided by the sort data type\n\t\tvar column = settings.aoColumns[ idx ];\n\t\tvar customSort = DataTable.ext.order[ column.sSortDataType ];\n\t\tvar customData;\n\t\n\t\tif ( customSort ) {\n\t\t\tcustomData = customSort.call( settings.oInstance, settings, idx,\n\t\t\t\t_fnColumnIndexToVisible( settings, idx )\n\t\t\t);\n\t\t}\n\t\n\t\t// Use / populate cache\n\t\tvar row, cellData;\n\t\tvar formatter = DataTable.ext.type.order[ column.sType+\"-pre\" ];\n\t\n\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\trow = settings.aoData[i];\n\t\n\t\t\tif ( ! row._aSortData ) {\n\t\t\t\trow._aSortData = [];\n\t\t\t}\n\t\n\t\t\tif ( ! row._aSortData[idx] || customSort ) {\n\t\t\t\tcellData = customSort ?\n\t\t\t\t\tcustomData[i] : // If there was a custom sort function, use data from there\n\t\t\t\t\t_fnGetCellData( settings, i, idx, 'sort' );\n\t\n\t\t\t\trow._aSortData[ idx ] = formatter ?\n\t\t\t\t\tformatter( cellData ) :\n\t\t\t\t\tcellData;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t\n\t/**\n\t * Save the state of a table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSaveState ( settings )\n\t{\n\t\tif (settings._bLoadingState) {\n\t\t\treturn;\n\t\t}\n\t\n\t\t/* Store the interesting variables */\n\t\tvar state = {\n\t\t\ttime:    +new Date(),\n\t\t\tstart:   settings._iDisplayStart,\n\t\t\tlength:  settings._iDisplayLength,\n\t\t\torder:   $.extend( true, [], settings.aaSorting ),\n\t\t\tsearch:  _fnSearchToCamel( settings.oPreviousSearch ),\n\t\t\tcolumns: $.map( settings.aoColumns, function ( col, i ) {\n\t\t\t\treturn {\n\t\t\t\t\tvisible: col.bVisible,\n\t\t\t\t\tsearch: _fnSearchToCamel( settings.aoPreSearchCols[i] )\n\t\t\t\t};\n\t\t\t} )\n\t\t};\n\t\n\t\tsettings.oSavedState = state;\n\t\t_fnCallbackFire( settings, \"aoStateSaveParams\", 'stateSaveParams', [settings, state] );\n\t\t\n\t\tif ( settings.oFeatures.bStateSave && !settings.bDestroying )\n\t\t{\n\t\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, state );\n\t\t}\t\n\t}\n\t\n\t\n\t/**\n\t * Attempt to load a saved table state\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} oInit DataTables init object so we can override settings\n\t *  @param {function} callback Callback to execute when the state has been loaded\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLoadState ( settings, oInit, callback )\n\t{\n\t\tif ( ! settings.oFeatures.bStateSave ) {\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar loaded = function(state) {\n\t\t\t_fnImplementState(settings, state, callback);\n\t\t}\n\t\n\t\tvar state = settings.fnStateLoadCallback.call( settings.oInstance, settings, loaded );\n\t\n\t\tif ( state !== undefined ) {\n\t\t\t_fnImplementState( settings, state, callback );\n\t\t}\n\t\t// otherwise, wait for the loaded callback to be executed\n\t\n\t\treturn true;\n\t}\n\t\n\tfunction _fnImplementState ( settings, s, callback) {\n\t\tvar i, ien;\n\t\tvar columns = settings.aoColumns;\n\t\tsettings._bLoadingState = true;\n\t\n\t\t// When StateRestore was introduced the state could now be implemented at any time\n\t\t// Not just initialisation. To do this an api instance is required in some places\n\t\tvar api = settings._bInitComplete ? new DataTable.Api(settings) : null;\n\t\n\t\tif ( ! s || ! s.time ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Allow custom and plug-in manipulation functions to alter the saved data set and\n\t\t// cancelling of loading by returning false\n\t\tvar abStateLoad = _fnCallbackFire( settings, 'aoStateLoadParams', 'stateLoadParams', [settings, s] );\n\t\tif ( $.inArray( false, abStateLoad ) !== -1 ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Reject old data\n\t\tvar duration = settings.iStateDuration;\n\t\tif ( duration > 0 && s.time < +new Date() - (duration*1000) ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Number of columns have changed - all bets are off, no restore of settings\n\t\tif ( s.columns && columns.length !== s.columns.length ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Store the saved state so it might be accessed at any time\n\t\tsettings.oLoadedState = $.extend( true, {}, s );\n\t\n\t\t// Page Length\n\t\tif ( s.length !== undefined ) {\n\t\t\t// If already initialised just set the value directly so that the select element is also updated\n\t\t\tif (api) {\n\t\t\t\tapi.page.len(s.length)\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsettings._iDisplayLength   = s.length;\n\t\t\t}\n\t\t}\n\t\n\t\t// Restore key features - todo - for 1.11 this needs to be done by\n\t\t// subscribed events\n\t\tif ( s.start !== undefined ) {\n\t\t\tif(api === null) {\n\t\t\t\tsettings._iDisplayStart    = s.start;\n\t\t\t\tsettings.iInitDisplayStart = s.start;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnPageChange(settings, s.start/settings._iDisplayLength);\n\t\t\t}\n\t\t}\n\t\n\t\t// Order\n\t\tif ( s.order !== undefined ) {\n\t\t\tsettings.aaSorting = [];\n\t\t\t$.each( s.order, function ( i, col ) {\n\t\t\t\tsettings.aaSorting.push( col[0] >= columns.length ?\n\t\t\t\t\t[ 0, col[1] ] :\n\t\t\t\t\tcol\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\t\n\t\t// Search\n\t\tif ( s.search !== undefined ) {\n\t\t\t$.extend( settings.oPreviousSearch, _fnSearchToHung( s.search ) );\n\t\t}\n\t\n\t\t// Columns\n\t\tif ( s.columns ) {\n\t\t\tfor ( i=0, ien=s.columns.length ; i<ien ; i++ ) {\n\t\t\t\tvar col = s.columns[i];\n\t\n\t\t\t\t// Visibility\n\t\t\t\tif ( col.visible !== undefined ) {\n\t\t\t\t\t// If the api is defined, the table has been initialised so we need to use it rather than internal settings\n\t\t\t\t\tif (api) {\n\t\t\t\t\t\t// Don't redraw the columns on every iteration of this loop, we will do this at the end instead\n\t\t\t\t\t\tapi.column(i).visible(col.visible, false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcolumns[i].bVisible = col.visible;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Search\n\t\t\t\tif ( col.search !== undefined ) {\n\t\t\t\t\t$.extend( settings.aoPreSearchCols[i], _fnSearchToHung( col.search ) );\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// If the api is defined then we need to adjust the columns once the visibility has been changed\n\t\t\tif (api) {\n\t\t\t\tapi.columns.adjust();\n\t\t\t}\n\t\t}\n\t\n\t\tsettings._bLoadingState = false;\n\t\t_fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, s] );\n\t\tcallback();\n\t};\n\t\n\t\n\t/**\n\t * Return the settings object for a particular table\n\t *  @param {node} table table we are using as a dataTable\n\t *  @returns {object} Settings object - or null if not found\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSettingsFromNode ( table )\n\t{\n\t\tvar settings = DataTable.settings;\n\t\tvar idx = $.inArray( table, _pluck( settings, 'nTable' ) );\n\t\n\t\treturn idx !== -1 ?\n\t\t\tsettings[ idx ] :\n\t\t\tnull;\n\t}\n\t\n\t\n\t/**\n\t * Log an error message\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} level log error messages, or display them to the user\n\t *  @param {string} msg error message\n\t *  @param {int} tn Technical note id to get more information about the error.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLog( settings, level, msg, tn )\n\t{\n\t\tmsg = 'DataTables warning: '+\n\t\t\t(settings ? 'table id='+settings.sTableId+' - ' : '')+msg;\n\t\n\t\tif ( tn ) {\n\t\t\tmsg += '. For more information about this error, please see '+\n\t\t\t'http://datatables.net/tn/'+tn;\n\t\t}\n\t\n\t\tif ( ! level  ) {\n\t\t\t// Backwards compatibility pre 1.10\n\t\t\tvar ext = DataTable.ext;\n\t\t\tvar type = ext.sErrMode || ext.errMode;\n\t\n\t\t\tif ( settings ) {\n\t\t\t\t_fnCallbackFire( settings, null, 'error', [ settings, tn, msg ] );\n\t\t\t}\n\t\n\t\t\tif ( type == 'alert' ) {\n\t\t\t\talert( msg );\n\t\t\t}\n\t\t\telse if ( type == 'throw' ) {\n\t\t\t\tthrow new Error(msg);\n\t\t\t}\n\t\t\telse if ( typeof type == 'function' ) {\n\t\t\t\ttype( settings, tn, msg );\n\t\t\t}\n\t\t}\n\t\telse if ( window.console && console.log ) {\n\t\t\tconsole.log( msg );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * See if a property is defined on one object, if so assign it to the other object\n\t *  @param {object} ret target object\n\t *  @param {object} src source object\n\t *  @param {string} name property\n\t *  @param {string} [mappedName] name to map too - optional, name used if not given\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnMap( ret, src, name, mappedName )\n\t{\n\t\tif ( Array.isArray( name ) ) {\n\t\t\t$.each( name, function (i, val) {\n\t\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t\t_fnMap( ret, src, val[0], val[1] );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t_fnMap( ret, src, val );\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( mappedName === undefined ) {\n\t\t\tmappedName = name;\n\t\t}\n\t\n\t\tif ( src[name] !== undefined ) {\n\t\t\tret[mappedName] = src[name];\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Extend objects - very similar to jQuery.extend, but deep copy objects, and\n\t * shallow copy arrays. The reason we need to do this, is that we don't want to\n\t * deep copy array init values (such as aaSorting) since the dev wouldn't be\n\t * able to override them, but we do want to deep copy arrays.\n\t *  @param {object} out Object to extend\n\t *  @param {object} extender Object from which the properties will be applied to\n\t *      out\n\t *  @param {boolean} breakRefs If true, then arrays will be sliced to take an\n\t *      independent copy with the exception of the `data` or `aaData` parameters\n\t *      if they are present. This is so you can pass in a collection to\n\t *      DataTables and have that used as your data source without breaking the\n\t *      references\n\t *  @returns {object} out Reference, just for convenience - out === the return.\n\t *  @memberof DataTable#oApi\n\t *  @todo This doesn't take account of arrays inside the deep copied objects.\n\t */\n\tfunction _fnExtend( out, extender, breakRefs )\n\t{\n\t\tvar val;\n\t\n\t\tfor ( var prop in extender ) {\n\t\t\tif ( extender.hasOwnProperty(prop) ) {\n\t\t\t\tval = extender[prop];\n\t\n\t\t\t\tif ( $.isPlainObject( val ) ) {\n\t\t\t\t\tif ( ! $.isPlainObject( out[prop] ) ) {\n\t\t\t\t\t\tout[prop] = {};\n\t\t\t\t\t}\n\t\t\t\t\t$.extend( true, out[prop], val );\n\t\t\t\t}\n\t\t\t\telse if ( breakRefs && prop !== 'data' && prop !== 'aaData' && Array.isArray(val) ) {\n\t\t\t\t\tout[prop] = val.slice();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tout[prop] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t}\n\t\n\t\n\t/**\n\t * Bind an event handers to allow a click or return key to activate the callback.\n\t * This is good for accessibility since a return on the keyboard will have the\n\t * same effect as a click, if the element has focus.\n\t *  @param {element} n Element to bind the action to\n\t *  @param {object} oData Data object to pass to the triggered function\n\t *  @param {function} fn Callback function for when the event is triggered\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBindAction( n, oData, fn )\n\t{\n\t\t$(n)\n\t\t\t.on( 'click.DT', oData, function (e) {\n\t\t\t\t\t$(n).trigger('blur'); // Remove focus outline for mouse users\n\t\t\t\t\tfn(e);\n\t\t\t\t} )\n\t\t\t.on( 'keypress.DT', oData, function (e){\n\t\t\t\t\tif ( e.which === 13 ) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tfn(e);\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t.on( 'selectstart.DT', function () {\n\t\t\t\t\t/* Take the brutal approach to cancelling text selection */\n\t\t\t\t\treturn false;\n\t\t\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Register a callback function. Easily allows a callback function to be added to\n\t * an array store of callback functions that can then all be called together.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sStore Name of the array storage for the callbacks in oSettings\n\t *  @param {function} fn Function to be called back\n\t *  @param {string} sName Identifying name for the callback (i.e. a label)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCallbackReg( oSettings, sStore, fn, sName )\n\t{\n\t\tif ( fn )\n\t\t{\n\t\t\toSettings[sStore].push( {\n\t\t\t\t\"fn\": fn,\n\t\t\t\t\"sName\": sName\n\t\t\t} );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Fire callback functions and trigger events. Note that the loop over the\n\t * callback array store is done backwards! Further note that you do not want to\n\t * fire off triggers in time sensitive applications (for example cell creation)\n\t * as its slow.\n\t *  @param {object} settings dataTables settings object\n\t *  @param {string} callbackArr Name of the array storage for the callbacks in\n\t *      oSettings\n\t *  @param {string} eventName Name of the jQuery custom event to trigger. If\n\t *      null no trigger is fired\n\t *  @param {array} args Array of arguments to pass to the callback function /\n\t *      trigger\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCallbackFire( settings, callbackArr, eventName, args )\n\t{\n\t\tvar ret = [];\n\t\n\t\tif ( callbackArr ) {\n\t\t\tret = $.map( settings[callbackArr].slice().reverse(), function (val, i) {\n\t\t\t\treturn val.fn.apply( settings.oInstance, args );\n\t\t\t} );\n\t\t}\n\t\n\t\tif ( eventName !== null ) {\n\t\t\tvar e = $.Event( eventName+'.dt' );\n\t\n\t\t\t$(settings.nTable).trigger( e, args );\n\t\n\t\t\tret.push( e.result );\n\t\t}\n\t\n\t\treturn ret;\n\t}\n\t\n\t\n\tfunction _fnLengthOverflow ( settings )\n\t{\n\t\tvar\n\t\t\tstart = settings._iDisplayStart,\n\t\t\tend = settings.fnDisplayEnd(),\n\t\t\tlen = settings._iDisplayLength;\n\t\n\t\t/* If we have space to show extra rows (backing up from the end point - then do so */\n\t\tif ( start >= end )\n\t\t{\n\t\t\tstart = end - len;\n\t\t}\n\t\n\t\t// Keep the start record on the current page\n\t\tstart -= (start % len);\n\t\n\t\tif ( len === -1 || start < 0 )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\n\t\tsettings._iDisplayStart = start;\n\t}\n\t\n\t\n\tfunction _fnRenderer( settings, type )\n\t{\n\t\tvar renderer = settings.renderer;\n\t\tvar host = DataTable.ext.renderer[type];\n\t\n\t\tif ( $.isPlainObject( renderer ) && renderer[type] ) {\n\t\t\t// Specific renderer for this type. If available use it, otherwise use\n\t\t\t// the default.\n\t\t\treturn host[renderer[type]] || host._;\n\t\t}\n\t\telse if ( typeof renderer === 'string' ) {\n\t\t\t// Common renderer - if there is one available for this type use it,\n\t\t\t// otherwise use the default\n\t\t\treturn host[renderer] || host._;\n\t\t}\n\t\n\t\t// Use the default\n\t\treturn host._;\n\t}\n\t\n\t\n\t/**\n\t * Detect the data source being used for the table. Used to simplify the code\n\t * a little (ajax) and to make it compress a little smaller.\n\t *\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {string} Data source\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDataSource ( settings )\n\t{\n\t\tif ( settings.oFeatures.bServerSide ) {\n\t\t\treturn 'ssp';\n\t\t}\n\t\telse if ( settings.ajax || settings.sAjaxSource ) {\n\t\t\treturn 'ajax';\n\t\t}\n\t\treturn 'dom';\n\t}\n\t\n\t\n\t\n\t\n\t/**\n\t * Computed structure of the DataTables API, defined by the options passed to\n\t * `DataTable.Api.register()` when building the API.\n\t *\n\t * The structure is built in order to speed creation and extension of the Api\n\t * objects since the extensions are effectively pre-parsed.\n\t *\n\t * The array is an array of objects with the following structure, where this\n\t * base array represents the Api prototype base:\n\t *\n\t *     [\n\t *       {\n\t *         name:      'data'                -- string   - Property name\n\t *         val:       function () {},       -- function - Api method (or undefined if just an object\n\t *         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n\t *         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n\t *       },\n\t *       {\n\t *         name:     'row'\n\t *         val:       {},\n\t *         methodExt: [ ... ],\n\t *         propExt:   [\n\t *           {\n\t *             name:      'data'\n\t *             val:       function () {},\n\t *             methodExt: [ ... ],\n\t *             propExt:   [ ... ]\n\t *           },\n\t *           ...\n\t *         ]\n\t *       }\n\t *     ]\n\t *\n\t * @type {Array}\n\t * @ignore\n\t */\n\tvar __apiStruct = [];\n\t\n\t\n\t/**\n\t * `Array.prototype` reference.\n\t *\n\t * @type object\n\t * @ignore\n\t */\n\tvar __arrayProto = Array.prototype;\n\t\n\t\n\t/**\n\t * Abstraction for `context` parameter of the `Api` constructor to allow it to\n\t * take several different forms for ease of use.\n\t *\n\t * Each of the input parameter types will be converted to a DataTables settings\n\t * object where possible.\n\t *\n\t * @param  {string|node|jQuery|object} mixed DataTable identifier. Can be one\n\t *   of:\n\t *\n\t *   * `string` - jQuery selector. Any DataTables' matching the given selector\n\t *     with be found and used.\n\t *   * `node` - `TABLE` node which has already been formed into a DataTable.\n\t *   * `jQuery` - A jQuery object of `TABLE` nodes.\n\t *   * `object` - DataTables settings object\n\t *   * `DataTables.Api` - API instance\n\t * @return {array|null} Matching DataTables settings objects. `null` or\n\t *   `undefined` is returned if no matching DataTable is found.\n\t * @ignore\n\t */\n\tvar _toSettings = function ( mixed )\n\t{\n\t\tvar idx, jq;\n\t\tvar settings = DataTable.settings;\n\t\tvar tables = $.map( settings, function (el, i) {\n\t\t\treturn el.nTable;\n\t\t} );\n\t\n\t\tif ( ! mixed ) {\n\t\t\treturn [];\n\t\t}\n\t\telse if ( mixed.nTable && mixed.oApi ) {\n\t\t\t// DataTables settings object\n\t\t\treturn [ mixed ];\n\t\t}\n\t\telse if ( mixed.nodeName && mixed.nodeName.toLowerCase() === 'table' ) {\n\t\t\t// Table node\n\t\t\tidx = $.inArray( mixed, tables );\n\t\t\treturn idx !== -1 ? [ settings[idx] ] : null;\n\t\t}\n\t\telse if ( mixed && typeof mixed.settings === 'function' ) {\n\t\t\treturn mixed.settings().toArray();\n\t\t}\n\t\telse if ( typeof mixed === 'string' ) {\n\t\t\t// jQuery selector\n\t\t\tjq = $(mixed);\n\t\t}\n\t\telse if ( mixed instanceof $ ) {\n\t\t\t// jQuery object (also DataTables instance)\n\t\t\tjq = mixed;\n\t\t}\n\t\n\t\tif ( jq ) {\n\t\t\treturn jq.map( function(i) {\n\t\t\t\tidx = $.inArray( this, tables );\n\t\t\t\treturn idx !== -1 ? settings[idx] : null;\n\t\t\t} ).toArray();\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * DataTables API class - used to control and interface with  one or more\n\t * DataTables enhanced tables.\n\t *\n\t * The API class is heavily based on jQuery, presenting a chainable interface\n\t * that you can use to interact with tables. Each instance of the API class has\n\t * a \"context\" - i.e. the tables that it will operate on. This could be a single\n\t * table, all tables on a page or a sub-set thereof.\n\t *\n\t * Additionally the API is designed to allow you to easily work with the data in\n\t * the tables, retrieving and manipulating it as required. This is done by\n\t * presenting the API class as an array like interface. The contents of the\n\t * array depend upon the actions requested by each method (for example\n\t * `rows().nodes()` will return an array of nodes, while `rows().data()` will\n\t * return an array of objects or arrays depending upon your table's\n\t * configuration). The API object has a number of array like methods (`push`,\n\t * `pop`, `reverse` etc) as well as additional helper methods (`each`, `pluck`,\n\t * `unique` etc) to assist your working with the data held in a table.\n\t *\n\t * Most methods (those which return an Api instance) are chainable, which means\n\t * the return from a method call also has all of the methods available that the\n\t * top level object had. For example, these two calls are equivalent:\n\t *\n\t *     // Not chained\n\t *     api.row.add( {...} );\n\t *     api.draw();\n\t *\n\t *     // Chained\n\t *     api.row.add( {...} ).draw();\n\t *\n\t * @class DataTable.Api\n\t * @param {array|object|string|jQuery} context DataTable identifier. This is\n\t *   used to define which DataTables enhanced tables this API will operate on.\n\t *   Can be one of:\n\t *\n\t *   * `string` - jQuery selector. Any DataTables' matching the given selector\n\t *     with be found and used.\n\t *   * `node` - `TABLE` node which has already been formed into a DataTable.\n\t *   * `jQuery` - A jQuery object of `TABLE` nodes.\n\t *   * `object` - DataTables settings object\n\t * @param {array} [data] Data to initialise the Api instance with.\n\t *\n\t * @example\n\t *   // Direct initialisation during DataTables construction\n\t *   var api = $('#example').DataTable();\n\t *\n\t * @example\n\t *   // Initialisation using a DataTables jQuery object\n\t *   var api = $('#example').dataTable().api();\n\t *\n\t * @example\n\t *   // Initialisation as a constructor\n\t *   var api = new $.fn.DataTable.Api( 'table.dataTable' );\n\t */\n\t_Api = function ( context, data )\n\t{\n\t\tif ( ! (this instanceof _Api) ) {\n\t\t\treturn new _Api( context, data );\n\t\t}\n\t\n\t\tvar settings = [];\n\t\tvar ctxSettings = function ( o ) {\n\t\t\tvar a = _toSettings( o );\n\t\t\tif ( a ) {\n\t\t\t\tsettings.push.apply( settings, a );\n\t\t\t}\n\t\t};\n\t\n\t\tif ( Array.isArray( context ) ) {\n\t\t\tfor ( var i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\t\tctxSettings( context[i] );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tctxSettings( context );\n\t\t}\n\t\n\t\t// Remove duplicates\n\t\tthis.context = _unique( settings );\n\t\n\t\t// Initial data\n\t\tif ( data ) {\n\t\t\t$.merge( this, data );\n\t\t}\n\t\n\t\t// selector\n\t\tthis.selector = {\n\t\t\trows: null,\n\t\t\tcols: null,\n\t\t\topts: null\n\t\t};\n\t\n\t\t_Api.extend( this, this, __apiStruct );\n\t};\n\t\n\tDataTable.Api = _Api;\n\t\n\t// Don't destroy the existing prototype, just extend it. Required for jQuery 2's\n\t// isPlainObject.\n\t$.extend( _Api.prototype, {\n\t\tany: function ()\n\t\t{\n\t\t\treturn this.count() !== 0;\n\t\t},\n\t\n\t\n\t\tconcat:  __arrayProto.concat,\n\t\n\t\n\t\tcontext: [], // array of table settings objects\n\t\n\t\n\t\tcount: function ()\n\t\t{\n\t\t\treturn this.flatten().length;\n\t\t},\n\t\n\t\n\t\teach: function ( fn )\n\t\t{\n\t\t\tfor ( var i=0, ien=this.length ; i<ien; i++ ) {\n\t\t\t\tfn.call( this, this[i], i, this );\n\t\t\t}\n\t\n\t\t\treturn this;\n\t\t},\n\t\n\t\n\t\teq: function ( idx )\n\t\t{\n\t\t\tvar ctx = this.context;\n\t\n\t\t\treturn ctx.length > idx ?\n\t\t\t\tnew _Api( ctx[idx], this[idx] ) :\n\t\t\t\tnull;\n\t\t},\n\t\n\t\n\t\tfilter: function ( fn )\n\t\t{\n\t\t\tvar a = [];\n\t\n\t\t\tif ( __arrayProto.filter ) {\n\t\t\t\ta = __arrayProto.filter.call( this, fn, this );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\t\tif ( fn.call( this, this[i], i, this ) ) {\n\t\t\t\t\t\ta.push( this[i] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn new _Api( this.context, a );\n\t\t},\n\t\n\t\n\t\tflatten: function ()\n\t\t{\n\t\t\tvar a = [];\n\t\t\treturn new _Api( this.context, a.concat.apply( a, this.toArray() ) );\n\t\t},\n\t\n\t\n\t\tjoin:    __arrayProto.join,\n\t\n\t\n\t\tindexOf: __arrayProto.indexOf || function (obj, start)\n\t\t{\n\t\t\tfor ( var i=(start || 0), ien=this.length ; i<ien ; i++ ) {\n\t\t\t\tif ( this[i] === obj ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t},\n\t\n\t\titerator: function ( flatten, type, fn, alwaysNew ) {\n\t\t\tvar\n\t\t\t\ta = [], ret,\n\t\t\t\ti, ien, j, jen,\n\t\t\t\tcontext = this.context,\n\t\t\t\trows, items, item,\n\t\t\t\tselector = this.selector;\n\t\n\t\t\t// Argument shifting\n\t\t\tif ( typeof flatten === 'string' ) {\n\t\t\t\talwaysNew = fn;\n\t\t\t\tfn = type;\n\t\t\t\ttype = flatten;\n\t\t\t\tflatten = false;\n\t\t\t}\n\t\n\t\t\tfor ( i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\t\tvar apiInst = new _Api( context[i] );\n\t\n\t\t\t\tif ( type === 'table' ) {\n\t\t\t\t\tret = fn.call( apiInst, context[i], i );\n\t\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( type === 'columns' || type === 'rows' ) {\n\t\t\t\t\t// this has same length as context - one entry for each table\n\t\t\t\t\tret = fn.call( apiInst, context[i], this[i], i );\n\t\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( type === 'column' || type === 'column-rows' || type === 'row' || type === 'cell' ) {\n\t\t\t\t\t// columns and rows share the same structure.\n\t\t\t\t\t// 'this' is an array of column indexes for each context\n\t\t\t\t\titems = this[i];\n\t\n\t\t\t\t\tif ( type === 'column-rows' ) {\n\t\t\t\t\t\trows = _selector_row_indexes( context[i], selector.opts );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfor ( j=0, jen=items.length ; j<jen ; j++ ) {\n\t\t\t\t\t\titem = items[j];\n\t\n\t\t\t\t\t\tif ( type === 'cell' ) {\n\t\t\t\t\t\t\tret = fn.call( apiInst, context[i], item.row, item.column, i, j );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tret = fn.call( apiInst, context[i], item, i, j, rows );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( a.length || alwaysNew ) {\n\t\t\t\tvar api = new _Api( context, flatten ? a.concat.apply( [], a ) : a );\n\t\t\t\tvar apiSelector = api.selector;\n\t\t\t\tapiSelector.rows = selector.rows;\n\t\t\t\tapiSelector.cols = selector.cols;\n\t\t\t\tapiSelector.opts = selector.opts;\n\t\t\t\treturn api;\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\n\t\n\t\tlastIndexOf: __arrayProto.lastIndexOf || function (obj, start)\n\t\t{\n\t\t\t// Bit cheeky...\n\t\t\treturn this.indexOf.apply( this.toArray.reverse(), arguments );\n\t\t},\n\t\n\t\n\t\tlength:  0,\n\t\n\t\n\t\tmap: function ( fn )\n\t\t{\n\t\t\tvar a = [];\n\t\n\t\t\tif ( __arrayProto.map ) {\n\t\t\t\ta = __arrayProto.map.call( this, fn, this );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\t\ta.push( fn.call( this, this[i], i ) );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn new _Api( this.context, a );\n\t\t},\n\t\n\t\n\t\tpluck: function ( prop )\n\t\t{\n\t\t\tlet fn = DataTable.util.get(prop);\n\t\n\t\t\treturn this.map( function ( el ) {\n\t\t\t\treturn fn(el);\n\t\t\t} );\n\t\t},\n\t\n\t\tpop:     __arrayProto.pop,\n\t\n\t\n\t\tpush:    __arrayProto.push,\n\t\n\t\n\t\t// Does not return an API instance\n\t\treduce: __arrayProto.reduce || function ( fn, init )\n\t\t{\n\t\t\treturn _fnReduce( this, fn, init, 0, this.length, 1 );\n\t\t},\n\t\n\t\n\t\treduceRight: __arrayProto.reduceRight || function ( fn, init )\n\t\t{\n\t\t\treturn _fnReduce( this, fn, init, this.length-1, -1, -1 );\n\t\t},\n\t\n\t\n\t\treverse: __arrayProto.reverse,\n\t\n\t\n\t\t// Object with rows, columns and opts\n\t\tselector: null,\n\t\n\t\n\t\tshift:   __arrayProto.shift,\n\t\n\t\n\t\tslice: function () {\n\t\t\treturn new _Api( this.context, this );\n\t\t},\n\t\n\t\n\t\tsort:    __arrayProto.sort, // ? name - order?\n\t\n\t\n\t\tsplice:  __arrayProto.splice,\n\t\n\t\n\t\ttoArray: function ()\n\t\t{\n\t\t\treturn __arrayProto.slice.call( this );\n\t\t},\n\t\n\t\n\t\tto$: function ()\n\t\t{\n\t\t\treturn $( this );\n\t\t},\n\t\n\t\n\t\ttoJQuery: function ()\n\t\t{\n\t\t\treturn $( this );\n\t\t},\n\t\n\t\n\t\tunique: function ()\n\t\t{\n\t\t\treturn new _Api( this.context, _unique(this) );\n\t\t},\n\t\n\t\n\t\tunshift: __arrayProto.unshift\n\t} );\n\t\n\t\n\t_Api.extend = function ( scope, obj, ext )\n\t{\n\t\t// Only extend API instances and static properties of the API\n\t\tif ( ! ext.length || ! obj || ( ! (obj instanceof _Api) && ! obj.__dt_wrapper ) ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\ti, ien,\n\t\t\tstruct,\n\t\t\tmethodScoping = function ( scope, fn, struc ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar ret = fn.apply( scope, arguments );\n\t\n\t\t\t\t\t// Method extension\n\t\t\t\t\t_Api.extend( ret, ret, struc.methodExt );\n\t\t\t\t\treturn ret;\n\t\t\t\t};\n\t\t\t};\n\t\n\t\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\t\tstruct = ext[i];\n\t\n\t\t\t// Value\n\t\t\tobj[ struct.name ] = struct.type === 'function' ?\n\t\t\t\tmethodScoping( scope, struct.val, struct ) :\n\t\t\t\tstruct.type === 'object' ?\n\t\t\t\t\t{} :\n\t\t\t\t\tstruct.val;\n\t\n\t\t\tobj[ struct.name ].__dt_wrapper = true;\n\t\n\t\t\t// Property extension\n\t\t\t_Api.extend( scope, obj[ struct.name ], struct.propExt );\n\t\t}\n\t};\n\t\n\t\n\t// @todo - Is there need for an augment function?\n\t// _Api.augment = function ( inst, name )\n\t// {\n\t// \t// Find src object in the structure from the name\n\t// \tvar parts = name.split('.');\n\t\n\t// \t_Api.extend( inst, obj );\n\t// };\n\t\n\t\n\t//     [\n\t//       {\n\t//         name:      'data'                -- string   - Property name\n\t//         val:       function () {},       -- function - Api method (or undefined if just an object\n\t//         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n\t//         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n\t//       },\n\t//       {\n\t//         name:     'row'\n\t//         val:       {},\n\t//         methodExt: [ ... ],\n\t//         propExt:   [\n\t//           {\n\t//             name:      'data'\n\t//             val:       function () {},\n\t//             methodExt: [ ... ],\n\t//             propExt:   [ ... ]\n\t//           },\n\t//           ...\n\t//         ]\n\t//       }\n\t//     ]\n\t\n\t_Api.register = _api_register = function ( name, val )\n\t{\n\t\tif ( Array.isArray( name ) ) {\n\t\t\tfor ( var j=0, jen=name.length ; j<jen ; j++ ) {\n\t\t\t\t_Api.register( name[j], val );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\ti, ien,\n\t\t\their = name.split('.'),\n\t\t\tstruct = __apiStruct,\n\t\t\tkey, method;\n\t\n\t\tvar find = function ( src, name ) {\n\t\t\tfor ( var i=0, ien=src.length ; i<ien ; i++ ) {\n\t\t\t\tif ( src[i].name === name ) {\n\t\t\t\t\treturn src[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\n\t\tfor ( i=0, ien=heir.length ; i<ien ; i++ ) {\n\t\t\tmethod = heir[i].indexOf('()') !== -1;\n\t\t\tkey = method ?\n\t\t\t\their[i].replace('()', '') :\n\t\t\t\their[i];\n\t\n\t\t\tvar src = find( struct, key );\n\t\t\tif ( ! src ) {\n\t\t\t\tsrc = {\n\t\t\t\t\tname:      key,\n\t\t\t\t\tval:       {},\n\t\t\t\t\tmethodExt: [],\n\t\t\t\t\tpropExt:   [],\n\t\t\t\t\ttype:      'object'\n\t\t\t\t};\n\t\t\t\tstruct.push( src );\n\t\t\t}\n\t\n\t\t\tif ( i === ien-1 ) {\n\t\t\t\tsrc.val = val;\n\t\t\t\tsrc.type = typeof val === 'function' ?\n\t\t\t\t\t'function' :\n\t\t\t\t\t$.isPlainObject( val ) ?\n\t\t\t\t\t\t'object' :\n\t\t\t\t\t\t'other';\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstruct = method ?\n\t\t\t\t\tsrc.methodExt :\n\t\t\t\t\tsrc.propExt;\n\t\t\t}\n\t\t}\n\t};\n\t\n\t_Api.registerPlural = _api_registerPlural = function ( pluralName, singularName, val ) {\n\t\t_Api.register( pluralName, val );\n\t\n\t\t_Api.register( singularName, function () {\n\t\t\tvar ret = val.apply( this, arguments );\n\t\n\t\t\tif ( ret === this ) {\n\t\t\t\t// Returned item is the API instance that was passed in, return it\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\telse if ( ret instanceof _Api ) {\n\t\t\t\t// New API instance returned, want the value from the first item\n\t\t\t\t// in the returned array for the singular result.\n\t\t\t\treturn ret.length ?\n\t\t\t\t\tArray.isArray( ret[0] ) ?\n\t\t\t\t\t\tnew _Api( ret.context, ret[0] ) : // Array results are 'enhanced'\n\t\t\t\t\t\tret[0] :\n\t\t\t\t\tundefined;\n\t\t\t}\n\t\n\t\t\t// Non-API return - just fire it back\n\t\t\treturn ret;\n\t\t} );\n\t};\n\t\n\t\n\t/**\n\t * Selector for HTML tables. Apply the given selector to the give array of\n\t * DataTables settings objects.\n\t *\n\t * @param {string|integer} [selector] jQuery selector string or integer\n\t * @param  {array} Array of DataTables settings objects to be filtered\n\t * @return {array}\n\t * @ignore\n\t */\n\tvar __table_selector = function ( selector, a )\n\t{\n\t\tif ( Array.isArray(selector) ) {\n\t\t\treturn $.map( selector, function (item) {\n\t\t\t\treturn __table_selector(item, a);\n\t\t\t} );\n\t\t}\n\t\n\t\t// Integer is used to pick out a table by index\n\t\tif ( typeof selector === 'number' ) {\n\t\t\treturn [ a[ selector ] ];\n\t\t}\n\t\n\t\t// Perform a jQuery selector on the table nodes\n\t\tvar nodes = $.map( a, function (el, i) {\n\t\t\treturn el.nTable;\n\t\t} );\n\t\n\t\treturn $(nodes)\n\t\t\t.filter( selector )\n\t\t\t.map( function (i) {\n\t\t\t\t// Need to translate back from the table node to the settings\n\t\t\t\tvar idx = $.inArray( this, nodes );\n\t\t\t\treturn a[ idx ];\n\t\t\t} )\n\t\t\t.toArray();\n\t};\n\t\n\t\n\t\n\t/**\n\t * Context selector for the API's context (i.e. the tables the API instance\n\t * refers to.\n\t *\n\t * @name    DataTable.Api#tables\n\t * @param {string|integer} [selector] Selector to pick which tables the iterator\n\t *   should operate on. If not given, all tables in the current context are\n\t *   used. This can be given as a jQuery selector (for example `':gt(0)'`) to\n\t *   select multiple tables or as an integer to select a single table.\n\t * @returns {DataTable.Api} Returns a new API instance if a selector is given.\n\t */\n\t_api_register( 'tables()', function ( selector ) {\n\t\t// A new instance is created if there was a selector specified\n\t\treturn selector !== undefined && selector !== null ?\n\t\t\tnew _Api( __table_selector( selector, this.context ) ) :\n\t\t\tthis;\n\t} );\n\t\n\t\n\t_api_register( 'table()', function ( selector ) {\n\t\tvar tables = this.tables( selector );\n\t\tvar ctx = tables.context;\n\t\n\t\t// Truncate to the first matched table\n\t\treturn ctx.length ?\n\t\t\tnew _Api( ctx[0] ) :\n\t\t\ttables;\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().nodes()', 'table().node()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTable;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().body()', 'table().body()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTBody;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().header()', 'table().header()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTHead;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().footer()', 'table().footer()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTFoot;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().containers()', 'table().container()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTableWrapper;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Redraw the tables in the current context.\n\t */\n\t_api_register( 'draw()', function ( paging ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( paging === 'page' ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ( typeof paging === 'string' ) {\n\t\t\t\t\tpaging = paging === 'full-hold' ?\n\t\t\t\t\t\tfalse :\n\t\t\t\t\t\ttrue;\n\t\t\t\t}\n\t\n\t\t\t\t_fnReDraw( settings, paging===false );\n\t\t\t}\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Get the current page index.\n\t *\n\t * @return {integer} Current page index (zero based)\n\t *//**\n\t * Set the current page.\n\t *\n\t * Note that if you attempt to show a page which does not exist, DataTables will\n\t * not throw an error, but rather reset the paging.\n\t *\n\t * @param {integer|string} action The paging action to take. This can be one of:\n\t *  * `integer` - The page index to jump to\n\t *  * `string` - An action to take:\n\t *    * `first` - Jump to first page.\n\t *    * `next` - Jump to the next page\n\t *    * `previous` - Jump to previous page\n\t *    * `last` - Jump to the last page.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'page()', function ( action ) {\n\t\tif ( action === undefined ) {\n\t\t\treturn this.page.info().page; // not an expensive call\n\t\t}\n\t\n\t\t// else, have an action to take on all tables\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnPageChange( settings, action );\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Paging information for the first table in the current context.\n\t *\n\t * If you require paging information for another table, use the `table()` method\n\t * with a suitable selector.\n\t *\n\t * @return {object} Object with the following properties set:\n\t *  * `page` - Current page index (zero based - i.e. the first page is `0`)\n\t *  * `pages` - Total number of pages\n\t *  * `start` - Display index for the first record shown on the current page\n\t *  * `end` - Display index for the last record shown on the current page\n\t *  * `length` - Display length (number of records). Note that generally `start\n\t *    + length = end`, but this is not always true, for example if there are\n\t *    only 2 records to show on the final page, with a length of 10.\n\t *  * `recordsTotal` - Full data set length\n\t *  * `recordsDisplay` - Data set length once the current filtering criterion\n\t *    are applied.\n\t */\n\t_api_register( 'page.info()', function ( action ) {\n\t\tif ( this.context.length === 0 ) {\n\t\t\treturn undefined;\n\t\t}\n\t\n\t\tvar\n\t\t\tsettings   = this.context[0],\n\t\t\tstart      = settings._iDisplayStart,\n\t\t\tlen        = settings.oFeatures.bPaginate ? settings._iDisplayLength : -1,\n\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\tall        = len === -1;\n\t\n\t\treturn {\n\t\t\t\"page\":           all ? 0 : Math.floor( start / len ),\n\t\t\t\"pages\":          all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\"start\":          start,\n\t\t\t\"end\":            settings.fnDisplayEnd(),\n\t\t\t\"length\":         len,\n\t\t\t\"recordsTotal\":   settings.fnRecordsTotal(),\n\t\t\t\"recordsDisplay\": visRecords,\n\t\t\t\"serverSide\":     _fnDataSource( settings ) === 'ssp'\n\t\t};\n\t} );\n\t\n\t\n\t/**\n\t * Get the current page length.\n\t *\n\t * @return {integer} Current page length. Note `-1` indicates that all records\n\t *   are to be shown.\n\t *//**\n\t * Set the current page length.\n\t *\n\t * @param {integer} Page length to set. Use `-1` to show all records.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'page.len()', function ( len ) {\n\t\t// Note that we can't call this function 'length()' because `length`\n\t\t// is a Javascript property of functions which defines how many arguments\n\t\t// the function expects.\n\t\tif ( len === undefined ) {\n\t\t\treturn this.context.length !== 0 ?\n\t\t\t\tthis.context[0]._iDisplayLength :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// else, set the page length\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnLengthChange( settings, len );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\tvar __reload = function ( settings, holdPosition, callback ) {\n\t\t// Use the draw event to trigger a callback\n\t\tif ( callback ) {\n\t\t\tvar api = new _Api( settings );\n\t\n\t\t\tapi.one( 'draw', function () {\n\t\t\t\tcallback( api.ajax.json() );\n\t\t\t} );\n\t\t}\n\t\n\t\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t\t_fnReDraw( settings, holdPosition );\n\t\t}\n\t\telse {\n\t\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t\t// Cancel an existing request\n\t\t\tvar xhr = settings.jqXHR;\n\t\t\tif ( xhr && xhr.readyState !== 4 ) {\n\t\t\t\txhr.abort();\n\t\t\t}\n\t\n\t\t\t// Trigger xhr\n\t\t\t_fnBuildAjax( settings, [], function( json ) {\n\t\t\t\t_fnClearTable( settings );\n\t\n\t\t\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\t_fnAddData( settings, data[i] );\n\t\t\t\t}\n\t\n\t\t\t\t_fnReDraw( settings, holdPosition );\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t} );\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Get the JSON response from the last Ajax request that DataTables made to the\n\t * server. Note that this returns the JSON from the first table in the current\n\t * context.\n\t *\n\t * @return {object} JSON received from the server.\n\t */\n\t_api_register( 'ajax.json()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length > 0 ) {\n\t\t\treturn ctx[0].json;\n\t\t}\n\t\n\t\t// else return undefined;\n\t} );\n\t\n\t\n\t/**\n\t * Get the data submitted in the last Ajax request\n\t */\n\t_api_register( 'ajax.params()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length > 0 ) {\n\t\t\treturn ctx[0].oAjaxData;\n\t\t}\n\t\n\t\t// else return undefined;\n\t} );\n\t\n\t\n\t/**\n\t * Reload tables from the Ajax data source. Note that this function will\n\t * automatically re-draw the table when the remote data has been loaded.\n\t *\n\t * @param {boolean} [reset=true] Reset (default) or hold the current paging\n\t *   position. A full re-sort and re-filter is performed when this method is\n\t *   called, which is why the pagination reset is the default action.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.reload()', function ( callback, resetPaging ) {\n\t\treturn this.iterator( 'table', function (settings) {\n\t\t\t__reload( settings, resetPaging===false, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Get the current Ajax URL. Note that this returns the URL from the first\n\t * table in the current context.\n\t *\n\t * @return {string} Current Ajax source URL\n\t *//**\n\t * Set the Ajax URL. Note that this will set the URL for all tables in the\n\t * current context.\n\t *\n\t * @param {string} url URL to set.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.url()', function ( url ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( url === undefined ) {\n\t\t\t// get\n\t\t\tif ( ctx.length === 0 ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tctx = ctx[0];\n\t\n\t\t\treturn ctx.ajax ?\n\t\t\t\t$.isPlainObject( ctx.ajax ) ?\n\t\t\t\t\tctx.ajax.url :\n\t\t\t\t\tctx.ajax :\n\t\t\t\tctx.sAjaxSource;\n\t\t}\n\t\n\t\t// set\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( $.isPlainObject( settings.ajax ) ) {\n\t\t\t\tsettings.ajax.url = url;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsettings.ajax = url;\n\t\t\t}\n\t\t\t// No need to consider sAjaxSource here since DataTables gives priority\n\t\t\t// to `ajax` over `sAjaxSource`. So setting `ajax` here, renders any\n\t\t\t// value of `sAjaxSource` redundant.\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Load data from the newly set Ajax URL. Note that this method is only\n\t * available when `ajax.url()` is used to set a URL. Additionally, this method\n\t * has the same effect as calling `ajax.reload()` but is provided for\n\t * convenience when setting a new URL. Like `ajax.reload()` it will\n\t * automatically redraw the table once the remote data has been loaded.\n\t *\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.url().load()', function ( callback, resetPaging ) {\n\t\t// Same as a reload, but makes sense to present it for easy access after a\n\t\t// url change\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\t__reload( ctx, resetPaging===false, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t\n\tvar _selector_run = function ( type, selector, selectFn, settings, opts )\n\t{\n\t\tvar\n\t\t\tout = [], res,\n\t\t\ta, i, ien, j, jen,\n\t\t\tselectorType = typeof selector;\n\t\n\t\t// Can't just check for isArray here, as an API or jQuery instance might be\n\t\t// given with their array like look\n\t\tif ( ! selector || selectorType === 'string' || selectorType === 'function' || selector.length === undefined ) {\n\t\t\tselector = [ selector ];\n\t\t}\n\t\n\t\tfor ( i=0, ien=selector.length ; i<ien ; i++ ) {\n\t\t\t// Only split on simple strings - complex expressions will be jQuery selectors\n\t\t\ta = selector[i] && selector[i].split && ! selector[i].match(/[\\[\\(:]/) ?\n\t\t\t\tselector[i].split(',') :\n\t\t\t\t[ selector[i] ];\n\t\n\t\t\tfor ( j=0, jen=a.length ; j<jen ; j++ ) {\n\t\t\t\tres = selectFn( typeof a[j] === 'string' ? (a[j]).trim() : a[j] );\n\t\n\t\t\t\tif ( res && res.length ) {\n\t\t\t\t\tout = out.concat( res );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// selector extensions\n\t\tvar ext = _ext.selector[ type ];\n\t\tif ( ext.length ) {\n\t\t\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\t\t\tout = ext[i]( settings, opts, out );\n\t\t\t}\n\t\t}\n\t\n\t\treturn _unique( out );\n\t};\n\t\n\t\n\tvar _selector_opts = function ( opts )\n\t{\n\t\tif ( ! opts ) {\n\t\t\topts = {};\n\t\t}\n\t\n\t\t// Backwards compatibility for 1.9- which used the terminology filter rather\n\t\t// than search\n\t\tif ( opts.filter && opts.search === undefined ) {\n\t\t\topts.search = opts.filter;\n\t\t}\n\t\n\t\treturn $.extend( {\n\t\t\tsearch: 'none',\n\t\t\torder: 'current',\n\t\t\tpage: 'all'\n\t\t}, opts );\n\t};\n\t\n\t\n\tvar _selector_first = function ( inst )\n\t{\n\t\t// Reduce the API instance to the first item found\n\t\tfor ( var i=0, ien=inst.length ; i<ien ; i++ ) {\n\t\t\tif ( inst[i].length > 0 ) {\n\t\t\t\t// Assign the first element to the first item in the instance\n\t\t\t\t// and truncate the instance and context\n\t\t\t\tinst[0] = inst[i];\n\t\t\t\tinst[0].length = 1;\n\t\t\t\tinst.length = 1;\n\t\t\t\tinst.context = [ inst.context[i] ];\n\t\n\t\t\t\treturn inst;\n\t\t\t}\n\t\t}\n\t\n\t\t// Not found - return an empty instance\n\t\tinst.length = 0;\n\t\treturn inst;\n\t};\n\t\n\t\n\tvar _selector_row_indexes = function ( settings, opts )\n\t{\n\t\tvar\n\t\t\ti, ien, tmp, a=[],\n\t\t\tdisplayFiltered = settings.aiDisplay,\n\t\t\tdisplayMaster = settings.aiDisplayMaster;\n\t\n\t\tvar\n\t\t\tsearch = opts.search,  // none, applied, removed\n\t\t\torder  = opts.order,   // applied, current, index (original - compatibility with 1.9)\n\t\t\tpage   = opts.page;    // all, current\n\t\n\t\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t\t// In server-side processing mode, most options are irrelevant since\n\t\t\t// rows not shown don't exist and the index order is the applied order\n\t\t\t// Removed is a special case - for consistency just return an empty\n\t\t\t// array\n\t\t\treturn search === 'removed' ?\n\t\t\t\t[] :\n\t\t\t\t_range( 0, displayMaster.length );\n\t\t}\n\t\telse if ( page == 'current' ) {\n\t\t\t// Current page implies that order=current and filter=applied, since it is\n\t\t\t// fairly senseless otherwise, regardless of what order and search actually\n\t\t\t// are\n\t\t\tfor ( i=settings._iDisplayStart, ien=settings.fnDisplayEnd() ; i<ien ; i++ ) {\n\t\t\t\ta.push( displayFiltered[i] );\n\t\t\t}\n\t\t}\n\t\telse if ( order == 'current' || order == 'applied' ) {\n\t\t\tif ( search == 'none') {\n\t\t\t\ta = displayMaster.slice();\n\t\t\t}\n\t\t\telse if ( search == 'applied' ) {\n\t\t\t\ta = displayFiltered.slice();\n\t\t\t}\n\t\t\telse if ( search == 'removed' ) {\n\t\t\t\t// O(n+m) solution by creating a hash map\n\t\t\t\tvar displayFilteredMap = {};\n\t\n\t\t\t\tfor ( var i=0, ien=displayFiltered.length ; i<ien ; i++ ) {\n\t\t\t\t\tdisplayFilteredMap[displayFiltered[i]] = null;\n\t\t\t\t}\n\t\n\t\t\t\ta = $.map( displayMaster, function (el) {\n\t\t\t\t\treturn ! displayFilteredMap.hasOwnProperty(el) ?\n\t\t\t\t\t\tel :\n\t\t\t\t\t\tnull;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\telse if ( order == 'index' || order == 'original' ) {\n\t\t\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\t\tif ( search == 'none' ) {\n\t\t\t\t\ta.push( i );\n\t\t\t\t}\n\t\t\t\telse { // applied | removed\n\t\t\t\t\ttmp = $.inArray( i, displayFiltered );\n\t\n\t\t\t\t\tif ((tmp === -1 && search == 'removed') ||\n\t\t\t\t\t\t(tmp >= 0   && search == 'applied') )\n\t\t\t\t\t{\n\t\t\t\t\t\ta.push( i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn a;\n\t};\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Rows\n\t *\n\t * {}          - no selector - use all available rows\n\t * {integer}   - row aoData index\n\t * {node}      - TR node\n\t * {string}    - jQuery selector to apply to the TR elements\n\t * {array}     - jQuery array of nodes, or simply an array of TR nodes\n\t *\n\t */\n\tvar __row_selector = function ( settings, selector, opts )\n\t{\n\t\tvar rows;\n\t\tvar run = function ( sel ) {\n\t\t\tvar selInt = _intVal( sel );\n\t\t\tvar i, ien;\n\t\t\tvar aoData = settings.aoData;\n\t\n\t\t\t// Short cut - selector is a number and no options provided (default is\n\t\t\t// all records, so no need to check if the index is in there, since it\n\t\t\t// must be - dev error if the index doesn't exist).\n\t\t\tif ( selInt !== null && ! opts ) {\n\t\t\t\treturn [ selInt ];\n\t\t\t}\n\t\n\t\t\tif ( ! rows ) {\n\t\t\t\trows = _selector_row_indexes( settings, opts );\n\t\t\t}\n\t\n\t\t\tif ( selInt !== null && $.inArray( selInt, rows ) !== -1 ) {\n\t\t\t\t// Selector - integer\n\t\t\t\treturn [ selInt ];\n\t\t\t}\n\t\t\telse if ( sel === null || sel === undefined || sel === '' ) {\n\t\t\t\t// Selector - none\n\t\t\t\treturn rows;\n\t\t\t}\n\t\n\t\t\t// Selector - function\n\t\t\tif ( typeof sel === 'function' ) {\n\t\t\t\treturn $.map( rows, function (idx) {\n\t\t\t\t\tvar row = aoData[ idx ];\n\t\t\t\t\treturn sel( idx, row._aData, row.nTr ) ? idx : null;\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t\t// Selector - node\n\t\t\tif ( sel.nodeName ) {\n\t\t\t\tvar rowIdx = sel._DT_RowIndex;  // Property added by DT for fast lookup\n\t\t\t\tvar cellIdx = sel._DT_CellIndex;\n\t\n\t\t\t\tif ( rowIdx !== undefined ) {\n\t\t\t\t\t// Make sure that the row is actually still present in the table\n\t\t\t\t\treturn aoData[ rowIdx ] && aoData[ rowIdx ].nTr === sel ?\n\t\t\t\t\t\t[ rowIdx ] :\n\t\t\t\t\t\t[];\n\t\t\t\t}\n\t\t\t\telse if ( cellIdx ) {\n\t\t\t\t\treturn aoData[ cellIdx.row ] && aoData[ cellIdx.row ].nTr === sel.parentNode ?\n\t\t\t\t\t\t[ cellIdx.row ] :\n\t\t\t\t\t\t[];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvar host = $(sel).closest('*[data-dt-row]');\n\t\t\t\t\treturn host.length ?\n\t\t\t\t\t\t[ host.data('dt-row') ] :\n\t\t\t\t\t\t[];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// ID selector. Want to always be able to select rows by id, regardless\n\t\t\t// of if the tr element has been created or not, so can't rely upon\n\t\t\t// jQuery here - hence a custom implementation. This does not match\n\t\t\t// Sizzle's fast selector or HTML4 - in HTML5 the ID can be anything,\n\t\t\t// but to select it using a CSS selector engine (like Sizzle or\n\t\t\t// querySelect) it would need to need to be escaped for some characters.\n\t\t\t// DataTables simplifies this for row selectors since you can select\n\t\t\t// only a row. A # indicates an id any anything that follows is the id -\n\t\t\t// unescaped.\n\t\t\tif ( typeof sel === 'string' && sel.charAt(0) === '#' ) {\n\t\t\t\t// get row index from id\n\t\t\t\tvar rowObj = settings.aIds[ sel.replace( /^#/, '' ) ];\n\t\t\t\tif ( rowObj !== undefined ) {\n\t\t\t\t\treturn [ rowObj.idx ];\n\t\t\t\t}\n\t\n\t\t\t\t// need to fall through to jQuery in case there is DOM id that\n\t\t\t\t// matches\n\t\t\t}\n\t\t\t\n\t\t\t// Get nodes in the order from the `rows` array with null values removed\n\t\t\tvar nodes = _removeEmpty(\n\t\t\t\t_pluck_order( settings.aoData, rows, 'nTr' )\n\t\t\t);\n\t\n\t\t\t// Selector - jQuery selector string, array of nodes or jQuery object/\n\t\t\t// As jQuery's .filter() allows jQuery objects to be passed in filter,\n\t\t\t// it also allows arrays, so this will cope with all three options\n\t\t\treturn $(nodes)\n\t\t\t\t.filter( sel )\n\t\t\t\t.map( function () {\n\t\t\t\t\treturn this._DT_RowIndex;\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\t};\n\t\n\t\treturn _selector_run( 'row', selector, run, settings, opts );\n\t};\n\t\n\t\n\t_api_register( 'rows()', function ( selector, opts ) {\n\t\t// argument shifting\n\t\tif ( selector === undefined ) {\n\t\t\tselector = '';\n\t\t}\n\t\telse if ( $.isPlainObject( selector ) ) {\n\t\t\topts = selector;\n\t\t\tselector = '';\n\t\t}\n\t\n\t\topts = _selector_opts( opts );\n\t\n\t\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\t\treturn __row_selector( settings, selector, opts );\n\t\t}, 1 );\n\t\n\t\t// Want argument shifting here and in __row_selector?\n\t\tinst.selector.rows = selector;\n\t\tinst.selector.opts = opts;\n\t\n\t\treturn inst;\n\t} );\n\t\n\t_api_register( 'rows().nodes()', function () {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\treturn settings.aoData[ row ].nTr || undefined;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'rows().data()', function () {\n\t\treturn this.iterator( true, 'rows', function ( settings, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows, '_aData' );\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().cache()', 'row().cache()', function ( type ) {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\tvar r = settings.aoData[ row ];\n\t\t\treturn type === 'search' ? r._aFilterData : r._aSortData;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().invalidate()', 'row().invalidate()', function ( src ) {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\t_fnInvalidate( settings, row, src );\n\t\t} );\n\t} );\n\t\n\t_api_registerPlural( 'rows().indexes()', 'row().index()', function () {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\treturn row;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().ids()', 'row().id()', function ( hash ) {\n\t\tvar a = [];\n\t\tvar context = this.context;\n\t\n\t\t// `iterator` will drop undefined values, but in this case we want them\n\t\tfor ( var i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\tfor ( var j=0, jen=this[i].length ; j<jen ; j++ ) {\n\t\t\t\tvar id = context[i].rowIdFn( context[i].aoData[ this[i][j] ]._aData );\n\t\t\t\ta.push( (hash === true ? '#' : '' )+ id );\n\t\t\t}\n\t\t}\n\t\n\t\treturn new _Api( context, a );\n\t} );\n\t\n\t_api_registerPlural( 'rows().remove()', 'row().remove()', function () {\n\t\tvar that = this;\n\t\n\t\tthis.iterator( 'row', function ( settings, row, thatIdx ) {\n\t\t\tvar data = settings.aoData;\n\t\t\tvar rowData = data[ row ];\n\t\t\tvar i, ien, j, jen;\n\t\t\tvar loopRow, loopCells;\n\t\n\t\t\tdata.splice( row, 1 );\n\t\n\t\t\t// Update the cached indexes\n\t\t\tfor ( i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\tloopRow = data[i];\n\t\t\t\tloopCells = loopRow.anCells;\n\t\n\t\t\t\t// Rows\n\t\t\t\tif ( loopRow.nTr !== null ) {\n\t\t\t\t\tloopRow.nTr._DT_RowIndex = i;\n\t\t\t\t}\n\t\n\t\t\t\t// Cells\n\t\t\t\tif ( loopCells !== null ) {\n\t\t\t\t\tfor ( j=0, jen=loopCells.length ; j<jen ; j++ ) {\n\t\t\t\t\t\tloopCells[j]._DT_CellIndex.row = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Delete from the display arrays\n\t\t\t_fnDeleteIndex( settings.aiDisplayMaster, row );\n\t\t\t_fnDeleteIndex( settings.aiDisplay, row );\n\t\t\t_fnDeleteIndex( that[ thatIdx ], row, false ); // maintain local indexes\n\t\n\t\t\t// For server-side processing tables - subtract the deleted row from the count\n\t\t\tif ( settings._iRecordsDisplay > 0 ) {\n\t\t\t\tsettings._iRecordsDisplay--;\n\t\t\t}\n\t\n\t\t\t// Check for an 'overflow' they case for displaying the table\n\t\t\t_fnLengthOverflow( settings );\n\t\n\t\t\t// Remove the row's ID reference if there is one\n\t\t\tvar id = settings.rowIdFn( rowData._aData );\n\t\t\tif ( id !== undefined ) {\n\t\t\t\tdelete settings.aIds[ id ];\n\t\t\t}\n\t\t} );\n\t\n\t\tthis.iterator( 'table', function ( settings ) {\n\t\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\t\tsettings.aoData[i].idx = i;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( 'rows.add()', function ( rows ) {\n\t\tvar newRows = this.iterator( 'table', function ( settings ) {\n\t\t\t\tvar row, i, ien;\n\t\t\t\tvar out = [];\n\t\n\t\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = rows[i];\n\t\n\t\t\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\t\t\tout.push( _fnAddTr( settings, row )[0] );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tout.push( _fnAddData( settings, row ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn out;\n\t\t\t}, 1 );\n\t\n\t\t// Return an Api.rows() extended instance, so rows().nodes() etc can be used\n\t\tvar modRows = this.rows( -1 );\n\t\tmodRows.pop();\n\t\t$.merge( modRows, newRows );\n\t\n\t\treturn modRows;\n\t} );\n\t\n\t\n\t\n\t\n\t\n\t/**\n\t *\n\t */\n\t_api_register( 'row()', function ( selector, opts ) {\n\t\treturn _selector_first( this.rows( selector, opts ) );\n\t} );\n\t\n\t\n\t_api_register( 'row().data()', function ( data ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// Get\n\t\t\treturn ctx.length && this.length ?\n\t\t\t\tctx[0].aoData[ this[0] ]._aData :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// Set\n\t\tvar row = ctx[0].aoData[ this[0] ];\n\t\trow._aData = data;\n\t\n\t\t// If the DOM has an id, and the data source is an array\n\t\tif ( Array.isArray( data ) && row.nTr && row.nTr.id ) {\n\t\t\t_fnSetObjectDataFn( ctx[0].rowId )( data, row.nTr.id );\n\t\t}\n\t\n\t\t// Automatically invalidate\n\t\t_fnInvalidate( ctx[0], this[0], 'data' );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( 'row().node()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\treturn ctx.length && this.length ?\n\t\t\tctx[0].aoData[ this[0] ].nTr || null :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'row.add()', function ( row ) {\n\t\t// Allow a jQuery object to be passed in - only a single row is added from\n\t\t// it though - the first element in the set\n\t\tif ( row instanceof $ && row.length ) {\n\t\t\trow = row[0];\n\t\t}\n\t\n\t\tvar rows = this.iterator( 'table', function ( settings ) {\n\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\treturn _fnAddTr( settings, row )[0];\n\t\t\t}\n\t\t\treturn _fnAddData( settings, row );\n\t\t} );\n\t\n\t\t// Return an Api.rows() extended instance, with the newly added row selected\n\t\treturn this.row( rows[0] );\n\t} );\n\t\n\t\n\t$(document).on('plugin-init.dt', function (e, context) {\n\t\tvar api = new _Api( context );\n\t\n\t\tapi.on( 'stateSaveParams', function ( e, settings, d ) {\n\t\t\t// This could be more compact with the API, but it is a lot faster as a simple\n\t\t\t// internal loop\n\t\t\tvar idFn = settings.rowIdFn;\n\t\t\tvar data = settings.aoData;\n\t\t\tvar ids = [];\n\t\n\t\t\tfor (var i=0 ; i<data.length ; i++) {\n\t\t\t\tif (data[i]._detailsShow) {\n\t\t\t\t\tids.push( '#' + idFn(data[i]._aData) );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\td.childRows = ids;\n\t\t})\n\t\n\t\tvar loaded = api.state.loaded();\n\t\n\t\tif ( loaded && loaded.childRows ) {\n\t\t\tapi\n\t\t\t\t.rows( $.map(loaded.childRows, function (id){\n\t\t\t\t\treturn id.replace(/:/g, '\\\\:')\n\t\t\t\t}) )\n\t\t\t\t.every( function () {\n\t\t\t\t\t_fnCallbackFire( context, null, 'requestChild', [ this ] )\n\t\t\t\t});\n\t\t}\n\t});\n\t\n\tvar __details_add = function ( ctx, row, data, klass )\n\t{\n\t\t// Convert to array of TR elements\n\t\tvar rows = [];\n\t\tvar addRow = function ( r, k ) {\n\t\t\t// Recursion to allow for arrays of jQuery objects\n\t\t\tif ( Array.isArray( r ) || r instanceof $ ) {\n\t\t\t\tfor ( var i=0, ien=r.length ; i<ien ; i++ ) {\n\t\t\t\t\taddRow( r[i], k );\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// If we get a TR element, then just add it directly - up to the dev\n\t\t\t// to add the correct number of columns etc\n\t\t\tif ( r.nodeName && r.nodeName.toLowerCase() === 'tr' ) {\n\t\t\t\trows.push( r );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Otherwise create a row with a wrapper\n\t\t\t\tvar created = $('<tr><td></td></tr>').addClass( k );\n\t\t\t\t$('td', created)\n\t\t\t\t\t.addClass( k )\n\t\t\t\t\t.html( r )\n\t\t\t\t\t[0].colSpan = _fnVisbleColumns( ctx );\n\t\n\t\t\t\trows.push( created[0] );\n\t\t\t}\n\t\t};\n\t\n\t\taddRow( data, klass );\n\t\n\t\tif ( row._details ) {\n\t\t\trow._details.detach();\n\t\t}\n\t\n\t\trow._details = $(rows);\n\t\n\t\t// If the children were already shown, that state should be retained\n\t\tif ( row._detailsShow ) {\n\t\t\trow._details.insertAfter( row.nTr );\n\t\t}\n\t};\n\t\n\t\n\t// Make state saving of child row details async to allow them to be batch processed\n\tvar __details_state = DataTable.util.throttle(\n\t\tfunction (ctx) {\n\t\t\t_fnSaveState( ctx[0] )\n\t\t},\n\t\t500\n\t);\n\t\n\t\n\tvar __details_remove = function ( api, idx )\n\t{\n\t\tvar ctx = api.context;\n\t\n\t\tif ( ctx.length ) {\n\t\t\tvar row = ctx[0].aoData[ idx !== undefined ? idx : api[0] ];\n\t\n\t\t\tif ( row && row._details ) {\n\t\t\t\trow._details.remove();\n\t\n\t\t\t\trow._detailsShow = undefined;\n\t\t\t\trow._details = undefined;\n\t\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t\t__details_state( ctx );\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\tvar __details_display = function ( api, show ) {\n\t\tvar ctx = api.context;\n\t\n\t\tif ( ctx.length && api.length ) {\n\t\t\tvar row = ctx[0].aoData[ api[0] ];\n\t\n\t\t\tif ( row._details ) {\n\t\t\t\trow._detailsShow = show;\n\t\n\t\t\t\tif ( show ) {\n\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t\t$( row.nTr ).addClass( 'dt-hasChild' );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trow._details.detach();\n\t\t\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t\t}\n\t\n\t\t\t\t_fnCallbackFire( ctx[0], null, 'childRow', [ show, api.row( api[0] ) ] )\n\t\n\t\t\t\t__details_events( ctx[0] );\n\t\t\t\t__details_state( ctx );\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\tvar __details_events = function ( settings )\n\t{\n\t\tvar api = new _Api( settings );\n\t\tvar namespace = '.dt.DT_details';\n\t\tvar drawEvent = 'draw'+namespace;\n\t\tvar colvisEvent = 'column-sizing'+namespace;\n\t\tvar destroyEvent = 'destroy'+namespace;\n\t\tvar data = settings.aoData;\n\t\n\t\tapi.off( drawEvent +' '+ colvisEvent +' '+ destroyEvent );\n\t\n\t\tif ( _pluck( data, '_details' ).length > 0 ) {\n\t\t\t// On each draw, insert the required elements into the document\n\t\t\tapi.on( drawEvent, function ( e, ctx ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tapi.rows( {page:'current'} ).eq(0).each( function (idx) {\n\t\t\t\t\t// Internal data grab\n\t\t\t\t\tvar row = data[ idx ];\n\t\n\t\t\t\t\tif ( row._detailsShow ) {\n\t\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\n\t\t\t// Column visibility change - update the colspan\n\t\t\tapi.on( colvisEvent, function ( e, ctx, idx, vis ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\t// Update the colspan for the details rows (note, only if it already has\n\t\t\t\t// a colspan)\n\t\t\t\tvar row, visible = _fnVisbleColumns( ctx );\n\t\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = data[i];\n\t\n\t\t\t\t\tif ( row._details ) {\n\t\t\t\t\t\trow._details.children('td[colspan]').attr('colspan', visible );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\t// Table destroyed - nuke any child rows\n\t\t\tapi.on( destroyEvent, function ( e, ctx ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\tif ( data[i]._details ) {\n\t\t\t\t\t\t__details_remove( api, i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t};\n\t\n\t// Strings for the method names to help minification\n\tvar _emp = '';\n\tvar _child_obj = _emp+'row().child';\n\tvar _child_mth = _child_obj+'()';\n\t\n\t// data can be:\n\t//  tr\n\t//  string\n\t//  jQuery or array of any of the above\n\t_api_register( _child_mth, function ( data, klass ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length && this.length ?\n\t\t\t\tctx[0].aoData[ this[0] ]._details :\n\t\t\t\tundefined;\n\t\t}\n\t\telse if ( data === true ) {\n\t\t\t// show\n\t\t\tthis.child.show();\n\t\t}\n\t\telse if ( data === false ) {\n\t\t\t// remove\n\t\t\t__details_remove( this );\n\t\t}\n\t\telse if ( ctx.length && this.length ) {\n\t\t\t// set\n\t\t\t__details_add( ctx[0], ctx[0].aoData[ this[0] ], data, klass );\n\t\t}\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.show()',\n\t\t_child_mth+'.show()' // only when `child()` was called with parameters (without\n\t], function ( show ) {   // it returns an object and this method is not executed)\n\t\t__details_display( this, true );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.hide()',\n\t\t_child_mth+'.hide()' // only when `child()` was called with parameters (without\n\t], function () {         // it returns an object and this method is not executed)\n\t\t__details_display( this, false );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.remove()',\n\t\t_child_mth+'.remove()' // only when `child()` was called with parameters (without\n\t], function () {           // it returns an object and this method is not executed)\n\t\t__details_remove( this );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( _child_obj+'.isShown()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length && this.length ) {\n\t\t\t// _detailsShown as false or undefined will fall through to return false\n\t\t\treturn ctx[0].aoData[ this[0] ]._detailsShow || false;\n\t\t}\n\t\treturn false;\n\t} );\n\t\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Columns\n\t *\n\t * {integer}           - column index (>=0 count from left, <0 count from right)\n\t * \"{integer}:visIdx\"  - visible column index (i.e. translate to column index)  (>=0 count from left, <0 count from right)\n\t * \"{integer}:visible\" - alias for {integer}:visIdx  (>=0 count from left, <0 count from right)\n\t * \"{string}:name\"     - column name\n\t * \"{string}\"          - jQuery selector on column header nodes\n\t *\n\t */\n\t\n\t// can be an array of these items, comma separated list, or an array of comma\n\t// separated lists\n\t\n\tvar __re_column_selector = /^([^:]+):(name|visIdx|visible)$/;\n\t\n\t\n\t// r1 and r2 are redundant - but it means that the parameters match for the\n\t// iterator callback in columns().data()\n\tvar __columnData = function ( settings, column, r1, r2, rows ) {\n\t\tvar a = [];\n\t\tfor ( var row=0, ien=rows.length ; row<ien ; row++ ) {\n\t\t\ta.push( _fnGetCellData( settings, rows[row], column ) );\n\t\t}\n\t\treturn a;\n\t};\n\t\n\t\n\tvar __column_selector = function ( settings, selector, opts )\n\t{\n\t\tvar\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tnames = _pluck( columns, 'sName' ),\n\t\t\tnodes = _pluck( columns, 'nTh' );\n\t\n\t\tvar run = function ( s ) {\n\t\t\tvar selInt = _intVal( s );\n\t\n\t\t\t// Selector - all\n\t\t\tif ( s === '' ) {\n\t\t\t\treturn _range( columns.length );\n\t\t\t}\n\t\n\t\t\t// Selector - index\n\t\t\tif ( selInt !== null ) {\n\t\t\t\treturn [ selInt >= 0 ?\n\t\t\t\t\tselInt : // Count from left\n\t\t\t\t\tcolumns.length + selInt // Count from right (+ because its a negative value)\n\t\t\t\t];\n\t\t\t}\n\t\n\t\t\t// Selector = function\n\t\t\tif ( typeof s === 'function' ) {\n\t\t\t\tvar rows = _selector_row_indexes( settings, opts );\n\t\n\t\t\t\treturn $.map( columns, function (col, idx) {\n\t\t\t\t\treturn s(\n\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t__columnData( settings, idx, 0, 0, rows ),\n\t\t\t\t\t\t\tnodes[ idx ]\n\t\t\t\t\t\t) ? idx : null;\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t\t// jQuery or string selector\n\t\t\tvar match = typeof s === 'string' ?\n\t\t\t\ts.match( __re_column_selector ) :\n\t\t\t\t'';\n\t\n\t\t\tif ( match ) {\n\t\t\t\tswitch( match[2] ) {\n\t\t\t\t\tcase 'visIdx':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\t\tvar idx = parseInt( match[1], 10 );\n\t\t\t\t\t\t// Visible index given, convert to column index\n\t\t\t\t\t\tif ( idx < 0 ) {\n\t\t\t\t\t\t\t// Counting from the right\n\t\t\t\t\t\t\tvar visColumns = $.map( columns, function (col,i) {\n\t\t\t\t\t\t\t\treturn col.bVisible ? i : null;\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\treturn [ visColumns[ visColumns.length + idx ] ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Counting from the left\n\t\t\t\t\t\treturn [ _fnVisibleToColumnIndex( settings, idx ) ];\n\t\n\t\t\t\t\tcase 'name':\n\t\t\t\t\t\t// match by name. `names` is column index complete and in order\n\t\t\t\t\t\treturn $.map( names, function (name, i) {\n\t\t\t\t\t\t\treturn name === match[1] ? i : null;\n\t\t\t\t\t\t} );\n\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Cell in the table body\n\t\t\tif ( s.nodeName && s._DT_CellIndex ) {\n\t\t\t\treturn [ s._DT_CellIndex.column ];\n\t\t\t}\n\t\n\t\t\t// jQuery selector on the TH elements for the columns\n\t\t\tvar jqResult = $( nodes )\n\t\t\t\t.filter( s )\n\t\t\t\t.map( function () {\n\t\t\t\t\treturn $.inArray( this, nodes ); // `nodes` is column index complete and in order\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\n\t\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\t\treturn jqResult;\n\t\t\t}\n\t\n\t\t\t// Otherwise a node which might have a `dt-column` data attribute, or be\n\t\t\t// a child or such an element\n\t\t\tvar host = $(s).closest('*[data-dt-column]');\n\t\t\treturn host.length ?\n\t\t\t\t[ host.data('dt-column') ] :\n\t\t\t\t[];\n\t\t};\n\t\n\t\treturn _selector_run( 'column', selector, run, settings, opts );\n\t};\n\t\n\t\n\tvar __setColumnVis = function ( settings, column, vis ) {\n\t\tvar\n\t\t\tcols = settings.aoColumns,\n\t\t\tcol  = cols[ column ],\n\t\t\tdata = settings.aoData,\n\t\t\trow, cells, i, ien, tr;\n\t\n\t\t// Get\n\t\tif ( vis === undefined ) {\n\t\t\treturn col.bVisible;\n\t\t}\n\t\n\t\t// Set\n\t\t// No change\n\t\tif ( col.bVisible === vis ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( vis ) {\n\t\t\t// Insert column\n\t\t\t// Need to decide if we should use appendChild or insertBefore\n\t\t\tvar insertBefore = $.inArray( true, _pluck(cols, 'bVisible'), column+1 );\n\t\n\t\t\tfor ( i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\ttr = data[i].nTr;\n\t\t\t\tcells = data[i].anCells;\n\t\n\t\t\t\tif ( tr ) {\n\t\t\t\t\t// insertBefore can act like appendChild if 2nd arg is null\n\t\t\t\t\ttr.insertBefore( cells[ column ], cells[ insertBefore ] || null );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Remove column\n\t\t\t$( _pluck( settings.aoData, 'anCells', column ) ).detach();\n\t\t}\n\t\n\t\t// Common actions\n\t\tcol.bVisible = vis;\n\t};\n\t\n\t\n\t_api_register( 'columns()', function ( selector, opts ) {\n\t\t// argument shifting\n\t\tif ( selector === undefined ) {\n\t\t\tselector = '';\n\t\t}\n\t\telse if ( $.isPlainObject( selector ) ) {\n\t\t\topts = selector;\n\t\t\tselector = '';\n\t\t}\n\t\n\t\topts = _selector_opts( opts );\n\t\n\t\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\t\treturn __column_selector( settings, selector, opts );\n\t\t}, 1 );\n\t\n\t\t// Want argument shifting here and in _row_selector?\n\t\tinst.selector.cols = selector;\n\t\tinst.selector.opts = opts;\n\t\n\t\treturn inst;\n\t} );\n\t\n\t_api_registerPlural( 'columns().header()', 'column().header()', function ( selector, opts ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].nTh;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().footer()', 'column().footer()', function ( selector, opts ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].nTf;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().data()', 'column().data()', function () {\n\t\treturn this.iterator( 'column-rows', __columnData, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().dataSrc()', 'column().dataSrc()', function () {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].mData;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().cache()', 'column().cache()', function ( type ) {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows,\n\t\t\t\ttype === 'search' ? '_aFilterData' : '_aSortData', column\n\t\t\t);\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().nodes()', 'column().nodes()', function () {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows, 'anCells', column ) ;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().visible()', 'column().visible()', function ( vis, calc ) {\n\t\tvar that = this;\n\t\tvar ret = this.iterator( 'column', function ( settings, column ) {\n\t\t\tif ( vis === undefined ) {\n\t\t\t\treturn settings.aoColumns[ column ].bVisible;\n\t\t\t} // else\n\t\t\t__setColumnVis( settings, column, vis );\n\t\t} );\n\t\n\t\t// Group the column visibility changes\n\t\tif ( vis !== undefined ) {\n\t\t\tthis.iterator( 'table', function ( settings ) {\n\t\t\t\t// Redraw the header after changes\n\t\t\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\t\n\t\t\t\t// Update colspan for no records display. Child rows and extensions will use their own\n\t\t\t\t// listeners to do this - only need to update the empty table item here\n\t\t\t\tif ( ! settings.aiDisplay.length ) {\n\t\t\t\t\t$(settings.nTBody).find('td[colspan]').attr('colspan', _fnVisbleColumns(settings));\n\t\t\t\t}\n\t\t\n\t\t\t\t_fnSaveState( settings );\n\t\n\t\t\t\t// Second loop once the first is done for events\n\t\t\t\tthat.iterator( 'column', function ( settings, column ) {\n\t\t\t\t\t_fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis, calc] );\n\t\t\t\t} );\n\t\n\t\t\t\tif ( calc === undefined || calc ) {\n\t\t\t\t\tthat.columns.adjust();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\n\t\treturn ret;\n\t} );\n\t\n\t_api_registerPlural( 'columns().indexes()', 'column().index()', function ( type ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn type === 'visible' ?\n\t\t\t\t_fnColumnIndexToVisible( settings, column ) :\n\t\t\t\tcolumn;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'columns.adjust()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'column.index()', function ( type, idx ) {\n\t\tif ( this.context.length !== 0 ) {\n\t\t\tvar ctx = this.context[0];\n\t\n\t\t\tif ( type === 'fromVisible' || type === 'toData' ) {\n\t\t\t\treturn _fnVisibleToColumnIndex( ctx, idx );\n\t\t\t}\n\t\t\telse if ( type === 'fromData' || type === 'toVisible' ) {\n\t\t\t\treturn _fnColumnIndexToVisible( ctx, idx );\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t_api_register( 'column()', function ( selector, opts ) {\n\t\treturn _selector_first( this.columns( selector, opts ) );\n\t} );\n\t\n\tvar __cell_selector = function ( settings, selector, opts )\n\t{\n\t\tvar data = settings.aoData;\n\t\tvar rows = _selector_row_indexes( settings, opts );\n\t\tvar cells = _removeEmpty( _pluck_order( data, rows, 'anCells' ) );\n\t\tvar allCells = $(_flatten( [], cells ));\n\t\tvar row;\n\t\tvar columns = settings.aoColumns.length;\n\t\tvar a, i, ien, j, o, host;\n\t\n\t\tvar run = function ( s ) {\n\t\t\tvar fnSelector = typeof s === 'function';\n\t\n\t\t\tif ( s === null || s === undefined || fnSelector ) {\n\t\t\t\t// All cells and function selectors\n\t\t\t\ta = [];\n\t\n\t\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = rows[i];\n\t\n\t\t\t\t\tfor ( j=0 ; j<columns ; j++ ) {\n\t\t\t\t\t\to = {\n\t\t\t\t\t\t\trow: row,\n\t\t\t\t\t\t\tcolumn: j\n\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\tif ( fnSelector ) {\n\t\t\t\t\t\t\t// Selector - function\n\t\t\t\t\t\t\thost = data[ row ];\n\t\n\t\t\t\t\t\t\tif ( s( o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null ) ) {\n\t\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Selector - all\n\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn a;\n\t\t\t}\n\t\t\t\n\t\t\t// Selector - index\n\t\t\tif ( $.isPlainObject( s ) ) {\n\t\t\t\t// Valid cell index and its in the array of selectable rows\n\t\t\t\treturn s.column !== undefined && s.row !== undefined && $.inArray( s.row, rows ) !== -1 ?\n\t\t\t\t\t[s] :\n\t\t\t\t\t[];\n\t\t\t}\n\t\n\t\t\t// Selector - jQuery filtered cells\n\t\t\tvar jqResult = allCells\n\t\t\t\t.filter( s )\n\t\t\t\t.map( function (i, el) {\n\t\t\t\t\treturn { // use a new object, in case someone changes the values\n\t\t\t\t\t\trow:    el._DT_CellIndex.row,\n\t\t\t\t\t\tcolumn: el._DT_CellIndex.column\n\t \t\t\t\t};\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\n\t\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\t\treturn jqResult;\n\t\t\t}\n\t\n\t\t\t// Otherwise the selector is a node, and there is one last option - the\n\t\t\t// element might be a child of an element which has dt-row and dt-column\n\t\t\t// data attributes\n\t\t\thost = $(s).closest('*[data-dt-row]');\n\t\t\treturn host.length ?\n\t\t\t\t[ {\n\t\t\t\t\trow: host.data('dt-row'),\n\t\t\t\t\tcolumn: host.data('dt-column')\n\t\t\t\t} ] :\n\t\t\t\t[];\n\t\t};\n\t\n\t\treturn _selector_run( 'cell', selector, run, settings, opts );\n\t};\n\t\n\t\n\t\n\t\n\t_api_register( 'cells()', function ( rowSelector, columnSelector, opts ) {\n\t\t// Argument shifting\n\t\tif ( $.isPlainObject( rowSelector ) ) {\n\t\t\t// Indexes\n\t\t\tif ( rowSelector.row === undefined ) {\n\t\t\t\t// Selector options in first parameter\n\t\t\t\topts = rowSelector;\n\t\t\t\trowSelector = null;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Cell index objects in first parameter\n\t\t\t\topts = columnSelector;\n\t\t\t\tcolumnSelector = null;\n\t\t\t}\n\t\t}\n\t\tif ( $.isPlainObject( columnSelector ) ) {\n\t\t\topts = columnSelector;\n\t\t\tcolumnSelector = null;\n\t\t}\n\t\n\t\t// Cell selector\n\t\tif ( columnSelector === null || columnSelector === undefined ) {\n\t\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t\treturn __cell_selector( settings, rowSelector, _selector_opts( opts ) );\n\t\t\t} );\n\t\t}\n\t\n\t\t// The default built in options need to apply to row and columns\n\t\tvar internalOpts = opts ? {\n\t\t\tpage: opts.page,\n\t\t\torder: opts.order,\n\t\t\tsearch: opts.search\n\t\t} : {};\n\t\n\t\t// Row + column selector\n\t\tvar columns = this.columns( columnSelector, internalOpts );\n\t\tvar rows = this.rows( rowSelector, internalOpts );\n\t\tvar i, ien, j, jen;\n\t\n\t\tvar cellsNoOpts = this.iterator( 'table', function ( settings, idx ) {\n\t\t\tvar a = [];\n\t\n\t\t\tfor ( i=0, ien=rows[idx].length ; i<ien ; i++ ) {\n\t\t\t\tfor ( j=0, jen=columns[idx].length ; j<jen ; j++ ) {\n\t\t\t\t\ta.push( {\n\t\t\t\t\t\trow:    rows[idx][i],\n\t\t\t\t\t\tcolumn: columns[idx][j]\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn a;\n\t\t}, 1 );\n\t\n\t\t// There is currently only one extension which uses a cell selector extension\n\t\t// It is a _major_ performance drag to run this if it isn't needed, so this is\n\t\t// an extension specific check at the moment\n\t\tvar cells = opts && opts.selected ?\n\t\t\tthis.cells( cellsNoOpts, opts ) :\n\t\t\tcellsNoOpts;\n\t\n\t\t$.extend( cells.selector, {\n\t\t\tcols: columnSelector,\n\t\t\trows: rowSelector,\n\t\t\topts: opts\n\t\t} );\n\t\n\t\treturn cells;\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().nodes()', 'cell().node()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\tvar data = settings.aoData[ row ];\n\t\n\t\t\treturn data && data.anCells ?\n\t\t\t\tdata.anCells[ column ] :\n\t\t\t\tundefined;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_register( 'cells().data()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn _fnGetCellData( settings, row, column );\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().cache()', 'cell().cache()', function ( type ) {\n\t\ttype = type === 'search' ? '_aFilterData' : '_aSortData';\n\t\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn settings.aoData[ row ][ type ][ column ];\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().render()', 'cell().render()', function ( type ) {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn _fnGetCellData( settings, row, column, type );\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().indexes()', 'cell().index()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn {\n\t\t\t\trow: row,\n\t\t\t\tcolumn: column,\n\t\t\t\tcolumnVisible: _fnColumnIndexToVisible( settings, column )\n\t\t\t};\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().invalidate()', 'cell().invalidate()', function ( src ) {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\t_fnInvalidate( settings, row, src, column );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t_api_register( 'cell()', function ( rowSelector, columnSelector, opts ) {\n\t\treturn _selector_first( this.cells( rowSelector, columnSelector, opts ) );\n\t} );\n\t\n\t\n\t_api_register( 'cell().data()', function ( data ) {\n\t\tvar ctx = this.context;\n\t\tvar cell = this[0];\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// Get\n\t\t\treturn ctx.length && cell.length ?\n\t\t\t\t_fnGetCellData( ctx[0], cell[0].row, cell[0].column ) :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// Set\n\t\t_fnSetCellData( ctx[0], cell[0].row, cell[0].column, data );\n\t\t_fnInvalidate( ctx[0], cell[0].row, 'data', cell[0].column );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Get current ordering (sorting) that has been applied to the table.\n\t *\n\t * @returns {array} 2D array containing the sorting information for the first\n\t *   table in the current context. Each element in the parent array represents\n\t *   a column being sorted upon (i.e. multi-sorting with two columns would have\n\t *   2 inner arrays). The inner arrays may have 2 or 3 elements. The first is\n\t *   the column index that the sorting condition applies to, the second is the\n\t *   direction of the sort (`desc` or `asc`) and, optionally, the third is the\n\t *   index of the sorting order from the `column.sorting` initialisation array.\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {integer} order Column index to sort upon.\n\t * @param {string} direction Direction of the sort to be applied (`asc` or `desc`)\n\t * @returns {DataTables.Api} this\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {array} order 1D array of sorting information to be applied.\n\t * @param {array} [...] Optional additional sorting conditions\n\t * @returns {DataTables.Api} this\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {array} order 2D array of sorting information to be applied.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'order()', function ( order, dir ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( order === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length !== 0 ?\n\t\t\t\tctx[0].aaSorting :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// set\n\t\tif ( typeof order === 'number' ) {\n\t\t\t// Simple column / direction passed in\n\t\t\torder = [ [ order, dir ] ];\n\t\t}\n\t\telse if ( order.length && ! Array.isArray( order[0] ) ) {\n\t\t\t// Arguments passed in (list of 1D arrays)\n\t\t\torder = Array.prototype.slice.call( arguments );\n\t\t}\n\t\t// otherwise a 2D array was passed in\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tsettings.aaSorting = order.slice();\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Attach a sort listener to an element for a given column\n\t *\n\t * @param {node|jQuery|string} node Identifier for the element(s) to attach the\n\t *   listener to. This can take the form of a single DOM node, a jQuery\n\t *   collection of nodes or a jQuery selector which will identify the node(s).\n\t * @param {integer} column the column that a click on this node will sort on\n\t * @param {function} [callback] callback function when sort is run\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'order.listener()', function ( node, column, callback ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnSortAttachListener( settings, node, column, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'order.fixed()', function ( set ) {\n\t\tif ( ! set ) {\n\t\t\tvar ctx = this.context;\n\t\t\tvar fixed = ctx.length ?\n\t\t\t\tctx[0].aaSortingFixed :\n\t\t\t\tundefined;\n\t\n\t\t\treturn Array.isArray( fixed ) ?\n\t\t\t\t{ pre: fixed } :\n\t\t\t\tfixed;\n\t\t}\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tsettings.aaSortingFixed = $.extend( true, {}, set );\n\t\t} );\n\t} );\n\t\n\t\n\t// Order by the selected column(s)\n\t_api_register( [\n\t\t'columns().order()',\n\t\t'column().order()'\n\t], function ( dir ) {\n\t\tvar that = this;\n\t\n\t\treturn this.iterator( 'table', function ( settings, i ) {\n\t\t\tvar sort = [];\n\t\n\t\t\t$.each( that[i], function (j, col) {\n\t\t\t\tsort.push( [ col, dir ] );\n\t\t\t} );\n\t\n\t\t\tsettings.aaSorting = sort;\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t_api_register( 'search()', function ( input, regex, smart, caseInsen ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( input === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length !== 0 ?\n\t\t\t\tctx[0].oPreviousSearch.sSearch :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// set\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t_fnFilterComplete( settings, $.extend( {}, settings.oPreviousSearch, {\n\t\t\t\t\"sSearch\": input+\"\",\n\t\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t\t} ), 1 );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_registerPlural(\n\t\t'columns().search()',\n\t\t'column().search()',\n\t\tfunction ( input, regex, smart, caseInsen ) {\n\t\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\t\tvar preSearch = settings.aoPreSearchCols;\n\t\n\t\t\t\tif ( input === undefined ) {\n\t\t\t\t\t// get\n\t\t\t\t\treturn preSearch[ column ].sSearch;\n\t\t\t\t}\n\t\n\t\t\t\t// set\n\t\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\t$.extend( preSearch[ column ], {\n\t\t\t\t\t\"sSearch\": input+\"\",\n\t\t\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t\t\t} );\n\t\n\t\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch, 1 );\n\t\t\t} );\n\t\t}\n\t);\n\t\n\t/*\n\t * State API methods\n\t */\n\t\n\t_api_register( 'state()', function () {\n\t\treturn this.context.length ?\n\t\t\tthis.context[0].oSavedState :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'state.clear()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t// Save an empty object\n\t\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, {} );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'state.loaded()', function () {\n\t\treturn this.context.length ?\n\t\t\tthis.context[0].oLoadedState :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'state.save()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnSaveState( settings );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Provide a common method for plug-ins to check the version of DataTables being\n\t * used, in order to ensure compatibility.\n\t *\n\t *  @param {string} version Version string to check for, in the format \"X.Y.Z\".\n\t *    Note that the formats \"X\" and \"X.Y\" are also acceptable.\n\t *  @returns {boolean} true if this version of DataTables is greater or equal to\n\t *    the required version, or false if this version of DataTales is not\n\t *    suitable\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    alert( $.fn.dataTable.versionCheck( '1.9.0' ) );\n\t */\n\tDataTable.versionCheck = DataTable.fnVersionCheck = function( version )\n\t{\n\t\tvar aThis = DataTable.version.split('.');\n\t\tvar aThat = version.split('.');\n\t\tvar iThis, iThat;\n\t\n\t\tfor ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) {\n\t\t\tiThis = parseInt( aThis[i], 10 ) || 0;\n\t\t\tiThat = parseInt( aThat[i], 10 ) || 0;\n\t\n\t\t\t// Parts are the same, keep comparing\n\t\t\tif (iThis === iThat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// Parts are different, return immediately\n\t\t\treturn iThis > iThat;\n\t\t}\n\t\n\t\treturn true;\n\t};\n\t\n\t\n\t/**\n\t * Check if a `<table>` node is a DataTable table already or not.\n\t *\n\t *  @param {node|jquery|string} table Table node, jQuery object or jQuery\n\t *      selector for the table to test. Note that if more than more than one\n\t *      table is passed on, only the first will be checked\n\t *  @returns {boolean} true the table given is a DataTable, or false otherwise\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    if ( ! $.fn.DataTable.isDataTable( '#example' ) ) {\n\t *      $('#example').dataTable();\n\t *    }\n\t */\n\tDataTable.isDataTable = DataTable.fnIsDataTable = function ( table )\n\t{\n\t\tvar t = $(table).get(0);\n\t\tvar is = false;\n\t\n\t\tif ( table instanceof DataTable.Api ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\t$.each( DataTable.settings, function (i, o) {\n\t\t\tvar head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;\n\t\t\tvar foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;\n\t\n\t\t\tif ( o.nTable === t || head === t || foot === t ) {\n\t\t\t\tis = true;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn is;\n\t};\n\t\n\t\n\t/**\n\t * Get all DataTable tables that have been initialised - optionally you can\n\t * select to get only currently visible tables.\n\t *\n\t *  @param {boolean} [visible=false] Flag to indicate if you want all (default)\n\t *    or visible tables only.\n\t *  @returns {array} Array of `table` nodes (not DataTable instances) which are\n\t *    DataTables\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    $.each( $.fn.dataTable.tables(true), function () {\n\t *      $(table).DataTable().columns.adjust();\n\t *    } );\n\t */\n\tDataTable.tables = DataTable.fnTables = function ( visible )\n\t{\n\t\tvar api = false;\n\t\n\t\tif ( $.isPlainObject( visible ) ) {\n\t\t\tapi = visible.api;\n\t\t\tvisible = visible.visible;\n\t\t}\n\t\n\t\tvar a = $.map( DataTable.settings, function (o) {\n\t\t\tif ( !visible || (visible && $(o.nTable).is(':visible')) ) {\n\t\t\t\treturn o.nTable;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn api ?\n\t\t\tnew _Api( a ) :\n\t\t\ta;\n\t};\n\t\n\t\n\t/**\n\t * Convert from camel case parameters to Hungarian notation. This is made public\n\t * for the extensions to provide the same ability as DataTables core to accept\n\t * either the 1.9 style Hungarian notation, or the 1.10+ style camelCase\n\t * parameters.\n\t *\n\t *  @param {object} src The model object which holds all parameters that can be\n\t *    mapped.\n\t *  @param {object} user The object to convert from camel case to Hungarian.\n\t *  @param {boolean} force When set to `true`, properties which already have a\n\t *    Hungarian value in the `user` object will be overwritten. Otherwise they\n\t *    won't be.\n\t */\n\tDataTable.camelToHungarian = _fnCamelToHungarian;\n\t\n\t\n\t\n\t/**\n\t *\n\t */\n\t_api_register( '$()', function ( selector, opts ) {\n\t\tvar\n\t\t\trows   = this.rows( opts ).nodes(), // Get all rows\n\t\t\tjqRows = $(rows);\n\t\n\t\treturn $( [].concat(\n\t\t\tjqRows.filter( selector ).toArray(),\n\t\t\tjqRows.find( selector ).toArray()\n\t\t) );\n\t} );\n\t\n\t\n\t// jQuery functions to operate on the tables\n\t$.each( [ 'on', 'one', 'off' ], function (i, key) {\n\t\t_api_register( key+'()', function ( /* event, handler */ ) {\n\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\n\t\t\t// Add the `dt` namespace automatically if it isn't already present\n\t\t\targs[0] = $.map( args[0].split( /\\s/ ), function ( e ) {\n\t\t\t\treturn ! e.match(/\\.dt\\b/) ?\n\t\t\t\t\te+'.dt' :\n\t\t\t\t\te;\n\t\t\t\t} ).join( ' ' );\n\t\n\t\t\tvar inst = $( this.tables().nodes() );\n\t\t\tinst[key].apply( inst, args );\n\t\t\treturn this;\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'clear()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnClearTable( settings );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'settings()', function () {\n\t\treturn new _Api( this.context, this.context );\n\t} );\n\t\n\t\n\t_api_register( 'init()', function () {\n\t\tvar ctx = this.context;\n\t\treturn ctx.length ? ctx[0].oInit : null;\n\t} );\n\t\n\t\n\t_api_register( 'data()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\treturn _pluck( settings.aoData, '_aData' );\n\t\t} ).flatten();\n\t} );\n\t\n\t\n\t_api_register( 'destroy()', function ( remove ) {\n\t\tremove = remove || false;\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tvar classes   = settings.oClasses;\n\t\t\tvar table     = settings.nTable;\n\t\t\tvar tbody     = settings.nTBody;\n\t\t\tvar thead     = settings.nTHead;\n\t\t\tvar tfoot     = settings.nTFoot;\n\t\t\tvar jqTable   = $(table);\n\t\t\tvar jqTbody   = $(tbody);\n\t\t\tvar jqWrapper = $(settings.nTableWrapper);\n\t\t\tvar rows      = $.map( settings.aoData, function (r) { return r.nTr; } );\n\t\t\tvar i, ien;\n\t\n\t\t\t// Flag to note that the table is currently being destroyed - no action\n\t\t\t// should be taken\n\t\t\tsettings.bDestroying = true;\n\t\n\t\t\t// Fire off the destroy callbacks for plug-ins etc\n\t\t\t_fnCallbackFire( settings, \"aoDestroyCallback\", \"destroy\", [settings] );\n\t\n\t\t\t// If not being removed from the document, make all columns visible\n\t\t\tif ( ! remove ) {\n\t\t\t\tnew _Api( settings ).columns().visible( true );\n\t\t\t}\n\t\n\t\t\t// Blitz all `DT` namespaced events (these are internal events, the\n\t\t\t// lowercase, `dt` events are user subscribed and they are responsible\n\t\t\t// for removing them\n\t\t\tjqWrapper.off('.DT').find(':not(tbody *)').off('.DT');\n\t\t\t$(window).off('.DT-'+settings.sInstance);\n\t\n\t\t\t// When scrolling we had to break the table up - restore it\n\t\t\tif ( table != thead.parentNode ) {\n\t\t\t\tjqTable.children('thead').detach();\n\t\t\t\tjqTable.append( thead );\n\t\t\t}\n\t\n\t\t\tif ( tfoot && table != tfoot.parentNode ) {\n\t\t\t\tjqTable.children('tfoot').detach();\n\t\t\t\tjqTable.append( tfoot );\n\t\t\t}\n\t\n\t\t\tsettings.aaSorting = [];\n\t\t\tsettings.aaSortingFixed = [];\n\t\t\t_fnSortingClasses( settings );\n\t\n\t\t\t$( rows ).removeClass( settings.asStripeClasses.join(' ') );\n\t\n\t\t\t$('th, td', thead).removeClass( classes.sSortable+' '+\n\t\t\t\tclasses.sSortableAsc+' '+classes.sSortableDesc+' '+classes.sSortableNone\n\t\t\t);\n\t\n\t\t\t// Add the TR elements back into the table in their original order\n\t\t\tjqTbody.children().detach();\n\t\t\tjqTbody.append( rows );\n\t\n\t\t\tvar orig = settings.nTableWrapper.parentNode;\n\t\n\t\t\t// Remove the DataTables generated nodes, events and classes\n\t\t\tvar removedMethod = remove ? 'remove' : 'detach';\n\t\t\tjqTable[ removedMethod ]();\n\t\t\tjqWrapper[ removedMethod ]();\n\t\n\t\t\t// If we need to reattach the table to the document\n\t\t\tif ( ! remove && orig ) {\n\t\t\t\t// insertBefore acts like appendChild if !arg[1]\n\t\t\t\torig.insertBefore( table, settings.nTableReinsertBefore );\n\t\n\t\t\t\t// Restore the width of the original table - was read from the style property,\n\t\t\t\t// so we can restore directly to that\n\t\t\t\tjqTable\n\t\t\t\t\t.css( 'width', settings.sDestroyWidth )\n\t\t\t\t\t.removeClass( classes.sTable );\n\t\n\t\t\t\t// If the were originally stripe classes - then we add them back here.\n\t\t\t\t// Note this is not fool proof (for example if not all rows had stripe\n\t\t\t\t// classes - but it's a good effort without getting carried away\n\t\t\t\tien = settings.asDestroyStripes.length;\n\t\n\t\t\t\tif ( ien ) {\n\t\t\t\t\tjqTbody.children().each( function (i) {\n\t\t\t\t\t\t$(this).addClass( settings.asDestroyStripes[i % ien] );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t/* Remove the settings object from the settings array */\n\t\t\tvar idx = $.inArray( settings, DataTable.settings );\n\t\t\tif ( idx !== -1 ) {\n\t\t\t\tDataTable.settings.splice( idx, 1 );\n\t\t\t}\n\t\t} );\n\t} );\n\t\n\t\n\t// Add the `every()` method for rows, columns and cells in a compact form\n\t$.each( [ 'column', 'row', 'cell' ], function ( i, type ) {\n\t\t_api_register( type+'s().every()', function ( fn ) {\n\t\t\tvar opts = this.selector.opts;\n\t\t\tvar api = this;\n\t\n\t\t\treturn this.iterator( type, function ( settings, arg1, arg2, arg3, arg4 ) {\n\t\t\t\t// Rows and columns:\n\t\t\t\t//  arg1 - index\n\t\t\t\t//  arg2 - table counter\n\t\t\t\t//  arg3 - loop counter\n\t\t\t\t//  arg4 - undefined\n\t\t\t\t// Cells:\n\t\t\t\t//  arg1 - row index\n\t\t\t\t//  arg2 - column index\n\t\t\t\t//  arg3 - table counter\n\t\t\t\t//  arg4 - loop counter\n\t\t\t\tfn.call(\n\t\t\t\t\tapi[ type ](\n\t\t\t\t\t\targ1,\n\t\t\t\t\t\ttype==='cell' ? arg2 : opts,\n\t\t\t\t\t\ttype==='cell' ? opts : undefined\n\t\t\t\t\t),\n\t\t\t\t\targ1, arg2, arg3, arg4\n\t\t\t\t);\n\t\t\t} );\n\t\t} );\n\t} );\n\t\n\t\n\t// i18n method for extensions to be able to use the language object from the\n\t// DataTable\n\t_api_register( 'i18n()', function ( token, def, plural ) {\n\t\tvar ctx = this.context[0];\n\t\tvar resolved = _fnGetObjectDataFn( token )( ctx.oLanguage );\n\t\n\t\tif ( resolved === undefined ) {\n\t\t\tresolved = def;\n\t\t}\n\t\n\t\tif ( plural !== undefined && $.isPlainObject( resolved ) ) {\n\t\t\tresolved = resolved[ plural ] !== undefined ?\n\t\t\t\tresolved[ plural ] :\n\t\t\t\tresolved._;\n\t\t}\n\t\n\t\treturn resolved.replace( '%d', plural ); // nb: plural might be undefined,\n\t} );\t\n\t/**\n\t * Version string for plug-ins to check compatibility. Allowed format is\n\t * `a.b.c-d` where: a:int, b:int, c:int, d:string(dev|beta|alpha). `d` is used\n\t * only for non-release builds. See http://semver.org/ for more information.\n\t *  @member\n\t *  @type string\n\t *  @default Version number\n\t */\n\tDataTable.version = \"1.12.1\";\n\t\n\t/**\n\t * Private data store, containing all of the settings objects that are\n\t * created for the tables on a given page.\n\t *\n\t * Note that the `DataTable.settings` object is aliased to\n\t * `jQuery.fn.dataTableExt` through which it may be accessed and\n\t * manipulated, or `jQuery.fn.dataTable.settings`.\n\t *  @member\n\t *  @type array\n\t *  @default []\n\t *  @private\n\t */\n\tDataTable.settings = [];\n\t\n\t/**\n\t * Object models container, for the various models that DataTables has\n\t * available to it. These models define the objects that are used to hold\n\t * the active state and configuration of the table.\n\t *  @namespace\n\t */\n\tDataTable.models = {};\n\t\n\t\n\t\n\t/**\n\t * Template object for the way in which DataTables holds information about\n\t * search information for the global filter and individual column filters.\n\t *  @namespace\n\t */\n\tDataTable.models.oSearch = {\n\t\t/**\n\t\t * Flag to indicate if the filtering should be case insensitive or not\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t */\n\t\t\"bCaseInsensitive\": true,\n\t\n\t\t/**\n\t\t * Applied search term\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t */\n\t\t\"sSearch\": \"\",\n\t\n\t\t/**\n\t\t * Flag to indicate if the search term should be interpreted as a\n\t\t * regular expression (true) or not (false) and therefore and special\n\t\t * regex characters escaped.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bRegex\": false,\n\t\n\t\t/**\n\t\t * Flag to indicate if DataTables is to use its smart filtering or not.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t */\n\t\t\"bSmart\": true,\n\t\n\t\t/**\n\t\t * Flag to indicate if DataTables should only trigger a search when\n\t\t * the return key is pressed.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"return\": false\n\t};\n\t\n\t\n\t\n\t\n\t/**\n\t * Template object for the way in which DataTables holds information about\n\t * each individual row. This is the object format used for the settings\n\t * aoData array.\n\t *  @namespace\n\t */\n\tDataTable.models.oRow = {\n\t\t/**\n\t\t * TR element for the row\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTr\": null,\n\t\n\t\t/**\n\t\t * Array of TD elements for each row. This is null until the row has been\n\t\t * created.\n\t\t *  @type array nodes\n\t\t *  @default []\n\t\t */\n\t\t\"anCells\": null,\n\t\n\t\t/**\n\t\t * Data object from the original data source for the row. This is either\n\t\t * an array if using the traditional form of DataTables, or an object if\n\t\t * using mData options. The exact type will depend on the passed in\n\t\t * data from the data source, or will be an array if using DOM a data\n\t\t * source.\n\t\t *  @type array|object\n\t\t *  @default []\n\t\t */\n\t\t\"_aData\": [],\n\t\n\t\t/**\n\t\t * Sorting data cache - this array is ostensibly the same length as the\n\t\t * number of columns (although each index is generated only as it is\n\t\t * needed), and holds the data that is used for sorting each column in the\n\t\t * row. We do this cache generation at the start of the sort in order that\n\t\t * the formatting of the sort data need be done only once for each cell\n\t\t * per sort. This array should not be read from or written to by anything\n\t\t * other than the master sorting methods.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_aSortData\": null,\n\t\n\t\t/**\n\t\t * Per cell filtering data cache. As per the sort data cache, used to\n\t\t * increase the performance of the filtering in DataTables\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_aFilterData\": null,\n\t\n\t\t/**\n\t\t * Filtering data cache. This is the same as the cell filtering cache, but\n\t\t * in this case a string rather than an array. This is easily computed with\n\t\t * a join on `_aFilterData`, but is provided as a cache so the join isn't\n\t\t * needed on every search (memory traded for performance)\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_sFilterRow\": null,\n\t\n\t\t/**\n\t\t * Cache of the class name that DataTables has applied to the row, so we\n\t\t * can quickly look at this variable rather than needing to do a DOM check\n\t\t * on className for the nTr property.\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *  @private\n\t\t */\n\t\t\"_sRowStripe\": \"\",\n\t\n\t\t/**\n\t\t * Denote if the original data source was from the DOM, or the data source\n\t\t * object. This is used for invalidating data, so DataTables can\n\t\t * automatically read data from the original source, unless uninstructed\n\t\t * otherwise.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"src\": null,\n\t\n\t\t/**\n\t\t * Index in the aoData array. This saves an indexOf lookup when we have the\n\t\t * object, but want to know the index\n\t\t *  @type integer\n\t\t *  @default -1\n\t\t *  @private\n\t\t */\n\t\t\"idx\": -1\n\t};\n\t\n\t\n\t/**\n\t * Template object for the column information object in DataTables. This object\n\t * is held in the settings aoColumns array and contains all the information that\n\t * DataTables needs about each individual column.\n\t *\n\t * Note that this object is related to {@link DataTable.defaults.column}\n\t * but this one is the internal data store for DataTables's cache of columns.\n\t * It should NOT be manipulated outside of DataTables. Any configuration should\n\t * be done through the initialisation options.\n\t *  @namespace\n\t */\n\tDataTable.models.oColumn = {\n\t\t/**\n\t\t * Column index. This could be worked out on-the-fly with $.inArray, but it\n\t\t * is faster to just hold it as a variable\n\t\t *  @type integer\n\t\t *  @default null\n\t\t */\n\t\t\"idx\": null,\n\t\n\t\t/**\n\t\t * A list of the columns that sorting should occur on when this column\n\t\t * is sorted. That this property is an array allows multi-column sorting\n\t\t * to be defined for a column (for example first name / last name columns\n\t\t * would benefit from this). The values are integers pointing to the\n\t\t * columns to be sorted on (typically it will be a single integer pointing\n\t\t * at itself, but that doesn't need to be the case).\n\t\t *  @type array\n\t\t */\n\t\t\"aDataSort\": null,\n\t\n\t\t/**\n\t\t * Define the sorting directions that are applied to the column, in sequence\n\t\t * as the column is repeatedly sorted upon - i.e. the first value is used\n\t\t * as the sorting direction when the column if first sorted (clicked on).\n\t\t * Sort it again (click again) and it will move on to the next index.\n\t\t * Repeat until loop.\n\t\t *  @type array\n\t\t */\n\t\t\"asSorting\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is searchable, and thus should be included\n\t\t * in the filtering or not.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSearchable\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is sortable or not.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortable\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is currently visible in the table or not\n\t\t *  @type boolean\n\t\t */\n\t\t\"bVisible\": null,\n\t\n\t\t/**\n\t\t * Store for manual type assignment using the `column.type` option. This\n\t\t * is held in store so we can manipulate the column's `sType` property.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_sManualType\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if HTML5 data attributes should be used as the data\n\t\t * source for filtering or sorting. True is either are.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @private\n\t\t */\n\t\t\"_bAttrSrc\": false,\n\t\n\t\t/**\n\t\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t\t * allowing you to modify the DOM element (add background colour for example) when the\n\t\t * element is available.\n\t\t *  @type function\n\t\t *  @param {element} nTd The TD node that has been created\n\t\t *  @param {*} sData The Data for the cell\n\t\t *  @param {array|object} oData The data for the whole row\n\t\t *  @param {int} iRow The row index for the aoData data store\n\t\t *  @default null\n\t\t */\n\t\t\"fnCreatedCell\": null,\n\t\n\t\t/**\n\t\t * Function to get data from a cell in a column. You should <b>never</b>\n\t\t * access data directly through _aData internally in DataTables - always use\n\t\t * the method attached to this property. It allows mData to function as\n\t\t * required. This function is automatically assigned by the column\n\t\t * initialisation method\n\t\t *  @type function\n\t\t *  @param {array|object} oData The data array/object for the array\n\t\t *    (i.e. aoData[]._aData)\n\t\t *  @param {string} sSpecific The specific data type you want to get -\n\t\t *    'display', 'type' 'filter' 'sort'\n\t\t *  @returns {*} The data for the cell from the given row's data\n\t\t *  @default null\n\t\t */\n\t\t\"fnGetData\": null,\n\t\n\t\t/**\n\t\t * Function to set data for a cell in the column. You should <b>never</b>\n\t\t * set the data directly to _aData internally in DataTables - always use\n\t\t * this method. It allows mData to function as required. This function\n\t\t * is automatically assigned by the column initialisation method\n\t\t *  @type function\n\t\t *  @param {array|object} oData The data array/object for the array\n\t\t *    (i.e. aoData[]._aData)\n\t\t *  @param {*} sValue Value to set\n\t\t *  @default null\n\t\t */\n\t\t\"fnSetData\": null,\n\t\n\t\t/**\n\t\t * Property to read the value for the cells in the column from the data\n\t\t * source array / object. If null, then the default content is used, if a\n\t\t * function is given then the return from the function is used.\n\t\t *  @type function|int|string|null\n\t\t *  @default null\n\t\t */\n\t\t\"mData\": null,\n\t\n\t\t/**\n\t\t * Partner property to mData which is used (only when defined) to get\n\t\t * the data - i.e. it is basically the same as mData, but without the\n\t\t * 'set' option, and also the data fed to it is the result from mData.\n\t\t * This is the rendering method to match the data method of mData.\n\t\t *  @type function|int|string|null\n\t\t *  @default null\n\t\t */\n\t\t\"mRender\": null,\n\t\n\t\t/**\n\t\t * Unique header TH/TD element for this column - this is what the sorting\n\t\t * listener is attached to (if sorting is enabled.)\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTh\": null,\n\t\n\t\t/**\n\t\t * Unique footer TH/TD element for this column (if there is one). Not used\n\t\t * in DataTables as such, but can be used for plug-ins to reference the\n\t\t * footer for each column.\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTf\": null,\n\t\n\t\t/**\n\t\t * The class to apply to all TD elements in the table's TBODY for the column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sClass\": null,\n\t\n\t\t/**\n\t\t * When DataTables calculates the column widths to assign to each column,\n\t\t * it finds the longest string in each column and then constructs a\n\t\t * temporary table and reads the widths from that. The problem with this\n\t\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t\t * string - thus the calculation can go wrong (doing it properly and putting\n\t\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t\t * a \"work around\" we provide this option. It will append its value to the\n\t\t * text that is found to be the longest string for the column - i.e. padding.\n\t\t *  @type string\n\t\t */\n\t\t\"sContentPadding\": null,\n\t\n\t\t/**\n\t\t * Allows a default value to be given for a column's data, and will be used\n\t\t * whenever a null data source is encountered (this can be because mData\n\t\t * is set to null, or because the data source itself is null).\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sDefaultContent\": null,\n\t\n\t\t/**\n\t\t * Name for the column, allowing reference to the column by name as well as\n\t\t * by index (needs a lookup to work by name).\n\t\t *  @type string\n\t\t */\n\t\t\"sName\": null,\n\t\n\t\t/**\n\t\t * Custom sorting data type - defines which of the available plug-ins in\n\t\t * afnSortData the custom sorting will use - if any is defined.\n\t\t *  @type string\n\t\t *  @default std\n\t\t */\n\t\t\"sSortDataType\": 'std',\n\t\n\t\t/**\n\t\t * Class to be applied to the header element when sorting on this column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sSortingClass\": null,\n\t\n\t\t/**\n\t\t * Class to be applied to the header element when sorting on this column -\n\t\t * when jQuery UI theming is used.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sSortingClassJUI\": null,\n\t\n\t\t/**\n\t\t * Title of the column - what is seen in the TH element (nTh).\n\t\t *  @type string\n\t\t */\n\t\t\"sTitle\": null,\n\t\n\t\t/**\n\t\t * Column sorting and filtering type\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sType\": null,\n\t\n\t\t/**\n\t\t * Width of the column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sWidth\": null,\n\t\n\t\t/**\n\t\t * Width of the column when it was first \"encountered\"\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sWidthOrig\": null\n\t};\n\t\n\t\n\t/*\n\t * Developer note: The properties of the object below are given in Hungarian\n\t * notation, that was used as the interface for DataTables prior to v1.10, however\n\t * from v1.10 onwards the primary interface is camel case. In order to avoid\n\t * breaking backwards compatibility utterly with this change, the Hungarian\n\t * version is still, internally the primary interface, but is is not documented\n\t * - hence the @name tags in each doc comment. This allows a Javascript function\n\t * to create a map from Hungarian notation to camel case (going the other direction\n\t * would require each property to be listed, which would add around 3K to the size\n\t * of DataTables, while this method is about a 0.5K hit).\n\t *\n\t * Ultimately this does pave the way for Hungarian notation to be dropped\n\t * completely, but that is a massive amount of work and will break current\n\t * installs (therefore is on-hold until v2).\n\t */\n\t\n\t/**\n\t * Initialisation options that can be given to DataTables at initialisation\n\t * time.\n\t *  @namespace\n\t */\n\tDataTable.defaults = {\n\t\t/**\n\t\t * An array of data to use for the table, passed in at initialisation which\n\t\t * will be used in preference to any data which is already in the DOM. This is\n\t\t * particularly useful for constructing tables purely in Javascript, for\n\t\t * example with a custom Ajax call.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.data\n\t\t *\n\t\t *  @example\n\t\t *    // Using a 2D array data source\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"data\": [\n\t\t *          ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],\n\t\t *          ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],\n\t\t *        ],\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"Engine\" },\n\t\t *          { \"title\": \"Browser\" },\n\t\t *          { \"title\": \"Platform\" },\n\t\t *          { \"title\": \"Version\" },\n\t\t *          { \"title\": \"Grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using an array of objects as a data source (`data`)\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"data\": [\n\t\t *          {\n\t\t *            \"engine\":   \"Trident\",\n\t\t *            \"browser\":  \"Internet Explorer 4.0\",\n\t\t *            \"platform\": \"Win 95+\",\n\t\t *            \"version\":  4,\n\t\t *            \"grade\":    \"X\"\n\t\t *          },\n\t\t *          {\n\t\t *            \"engine\":   \"Trident\",\n\t\t *            \"browser\":  \"Internet Explorer 5.0\",\n\t\t *            \"platform\": \"Win 95+\",\n\t\t *            \"version\":  5,\n\t\t *            \"grade\":    \"C\"\n\t\t *          }\n\t\t *        ],\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"Engine\",   \"data\": \"engine\" },\n\t\t *          { \"title\": \"Browser\",  \"data\": \"browser\" },\n\t\t *          { \"title\": \"Platform\", \"data\": \"platform\" },\n\t\t *          { \"title\": \"Version\",  \"data\": \"version\" },\n\t\t *          { \"title\": \"Grade\",    \"data\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aaData\": null,\n\t\n\t\n\t\t/**\n\t\t * If ordering is enabled, then DataTables will perform a first pass sort on\n\t\t * initialisation. You can define which column(s) the sort is performed\n\t\t * upon, and the sorting direction, with this variable. The `sorting` array\n\t\t * should contain an array for each column to be sorted initially containing\n\t\t * the column's index and a direction string ('asc' or 'desc').\n\t\t *  @type array\n\t\t *  @default [[0,'asc']]\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.order\n\t\t *\n\t\t *  @example\n\t\t *    // Sort by 3rd column first, and then 4th column\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"order\": [[2,'asc'], [3,'desc']]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *    // No initial sorting\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"order\": []\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aaSorting\": [[0,'asc']],\n\t\n\t\n\t\t/**\n\t\t * This parameter is basically identical to the `sorting` parameter, but\n\t\t * cannot be overridden by user interaction with the table. What this means\n\t\t * is that you could have a column (visible or hidden) which the sorting\n\t\t * will always be forced on first - any sorting after that (from the user)\n\t\t * will then be performed as required. This can be useful for grouping rows\n\t\t * together.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.orderFixed\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderFixed\": [[0,'asc']]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"aaSortingFixed\": [],\n\t\n\t\n\t\t/**\n\t\t * DataTables can be instructed to load data to display in the table from a\n\t\t * Ajax source. This option defines how that Ajax call is made and where to.\n\t\t *\n\t\t * The `ajax` property has three different modes of operation, depending on\n\t\t * how it is defined. These are:\n\t\t *\n\t\t * * `string` - Set the URL from where the data should be loaded from.\n\t\t * * `object` - Define properties for `jQuery.ajax`.\n\t\t * * `function` - Custom data get function\n\t\t *\n\t\t * `string`\n\t\t * --------\n\t\t *\n\t\t * As a string, the `ajax` property simply defines the URL from which\n\t\t * DataTables will load data.\n\t\t *\n\t\t * `object`\n\t\t * --------\n\t\t *\n\t\t * As an object, the parameters in the object are passed to\n\t\t * [jQuery.ajax](http://api.jquery.com/jQuery.ajax/) allowing fine control\n\t\t * of the Ajax request. DataTables has a number of default parameters which\n\t\t * you can override using this option. Please refer to the jQuery\n\t\t * documentation for a full description of the options available, although\n\t\t * the following parameters provide additional options in DataTables or\n\t\t * require special consideration:\n\t\t *\n\t\t * * `data` - As with jQuery, `data` can be provided as an object, but it\n\t\t *   can also be used as a function to manipulate the data DataTables sends\n\t\t *   to the server. The function takes a single parameter, an object of\n\t\t *   parameters with the values that DataTables has readied for sending. An\n\t\t *   object may be returned which will be merged into the DataTables\n\t\t *   defaults, or you can add the items to the object that was passed in and\n\t\t *   not return anything from the function. This supersedes `fnServerParams`\n\t\t *   from DataTables 1.9-.\n\t\t *\n\t\t * * `dataSrc` - By default DataTables will look for the property `data` (or\n\t\t *   `aaData` for compatibility with DataTables 1.9-) when obtaining data\n\t\t *   from an Ajax source or for server-side processing - this parameter\n\t\t *   allows that property to be changed. You can use Javascript dotted\n\t\t *   object notation to get a data source for multiple levels of nesting, or\n\t\t *   it my be used as a function. As a function it takes a single parameter,\n\t\t *   the JSON returned from the server, which can be manipulated as\n\t\t *   required, with the returned value being that used by DataTables as the\n\t\t *   data source for the table. This supersedes `sAjaxDataProp` from\n\t\t *   DataTables 1.9-.\n\t\t *\n\t\t * * `success` - Should not be overridden it is used internally in\n\t\t *   DataTables. To manipulate / transform the data returned by the server\n\t\t *   use `ajax.dataSrc`, or use `ajax` as a function (see below).\n\t\t *\n\t\t * `function`\n\t\t * ----------\n\t\t *\n\t\t * As a function, making the Ajax call is left up to yourself allowing\n\t\t * complete control of the Ajax request. Indeed, if desired, a method other\n\t\t * than Ajax could be used to obtain the required data, such as Web storage\n\t\t * or an AIR database.\n\t\t *\n\t\t * The function is given four parameters and no return is required. The\n\t\t * parameters are:\n\t\t *\n\t\t * 1. _object_ - Data to send to the server\n\t\t * 2. _function_ - Callback function that must be executed when the required\n\t\t *    data has been obtained. That data should be passed into the callback\n\t\t *    as the only parameter\n\t\t * 3. _object_ - DataTables settings object for the table\n\t\t *\n\t\t * Note that this supersedes `fnServerData` from DataTables 1.9-.\n\t\t *\n\t\t *  @type string|object|function\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.ajax\n\t\t *  @since 1.10.0\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax.\n\t\t *   // Note DataTables expects data in the form `{ data: [ ...data... ] }` by default).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": \"data.json\"\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax, using `dataSrc` to change\n\t\t *   // `data` to `tableData` (i.e. `{ tableData: [ ...data... ] }`)\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": \"tableData\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax, using `dataSrc` to read data\n\t\t *   // from a plain array rather than an array in an object\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": \"\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Manipulate the data returned from the server - add a link to data\n\t\t *   // (note this can, should, be done using `render` for the column - this\n\t\t *   // is just a simple example of how the data can be manipulated).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": function ( json ) {\n\t\t *         for ( var i=0, ien=json.length ; i<ien ; i++ ) {\n\t\t *           json[i][0] = '<a href=\"/message/'+json[i][0]+'>View message</a>';\n\t\t *         }\n\t\t *         return json;\n\t\t *       }\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Add data to the request\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"data\": function ( d ) {\n\t\t *         return {\n\t\t *           \"extra_search\": $('#extra').val()\n\t\t *         };\n\t\t *       }\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Send request as POST\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"type\": \"POST\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get the data from localStorage (could interface with a form for\n\t\t *   // adding, editing and removing rows).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": function (data, callback, settings) {\n\t\t *       callback(\n\t\t *         JSON.parse( localStorage.getItem('dataTablesData') )\n\t\t *       );\n\t\t *     }\n\t\t *   } );\n\t\t */\n\t\t\"ajax\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter allows you to readily specify the entries in the length drop\n\t\t * down menu that DataTables shows when pagination is enabled. It can be\n\t\t * either a 1D array of options which will be used for both the displayed\n\t\t * option and the value, or a 2D array which will use the array in the first\n\t\t * position as the value, and the array in the second position as the\n\t\t * displayed options (useful for language strings such as 'All').\n\t\t *\n\t\t * Note that the `pageLength` property will be automatically set to the\n\t\t * first value given in this array, unless `pageLength` is also provided.\n\t\t *  @type array\n\t\t *  @default [ 10, 25, 50, 100 ]\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.lengthMenu\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"lengthMenu\": [[10, 25, 50, -1], [10, 25, 50, \"All\"]]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aLengthMenu\": [ 10, 25, 50, 100 ],\n\t\n\t\n\t\t/**\n\t\t * The `columns` option in the initialisation parameter allows you to define\n\t\t * details about the way individual columns behave. For a full list of\n\t\t * column options that can be set, please see\n\t\t * {@link DataTable.defaults.column}. Note that if you use `columns` to\n\t\t * define your columns, you must have an entry in the array for every single\n\t\t * column that you have in your table (these can be null if you don't which\n\t\t * to specify any options).\n\t\t *  @member\n\t\t *\n\t\t *  @name DataTable.defaults.column\n\t\t */\n\t\t\"aoColumns\": null,\n\t\n\t\t/**\n\t\t * Very similar to `columns`, `columnDefs` allows you to target a specific\n\t\t * column, multiple columns, or all columns, using the `targets` property of\n\t\t * each object in the array. This allows great flexibility when creating\n\t\t * tables, as the `columnDefs` arrays can be of any length, targeting the\n\t\t * columns you specifically want. `columnDefs` may use any of the column\n\t\t * options available: {@link DataTable.defaults.column}, but it _must_\n\t\t * have `targets` defined in each object in the array. Values in the `targets`\n\t\t * array may be:\n\t\t *   <ul>\n\t\t *     <li>a string - class name will be matched on the TH for the column</li>\n\t\t *     <li>0 or a positive integer - column index counting from the left</li>\n\t\t *     <li>a negative integer - column index counting from the right</li>\n\t\t *     <li>the string \"_all\" - all columns (i.e. assign a default)</li>\n\t\t *   </ul>\n\t\t *  @member\n\t\t *\n\t\t *  @name DataTable.defaults.columnDefs\n\t\t */\n\t\t\"aoColumnDefs\": null,\n\t\n\t\n\t\t/**\n\t\t * Basically the same as `search`, this parameter defines the individual column\n\t\t * filtering state at initialisation time. The array must be of the same size\n\t\t * as the number of columns, and each element be an object with the parameters\n\t\t * `search` and `escapeRegex` (the latter is optional). 'null' is also\n\t\t * accepted and the default will be used.\n\t\t *  @type array\n\t\t *  @default []\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.searchCols\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searchCols\": [\n\t\t *          null,\n\t\t *          { \"search\": \"My filter\" },\n\t\t *          null,\n\t\t *          { \"search\": \"^[0-9]\", \"escapeRegex\": false }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"aoSearchCols\": [],\n\t\n\t\n\t\t/**\n\t\t * An array of CSS classes that should be applied to displayed rows. This\n\t\t * array may be of any length, and DataTables will apply each class\n\t\t * sequentially, looping when required.\n\t\t *  @type array\n\t\t *  @default null <i>Will take the values determined by the `oClasses.stripe*`\n\t\t *    options</i>\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.stripeClasses\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stripeClasses\": [ 'strip1', 'strip2', 'strip3' ]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"asStripeClasses\": null,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable automatic column width calculation. This can be disabled\n\t\t * as an optimisation (it takes some time to calculate the widths) if the\n\t\t * tables widths are passed in using `columns`.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.autoWidth\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"autoWidth\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bAutoWidth\": true,\n\t\n\t\n\t\t/**\n\t\t * Deferred rendering can provide DataTables with a huge speed boost when you\n\t\t * are using an Ajax or JS data source for the table. This option, when set to\n\t\t * true, will cause DataTables to defer the creation of the table elements for\n\t\t * each row until they are needed for a draw - saving a significant amount of\n\t\t * time.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.deferRender\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajax\": \"sources/arrays.txt\",\n\t\t *        \"deferRender\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bDeferRender\": false,\n\t\n\t\n\t\t/**\n\t\t * Replace a DataTable which matches the given selector and replace it with\n\t\t * one which has the properties of the new initialisation object passed. If no\n\t\t * table matches the selector, then the new DataTable will be constructed as\n\t\t * per normal.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.destroy\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"srollY\": \"200px\",\n\t\t *        \"paginate\": false\n\t\t *      } );\n\t\t *\n\t\t *      // Some time later....\n\t\t *      $('#example').dataTable( {\n\t\t *        \"filter\": false,\n\t\t *        \"destroy\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bDestroy\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable filtering of data. Filtering in DataTables is \"smart\" in\n\t\t * that it allows the end user to input multiple words (space separated) and\n\t\t * will match a row containing those words, even if not in the order that was\n\t\t * specified (this allow matching across multiple columns). Note that if you\n\t\t * wish to use filtering in DataTables this must remain 'true' - to remove the\n\t\t * default filtering input box and retain filtering abilities, please use\n\t\t * {@link DataTable.defaults.dom}.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.searching\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searching\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bFilter\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the table information display. This shows information\n\t\t * about the data that is currently visible on the page, including information\n\t\t * about filtered data if that action is being performed.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.info\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"info\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bInfo\": true,\n\t\n\t\n\t\t/**\n\t\t * Allows the end user to select the size of a formatted page from a select\n\t\t * menu (sizes are 10, 25, 50 and 100). Requires pagination (`paginate`).\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.lengthChange\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"lengthChange\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bLengthChange\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable pagination.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.paging\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"paging\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bPaginate\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the display of a 'processing' indicator when the table is\n\t\t * being processed (e.g. a sort). This is particularly useful for tables with\n\t\t * large amounts of data where it can take a noticeable amount of time to sort\n\t\t * the entries.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.processing\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"processing\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bProcessing\": false,\n\t\n\t\n\t\t/**\n\t\t * Retrieve the DataTables object for the given selector. Note that if the\n\t\t * table has already been initialised, this parameter will cause DataTables\n\t\t * to simply return the object that has already been set up - it will not take\n\t\t * account of any changes you might have made to the initialisation object\n\t\t * passed to DataTables (setting this parameter to true is an acknowledgement\n\t\t * that you understand this). `destroy` can be used to reinitialise a table if\n\t\t * you need.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.retrieve\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      initTable();\n\t\t *      tableActions();\n\t\t *    } );\n\t\t *\n\t\t *    function initTable ()\n\t\t *    {\n\t\t *      return $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200px\",\n\t\t *        \"paginate\": false,\n\t\t *        \"retrieve\": true\n\t\t *      } );\n\t\t *    }\n\t\t *\n\t\t *    function tableActions ()\n\t\t *    {\n\t\t *      var table = initTable();\n\t\t *      // perform API operations with oTable\n\t\t *    }\n\t\t */\n\t\t\"bRetrieve\": false,\n\t\n\t\n\t\t/**\n\t\t * When vertical (y) scrolling is enabled, DataTables will force the height of\n\t\t * the table's viewport to the given height at all times (useful for layout).\n\t\t * However, this can look odd when filtering data down to a small data set,\n\t\t * and the footer is left \"floating\" further down. This parameter (when\n\t\t * enabled) will cause DataTables to collapse the table's viewport down when\n\t\t * the result set will fit within the given Y height.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.scrollCollapse\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200\",\n\t\t *        \"scrollCollapse\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bScrollCollapse\": false,\n\t\n\t\n\t\t/**\n\t\t * Configure DataTables to use server-side processing. Note that the\n\t\t * `ajax` parameter must also be given in order to give DataTables a\n\t\t * source to obtain the required data for each draw.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverSide\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"xhr.php\"\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bServerSide\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable sorting of columns. Sorting of individual columns can be\n\t\t * disabled by the `sortable` option for each column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.ordering\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ordering\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSort\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or display DataTables' ability to sort multiple columns at the\n\t\t * same time (activated by shift-click by the user).\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.orderMulti\n\t\t *\n\t\t *  @example\n\t\t *    // Disable multiple column sorting ability\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderMulti\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortMulti\": true,\n\t\n\t\n\t\t/**\n\t\t * Allows control over whether DataTables should use the top (true) unique\n\t\t * cell that is found for a single column, or the bottom (false - default).\n\t\t * This is useful when using complex headers.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.orderCellsTop\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderCellsTop\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortCellsTop\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the addition of the classes `sorting\\_1`, `sorting\\_2` and\n\t\t * `sorting\\_3` to the columns which are currently being sorted on. This is\n\t\t * presented as a feature switch as it can increase processing time (while\n\t\t * classes are removed and added) so for large data sets you might want to\n\t\t * turn this off.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.orderClasses\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderClasses\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortClasses\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable state saving. When enabled HTML5 `localStorage` will be\n\t\t * used to save table display information such as pagination information,\n\t\t * display length, filtering and sorting. As such when the end user reloads\n\t\t * the page the display display will match what thy had previously set up.\n\t\t *\n\t\t * Due to the use of `localStorage` the default state saving is not supported\n\t\t * in IE6 or 7. If state saving is required in those browsers, use\n\t\t * `stateSaveCallback` to provide a storage solution such as cookies.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.stateSave\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bStateSave\": false,\n\t\n\t\n\t\t/**\n\t\t * This function is called when a TR element is created (and all TD child\n\t\t * elements have been inserted), or registered if using a DOM source, allowing\n\t\t * manipulation of the TR element (adding classes etc).\n\t\t *  @type function\n\t\t *  @param {node} row \"TR\" element for the current row\n\t\t *  @param {array} data Raw data array for this row\n\t\t *  @param {int} dataIndex The index of this row in the internal aoData array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.createdRow\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"createdRow\": function( row, data, dataIndex ) {\n\t\t *          // Bold the grade for all 'A' grade browsers\n\t\t *          if ( data[4] == \"A\" )\n\t\t *          {\n\t\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnCreatedRow\": null,\n\t\n\t\n\t\t/**\n\t\t * This function is called on every 'draw' event, and allows you to\n\t\t * dynamically modify any aspect you want about the created DOM.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.drawCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"drawCallback\": function( settings ) {\n\t\t *          alert( 'DataTables has redrawn the table' );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnDrawCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * Identical to fnHeaderCallback() but for the table footer this function\n\t\t * allows you to modify the table footer on every 'draw' event.\n\t\t *  @type function\n\t\t *  @param {node} foot \"TR\" element for the footer\n\t\t *  @param {array} data Full table data (as derived from the original HTML)\n\t\t *  @param {int} start Index for the current display starting point in the\n\t\t *    display array\n\t\t *  @param {int} end Index for the current display ending point in the\n\t\t *    display array\n\t\t *  @param {array int} display Index array to translate the visual position\n\t\t *    to the full data array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.footerCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"footerCallback\": function( tfoot, data, start, end, display ) {\n\t\t *          tfoot.getElementsByTagName('th')[0].innerHTML = \"Starting index is \"+start;\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnFooterCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * When rendering large numbers in the information element for the table\n\t\t * (i.e. \"Showing 1 to 10 of 57 entries\") DataTables will render large numbers\n\t\t * to have a comma separator for the 'thousands' units (e.g. 1 million is\n\t\t * rendered as \"1,000,000\") to help readability for the end user. This\n\t\t * function will override the default method DataTables uses.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {int} toFormat number to be formatted\n\t\t *  @returns {string} formatted string for DataTables to show the number\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.formatNumber\n\t\t *\n\t\t *  @example\n\t\t *    // Format a number using a single quote for the separator (note that\n\t\t *    // this can also be done with the language.thousands option)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"formatNumber\": function ( toFormat ) {\n\t\t *          return toFormat.toString().replace(\n\t\t *            /\\B(?=(\\d{3})+(?!\\d))/g, \"'\"\n\t\t *          );\n\t\t *        };\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnFormatNumber\": function ( toFormat ) {\n\t\t\treturn toFormat.toString().replace(\n\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g,\n\t\t\t\tthis.oLanguage.sThousands\n\t\t\t);\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * This function is called on every 'draw' event, and allows you to\n\t\t * dynamically modify the header row. This can be used to calculate and\n\t\t * display useful information about the table.\n\t\t *  @type function\n\t\t *  @param {node} head \"TR\" element for the header\n\t\t *  @param {array} data Full table data (as derived from the original HTML)\n\t\t *  @param {int} start Index for the current display starting point in the\n\t\t *    display array\n\t\t *  @param {int} end Index for the current display ending point in the\n\t\t *    display array\n\t\t *  @param {array int} display Index array to translate the visual position\n\t\t *    to the full data array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.headerCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"fheaderCallback\": function( head, data, start, end, display ) {\n\t\t *          head.getElementsByTagName('th')[0].innerHTML = \"Displaying \"+(end-start)+\" records\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnHeaderCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * The information element can be used to convey information about the current\n\t\t * state of the table. Although the internationalisation options presented by\n\t\t * DataTables are quite capable of dealing with most customisations, there may\n\t\t * be times where you wish to customise the string further. This callback\n\t\t * allows you to do exactly that.\n\t\t *  @type function\n\t\t *  @param {object} oSettings DataTables settings object\n\t\t *  @param {int} start Starting position in data for the draw\n\t\t *  @param {int} end End position in data for the draw\n\t\t *  @param {int} max Total number of rows in the table (regardless of\n\t\t *    filtering)\n\t\t *  @param {int} total Total number of rows in the data set, after filtering\n\t\t *  @param {string} pre The string that DataTables has formatted using it's\n\t\t *    own rules\n\t\t *  @returns {string} The string to be displayed in the information element.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.infoCallback\n\t\t *\n\t\t *  @example\n\t\t *    $('#example').dataTable( {\n\t\t *      \"infoCallback\": function( settings, start, end, max, total, pre ) {\n\t\t *        return start +\" to \"+ end;\n\t\t *      }\n\t\t *    } );\n\t\t */\n\t\t\"fnInfoCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * Called when the table has been initialised. Normally DataTables will\n\t\t * initialise sequentially and there will be no need for this function,\n\t\t * however, this does not hold true when using external language information\n\t\t * since that is obtained using an async XHR call.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} json The JSON object request from the server - only\n\t\t *    present if client-side Ajax sourced data is used\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.initComplete\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"initComplete\": function(settings, json) {\n\t\t *          alert( 'DataTables has finished its initialisation.' );\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnInitComplete\": null,\n\t\n\t\n\t\t/**\n\t\t * Called at the very start of each table draw and can be used to cancel the\n\t\t * draw by returning false, any other return (including undefined) results in\n\t\t * the full draw occurring).\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @returns {boolean} False will cancel the draw, anything else (including no\n\t\t *    return) will allow it to complete.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.preDrawCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"preDrawCallback\": function( settings ) {\n\t\t *          if ( $('#test').val() == 1 ) {\n\t\t *            return false;\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnPreDrawCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * This function allows you to 'post process' each row after it have been\n\t\t * generated for each table draw, but before it is rendered on screen. This\n\t\t * function might be used for setting the row class name etc.\n\t\t *  @type function\n\t\t *  @param {node} row \"TR\" element for the current row\n\t\t *  @param {array} data Raw data array for this row\n\t\t *  @param {int} displayIndex The display index for the current table draw\n\t\t *  @param {int} displayIndexFull The index of the data in the full list of\n\t\t *    rows (after filtering)\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.rowCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"rowCallback\": function( row, data, displayIndex, displayIndexFull ) {\n\t\t *          // Bold the grade for all 'A' grade browsers\n\t\t *          if ( data[4] == \"A\" ) {\n\t\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnRowCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * This parameter allows you to override the default function which obtains\n\t\t * the data from the server so something more suitable for your application.\n\t\t * For example you could use POST data, or pull information from a Gears or\n\t\t * AIR database.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {string} source HTTP source to obtain the data from (`ajax`)\n\t\t *  @param {array} data A key/value pair object containing the data to send\n\t\t *    to the server\n\t\t *  @param {function} callback to be called on completion of the data get\n\t\t *    process that will draw the data on the page.\n\t\t *  @param {object} settings DataTables settings object\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverData\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"fnServerData\": null,\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t *  It is often useful to send extra data to the server when making an Ajax\n\t\t * request - for example custom filtering information, and this callback\n\t\t * function makes it trivial to send extra information to the server. The\n\t\t * passed in parameter is the data set that has been constructed by\n\t\t * DataTables, and you can add to this or modify it as you require.\n\t\t *  @type function\n\t\t *  @param {array} data Data array (array of objects which are name/value\n\t\t *    pairs) that has been constructed by DataTables and will be sent to the\n\t\t *    server. In the case of Ajax sourced data with server-side processing\n\t\t *    this will be an empty array, for server-side processing there will be a\n\t\t *    significant number of parameters!\n\t\t *  @returns {undefined} Ensure that you modify the data array passed in,\n\t\t *    as this is passed by reference.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverParams\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"fnServerParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Load the table state. With this function you can define from where, and how, the\n\t\t * state of a table is loaded. By default DataTables will load from `localStorage`\n\t\t * but you might wish to use a server-side database or cookies.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} callback Callback that can be executed when done. It\n\t\t *    should be passed the loaded state object.\n\t\t *  @return {object} The DataTables state object to be loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoadCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadCallback\": function (settings, callback) {\n\t\t *          $.ajax( {\n\t\t *            \"url\": \"/state_load\",\n\t\t *            \"dataType\": \"json\",\n\t\t *            \"success\": function (json) {\n\t\t *              callback( json );\n\t\t *            }\n\t\t *          } );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoadCallback\": function ( settings ) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(\n\t\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).getItem(\n\t\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} catch (e) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Callback which allows modification of the saved state prior to loading that state.\n\t\t * This callback is called when the table is loading state from the stored data, but\n\t\t * prior to the settings object being modified by the saved state. Note that for\n\t\t * plug-in authors, you should use the `stateLoadParams` event to load parameters for\n\t\t * a plug-in.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object that is to be loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoadParams\n\t\t *\n\t\t *  @example\n\t\t *    // Remove a saved filter, so filtering is never loaded\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadParams\": function (settings, data) {\n\t\t *          data.oSearch.sSearch = \"\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Disallow state loading by returning false\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadParams\": function (settings, data) {\n\t\t *          return false;\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoadParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Callback that is called when the state has been loaded from the state saving method\n\t\t * and the DataTables settings object has been modified as a result of the loaded state.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object that was loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoaded\n\t\t *\n\t\t *  @example\n\t\t *    // Show an alert with the filtering value that was saved\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoaded\": function (settings, data) {\n\t\t *          alert( 'Saved filter was: '+data.oSearch.sSearch );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoaded\": null,\n\t\n\t\n\t\t/**\n\t\t * Save the table state. This function allows you to define where and how the state\n\t\t * information for the table is stored By default DataTables will use `localStorage`\n\t\t * but you might wish to use a server-side database or cookies.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object to be saved\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateSaveCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateSaveCallback\": function (settings, data) {\n\t\t *          // Send an Ajax request to the server with the state object\n\t\t *          $.ajax( {\n\t\t *            \"url\": \"/state_save\",\n\t\t *            \"data\": data,\n\t\t *            \"dataType\": \"json\",\n\t\t *            \"method\": \"POST\"\n\t\t *            \"success\": function () {}\n\t\t *          } );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateSaveCallback\": function ( settings, data ) {\n\t\t\ttry {\n\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).setItem(\n\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname,\n\t\t\t\t\tJSON.stringify( data )\n\t\t\t\t);\n\t\t\t} catch (e) {}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Callback which allows modification of the state to be saved. Called when the table\n\t\t * has changed state a new state save is required. This method allows modification of\n\t\t * the state saving object prior to actually doing the save, including addition or\n\t\t * other state properties or modification. Note that for plug-in authors, you should\n\t\t * use the `stateSaveParams` event to save parameters for a plug-in.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object to be saved\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateSaveParams\n\t\t *\n\t\t *  @example\n\t\t *    // Remove a saved filter, so filtering is never saved\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateSaveParams\": function (settings, data) {\n\t\t *          data.oSearch.sSearch = \"\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateSaveParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Duration for which the saved state information is considered valid. After this period\n\t\t * has elapsed the state will be returned to the default.\n\t\t * Value is given in seconds.\n\t\t *  @type int\n\t\t *  @default 7200 <i>(2 hours)</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.stateDuration\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateDuration\": 60*60*24; // 1 day\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iStateDuration\": 7200,\n\t\n\t\n\t\t/**\n\t\t * When enabled DataTables will not make a request to the server for the first\n\t\t * page draw - rather it will use the data already on the page (no sorting etc\n\t\t * will be applied to it), thus saving on an XHR at load time. `deferLoading`\n\t\t * is used to indicate that deferred loading is required, but it is also used\n\t\t * to tell DataTables how many records there are in the full table (allowing\n\t\t * the information element and pagination to be displayed correctly). In the case\n\t\t * where a filtering is applied to the table on initial load, this can be\n\t\t * indicated by giving the parameter as an array, where the first element is\n\t\t * the number of records available after filtering and the second element is the\n\t\t * number of records without filtering (allowing the table information element\n\t\t * to be shown correctly).\n\t\t *  @type int | array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.deferLoading\n\t\t *\n\t\t *  @example\n\t\t *    // 57 records available in the table, no filtering applied\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"scripts/server_processing.php\",\n\t\t *        \"deferLoading\": 57\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // 57 records after filtering, 100 without filtering (an initial filter applied)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"scripts/server_processing.php\",\n\t\t *        \"deferLoading\": [ 57, 100 ],\n\t\t *        \"search\": {\n\t\t *          \"search\": \"my_filter\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"iDeferLoading\": null,\n\t\n\t\n\t\t/**\n\t\t * Number of rows to display on a single page when using pagination. If\n\t\t * feature enabled (`lengthChange`) then the end user will be able to override\n\t\t * this to a custom setting using a pop-up menu.\n\t\t *  @type int\n\t\t *  @default 10\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.pageLength\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"pageLength\": 50\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iDisplayLength\": 10,\n\t\n\t\n\t\t/**\n\t\t * Define the starting point for data display when using DataTables with\n\t\t * pagination. Note that this parameter is the number of records, rather than\n\t\t * the page number, so if you have 10 records per page and want to start on\n\t\t * the third page, it should be \"20\".\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.displayStart\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"displayStart\": 20\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iDisplayStart\": 0,\n\t\n\t\n\t\t/**\n\t\t * By default DataTables allows keyboard navigation of the table (sorting, paging,\n\t\t * and filtering) by adding a `tabindex` attribute to the required elements. This\n\t\t * allows you to tab through the controls and press the enter key to activate them.\n\t\t * The tabindex is default 0, meaning that the tab follows the flow of the document.\n\t\t * You can overrule this using this parameter if you wish. Use a value of -1 to\n\t\t * disable built-in keyboard navigation.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.tabIndex\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"tabIndex\": 1\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"iTabIndex\": 0,\n\t\n\t\n\t\t/**\n\t\t * Classes that DataTables assigns to the various components and features\n\t\t * that it adds to the HTML table. This allows classes to be configured\n\t\t * during initialisation in addition to through the static\n\t\t * {@link DataTable.ext.oStdClasses} object).\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.classes\n\t\t */\n\t\t\"oClasses\": {},\n\t\n\t\n\t\t/**\n\t\t * All strings that DataTables uses in the user interface that it creates\n\t\t * are defined in this object, allowing you to modified them individually or\n\t\t * completely replace them all as required.\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.language\n\t\t */\n\t\t\"oLanguage\": {\n\t\t\t/**\n\t\t\t * Strings that are used for WAI-ARIA labels and controls only (these are not\n\t\t\t * actually visible on the page, but will be read by screenreaders, and thus\n\t\t\t * must be internationalised as well).\n\t\t\t *  @namespace\n\t\t\t *  @name DataTable.defaults.language.aria\n\t\t\t */\n\t\t\t\"oAria\": {\n\t\t\t\t/**\n\t\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t\t * sorted ascending by activing the column (click or return when focused).\n\t\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default : activate to sort column ascending\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.aria.sortAscending\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"aria\": {\n\t\t\t\t *            \"sortAscending\": \" - click/return to sort ascending\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sSortAscending\": \": activate to sort column ascending\",\n\t\n\t\t\t\t/**\n\t\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t\t * sorted descending by activing the column (click or return when focused).\n\t\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default : activate to sort column ascending\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.aria.sortDescending\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"aria\": {\n\t\t\t\t *            \"sortDescending\": \" - click/return to sort descending\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sSortDescending\": \": activate to sort column descending\"\n\t\t\t},\n\t\n\t\t\t/**\n\t\t\t * Pagination string used by DataTables for the built-in pagination\n\t\t\t * control types.\n\t\t\t *  @namespace\n\t\t\t *  @name DataTable.defaults.language.paginate\n\t\t\t */\n\t\t\t\"oPaginate\": {\n\t\t\t\t/**\n\t\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t\t * button to take the user to the first page.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default First\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.first\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"first\": \"First page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sFirst\": \"First\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t\t * button to take the user to the last page.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Last\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.last\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"last\": \"Last page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sLast\": \"Last\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use for the 'next' pagination button (to take the user to the\n\t\t\t\t * next page).\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Next\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.next\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"next\": \"Next page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sNext\": \"Next\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use for the 'previous' pagination button (to take the user to\n\t\t\t\t * the previous page).\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Previous\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.previous\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"previous\": \"Previous page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sPrevious\": \"Previous\"\n\t\t\t},\n\t\n\t\t\t/**\n\t\t\t * This string is shown in preference to `zeroRecords` when the table is\n\t\t\t * empty of data (regardless of filtering). Note that this is an optional\n\t\t\t * parameter - if it is not given, the value of `zeroRecords` will be used\n\t\t\t * instead (either the default or given value).\n\t\t\t *  @type string\n\t\t\t *  @default No data available in table\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.emptyTable\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"emptyTable\": \"No data available in table\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sEmptyTable\": \"No data available in table\",\n\t\n\t\n\t\t\t/**\n\t\t\t * This string gives information to the end user about the information\n\t\t\t * that is current on display on the page. The following tokens can be\n\t\t\t * used in the string and will be dynamically replaced as the table\n\t\t\t * display updates. This tokens can be placed anywhere in the string, or\n\t\t\t * removed as needed by the language requires:\n\t\t\t *\n\t\t\t * * `\\_START\\_` - Display index of the first record on the current page\n\t\t\t * * `\\_END\\_` - Display index of the last record on the current page\n\t\t\t * * `\\_TOTAL\\_` - Number of records in the table after filtering\n\t\t\t * * `\\_MAX\\_` - Number of records in the table without filtering\n\t\t\t * * `\\_PAGE\\_` - Current page number\n\t\t\t * * `\\_PAGES\\_` - Total number of pages of data in the table\n\t\t\t *\n\t\t\t *  @type string\n\t\t\t *  @default Showing _START_ to _END_ of _TOTAL_ entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.info\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"info\": \"Showing page _PAGE_ of _PAGES_\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfo\": \"Showing _START_ to _END_ of _TOTAL_ entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Display information string for when the table is empty. Typically the\n\t\t\t * format of this string should match `info`.\n\t\t\t *  @type string\n\t\t\t *  @default Showing 0 to 0 of 0 entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoEmpty\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoEmpty\": \"No entries to show\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoEmpty\": \"Showing 0 to 0 of 0 entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * When a user filters the information in a table, this string is appended\n\t\t\t * to the information (`info`) to give an idea of how strong the filtering\n\t\t\t * is. The variable _MAX_ is dynamically updated.\n\t\t\t *  @type string\n\t\t\t *  @default (filtered from _MAX_ total entries)\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoFiltered\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoFiltered\": \" - filtering from _MAX_ records\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoFiltered\": \"(filtered from _MAX_ total entries)\",\n\t\n\t\n\t\t\t/**\n\t\t\t * If can be useful to append extra information to the info string at times,\n\t\t\t * and this variable does exactly that. This information will be appended to\n\t\t\t * the `info` (`infoEmpty` and `infoFiltered` in whatever combination they are\n\t\t\t * being used) at all times.\n\t\t\t *  @type string\n\t\t\t *  @default <i>Empty string</i>\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoPostFix\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoPostFix\": \"All records shown are derived from real information.\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoPostFix\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * This decimal place operator is a little different from the other\n\t\t\t * language options since DataTables doesn't output floating point\n\t\t\t * numbers, so it won't ever use this for display of a number. Rather,\n\t\t\t * what this parameter does is modify the sort methods of the table so\n\t\t\t * that numbers which are in a format which has a character other than\n\t\t\t * a period (`.`) as a decimal place will be sorted numerically.\n\t\t\t *\n\t\t\t * Note that numbers with different decimal places cannot be shown in\n\t\t\t * the same table and still be sortable, the table must be consistent.\n\t\t\t * However, multiple different tables on the page can use different\n\t\t\t * decimal place characters.\n\t\t\t *  @type string\n\t\t\t *  @default \n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.decimal\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"decimal\": \",\"\n\t\t\t *          \"thousands\": \".\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sDecimal\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * DataTables has a build in number formatter (`formatNumber`) which is\n\t\t\t * used to format large numbers that are used in the table information.\n\t\t\t * By default a comma is used, but this can be trivially changed to any\n\t\t\t * character you wish with this parameter.\n\t\t\t *  @type string\n\t\t\t *  @default ,\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.thousands\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"thousands\": \"'\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sThousands\": \",\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Detail the action that will be taken when the drop down menu for the\n\t\t\t * pagination length option is changed. The '_MENU_' variable is replaced\n\t\t\t * with a default select list of 10, 25, 50 and 100, and can be replaced\n\t\t\t * with a custom select box if required.\n\t\t\t *  @type string\n\t\t\t *  @default Show _MENU_ entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.lengthMenu\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Language change only\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"lengthMenu\": \"Display _MENU_ records\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Language and options change\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"lengthMenu\": 'Display <select>'+\n\t\t\t *            '<option value=\"10\">10</option>'+\n\t\t\t *            '<option value=\"20\">20</option>'+\n\t\t\t *            '<option value=\"30\">30</option>'+\n\t\t\t *            '<option value=\"40\">40</option>'+\n\t\t\t *            '<option value=\"50\">50</option>'+\n\t\t\t *            '<option value=\"-1\">All</option>'+\n\t\t\t *            '</select> records'\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sLengthMenu\": \"Show _MENU_ entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * When using Ajax sourced data and during the first draw when DataTables is\n\t\t\t * gathering the data, this message is shown in an empty row in the table to\n\t\t\t * indicate to the end user the the data is being loaded. Note that this\n\t\t\t * parameter is not used when loading data by server-side processing, just\n\t\t\t * Ajax sourced data with client-side processing.\n\t\t\t *  @type string\n\t\t\t *  @default Loading...\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.loadingRecords\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"loadingRecords\": \"Please wait - loading...\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sLoadingRecords\": \"Loading...\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Text which is displayed when the table is processing a user action\n\t\t\t * (usually a sort command or similar).\n\t\t\t *  @type string\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.processing\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"processing\": \"DataTables is currently busy\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sProcessing\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Details the actions that will be taken when the user types into the\n\t\t\t * filtering input text box. The variable \"_INPUT_\", if used in the string,\n\t\t\t * is replaced with the HTML text box for the filtering input allowing\n\t\t\t * control over where it appears in the string. If \"_INPUT_\" is not given\n\t\t\t * then the input box is appended to the string automatically.\n\t\t\t *  @type string\n\t\t\t *  @default Search:\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.search\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Input text box will be appended at the end automatically\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"search\": \"Filter records:\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Specify where the filter should appear\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"search\": \"Apply filter _INPUT_ to table\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sSearch\": \"Search:\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Assign a `placeholder` attribute to the search `input` element\n\t\t\t *  @type string\n\t\t\t *  @default \n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.searchPlaceholder\n\t\t\t */\n\t\t\t\"sSearchPlaceholder\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * All of the language information can be stored in a file on the\n\t\t\t * server-side, which DataTables will look up if this parameter is passed.\n\t\t\t * It must store the URL of the language file, which is in a JSON format,\n\t\t\t * and the object has the same properties as the oLanguage object in the\n\t\t\t * initialiser object (i.e. the above parameters). Please refer to one of\n\t\t\t * the example language files to see how this works in action.\n\t\t\t *  @type string\n\t\t\t *  @default <i>Empty string - i.e. disabled</i>\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.url\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"url\": \"http://www.sprymedia.co.uk/dataTables/lang.txt\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sUrl\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Text shown inside the table records when the is no information to be\n\t\t\t * displayed after filtering. `emptyTable` is shown when there is simply no\n\t\t\t * information in the table at all (regardless of filtering).\n\t\t\t *  @type string\n\t\t\t *  @default No matching records found\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.zeroRecords\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"zeroRecords\": \"No records to display\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sZeroRecords\": \"No matching records found\"\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * This parameter allows you to have define the global filtering state at\n\t\t * initialisation time. As an object the `search` parameter must be\n\t\t * defined, but all other parameters are optional. When `regex` is true,\n\t\t * the search string will be treated as a regular expression, when false\n\t\t * (default) it will be treated as a straight string. When `smart`\n\t\t * DataTables will use it's smart filtering methods (to word match at\n\t\t * any point in the data), when false this will not be done.\n\t\t *  @namespace\n\t\t *  @extends DataTable.models.oSearch\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.search\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"search\": {\"search\": \"Initial search\"}\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"oSearch\": $.extend( {}, DataTable.models.oSearch ),\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * By default DataTables will look for the property `data` (or `aaData` for\n\t\t * compatibility with DataTables 1.9-) when obtaining data from an Ajax\n\t\t * source or for server-side processing - this parameter allows that\n\t\t * property to be changed. You can use Javascript dotted object notation to\n\t\t * get a data source for multiple levels of nesting.\n\t\t *  @type string\n\t\t *  @default data\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.ajaxDataProp\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sAjaxDataProp\": \"data\",\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * You can instruct DataTables to load data from an external\n\t\t * source using this parameter (use aData if you want to pass data in you\n\t\t * already have). Simply provide a url a JSON object can be obtained from.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.ajaxSource\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sAjaxSource\": null,\n\t\n\t\n\t\t/**\n\t\t * This initialisation variable allows you to specify exactly where in the\n\t\t * DOM you want DataTables to inject the various controls it adds to the page\n\t\t * (for example you might want the pagination controls at the top of the\n\t\t * table). DIV elements (with or without a custom class) can also be added to\n\t\t * aid styling. The follow syntax is used:\n\t\t *   <ul>\n\t\t *     <li>The following options are allowed:\n\t\t *       <ul>\n\t\t *         <li>'l' - Length changing</li>\n\t\t *         <li>'f' - Filtering input</li>\n\t\t *         <li>'t' - The table!</li>\n\t\t *         <li>'i' - Information</li>\n\t\t *         <li>'p' - Pagination</li>\n\t\t *         <li>'r' - pRocessing</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>The following constants are allowed:\n\t\t *       <ul>\n\t\t *         <li>'H' - jQueryUI theme \"header\" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>\n\t\t *         <li>'F' - jQueryUI theme \"footer\" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>The following syntax is expected:\n\t\t *       <ul>\n\t\t *         <li>'&lt;' and '&gt;' - div elements</li>\n\t\t *         <li>'&lt;\"class\" and '&gt;' - div with a class</li>\n\t\t *         <li>'&lt;\"#id\" and '&gt;' - div with an ID</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>Examples:\n\t\t *       <ul>\n\t\t *         <li>'&lt;\"wrapper\"flipt&gt;'</li>\n\t\t *         <li>'&lt;lf&lt;t&gt;ip&gt;'</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *   </ul>\n\t\t *  @type string\n\t\t *  @default lfrtip <i>(when `jQueryUI` is false)</i> <b>or</b>\n\t\t *    <\"H\"lfr>t<\"F\"ip> <i>(when `jQueryUI` is true)</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.dom\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"dom\": '&lt;\"top\"i&gt;rt&lt;\"bottom\"flp&gt;&lt;\"clear\"&gt;'\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sDom\": \"lfrtip\",\n\t\n\t\n\t\t/**\n\t\t * Search delay option. This will throttle full table searches that use the\n\t\t * DataTables provided search input element (it does not effect calls to\n\t\t * `dt-api search()`, providing a delay before the search is made.\n\t\t *  @type integer\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.searchDelay\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searchDelay\": 200\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"searchDelay\": null,\n\t\n\t\n\t\t/**\n\t\t * DataTables features six different built-in options for the buttons to\n\t\t * display for pagination control:\n\t\t *\n\t\t * * `numbers` - Page number buttons only\n\t\t * * `simple` - 'Previous' and 'Next' buttons only\n\t\t * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers\n\t\t * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons\n\t\t * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus page numbers\n\t\t * * `first_last_numbers` - 'First' and 'Last' buttons, plus page numbers\n\t\t *  \n\t\t * Further methods can be added using {@link DataTable.ext.oPagination}.\n\t\t *  @type string\n\t\t *  @default simple_numbers\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.pagingType\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"pagingType\": \"full_numbers\"\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"sPaginationType\": \"simple_numbers\",\n\t\n\t\n\t\t/**\n\t\t * Enable horizontal scrolling. When a table is too wide to fit into a\n\t\t * certain layout, or you have a large number of columns in the table, you\n\t\t * can enable x-scrolling to show the table in a viewport, which can be\n\t\t * scrolled. This property can be `true` which will allow the table to\n\t\t * scroll horizontally when needed, or any CSS unit, or a number (in which\n\t\t * case it will be treated as a pixel measurement). Setting as simply `true`\n\t\t * is recommended.\n\t\t *  @type boolean|string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.scrollX\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollX\": true,\n\t\t *        \"scrollCollapse\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollX\": \"\",\n\t\n\t\n\t\t/**\n\t\t * This property can be used to force a DataTable to use more width than it\n\t\t * might otherwise do when x-scrolling is enabled. For example if you have a\n\t\t * table which requires to be well spaced, this parameter is useful for\n\t\t * \"over-sizing\" the table, and thus forcing scrolling. This property can by\n\t\t * any CSS unit, or a number (in which case it will be treated as a pixel\n\t\t * measurement).\n\t\t *  @type string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.scrollXInner\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollX\": \"100%\",\n\t\t *        \"scrollXInner\": \"110%\"\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollXInner\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Enable vertical scrolling. Vertical scrolling will constrain the DataTable\n\t\t * to the given height, and enable scrolling for any data which overflows the\n\t\t * current viewport. This can be used as an alternative to paging to display\n\t\t * a lot of data in a small area (although paging and scrolling can both be\n\t\t * enabled at the same time). This property can be any CSS unit, or a number\n\t\t * (in which case it will be treated as a pixel measurement).\n\t\t *  @type string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.scrollY\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200px\",\n\t\t *        \"paginate\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollY\": \"\",\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * Set the HTTP method that is used to make the Ajax call for server-side\n\t\t * processing or Ajax sourced data.\n\t\t *  @type string\n\t\t *  @default GET\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverMethod\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sServerMethod\": \"GET\",\n\t\n\t\n\t\t/**\n\t\t * DataTables makes use of renderers when displaying HTML elements for\n\t\t * a table. These renderers can be added or modified by plug-ins to\n\t\t * generate suitable mark-up for a site. For example the Bootstrap\n\t\t * integration plug-in for DataTables uses a paging button renderer to\n\t\t * display pagination buttons in the mark-up required by Bootstrap.\n\t\t *\n\t\t * For further information about the renderers available see\n\t\t * DataTable.ext.renderer\n\t\t *  @type string|object\n\t\t *  @default null\n\t\t *\n\t\t *  @name DataTable.defaults.renderer\n\t\t *\n\t\t */\n\t\t\"renderer\": null,\n\t\n\t\n\t\t/**\n\t\t * Set the data property name that DataTables should use to get a row's id\n\t\t * to set as the `id` property in the node.\n\t\t *  @type string\n\t\t *  @default DT_RowId\n\t\t *\n\t\t *  @name DataTable.defaults.rowId\n\t\t */\n\t\t\"rowId\": \"DT_RowId\"\n\t};\n\t\n\t_fnHungarianMap( DataTable.defaults );\n\t\n\t\n\t\n\t/*\n\t * Developer note - See note in model.defaults.js about the use of Hungarian\n\t * notation and camel case.\n\t */\n\t\n\t/**\n\t * Column options that can be given to DataTables at initialisation time.\n\t *  @namespace\n\t */\n\tDataTable.defaults.column = {\n\t\t/**\n\t\t * Define which column(s) an order will occur on for this column. This\n\t\t * allows a column's ordering to take multiple columns into account when\n\t\t * doing a sort or use the data from a different column. For example first\n\t\t * name / last name columns make sense to do a multi-column sort over the\n\t\t * two columns.\n\t\t *  @type array|int\n\t\t *  @default null <i>Takes the value of the column index automatically</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderData\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderData\": [ 0, 1 ], \"targets\": [ 0 ] },\n\t\t *          { \"orderData\": [ 1, 0 ], \"targets\": [ 1 ] },\n\t\t *          { \"orderData\": 2, \"targets\": [ 2 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"orderData\": [ 0, 1 ] },\n\t\t *          { \"orderData\": [ 1, 0 ] },\n\t\t *          { \"orderData\": 2 },\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aDataSort\": null,\n\t\t\"iDataSort\": -1,\n\t\n\t\n\t\t/**\n\t\t * You can control the default ordering direction, and even alter the\n\t\t * behaviour of the sort handler (i.e. only allow ascending ordering etc)\n\t\t * using this parameter.\n\t\t *  @type array\n\t\t *  @default [ 'asc', 'desc' ]\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderSequence\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderSequence\": [ \"asc\" ], \"targets\": [ 1 ] },\n\t\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ], \"targets\": [ 2 ] },\n\t\t *          { \"orderSequence\": [ \"desc\" ], \"targets\": [ 3 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          { \"orderSequence\": [ \"asc\" ] },\n\t\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ] },\n\t\t *          { \"orderSequence\": [ \"desc\" ] },\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"asSorting\": [ 'asc', 'desc' ],\n\t\n\t\n\t\t/**\n\t\t * Enable or disable filtering on the data in this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.searchable\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"searchable\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"searchable\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bSearchable\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable ordering on this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderable\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderable\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"orderable\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortable\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the display of this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.visible\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"visible\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"visible\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bVisible\": true,\n\t\n\t\n\t\t/**\n\t\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t\t * allowing you to modify the DOM element (add background colour for example) when the\n\t\t * element is available.\n\t\t *  @type function\n\t\t *  @param {element} td The TD node that has been created\n\t\t *  @param {*} cellData The Data for the cell\n\t\t *  @param {array|object} rowData The data for the whole row\n\t\t *  @param {int} row The row index for the aoData data store\n\t\t *  @param {int} col The column index for aoColumns\n\t\t *\n\t\t *  @name DataTable.defaults.column.createdCell\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [3],\n\t\t *          \"createdCell\": function (td, cellData, rowData, row, col) {\n\t\t *            if ( cellData == \"1.7\" ) {\n\t\t *              $(td).css('color', 'blue')\n\t\t *            }\n\t\t *          }\n\t\t *        } ]\n\t\t *      });\n\t\t *    } );\n\t\t */\n\t\t\"fnCreatedCell\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter has been replaced by `data` in DataTables to ensure naming\n\t\t * consistency. `dataProp` can still be used, as there is backwards\n\t\t * compatibility in DataTables for this option, but it is strongly\n\t\t * recommended that you use `data` in preference to `dataProp`.\n\t\t *  @name DataTable.defaults.column.dataProp\n\t\t */\n\t\n\t\n\t\t/**\n\t\t * This property can be used to read data from any data source property,\n\t\t * including deeply nested objects / properties. `data` can be given in a\n\t\t * number of different ways which effect its behaviour:\n\t\t *\n\t\t * * `integer` - treated as an array index for the data source. This is the\n\t\t *   default that DataTables uses (incrementally increased for each column).\n\t\t * * `string` - read an object property from the data source. There are\n\t\t *   three 'special' options that can be used in the string to alter how\n\t\t *   DataTables reads the data from the source object:\n\t\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t\t *      Javascript to read from nested objects, so to can the options\n\t\t *      specified in `data`. For example: `browser.version` or\n\t\t *      `browser.name`. If your object parameter name contains a period, use\n\t\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t\t *      from and array source, joining the data with the characters provided\n\t\t *      between the two brackets. For example: `name[, ]` would provide a\n\t\t *      comma-space separated list from the source array. If no characters\n\t\t *      are provided between the brackets, the original array source is\n\t\t *      returned.\n\t\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t\t *      execute a function of the name given. For example: `browser()` for a\n\t\t *      simple function on the data source, `browser.version()` for a\n\t\t *      function in a nested property or even `browser().version` to get an\n\t\t *      object property if the function called returns an object. Note that\n\t\t *      function notation is recommended for use in `render` rather than\n\t\t *      `data` as it is much simpler to use as a renderer.\n\t\t * * `null` - use the original data source for the row rather than plucking\n\t\t *   data directly from it. This action has effects on two other\n\t\t *   initialisation options:\n\t\t *    * `defaultContent` - When null is given as the `data` option and\n\t\t *      `defaultContent` is specified for the column, the value defined by\n\t\t *      `defaultContent` will be used for the cell.\n\t\t *    * `render` - When null is used for the `data` option and the `render`\n\t\t *      option is specified for the column, the whole data source for the\n\t\t *      row is used for the renderer.\n\t\t * * `function` - the function given will be executed whenever DataTables\n\t\t *   needs to set or get the data for a cell in the column. The function\n\t\t *   takes three parameters:\n\t\t *    * Parameters:\n\t\t *      * `{array|object}` The data source for the row\n\t\t *      * `{string}` The type call data requested - this will be 'set' when\n\t\t *        setting data or 'filter', 'display', 'type', 'sort' or undefined\n\t\t *        when gathering data. Note that when `undefined` is given for the\n\t\t *        type DataTables expects to get the raw data for the object back<\n\t\t *      * `{*}` Data to set when the second parameter is 'set'.\n\t\t *    * Return:\n\t\t *      * The return value from the function is not required when 'set' is\n\t\t *        the type of call, but otherwise the return is what will be used\n\t\t *        for the data requested.\n\t\t *\n\t\t * Note that `data` is a getter and setter option. If you just require\n\t\t * formatting of data for output, you will likely want to use `render` which\n\t\t * is simply a getter and thus simpler to use.\n\t\t *\n\t\t * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The\n\t\t * name change reflects the flexibility of this property and is consistent\n\t\t * with the naming of mRender. If 'mDataProp' is given, then it will still\n\t\t * be used by DataTables, as it automatically maps the old name to the new\n\t\t * if required.\n\t\t *\n\t\t *  @type string|int|function|null\n\t\t *  @default null <i>Use automatically calculated column index</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.data\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Read table data from objects\n\t\t *    // JSON structure for each row:\n\t\t *    //   {\n\t\t *    //      \"engine\": {value},\n\t\t *    //      \"browser\": {value},\n\t\t *    //      \"platform\": {value},\n\t\t *    //      \"version\": {value},\n\t\t *    //      \"grade\": {value}\n\t\t *    //   }\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/objects.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          { \"data\": \"platform\" },\n\t\t *          { \"data\": \"version\" },\n\t\t *          { \"data\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Read information from deeply nested objects\n\t\t *    // JSON structure for each row:\n\t\t *    //   {\n\t\t *    //      \"engine\": {value},\n\t\t *    //      \"browser\": {value},\n\t\t *    //      \"platform\": {\n\t\t *    //         \"inner\": {value}\n\t\t *    //      },\n\t\t *    //      \"details\": [\n\t\t *    //         {value}, {value}\n\t\t *    //      ]\n\t\t *    //   }\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          { \"data\": \"platform.inner\" },\n\t\t *          { \"data\": \"details.0\" },\n\t\t *          { \"data\": \"details.1\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `data` as a function to provide different information for\n\t\t *    // sorting, filtering and display. In this case, currency (price)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": function ( source, type, val ) {\n\t\t *            if (type === 'set') {\n\t\t *              source.price = val;\n\t\t *              // Store the computed display and filter values for efficiency\n\t\t *              source.price_display = val==\"\" ? \"\" : \"$\"+numberFormat(val);\n\t\t *              source.price_filter  = val==\"\" ? \"\" : \"$\"+numberFormat(val)+\" \"+val;\n\t\t *              return;\n\t\t *            }\n\t\t *            else if (type === 'display') {\n\t\t *              return source.price_display;\n\t\t *            }\n\t\t *            else if (type === 'filter') {\n\t\t *              return source.price_filter;\n\t\t *            }\n\t\t *            // 'sort', 'type' and undefined all just use the integer\n\t\t *            return source.price;\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using default content\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null,\n\t\t *          \"defaultContent\": \"Click to edit\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using array notation - outputting a list from an array\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": \"name[, ]\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t */\n\t\t\"mData\": null,\n\t\n\t\n\t\t/**\n\t\t * This property is the rendering partner to `data` and it is suggested that\n\t\t * when you want to manipulate data for display (including filtering,\n\t\t * sorting etc) without altering the underlying data for the table, use this\n\t\t * property. `render` can be considered to be the the read only companion to\n\t\t * `data` which is read / write (then as such more complex). Like `data`\n\t\t * this option can be given in a number of different ways to effect its\n\t\t * behaviour:\n\t\t *\n\t\t * * `integer` - treated as an array index for the data source. This is the\n\t\t *   default that DataTables uses (incrementally increased for each column).\n\t\t * * `string` - read an object property from the data source. There are\n\t\t *   three 'special' options that can be used in the string to alter how\n\t\t *   DataTables reads the data from the source object:\n\t\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t\t *      Javascript to read from nested objects, so to can the options\n\t\t *      specified in `data`. For example: `browser.version` or\n\t\t *      `browser.name`. If your object parameter name contains a period, use\n\t\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t\t *      from and array source, joining the data with the characters provided\n\t\t *      between the two brackets. For example: `name[, ]` would provide a\n\t\t *      comma-space separated list from the source array. If no characters\n\t\t *      are provided between the brackets, the original array source is\n\t\t *      returned.\n\t\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t\t *      execute a function of the name given. For example: `browser()` for a\n\t\t *      simple function on the data source, `browser.version()` for a\n\t\t *      function in a nested property or even `browser().version` to get an\n\t\t *      object property if the function called returns an object.\n\t\t * * `object` - use different data for the different data types requested by\n\t\t *   DataTables ('filter', 'display', 'type' or 'sort'). The property names\n\t\t *   of the object is the data type the property refers to and the value can\n\t\t *   defined using an integer, string or function using the same rules as\n\t\t *   `render` normally does. Note that an `_` option _must_ be specified.\n\t\t *   This is the default value to use if you haven't specified a value for\n\t\t *   the data type requested by DataTables.\n\t\t * * `function` - the function given will be executed whenever DataTables\n\t\t *   needs to set or get the data for a cell in the column. The function\n\t\t *   takes three parameters:\n\t\t *    * Parameters:\n\t\t *      * {array|object} The data source for the row (based on `data`)\n\t\t *      * {string} The type call data requested - this will be 'filter',\n\t\t *        'display', 'type' or 'sort'.\n\t\t *      * {array|object} The full data source for the row (not based on\n\t\t *        `data`)\n\t\t *    * Return:\n\t\t *      * The return value from the function is what will be used for the\n\t\t *        data requested.\n\t\t *\n\t\t *  @type string|int|function|object|null\n\t\t *  @default null Use the data source value.\n\t\t *\n\t\t *  @name DataTable.defaults.column.render\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Create a comma separated list from an array of objects\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          {\n\t\t *            \"data\": \"platform\",\n\t\t *            \"render\": \"[, ].name\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Execute a function to obtain data\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t\t *          \"render\": \"browserName()\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // As an object, extracting different data for the different types\n\t\t *    // This would be used with a data source such as:\n\t\t *    //   { \"phone\": 5552368, \"phone_filter\": \"5552368 555-2368\", \"phone_display\": \"555-2368\" }\n\t\t *    // Here the `phone` integer is used for sorting and type detection, while `phone_filter`\n\t\t *    // (which has both forms) is used for filtering for if a user inputs either format, while\n\t\t *    // the formatted phone number is the one that is shown in the table.\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t\t *          \"render\": {\n\t\t *            \"_\": \"phone\",\n\t\t *            \"filter\": \"phone_filter\",\n\t\t *            \"display\": \"phone_display\"\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Use as a function to create a link from the data source\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": \"download_link\",\n\t\t *          \"render\": function ( data, type, full ) {\n\t\t *            return '<a href=\"'+data+'\">Download</a>';\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"mRender\": null,\n\t\n\t\n\t\t/**\n\t\t * Change the cell type created for the column - either TD cells or TH cells. This\n\t\t * can be useful as TH cells have semantic meaning in the table body, allowing them\n\t\t * to act as a header for a row (you may wish to add scope='row' to the TH elements).\n\t\t *  @type string\n\t\t *  @default td\n\t\t *\n\t\t *  @name DataTable.defaults.column.cellType\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Make the first column use TH cells\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"cellType\": \"th\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sCellType\": \"td\",\n\t\n\t\n\t\t/**\n\t\t * Class to give to each cell in this column.\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.class\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"class\": \"my_class\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"class\": \"my_class\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sClass\": \"\",\n\t\n\t\t/**\n\t\t * When DataTables calculates the column widths to assign to each column,\n\t\t * it finds the longest string in each column and then constructs a\n\t\t * temporary table and reads the widths from that. The problem with this\n\t\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t\t * string - thus the calculation can go wrong (doing it properly and putting\n\t\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t\t * a \"work around\" we provide this option. It will append its value to the\n\t\t * text that is found to be the longest string for the column - i.e. padding.\n\t\t * Generally you shouldn't need this!\n\t\t *  @type string\n\t\t *  @default <i>Empty string<i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.contentPadding\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          {\n\t\t *            \"contentPadding\": \"mmm\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sContentPadding\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Allows a default value to be given for a column's data, and will be used\n\t\t * whenever a null data source is encountered (this can be because `data`\n\t\t * is set to null, or because the data source itself is null).\n\t\t *  @type string\n\t\t *  @default null\n\t\t *\n\t\t *  @name DataTable.defaults.column.defaultContent\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          {\n\t\t *            \"data\": null,\n\t\t *            \"defaultContent\": \"Edit\",\n\t\t *            \"targets\": [ -1 ]\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          {\n\t\t *            \"data\": null,\n\t\t *            \"defaultContent\": \"Edit\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sDefaultContent\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter is only used in DataTables' server-side processing. It can\n\t\t * be exceptionally useful to know what columns are being displayed on the\n\t\t * client side, and to map these to database fields. When defined, the names\n\t\t * also allow DataTables to reorder information from the server if it comes\n\t\t * back in an unexpected order (i.e. if you switch your columns around on the\n\t\t * client-side, your server-side code does not also need updating).\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.name\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"name\": \"engine\", \"targets\": [ 0 ] },\n\t\t *          { \"name\": \"browser\", \"targets\": [ 1 ] },\n\t\t *          { \"name\": \"platform\", \"targets\": [ 2 ] },\n\t\t *          { \"name\": \"version\", \"targets\": [ 3 ] },\n\t\t *          { \"name\": \"grade\", \"targets\": [ 4 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"name\": \"engine\" },\n\t\t *          { \"name\": \"browser\" },\n\t\t *          { \"name\": \"platform\" },\n\t\t *          { \"name\": \"version\" },\n\t\t *          { \"name\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sName\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Defines a data source type for the ordering which can be used to read\n\t\t * real-time information from the table (updating the internally cached\n\t\t * version) prior to ordering. This allows ordering to occur on user\n\t\t * editable elements such as form inputs.\n\t\t *  @type string\n\t\t *  @default std\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderDataType\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderDataType\": \"dom-text\", \"targets\": [ 2, 3 ] },\n\t\t *          { \"type\": \"numeric\", \"targets\": [ 3 ] },\n\t\t *          { \"orderDataType\": \"dom-select\", \"targets\": [ 4 ] },\n\t\t *          { \"orderDataType\": \"dom-checkbox\", \"targets\": [ 5 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          { \"orderDataType\": \"dom-text\" },\n\t\t *          { \"orderDataType\": \"dom-text\", \"type\": \"numeric\" },\n\t\t *          { \"orderDataType\": \"dom-select\" },\n\t\t *          { \"orderDataType\": \"dom-checkbox\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sSortDataType\": \"std\",\n\t\n\t\n\t\t/**\n\t\t * The title of this column.\n\t\t *  @type string\n\t\t *  @default null <i>Derived from the 'TH' value for this column in the\n\t\t *    original HTML table.</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.title\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"title\": \"My column title\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"My column title\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sTitle\": null,\n\t\n\t\n\t\t/**\n\t\t * The type allows you to specify how the data for this column will be\n\t\t * ordered. Four types (string, numeric, date and html (which will strip\n\t\t * HTML tags before ordering)) are currently available. Note that only date\n\t\t * formats understood by Javascript's Date() object will be accepted as type\n\t\t * date. For example: \"Mar 26, 2008 5:03 PM\". May take the values: 'string',\n\t\t * 'numeric', 'date' or 'html' (by default). Further types can be adding\n\t\t * through plug-ins.\n\t\t *  @type string\n\t\t *  @default null <i>Auto-detected from raw data</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.type\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"type\": \"html\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"type\": \"html\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sType\": null,\n\t\n\t\n\t\t/**\n\t\t * Defining the width of the column, this parameter may take any CSS value\n\t\t * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not\n\t\t * been given a specific width through this interface ensuring that the table\n\t\t * remains readable.\n\t\t *  @type string\n\t\t *  @default null <i>Automatic</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.width\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"width\": \"20%\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"width\": \"20%\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sWidth\": null\n\t};\n\t\n\t_fnHungarianMap( DataTable.defaults.column );\n\t\n\t\n\t\n\t/**\n\t * DataTables settings object - this holds all the information needed for a\n\t * given table, including configuration, data and current application of the\n\t * table options. DataTables does not have a single instance for each DataTable\n\t * with the settings attached to that instance, but rather instances of the\n\t * DataTable \"class\" are created on-the-fly as needed (typically by a\n\t * $().dataTable() call) and the settings object is then applied to that\n\t * instance.\n\t *\n\t * Note that this object is related to {@link DataTable.defaults} but this\n\t * one is the internal data store for DataTables's cache of columns. It should\n\t * NOT be manipulated outside of DataTables. Any configuration should be done\n\t * through the initialisation options.\n\t *  @namespace\n\t *  @todo Really should attach the settings object to individual instances so we\n\t *    don't need to create new instances on each $().dataTable() call (if the\n\t *    table already exists). It would also save passing oSettings around and\n\t *    into every single function. However, this is a very significant\n\t *    architecture change for DataTables and will almost certainly break\n\t *    backwards compatibility with older installations. This is something that\n\t *    will be done in 2.0.\n\t */\n\tDataTable.models.oSettings = {\n\t\t/**\n\t\t * Primary features of DataTables and their enablement state.\n\t\t *  @namespace\n\t\t */\n\t\t\"oFeatures\": {\n\t\n\t\t\t/**\n\t\t\t * Flag to say if DataTables should automatically try to calculate the\n\t\t\t * optimum table and columns widths (true) or not (false).\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bAutoWidth\": null,\n\t\n\t\t\t/**\n\t\t\t * Delay the creation of TR and TD elements until they are actually\n\t\t\t * needed by a driven page draw. This can give a significant speed\n\t\t\t * increase for Ajax source and Javascript source data, but makes no\n\t\t\t * difference at all for DOM and server-side processing tables.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bDeferRender\": null,\n\t\n\t\t\t/**\n\t\t\t * Enable filtering on the table or not. Note that if this is disabled\n\t\t\t * then there is no filtering at all on the table, including fnFilter.\n\t\t\t * To just remove the filtering input use sDom and remove the 'f' option.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bFilter\": null,\n\t\n\t\t\t/**\n\t\t\t * Table information element (the 'Showing x of y records' div) enable\n\t\t\t * flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bInfo\": null,\n\t\n\t\t\t/**\n\t\t\t * Present a user control allowing the end user to change the page size\n\t\t\t * when pagination is enabled.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bLengthChange\": null,\n\t\n\t\t\t/**\n\t\t\t * Pagination enabled or not. Note that if this is disabled then length\n\t\t\t * changing must also be disabled.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bPaginate\": null,\n\t\n\t\t\t/**\n\t\t\t * Processing indicator enable flag whenever DataTables is enacting a\n\t\t\t * user request - typically an Ajax request for server-side processing.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bProcessing\": null,\n\t\n\t\t\t/**\n\t\t\t * Server-side processing enabled flag - when enabled DataTables will\n\t\t\t * get all data from the server for every draw - there is no filtering,\n\t\t\t * sorting or paging done on the client-side.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bServerSide\": null,\n\t\n\t\t\t/**\n\t\t\t * Sorting enablement flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSort\": null,\n\t\n\t\t\t/**\n\t\t\t * Multi-column sorting\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSortMulti\": null,\n\t\n\t\t\t/**\n\t\t\t * Apply a class to the columns which are being sorted to provide a\n\t\t\t * visual highlight or not. This can slow things down when enabled since\n\t\t\t * there is a lot of DOM interaction.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSortClasses\": null,\n\t\n\t\t\t/**\n\t\t\t * State saving enablement flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bStateSave\": null\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Scrolling settings for a table.\n\t\t *  @namespace\n\t\t */\n\t\t\"oScroll\": {\n\t\t\t/**\n\t\t\t * When the table is shorter in height than sScrollY, collapse the\n\t\t\t * table container down to the height of the table (when true).\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bCollapse\": null,\n\t\n\t\t\t/**\n\t\t\t * Width of the scrollbar for the web-browser's platform. Calculated\n\t\t\t * during table initialisation.\n\t\t\t *  @type int\n\t\t\t *  @default 0\n\t\t\t */\n\t\t\t\"iBarWidth\": 0,\n\t\n\t\t\t/**\n\t\t\t * Viewport width for horizontal scrolling. Horizontal scrolling is\n\t\t\t * disabled if an empty string.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t */\n\t\t\t\"sX\": null,\n\t\n\t\t\t/**\n\t\t\t * Width to expand the table to when using x-scrolling. Typically you\n\t\t\t * should not need to use this.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t *  @deprecated\n\t\t\t */\n\t\t\t\"sXInner\": null,\n\t\n\t\t\t/**\n\t\t\t * Viewport height for vertical scrolling. Vertical scrolling is disabled\n\t\t\t * if an empty string.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t */\n\t\t\t\"sY\": null\n\t\t},\n\t\n\t\t/**\n\t\t * Language information for the table.\n\t\t *  @namespace\n\t\t *  @extends DataTable.defaults.oLanguage\n\t\t */\n\t\t\"oLanguage\": {\n\t\t\t/**\n\t\t\t * Information callback function. See\n\t\t\t * {@link DataTable.defaults.fnInfoCallback}\n\t\t\t *  @type function\n\t\t\t *  @default null\n\t\t\t */\n\t\t\t\"fnInfoCallback\": null\n\t\t},\n\t\n\t\t/**\n\t\t * Browser support parameters\n\t\t *  @namespace\n\t\t */\n\t\t\"oBrowser\": {\n\t\t\t/**\n\t\t\t * Indicate if the browser incorrectly calculates width:100% inside a\n\t\t\t * scrolling element (IE6/7)\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bScrollOversize\": false,\n\t\n\t\t\t/**\n\t\t\t * Determine if the vertical scrollbar is on the right or left of the\n\t\t\t * scrolling container - needed for rtl language layout, although not\n\t\t\t * all browsers move the scrollbar (Safari).\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bScrollbarLeft\": false,\n\t\n\t\t\t/**\n\t\t\t * Flag for if `getBoundingClientRect` is fully supported or not\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bBounding\": false,\n\t\n\t\t\t/**\n\t\t\t * Browser scrollbar width\n\t\t\t *  @type integer\n\t\t\t *  @default 0\n\t\t\t */\n\t\t\t\"barWidth\": 0\n\t\t},\n\t\n\t\n\t\t\"ajax\": null,\n\t\n\t\n\t\t/**\n\t\t * Array referencing the nodes which are used for the features. The\n\t\t * parameters of this object match what is allowed by sDom - i.e.\n\t\t *   <ul>\n\t\t *     <li>'l' - Length changing</li>\n\t\t *     <li>'f' - Filtering input</li>\n\t\t *     <li>'t' - The table!</li>\n\t\t *     <li>'i' - Information</li>\n\t\t *     <li>'p' - Pagination</li>\n\t\t *     <li>'r' - pRocessing</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aanFeatures\": [],\n\t\n\t\t/**\n\t\t * Store data information - see {@link DataTable.models.oRow} for detailed\n\t\t * information.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoData\": [],\n\t\n\t\t/**\n\t\t * Array of indexes which are in the current display (after filtering etc)\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aiDisplay\": [],\n\t\n\t\t/**\n\t\t * Array of indexes for display - no filtering\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aiDisplayMaster\": [],\n\t\n\t\t/**\n\t\t * Map of row ids to data indexes\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"aIds\": {},\n\t\n\t\t/**\n\t\t * Store information about each column that is in use\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoColumns\": [],\n\t\n\t\t/**\n\t\t * Store information about the table's header\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoHeader\": [],\n\t\n\t\t/**\n\t\t * Store information about the table's footer\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoFooter\": [],\n\t\n\t\t/**\n\t\t * Store the applied global search information in case we want to force a\n\t\t * research or compare the old search to a new one.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @namespace\n\t\t *  @extends DataTable.models.oSearch\n\t\t */\n\t\t\"oPreviousSearch\": {},\n\t\n\t\t/**\n\t\t * Store the applied search for each column - see\n\t\t * {@link DataTable.models.oSearch} for the format that is used for the\n\t\t * filtering information for each column.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoPreSearchCols\": [],\n\t\n\t\t/**\n\t\t * Sorting that is applied to the table. Note that the inner arrays are\n\t\t * used in the following manner:\n\t\t * <ul>\n\t\t *   <li>Index 0 - column number</li>\n\t\t *   <li>Index 1 - current sorting direction</li>\n\t\t * </ul>\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @todo These inner arrays should really be objects\n\t\t */\n\t\t\"aaSorting\": null,\n\t\n\t\t/**\n\t\t * Sorting that is always applied to the table (i.e. prefixed in front of\n\t\t * aaSorting).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aaSortingFixed\": [],\n\t\n\t\t/**\n\t\t * Classes to use for the striping of a table.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"asStripeClasses\": null,\n\t\n\t\t/**\n\t\t * If restoring a table - we should restore its striping classes as well\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"asDestroyStripes\": [],\n\t\n\t\t/**\n\t\t * If restoring a table - we should restore its width\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"sDestroyWidth\": 0,\n\t\n\t\t/**\n\t\t * Callback functions array for every time a row is inserted (i.e. on a draw).\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoRowCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for the header on each draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoHeaderCallback\": [],\n\t\n\t\t/**\n\t\t * Callback function for the footer on each draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoFooterCallback\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for draw callback functions\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoDrawCallback\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for row created function\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoRowCreatedCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for just before the table is redrawn. A return of\n\t\t * false will be used to cancel the draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoPreDrawCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for when the table has been initialised.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoInitComplete\": [],\n\t\n\t\n\t\t/**\n\t\t * Callbacks for modifying the settings to be stored for state saving, prior to\n\t\t * saving state.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateSaveParams\": [],\n\t\n\t\t/**\n\t\t * Callbacks for modifying the settings that have been stored for state saving\n\t\t * prior to using the stored values to restore the state.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoadParams\": [],\n\t\n\t\t/**\n\t\t * Callbacks for operating on the settings object once the saved state has been\n\t\t * loaded\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoaded\": [],\n\t\n\t\t/**\n\t\t * Cache the table ID for quick access\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t */\n\t\t\"sTableId\": \"\",\n\t\n\t\t/**\n\t\t * The TABLE node for the main table\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTable\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the thead element\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTHead\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the tfoot element - if it exists\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTFoot\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the tbody element\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTBody\": null,\n\t\n\t\t/**\n\t\t * Cache the wrapper node (contains all DataTables controlled elements)\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTableWrapper\": null,\n\t\n\t\t/**\n\t\t * Indicate if when using server-side processing the loading of data\n\t\t * should be deferred until the second draw.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bDeferLoading\": false,\n\t\n\t\t/**\n\t\t * Indicate if all required information has been read in\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bInitialised\": false,\n\t\n\t\t/**\n\t\t * Information about open rows. Each object in the array has the parameters\n\t\t * 'nTr' and 'nParent'\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoOpenRows\": [],\n\t\n\t\t/**\n\t\t * Dictate the positioning of DataTables' control elements - see\n\t\t * {@link DataTable.model.oInit.sDom}.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sDom\": null,\n\t\n\t\t/**\n\t\t * Search delay (in mS)\n\t\t *  @type integer\n\t\t *  @default null\n\t\t */\n\t\t\"searchDelay\": null,\n\t\n\t\t/**\n\t\t * Which type of pagination should be used.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default two_button\n\t\t */\n\t\t\"sPaginationType\": \"two_button\",\n\t\n\t\t/**\n\t\t * The state duration (for `stateSave`) in seconds.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"iStateDuration\": 0,\n\t\n\t\t/**\n\t\t * Array of callback functions for state saving. Each array element is an\n\t\t * object with the following parameters:\n\t\t *   <ul>\n\t\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t\t *       and the JSON string to save that has been thus far created. Returns\n\t\t *       a JSON string to be inserted into a json object\n\t\t *       (i.e. '\"param\": [ 0, 1, 2]')</li>\n\t\t *     <li>string:sName - name of callback</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateSave\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for state loading. Each array element is an\n\t\t * object with the following parameters:\n\t\t *   <ul>\n\t\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t\t *       and the object stored. May return false to cancel state loading</li>\n\t\t *     <li>string:sName - name of callback</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoad\": [],\n\t\n\t\t/**\n\t\t * State that was saved. Useful for back reference\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oSavedState\": null,\n\t\n\t\t/**\n\t\t * State that was loaded. Useful for back reference\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oLoadedState\": null,\n\t\n\t\t/**\n\t\t * Source url for AJAX data for the table.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sAjaxSource\": null,\n\t\n\t\t/**\n\t\t * Property from a given object from which to read the table data from. This\n\t\t * can be an empty string (when not server-side processing), in which case\n\t\t * it is  assumed an an array is given directly.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sAjaxDataProp\": null,\n\t\n\t\t/**\n\t\t * The last jQuery XHR object that was used for server-side data gathering.\n\t\t * This can be used for working with the XHR information in one of the\n\t\t * callbacks\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"jqXHR\": null,\n\t\n\t\t/**\n\t\t * JSON returned from the server in the last Ajax request\n\t\t *  @type object\n\t\t *  @default undefined\n\t\t */\n\t\t\"json\": undefined,\n\t\n\t\t/**\n\t\t * Data submitted as part of the last Ajax request\n\t\t *  @type object\n\t\t *  @default undefined\n\t\t */\n\t\t\"oAjaxData\": undefined,\n\t\n\t\t/**\n\t\t * Function to get the server-side data.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type function\n\t\t */\n\t\t\"fnServerData\": null,\n\t\n\t\t/**\n\t\t * Functions which are called prior to sending an Ajax request so extra\n\t\t * parameters can easily be sent to the server\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoServerParams\": [],\n\t\n\t\t/**\n\t\t * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if\n\t\t * required).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sServerMethod\": null,\n\t\n\t\t/**\n\t\t * Format numbers for display.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type function\n\t\t */\n\t\t\"fnFormatNumber\": null,\n\t\n\t\t/**\n\t\t * List of options that can be used for the user selectable length menu.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aLengthMenu\": null,\n\t\n\t\t/**\n\t\t * Counter for the draws that the table does. Also used as a tracker for\n\t\t * server-side processing\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"iDraw\": 0,\n\t\n\t\t/**\n\t\t * Indicate if a redraw is being done - useful for Ajax\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bDrawing\": false,\n\t\n\t\t/**\n\t\t * Draw index (iDraw) of the last error when parsing the returned data\n\t\t *  @type int\n\t\t *  @default -1\n\t\t */\n\t\t\"iDrawError\": -1,\n\t\n\t\t/**\n\t\t * Paging display length\n\t\t *  @type int\n\t\t *  @default 10\n\t\t */\n\t\t\"_iDisplayLength\": 10,\n\t\n\t\t/**\n\t\t * Paging start point - aiDisplay index\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"_iDisplayStart\": 0,\n\t\n\t\t/**\n\t\t * Server-side processing - number of records in the result set\n\t\t * (i.e. before filtering), Use fnRecordsTotal rather than\n\t\t * this property to get the value of the number of records, regardless of\n\t\t * the server-side processing setting.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *  @private\n\t\t */\n\t\t\"_iRecordsTotal\": 0,\n\t\n\t\t/**\n\t\t * Server-side processing - number of records in the current display set\n\t\t * (i.e. after filtering). Use fnRecordsDisplay rather than\n\t\t * this property to get the value of the number of records, regardless of\n\t\t * the server-side processing setting.\n\t\t *  @type boolean\n\t\t *  @default 0\n\t\t *  @private\n\t\t */\n\t\t\"_iRecordsDisplay\": 0,\n\t\n\t\t/**\n\t\t * The classes to use for the table\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"oClasses\": {},\n\t\n\t\t/**\n\t\t * Flag attached to the settings object so you can check in the draw\n\t\t * callback if filtering has been done in the draw. Deprecated in favour of\n\t\t * events.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @deprecated\n\t\t */\n\t\t\"bFiltered\": false,\n\t\n\t\t/**\n\t\t * Flag attached to the settings object so you can check in the draw\n\t\t * callback if sorting has been done in the draw. Deprecated in favour of\n\t\t * events.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @deprecated\n\t\t */\n\t\t\"bSorted\": false,\n\t\n\t\t/**\n\t\t * Indicate that if multiple rows are in the header and there is more than\n\t\t * one unique cell per column, if the top one (true) or bottom one (false)\n\t\t * should be used for sorting / title by DataTables.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortCellsTop\": null,\n\t\n\t\t/**\n\t\t * Initialisation object that is used for the table\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oInit\": null,\n\t\n\t\t/**\n\t\t * Destroy callback functions - for plug-ins to attach themselves to the\n\t\t * destroy so they can clean up markup and events.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoDestroyCallback\": [],\n\t\n\t\n\t\t/**\n\t\t * Get the number of records in the current record set, before filtering\n\t\t *  @type function\n\t\t */\n\t\t\"fnRecordsTotal\": function ()\n\t\t{\n\t\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\t\tthis._iRecordsTotal * 1 :\n\t\t\t\tthis.aiDisplayMaster.length;\n\t\t},\n\t\n\t\t/**\n\t\t * Get the number of records in the current record set, after filtering\n\t\t *  @type function\n\t\t */\n\t\t\"fnRecordsDisplay\": function ()\n\t\t{\n\t\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\t\tthis._iRecordsDisplay * 1 :\n\t\t\t\tthis.aiDisplay.length;\n\t\t},\n\t\n\t\t/**\n\t\t * Get the display end point - aiDisplay index\n\t\t *  @type function\n\t\t */\n\t\t\"fnDisplayEnd\": function ()\n\t\t{\n\t\t\tvar\n\t\t\t\tlen      = this._iDisplayLength,\n\t\t\t\tstart    = this._iDisplayStart,\n\t\t\t\tcalc     = start + len,\n\t\t\t\trecords  = this.aiDisplay.length,\n\t\t\t\tfeatures = this.oFeatures,\n\t\t\t\tpaginate = features.bPaginate;\n\t\n\t\t\tif ( features.bServerSide ) {\n\t\t\t\treturn paginate === false || len === -1 ?\n\t\t\t\t\tstart + records :\n\t\t\t\t\tMath.min( start+len, this._iRecordsDisplay );\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn ! paginate || calc>records || len===-1 ?\n\t\t\t\t\trecords :\n\t\t\t\t\tcalc;\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * The DataTables object for this table\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oInstance\": null,\n\t\n\t\t/**\n\t\t * Unique identifier for each instance of the DataTables object. If there\n\t\t * is an ID on the table node, then it takes that value, otherwise an\n\t\t * incrementing internal counter is used.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sInstance\": null,\n\t\n\t\t/**\n\t\t * tabindex attribute value that is added to DataTables control elements, allowing\n\t\t * keyboard navigation of the table and its controls.\n\t\t */\n\t\t\"iTabIndex\": 0,\n\t\n\t\t/**\n\t\t * DIV container for the footer scrolling table if scrolling\n\t\t */\n\t\t\"nScrollHead\": null,\n\t\n\t\t/**\n\t\t * DIV container for the footer scrolling table if scrolling\n\t\t */\n\t\t\"nScrollFoot\": null,\n\t\n\t\t/**\n\t\t * Last applied sort\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aLastSort\": [],\n\t\n\t\t/**\n\t\t * Stored plug-in instances\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"oPlugins\": {},\n\t\n\t\t/**\n\t\t * Function used to get a row's id from the row's data\n\t\t *  @type function\n\t\t *  @default null\n\t\t */\n\t\t\"rowIdFn\": null,\n\t\n\t\t/**\n\t\t * Data location where to store a row's id\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"rowId\": null\n\t};\n\t\n\t/**\n\t * Extension object for DataTables that is used to provide all extension\n\t * options.\n\t *\n\t * Note that the `DataTable.ext` object is available through\n\t * `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is\n\t * also aliased to `jQuery.fn.dataTableExt` for historic reasons.\n\t *  @namespace\n\t *  @extends DataTable.models.ext\n\t */\n\t\n\t\n\t/**\n\t * DataTables extensions\n\t * \n\t * This namespace acts as a collection area for plug-ins that can be used to\n\t * extend DataTables capabilities. Indeed many of the build in methods\n\t * use this method to provide their own capabilities (sorting methods for\n\t * example).\n\t *\n\t * Note that this namespace is aliased to `jQuery.fn.dataTableExt` for legacy\n\t * reasons\n\t *\n\t *  @namespace\n\t */\n\tDataTable.ext = _ext = {\n\t\t/**\n\t\t * Buttons. For use with the Buttons extension for DataTables. This is\n\t\t * defined here so other extensions can define buttons regardless of load\n\t\t * order. It is _not_ used by DataTables core.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tbuttons: {},\n\t\n\t\n\t\t/**\n\t\t * Element class names\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tclasses: {},\n\t\n\t\n\t\t/**\n\t\t * DataTables build type (expanded by the download builder)\n\t\t *\n\t\t *  @type string\n\t\t */\n\t\tbuilder: \"-source-\",\n\t\n\t\n\t\t/**\n\t\t * Error reporting.\n\t\t * \n\t\t * How should DataTables report an error. Can take the value 'alert',\n\t\t * 'throw', 'none' or a function.\n\t\t *\n\t\t *  @type string|function\n\t\t *  @default alert\n\t\t */\n\t\terrMode: \"alert\",\n\t\n\t\n\t\t/**\n\t\t * Feature plug-ins.\n\t\t * \n\t\t * This is an array of objects which describe the feature plug-ins that are\n\t\t * available to DataTables. These feature plug-ins are then available for\n\t\t * use through the `dom` initialisation option.\n\t\t * \n\t\t * Each feature plug-in is described by an object which must have the\n\t\t * following properties:\n\t\t * \n\t\t * * `fnInit` - function that is used to initialise the plug-in,\n\t\t * * `cFeature` - a character so the feature can be enabled by the `dom`\n\t\t *   instillation option. This is case sensitive.\n\t\t *\n\t\t * The `fnInit` function has the following input parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t *\n\t\t * And the following return is expected:\n\t\t * \n\t\t * * {node|null} The element which contains your feature. Note that the\n\t\t *   return may also be void if your plug-in does not require to inject any\n\t\t *   DOM elements into DataTables control (`dom`) - for example this might\n\t\t *   be useful when developing a plug-in which allows table control via\n\t\t *   keyboard entry\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    $.fn.dataTable.ext.features.push( {\n\t\t *      \"fnInit\": function( oSettings ) {\n\t\t *        return new TableTools( { \"oDTSettings\": oSettings } );\n\t\t *      },\n\t\t *      \"cFeature\": \"T\"\n\t\t *    } );\n\t\t */\n\t\tfeature: [],\n\t\n\t\n\t\t/**\n\t\t * Row searching.\n\t\t * \n\t\t * This method of searching is complimentary to the default type based\n\t\t * searching, and a lot more comprehensive as it allows you complete control\n\t\t * over the searching logic. Each element in this array is a function\n\t\t * (parameters described below) that is called for every row in the table,\n\t\t * and your logic decides if it should be included in the searching data set\n\t\t * or not.\n\t\t *\n\t\t * Searching functions have the following input parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t * 2. `{array|object}` Data for the row to be processed (same as the\n\t\t *    original format that was passed in as the data source, or an array\n\t\t *    from a DOM data source\n\t\t * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which\n\t\t *    can be useful to retrieve the `TR` element if you need DOM interaction.\n\t\t *\n\t\t * And the following return is expected:\n\t\t *\n\t\t * * {boolean} Include the row in the searched result set (true) or not\n\t\t *   (false)\n\t\t *\n\t\t * Note that as with the main search ability in DataTables, technically this\n\t\t * is \"filtering\", since it is subtractive. However, for consistency in\n\t\t * naming we call it searching here.\n\t\t *\n\t\t *  @type array\n\t\t *  @default []\n\t\t *\n\t\t *  @example\n\t\t *    // The following example shows custom search being applied to the\n\t\t *    // fourth column (i.e. the data[3] index) based on two input values\n\t\t *    // from the end-user, matching the data in a certain range.\n\t\t *    $.fn.dataTable.ext.search.push(\n\t\t *      function( settings, data, dataIndex ) {\n\t\t *        var min = document.getElementById('min').value * 1;\n\t\t *        var max = document.getElementById('max').value * 1;\n\t\t *        var version = data[3] == \"-\" ? 0 : data[3]*1;\n\t\t *\n\t\t *        if ( min == \"\" && max == \"\" ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min == \"\" && version < max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min < version && \"\" == max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min < version && version < max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        return false;\n\t\t *      }\n\t\t *    );\n\t\t */\n\t\tsearch: [],\n\t\n\t\n\t\t/**\n\t\t * Selector extensions\n\t\t *\n\t\t * The `selector` option can be used to extend the options available for the\n\t\t * selector modifier options (`selector-modifier` object data type) that\n\t\t * each of the three built in selector types offer (row, column and cell +\n\t\t * their plural counterparts). For example the Select extension uses this\n\t\t * mechanism to provide an option to select only rows, columns and cells\n\t\t * that have been marked as selected by the end user (`{selected: true}`),\n\t\t * which can be used in conjunction with the existing built in selector\n\t\t * options.\n\t\t *\n\t\t * Each property is an array to which functions can be pushed. The functions\n\t\t * take three attributes:\n\t\t *\n\t\t * * Settings object for the host table\n\t\t * * Options object (`selector-modifier` object type)\n\t\t * * Array of selected item indexes\n\t\t *\n\t\t * The return is an array of the resulting item indexes after the custom\n\t\t * selector has been applied.\n\t\t *\n\t\t *  @type object\n\t\t */\n\t\tselector: {\n\t\t\tcell: [],\n\t\t\tcolumn: [],\n\t\t\trow: []\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Internal functions, exposed for used in plug-ins.\n\t\t * \n\t\t * Please note that you should not need to use the internal methods for\n\t\t * anything other than a plug-in (and even then, try to avoid if possible).\n\t\t * The internal function may change between releases.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tinternal: {},\n\t\n\t\n\t\t/**\n\t\t * Legacy configuration options. Enable and disable legacy options that\n\t\t * are available in DataTables.\n\t\t *\n\t\t *  @type object\n\t\t */\n\t\tlegacy: {\n\t\t\t/**\n\t\t\t * Enable / disable DataTables 1.9 compatible server-side processing\n\t\t\t * requests\n\t\t\t *\n\t\t\t *  @type boolean\n\t\t\t *  @default null\n\t\t\t */\n\t\t\tajax: null\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Pagination plug-in methods.\n\t\t * \n\t\t * Each entry in this object is a function and defines which buttons should\n\t\t * be shown by the pagination rendering method that is used for the table:\n\t\t * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the\n\t\t * buttons are displayed in the document, while the functions here tell it\n\t\t * what buttons to display. This is done by returning an array of button\n\t\t * descriptions (what each button will do).\n\t\t *\n\t\t * Pagination types (the four built in options and any additional plug-in\n\t\t * options defined here) can be used through the `paginationType`\n\t\t * initialisation parameter.\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t\t * 1. `{int} page` The current page index\n\t\t * 2. `{int} pages` The number of pages in the table\n\t\t *\n\t\t * Each function is expected to return an array where each element of the\n\t\t * array can be one of:\n\t\t *\n\t\t * * `first` - Jump to first page when activated\n\t\t * * `last` - Jump to last page when activated\n\t\t * * `previous` - Show previous page when activated\n\t\t * * `next` - Show next page when activated\n\t\t * * `{int}` - Show page of the index given\n\t\t * * `{array}` - A nested array containing the above elements to add a\n\t\t *   containing 'DIV' element (might be useful for styling).\n\t\t *\n\t\t * Note that DataTables v1.9- used this object slightly differently whereby\n\t\t * an object with two functions would be defined for each plug-in. That\n\t\t * ability is still supported by DataTables 1.10+ to provide backwards\n\t\t * compatibility, but this option of use is now decremented and no longer\n\t\t * documented in DataTables 1.10+.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t *\n\t\t *  @example\n\t\t *    // Show previous, next and current page buttons only\n\t\t *    $.fn.dataTableExt.oPagination.current = function ( page, pages ) {\n\t\t *      return [ 'previous', page, 'next' ];\n\t\t *    };\n\t\t */\n\t\tpager: {},\n\t\n\t\n\t\trenderer: {\n\t\t\tpageButton: {},\n\t\t\theader: {}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Ordering plug-ins - custom data source\n\t\t * \n\t\t * The extension options for ordering of data available here is complimentary\n\t\t * to the default type based ordering that DataTables typically uses. It\n\t\t * allows much greater control over the the data that is being used to\n\t\t * order a column, but is necessarily therefore more complex.\n\t\t * \n\t\t * This type of ordering is useful if you want to do ordering based on data\n\t\t * live from the DOM (for example the contents of an 'input' element) rather\n\t\t * than just the static string that DataTables knows of.\n\t\t * \n\t\t * The way these plug-ins work is that you create an array of the values you\n\t\t * wish to be ordering for the column in question and then return that\n\t\t * array. The data in the array much be in the index order of the rows in\n\t\t * the table (not the currently ordering order!). Which order data gathering\n\t\t * function is run here depends on the `dt-init columns.orderDataType`\n\t\t * parameter that is used for the column (if any).\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t * 2. `{int}` Target column index\n\t\t *\n\t\t * Each function is expected to return an array:\n\t\t *\n\t\t * * `{array}` Data for the column to be ordering upon\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    // Ordering using `input` node values\n\t\t *    $.fn.dataTable.ext.order['dom-text'] = function  ( settings, col )\n\t\t *    {\n\t\t *      return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {\n\t\t *        return $('input', td).val();\n\t\t *      } );\n\t\t *    }\n\t\t */\n\t\torder: {},\n\t\n\t\n\t\t/**\n\t\t * Type based plug-ins.\n\t\t *\n\t\t * Each column in DataTables has a type assigned to it, either by automatic\n\t\t * detection or by direct assignment using the `type` option for the column.\n\t\t * The type of a column will effect how it is ordering and search (plug-ins\n\t\t * can also make use of the column type if required).\n\t\t *\n\t\t * @namespace\n\t\t */\n\t\ttype: {\n\t\t\t/**\n\t\t\t * Type detection functions.\n\t\t\t *\n\t\t\t * The functions defined in this object are used to automatically detect\n\t\t\t * a column's type, making initialisation of DataTables super easy, even\n\t\t\t * when complex data is in the table.\n\t\t\t *\n\t\t\t * The functions defined take two parameters:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be analysed\n\t\t     *  2. `{settings}` DataTables settings object. This can be used to\n\t\t     *     perform context specific type detection - for example detection\n\t\t     *     based on language settings such as using a comma for a decimal\n\t\t     *     place. Generally speaking the options from the settings will not\n\t\t     *     be required\n\t\t\t *\n\t\t\t * Each function is expected to return:\n\t\t\t *\n\t\t\t * * `{string|null}` Data type detected, or null if unknown (and thus\n\t\t\t *   pass it on to the other type detection functions.\n\t\t\t *\n\t\t\t *  @type array\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Currency type detection plug-in:\n\t\t\t *    $.fn.dataTable.ext.type.detect.push(\n\t\t\t *      function ( data, settings ) {\n\t\t\t *        // Check the numeric part\n\t\t\t *        if ( ! data.substring(1).match(/[0-9]/) ) {\n\t\t\t *          return null;\n\t\t\t *        }\n\t\t\t *\n\t\t\t *        // Check prefixed by currency\n\t\t\t *        if ( data.charAt(0) == '$' || data.charAt(0) == '&pound;' ) {\n\t\t\t *          return 'currency';\n\t\t\t *        }\n\t\t\t *        return null;\n\t\t\t *      }\n\t\t\t *    );\n\t\t\t */\n\t\t\tdetect: [],\n\t\n\t\n\t\t\t/**\n\t\t\t * Type based search formatting.\n\t\t\t *\n\t\t\t * The type based searching functions can be used to pre-format the\n\t\t\t * data to be search on. For example, it can be used to strip HTML\n\t\t\t * tags or to de-format telephone numbers for numeric only searching.\n\t\t\t *\n\t\t\t * Note that is a search is not defined for a column of a given type,\n\t\t\t * no search formatting will be performed.\n\t\t\t * \n\t\t\t * Pre-processing of searching data plug-ins - When you assign the sType\n\t\t\t * for a column (or have it automatically detected for you by DataTables\n\t\t\t * or a type detection plug-in), you will typically be using this for\n\t\t\t * custom sorting, but it can also be used to provide custom searching\n\t\t\t * by allowing you to pre-processing the data and returning the data in\n\t\t\t * the format that should be searched upon. This is done by adding\n\t\t\t * functions this object with a parameter name which matches the sType\n\t\t\t * for that target column. This is the corollary of <i>afnSortData</i>\n\t\t\t * for searching data.\n\t\t\t *\n\t\t\t * The functions defined take a single parameter:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be prepared for searching\n\t\t\t *\n\t\t\t * Each function is expected to return:\n\t\t\t *\n\t\t\t * * `{string|null}` Formatted string that will be used for the searching.\n\t\t\t *\n\t\t\t *  @type object\n\t\t\t *  @default {}\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) {\n\t\t\t *      return d.replace(/\\n/g,\" \").replace( /<.*?>/g, \"\" );\n\t\t\t *    }\n\t\t\t */\n\t\t\tsearch: {},\n\t\n\t\n\t\t\t/**\n\t\t\t * Type based ordering.\n\t\t\t *\n\t\t\t * The column type tells DataTables what ordering to apply to the table\n\t\t\t * when a column is sorted upon. The order for each type that is defined,\n\t\t\t * is defined by the functions available in this object.\n\t\t\t *\n\t\t\t * Each ordering option can be described by three properties added to\n\t\t\t * this object:\n\t\t\t *\n\t\t\t * * `{type}-pre` - Pre-formatting function\n\t\t\t * * `{type}-asc` - Ascending order function\n\t\t\t * * `{type}-desc` - Descending order function\n\t\t\t *\n\t\t\t * All three can be used together, only `{type}-pre` or only\n\t\t\t * `{type}-asc` and `{type}-desc` together. It is generally recommended\n\t\t\t * that only `{type}-pre` is used, as this provides the optimal\n\t\t\t * implementation in terms of speed, although the others are provided\n\t\t\t * for compatibility with existing Javascript sort functions.\n\t\t\t *\n\t\t\t * `{type}-pre`: Functions defined take a single parameter:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be prepared for ordering\n\t\t\t *\n\t\t\t * And return:\n\t\t\t *\n\t\t\t * * `{*}` Data to be sorted upon\n\t\t\t *\n\t\t\t * `{type}-asc` and `{type}-desc`: Functions are typical Javascript sort\n\t\t\t * functions, taking two parameters:\n\t\t\t *\n\t\t     *  1. `{*}` Data to compare to the second parameter\n\t\t     *  2. `{*}` Data to compare to the first parameter\n\t\t\t *\n\t\t\t * And returning:\n\t\t\t *\n\t\t\t * * `{*}` Ordering match: <0 if first parameter should be sorted lower\n\t\t\t *   than the second parameter, ===0 if the two parameters are equal and\n\t\t\t *   >0 if the first parameter should be sorted height than the second\n\t\t\t *   parameter.\n\t\t\t * \n\t\t\t *  @type object\n\t\t\t *  @default {}\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Numeric ordering of formatted numbers with a pre-formatter\n\t\t\t *    $.extend( $.fn.dataTable.ext.type.order, {\n\t\t\t *      \"string-pre\": function(x) {\n\t\t\t *        a = (a === \"-\" || a === \"\") ? 0 : a.replace( /[^\\d\\-\\.]/g, \"\" );\n\t\t\t *        return parseFloat( a );\n\t\t\t *      }\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Case-sensitive string ordering, with no pre-formatting method\n\t\t\t *    $.extend( $.fn.dataTable.ext.order, {\n\t\t\t *      \"string-case-asc\": function(x,y) {\n\t\t\t *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t\t *      },\n\t\t\t *      \"string-case-desc\": function(x,y) {\n\t\t\t *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t\t *      }\n\t\t\t *    } );\n\t\t\t */\n\t\t\torder: {}\n\t\t},\n\t\n\t\t/**\n\t\t * Unique DataTables instance counter\n\t\t *\n\t\t * @type int\n\t\t * @private\n\t\t */\n\t\t_unique: 0,\n\t\n\t\n\t\t//\n\t\t// Depreciated\n\t\t// The following properties are retained for backwards compatibility only.\n\t\t// The should not be used in new projects and will be removed in a future\n\t\t// version\n\t\t//\n\t\n\t\t/**\n\t\t * Version check function.\n\t\t *  @type function\n\t\t *  @depreciated Since 1.10\n\t\t */\n\t\tfnVersionCheck: DataTable.fnVersionCheck,\n\t\n\t\n\t\t/**\n\t\t * Index for what 'this' index API functions should use\n\t\t *  @type int\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\tiApiIndex: 0,\n\t\n\t\n\t\t/**\n\t\t * jQuery UI class container\n\t\t *  @type object\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\toJUIClasses: {},\n\t\n\t\n\t\t/**\n\t\t * Software version\n\t\t *  @type string\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\tsVersion: DataTable.version\n\t};\n\t\n\t\n\t//\n\t// Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts\n\t//\n\t$.extend( _ext, {\n\t\tafnFiltering: _ext.search,\n\t\taTypes:       _ext.type.detect,\n\t\tofnSearch:    _ext.type.search,\n\t\toSort:        _ext.type.order,\n\t\tafnSortData:  _ext.order,\n\t\taoFeatures:   _ext.feature,\n\t\toApi:         _ext.internal,\n\t\toStdClasses:  _ext.classes,\n\t\toPagination:  _ext.pager\n\t} );\n\t\n\t\n\t$.extend( DataTable.ext.classes, {\n\t\t\"sTable\": \"dataTable\",\n\t\t\"sNoFooter\": \"no-footer\",\n\t\n\t\t/* Paging buttons */\n\t\t\"sPageButton\": \"paginate_button\",\n\t\t\"sPageButtonActive\": \"current\",\n\t\t\"sPageButtonDisabled\": \"disabled\",\n\t\n\t\t/* Striping classes */\n\t\t\"sStripeOdd\": \"odd\",\n\t\t\"sStripeEven\": \"even\",\n\t\n\t\t/* Empty row */\n\t\t\"sRowEmpty\": \"dataTables_empty\",\n\t\n\t\t/* Features */\n\t\t\"sWrapper\": \"dataTables_wrapper\",\n\t\t\"sFilter\": \"dataTables_filter\",\n\t\t\"sInfo\": \"dataTables_info\",\n\t\t\"sPaging\": \"dataTables_paginate paging_\", /* Note that the type is postfixed */\n\t\t\"sLength\": \"dataTables_length\",\n\t\t\"sProcessing\": \"dataTables_processing\",\n\t\n\t\t/* Sorting */\n\t\t\"sSortAsc\": \"sorting_asc\",\n\t\t\"sSortDesc\": \"sorting_desc\",\n\t\t\"sSortable\": \"sorting\", /* Sortable in both directions */\n\t\t\"sSortableAsc\": \"sorting_desc_disabled\",\n\t\t\"sSortableDesc\": \"sorting_asc_disabled\",\n\t\t\"sSortableNone\": \"sorting_disabled\",\n\t\t\"sSortColumn\": \"sorting_\", /* Note that an int is postfixed for the sorting order */\n\t\n\t\t/* Filtering */\n\t\t\"sFilterInput\": \"\",\n\t\n\t\t/* Page length */\n\t\t\"sLengthSelect\": \"\",\n\t\n\t\t/* Scrolling */\n\t\t\"sScrollWrapper\": \"dataTables_scroll\",\n\t\t\"sScrollHead\": \"dataTables_scrollHead\",\n\t\t\"sScrollHeadInner\": \"dataTables_scrollHeadInner\",\n\t\t\"sScrollBody\": \"dataTables_scrollBody\",\n\t\t\"sScrollFoot\": \"dataTables_scrollFoot\",\n\t\t\"sScrollFootInner\": \"dataTables_scrollFootInner\",\n\t\n\t\t/* Misc */\n\t\t\"sHeaderTH\": \"\",\n\t\t\"sFooterTH\": \"\",\n\t\n\t\t// Deprecated\n\t\t\"sSortJUIAsc\": \"\",\n\t\t\"sSortJUIDesc\": \"\",\n\t\t\"sSortJUI\": \"\",\n\t\t\"sSortJUIAscAllowed\": \"\",\n\t\t\"sSortJUIDescAllowed\": \"\",\n\t\t\"sSortJUIWrapper\": \"\",\n\t\t\"sSortIcon\": \"\",\n\t\t\"sJUIHeader\": \"\",\n\t\t\"sJUIFooter\": \"\"\n\t} );\n\t\n\t\n\tvar extPagination = DataTable.ext.pager;\n\t\n\tfunction _numbers ( page, pages ) {\n\t\tvar\n\t\t\tnumbers = [],\n\t\t\tbuttons = extPagination.numbers_length,\n\t\t\thalf = Math.floor( buttons / 2 ),\n\t\t\ti = 1;\n\t\n\t\tif ( pages <= buttons ) {\n\t\t\tnumbers = _range( 0, pages );\n\t\t}\n\t\telse if ( page <= half ) {\n\t\t\tnumbers = _range( 0, buttons-2 );\n\t\t\tnumbers.push( 'ellipsis' );\n\t\t\tnumbers.push( pages-1 );\n\t\t}\n\t\telse if ( page >= pages - 1 - half ) {\n\t\t\tnumbers = _range( pages-(buttons-2), pages );\n\t\t\tnumbers.splice( 0, 0, 'ellipsis' ); // no unshift in ie6\n\t\t\tnumbers.splice( 0, 0, 0 );\n\t\t}\n\t\telse {\n\t\t\tnumbers = _range( page-half+2, page+half-1 );\n\t\t\tnumbers.push( 'ellipsis' );\n\t\t\tnumbers.push( pages-1 );\n\t\t\tnumbers.splice( 0, 0, 'ellipsis' );\n\t\t\tnumbers.splice( 0, 0, 0 );\n\t\t}\n\t\n\t\tnumbers.DT_el = 'span';\n\t\treturn numbers;\n\t}\n\t\n\t\n\t$.extend( extPagination, {\n\t\tsimple: function ( page, pages ) {\n\t\t\treturn [ 'previous', 'next' ];\n\t\t},\n\t\n\t\tfull: function ( page, pages ) {\n\t\t\treturn [  'first', 'previous', 'next', 'last' ];\n\t\t},\n\t\n\t\tnumbers: function ( page, pages ) {\n\t\t\treturn [ _numbers(page, pages) ];\n\t\t},\n\t\n\t\tsimple_numbers: function ( page, pages ) {\n\t\t\treturn [ 'previous', _numbers(page, pages), 'next' ];\n\t\t},\n\t\n\t\tfull_numbers: function ( page, pages ) {\n\t\t\treturn [ 'first', 'previous', _numbers(page, pages), 'next', 'last' ];\n\t\t},\n\t\t\n\t\tfirst_last_numbers: function (page, pages) {\n\t \t\treturn ['first', _numbers(page, pages), 'last'];\n\t \t},\n\t\n\t\t// For testing and plug-ins to use\n\t\t_numbers: _numbers,\n\t\n\t\t// Number of number buttons (including ellipsis) to show. _Must be odd!_\n\t\tnumbers_length: 7\n\t} );\n\t\n\t\n\t$.extend( true, DataTable.ext.renderer, {\n\t\tpageButton: {\n\t\t\t_: function ( settings, host, idx, buttons, page, pages ) {\n\t\t\t\tvar classes = settings.oClasses;\n\t\t\t\tvar lang = settings.oLanguage.oPaginate;\n\t\t\t\tvar aria = settings.oLanguage.oAria.paginate || {};\n\t\t\t\tvar btnDisplay, btnClass, counter=0;\n\t\n\t\t\t\tvar attach = function( container, buttons ) {\n\t\t\t\t\tvar i, ien, node, button, tabIndex;\n\t\t\t\t\tvar disabledClass = classes.sPageButtonDisabled;\n\t\t\t\t\tvar clickHandler = function ( e ) {\n\t\t\t\t\t\t_fnPageChange( settings, e.data.action, true );\n\t\t\t\t\t};\n\t\n\t\t\t\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\t\t\t\tbutton = buttons[i];\n\t\n\t\t\t\t\t\tif ( Array.isArray( button ) ) {\n\t\t\t\t\t\t\tvar inner = $( '<'+(button.DT_el || 'div')+'/>' )\n\t\t\t\t\t\t\t\t.appendTo( container );\n\t\t\t\t\t\t\tattach( inner, button );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tbtnDisplay = null;\n\t\t\t\t\t\t\tbtnClass = button;\n\t\t\t\t\t\t\ttabIndex = settings.iTabIndex;\n\t\n\t\t\t\t\t\t\tswitch ( button ) {\n\t\t\t\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\t\t\t\tcontainer.append('<span class=\"ellipsis\">&#x2026;</span>');\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'first':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\n\t\t\t\t\t\t\t\t\tif ( page === 0 ) {\n\t\t\t\t\t\t\t\t\t\ttabIndex = -1;\n\t\t\t\t\t\t\t\t\t\tbtnClass += ' ' + disabledClass;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\n\t\t\t\t\t\t\t\t\tif ( page === 0 ) {\n\t\t\t\t\t\t\t\t\t\ttabIndex = -1;\n\t\t\t\t\t\t\t\t\t\tbtnClass += ' ' + disabledClass;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'next':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\n\t\t\t\t\t\t\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\t\t\t\t\t\t\ttabIndex = -1;\n\t\t\t\t\t\t\t\t\t\tbtnClass += ' ' + disabledClass;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'last':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\n\t\t\t\t\t\t\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\t\t\t\t\t\t\ttabIndex = -1;\n\t\t\t\t\t\t\t\t\t\tbtnClass += ' ' + disabledClass;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tbtnDisplay = settings.fnFormatNumber( button + 1 );\n\t\t\t\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t\t\t\tclasses.sPageButtonActive : '';\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif ( btnDisplay !== null ) {\n\t\t\t\t\t\t\t\tnode = $('<a>', {\n\t\t\t\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t\t\t'aria-label': aria[ button ],\n\t\t\t\t\t\t\t\t\t\t'data-dt-idx': counter,\n\t\t\t\t\t\t\t\t\t\t'tabindex': tabIndex,\n\t\t\t\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t\t\t\t.appendTo( container );\n\t\n\t\t\t\t\t\t\t\t_fnBindAction(\n\t\t\t\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t\t\t\t);\n\t\n\t\t\t\t\t\t\t\tcounter++;\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\n\t\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t\t// inside an iframe or frame. Try / catch the error. Not good for\n\t\t\t\t// accessibility, but neither are frames.\n\t\t\t\tvar activeEl;\n\t\n\t\t\t\ttry {\n\t\t\t\t\t// Because this approach is destroying and recreating the paging\n\t\t\t\t\t// elements, focus is lost on the select button which is bad for\n\t\t\t\t\t// accessibility. So we want to restore focus once the draw has\n\t\t\t\t\t// completed\n\t\t\t\t\tactiveEl = $(host).find(document.activeElement).data('dt-idx');\n\t\t\t\t}\n\t\t\t\tcatch (e) {}\n\t\n\t\t\t\tattach( $(host).empty(), buttons );\n\t\n\t\t\t\tif ( activeEl !== undefined ) {\n\t\t\t\t\t$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t\n\t\n\t// Built in type detection. See model.ext.aTypes for information about\n\t// what is required from this methods.\n\t$.extend( DataTable.ext.type.detect, [\n\t\t// Plain numbers - first since V8 detects some plain numbers as dates\n\t\t// e.g. Date.parse('55') (but not all, e.g. Date.parse('22')...).\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _isNumber( d, decimal ) ? 'num'+decimal : null;\n\t\t},\n\t\n\t\t// Dates (only those recognised by the browser's Date.parse)\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\t// V8 tries _very_ hard to make a string passed into `Date.parse()`\n\t\t\t// valid, so we need to use a regex to restrict date formats. Use a\n\t\t\t// plug-in for anything other than ISO8601 style strings\n\t\t\tif ( d && !(d instanceof Date) && ! _re_date.test(d) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar parsed = Date.parse(d);\n\t\t\treturn (parsed !== null && !isNaN(parsed)) || _empty(d) ? 'date' : null;\n\t\t},\n\t\n\t\t// Formatted numbers\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _isNumber( d, decimal, true ) ? 'num-fmt'+decimal : null;\n\t\t},\n\t\n\t\t// HTML numeric\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _htmlNumeric( d, decimal ) ? 'html-num'+decimal : null;\n\t\t},\n\t\n\t\t// HTML numeric, formatted\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _htmlNumeric( d, decimal, true ) ? 'html-num-fmt'+decimal : null;\n\t\t},\n\t\n\t\t// HTML (this is strict checking - there must be html)\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\treturn _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1) ?\n\t\t\t\t'html' : null;\n\t\t}\n\t] );\n\t\n\t\n\t\n\t// Filter formatting functions. See model.ext.ofnSearch for information about\n\t// what is required from these methods.\n\t// \n\t// Note that additional search methods are added for the html numbers and\n\t// html formatted numbers by `_addNumericSort()` when we know what the decimal\n\t// place is\n\t\n\t\n\t$.extend( DataTable.ext.type.search, {\n\t\thtml: function ( data ) {\n\t\t\treturn _empty(data) ?\n\t\t\t\tdata :\n\t\t\t\ttypeof data === 'string' ?\n\t\t\t\t\tdata\n\t\t\t\t\t\t.replace( _re_new_lines, \" \" )\n\t\t\t\t\t\t.replace( _re_html, \"\" ) :\n\t\t\t\t\t'';\n\t\t},\n\t\n\t\tstring: function ( data ) {\n\t\t\treturn _empty(data) ?\n\t\t\t\tdata :\n\t\t\t\ttypeof data === 'string' ?\n\t\t\t\t\tdata.replace( _re_new_lines, \" \" ) :\n\t\t\t\t\tdata;\n\t\t}\n\t} );\n\t\n\t\n\t\n\tvar __numericReplace = function ( d, decimalPlace, re1, re2 ) {\n\t\tif ( d !== 0 && (!d || d === '-') ) {\n\t\t\treturn -Infinity;\n\t\t}\n\t\n\t\t// If a decimal place other than `.` is used, it needs to be given to the\n\t\t// function so we can detect it and replace with a `.` which is the only\n\t\t// decimal place Javascript recognises - it is not locale aware.\n\t\tif ( decimalPlace ) {\n\t\t\td = _numToDecimal( d, decimalPlace );\n\t\t}\n\t\n\t\tif ( d.replace ) {\n\t\t\tif ( re1 ) {\n\t\t\t\td = d.replace( re1, '' );\n\t\t\t}\n\t\n\t\t\tif ( re2 ) {\n\t\t\t\td = d.replace( re2, '' );\n\t\t\t}\n\t\t}\n\t\n\t\treturn d * 1;\n\t};\n\t\n\t\n\t// Add the numeric 'deformatting' functions for sorting and search. This is done\n\t// in a function to provide an easy ability for the language options to add\n\t// additional methods if a non-period decimal place is used.\n\tfunction _addNumericSort ( decimalPlace ) {\n\t\t$.each(\n\t\t\t{\n\t\t\t\t// Plain numbers\n\t\t\t\t\"num\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace );\n\t\t\t\t},\n\t\n\t\t\t\t// Formatted numbers\n\t\t\t\t\"num-fmt\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_formatted_numeric );\n\t\t\t\t},\n\t\n\t\t\t\t// HTML numeric\n\t\t\t\t\"html-num\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html );\n\t\t\t\t},\n\t\n\t\t\t\t// HTML numeric, formatted\n\t\t\t\t\"html-num-fmt\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html, _re_formatted_numeric );\n\t\t\t\t}\n\t\t\t},\n\t\t\tfunction ( key, fn ) {\n\t\t\t\t// Add the ordering method\n\t\t\t\t_ext.type.order[ key+decimalPlace+'-pre' ] = fn;\n\t\n\t\t\t\t// For HTML types add a search formatter that will strip the HTML\n\t\t\t\tif ( key.match(/^html\\-/) ) {\n\t\t\t\t\t_ext.type.search[ key+decimalPlace ] = _ext.type.search.html;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\t\n\t\n\t// Default sort methods\n\t$.extend( _ext.type.order, {\n\t\t// Dates\n\t\t\"date-pre\": function ( d ) {\n\t\t\tvar ts = Date.parse( d );\n\t\t\treturn isNaN(ts) ? -Infinity : ts;\n\t\t},\n\t\n\t\t// html\n\t\t\"html-pre\": function ( a ) {\n\t\t\treturn _empty(a) ?\n\t\t\t\t'' :\n\t\t\t\ta.replace ?\n\t\t\t\t\ta.replace( /<.*?>/g, \"\" ).toLowerCase() :\n\t\t\t\t\ta+'';\n\t\t},\n\t\n\t\t// string\n\t\t\"string-pre\": function ( a ) {\n\t\t\t// This is a little complex, but faster than always calling toString,\n\t\t\t// http://jsperf.com/tostring-v-check\n\t\t\treturn _empty(a) ?\n\t\t\t\t'' :\n\t\t\t\ttypeof a === 'string' ?\n\t\t\t\t\ta.toLowerCase() :\n\t\t\t\t\t! a.toString ?\n\t\t\t\t\t\t'' :\n\t\t\t\t\t\ta.toString();\n\t\t},\n\t\n\t\t// string-asc and -desc are retained only for compatibility with the old\n\t\t// sort methods\n\t\t\"string-asc\": function ( x, y ) {\n\t\t\treturn ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t},\n\t\n\t\t\"string-desc\": function ( x, y ) {\n\t\t\treturn ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t}\n\t} );\n\t\n\t\n\t// Numeric sorting types - order doesn't matter here\n\t_addNumericSort( '' );\n\t\n\t\n\t$.extend( true, DataTable.ext.renderer, {\n\t\theader: {\n\t\t\t_: function ( settings, cell, column, classes ) {\n\t\t\t\t// No additional mark-up required\n\t\t\t\t// Attach a sort listener to update on sort - note that using the\n\t\t\t\t// `DT` namespace will allow the event to be removed automatically\n\t\t\t\t// on destroy, while the `dt` namespaced event is the one we are\n\t\t\t\t// listening for\n\t\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\t\tif ( settings !== ctx ) { // need to check this this is the host\n\t\t\t\t\t\treturn;               // table, not a nested one\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar colIdx = column.idx;\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.removeClass(\n\t\t\t\t\t\t\tclasses.sSortAsc +' '+\n\t\t\t\t\t\t\tclasses.sSortDesc\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t},\n\t\n\t\t\tjqueryui: function ( settings, cell, column, classes ) {\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.addClass( classes.sSortJUIWrapper )\n\t\t\t\t\t.append( cell.contents() )\n\t\t\t\t\t.append( $('<span/>')\n\t\t\t\t\t\t.addClass( classes.sSortIcon+' '+column.sSortingClassJUI )\n\t\t\t\t\t)\n\t\t\t\t\t.appendTo( cell );\n\t\n\t\t\t\t// Attach a sort listener to update on sort\n\t\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar colIdx = column.idx;\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.removeClass( classes.sSortAsc +\" \"+classes.sSortDesc )\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t\t);\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.find( 'span.'+classes.sSortIcon )\n\t\t\t\t\t\t.removeClass(\n\t\t\t\t\t\t\tclasses.sSortJUIAsc +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIDesc +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUI +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIAscAllowed +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIDescAllowed\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortJUIAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortJUIDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClassJUI\n\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t/*\n\t * Public helper functions. These aren't used internally by DataTables, or\n\t * called by any of the options passed into DataTables, but they can be used\n\t * externally by developers working with DataTables. They are helper functions\n\t * to make working with DataTables a little bit easier.\n\t */\n\t\n\tvar __htmlEscapeEntities = function ( d ) {\n\t\tif (Array.isArray(d)) {\n\t\t\td = d.join(',');\n\t\t}\n\t\n\t\treturn typeof d === 'string' ?\n\t\t\td\n\t\t\t\t.replace(/&/g, '&amp;')\n\t\t\t\t.replace(/</g, '&lt;')\n\t\t\t\t.replace(/>/g, '&gt;')\n\t\t\t\t.replace(/\"/g, '&quot;') :\n\t\t\td;\n\t};\n\t\n\t// Common logic for moment, luxon or a date action\n\tfunction __mld( dt, momentFn, luxonFn, dateFn, arg1 ) {\n\t\tif (window.moment) {\n\t\t\treturn dt[momentFn]( arg1 );\n\t\t}\n\t\telse if (window.luxon) {\n\t\t\treturn dt[luxonFn]( arg1 );\n\t\t}\n\t\t\n\t\treturn dateFn ? dt[dateFn]( arg1 ) : dt;\n\t}\n\t\n\t\n\tvar __mlWarning = false;\n\tfunction __mldObj (d, format, locale) {\n\t\tvar dt;\n\t\n\t\tif (window.moment) {\n\t\t\tdt = window.moment.utc( d, format, locale, true );\n\t\n\t\t\tif (! dt.isValid()) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\telse if (window.luxon) {\n\t\t\tdt = format\n\t\t\t\t? window.luxon.DateTime.fromFormat( d, format )\n\t\t\t\t: window.luxon.DateTime.fromISO( d );\n\t\n\t\t\tif (! dt.isValid) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\n\t\t\tdt.setLocale(locale);\n\t\t}\n\t\telse if (! format) {\n\t\t\t// No format given, must be ISO\n\t\t\tdt = new Date(d);\n\t\t}\n\t\telse {\n\t\t\tif (! __mlWarning) {\n\t\t\t\talert('DataTables warning: Formatted date without Moment.js or Luxon - https://datatables.net/tn/17');\n\t\t\t}\n\t\n\t\t\t__mlWarning = true;\n\t\t}\n\t\n\t\treturn dt;\n\t}\n\t\n\t// Wrapper for date, datetime and time which all operate the same way with the exception of\n\t// the output string for auto locale support\n\tfunction __mlHelper (localeString) {\n\t\treturn function ( from, to, locale, def ) {\n\t\t\t// Luxon and Moment support\n\t\t\t// Argument shifting\n\t\t\tif ( arguments.length === 0 ) {\n\t\t\t\tlocale = 'en';\n\t\t\t\tto = null; // means toLocaleString\n\t\t\t\tfrom = null; // means iso8601\n\t\t\t}\n\t\t\telse if ( arguments.length === 1 ) {\n\t\t\t\tlocale = 'en';\n\t\t\t\tto = from;\n\t\t\t\tfrom = null;\n\t\t\t}\n\t\t\telse if ( arguments.length === 2 ) {\n\t\t\t\tlocale = to;\n\t\t\t\tto = from;\n\t\t\t\tfrom = null;\n\t\t\t}\n\t\n\t\t\tvar typeName = 'datetime-' + to;\n\t\n\t\t\t// Add type detection and sorting specific to this date format - we need to be able to identify\n\t\t\t// date type columns as such, rather than as numbers in extensions. Hence the need for this.\n\t\t\tif (! DataTable.ext.type.order[typeName]) {\n\t\t\t\t// The renderer will give the value to type detect as the type!\n\t\t\t\tDataTable.ext.type.detect.unshift(function (d) {\n\t\t\t\t\treturn d === typeName ? typeName : false;\n\t\t\t\t});\n\t\n\t\t\t\t// The renderer gives us Moment, Luxon or Date obects for the sorting, all of which have a\n\t\t\t\t// `valueOf` which gives milliseconds epoch\n\t\t\t\tDataTable.ext.type.order[typeName + '-asc'] = function (a, b) {\n\t\t\t\t\tvar x = a.valueOf();\n\t\t\t\t\tvar y = b.valueOf();\n\t\n\t\t\t\t\treturn x === y\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: x < y\n\t\t\t\t\t\t\t? -1\n\t\t\t\t\t\t\t: 1;\n\t\t\t\t}\n\t\n\t\t\t\tDataTable.ext.type.order[typeName + '-desc'] = function (a, b) {\n\t\t\t\t\tvar x = a.valueOf();\n\t\t\t\t\tvar y = b.valueOf();\n\t\n\t\t\t\t\treturn x === y\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: x > y\n\t\t\t\t\t\t\t? -1\n\t\t\t\t\t\t\t: 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\t\treturn function ( d, type ) {\n\t\t\t\t// Allow for a default value\n\t\t\t\tif (d === null || d === undefined) {\n\t\t\t\t\tif (def === '--now') {\n\t\t\t\t\t\t// We treat everything as UTC further down, so no changes are\n\t\t\t\t\t\t// made, as such need to get the local date / time as if it were\n\t\t\t\t\t\t// UTC\n\t\t\t\t\t\tvar local = new Date();\n\t\t\t\t\t\td = new Date( Date.UTC(\n\t\t\t\t\t\t\tlocal.getFullYear(), local.getMonth(), local.getDate(),\n\t\t\t\t\t\t\tlocal.getHours(), local.getMinutes(), local.getSeconds()\n\t\t\t\t\t\t) );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\td = '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (type === 'type') {\n\t\t\t\t\t// Typing uses the type name for fast matching\n\t\t\t\t\treturn typeName;\n\t\t\t\t}\n\t\n\t\t\t\tif (d === '') {\n\t\t\t\t\treturn type !== 'sort'\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: __mldObj('0000-01-01 00:00:00', null, locale);\n\t\t\t\t}\n\t\n\t\t\t\t// Shortcut. If `from` and `to` are the same, we are using the renderer to\n\t\t\t\t// format for ordering, not display - its already in the display format.\n\t\t\t\tif ( to !== null && from === to && type !== 'sort' && type !== 'type' && ! (d instanceof Date) ) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\t\n\t\t\t\tvar dt = __mldObj(d, from, locale);\n\t\n\t\t\t\tif (dt === null) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\t\n\t\t\t\tif (type === 'sort') {\n\t\t\t\t\treturn dt;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar formatted = to === null\n\t\t\t\t\t? __mld(dt, 'toDate', 'toJSDate', '')[localeString]()\n\t\t\t\t\t: __mld(dt, 'format', 'toFormat', 'toISOString', to);\n\t\n\t\t\t\t// XSS protection\n\t\t\t\treturn type === 'display' ?\n\t\t\t\t\t__htmlEscapeEntities( formatted ) :\n\t\t\t\t\tformatted;\n\t\t\t};\n\t\t}\n\t}\n\t\n\t// Based on locale, determine standard number formatting\n\t// Fallback for legacy browsers is US English\n\tvar __thousands = ',';\n\tvar __decimal = '.';\n\t\n\tif (Intl) {\n\t\ttry {\n\t\t\tvar num = new Intl.NumberFormat().formatToParts(100000.1);\n\t\t\n\t\t\tfor (var i=0 ; i<num.length ; i++) {\n\t\t\t\tif (num[i].type === 'group') {\n\t\t\t\t\t__thousands = num[i].value;\n\t\t\t\t}\n\t\t\t\telse if (num[i].type === 'decimal') {\n\t\t\t\t\t__decimal = num[i].value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (e) {\n\t\t\t// noop\n\t\t}\n\t}\n\t\n\t// Formatted date time detection - use by declaring the formats you are going to use\n\tDataTable.datetime = function ( format, locale ) {\n\t\tvar typeName = 'datetime-detect-' + format;\n\t\n\t\tif (! locale) {\n\t\t\tlocale = 'en';\n\t\t}\n\t\n\t\tif (! DataTable.ext.type.order[typeName]) {\n\t\t\tDataTable.ext.type.detect.unshift(function (d) {\n\t\t\t\tvar dt = __mldObj(d, format, locale);\n\t\t\t\treturn d === '' || dt ? typeName : false;\n\t\t\t});\n\t\n\t\t\tDataTable.ext.type.order[typeName + '-pre'] = function (d) {\n\t\t\t\treturn __mldObj(d, format, locale) || 0;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Helpers for `columns.render`.\n\t *\n\t * The options defined here can be used with the `columns.render` initialisation\n\t * option to provide a display renderer. The following functions are defined:\n\t *\n\t * * `number` - Will format numeric data (defined by `columns.data`) for\n\t *   display, retaining the original unformatted data for sorting and filtering.\n\t *   It takes 5 parameters:\n\t *   * `string` - Thousands grouping separator\n\t *   * `string` - Decimal point indicator\n\t *   * `integer` - Number of decimal points to show\n\t *   * `string` (optional) - Prefix.\n\t *   * `string` (optional) - Postfix (/suffix).\n\t * * `text` - Escape HTML to help prevent XSS attacks. It has no optional\n\t *   parameters.\n\t *\n\t * @example\n\t *   // Column definition using the number renderer\n\t *   {\n\t *     data: \"salary\",\n\t *     render: $.fn.dataTable.render.number( '\\'', '.', 0, '$' )\n\t *   }\n\t *\n\t * @namespace\n\t */\n\tDataTable.render = {\n\t\tdate: __mlHelper('toLocaleDateString'),\n\t\tdatetime: __mlHelper('toLocaleString'),\n\t\ttime: __mlHelper('toLocaleTimeString'),\n\t\tnumber: function ( thousands, decimal, precision, prefix, postfix ) {\n\t\t\t// Auto locale detection\n\t\t\tif (thousands === null || thousands === undefined) {\n\t\t\t\tthousands = __thousands;\n\t\t\t}\n\t\n\t\t\tif (decimal === null || decimal === undefined) {\n\t\t\t\tdecimal = __decimal;\n\t\t\t}\n\t\n\t\t\treturn {\n\t\t\t\tdisplay: function ( d ) {\n\t\t\t\t\tif ( typeof d !== 'number' && typeof d !== 'string' ) {\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (d === '' || d === null) {\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar negative = d < 0 ? '-' : '';\n\t\t\t\t\tvar flo = parseFloat( d );\n\t\n\t\t\t\t\t// If NaN then there isn't much formatting that we can do - just\n\t\t\t\t\t// return immediately, escaping any HTML (this was supposed to\n\t\t\t\t\t// be a number after all)\n\t\t\t\t\tif ( isNaN( flo ) ) {\n\t\t\t\t\t\treturn __htmlEscapeEntities( d );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tflo = flo.toFixed( precision );\n\t\t\t\t\td = Math.abs( flo );\n\t\n\t\t\t\t\tvar intPart = parseInt( d, 10 );\n\t\t\t\t\tvar floatPart = precision ?\n\t\t\t\t\t\tdecimal+(d - intPart).toFixed( precision ).substring( 2 ):\n\t\t\t\t\t\t'';\n\t\n\t\t\t\t\t// If zero, then can't have a negative prefix\n\t\t\t\t\tif (intPart === 0 && parseFloat(floatPart) === 0) {\n\t\t\t\t\t\tnegative = '';\n\t\t\t\t\t}\n\t\n\t\t\t\t\treturn negative + (prefix||'') +\n\t\t\t\t\t\tintPart.toString().replace(\n\t\t\t\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g, thousands\n\t\t\t\t\t\t) +\n\t\t\t\t\t\tfloatPart +\n\t\t\t\t\t\t(postfix||'');\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\n\t\ttext: function () {\n\t\t\treturn {\n\t\t\t\tdisplay: __htmlEscapeEntities,\n\t\t\t\tfilter: __htmlEscapeEntities\n\t\t\t};\n\t\t}\n\t};\n\t\n\t\n\t/*\n\t * This is really a good bit rubbish this method of exposing the internal methods\n\t * publicly... - To be fixed in 2.0 using methods on the prototype\n\t */\n\t\n\t\n\t/**\n\t * Create a wrapper function for exporting an internal functions to an external API.\n\t *  @param {string} fn API function name\n\t *  @returns {function} wrapped function\n\t *  @memberof DataTable#internal\n\t */\n\tfunction _fnExternApiFunc (fn)\n\t{\n\t\treturn function() {\n\t\t\tvar args = [_fnSettingsFromNode( this[DataTable.ext.iApiIndex] )].concat(\n\t\t\t\tArray.prototype.slice.call(arguments)\n\t\t\t);\n\t\t\treturn DataTable.ext.internal[fn].apply( this, args );\n\t\t};\n\t}\n\t\n\t\n\t/**\n\t * Reference to internal functions for use by plug-in developers. Note that\n\t * these methods are references to internal functions and are considered to be\n\t * private. If you use these methods, be aware that they are liable to change\n\t * between versions.\n\t *  @namespace\n\t */\n\t$.extend( DataTable.ext.internal, {\n\t\t_fnExternApiFunc: _fnExternApiFunc,\n\t\t_fnBuildAjax: _fnBuildAjax,\n\t\t_fnAjaxUpdate: _fnAjaxUpdate,\n\t\t_fnAjaxParameters: _fnAjaxParameters,\n\t\t_fnAjaxUpdateDraw: _fnAjaxUpdateDraw,\n\t\t_fnAjaxDataSrc: _fnAjaxDataSrc,\n\t\t_fnAddColumn: _fnAddColumn,\n\t\t_fnColumnOptions: _fnColumnOptions,\n\t\t_fnAdjustColumnSizing: _fnAdjustColumnSizing,\n\t\t_fnVisibleToColumnIndex: _fnVisibleToColumnIndex,\n\t\t_fnColumnIndexToVisible: _fnColumnIndexToVisible,\n\t\t_fnVisbleColumns: _fnVisbleColumns,\n\t\t_fnGetColumns: _fnGetColumns,\n\t\t_fnColumnTypes: _fnColumnTypes,\n\t\t_fnApplyColumnDefs: _fnApplyColumnDefs,\n\t\t_fnHungarianMap: _fnHungarianMap,\n\t\t_fnCamelToHungarian: _fnCamelToHungarian,\n\t\t_fnLanguageCompat: _fnLanguageCompat,\n\t\t_fnBrowserDetect: _fnBrowserDetect,\n\t\t_fnAddData: _fnAddData,\n\t\t_fnAddTr: _fnAddTr,\n\t\t_fnNodeToDataIndex: _fnNodeToDataIndex,\n\t\t_fnNodeToColumnIndex: _fnNodeToColumnIndex,\n\t\t_fnGetCellData: _fnGetCellData,\n\t\t_fnSetCellData: _fnSetCellData,\n\t\t_fnSplitObjNotation: _fnSplitObjNotation,\n\t\t_fnGetObjectDataFn: _fnGetObjectDataFn,\n\t\t_fnSetObjectDataFn: _fnSetObjectDataFn,\n\t\t_fnGetDataMaster: _fnGetDataMaster,\n\t\t_fnClearTable: _fnClearTable,\n\t\t_fnDeleteIndex: _fnDeleteIndex,\n\t\t_fnInvalidate: _fnInvalidate,\n\t\t_fnGetRowElements: _fnGetRowElements,\n\t\t_fnCreateTr: _fnCreateTr,\n\t\t_fnBuildHead: _fnBuildHead,\n\t\t_fnDrawHead: _fnDrawHead,\n\t\t_fnDraw: _fnDraw,\n\t\t_fnReDraw: _fnReDraw,\n\t\t_fnAddOptionsHtml: _fnAddOptionsHtml,\n\t\t_fnDetectHeader: _fnDetectHeader,\n\t\t_fnGetUniqueThs: _fnGetUniqueThs,\n\t\t_fnFeatureHtmlFilter: _fnFeatureHtmlFilter,\n\t\t_fnFilterComplete: _fnFilterComplete,\n\t\t_fnFilterCustom: _fnFilterCustom,\n\t\t_fnFilterColumn: _fnFilterColumn,\n\t\t_fnFilter: _fnFilter,\n\t\t_fnFilterCreateSearch: _fnFilterCreateSearch,\n\t\t_fnEscapeRegex: _fnEscapeRegex,\n\t\t_fnFilterData: _fnFilterData,\n\t\t_fnFeatureHtmlInfo: _fnFeatureHtmlInfo,\n\t\t_fnUpdateInfo: _fnUpdateInfo,\n\t\t_fnInfoMacros: _fnInfoMacros,\n\t\t_fnInitialise: _fnInitialise,\n\t\t_fnInitComplete: _fnInitComplete,\n\t\t_fnLengthChange: _fnLengthChange,\n\t\t_fnFeatureHtmlLength: _fnFeatureHtmlLength,\n\t\t_fnFeatureHtmlPaginate: _fnFeatureHtmlPaginate,\n\t\t_fnPageChange: _fnPageChange,\n\t\t_fnFeatureHtmlProcessing: _fnFeatureHtmlProcessing,\n\t\t_fnProcessingDisplay: _fnProcessingDisplay,\n\t\t_fnFeatureHtmlTable: _fnFeatureHtmlTable,\n\t\t_fnScrollDraw: _fnScrollDraw,\n\t\t_fnApplyToChildren: _fnApplyToChildren,\n\t\t_fnCalculateColumnWidths: _fnCalculateColumnWidths,\n\t\t_fnThrottle: _fnThrottle,\n\t\t_fnConvertToWidth: _fnConvertToWidth,\n\t\t_fnGetWidestNode: _fnGetWidestNode,\n\t\t_fnGetMaxLenString: _fnGetMaxLenString,\n\t\t_fnStringToCss: _fnStringToCss,\n\t\t_fnSortFlatten: _fnSortFlatten,\n\t\t_fnSort: _fnSort,\n\t\t_fnSortAria: _fnSortAria,\n\t\t_fnSortListener: _fnSortListener,\n\t\t_fnSortAttachListener: _fnSortAttachListener,\n\t\t_fnSortingClasses: _fnSortingClasses,\n\t\t_fnSortData: _fnSortData,\n\t\t_fnSaveState: _fnSaveState,\n\t\t_fnLoadState: _fnLoadState,\n\t\t_fnImplementState: _fnImplementState,\n\t\t_fnSettingsFromNode: _fnSettingsFromNode,\n\t\t_fnLog: _fnLog,\n\t\t_fnMap: _fnMap,\n\t\t_fnBindAction: _fnBindAction,\n\t\t_fnCallbackReg: _fnCallbackReg,\n\t\t_fnCallbackFire: _fnCallbackFire,\n\t\t_fnLengthOverflow: _fnLengthOverflow,\n\t\t_fnRenderer: _fnRenderer,\n\t\t_fnDataSource: _fnDataSource,\n\t\t_fnRowAttributes: _fnRowAttributes,\n\t\t_fnExtend: _fnExtend,\n\t\t_fnCalculateEnd: function () {} // Used by a lot of plug-ins, but redundant\n\t\t                                // in 1.10, so this dead-end function is\n\t\t                                // added to prevent errors\n\t} );\n\t\n\t\n\t// jQuery access\n\t$.fn.dataTable = DataTable;\n\t\n\t// Provide access to the host jQuery object (circular reference)\n\tDataTable.$ = $;\n\t\n\t// Legacy aliases\n\t$.fn.dataTableSettings = DataTable.settings;\n\t$.fn.dataTableExt = DataTable.ext;\n\t\n\t// With a capital `D` we return a DataTables API instance rather than a\n\t// jQuery object\n\t$.fn.DataTable = function ( opts ) {\n\t\treturn $(this).dataTable( opts ).api();\n\t};\n\t\n\t// All properties that are available to $.fn.dataTable should also be\n\t// available on $.fn.DataTable\n\t$.each( DataTable, function ( prop, val ) {\n\t\t$.fn.DataTable[ prop ] = val;\n\t} );\n\t\n\treturn DataTable;\n}));\n","/*!\n * jQuery UI Touch Punch 0.2.3\n *\n * Copyright 2011–2014, Dave Furfero\n * Dual licensed under the MIT or GPL Version 2 licenses.\n *\n * Depends:\n *  jquery.ui.widget.js\n *  jquery.ui.mouse.js\n */\n(function ($) {\n\n  // Detect touch support\n  $.support.touch = 'ontouchend' in document;\n\n  // Ignore browsers without touch support\n  if (!$.support.touch) {\n    return;\n  }\n\n  var mouseProto = $.ui.mouse.prototype,\n      _mouseInit = mouseProto._mouseInit,\n      _mouseDestroy = mouseProto._mouseDestroy,\n      touchHandled;\n\n  /**\n   * Simulate a mouse event based on a corresponding touch event\n   * @param {Object} event A touch event\n   * @param {String} simulatedType The corresponding mouse event\n   */\n  function simulateMouseEvent (event, simulatedType) {\n\n    // Ignore multi-touch events\n    if (event.originalEvent.touches.length > 1) {\n      return;\n    }\n\n    event.preventDefault();\n\n    var touch = event.originalEvent.changedTouches[0],\n        simulatedEvent = document.createEvent('MouseEvents');\n    \n    // Initialize the simulated mouse event using the touch event's coordinates\n    simulatedEvent.initMouseEvent(\n      simulatedType,    // type\n      true,             // bubbles                    \n      true,             // cancelable                 \n      window,           // view                       \n      1,                // detail                     \n      touch.screenX,    // screenX                    \n      touch.screenY,    // screenY                    \n      touch.clientX,    // clientX                    \n      touch.clientY,    // clientY                    \n      false,            // ctrlKey                    \n      false,            // altKey                     \n      false,            // shiftKey                   \n      false,            // metaKey                    \n      0,                // button                     \n      null              // relatedTarget              \n    );\n\n    // Dispatch the simulated event to the target element\n    event.target.dispatchEvent(simulatedEvent);\n  }\n\n  /**\n   * Handle the jQuery UI widget's touchstart events\n   * @param {Object} event The widget element's touchstart event\n   */\n  mouseProto._touchStart = function (event) {\n\n    var self = this;\n\n    // Ignore the event if another widget is already being handled\n    if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) {\n      return;\n    }\n\n    // Set the flag to prevent other widgets from inheriting the touch event\n    touchHandled = true;\n\n    // Track movement to determine if interaction was a click\n    self._touchMoved = false;\n\n    // Simulate the mouseover event\n    simulateMouseEvent(event, 'mouseover');\n\n    // Simulate the mousemove event\n    simulateMouseEvent(event, 'mousemove');\n\n    // Simulate the mousedown event\n    simulateMouseEvent(event, 'mousedown');\n  };\n\n  /**\n   * Handle the jQuery UI widget's touchmove events\n   * @param {Object} event The document's touchmove event\n   */\n  mouseProto._touchMove = function (event) {\n\n    // Ignore event if not handled\n    if (!touchHandled) {\n      return;\n    }\n\n    // Interaction was not a click\n    this._touchMoved = true;\n\n    // Simulate the mousemove event\n    simulateMouseEvent(event, 'mousemove');\n  };\n\n  /**\n   * Handle the jQuery UI widget's touchend events\n   * @param {Object} event The document's touchend event\n   */\n  mouseProto._touchEnd = function (event) {\n\n    // Ignore event if not handled\n    if (!touchHandled) {\n      return;\n    }\n\n    // Simulate the mouseup event\n    simulateMouseEvent(event, 'mouseup');\n\n    // Simulate the mouseout event\n    simulateMouseEvent(event, 'mouseout');\n\n    // If the touch interaction did not move, it should trigger a click\n    if (!this._touchMoved) {\n\n      // Simulate the click event\n      simulateMouseEvent(event, 'click');\n    }\n\n    // Unset the flag to allow other widgets to inherit the touch event\n    touchHandled = false;\n  };\n\n  /**\n   * A duck punch of the $.ui.mouse _mouseInit method to support touch events.\n   * This method extends the widget with bound touch event handlers that\n   * translate touch events to mouse events and pass them to the widget's\n   * original mouse event handling methods.\n   */\n  mouseProto._mouseInit = function () {\n    \n    var self = this;\n\n    // Delegate the touch handlers to the widget's element\n    self.element.bind({\n      touchstart: $.proxy(self, '_touchStart'),\n      touchmove: $.proxy(self, '_touchMove'),\n      touchend: $.proxy(self, '_touchEnd')\n    });\n\n    // Call the original $.ui.mouse init method\n    _mouseInit.call(self);\n  };\n\n  /**\n   * Remove the touch event handlers\n   */\n  mouseProto._mouseDestroy = function () {\n    \n    var self = this;\n\n    // Delegate the touch handlers to the widget's element\n    self.element.unbind({\n      touchstart: $.proxy(self, '_touchStart'),\n      touchmove: $.proxy(self, '_touchMove'),\n      touchend: $.proxy(self, '_touchEnd')\n    });\n\n    // Call the original $.ui.mouse destroy method\n    _mouseDestroy.call(self);\n  };\n\n})(jQuery);","require('./jquery.scrollbar');\r\nmodule.exports = 'jQueryScrollbar';\r\n\r\n","/**\r\n * jQuery CSS Customizable Scrollbar\r\n *\r\n * Copyright 2015, Yuriy Khabarov\r\n * Dual licensed under the MIT or GPL Version 2 licenses.\r\n *\r\n * If you found bug, please contact me via email <13real008@gmail.com>\r\n *\r\n * @author Yuriy Khabarov aka Gromo\r\n * @version 0.2.11\r\n * @url https://github.com/gromo/jquery.scrollbar/\r\n *\r\n */\r\n;\r\n(function (root, factory) {\r\n    if (typeof define === 'function' && define.amd) {\r\n        define(['jquery'], factory);\r\n    } else if (typeof exports !== \"undefined\") {\r\n        factory(require('jquery'));\r\n    } else {\r\n        factory(root.jQuery);\r\n    }\r\n}(this, function ($) {\r\n    'use strict';\r\n\r\n    // init flags & variables\r\n    var debug = false;\r\n\r\n    var browser = {\r\n        data: {\r\n            index: 0,\r\n            name: 'scrollbar'\r\n        },\r\n        firefox: /firefox/i.test(navigator.userAgent),\r\n        macosx: /mac/i.test(navigator.platform),\r\n        msedge: /edge\\/\\d+/i.test(navigator.userAgent),\r\n        msie: /(msie|trident)/i.test(navigator.userAgent),\r\n        mobile: /android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),\r\n        overlay: null,\r\n        scroll: null,\r\n        scrolls: [],\r\n        webkit: /webkit/i.test(navigator.userAgent) && !/edge\\/\\d+/i.test(navigator.userAgent)\r\n    };\r\n\r\n    browser.scrolls.add = function (instance) {\r\n        this.remove(instance).push(instance);\r\n    };\r\n    browser.scrolls.remove = function (instance) {\r\n        while ($.inArray(instance, this) >= 0) {\r\n            this.splice($.inArray(instance, this), 1);\r\n        }\r\n        return this;\r\n    };\r\n\r\n    var defaults = {\r\n        autoScrollSize: true, // automatically calculate scrollsize\r\n        autoUpdate: true, // update scrollbar if content/container size changed\r\n        debug: false, // debug mode\r\n        disableBodyScroll: false, // disable body scroll if mouse over container\r\n        duration: 200, // scroll animate duration in ms\r\n        ignoreMobile: false, // ignore mobile devices\r\n        ignoreOverlay: false, // ignore browsers with overlay scrollbars (mobile, MacOS)\r\n        isRtl: false, // is RTL\r\n        scrollStep: 30, // scroll step for scrollbar arrows\r\n        showArrows: false, // add class to show arrows\r\n        stepScrolling: true, // when scrolling to scrollbar mousedown position\r\n\r\n        scrollx: null, // horizontal scroll element\r\n        scrolly: null, // vertical scroll element\r\n\r\n        onDestroy: null, // callback function on destroy,\r\n        onFallback: null, // callback function if scrollbar is not initialized\r\n        onInit: null, // callback function on first initialization\r\n        onScroll: null, // callback function on content scrolling\r\n        onUpdate: null            // callback function on init/resize (before scrollbar size calculation)\r\n    };\r\n\r\n\r\n    var BaseScrollbar = function (container) {\r\n\r\n        if (!browser.scroll) {\r\n            browser.overlay = isScrollOverlaysContent();\r\n            browser.scroll = getBrowserScrollSize();\r\n            updateScrollbars();\r\n\r\n            $(window).resize(function () {\r\n                var forceUpdate = false;\r\n                if (browser.scroll && (browser.scroll.height || browser.scroll.width)) {\r\n                    var scroll = getBrowserScrollSize();\r\n                    if (scroll.height !== browser.scroll.height || scroll.width !== browser.scroll.width) {\r\n                        browser.scroll = scroll;\r\n                        forceUpdate = true; // handle page zoom\r\n                    }\r\n                }\r\n                updateScrollbars(forceUpdate);\r\n            });\r\n        }\r\n\r\n        this.container = container;\r\n        this.namespace = '.scrollbar_' + browser.data.index++;\r\n        this.options = $.extend({}, defaults, window.jQueryScrollbarOptions || {});\r\n        this.scrollTo = null;\r\n        this.scrollx = {};\r\n        this.scrolly = {};\r\n\r\n        container.data(browser.data.name, this);\r\n        browser.scrolls.add(this);\r\n    };\r\n\r\n    BaseScrollbar.prototype = {\r\n        destroy: function () {\r\n\r\n            if (!this.wrapper) {\r\n                return;\r\n            }\r\n\r\n            this.container.removeData(browser.data.name);\r\n            browser.scrolls.remove(this);\r\n\r\n            // init variables\r\n            var scrollLeft = this.container.scrollLeft();\r\n            var scrollTop = this.container.scrollTop();\r\n\r\n            this.container.insertBefore(this.wrapper).css({\r\n                \"height\": \"\",\r\n                \"margin\": \"\",\r\n                \"max-height\": \"\"\r\n            })\r\n                .removeClass('scroll-content scroll-scrollx_visible scroll-scrolly_visible')\r\n                .off(this.namespace)\r\n                .scrollLeft(scrollLeft)\r\n                .scrollTop(scrollTop);\r\n\r\n            this.scrollx.scroll.removeClass('scroll-scrollx_visible').find('div').addBack().off(this.namespace);\r\n            this.scrolly.scroll.removeClass('scroll-scrolly_visible').find('div').addBack().off(this.namespace);\r\n\r\n            this.wrapper.remove();\r\n\r\n            $(document).add('body').off(this.namespace);\r\n\r\n            if ($.isFunction(this.options.onDestroy)) {\r\n                this.options.onDestroy.apply(this, [this.container]);\r\n            }\r\n        },\r\n        init: function (options) {\r\n\r\n            // init variables\r\n            var S = this,\r\n                c = this.container,\r\n                cw = this.containerWrapper || c,\r\n                namespace = this.namespace,\r\n                o = $.extend(this.options, options || {}),\r\n                s = {x: this.scrollx, y: this.scrolly},\r\n            w = this.wrapper,\r\n                cssOptions = {};\r\n\r\n            var initScroll = {\r\n                scrollLeft: c.scrollLeft(),\r\n                scrollTop: c.scrollTop()\r\n            };\r\n\r\n            // do not init if in ignorable browser\r\n            if ((browser.mobile && o.ignoreMobile)\r\n                || (browser.overlay && o.ignoreOverlay)\r\n                || (browser.macosx && !browser.webkit) // still required to ignore nonWebKit browsers on Mac\r\n                ) {\r\n                if ($.isFunction(o.onFallback)) {\r\n                    o.onFallback.apply(this, [c]);\r\n                }\r\n                return false;\r\n            }\r\n\r\n            // init scroll container\r\n            if (!w) {\r\n                this.wrapper = w = $('<div>').addClass('scroll-wrapper').addClass(c.attr('class'))\r\n                    .css('position', c.css('position') === 'absolute' ? 'absolute' : 'relative')\r\n                    .insertBefore(c).append(c);\r\n\r\n                if (o.isRtl) {\r\n                    w.addClass('scroll--rtl');\r\n                }\r\n\r\n                if (c.is('textarea')) {\r\n                    this.containerWrapper = cw = $('<div>').insertBefore(c).append(c);\r\n                    w.addClass('scroll-textarea');\r\n                }\r\n\r\n                cssOptions = {\r\n                    \"height\": \"auto\",\r\n                    \"margin-bottom\": browser.scroll.height * -1 + 'px',\r\n                    \"max-height\": \"\"\r\n                };\r\n                cssOptions[o.isRtl ? 'margin-left' : 'margin-right'] = browser.scroll.width * -1 + 'px';\r\n\r\n                cw.addClass('scroll-content').css(cssOptions);\r\n\r\n                c.on('scroll' + namespace, function (event) {\r\n                    var scrollLeft = c.scrollLeft();\r\n                    var scrollTop = c.scrollTop();\r\n                    if (o.isRtl) {\r\n                        // webkit   0:100\r\n                        // ie/edge  100:0\r\n                        // firefox -100:0\r\n                        switch (true) {\r\n                            case browser.firefox:\r\n                                scrollLeft = Math.abs(scrollLeft);\r\n                            case browser.msedge || browser.msie:\r\n                                scrollLeft = c[0].scrollWidth - c[0].clientWidth - scrollLeft;\r\n                                break;\r\n                        }\r\n                    }\r\n                    if ($.isFunction(o.onScroll)) {\r\n                        o.onScroll.call(S, {\r\n                            maxScroll: s.y.maxScrollOffset,\r\n                            scroll: scrollTop,\r\n                            size: s.y.size,\r\n                            visible: s.y.visible\r\n                        }, {\r\n                            maxScroll: s.x.maxScrollOffset,\r\n                            scroll: scrollLeft,\r\n                            size: s.x.size,\r\n                            visible: s.x.visible\r\n                        });\r\n                    }\r\n                    s.x.isVisible && s.x.scroll.bar.css('left', scrollLeft * s.x.kx + 'px');\r\n                    s.y.isVisible && s.y.scroll.bar.css('top', scrollTop * s.y.kx + 'px');\r\n                });\r\n\r\n                /* prevent native scrollbars to be visible on #anchor click */\r\n                w.on('scroll' + namespace, function () {\r\n                    w.scrollTop(0).scrollLeft(0);\r\n                });\r\n\r\n                if (o.disableBodyScroll) {\r\n                    var handleMouseScroll = function (event) {\r\n                        isVerticalScroll(event) ?\r\n                            s.y.isVisible && s.y.mousewheel(event) :\r\n                            s.x.isVisible && s.x.mousewheel(event);\r\n                    };\r\n                    w.on('MozMousePixelScroll' + namespace, handleMouseScroll);\r\n                    w.on('mousewheel' + namespace, handleMouseScroll);\r\n\r\n                    if (browser.mobile) {\r\n                        w.on('touchstart' + namespace, function (event) {\r\n                            var touch = event.originalEvent.touches && event.originalEvent.touches[0] || event;\r\n                            var originalTouch = {\r\n                                pageX: touch.pageX,\r\n                                pageY: touch.pageY\r\n                            };\r\n                            var originalScroll = {\r\n                                left: c.scrollLeft(),\r\n                                top: c.scrollTop()\r\n                            };\r\n                            $(document).on('touchmove' + namespace, function (event) {\r\n                                var touch = event.originalEvent.targetTouches && event.originalEvent.targetTouches[0] || event;\r\n                                c.scrollLeft(originalScroll.left + originalTouch.pageX - touch.pageX);\r\n                                c.scrollTop(originalScroll.top + originalTouch.pageY - touch.pageY);\r\n                                event.preventDefault();\r\n                            });\r\n                            $(document).on('touchend' + namespace, function () {\r\n                                $(document).off(namespace);\r\n                            });\r\n                        });\r\n                    }\r\n                }\r\n                if ($.isFunction(o.onInit)) {\r\n                    o.onInit.apply(this, [c]);\r\n                }\r\n            } else {\r\n                cssOptions = {\r\n                    \"height\": \"auto\",\r\n                    \"margin-bottom\": browser.scroll.height * -1 + 'px',\r\n                    \"max-height\": \"\"\r\n                };\r\n                cssOptions[o.isRtl ? 'margin-left' : 'margin-right'] = browser.scroll.width * -1 + 'px';\r\n                cw.css(cssOptions);\r\n            }\r\n\r\n            // init scrollbars & recalculate sizes\r\n            $.each(s, function (d, scrollx) {\r\n\r\n                var scrollCallback = null;\r\n                var scrollForward = 1;\r\n                var scrollOffset = (d === 'x') ? 'scrollLeft' : 'scrollTop';\r\n                var scrollStep = o.scrollStep;\r\n                var scrollTo = function () {\r\n                    var currentOffset = c[scrollOffset]();\r\n                    c[scrollOffset](currentOffset + scrollStep);\r\n                    if (scrollForward == 1 && (currentOffset + scrollStep) >= scrollToValue)\r\n                        currentOffset = c[scrollOffset]();\r\n                    if (scrollForward == -1 && (currentOffset + scrollStep) <= scrollToValue)\r\n                        currentOffset = c[scrollOffset]();\r\n                    if (c[scrollOffset]() == currentOffset && scrollCallback) {\r\n                        scrollCallback();\r\n                    }\r\n                }\r\n                var scrollToValue = 0;\r\n\r\n                if (!scrollx.scroll) {\r\n\r\n                    scrollx.scroll = S._getScroll(o['scroll' + d]).addClass('scroll-' + d);\r\n\r\n                    if (o.showArrows) {\r\n                        scrollx.scroll.addClass('scroll-element_arrows_visible');\r\n                    }\r\n\r\n                    scrollx.mousewheel = function (event) {\r\n\r\n                        if (!scrollx.isVisible || (d === 'x' && isVerticalScroll(event))) {\r\n                            return true;\r\n                        }\r\n                        if (d === 'y' && !isVerticalScroll(event)) {\r\n                            s.x.mousewheel(event);\r\n                            return true;\r\n                        }\r\n\r\n                        var delta = event.originalEvent.wheelDelta * -1 || event.originalEvent.detail;\r\n                        var maxScrollValue = scrollx.size - scrollx.visible - scrollx.offset;\r\n\r\n                        // fix new mozilla\r\n                        if (!delta) {\r\n                            if (d === 'x' && !!event.originalEvent.deltaX) {\r\n                                delta = event.originalEvent.deltaX * 40;\r\n                            } else if (d === 'y' && !!event.originalEvent.deltaY) {\r\n                                delta = event.originalEvent.deltaY * 40;\r\n                            }\r\n                        }\r\n\r\n                        if ((delta > 0 && scrollToValue < maxScrollValue) || (delta < 0 && scrollToValue > 0)) {\r\n                            scrollToValue = scrollToValue + delta;\r\n                            if (scrollToValue < 0)\r\n                                scrollToValue = 0;\r\n                            if (scrollToValue > maxScrollValue)\r\n                                scrollToValue = maxScrollValue;\r\n\r\n                            S.scrollTo = S.scrollTo || {};\r\n                            S.scrollTo[scrollOffset] = scrollToValue;\r\n                            setTimeout(function () {\r\n                                if (S.scrollTo) {\r\n                                    c.stop().animate(S.scrollTo, 240, 'linear', function () {\r\n                                        scrollToValue = c[scrollOffset]();\r\n                                    });\r\n                                    S.scrollTo = null;\r\n                                }\r\n                            }, 1);\r\n                        }\r\n\r\n                        event.preventDefault();\r\n                        return false;\r\n                    };\r\n\r\n                    scrollx.scroll\r\n                        .on('MozMousePixelScroll' + namespace, scrollx.mousewheel)\r\n                        .on('mousewheel' + namespace, scrollx.mousewheel)\r\n                        .on('mouseenter' + namespace, function () {\r\n                            scrollToValue = c[scrollOffset]();\r\n                        });\r\n\r\n                    // handle arrows & scroll inner mousedown event\r\n                    scrollx.scroll.find('.scroll-arrow, .scroll-element_track')\r\n                        .on('mousedown' + namespace, function (event) {\r\n\r\n                            if (event.which != 1) // lmb\r\n                                return true;\r\n\r\n                            scrollForward = 1;\r\n\r\n                            var data = {\r\n                                eventOffset: event[(d === 'x') ? 'pageX' : 'pageY'],\r\n                                maxScrollValue: scrollx.size - scrollx.visible - scrollx.offset,\r\n                                scrollbarOffset: scrollx.scroll.bar.offset()[(d === 'x') ? 'left' : 'top'],\r\n                                scrollbarSize: scrollx.scroll.bar[(d === 'x') ? 'outerWidth' : 'outerHeight']()\r\n                            };\r\n                            var timeout = 0, timer = 0;\r\n\r\n                            if ($(this).hasClass('scroll-arrow')) {\r\n                                scrollForward = $(this).hasClass(\"scroll-arrow_more\") ? 1 : -1;\r\n                                scrollStep = o.scrollStep * scrollForward;\r\n                                scrollToValue = scrollForward > 0 ? data.maxScrollValue : 0;\r\n                                if (o.isRtl) {\r\n                                    switch(true){\r\n                                        case browser.firefox:\r\n                                            scrollToValue = scrollForward > 0 ? 0: data.maxScrollValue * -1;\r\n                                            break;\r\n                                        case browser.msie || browser.msedge:\r\n                                            break;\r\n                                    }\r\n                                }\r\n                            } else {\r\n                                scrollForward = (data.eventOffset > (data.scrollbarOffset + data.scrollbarSize) ? 1\r\n                                    : (data.eventOffset < data.scrollbarOffset ? -1 : 0));\r\n                                if(d === 'x' && o.isRtl && (browser.msie || browser.msedge))\r\n                                    scrollForward = scrollForward * -1;\r\n                                scrollStep = Math.round(scrollx.visible * 0.75) * scrollForward;\r\n                                scrollToValue = (data.eventOffset - data.scrollbarOffset -\r\n                                    (o.stepScrolling ? (scrollForward == 1 ? data.scrollbarSize : 0)\r\n                                        : Math.round(data.scrollbarSize / 2)));\r\n                                scrollToValue = c[scrollOffset]() + (scrollToValue / scrollx.kx);\r\n                            }\r\n\r\n                            S.scrollTo = S.scrollTo || {};\r\n                            S.scrollTo[scrollOffset] = o.stepScrolling ? c[scrollOffset]() + scrollStep : scrollToValue;\r\n\r\n                            if (o.stepScrolling) {\r\n                                scrollCallback = function () {\r\n                                    scrollToValue = c[scrollOffset]();\r\n                                    clearInterval(timer);\r\n                                    clearTimeout(timeout);\r\n                                    timeout = 0;\r\n                                    timer = 0;\r\n                                };\r\n                                timeout = setTimeout(function () {\r\n                                    timer = setInterval(scrollTo, 40);\r\n                                }, o.duration + 100);\r\n                            }\r\n\r\n                            setTimeout(function () {\r\n                                if (S.scrollTo) {\r\n                                    c.animate(S.scrollTo, o.duration);\r\n                                    S.scrollTo = null;\r\n                                }\r\n                            }, 1);\r\n\r\n                            return S._handleMouseDown(scrollCallback, event);\r\n                        });\r\n\r\n                    // handle scrollbar drag'n'drop\r\n                    scrollx.scroll.bar.on('mousedown' + namespace, function (event) {\r\n\r\n                        if (event.which != 1) // lmb\r\n                            return true;\r\n\r\n                        var eventPosition = event[(d === 'x') ? 'pageX' : 'pageY'];\r\n                        var initOffset = c[scrollOffset]();\r\n\r\n                        scrollx.scroll.addClass('scroll-draggable');\r\n\r\n                        $(document).on('mousemove' + namespace, function (event) {\r\n                            var diff = parseInt((event[(d === 'x') ? 'pageX' : 'pageY'] - eventPosition) / scrollx.kx, 10);\r\n                            if (d === 'x' && o.isRtl && (browser.msie || browser.msedge))\r\n                                diff = diff * -1;\r\n                            c[scrollOffset](initOffset + diff);\r\n                        });\r\n\r\n                        return S._handleMouseDown(function () {\r\n                            scrollx.scroll.removeClass('scroll-draggable');\r\n                            scrollToValue = c[scrollOffset]();\r\n                        }, event);\r\n                    });\r\n                }\r\n            });\r\n\r\n            // remove classes & reset applied styles\r\n            $.each(s, function (d, scrollx) {\r\n                var scrollClass = 'scroll-scroll' + d + '_visible';\r\n                var scrolly = (d == \"x\") ? s.y : s.x;\r\n\r\n                scrollx.scroll.removeClass(scrollClass);\r\n                scrolly.scroll.removeClass(scrollClass);\r\n                cw.removeClass(scrollClass);\r\n            });\r\n\r\n            // calculate init sizes\r\n            $.each(s, function (d, scrollx) {\r\n                $.extend(scrollx, (d == \"x\") ? {\r\n                    offset: parseInt(c.css('left'), 10) || 0,\r\n                    size: c.prop('scrollWidth'),\r\n                    visible: w.width()\r\n                } : {\r\n                    offset: parseInt(c.css('top'), 10) || 0,\r\n                    size: c.prop('scrollHeight'),\r\n                    visible: w.height()\r\n                });\r\n            });\r\n\r\n            // update scrollbar visibility/dimensions\r\n            this._updateScroll('x', this.scrollx);\r\n            this._updateScroll('y', this.scrolly);\r\n\r\n            if ($.isFunction(o.onUpdate)) {\r\n                o.onUpdate.apply(this, [c]);\r\n            }\r\n\r\n            // calculate scroll size\r\n            $.each(s, function (d, scrollx) {\r\n\r\n                var cssOffset = (d === 'x') ? 'left' : 'top';\r\n                var cssFullSize = (d === 'x') ? 'outerWidth' : 'outerHeight';\r\n                var cssSize = (d === 'x') ? 'width' : 'height';\r\n                var offset = parseInt(c.css(cssOffset), 10) || 0;\r\n\r\n                var AreaSize = scrollx.size;\r\n                var AreaVisible = scrollx.visible + offset;\r\n\r\n                var scrollSize = scrollx.scroll.size[cssFullSize]() + (parseInt(scrollx.scroll.size.css(cssOffset), 10) || 0);\r\n\r\n                if (o.autoScrollSize) {\r\n                    scrollx.scrollbarSize = parseInt(scrollSize * AreaVisible / AreaSize, 10);\r\n                    scrollx.scroll.bar.css(cssSize, scrollx.scrollbarSize + 'px');\r\n                }\r\n\r\n                scrollx.scrollbarSize = scrollx.scroll.bar[cssFullSize]();\r\n                scrollx.kx = ((scrollSize - scrollx.scrollbarSize) / (AreaSize - AreaVisible)) || 1;\r\n                scrollx.maxScrollOffset = AreaSize - AreaVisible;\r\n            });\r\n\r\n            c.scrollLeft(initScroll.scrollLeft).scrollTop(initScroll.scrollTop).trigger('scroll');\r\n        },\r\n        /**\r\n         * Get scrollx/scrolly object\r\n         *\r\n         * @param {Mixed} scroll\r\n         * @returns {jQuery} scroll object\r\n         */\r\n        _getScroll: function (scroll) {\r\n            var types = {\r\n                advanced: [\r\n                    '<div class=\"scroll-element\">',\r\n                    '<div class=\"scroll-element_corner\"></div>',\r\n                    '<div class=\"scroll-arrow scroll-arrow_less\"></div>',\r\n                    '<div class=\"scroll-arrow scroll-arrow_more\"></div>',\r\n                    '<div class=\"scroll-element_outer\">',\r\n                    '<div class=\"scroll-element_size\"></div>', // required! used for scrollbar size calculation !\r\n                    '<div class=\"scroll-element_inner-wrapper\">',\r\n                    '<div class=\"scroll-element_inner scroll-element_track\">', // used for handling scrollbar click\r\n                    '<div class=\"scroll-element_inner-bottom\"></div>',\r\n                    '</div>',\r\n                    '</div>',\r\n                    '<div class=\"scroll-bar\">', // required\r\n                    '<div class=\"scroll-bar_body\">',\r\n                    '<div class=\"scroll-bar_body-inner\"></div>',\r\n                    '</div>',\r\n                    '<div class=\"scroll-bar_bottom\"></div>',\r\n                    '<div class=\"scroll-bar_center\"></div>',\r\n                    '</div>',\r\n                    '</div>',\r\n                    '</div>'\r\n                ].join(''),\r\n                simple: [\r\n                    '<div class=\"scroll-element\">',\r\n                    '<div class=\"scroll-element_outer\">',\r\n                    '<div class=\"scroll-element_size\"></div>', // required! used for scrollbar size calculation !\r\n                    '<div class=\"scroll-element_track\"></div>', // used for handling scrollbar click\r\n                    '<div class=\"scroll-bar\"></div>', // required\r\n                    '</div>',\r\n                    '</div>'\r\n                ].join('')\r\n            };\r\n            if (types[scroll]) {\r\n                scroll = types[scroll];\r\n            }\r\n            if (!scroll) {\r\n                scroll = types['simple'];\r\n            }\r\n            if (typeof (scroll) == 'string') {\r\n                scroll = $(scroll).appendTo(this.wrapper);\r\n            } else {\r\n                scroll = $(scroll);\r\n            }\r\n            $.extend(scroll, {\r\n                bar: scroll.find('.scroll-bar'),\r\n                size: scroll.find('.scroll-element_size'),\r\n                track: scroll.find('.scroll-element_track')\r\n            });\r\n            return scroll;\r\n        },\r\n        _handleMouseDown: function (callback, event) {\r\n\r\n            var namespace = this.namespace;\r\n\r\n            $(document).on('blur' + namespace, function () {\r\n                $(document).add('body').off(namespace);\r\n                callback && callback();\r\n            });\r\n            $(document).on('dragstart' + namespace, function (event) {\r\n                event.preventDefault();\r\n                return false;\r\n            });\r\n            $(document).on('mouseup' + namespace, function () {\r\n                $(document).add('body').off(namespace);\r\n                callback && callback();\r\n            });\r\n            $('body').on('selectstart' + namespace, function (event) {\r\n                event.preventDefault();\r\n                return false;\r\n            });\r\n\r\n            event && event.preventDefault();\r\n            return false;\r\n        },\r\n        _updateScroll: function (d, scrollx) {\r\n\r\n            var container = this.container,\r\n                containerWrapper = this.containerWrapper || container,\r\n                scrollClass = 'scroll-scroll' + d + '_visible',\r\n                scrolly = (d === 'x') ? this.scrolly : this.scrollx,\r\n                offset = parseInt(this.container.css((d === 'x') ? 'left' : 'top'), 10) || 0,\r\n                wrapper = this.wrapper;\r\n\r\n            var AreaSize = scrollx.size;\r\n            var AreaVisible = scrollx.visible + offset;\r\n\r\n            scrollx.isVisible = (AreaSize - AreaVisible) > 1; // bug in IE9/11 with 1px diff\r\n            if (scrollx.isVisible) {\r\n                scrollx.scroll.addClass(scrollClass);\r\n                scrolly.scroll.addClass(scrollClass);\r\n                containerWrapper.addClass(scrollClass);\r\n            } else {\r\n                scrollx.scroll.removeClass(scrollClass);\r\n                scrolly.scroll.removeClass(scrollClass);\r\n                containerWrapper.removeClass(scrollClass);\r\n            }\r\n\r\n            if (d === 'y') {\r\n                if (container.is('textarea') || AreaSize < AreaVisible) {\r\n                    containerWrapper.css({\r\n                        \"height\": (AreaVisible + browser.scroll.height) + 'px',\r\n                        \"max-height\": \"none\"\r\n                    });\r\n                } else {\r\n                    containerWrapper.css({\r\n                        //\"height\": \"auto\", // do not reset height value: issue with height:100%!\r\n                        \"max-height\": (AreaVisible + browser.scroll.height) + 'px'\r\n                    });\r\n                }\r\n            }\r\n\r\n            if (scrollx.size != container.prop('scrollWidth')\r\n                || scrolly.size != container.prop('scrollHeight')\r\n                || scrollx.visible != wrapper.width()\r\n                || scrolly.visible != wrapper.height()\r\n                || scrollx.offset != (parseInt(container.css('left'), 10) || 0)\r\n                || scrolly.offset != (parseInt(container.css('top'), 10) || 0)\r\n                ) {\r\n                $.extend(this.scrollx, {\r\n                    offset: parseInt(container.css('left'), 10) || 0,\r\n                    size: container.prop('scrollWidth'),\r\n                    visible: wrapper.width()\r\n                });\r\n                $.extend(this.scrolly, {\r\n                    offset: parseInt(container.css('top'), 10) || 0,\r\n                    size: this.container.prop('scrollHeight'),\r\n                    visible: wrapper.height()\r\n                });\r\n                this._updateScroll(d === 'x' ? 'y' : 'x', scrolly);\r\n            }\r\n        }\r\n    };\r\n\r\n    var CustomScrollbar = BaseScrollbar;\r\n\r\n    /*\r\n     * Extend jQuery as plugin\r\n     *\r\n     * @param {Mixed} command to execute\r\n     * @param {Mixed} arguments as Array\r\n     * @return {jQuery}\r\n     */\r\n    $.fn.scrollbar = function (command, args) {\r\n        if (typeof command !== 'string') {\r\n            args = command;\r\n            command = 'init';\r\n        }\r\n        if (typeof args === 'undefined') {\r\n            args = [];\r\n        }\r\n        if (!$.isArray(args)) {\r\n            args = [args];\r\n        }\r\n        this.not('body, .scroll-wrapper').each(function () {\r\n            var element = $(this),\r\n                instance = element.data(browser.data.name);\r\n            if (instance || command === 'init') {\r\n                if (!instance) {\r\n                    instance = new CustomScrollbar(element);\r\n                }\r\n                if (instance[command]) {\r\n                    instance[command].apply(instance, args);\r\n                }\r\n            }\r\n        });\r\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Connect default options to global object\r\n     */\r\n    $.fn.scrollbar.options = defaults;\r\n\r\n\r\n    /**\r\n     * Check if scroll content/container size is changed\r\n     */\r\n\r\n    var updateScrollbars = (function () {\r\n        var timer = 0,\r\n            timerCounter = 0;\r\n\r\n        return function (force) {\r\n            var i, container, options, scroll, wrapper, scrollx, scrolly;\r\n            for (i = 0; i < browser.scrolls.length; i++) {\r\n                scroll = browser.scrolls[i];\r\n                container = scroll.container;\r\n                options = scroll.options;\r\n                wrapper = scroll.wrapper;\r\n                scrollx = scroll.scrollx;\r\n                scrolly = scroll.scrolly;\r\n                if (force || (options.autoUpdate && wrapper && wrapper.is(':visible') &&\r\n                    (container.prop('scrollWidth') != scrollx.size || container.prop('scrollHeight') != scrolly.size || wrapper.width() != scrollx.visible || wrapper.height() != scrolly.visible))) {\r\n                    scroll.init();\r\n\r\n                    if (options.debug) {\r\n                        window.console && console.log({\r\n                            scrollHeight: container.prop('scrollHeight') + ':' + scroll.scrolly.size,\r\n                            scrollWidth: container.prop('scrollWidth') + ':' + scroll.scrollx.size,\r\n                            visibleHeight: wrapper.height() + ':' + scroll.scrolly.visible,\r\n                            visibleWidth: wrapper.width() + ':' + scroll.scrollx.visible\r\n                        }, true);\r\n                        timerCounter++;\r\n                    }\r\n                }\r\n            }\r\n            if (debug && timerCounter > 10) {\r\n                window.console && console.log('Scroll updates exceed 10');\r\n                updateScrollbars = function () {};\r\n            } else {\r\n                clearTimeout(timer);\r\n                timer = setTimeout(updateScrollbars, 300);\r\n            }\r\n        };\r\n    })();\r\n\r\n    /* ADDITIONAL FUNCTIONS */\r\n    /**\r\n     * Get native browser scrollbar size (height/width)\r\n     *\r\n     * @param {Boolean} actual size or CSS size, default - CSS size\r\n     * @returns {Object} with height, width\r\n     */\r\n    function getBrowserScrollSize(actualSize) {\r\n\r\n        if (browser.webkit && !actualSize) {\r\n            return {\r\n                height: 0,\r\n                width: 0\r\n            };\r\n        }\r\n\r\n        if (!browser.data.outer) {\r\n            var css = {\r\n                \"border\": \"none\",\r\n                \"box-sizing\": \"content-box\",\r\n                \"height\": \"200px\",\r\n                \"margin\": \"0\",\r\n                \"padding\": \"0\",\r\n                \"width\": \"200px\"\r\n            };\r\n            browser.data.inner = $(\"<div>\").css($.extend({}, css));\r\n            browser.data.outer = $(\"<div>\").css($.extend({\r\n                \"left\": \"-1000px\",\r\n                \"overflow\": \"scroll\",\r\n                \"position\": \"absolute\",\r\n                \"top\": \"-1000px\"\r\n            }, css)).append(browser.data.inner).appendTo(\"body\");\r\n        }\r\n\r\n        browser.data.outer.scrollLeft(1000).scrollTop(1000);\r\n\r\n        return {\r\n            height: Math.ceil((browser.data.outer.offset().top - browser.data.inner.offset().top) || 0),\r\n            width: Math.ceil((browser.data.outer.offset().left - browser.data.inner.offset().left) || 0)\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Check if native browser scrollbars overlay content\r\n     *\r\n     * @returns {Boolean}\r\n     */\r\n    function isScrollOverlaysContent() {\r\n        var scrollSize = getBrowserScrollSize(true);\r\n        return !(scrollSize.height || scrollSize.width);\r\n    }\r\n\r\n    function isVerticalScroll(event) {\r\n        var e = event.originalEvent;\r\n        if (e.axis && e.axis === e.HORIZONTAL_AXIS)\r\n            return false;\r\n        if (e.wheelDeltaX)\r\n            return false;\r\n        return true;\r\n    }\r\n\r\n\r\n    /**\r\n     * Extend AngularJS as UI directive\r\n     * and expose a provider for override default config\r\n     *\r\n     */\r\n    if (window.angular) {\r\n        (function (angular) {\r\n            angular.module('jQueryScrollbar', [])\r\n                .provider('jQueryScrollbar', function () {\r\n                    var defaultOptions = defaults;\r\n                    return {\r\n                        setOptions: function (options) {\r\n                            angular.extend(defaultOptions, options);\r\n                        },\r\n                        $get: function () {\r\n                            return {\r\n                                options: angular.copy(defaultOptions)\r\n                            };\r\n                        }\r\n                    };\r\n                })\r\n                .directive('jqueryScrollbar', ['jQueryScrollbar', '$parse', function (jQueryScrollbar, $parse) {\r\n                        return {\r\n                            restrict: \"AC\",\r\n                            link: function (scope, element, attrs) {\r\n                                var model = $parse(attrs.jqueryScrollbar),\r\n                                    options = model(scope);\r\n                                element.scrollbar(options || jQueryScrollbar.options)\r\n                                    .on('$destroy', function () {\r\n                                        element.scrollbar('destroy');\r\n                                    });\r\n                            }\r\n                        };\r\n                    }]);\r\n        })(window.angular);\r\n    }\r\n}));\r\n","/*!\n * jQuery JavaScript Library v3.6.0\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-03-02T17:08Z\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\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\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.6.0\",\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\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( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\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.6\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: 2021-02-16\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 && elem.namespaceURI,\n\t\tdocElem = elem && ( 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\treturn 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 primary Deferred\n\t\t\tprimary = 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\tprimary.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, primary.done( updateFunc( i ) ).resolve, primary.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 ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.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 ), primary.reject );\n\t\t}\n\n\t\treturn primary.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\t\tvalue :\n\t\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 rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\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\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\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\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\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\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is blurred by\n\t\t\t\t\t\t// clicking outside of it, it invokes the handler synchronously. If\n\t\t\t\t\t\t// that handler calls `.remove()` on the element, the data is cleared,\n\t\t\t\t\t\t// leaving `result` undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && 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\twhich: true\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\t// Suppress native focus or blur as it's already being fired\n\t\t// in leverageNative.\n\t\t_default: function() {\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\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\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;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\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, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\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\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\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) + \"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\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\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\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\n\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\t\"\" :\n\t\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\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 = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ 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, parserErrorElem;\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\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\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} ).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} ).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\noriginAnchor.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\tjQuery( callbackContext ) :\n\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 but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\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\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( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( 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(\n\t( \"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\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","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.21';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            }\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      return object == null || delete object[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = baseTrim(value);\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n","/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress\n * @license MIT */\n\n;(function(root, factory) {\n\n  if (typeof define === 'function' && define.amd) {\n    define(factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory();\n  } else {\n    root.NProgress = factory();\n  }\n\n})(this, function() {\n  var NProgress = {};\n\n  NProgress.version = '0.2.0';\n\n  var Settings = NProgress.settings = {\n    minimum: 0.08,\n    easing: 'ease',\n    positionUsing: '',\n    speed: 200,\n    trickle: true,\n    trickleRate: 0.02,\n    trickleSpeed: 800,\n    showSpinner: true,\n    barSelector: '[role=\"bar\"]',\n    spinnerSelector: '[role=\"spinner\"]',\n    parent: 'body',\n    template: '<div class=\"bar\" role=\"bar\"><div class=\"peg\"></div></div><div class=\"spinner\" role=\"spinner\"><div class=\"spinner-icon\"></div></div>'\n  };\n\n  /**\n   * Updates configuration.\n   *\n   *     NProgress.configure({\n   *       minimum: 0.1\n   *     });\n   */\n  NProgress.configure = function(options) {\n    var key, value;\n    for (key in options) {\n      value = options[key];\n      if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value;\n    }\n\n    return this;\n  };\n\n  /**\n   * Last number.\n   */\n\n  NProgress.status = null;\n\n  /**\n   * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.\n   *\n   *     NProgress.set(0.4);\n   *     NProgress.set(1.0);\n   */\n\n  NProgress.set = function(n) {\n    var started = NProgress.isStarted();\n\n    n = clamp(n, Settings.minimum, 1);\n    NProgress.status = (n === 1 ? null : n);\n\n    var progress = NProgress.render(!started),\n        bar      = progress.querySelector(Settings.barSelector),\n        speed    = Settings.speed,\n        ease     = Settings.easing;\n\n    progress.offsetWidth; /* Repaint */\n\n    queue(function(next) {\n      // Set positionUsing if it hasn't already been set\n      if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS();\n\n      // Add transition\n      css(bar, barPositionCSS(n, speed, ease));\n\n      if (n === 1) {\n        // Fade out\n        css(progress, { \n          transition: 'none', \n          opacity: 1 \n        });\n        progress.offsetWidth; /* Repaint */\n\n        setTimeout(function() {\n          css(progress, { \n            transition: 'all ' + speed + 'ms linear', \n            opacity: 0 \n          });\n          setTimeout(function() {\n            NProgress.remove();\n            next();\n          }, speed);\n        }, speed);\n      } else {\n        setTimeout(next, speed);\n      }\n    });\n\n    return this;\n  };\n\n  NProgress.isStarted = function() {\n    return typeof NProgress.status === 'number';\n  };\n\n  /**\n   * Shows the progress bar.\n   * This is the same as setting the status to 0%, except that it doesn't go backwards.\n   *\n   *     NProgress.start();\n   *\n   */\n  NProgress.start = function() {\n    if (!NProgress.status) NProgress.set(0);\n\n    var work = function() {\n      setTimeout(function() {\n        if (!NProgress.status) return;\n        NProgress.trickle();\n        work();\n      }, Settings.trickleSpeed);\n    };\n\n    if (Settings.trickle) work();\n\n    return this;\n  };\n\n  /**\n   * Hides the progress bar.\n   * This is the *sort of* the same as setting the status to 100%, with the\n   * difference being `done()` makes some placebo effect of some realistic motion.\n   *\n   *     NProgress.done();\n   *\n   * If `true` is passed, it will show the progress bar even if its hidden.\n   *\n   *     NProgress.done(true);\n   */\n\n  NProgress.done = function(force) {\n    if (!force && !NProgress.status) return this;\n\n    return NProgress.inc(0.3 + 0.5 * Math.random()).set(1);\n  };\n\n  /**\n   * Increments by a random amount.\n   */\n\n  NProgress.inc = function(amount) {\n    var n = NProgress.status;\n\n    if (!n) {\n      return NProgress.start();\n    } else {\n      if (typeof amount !== 'number') {\n        amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95);\n      }\n\n      n = clamp(n + amount, 0, 0.994);\n      return NProgress.set(n);\n    }\n  };\n\n  NProgress.trickle = function() {\n    return NProgress.inc(Math.random() * Settings.trickleRate);\n  };\n\n  /**\n   * Waits for all supplied jQuery promises and\n   * increases the progress as the promises resolve.\n   *\n   * @param $promise jQUery Promise\n   */\n  (function() {\n    var initial = 0, current = 0;\n\n    NProgress.promise = function($promise) {\n      if (!$promise || $promise.state() === \"resolved\") {\n        return this;\n      }\n\n      if (current === 0) {\n        NProgress.start();\n      }\n\n      initial++;\n      current++;\n\n      $promise.always(function() {\n        current--;\n        if (current === 0) {\n            initial = 0;\n            NProgress.done();\n        } else {\n            NProgress.set((initial - current) / initial);\n        }\n      });\n\n      return this;\n    };\n\n  })();\n\n  /**\n   * (Internal) renders the progress bar markup based on the `template`\n   * setting.\n   */\n\n  NProgress.render = function(fromStart) {\n    if (NProgress.isRendered()) return document.getElementById('nprogress');\n\n    addClass(document.documentElement, 'nprogress-busy');\n    \n    var progress = document.createElement('div');\n    progress.id = 'nprogress';\n    progress.innerHTML = Settings.template;\n\n    var bar      = progress.querySelector(Settings.barSelector),\n        perc     = fromStart ? '-100' : toBarPerc(NProgress.status || 0),\n        parent   = document.querySelector(Settings.parent),\n        spinner;\n    \n    css(bar, {\n      transition: 'all 0 linear',\n      transform: 'translate3d(' + perc + '%,0,0)'\n    });\n\n    if (!Settings.showSpinner) {\n      spinner = progress.querySelector(Settings.spinnerSelector);\n      spinner && removeElement(spinner);\n    }\n\n    if (parent != document.body) {\n      addClass(parent, 'nprogress-custom-parent');\n    }\n\n    parent.appendChild(progress);\n    return progress;\n  };\n\n  /**\n   * Removes the element. Opposite of render().\n   */\n\n  NProgress.remove = function() {\n    removeClass(document.documentElement, 'nprogress-busy');\n    removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent');\n    var progress = document.getElementById('nprogress');\n    progress && removeElement(progress);\n  };\n\n  /**\n   * Checks if the progress bar is rendered.\n   */\n\n  NProgress.isRendered = function() {\n    return !!document.getElementById('nprogress');\n  };\n\n  /**\n   * Determine which positioning CSS rule to use.\n   */\n\n  NProgress.getPositioningCSS = function() {\n    // Sniff on document.body.style\n    var bodyStyle = document.body.style;\n\n    // Sniff prefixes\n    var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' :\n                       ('MozTransform' in bodyStyle) ? 'Moz' :\n                       ('msTransform' in bodyStyle) ? 'ms' :\n                       ('OTransform' in bodyStyle) ? 'O' : '';\n\n    if (vendorPrefix + 'Perspective' in bodyStyle) {\n      // Modern browsers with 3D support, e.g. Webkit, IE10\n      return 'translate3d';\n    } else if (vendorPrefix + 'Transform' in bodyStyle) {\n      // Browsers without 3D support, e.g. IE9\n      return 'translate';\n    } else {\n      // Browsers without translate() support, e.g. IE7-8\n      return 'margin';\n    }\n  };\n\n  /**\n   * Helpers\n   */\n\n  function clamp(n, min, max) {\n    if (n < min) return min;\n    if (n > max) return max;\n    return n;\n  }\n\n  /**\n   * (Internal) converts a percentage (`0..1`) to a bar translateX\n   * percentage (`-100%..0%`).\n   */\n\n  function toBarPerc(n) {\n    return (-1 + n) * 100;\n  }\n\n\n  /**\n   * (Internal) returns the correct CSS for changing the bar's\n   * position given an n percentage, and speed and ease from Settings\n   */\n\n  function barPositionCSS(n, speed, ease) {\n    var barCSS;\n\n    if (Settings.positionUsing === 'translate3d') {\n      barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' };\n    } else if (Settings.positionUsing === 'translate') {\n      barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' };\n    } else {\n      barCSS = { 'margin-left': toBarPerc(n)+'%' };\n    }\n\n    barCSS.transition = 'all '+speed+'ms '+ease;\n\n    return barCSS;\n  }\n\n  /**\n   * (Internal) Queues a function to be executed.\n   */\n\n  var queue = (function() {\n    var pending = [];\n    \n    function next() {\n      var fn = pending.shift();\n      if (fn) {\n        fn(next);\n      }\n    }\n\n    return function(fn) {\n      pending.push(fn);\n      if (pending.length == 1) next();\n    };\n  })();\n\n  /**\n   * (Internal) Applies css properties to an element, similar to the jQuery \n   * css method.\n   *\n   * While this helper does assist with vendor prefixed property names, it \n   * does not perform any manipulation of values prior to setting styles.\n   */\n\n  var css = (function() {\n    var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ],\n        cssProps    = {};\n\n    function camelCase(string) {\n      return string.replace(/^-ms-/, 'ms-').replace(/-([\\da-z])/gi, function(match, letter) {\n        return letter.toUpperCase();\n      });\n    }\n\n    function getVendorProp(name) {\n      var style = document.body.style;\n      if (name in style) return name;\n\n      var i = cssPrefixes.length,\n          capName = name.charAt(0).toUpperCase() + name.slice(1),\n          vendorName;\n      while (i--) {\n        vendorName = cssPrefixes[i] + capName;\n        if (vendorName in style) return vendorName;\n      }\n\n      return name;\n    }\n\n    function getStyleProp(name) {\n      name = camelCase(name);\n      return cssProps[name] || (cssProps[name] = getVendorProp(name));\n    }\n\n    function applyCss(element, prop, value) {\n      prop = getStyleProp(prop);\n      element.style[prop] = value;\n    }\n\n    return function(element, properties) {\n      var args = arguments,\n          prop, \n          value;\n\n      if (args.length == 2) {\n        for (prop in properties) {\n          value = properties[prop];\n          if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value);\n        }\n      } else {\n        applyCss(element, args[1], args[2]);\n      }\n    }\n  })();\n\n  /**\n   * (Internal) Determines if an element or space separated list of class names contains a class name.\n   */\n\n  function hasClass(element, name) {\n    var list = typeof element == 'string' ? element : classList(element);\n    return list.indexOf(' ' + name + ' ') >= 0;\n  }\n\n  /**\n   * (Internal) Adds a class to an element.\n   */\n\n  function addClass(element, name) {\n    var oldList = classList(element),\n        newList = oldList + name;\n\n    if (hasClass(oldList, name)) return; \n\n    // Trim the opening space.\n    element.className = newList.substring(1);\n  }\n\n  /**\n   * (Internal) Removes a class from an element.\n   */\n\n  function removeClass(element, name) {\n    var oldList = classList(element),\n        newList;\n\n    if (!hasClass(element, name)) return;\n\n    // Replace the class name.\n    newList = oldList.replace(' ' + name + ' ', ' ');\n\n    // Trim the opening and closing spaces.\n    element.className = newList.substring(1, newList.length - 1);\n  }\n\n  /**\n   * (Internal) Gets a space separated list of the class names on the element. \n   * The list is wrapped with a single space on each end to facilitate finding \n   * matches within the list.\n   */\n\n  function classList(element) {\n    return (' ' + (element.className || '') + ' ').replace(/\\s+/gi, ' ');\n  }\n\n  /**\n   * (Internal) Removes an element from the DOM.\n   */\n\n  function removeElement(element) {\n    element && element.parentNode && element.parentNode.removeChild(element);\n  }\n\n  return NProgress;\n});\n\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n  var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n  for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n      return 1;\n    }\n  }\n  return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n  var called = false;\n  return function () {\n    if (called) {\n      return;\n    }\n    called = true;\n    window.Promise.resolve().then(function () {\n      called = false;\n      fn();\n    });\n  };\n}\n\nfunction taskDebounce(fn) {\n  var scheduled = false;\n  return function () {\n    if (!scheduled) {\n      scheduled = true;\n      setTimeout(function () {\n        scheduled = false;\n        fn();\n      }, timeoutDuration);\n    }\n  };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n  var getType = {};\n  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n  if (element.nodeType !== 1) {\n    return [];\n  }\n  // NOTE: 1 DOM access here\n  var window = element.ownerDocument.defaultView;\n  var css = window.getComputedStyle(element, null);\n  return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n  if (element.nodeName === 'HTML') {\n    return element;\n  }\n  return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n  // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n  if (!element) {\n    return document.body;\n  }\n\n  switch (element.nodeName) {\n    case 'HTML':\n    case 'BODY':\n      return element.ownerDocument.body;\n    case '#document':\n      return element.body;\n  }\n\n  // Firefox want us to check `-x` and `-y` variations as well\n\n  var _getStyleComputedProp = getStyleComputedProperty(element),\n      overflow = _getStyleComputedProp.overflow,\n      overflowX = _getStyleComputedProp.overflowX,\n      overflowY = _getStyleComputedProp.overflowY;\n\n  if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n    return element;\n  }\n\n  return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n  return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n  if (version === 11) {\n    return isIE11;\n  }\n  if (version === 10) {\n    return isIE10;\n  }\n  return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n  if (!element) {\n    return document.documentElement;\n  }\n\n  var noOffsetParent = isIE(10) ? document.body : null;\n\n  // NOTE: 1 DOM access here\n  var offsetParent = element.offsetParent || null;\n  // Skip hidden elements which don't have an offsetParent\n  while (offsetParent === noOffsetParent && element.nextElementSibling) {\n    offsetParent = (element = element.nextElementSibling).offsetParent;\n  }\n\n  var nodeName = offsetParent && offsetParent.nodeName;\n\n  if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n    return element ? element.ownerDocument.documentElement : document.documentElement;\n  }\n\n  // .offsetParent will return the closest TH, TD or TABLE in case\n  // no offsetParent is present, I hate this job...\n  if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n    return getOffsetParent(offsetParent);\n  }\n\n  return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY') {\n    return false;\n  }\n  return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n  if (node.parentNode !== null) {\n    return getRoot(node.parentNode);\n  }\n\n  return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n    return document.documentElement;\n  }\n\n  // Here we make sure to give as \"start\" the element that comes first in the DOM\n  var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n  var start = order ? element1 : element2;\n  var end = order ? element2 : element1;\n\n  // Get common ancestor container\n  var range = document.createRange();\n  range.setStart(start, 0);\n  range.setEnd(end, 0);\n  var commonAncestorContainer = range.commonAncestorContainer;\n\n  // Both nodes are inside #document\n\n  if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n    if (isOffsetContainer(commonAncestorContainer)) {\n      return commonAncestorContainer;\n    }\n\n    return getOffsetParent(commonAncestorContainer);\n  }\n\n  // one of the nodes is inside shadowDOM, find which one\n  var element1root = getRoot(element1);\n  if (element1root.host) {\n    return findCommonOffsetParent(element1root.host, element2);\n  } else {\n    return findCommonOffsetParent(element1, getRoot(element2).host);\n  }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n  var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n  var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    var html = element.ownerDocument.documentElement;\n    var scrollingElement = element.ownerDocument.scrollingElement || html;\n    return scrollingElement[upperSide];\n  }\n\n  return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n  var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var scrollTop = getScroll(element, 'top');\n  var scrollLeft = getScroll(element, 'left');\n  var modifier = subtract ? -1 : 1;\n  rect.top += scrollTop * modifier;\n  rect.bottom += scrollTop * modifier;\n  rect.left += scrollLeft * modifier;\n  rect.right += scrollLeft * modifier;\n  return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n  var sideA = axis === 'x' ? 'Left' : 'Top';\n  var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n  return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n  return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n  var body = document.body;\n  var html = document.documentElement;\n  var computedStyle = isIE(10) && getComputedStyle(html);\n\n  return {\n    height: getSize('Height', body, html, computedStyle),\n    width: getSize('Width', body, html, computedStyle)\n  };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n  return _extends({}, offsets, {\n    right: offsets.left + offsets.width,\n    bottom: offsets.top + offsets.height\n  });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n  var rect = {};\n\n  // IE10 10 FIX: Please, don't ask, the element isn't\n  // considered in DOM in some circumstances...\n  // This isn't reproducible in IE10 compatibility mode of IE11\n  try {\n    if (isIE(10)) {\n      rect = element.getBoundingClientRect();\n      var scrollTop = getScroll(element, 'top');\n      var scrollLeft = getScroll(element, 'left');\n      rect.top += scrollTop;\n      rect.left += scrollLeft;\n      rect.bottom += scrollTop;\n      rect.right += scrollLeft;\n    } else {\n      rect = element.getBoundingClientRect();\n    }\n  } catch (e) {}\n\n  var result = {\n    left: rect.left,\n    top: rect.top,\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  };\n\n  // subtract scrollbar size from sizes\n  var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n  var width = sizes.width || element.clientWidth || result.width;\n  var height = sizes.height || element.clientHeight || result.height;\n\n  var horizScrollbar = element.offsetWidth - width;\n  var vertScrollbar = element.offsetHeight - height;\n\n  // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n  // we make this check conditional for performance reasons\n  if (horizScrollbar || vertScrollbar) {\n    var styles = getStyleComputedProperty(element);\n    horizScrollbar -= getBordersSize(styles, 'x');\n    vertScrollbar -= getBordersSize(styles, 'y');\n\n    result.width -= horizScrollbar;\n    result.height -= vertScrollbar;\n  }\n\n  return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n  var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var isIE10 = isIE(10);\n  var isHTML = parent.nodeName === 'HTML';\n  var childrenRect = getBoundingClientRect(children);\n  var parentRect = getBoundingClientRect(parent);\n  var scrollParent = getScrollParent(children);\n\n  var styles = getStyleComputedProperty(parent);\n  var borderTopWidth = parseFloat(styles.borderTopWidth);\n  var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n  // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n  if (fixedPosition && isHTML) {\n    parentRect.top = Math.max(parentRect.top, 0);\n    parentRect.left = Math.max(parentRect.left, 0);\n  }\n  var offsets = getClientRect({\n    top: childrenRect.top - parentRect.top - borderTopWidth,\n    left: childrenRect.left - parentRect.left - borderLeftWidth,\n    width: childrenRect.width,\n    height: childrenRect.height\n  });\n  offsets.marginTop = 0;\n  offsets.marginLeft = 0;\n\n  // Subtract margins of documentElement in case it's being used as parent\n  // we do this only on HTML because it's the only element that behaves\n  // differently when margins are applied to it. The margins are included in\n  // the box of the documentElement, in the other cases not.\n  if (!isIE10 && isHTML) {\n    var marginTop = parseFloat(styles.marginTop);\n    var marginLeft = parseFloat(styles.marginLeft);\n\n    offsets.top -= borderTopWidth - marginTop;\n    offsets.bottom -= borderTopWidth - marginTop;\n    offsets.left -= borderLeftWidth - marginLeft;\n    offsets.right -= borderLeftWidth - marginLeft;\n\n    // Attach marginTop and marginLeft because in some circumstances we may need them\n    offsets.marginTop = marginTop;\n    offsets.marginLeft = marginLeft;\n  }\n\n  if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n    offsets = includeScroll(offsets, parent);\n  }\n\n  return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n  var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var html = element.ownerDocument.documentElement;\n  var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n  var width = Math.max(html.clientWidth, window.innerWidth || 0);\n  var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n  var scrollTop = !excludeScroll ? getScroll(html) : 0;\n  var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n  var offset = {\n    top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n    left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n    width: width,\n    height: height\n  };\n\n  return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n  var nodeName = element.nodeName;\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    return false;\n  }\n  if (getStyleComputedProperty(element, 'position') === 'fixed') {\n    return true;\n  }\n  var parentNode = getParentNode(element);\n  if (!parentNode) {\n    return false;\n  }\n  return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element || !element.parentElement || isIE()) {\n    return document.documentElement;\n  }\n  var el = element.parentElement;\n  while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n    el = el.parentElement;\n  }\n  return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n  var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n  // NOTE: 1 DOM access here\n\n  var boundaries = { top: 0, left: 0 };\n  var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n  // Handle viewport case\n  if (boundariesElement === 'viewport') {\n    boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n  } else {\n    // Handle other cases based on DOM element used as boundaries\n    var boundariesNode = void 0;\n    if (boundariesElement === 'scrollParent') {\n      boundariesNode = getScrollParent(getParentNode(reference));\n      if (boundariesNode.nodeName === 'BODY') {\n        boundariesNode = popper.ownerDocument.documentElement;\n      }\n    } else if (boundariesElement === 'window') {\n      boundariesNode = popper.ownerDocument.documentElement;\n    } else {\n      boundariesNode = boundariesElement;\n    }\n\n    var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n    // In case of HTML, we need a different computation\n    if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n      var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n          height = _getWindowSizes.height,\n          width = _getWindowSizes.width;\n\n      boundaries.top += offsets.top - offsets.marginTop;\n      boundaries.bottom = height + offsets.top;\n      boundaries.left += offsets.left - offsets.marginLeft;\n      boundaries.right = width + offsets.left;\n    } else {\n      // for all the other DOM elements, this one is good\n      boundaries = offsets;\n    }\n  }\n\n  // Add paddings\n  padding = padding || 0;\n  var isPaddingNumber = typeof padding === 'number';\n  boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n  boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n  boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n  boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n  return boundaries;\n}\n\nfunction getArea(_ref) {\n  var width = _ref.width,\n      height = _ref.height;\n\n  return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n  var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n  if (placement.indexOf('auto') === -1) {\n    return placement;\n  }\n\n  var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n  var rects = {\n    top: {\n      width: boundaries.width,\n      height: refRect.top - boundaries.top\n    },\n    right: {\n      width: boundaries.right - refRect.right,\n      height: boundaries.height\n    },\n    bottom: {\n      width: boundaries.width,\n      height: boundaries.bottom - refRect.bottom\n    },\n    left: {\n      width: refRect.left - boundaries.left,\n      height: boundaries.height\n    }\n  };\n\n  var sortedAreas = Object.keys(rects).map(function (key) {\n    return _extends({\n      key: key\n    }, rects[key], {\n      area: getArea(rects[key])\n    });\n  }).sort(function (a, b) {\n    return b.area - a.area;\n  });\n\n  var filteredAreas = sortedAreas.filter(function (_ref2) {\n    var width = _ref2.width,\n        height = _ref2.height;\n    return width >= popper.clientWidth && height >= popper.clientHeight;\n  });\n\n  var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n  var variation = placement.split('-')[1];\n\n  return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n  var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n  var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n  return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n  var window = element.ownerDocument.defaultView;\n  var styles = window.getComputedStyle(element);\n  var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n  var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n  var result = {\n    width: element.offsetWidth + y,\n    height: element.offsetHeight + x\n  };\n  return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n  var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n  placement = placement.split('-')[0];\n\n  // Get popper node sizes\n  var popperRect = getOuterSizes(popper);\n\n  // Add position, width and height to our offsets object\n  var popperOffsets = {\n    width: popperRect.width,\n    height: popperRect.height\n  };\n\n  // depending by the popper placement we have to compute its offsets slightly differently\n  var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n  var mainSide = isHoriz ? 'top' : 'left';\n  var secondarySide = isHoriz ? 'left' : 'top';\n  var measurement = isHoriz ? 'height' : 'width';\n  var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n  popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n  if (placement === secondarySide) {\n    popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n  } else {\n    popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n  }\n\n  return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n  // use native find if supported\n  if (Array.prototype.find) {\n    return arr.find(check);\n  }\n\n  // use `filter` to obtain the same behavior of `find`\n  return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n  // use native findIndex if supported\n  if (Array.prototype.findIndex) {\n    return arr.findIndex(function (cur) {\n      return cur[prop] === value;\n    });\n  }\n\n  // use `find` + `indexOf` if `findIndex` isn't supported\n  var match = find(arr, function (obj) {\n    return obj[prop] === value;\n  });\n  return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n  var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n  modifiersToRun.forEach(function (modifier) {\n    if (modifier['function']) {\n      // eslint-disable-line dot-notation\n      console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n    }\n    var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n    if (modifier.enabled && isFunction(fn)) {\n      // Add properties to offsets to make them a complete clientRect object\n      // we do this before each modifier to make sure the previous one doesn't\n      // mess with these values\n      data.offsets.popper = getClientRect(data.offsets.popper);\n      data.offsets.reference = getClientRect(data.offsets.reference);\n\n      data = fn(data, modifier);\n    }\n  });\n\n  return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n  // if popper is destroyed, don't perform any further update\n  if (this.state.isDestroyed) {\n    return;\n  }\n\n  var data = {\n    instance: this,\n    styles: {},\n    arrowStyles: {},\n    attributes: {},\n    flipped: false,\n    offsets: {}\n  };\n\n  // compute reference element offsets\n  data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n  // store the computed placement inside `originalPlacement`\n  data.originalPlacement = data.placement;\n\n  data.positionFixed = this.options.positionFixed;\n\n  // compute the popper offsets\n  data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n  data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n  // run the modifiers\n  data = runModifiers(this.modifiers, data);\n\n  // the first `update` will call `onCreate` callback\n  // the other ones will call `onUpdate` callback\n  if (!this.state.isCreated) {\n    this.state.isCreated = true;\n    this.options.onCreate(data);\n  } else {\n    this.options.onUpdate(data);\n  }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n  return modifiers.some(function (_ref) {\n    var name = _ref.name,\n        enabled = _ref.enabled;\n    return enabled && name === modifierName;\n  });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n  var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n  var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n  for (var i = 0; i < prefixes.length; i++) {\n    var prefix = prefixes[i];\n    var toCheck = prefix ? '' + prefix + upperProp : property;\n    if (typeof document.body.style[toCheck] !== 'undefined') {\n      return toCheck;\n    }\n  }\n  return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n  this.state.isDestroyed = true;\n\n  // touch DOM only if `applyStyle` modifier is enabled\n  if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n    this.popper.removeAttribute('x-placement');\n    this.popper.style.position = '';\n    this.popper.style.top = '';\n    this.popper.style.left = '';\n    this.popper.style.right = '';\n    this.popper.style.bottom = '';\n    this.popper.style.willChange = '';\n    this.popper.style[getSupportedPropertyName('transform')] = '';\n  }\n\n  this.disableEventListeners();\n\n  // remove the popper if user explicitly asked for the deletion on destroy\n  // do not use `remove` because IE11 doesn't support it\n  if (this.options.removeOnDestroy) {\n    this.popper.parentNode.removeChild(this.popper);\n  }\n  return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n  var ownerDocument = element.ownerDocument;\n  return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n  var isBody = scrollParent.nodeName === 'BODY';\n  var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n  target.addEventListener(event, callback, { passive: true });\n\n  if (!isBody) {\n    attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n  }\n  scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n  // Resize event listener on window\n  state.updateBound = updateBound;\n  getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n  // Scroll event listener on scroll parents\n  var scrollElement = getScrollParent(reference);\n  attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n  state.scrollElement = scrollElement;\n  state.eventsEnabled = true;\n\n  return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n  if (!this.state.eventsEnabled) {\n    this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n  }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n  // Remove resize event listener on window\n  getWindow(reference).removeEventListener('resize', state.updateBound);\n\n  // Remove scroll event listener on scroll parents\n  state.scrollParents.forEach(function (target) {\n    target.removeEventListener('scroll', state.updateBound);\n  });\n\n  // Reset state\n  state.updateBound = null;\n  state.scrollParents = [];\n  state.scrollElement = null;\n  state.eventsEnabled = false;\n  return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n  if (this.state.eventsEnabled) {\n    cancelAnimationFrame(this.scheduleUpdate);\n    this.state = removeEventListeners(this.reference, this.state);\n  }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n  return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n  Object.keys(styles).forEach(function (prop) {\n    var unit = '';\n    // add unit if the value is numeric and is one of the following\n    if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n      unit = 'px';\n    }\n    element.style[prop] = styles[prop] + unit;\n  });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n  Object.keys(attributes).forEach(function (prop) {\n    var value = attributes[prop];\n    if (value !== false) {\n      element.setAttribute(prop, attributes[prop]);\n    } else {\n      element.removeAttribute(prop);\n    }\n  });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n  // any property present in `data.styles` will be applied to the popper,\n  // in this way we can make the 3rd party modifiers add custom styles to it\n  // Be aware, modifiers could override the properties defined in the previous\n  // lines of this modifier!\n  setStyles(data.instance.popper, data.styles);\n\n  // any property present in `data.attributes` will be applied to the popper,\n  // they will be set as HTML attributes of the element\n  setAttributes(data.instance.popper, data.attributes);\n\n  // if arrowElement is defined and arrowStyles has some properties\n  if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n    setStyles(data.arrowElement, data.arrowStyles);\n  }\n\n  return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n  // compute reference element offsets\n  var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n  popper.setAttribute('x-placement', placement);\n\n  // Apply `position` to popper before anything else because\n  // without the position applied we can't guarantee correct computations\n  setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n  return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n  var round = Math.round,\n      floor = Math.floor;\n\n  var noRound = function noRound(v) {\n    return v;\n  };\n\n  var referenceWidth = round(reference.width);\n  var popperWidth = round(popper.width);\n\n  var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n  var isVariation = data.placement.indexOf('-') !== -1;\n  var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n  var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n  var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n  var verticalToInteger = !shouldRound ? noRound : round;\n\n  return {\n    left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n    top: verticalToInteger(popper.top),\n    bottom: verticalToInteger(popper.bottom),\n    right: horizontalToInteger(popper.right)\n  };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n  var x = options.x,\n      y = options.y;\n  var popper = data.offsets.popper;\n\n  // Remove this legacy support in Popper.js v2\n\n  var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'applyStyle';\n  }).gpuAcceleration;\n  if (legacyGpuAccelerationOption !== undefined) {\n    console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n  }\n  var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n  var offsetParent = getOffsetParent(data.instance.popper);\n  var offsetParentRect = getBoundingClientRect(offsetParent);\n\n  // Styles\n  var styles = {\n    position: popper.position\n  };\n\n  var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n  var sideA = x === 'bottom' ? 'top' : 'bottom';\n  var sideB = y === 'right' ? 'left' : 'right';\n\n  // if gpuAcceleration is set to `true` and transform is supported,\n  //  we use `translate3d` to apply the position to the popper we\n  // automatically use the supported prefixed version if needed\n  var prefixedProperty = getSupportedPropertyName('transform');\n\n  // now, let's make a step back and look at this code closely (wtf?)\n  // If the content of the popper grows once it's been positioned, it\n  // may happen that the popper gets misplaced because of the new content\n  // overflowing its reference element\n  // To avoid this problem, we provide two options (x and y), which allow\n  // the consumer to define the offset origin.\n  // If we position a popper on top of a reference element, we can set\n  // `x` to `top` to make the popper grow towards its top instead of\n  // its bottom.\n  var left = void 0,\n      top = void 0;\n  if (sideA === 'bottom') {\n    // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n    // and not the bottom of the html element\n    if (offsetParent.nodeName === 'HTML') {\n      top = -offsetParent.clientHeight + offsets.bottom;\n    } else {\n      top = -offsetParentRect.height + offsets.bottom;\n    }\n  } else {\n    top = offsets.top;\n  }\n  if (sideB === 'right') {\n    if (offsetParent.nodeName === 'HTML') {\n      left = -offsetParent.clientWidth + offsets.right;\n    } else {\n      left = -offsetParentRect.width + offsets.right;\n    }\n  } else {\n    left = offsets.left;\n  }\n  if (gpuAcceleration && prefixedProperty) {\n    styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n    styles[sideA] = 0;\n    styles[sideB] = 0;\n    styles.willChange = 'transform';\n  } else {\n    // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n    var invertTop = sideA === 'bottom' ? -1 : 1;\n    var invertLeft = sideB === 'right' ? -1 : 1;\n    styles[sideA] = top * invertTop;\n    styles[sideB] = left * invertLeft;\n    styles.willChange = sideA + ', ' + sideB;\n  }\n\n  // Attributes\n  var attributes = {\n    'x-placement': data.placement\n  };\n\n  // Update `data` attributes, styles and arrowStyles\n  data.attributes = _extends({}, attributes, data.attributes);\n  data.styles = _extends({}, styles, data.styles);\n  data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n  return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n  var requesting = find(modifiers, function (_ref) {\n    var name = _ref.name;\n    return name === requestingName;\n  });\n\n  var isRequired = !!requesting && modifiers.some(function (modifier) {\n    return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n  });\n\n  if (!isRequired) {\n    var _requesting = '`' + requestingName + '`';\n    var requested = '`' + requestedName + '`';\n    console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n  }\n  return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n  var _data$offsets$arrow;\n\n  // arrow depends on keepTogether in order to work\n  if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n    return data;\n  }\n\n  var arrowElement = options.element;\n\n  // if arrowElement is a string, suppose it's a CSS selector\n  if (typeof arrowElement === 'string') {\n    arrowElement = data.instance.popper.querySelector(arrowElement);\n\n    // if arrowElement is not found, don't run the modifier\n    if (!arrowElement) {\n      return data;\n    }\n  } else {\n    // if the arrowElement isn't a query selector we must check that the\n    // provided DOM node is child of its popper node\n    if (!data.instance.popper.contains(arrowElement)) {\n      console.warn('WARNING: `arrow.element` must be child of its popper element!');\n      return data;\n    }\n  }\n\n  var placement = data.placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n  var len = isVertical ? 'height' : 'width';\n  var sideCapitalized = isVertical ? 'Top' : 'Left';\n  var side = sideCapitalized.toLowerCase();\n  var altSide = isVertical ? 'left' : 'top';\n  var opSide = isVertical ? 'bottom' : 'right';\n  var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n  //\n  // extends keepTogether behavior making sure the popper and its\n  // reference have enough pixels in conjunction\n  //\n\n  // top/left side\n  if (reference[opSide] - arrowElementSize < popper[side]) {\n    data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n  }\n  // bottom/right side\n  if (reference[side] + arrowElementSize > popper[opSide]) {\n    data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n  }\n  data.offsets.popper = getClientRect(data.offsets.popper);\n\n  // compute center of the popper\n  var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n  // Compute the sideValue using the updated popper offsets\n  // take popper margin in account because we don't have this info available\n  var css = getStyleComputedProperty(data.instance.popper);\n  var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n  var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n  var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n  // prevent arrowElement from being placed not contiguously to its popper\n  sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n  data.arrowElement = arrowElement;\n  data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n  return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n  if (variation === 'end') {\n    return 'start';\n  } else if (variation === 'start') {\n    return 'end';\n  }\n  return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n  var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var index = validPlacements.indexOf(placement);\n  var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n  return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n  FLIP: 'flip',\n  CLOCKWISE: 'clockwise',\n  COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n  // if `inner` modifier is enabled, we can't use the `flip` modifier\n  if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n    return data;\n  }\n\n  if (data.flipped && data.placement === data.originalPlacement) {\n    // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n    return data;\n  }\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n  var placement = data.placement.split('-')[0];\n  var placementOpposite = getOppositePlacement(placement);\n  var variation = data.placement.split('-')[1] || '';\n\n  var flipOrder = [];\n\n  switch (options.behavior) {\n    case BEHAVIORS.FLIP:\n      flipOrder = [placement, placementOpposite];\n      break;\n    case BEHAVIORS.CLOCKWISE:\n      flipOrder = clockwise(placement);\n      break;\n    case BEHAVIORS.COUNTERCLOCKWISE:\n      flipOrder = clockwise(placement, true);\n      break;\n    default:\n      flipOrder = options.behavior;\n  }\n\n  flipOrder.forEach(function (step, index) {\n    if (placement !== step || flipOrder.length === index + 1) {\n      return data;\n    }\n\n    placement = data.placement.split('-')[0];\n    placementOpposite = getOppositePlacement(placement);\n\n    var popperOffsets = data.offsets.popper;\n    var refOffsets = data.offsets.reference;\n\n    // using floor because the reference offsets may contain decimals we are not going to consider here\n    var floor = Math.floor;\n    var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n    var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n    var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n    var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n    var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n    var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n    // flip the variation if required\n    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n    // flips variation if reference element overflows boundaries\n    var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n    // flips variation if popper content overflows boundaries\n    var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n    var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n    if (overlapsRef || overflowsBoundaries || flippedVariation) {\n      // this boolean to detect any flip loop\n      data.flipped = true;\n\n      if (overlapsRef || overflowsBoundaries) {\n        placement = flipOrder[index + 1];\n      }\n\n      if (flippedVariation) {\n        variation = getOppositeVariation(variation);\n      }\n\n      data.placement = placement + (variation ? '-' + variation : '');\n\n      // this object contains `position`, we want to preserve it along with\n      // any additional property we may add in the future\n      data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n      data = runModifiers(data.instance.modifiers, data, 'flip');\n    }\n  });\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var placement = data.placement.split('-')[0];\n  var floor = Math.floor;\n  var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n  var side = isVertical ? 'right' : 'bottom';\n  var opSide = isVertical ? 'left' : 'top';\n  var measurement = isVertical ? 'width' : 'height';\n\n  if (popper[side] < floor(reference[opSide])) {\n    data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n  }\n  if (popper[opSide] > floor(reference[side])) {\n    data.offsets.popper[opSide] = floor(reference[side]);\n  }\n\n  return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n  // separate value from unit\n  var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n  var value = +split[1];\n  var unit = split[2];\n\n  // If it's not a number it's an operator, I guess\n  if (!value) {\n    return str;\n  }\n\n  if (unit.indexOf('%') === 0) {\n    var element = void 0;\n    switch (unit) {\n      case '%p':\n        element = popperOffsets;\n        break;\n      case '%':\n      case '%r':\n      default:\n        element = referenceOffsets;\n    }\n\n    var rect = getClientRect(element);\n    return rect[measurement] / 100 * value;\n  } else if (unit === 'vh' || unit === 'vw') {\n    // if is a vh or vw, we calculate the size based on the viewport\n    var size = void 0;\n    if (unit === 'vh') {\n      size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n    } else {\n      size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n    }\n    return size / 100 * value;\n  } else {\n    // if is an explicit pixel unit, we get rid of the unit and keep the value\n    // if is an implicit unit, it's px, and we return just the value\n    return value;\n  }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n  var offsets = [0, 0];\n\n  // Use height if placement is left or right and index is 0 otherwise use width\n  // in this way the first offset will use an axis and the second one\n  // will use the other one\n  var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n  // Split the offset string to obtain a list of values and operands\n  // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n  var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n    return frag.trim();\n  });\n\n  // Detect if the offset string contains a pair of values or a single one\n  // they could be separated by comma or space\n  var divider = fragments.indexOf(find(fragments, function (frag) {\n    return frag.search(/,|\\s/) !== -1;\n  }));\n\n  if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n    console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n  }\n\n  // If divider is found, we divide the list of values and operands to divide\n  // them by ofset X and Y.\n  var splitRegex = /\\s*,\\s*|\\s+/;\n  var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n  // Convert the values with units to absolute pixels to allow our computations\n  ops = ops.map(function (op, index) {\n    // Most of the units rely on the orientation of the popper\n    var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n    var mergeWithPrevious = false;\n    return op\n    // This aggregates any `+` or `-` sign that aren't considered operators\n    // e.g.: 10 + +5 => [10, +, +5]\n    .reduce(function (a, b) {\n      if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n        a[a.length - 1] = b;\n        mergeWithPrevious = true;\n        return a;\n      } else if (mergeWithPrevious) {\n        a[a.length - 1] += b;\n        mergeWithPrevious = false;\n        return a;\n      } else {\n        return a.concat(b);\n      }\n    }, [])\n    // Here we convert the string values into number values (in px)\n    .map(function (str) {\n      return toValue(str, measurement, popperOffsets, referenceOffsets);\n    });\n  });\n\n  // Loop trough the offsets arrays and execute the operations\n  ops.forEach(function (op, index) {\n    op.forEach(function (frag, index2) {\n      if (isNumeric(frag)) {\n        offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n      }\n    });\n  });\n  return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n  var offset = _ref.offset;\n  var placement = data.placement,\n      _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var basePlacement = placement.split('-')[0];\n\n  var offsets = void 0;\n  if (isNumeric(+offset)) {\n    offsets = [+offset, 0];\n  } else {\n    offsets = parseOffset(offset, popper, reference, basePlacement);\n  }\n\n  if (basePlacement === 'left') {\n    popper.top += offsets[0];\n    popper.left -= offsets[1];\n  } else if (basePlacement === 'right') {\n    popper.top += offsets[0];\n    popper.left += offsets[1];\n  } else if (basePlacement === 'top') {\n    popper.left += offsets[0];\n    popper.top -= offsets[1];\n  } else if (basePlacement === 'bottom') {\n    popper.left += offsets[0];\n    popper.top += offsets[1];\n  }\n\n  data.popper = popper;\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n  var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n  // If offsetParent is the reference element, we really want to\n  // go one step up and use the next offsetParent as reference to\n  // avoid to make this modifier completely useless and look like broken\n  if (data.instance.reference === boundariesElement) {\n    boundariesElement = getOffsetParent(boundariesElement);\n  }\n\n  // NOTE: DOM access here\n  // resets the popper's position so that the document size can be calculated excluding\n  // the size of the popper element itself\n  var transformProp = getSupportedPropertyName('transform');\n  var popperStyles = data.instance.popper.style; // assignment to help minification\n  var top = popperStyles.top,\n      left = popperStyles.left,\n      transform = popperStyles[transformProp];\n\n  popperStyles.top = '';\n  popperStyles.left = '';\n  popperStyles[transformProp] = '';\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n  // NOTE: DOM access here\n  // restores the original style properties after the offsets have been computed\n  popperStyles.top = top;\n  popperStyles.left = left;\n  popperStyles[transformProp] = transform;\n\n  options.boundaries = boundaries;\n\n  var order = options.priority;\n  var popper = data.offsets.popper;\n\n  var check = {\n    primary: function primary(placement) {\n      var value = popper[placement];\n      if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n        value = Math.max(popper[placement], boundaries[placement]);\n      }\n      return defineProperty({}, placement, value);\n    },\n    secondary: function secondary(placement) {\n      var mainSide = placement === 'right' ? 'left' : 'top';\n      var value = popper[mainSide];\n      if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n        value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n      }\n      return defineProperty({}, mainSide, value);\n    }\n  };\n\n  order.forEach(function (placement) {\n    var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n    popper = _extends({}, popper, check[side](placement));\n  });\n\n  data.offsets.popper = popper;\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var shiftvariation = placement.split('-')[1];\n\n  // if shift shiftvariation is specified, run the modifier\n  if (shiftvariation) {\n    var _data$offsets = data.offsets,\n        reference = _data$offsets.reference,\n        popper = _data$offsets.popper;\n\n    var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n    var side = isVertical ? 'left' : 'top';\n    var measurement = isVertical ? 'width' : 'height';\n\n    var shiftOffsets = {\n      start: defineProperty({}, side, reference[side]),\n      end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n    };\n\n    data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n  if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n    return data;\n  }\n\n  var refRect = data.offsets.reference;\n  var bound = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'preventOverflow';\n  }).boundaries;\n\n  if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === true) {\n      return data;\n    }\n\n    data.hide = true;\n    data.attributes['x-out-of-boundaries'] = '';\n  } else {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === false) {\n      return data;\n    }\n\n    data.hide = false;\n    data.attributes['x-out-of-boundaries'] = false;\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n  var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n  popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n  data.placement = getOppositePlacement(placement);\n  data.offsets.popper = getClientRect(popper);\n\n  return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n  /**\n   * Modifier used to shift the popper on the start or end of its reference\n   * element.<br />\n   * It will read the variation of the `placement` property.<br />\n   * It can be one either `-end` or `-start`.\n   * @memberof modifiers\n   * @inner\n   */\n  shift: {\n    /** @prop {number} order=100 - Index used to define the order of execution */\n    order: 100,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: shift\n  },\n\n  /**\n   * The `offset` modifier can shift your popper on both its axis.\n   *\n   * It accepts the following units:\n   * - `px` or unit-less, interpreted as pixels\n   * - `%` or `%r`, percentage relative to the length of the reference element\n   * - `%p`, percentage relative to the length of the popper element\n   * - `vw`, CSS viewport width unit\n   * - `vh`, CSS viewport height unit\n   *\n   * For length is intended the main axis relative to the placement of the popper.<br />\n   * This means that if the placement is `top` or `bottom`, the length will be the\n   * `width`. In case of `left` or `right`, it will be the `height`.\n   *\n   * You can provide a single value (as `Number` or `String`), or a pair of values\n   * as `String` divided by a comma or one (or more) white spaces.<br />\n   * The latter is a deprecated method because it leads to confusion and will be\n   * removed in v2.<br />\n   * Additionally, it accepts additions and subtractions between different units.\n   * Note that multiplications and divisions aren't supported.\n   *\n   * Valid examples are:\n   * ```\n   * 10\n   * '10%'\n   * '10, 10'\n   * '10%, 10'\n   * '10 + 10%'\n   * '10 - 5vh + 3%'\n   * '-10px + 5vh, 5px - 6%'\n   * ```\n   * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n   * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n   * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  offset: {\n    /** @prop {number} order=200 - Index used to define the order of execution */\n    order: 200,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: offset,\n    /** @prop {Number|String} offset=0\n     * The offset value as described in the modifier description\n     */\n    offset: 0\n  },\n\n  /**\n   * Modifier used to prevent the popper from being positioned outside the boundary.\n   *\n   * A scenario exists where the reference itself is not within the boundaries.<br />\n   * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n   * In this case we need to decide whether the popper should either:\n   *\n   * - detach from the reference and remain \"trapped\" in the boundaries, or\n   * - if it should ignore the boundary and \"escape with its reference\"\n   *\n   * When `escapeWithReference` is set to`true` and reference is completely\n   * outside its boundaries, the popper will overflow (or completely leave)\n   * the boundaries in order to remain attached to the edge of the reference.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  preventOverflow: {\n    /** @prop {number} order=300 - Index used to define the order of execution */\n    order: 300,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: preventOverflow,\n    /**\n     * @prop {Array} [priority=['left','right','top','bottom']]\n     * Popper will try to prevent overflow following these priorities by default,\n     * then, it could overflow on the left and on top of the `boundariesElement`\n     */\n    priority: ['left', 'right', 'top', 'bottom'],\n    /**\n     * @prop {number} padding=5\n     * Amount of pixel used to define a minimum distance between the boundaries\n     * and the popper. This makes sure the popper always has a little padding\n     * between the edges of its container\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='scrollParent'\n     * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n     * `viewport` or any DOM element.\n     */\n    boundariesElement: 'scrollParent'\n  },\n\n  /**\n   * Modifier used to make sure the reference and its popper stay near each other\n   * without leaving any gap between the two. Especially useful when the arrow is\n   * enabled and you want to ensure that it points to its reference element.\n   * It cares only about the first axis. You can still have poppers with margin\n   * between the popper and its reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  keepTogether: {\n    /** @prop {number} order=400 - Index used to define the order of execution */\n    order: 400,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: keepTogether\n  },\n\n  /**\n   * This modifier is used to move the `arrowElement` of the popper to make\n   * sure it is positioned between the reference element and its popper element.\n   * It will read the outer size of the `arrowElement` node to detect how many\n   * pixels of conjunction are needed.\n   *\n   * It has no effect if no `arrowElement` is provided.\n   * @memberof modifiers\n   * @inner\n   */\n  arrow: {\n    /** @prop {number} order=500 - Index used to define the order of execution */\n    order: 500,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: arrow,\n    /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n    element: '[x-arrow]'\n  },\n\n  /**\n   * Modifier used to flip the popper's placement when it starts to overlap its\n   * reference element.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   *\n   * **NOTE:** this modifier will interrupt the current update cycle and will\n   * restart it if it detects the need to flip the placement.\n   * @memberof modifiers\n   * @inner\n   */\n  flip: {\n    /** @prop {number} order=600 - Index used to define the order of execution */\n    order: 600,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: flip,\n    /**\n     * @prop {String|Array} behavior='flip'\n     * The behavior used to change the popper's placement. It can be one of\n     * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n     * placements (with optional variations)\n     */\n    behavior: 'flip',\n    /**\n     * @prop {number} padding=5\n     * The popper will flip if it hits the edges of the `boundariesElement`\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='viewport'\n     * The element which will define the boundaries of the popper position.\n     * The popper will never be placed outside of the defined boundaries\n     * (except if `keepTogether` is enabled)\n     */\n    boundariesElement: 'viewport',\n    /**\n     * @prop {Boolean} flipVariations=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the reference element overlaps its boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariations: false,\n    /**\n     * @prop {Boolean} flipVariationsByContent=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the popper element overlaps its reference boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariationsByContent: false\n  },\n\n  /**\n   * Modifier used to make the popper flow toward the inner of the reference element.\n   * By default, when this modifier is disabled, the popper will be placed outside\n   * the reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  inner: {\n    /** @prop {number} order=700 - Index used to define the order of execution */\n    order: 700,\n    /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n    enabled: false,\n    /** @prop {ModifierFn} */\n    fn: inner\n  },\n\n  /**\n   * Modifier used to hide the popper when its reference element is outside of the\n   * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n   * be used to hide with a CSS selector the popper when its reference is\n   * out of boundaries.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   * @memberof modifiers\n   * @inner\n   */\n  hide: {\n    /** @prop {number} order=800 - Index used to define the order of execution */\n    order: 800,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: hide\n  },\n\n  /**\n   * Computes the style that will be applied to the popper element to gets\n   * properly positioned.\n   *\n   * Note that this modifier will not touch the DOM, it just prepares the styles\n   * so that `applyStyle` modifier can apply it. This separation is useful\n   * in case you need to replace `applyStyle` with a custom implementation.\n   *\n   * This modifier has `850` as `order` value to maintain backward compatibility\n   * with previous versions of Popper.js. Expect the modifiers ordering method\n   * to change in future major versions of the library.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  computeStyle: {\n    /** @prop {number} order=850 - Index used to define the order of execution */\n    order: 850,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: computeStyle,\n    /**\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: true,\n    /**\n     * @prop {string} [x='bottom']\n     * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n     * Change this if your popper should grow in a direction different from `bottom`\n     */\n    x: 'bottom',\n    /**\n     * @prop {string} [x='left']\n     * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n     * Change this if your popper should grow in a direction different from `right`\n     */\n    y: 'right'\n  },\n\n  /**\n   * Applies the computed styles to the popper element.\n   *\n   * All the DOM manipulations are limited to this modifier. This is useful in case\n   * you want to integrate Popper.js inside a framework or view library and you\n   * want to delegate all the DOM manipulations to it.\n   *\n   * Note that if you disable this modifier, you must make sure the popper element\n   * has its position set to `absolute` before Popper.js can do its work!\n   *\n   * Just disable this modifier and define your own to achieve the desired effect.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  applyStyle: {\n    /** @prop {number} order=900 - Index used to define the order of execution */\n    order: 900,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: applyStyle,\n    /** @prop {Function} */\n    onLoad: applyStyleOnLoad,\n    /**\n     * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: undefined\n  }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n *   modifiers: {\n *     preventOverflow: { enabled: false }\n *   }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n  /**\n   * Popper's placement.\n   * @prop {Popper.placements} placement='bottom'\n   */\n  placement: 'bottom',\n\n  /**\n   * Set this to true if you want popper to position it self in 'fixed' mode\n   * @prop {Boolean} positionFixed=false\n   */\n  positionFixed: false,\n\n  /**\n   * Whether events (resize, scroll) are initially enabled.\n   * @prop {Boolean} eventsEnabled=true\n   */\n  eventsEnabled: true,\n\n  /**\n   * Set to true if you want to automatically remove the popper when\n   * you call the `destroy` method.\n   * @prop {Boolean} removeOnDestroy=false\n   */\n  removeOnDestroy: false,\n\n  /**\n   * Callback called when the popper is created.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onCreate}\n   */\n  onCreate: function onCreate() {},\n\n  /**\n   * Callback called when the popper is updated. This callback is not called\n   * on the initialization/creation of the popper, but only on subsequent\n   * updates.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onUpdate}\n   */\n  onUpdate: function onUpdate() {},\n\n  /**\n   * List of modifiers used to modify the offsets before they are applied to the popper.\n   * They provide most of the functionalities of Popper.js.\n   * @prop {modifiers}\n   */\n  modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n  /**\n   * Creates a new Popper.js instance.\n   * @class Popper\n   * @param {Element|referenceObject} reference - The reference element used to position the popper\n   * @param {Element} popper - The HTML / XML element used as the popper\n   * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n   * @return {Object} instance - The generated Popper.js instance\n   */\n  function Popper(reference, popper) {\n    var _this = this;\n\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    classCallCheck(this, Popper);\n\n    this.scheduleUpdate = function () {\n      return requestAnimationFrame(_this.update);\n    };\n\n    // make update() debounced, so that it only runs at most once-per-tick\n    this.update = debounce(this.update.bind(this));\n\n    // with {} we create a new object with the options inside it\n    this.options = _extends({}, Popper.Defaults, options);\n\n    // init state\n    this.state = {\n      isDestroyed: false,\n      isCreated: false,\n      scrollParents: []\n    };\n\n    // get reference and popper elements (allow jQuery wrappers)\n    this.reference = reference && reference.jquery ? reference[0] : reference;\n    this.popper = popper && popper.jquery ? popper[0] : popper;\n\n    // Deep merge modifiers options\n    this.options.modifiers = {};\n    Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n      _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n    });\n\n    // Refactoring modifiers' list (Object => Array)\n    this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n      return _extends({\n        name: name\n      }, _this.options.modifiers[name]);\n    })\n    // sort the modifiers by order\n    .sort(function (a, b) {\n      return a.order - b.order;\n    });\n\n    // modifiers have the ability to execute arbitrary code when Popper.js get inited\n    // such code is executed in the same order of its modifier\n    // they could add new properties to their options configuration\n    // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n    this.modifiers.forEach(function (modifierOptions) {\n      if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n        modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n      }\n    });\n\n    // fire the first update to position the popper in the right place\n    this.update();\n\n    var eventsEnabled = this.options.eventsEnabled;\n    if (eventsEnabled) {\n      // setup event listeners, they will take care of update the position in specific situations\n      this.enableEventListeners();\n    }\n\n    this.state.eventsEnabled = eventsEnabled;\n  }\n\n  // We can't use class properties because they don't get listed in the\n  // class prototype and break stuff like Sinon stubs\n\n\n  createClass(Popper, [{\n    key: 'update',\n    value: function update$$1() {\n      return update.call(this);\n    }\n  }, {\n    key: 'destroy',\n    value: function destroy$$1() {\n      return destroy.call(this);\n    }\n  }, {\n    key: 'enableEventListeners',\n    value: function enableEventListeners$$1() {\n      return enableEventListeners.call(this);\n    }\n  }, {\n    key: 'disableEventListeners',\n    value: function disableEventListeners$$1() {\n      return disableEventListeners.call(this);\n    }\n\n    /**\n     * Schedules an update. It will run on the next UI update available.\n     * @method scheduleUpdate\n     * @memberof Popper\n     */\n\n\n    /**\n     * Collection of utilities useful when writing custom modifiers.\n     * Starting from version 1.7, this method is available only if you\n     * include `popper-utils.js` before `popper.js`.\n     *\n     * **DEPRECATION**: This way to access PopperUtils is deprecated\n     * and will be removed in v2! Use the PopperUtils module directly instead.\n     * Due to the high instability of the methods contained in Utils, we can't\n     * guarantee them to follow semver. Use them at your own risk!\n     * @static\n     * @private\n     * @type {Object}\n     * @deprecated since version 1.8\n     * @member Utils\n     * @memberof Popper\n     */\n\n  }]);\n  return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/*!\n * Select2 4.0.13\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n;(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = function (root, jQuery) {\n      if (jQuery === undefined) {\n        // require('jQuery') returns a factory that requires window to\n        // build a jQuery instance, we normalize how we use modules\n        // that require this pattern but the window provided is a noop\n        // if it's defined (how jquery works)\n        if (typeof window !== 'undefined') {\n          jQuery = require('jquery');\n        }\n        else {\n          jQuery = require('jquery')(root);\n        }\n      }\n      factory(jQuery);\n      return jQuery;\n    };\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n} (function (jQuery) {\n  // This is needed so we can catch the AMD loader configuration and use it\n  // The inner file should be wrapped (by `banner.start.js`) in a function that\n  // returns the AMD loader references.\n  var S2 =(function () {\n  // Restore the Select2 AMD loader so it can be used\n  // Needed mostly in the language files, where the loader is not inserted\n  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n    var S2 = jQuery.fn.select2.amd;\n  }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n    var main, req, makeMap, handlers,\n        defined = {},\n        waiting = {},\n        config = {},\n        defining = {},\n        hasOwn = Object.prototype.hasOwnProperty,\n        aps = [].slice,\n        jsSuffixRegExp = /\\.js$/;\n\n    function hasProp(obj, prop) {\n        return hasOwn.call(obj, prop);\n    }\n\n    /**\n     * Given a relative module name, like ./something, normalize it to\n     * a real name that can be mapped to a path.\n     * @param {String} name the relative name\n     * @param {String} baseName a real name that the name arg is relative\n     * to.\n     * @returns {String} normalized name\n     */\n    function normalize(name, baseName) {\n        var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n            foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n            baseParts = baseName && baseName.split(\"/\"),\n            map = config.map,\n            starMap = (map && map['*']) || {};\n\n        //Adjust any relative paths.\n        if (name) {\n            name = name.split('/');\n            lastIndex = name.length - 1;\n\n            // If wanting node ID compatibility, strip .js from end\n            // of IDs. Have to do this here, and not in nameToUrl\n            // because node allows either .js or non .js to map\n            // to same file.\n            if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n            }\n\n            // Starts with a '.' so need the baseName\n            if (name[0].charAt(0) === '.' && baseParts) {\n                //Convert baseName to array, and lop off the last part,\n                //so that . matches that 'directory' and not name of the baseName's\n                //module. For instance, baseName of 'one/two/three', maps to\n                //'one/two/three.js', but we want the directory, 'one/two' for\n                //this normalization.\n                normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n                name = normalizedBaseParts.concat(name);\n            }\n\n            //start trimDots\n            for (i = 0; i < name.length; i++) {\n                part = name[i];\n                if (part === '.') {\n                    name.splice(i, 1);\n                    i -= 1;\n                } else if (part === '..') {\n                    // If at the start, or previous value is still ..,\n                    // keep them so that when converted to a path it may\n                    // still work when converted to a path, even though\n                    // as an ID it is less than ideal. In larger point\n                    // releases, may be better to just kick out an error.\n                    if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n                        continue;\n                    } else if (i > 0) {\n                        name.splice(i - 1, 2);\n                        i -= 2;\n                    }\n                }\n            }\n            //end trimDots\n\n            name = name.join('/');\n        }\n\n        //Apply map config if available.\n        if ((baseParts || starMap) && map) {\n            nameParts = name.split('/');\n\n            for (i = nameParts.length; i > 0; i -= 1) {\n                nameSegment = nameParts.slice(0, i).join(\"/\");\n\n                if (baseParts) {\n                    //Find the longest baseName segment match in the config.\n                    //So, do joins on the biggest to smallest lengths of baseParts.\n                    for (j = baseParts.length; j > 0; j -= 1) {\n                        mapValue = map[baseParts.slice(0, j).join('/')];\n\n                        //baseName segment has  config, find if it has one for\n                        //this name.\n                        if (mapValue) {\n                            mapValue = mapValue[nameSegment];\n                            if (mapValue) {\n                                //Match, update name to the new value.\n                                foundMap = mapValue;\n                                foundI = i;\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                if (foundMap) {\n                    break;\n                }\n\n                //Check for a star map match, but just hold on to it,\n                //if there is a shorter segment match later in a matching\n                //config, then favor over this star map.\n                if (!foundStarMap && starMap && starMap[nameSegment]) {\n                    foundStarMap = starMap[nameSegment];\n                    starI = i;\n                }\n            }\n\n            if (!foundMap && foundStarMap) {\n                foundMap = foundStarMap;\n                foundI = starI;\n            }\n\n            if (foundMap) {\n                nameParts.splice(0, foundI, foundMap);\n                name = nameParts.join('/');\n            }\n        }\n\n        return name;\n    }\n\n    function makeRequire(relName, forceSync) {\n        return function () {\n            //A version of a require function that passes a moduleName\n            //value for items that may need to\n            //look up paths relative to the moduleName\n            var args = aps.call(arguments, 0);\n\n            //If first arg is not require('string'), and there is only\n            //one arg, it is the array form without a callback. Insert\n            //a null so that the following concat is correct.\n            if (typeof args[0] !== 'string' && args.length === 1) {\n                args.push(null);\n            }\n            return req.apply(undef, args.concat([relName, forceSync]));\n        };\n    }\n\n    function makeNormalize(relName) {\n        return function (name) {\n            return normalize(name, relName);\n        };\n    }\n\n    function makeLoad(depName) {\n        return function (value) {\n            defined[depName] = value;\n        };\n    }\n\n    function callDep(name) {\n        if (hasProp(waiting, name)) {\n            var args = waiting[name];\n            delete waiting[name];\n            defining[name] = true;\n            main.apply(undef, args);\n        }\n\n        if (!hasProp(defined, name) && !hasProp(defining, name)) {\n            throw new Error('No ' + name);\n        }\n        return defined[name];\n    }\n\n    //Turns a plugin!resource to [plugin, resource]\n    //with the plugin being undefined if the name\n    //did not have a plugin prefix.\n    function splitPrefix(name) {\n        var prefix,\n            index = name ? name.indexOf('!') : -1;\n        if (index > -1) {\n            prefix = name.substring(0, index);\n            name = name.substring(index + 1, name.length);\n        }\n        return [prefix, name];\n    }\n\n    //Creates a parts array for a relName where first part is plugin ID,\n    //second part is resource ID. Assumes relName has already been normalized.\n    function makeRelParts(relName) {\n        return relName ? splitPrefix(relName) : [];\n    }\n\n    /**\n     * Makes a name map, normalizing the name, and using a plugin\n     * for normalization if necessary. Grabs a ref to plugin\n     * too, as an optimization.\n     */\n    makeMap = function (name, relParts) {\n        var plugin,\n            parts = splitPrefix(name),\n            prefix = parts[0],\n            relResourceName = relParts[1];\n\n        name = parts[1];\n\n        if (prefix) {\n            prefix = normalize(prefix, relResourceName);\n            plugin = callDep(prefix);\n        }\n\n        //Normalize according\n        if (prefix) {\n            if (plugin && plugin.normalize) {\n                name = plugin.normalize(name, makeNormalize(relResourceName));\n            } else {\n                name = normalize(name, relResourceName);\n            }\n        } else {\n            name = normalize(name, relResourceName);\n            parts = splitPrefix(name);\n            prefix = parts[0];\n            name = parts[1];\n            if (prefix) {\n                plugin = callDep(prefix);\n            }\n        }\n\n        //Using ridiculous property names for space reasons\n        return {\n            f: prefix ? prefix + '!' + name : name, //fullName\n            n: name,\n            pr: prefix,\n            p: plugin\n        };\n    };\n\n    function makeConfig(name) {\n        return function () {\n            return (config && config.config && config.config[name]) || {};\n        };\n    }\n\n    handlers = {\n        require: function (name) {\n            return makeRequire(name);\n        },\n        exports: function (name) {\n            var e = defined[name];\n            if (typeof e !== 'undefined') {\n                return e;\n            } else {\n                return (defined[name] = {});\n            }\n        },\n        module: function (name) {\n            return {\n                id: name,\n                uri: '',\n                exports: defined[name],\n                config: makeConfig(name)\n            };\n        }\n    };\n\n    main = function (name, deps, callback, relName) {\n        var cjsModule, depName, ret, map, i, relParts,\n            args = [],\n            callbackType = typeof callback,\n            usingExports;\n\n        //Use name if no relName\n        relName = relName || name;\n        relParts = makeRelParts(relName);\n\n        //Call the callback to define the module, if necessary.\n        if (callbackType === 'undefined' || callbackType === 'function') {\n            //Pull out the defined dependencies and pass the ordered\n            //values to the callback.\n            //Default to [require, exports, module] if no deps\n            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n            for (i = 0; i < deps.length; i += 1) {\n                map = makeMap(deps[i], relParts);\n                depName = map.f;\n\n                //Fast path CommonJS standard dependencies.\n                if (depName === \"require\") {\n                    args[i] = handlers.require(name);\n                } else if (depName === \"exports\") {\n                    //CommonJS module spec 1.1\n                    args[i] = handlers.exports(name);\n                    usingExports = true;\n                } else if (depName === \"module\") {\n                    //CommonJS module spec 1.1\n                    cjsModule = args[i] = handlers.module(name);\n                } else if (hasProp(defined, depName) ||\n                           hasProp(waiting, depName) ||\n                           hasProp(defining, depName)) {\n                    args[i] = callDep(depName);\n                } else if (map.p) {\n                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n                    args[i] = defined[depName];\n                } else {\n                    throw new Error(name + ' missing ' + depName);\n                }\n            }\n\n            ret = callback ? callback.apply(defined[name], args) : undefined;\n\n            if (name) {\n                //If setting exports via \"module\" is in play,\n                //favor that over return value and exports. After that,\n                //favor a non-undefined return value over exports use.\n                if (cjsModule && cjsModule.exports !== undef &&\n                        cjsModule.exports !== defined[name]) {\n                    defined[name] = cjsModule.exports;\n                } else if (ret !== undef || !usingExports) {\n                    //Use the return value from the function.\n                    defined[name] = ret;\n                }\n            }\n        } else if (name) {\n            //May just be an object definition for the module. Only\n            //worry about defining if have a module name.\n            defined[name] = callback;\n        }\n    };\n\n    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n        if (typeof deps === \"string\") {\n            if (handlers[deps]) {\n                //callback in this case is really relName\n                return handlers[deps](callback);\n            }\n            //Just return the module wanted. In this scenario, the\n            //deps arg is the module name, and second arg (if passed)\n            //is just the relName.\n            //Normalize module name, if it contains . or ..\n            return callDep(makeMap(deps, makeRelParts(callback)).f);\n        } else if (!deps.splice) {\n            //deps is a config object, not an array.\n            config = deps;\n            if (config.deps) {\n                req(config.deps, config.callback);\n            }\n            if (!callback) {\n                return;\n            }\n\n            if (callback.splice) {\n                //callback is an array, which means it is a dependency list.\n                //Adjust args if there are dependencies\n                deps = callback;\n                callback = relName;\n                relName = null;\n            } else {\n                deps = undef;\n            }\n        }\n\n        //Support require(['a'])\n        callback = callback || function () {};\n\n        //If relName is a function, it is an errback handler,\n        //so remove it.\n        if (typeof relName === 'function') {\n            relName = forceSync;\n            forceSync = alt;\n        }\n\n        //Simulate async callback;\n        if (forceSync) {\n            main(undef, deps, callback, relName);\n        } else {\n            //Using a non-zero value because of concern for what old browsers\n            //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n            //If want a value immediately, use require('id') instead -- something\n            //that works in almond on the global level, but not guaranteed and\n            //unlikely to work in other AMD implementations.\n            setTimeout(function () {\n                main(undef, deps, callback, relName);\n            }, 4);\n        }\n\n        return req;\n    };\n\n    /**\n     * Just drops the config on the floor, but returns req in case\n     * the config return value is used.\n     */\n    req.config = function (cfg) {\n        return req(cfg);\n    };\n\n    /**\n     * Expose module registry for debugging and tooling\n     */\n    requirejs._defined = defined;\n\n    define = function (name, deps, callback) {\n        if (typeof name !== 'string') {\n            throw new Error('See almond README: incorrect module build, no module name');\n        }\n\n        //This module may not have dependencies\n        if (!deps.splice) {\n            //deps is not an array, so probably means\n            //an object literal or factory function for\n            //the value. Adjust args.\n            callback = deps;\n            deps = [];\n        }\n\n        if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n            waiting[name] = [name, deps, callback];\n        }\n    };\n\n    define.amd = {\n        jQuery: true\n    };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n  var _$ = jQuery || $;\n\n  if (_$ == null && console && console.error) {\n    console.error(\n      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n      'found. Make sure that you are including jQuery before Select2 on your ' +\n      'web page.'\n    );\n  }\n\n  return _$;\n});\n\nS2.define('select2/utils',[\n  'jquery'\n], function ($) {\n  var Utils = {};\n\n  Utils.Extend = function (ChildClass, SuperClass) {\n    var __hasProp = {}.hasOwnProperty;\n\n    function BaseConstructor () {\n      this.constructor = ChildClass;\n    }\n\n    for (var key in SuperClass) {\n      if (__hasProp.call(SuperClass, key)) {\n        ChildClass[key] = SuperClass[key];\n      }\n    }\n\n    BaseConstructor.prototype = SuperClass.prototype;\n    ChildClass.prototype = new BaseConstructor();\n    ChildClass.__super__ = SuperClass.prototype;\n\n    return ChildClass;\n  };\n\n  function getMethods (theClass) {\n    var proto = theClass.prototype;\n\n    var methods = [];\n\n    for (var methodName in proto) {\n      var m = proto[methodName];\n\n      if (typeof m !== 'function') {\n        continue;\n      }\n\n      if (methodName === 'constructor') {\n        continue;\n      }\n\n      methods.push(methodName);\n    }\n\n    return methods;\n  }\n\n  Utils.Decorate = function (SuperClass, DecoratorClass) {\n    var decoratedMethods = getMethods(DecoratorClass);\n    var superMethods = getMethods(SuperClass);\n\n    function DecoratedClass () {\n      var unshift = Array.prototype.unshift;\n\n      var argCount = DecoratorClass.prototype.constructor.length;\n\n      var calledConstructor = SuperClass.prototype.constructor;\n\n      if (argCount > 0) {\n        unshift.call(arguments, SuperClass.prototype.constructor);\n\n        calledConstructor = DecoratorClass.prototype.constructor;\n      }\n\n      calledConstructor.apply(this, arguments);\n    }\n\n    DecoratorClass.displayName = SuperClass.displayName;\n\n    function ctr () {\n      this.constructor = DecoratedClass;\n    }\n\n    DecoratedClass.prototype = new ctr();\n\n    for (var m = 0; m < superMethods.length; m++) {\n      var superMethod = superMethods[m];\n\n      DecoratedClass.prototype[superMethod] =\n        SuperClass.prototype[superMethod];\n    }\n\n    var calledMethod = function (methodName) {\n      // Stub out the original method if it's not decorating an actual method\n      var originalMethod = function () {};\n\n      if (methodName in DecoratedClass.prototype) {\n        originalMethod = DecoratedClass.prototype[methodName];\n      }\n\n      var decoratedMethod = DecoratorClass.prototype[methodName];\n\n      return function () {\n        var unshift = Array.prototype.unshift;\n\n        unshift.call(arguments, originalMethod);\n\n        return decoratedMethod.apply(this, arguments);\n      };\n    };\n\n    for (var d = 0; d < decoratedMethods.length; d++) {\n      var decoratedMethod = decoratedMethods[d];\n\n      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n    }\n\n    return DecoratedClass;\n  };\n\n  var Observable = function () {\n    this.listeners = {};\n  };\n\n  Observable.prototype.on = function (event, callback) {\n    this.listeners = this.listeners || {};\n\n    if (event in this.listeners) {\n      this.listeners[event].push(callback);\n    } else {\n      this.listeners[event] = [callback];\n    }\n  };\n\n  Observable.prototype.trigger = function (event) {\n    var slice = Array.prototype.slice;\n    var params = slice.call(arguments, 1);\n\n    this.listeners = this.listeners || {};\n\n    // Params should always come in as an array\n    if (params == null) {\n      params = [];\n    }\n\n    // If there are no arguments to the event, use a temporary object\n    if (params.length === 0) {\n      params.push({});\n    }\n\n    // Set the `_type` of the first object to the event\n    params[0]._type = event;\n\n    if (event in this.listeners) {\n      this.invoke(this.listeners[event], slice.call(arguments, 1));\n    }\n\n    if ('*' in this.listeners) {\n      this.invoke(this.listeners['*'], arguments);\n    }\n  };\n\n  Observable.prototype.invoke = function (listeners, params) {\n    for (var i = 0, len = listeners.length; i < len; i++) {\n      listeners[i].apply(this, params);\n    }\n  };\n\n  Utils.Observable = Observable;\n\n  Utils.generateChars = function (length) {\n    var chars = '';\n\n    for (var i = 0; i < length; i++) {\n      var randomChar = Math.floor(Math.random() * 36);\n      chars += randomChar.toString(36);\n    }\n\n    return chars;\n  };\n\n  Utils.bind = function (func, context) {\n    return function () {\n      func.apply(context, arguments);\n    };\n  };\n\n  Utils._convertData = function (data) {\n    for (var originalKey in data) {\n      var keys = originalKey.split('-');\n\n      var dataLevel = data;\n\n      if (keys.length === 1) {\n        continue;\n      }\n\n      for (var k = 0; k < keys.length; k++) {\n        var key = keys[k];\n\n        // Lowercase the first letter\n        // By default, dash-separated becomes camelCase\n        key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n        if (!(key in dataLevel)) {\n          dataLevel[key] = {};\n        }\n\n        if (k == keys.length - 1) {\n          dataLevel[key] = data[originalKey];\n        }\n\n        dataLevel = dataLevel[key];\n      }\n\n      delete data[originalKey];\n    }\n\n    return data;\n  };\n\n  Utils.hasScroll = function (index, el) {\n    // Adapted from the function created by @ShadowScripter\n    // and adapted by @BillBarry on the Stack Exchange Code Review website.\n    // The original code can be found at\n    // http://codereview.stackexchange.com/q/13338\n    // and was designed to be used with the Sizzle selector engine.\n\n    var $el = $(el);\n    var overflowX = el.style.overflowX;\n    var overflowY = el.style.overflowY;\n\n    //Check both x and y declarations\n    if (overflowX === overflowY &&\n        (overflowY === 'hidden' || overflowY === 'visible')) {\n      return false;\n    }\n\n    if (overflowX === 'scroll' || overflowY === 'scroll') {\n      return true;\n    }\n\n    return ($el.innerHeight() < el.scrollHeight ||\n      $el.innerWidth() < el.scrollWidth);\n  };\n\n  Utils.escapeMarkup = function (markup) {\n    var replaceMap = {\n      '\\\\': '&#92;',\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '/': '&#47;'\n    };\n\n    // Do not try to escape the markup if it's not a string\n    if (typeof markup !== 'string') {\n      return markup;\n    }\n\n    return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n      return replaceMap[match];\n    });\n  };\n\n  // Append an array of jQuery nodes to a given element.\n  Utils.appendMany = function ($element, $nodes) {\n    // jQuery 1.7.x does not support $.fn.append() with an array\n    // Fall back to a jQuery object collection using $.fn.add()\n    if ($.fn.jquery.substr(0, 3) === '1.7') {\n      var $jqNodes = $();\n\n      $.map($nodes, function (node) {\n        $jqNodes = $jqNodes.add(node);\n      });\n\n      $nodes = $jqNodes;\n    }\n\n    $element.append($nodes);\n  };\n\n  // Cache objects in Utils.__cache instead of $.data (see #4346)\n  Utils.__cache = {};\n\n  var id = 0;\n  Utils.GetUniqueElementId = function (element) {\n    // Get a unique element Id. If element has no id,\n    // creates a new unique number, stores it in the id\n    // attribute and returns the new id.\n    // If an id already exists, it simply returns it.\n\n    var select2Id = element.getAttribute('data-select2-id');\n    if (select2Id == null) {\n      // If element has id, use it.\n      if (element.id) {\n        select2Id = element.id;\n        element.setAttribute('data-select2-id', select2Id);\n      } else {\n        element.setAttribute('data-select2-id', ++id);\n        select2Id = id.toString();\n      }\n    }\n    return select2Id;\n  };\n\n  Utils.StoreData = function (element, name, value) {\n    // Stores an item in the cache for a specified element.\n    // name is the cache key.\n    var id = Utils.GetUniqueElementId(element);\n    if (!Utils.__cache[id]) {\n      Utils.__cache[id] = {};\n    }\n\n    Utils.__cache[id][name] = value;\n  };\n\n  Utils.GetData = function (element, name) {\n    // Retrieves a value from the cache by its key (name)\n    // name is optional. If no name specified, return\n    // all cache items for the specified element.\n    // and for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (name) {\n      if (Utils.__cache[id]) {\n        if (Utils.__cache[id][name] != null) {\n          return Utils.__cache[id][name];\n        }\n        return $(element).data(name); // Fallback to HTML5 data attribs.\n      }\n      return $(element).data(name); // Fallback to HTML5 data attribs.\n    } else {\n      return Utils.__cache[id];\n    }\n  };\n\n  Utils.RemoveData = function (element) {\n    // Removes all cached items for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (Utils.__cache[id] != null) {\n      delete Utils.__cache[id];\n    }\n\n    element.removeAttribute('data-select2-id');\n  };\n\n  return Utils;\n});\n\nS2.define('select2/results',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Results ($element, options, dataAdapter) {\n    this.$element = $element;\n    this.data = dataAdapter;\n    this.options = options;\n\n    Results.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Results, Utils.Observable);\n\n  Results.prototype.render = function () {\n    var $results = $(\n      '<ul class=\"select2-results__options\" role=\"listbox\"></ul>'\n    );\n\n    if (this.options.get('multiple')) {\n      $results.attr('aria-multiselectable', 'true');\n    }\n\n    this.$results = $results;\n\n    return $results;\n  };\n\n  Results.prototype.clear = function () {\n    this.$results.empty();\n  };\n\n  Results.prototype.displayMessage = function (params) {\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    this.clear();\n    this.hideLoading();\n\n    var $message = $(\n      '<li role=\"alert\" aria-live=\"assertive\"' +\n      ' class=\"select2-results__option\"></li>'\n    );\n\n    var message = this.options.get('translations').get(params.message);\n\n    $message.append(\n      escapeMarkup(\n        message(params.args)\n      )\n    );\n\n    $message[0].className += ' select2-results__message';\n\n    this.$results.append($message);\n  };\n\n  Results.prototype.hideMessages = function () {\n    this.$results.find('.select2-results__message').remove();\n  };\n\n  Results.prototype.append = function (data) {\n    this.hideLoading();\n\n    var $options = [];\n\n    if (data.results == null || data.results.length === 0) {\n      if (this.$results.children().length === 0) {\n        this.trigger('results:message', {\n          message: 'noResults'\n        });\n      }\n\n      return;\n    }\n\n    data.results = this.sort(data.results);\n\n    for (var d = 0; d < data.results.length; d++) {\n      var item = data.results[d];\n\n      var $option = this.option(item);\n\n      $options.push($option);\n    }\n\n    this.$results.append($options);\n  };\n\n  Results.prototype.position = function ($results, $dropdown) {\n    var $resultsContainer = $dropdown.find('.select2-results');\n    $resultsContainer.append($results);\n  };\n\n  Results.prototype.sort = function (data) {\n    var sorter = this.options.get('sorter');\n\n    return sorter(data);\n  };\n\n  Results.prototype.highlightFirstItem = function () {\n    var $options = this.$results\n      .find('.select2-results__option[aria-selected]');\n\n    var $selected = $options.filter('[aria-selected=true]');\n\n    // Check if there are any selected options\n    if ($selected.length > 0) {\n      // If there are selected options, highlight the first\n      $selected.first().trigger('mouseenter');\n    } else {\n      // If there are no selected options, highlight the first option\n      // in the dropdown\n      $options.first().trigger('mouseenter');\n    }\n\n    this.ensureHighlightVisible();\n  };\n\n  Results.prototype.setClasses = function () {\n    var self = this;\n\n    this.data.current(function (selected) {\n      var selectedIds = $.map(selected, function (s) {\n        return s.id.toString();\n      });\n\n      var $options = self.$results\n        .find('.select2-results__option[aria-selected]');\n\n      $options.each(function () {\n        var $option = $(this);\n\n        var item = Utils.GetData(this, 'data');\n\n        // id needs to be converted to a string when comparing\n        var id = '' + item.id;\n\n        if ((item.element != null && item.element.selected) ||\n            (item.element == null && $.inArray(id, selectedIds) > -1)) {\n          $option.attr('aria-selected', 'true');\n        } else {\n          $option.attr('aria-selected', 'false');\n        }\n      });\n\n    });\n  };\n\n  Results.prototype.showLoading = function (params) {\n    this.hideLoading();\n\n    var loadingMore = this.options.get('translations').get('searching');\n\n    var loading = {\n      disabled: true,\n      loading: true,\n      text: loadingMore(params)\n    };\n    var $loading = this.option(loading);\n    $loading.className += ' loading-results';\n\n    this.$results.prepend($loading);\n  };\n\n  Results.prototype.hideLoading = function () {\n    this.$results.find('.loading-results').remove();\n  };\n\n  Results.prototype.option = function (data) {\n    var option = document.createElement('li');\n    option.className = 'select2-results__option';\n\n    var attrs = {\n      'role': 'option',\n      'aria-selected': 'false'\n    };\n\n    var matches = window.Element.prototype.matches ||\n      window.Element.prototype.msMatchesSelector ||\n      window.Element.prototype.webkitMatchesSelector;\n\n    if ((data.element != null && matches.call(data.element, ':disabled')) ||\n        (data.element == null && data.disabled)) {\n      delete attrs['aria-selected'];\n      attrs['aria-disabled'] = 'true';\n    }\n\n    if (data.id == null) {\n      delete attrs['aria-selected'];\n    }\n\n    if (data._resultId != null) {\n      option.id = data._resultId;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    if (data.children) {\n      attrs.role = 'group';\n      attrs['aria-label'] = data.text;\n      delete attrs['aria-selected'];\n    }\n\n    for (var attr in attrs) {\n      var val = attrs[attr];\n\n      option.setAttribute(attr, val);\n    }\n\n    if (data.children) {\n      var $option = $(option);\n\n      var label = document.createElement('strong');\n      label.className = 'select2-results__group';\n\n      var $label = $(label);\n      this.template(data, label);\n\n      var $children = [];\n\n      for (var c = 0; c < data.children.length; c++) {\n        var child = data.children[c];\n\n        var $child = this.option(child);\n\n        $children.push($child);\n      }\n\n      var $childrenContainer = $('<ul></ul>', {\n        'class': 'select2-results__options select2-results__options--nested'\n      });\n\n      $childrenContainer.append($children);\n\n      $option.append(label);\n      $option.append($childrenContainer);\n    } else {\n      this.template(data, option);\n    }\n\n    Utils.StoreData(option, 'data', data);\n\n    return option;\n  };\n\n  Results.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-results';\n\n    this.$results.attr('id', id);\n\n    container.on('results:all', function (params) {\n      self.clear();\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('results:append', function (params) {\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n      }\n    });\n\n    container.on('query', function (params) {\n      self.hideMessages();\n      self.showLoading(params);\n    });\n\n    container.on('select', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('unselect', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expended=\"true\"\n      self.$results.attr('aria-expanded', 'true');\n      self.$results.attr('aria-hidden', 'false');\n\n      self.setClasses();\n      self.ensureHighlightVisible();\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expended=\"false\"\n      self.$results.attr('aria-expanded', 'false');\n      self.$results.attr('aria-hidden', 'true');\n      self.$results.removeAttr('aria-activedescendant');\n    });\n\n    container.on('results:toggle', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      $highlighted.trigger('mouseup');\n    });\n\n    container.on('results:select', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      var data = Utils.GetData($highlighted[0], 'data');\n\n      if ($highlighted.attr('aria-selected') == 'true') {\n        self.trigger('close', {});\n      } else {\n        self.trigger('select', {\n          data: data\n        });\n      }\n    });\n\n    container.on('results:previous', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      // If we are already at the top, don't move further\n      // If no options, currentIndex will be -1\n      if (currentIndex <= 0) {\n        return;\n      }\n\n      var nextIndex = currentIndex - 1;\n\n      // If none are highlighted, highlight the first\n      if ($highlighted.length === 0) {\n        nextIndex = 0;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top;\n      var nextTop = $next.offset().top;\n      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextTop - currentOffset < 0) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:next', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      var nextIndex = currentIndex + 1;\n\n      // If we are at the last option, stay there\n      if (nextIndex >= $options.length) {\n        return;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var nextBottom = $next.offset().top + $next.outerHeight(false);\n      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextBottom > currentOffset) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      params.element.addClass('select2-results__option--highlighted');\n    });\n\n    container.on('results:message', function (params) {\n      self.displayMessage(params);\n    });\n\n    if ($.fn.mousewheel) {\n      this.$results.on('mousewheel', function (e) {\n        var top = self.$results.scrollTop();\n\n        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n        if (isAtTop) {\n          self.$results.scrollTop(0);\n\n          e.preventDefault();\n          e.stopPropagation();\n        } else if (isAtBottom) {\n          self.$results.scrollTop(\n            self.$results.get(0).scrollHeight - self.$results.height()\n          );\n\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      });\n    }\n\n    this.$results.on('mouseup', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var $this = $(this);\n\n      var data = Utils.GetData(this, 'data');\n\n      if ($this.attr('aria-selected') === 'true') {\n        if (self.options.get('multiple')) {\n          self.trigger('unselect', {\n            originalEvent: evt,\n            data: data\n          });\n        } else {\n          self.trigger('close', {});\n        }\n\n        return;\n      }\n\n      self.trigger('select', {\n        originalEvent: evt,\n        data: data\n      });\n    });\n\n    this.$results.on('mouseenter', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var data = Utils.GetData(this, 'data');\n\n      self.getHighlightedResults()\n          .removeClass('select2-results__option--highlighted');\n\n      self.trigger('results:focus', {\n        data: data,\n        element: $(this)\n      });\n    });\n  };\n\n  Results.prototype.getHighlightedResults = function () {\n    var $highlighted = this.$results\n    .find('.select2-results__option--highlighted');\n\n    return $highlighted;\n  };\n\n  Results.prototype.destroy = function () {\n    this.$results.remove();\n  };\n\n  Results.prototype.ensureHighlightVisible = function () {\n    var $highlighted = this.getHighlightedResults();\n\n    if ($highlighted.length === 0) {\n      return;\n    }\n\n    var $options = this.$results.find('[aria-selected]');\n\n    var currentIndex = $options.index($highlighted);\n\n    var currentOffset = this.$results.offset().top;\n    var nextTop = $highlighted.offset().top;\n    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n    var offsetDelta = nextTop - currentOffset;\n    nextOffset -= $highlighted.outerHeight(false) * 2;\n\n    if (currentIndex <= 2) {\n      this.$results.scrollTop(0);\n    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n      this.$results.scrollTop(nextOffset);\n    }\n  };\n\n  Results.prototype.template = function (result, container) {\n    var template = this.options.get('templateResult');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    var content = template(result, container);\n\n    if (content == null) {\n      container.style.display = 'none';\n    } else if (typeof content === 'string') {\n      container.innerHTML = escapeMarkup(content);\n    } else {\n      $(container).append(content);\n    }\n  };\n\n  return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n  var KEYS = {\n    BACKSPACE: 8,\n    TAB: 9,\n    ENTER: 13,\n    SHIFT: 16,\n    CTRL: 17,\n    ALT: 18,\n    ESC: 27,\n    SPACE: 32,\n    PAGE_UP: 33,\n    PAGE_DOWN: 34,\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40,\n    DELETE: 46\n  };\n\n  return KEYS;\n});\n\nS2.define('select2/selection/base',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function BaseSelection ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    BaseSelection.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseSelection, Utils.Observable);\n\n  BaseSelection.prototype.render = function () {\n    var $selection = $(\n      '<span class=\"select2-selection\" role=\"combobox\" ' +\n      ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n      '</span>'\n    );\n\n    this._tabindex = 0;\n\n    if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {\n      this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');\n    } else if (this.$element.attr('tabindex') != null) {\n      this._tabindex = this.$element.attr('tabindex');\n    }\n\n    $selection.attr('title', this.$element.attr('title'));\n    $selection.attr('tabindex', this._tabindex);\n    $selection.attr('aria-disabled', 'false');\n\n    this.$selection = $selection;\n\n    return $selection;\n  };\n\n  BaseSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    this.container = container;\n\n    this.$selection.on('focus', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('blur', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      if (evt.which === KEYS.SPACE) {\n        evt.preventDefault();\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      self.$selection.attr('aria-activedescendant', params.data._resultId);\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expanded=\"true\"\n      self.$selection.attr('aria-expanded', 'true');\n      self.$selection.attr('aria-owns', resultsId);\n\n      self._attachCloseHandler(container);\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expanded=\"false\"\n      self.$selection.attr('aria-expanded', 'false');\n      self.$selection.removeAttr('aria-activedescendant');\n      self.$selection.removeAttr('aria-owns');\n\n      self.$selection.trigger('focus');\n\n      self._detachCloseHandler(container);\n    });\n\n    container.on('enable', function () {\n      self.$selection.attr('tabindex', self._tabindex);\n      self.$selection.attr('aria-disabled', 'false');\n    });\n\n    container.on('disable', function () {\n      self.$selection.attr('tabindex', '-1');\n      self.$selection.attr('aria-disabled', 'true');\n    });\n  };\n\n  BaseSelection.prototype._handleBlur = function (evt) {\n    var self = this;\n\n    // This needs to be delayed as the active element is the body when the tab\n    // key is pressed, possibly along with others.\n    window.setTimeout(function () {\n      // Don't trigger `blur` if the focus is still in the selection\n      if (\n        (document.activeElement == self.$selection[0]) ||\n        ($.contains(self.$selection[0], document.activeElement))\n      ) {\n        return;\n      }\n\n      self.trigger('blur', evt);\n    }, 1);\n  };\n\n  BaseSelection.prototype._attachCloseHandler = function (container) {\n\n    $(document.body).on('mousedown.select2.' + container.id, function (e) {\n      var $target = $(e.target);\n\n      var $select = $target.closest('.select2');\n\n      var $all = $('.select2.select2-container--open');\n\n      $all.each(function () {\n        if (this == $select[0]) {\n          return;\n        }\n\n        var $element = Utils.GetData(this, 'element');\n\n        $element.select2('close');\n      });\n    });\n  };\n\n  BaseSelection.prototype._detachCloseHandler = function (container) {\n    $(document.body).off('mousedown.select2.' + container.id);\n  };\n\n  BaseSelection.prototype.position = function ($selection, $container) {\n    var $selectionContainer = $container.find('.selection');\n    $selectionContainer.append($selection);\n  };\n\n  BaseSelection.prototype.destroy = function () {\n    this._detachCloseHandler(this.container);\n  };\n\n  BaseSelection.prototype.update = function (data) {\n    throw new Error('The `update` method must be defined in child classes.');\n  };\n\n  /**\n   * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n   * object.\n   *\n   * @return {true} if the instance is not disabled.\n   * @return {false} if the instance is disabled.\n   */\n  BaseSelection.prototype.isEnabled = function () {\n    return !this.isDisabled();\n  };\n\n  /**\n   * Helper method to abstract the \"disabled\" state of this object.\n   *\n   * @return {true} if the disabled option is true.\n   * @return {false} if the disabled option is false.\n   */\n  BaseSelection.prototype.isDisabled = function () {\n    return this.options.get('disabled');\n  };\n\n  return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n  'jquery',\n  './base',\n  '../utils',\n  '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n  function SingleSelection () {\n    SingleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(SingleSelection, BaseSelection);\n\n  SingleSelection.prototype.render = function () {\n    var $selection = SingleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--single');\n\n    $selection.html(\n      '<span class=\"select2-selection__rendered\"></span>' +\n      '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n        '<b role=\"presentation\"></b>' +\n      '</span>'\n    );\n\n    return $selection;\n  };\n\n  SingleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    SingleSelection.__super__.bind.apply(this, arguments);\n\n    var id = container.id + '-container';\n\n    this.$selection.find('.select2-selection__rendered')\n      .attr('id', id)\n      .attr('role', 'textbox')\n      .attr('aria-readonly', 'true');\n    this.$selection.attr('aria-labelledby', id);\n\n    this.$selection.on('mousedown', function (evt) {\n      // Only respond to left clicks\n      if (evt.which !== 1) {\n        return;\n      }\n\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on('focus', function (evt) {\n      // User focuses on the container\n    });\n\n    this.$selection.on('blur', function (evt) {\n      // User exits the container\n    });\n\n    container.on('focus', function (evt) {\n      if (!container.isOpen()) {\n        self.$selection.trigger('focus');\n      }\n    });\n  };\n\n  SingleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title'); // clear tooltip on empty\n  };\n\n  SingleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  SingleSelection.prototype.selectionContainer = function () {\n    return $('<span></span>');\n  };\n\n  SingleSelection.prototype.update = function (data) {\n    if (data.length === 0) {\n      this.clear();\n      return;\n    }\n\n    var selection = data[0];\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    var formatted = this.display(selection, $rendered);\n\n    $rendered.empty().append(formatted);\n\n    var title = selection.title || selection.text;\n\n    if (title) {\n      $rendered.attr('title', title);\n    } else {\n      $rendered.removeAttr('title');\n    }\n  };\n\n  return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n  'jquery',\n  './base',\n  '../utils'\n], function ($, BaseSelection, Utils) {\n  function MultipleSelection ($element, options) {\n    MultipleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(MultipleSelection, BaseSelection);\n\n  MultipleSelection.prototype.render = function () {\n    var $selection = MultipleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--multiple');\n\n    $selection.html(\n      '<ul class=\"select2-selection__rendered\"></ul>'\n    );\n\n    return $selection;\n  };\n\n  MultipleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    MultipleSelection.__super__.bind.apply(this, arguments);\n\n    this.$selection.on('click', function (evt) {\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on(\n      'click',\n      '.select2-selection__choice__remove',\n      function (evt) {\n        // Ignore the event if it is disabled\n        if (self.isDisabled()) {\n          return;\n        }\n\n        var $remove = $(this);\n        var $selection = $remove.parent();\n\n        var data = Utils.GetData($selection[0], 'data');\n\n        self.trigger('unselect', {\n          originalEvent: evt,\n          data: data\n        });\n      }\n    );\n  };\n\n  MultipleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title');\n  };\n\n  MultipleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  MultipleSelection.prototype.selectionContainer = function () {\n    var $container = $(\n      '<li class=\"select2-selection__choice\">' +\n        '<span class=\"select2-selection__choice__remove\" role=\"presentation\">' +\n          '&times;' +\n        '</span>' +\n      '</li>'\n    );\n\n    return $container;\n  };\n\n  MultipleSelection.prototype.update = function (data) {\n    this.clear();\n\n    if (data.length === 0) {\n      return;\n    }\n\n    var $selections = [];\n\n    for (var d = 0; d < data.length; d++) {\n      var selection = data[d];\n\n      var $selection = this.selectionContainer();\n      var formatted = this.display(selection, $selection);\n\n      $selection.append(formatted);\n\n      var title = selection.title || selection.text;\n\n      if (title) {\n        $selection.attr('title', title);\n      }\n\n      Utils.StoreData($selection[0], 'data', selection);\n\n      $selections.push($selection);\n    }\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n\n    Utils.appendMany($rendered, $selections);\n  };\n\n  return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n  '../utils'\n], function (Utils) {\n  function Placeholder (decorated, $element, options) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options);\n  }\n\n  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n    var $placeholder = this.selectionContainer();\n\n    $placeholder.html(this.display(placeholder));\n    $placeholder.addClass('select2-selection__placeholder')\n                .removeClass('select2-selection__choice');\n\n    return $placeholder;\n  };\n\n  Placeholder.prototype.update = function (decorated, data) {\n    var singlePlaceholder = (\n      data.length == 1 && data[0].id != this.placeholder.id\n    );\n    var multipleSelections = data.length > 1;\n\n    if (multipleSelections || singlePlaceholder) {\n      return decorated.call(this, data);\n    }\n\n    this.clear();\n\n    var $placeholder = this.createPlaceholder(this.placeholder);\n\n    this.$selection.find('.select2-selection__rendered').append($placeholder);\n  };\n\n  return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n  'jquery',\n  '../keys',\n  '../utils'\n], function ($, KEYS, Utils) {\n  function AllowClear () { }\n\n  AllowClear.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    if (this.placeholder == null) {\n      if (this.options.get('debug') && window.console && console.error) {\n        console.error(\n          'Select2: The `allowClear` option should be used in combination ' +\n          'with the `placeholder` option.'\n        );\n      }\n    }\n\n    this.$selection.on('mousedown', '.select2-selection__clear',\n      function (evt) {\n        self._handleClear(evt);\n    });\n\n    container.on('keypress', function (evt) {\n      self._handleKeyboardClear(evt, container);\n    });\n  };\n\n  AllowClear.prototype._handleClear = function (_, evt) {\n    // Ignore the event if it is disabled\n    if (this.isDisabled()) {\n      return;\n    }\n\n    var $clear = this.$selection.find('.select2-selection__clear');\n\n    // Ignore the event if nothing has been selected\n    if ($clear.length === 0) {\n      return;\n    }\n\n    evt.stopPropagation();\n\n    var data = Utils.GetData($clear[0], 'data');\n\n    var previousVal = this.$element.val();\n    this.$element.val(this.placeholder.id);\n\n    var unselectData = {\n      data: data\n    };\n    this.trigger('clear', unselectData);\n    if (unselectData.prevented) {\n      this.$element.val(previousVal);\n      return;\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      unselectData = {\n        data: data[d]\n      };\n\n      // Trigger the `unselect` event, so people can prevent it from being\n      // cleared.\n      this.trigger('unselect', unselectData);\n\n      // If the event was prevented, don't clear it out.\n      if (unselectData.prevented) {\n        this.$element.val(previousVal);\n        return;\n      }\n    }\n\n    this.$element.trigger('input').trigger('change');\n\n    this.trigger('toggle', {});\n  };\n\n  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n    if (container.isOpen()) {\n      return;\n    }\n\n    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n      this._handleClear(evt);\n    }\n  };\n\n  AllowClear.prototype.update = function (decorated, data) {\n    decorated.call(this, data);\n\n    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n        data.length === 0) {\n      return;\n    }\n\n    var removeAll = this.options.get('translations').get('removeAllItems');\n\n    var $remove = $(\n      '<span class=\"select2-selection__clear\" title=\"' + removeAll() +'\">' +\n        '&times;' +\n      '</span>'\n    );\n    Utils.StoreData($remove[0], 'data', data);\n\n    this.$selection.find('.select2-selection__rendered').prepend($remove);\n  };\n\n  return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function Search (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  Search.prototype.render = function (decorated) {\n    var $search = $(\n      '<li class=\"select2-search select2-search--inline\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n      '</li>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    var $rendered = decorated.call(this);\n\n    this._transferTabIndex();\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self.$search.attr('aria-controls', resultsId);\n      self.$search.trigger('focus');\n    });\n\n    container.on('close', function () {\n      self.$search.val('');\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n      self.$search.trigger('focus');\n    });\n\n    container.on('enable', function () {\n      self.$search.prop('disabled', false);\n\n      self._transferTabIndex();\n    });\n\n    container.on('disable', function () {\n      self.$search.prop('disabled', true);\n    });\n\n    container.on('focus', function (evt) {\n      self.$search.trigger('focus');\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n\n    this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n      evt.stopPropagation();\n\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n\n      var key = evt.which;\n\n      if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n        var $previousChoice = self.$searchContainer\n          .prev('.select2-selection__choice');\n\n        if ($previousChoice.length > 0) {\n          var item = Utils.GetData($previousChoice[0], 'data');\n\n          self.searchRemoveChoice(item);\n\n          evt.preventDefault();\n        }\n      }\n    });\n\n    this.$selection.on('click', '.select2-search--inline', function (evt) {\n      if (self.$search.val()) {\n        evt.stopPropagation();\n      }\n    });\n\n    // Try to detect the IE version should the `documentMode` property that\n    // is stored on the document. This is only implemented in IE and is\n    // slightly cleaner than doing a user agent check.\n    // This property is not available in Edge, but Edge also doesn't have\n    // this bug.\n    var msie = document.documentMode;\n    var disableInputEvents = msie && msie <= 11;\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$selection.on(\n      'input.searchcheck',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents) {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        // Unbind the duplicated `keyup` event\n        self.$selection.off('keyup.search');\n      }\n    );\n\n    this.$selection.on(\n      'keyup.search input.search',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents && evt.type === 'input') {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        var key = evt.which;\n\n        // We can freely ignore events from modifier keys\n        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n          return;\n        }\n\n        // Tabbing will be handled during the `keydown` phase\n        if (key == KEYS.TAB) {\n          return;\n        }\n\n        self.handleSearch(evt);\n      }\n    );\n  };\n\n  /**\n   * This method will transfer the tabindex attribute from the rendered\n   * selection to the search box. This allows for the search box to be used as\n   * the primary focus instead of the selection container.\n   *\n   * @private\n   */\n  Search.prototype._transferTabIndex = function (decorated) {\n    this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n    this.$selection.attr('tabindex', '-1');\n  };\n\n  Search.prototype.createPlaceholder = function (decorated, placeholder) {\n    this.$search.attr('placeholder', placeholder.text);\n  };\n\n  Search.prototype.update = function (decorated, data) {\n    var searchHadFocus = this.$search[0] == document.activeElement;\n\n    this.$search.attr('placeholder', '');\n\n    decorated.call(this, data);\n\n    this.$selection.find('.select2-selection__rendered')\n                   .append(this.$searchContainer);\n\n    this.resizeSearch();\n    if (searchHadFocus) {\n      this.$search.trigger('focus');\n    }\n  };\n\n  Search.prototype.handleSearch = function () {\n    this.resizeSearch();\n\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.searchRemoveChoice = function (decorated, item) {\n    this.trigger('unselect', {\n      data: item\n    });\n\n    this.$search.val(item.text);\n    this.handleSearch();\n  };\n\n  Search.prototype.resizeSearch = function () {\n    this.$search.css('width', '25px');\n\n    var width = '';\n\n    if (this.$search.attr('placeholder') !== '') {\n      width = this.$selection.find('.select2-selection__rendered').width();\n    } else {\n      var minimumWidth = this.$search.val().length + 1;\n\n      width = (minimumWidth * 0.75) + 'em';\n    }\n\n    this.$search.css('width', width);\n  };\n\n  return Search;\n});\n\nS2.define('select2/selection/eventRelay',[\n  'jquery'\n], function ($) {\n  function EventRelay () { }\n\n  EventRelay.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n    var relayEvents = [\n      'open', 'opening',\n      'close', 'closing',\n      'select', 'selecting',\n      'unselect', 'unselecting',\n      'clear', 'clearing'\n    ];\n\n    var preventableEvents = [\n      'opening', 'closing', 'selecting', 'unselecting', 'clearing'\n    ];\n\n    decorated.call(this, container, $container);\n\n    container.on('*', function (name, params) {\n      // Ignore events that should not be relayed\n      if ($.inArray(name, relayEvents) === -1) {\n        return;\n      }\n\n      // The parameters should always be an object\n      params = params || {};\n\n      // Generate the jQuery event for the Select2 event\n      var evt = $.Event('select2:' + name, {\n        params: params\n      });\n\n      self.$element.trigger(evt);\n\n      // Only handle preventable events if it was one\n      if ($.inArray(name, preventableEvents) === -1) {\n        return;\n      }\n\n      params.prevented = evt.isDefaultPrevented();\n    });\n  };\n\n  return EventRelay;\n});\n\nS2.define('select2/translation',[\n  'jquery',\n  'require'\n], function ($, require) {\n  function Translation (dict) {\n    this.dict = dict || {};\n  }\n\n  Translation.prototype.all = function () {\n    return this.dict;\n  };\n\n  Translation.prototype.get = function (key) {\n    return this.dict[key];\n  };\n\n  Translation.prototype.extend = function (translation) {\n    this.dict = $.extend({}, translation.all(), this.dict);\n  };\n\n  // Static functions\n\n  Translation._cache = {};\n\n  Translation.loadPath = function (path) {\n    if (!(path in Translation._cache)) {\n      var translations = require(path);\n\n      Translation._cache[path] = translations;\n    }\n\n    return new Translation(Translation._cache[path]);\n  };\n\n  return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n  var diacritics = {\n    '\\u24B6': 'A',\n    '\\uFF21': 'A',\n    '\\u00C0': 'A',\n    '\\u00C1': 'A',\n    '\\u00C2': 'A',\n    '\\u1EA6': 'A',\n    '\\u1EA4': 'A',\n    '\\u1EAA': 'A',\n    '\\u1EA8': 'A',\n    '\\u00C3': 'A',\n    '\\u0100': 'A',\n    '\\u0102': 'A',\n    '\\u1EB0': 'A',\n    '\\u1EAE': 'A',\n    '\\u1EB4': 'A',\n    '\\u1EB2': 'A',\n    '\\u0226': 'A',\n    '\\u01E0': 'A',\n    '\\u00C4': 'A',\n    '\\u01DE': 'A',\n    '\\u1EA2': 'A',\n    '\\u00C5': 'A',\n    '\\u01FA': 'A',\n    '\\u01CD': 'A',\n    '\\u0200': 'A',\n    '\\u0202': 'A',\n    '\\u1EA0': 'A',\n    '\\u1EAC': 'A',\n    '\\u1EB6': 'A',\n    '\\u1E00': 'A',\n    '\\u0104': 'A',\n    '\\u023A': 'A',\n    '\\u2C6F': 'A',\n    '\\uA732': 'AA',\n    '\\u00C6': 'AE',\n    '\\u01FC': 'AE',\n    '\\u01E2': 'AE',\n    '\\uA734': 'AO',\n    '\\uA736': 'AU',\n    '\\uA738': 'AV',\n    '\\uA73A': 'AV',\n    '\\uA73C': 'AY',\n    '\\u24B7': 'B',\n    '\\uFF22': 'B',\n    '\\u1E02': 'B',\n    '\\u1E04': 'B',\n    '\\u1E06': 'B',\n    '\\u0243': 'B',\n    '\\u0182': 'B',\n    '\\u0181': 'B',\n    '\\u24B8': 'C',\n    '\\uFF23': 'C',\n    '\\u0106': 'C',\n    '\\u0108': 'C',\n    '\\u010A': 'C',\n    '\\u010C': 'C',\n    '\\u00C7': 'C',\n    '\\u1E08': 'C',\n    '\\u0187': 'C',\n    '\\u023B': 'C',\n    '\\uA73E': 'C',\n    '\\u24B9': 'D',\n    '\\uFF24': 'D',\n    '\\u1E0A': 'D',\n    '\\u010E': 'D',\n    '\\u1E0C': 'D',\n    '\\u1E10': 'D',\n    '\\u1E12': 'D',\n    '\\u1E0E': 'D',\n    '\\u0110': 'D',\n    '\\u018B': 'D',\n    '\\u018A': 'D',\n    '\\u0189': 'D',\n    '\\uA779': 'D',\n    '\\u01F1': 'DZ',\n    '\\u01C4': 'DZ',\n    '\\u01F2': 'Dz',\n    '\\u01C5': 'Dz',\n    '\\u24BA': 'E',\n    '\\uFF25': 'E',\n    '\\u00C8': 'E',\n    '\\u00C9': 'E',\n    '\\u00CA': 'E',\n    '\\u1EC0': 'E',\n    '\\u1EBE': 'E',\n    '\\u1EC4': 'E',\n    '\\u1EC2': 'E',\n    '\\u1EBC': 'E',\n    '\\u0112': 'E',\n    '\\u1E14': 'E',\n    '\\u1E16': 'E',\n    '\\u0114': 'E',\n    '\\u0116': 'E',\n    '\\u00CB': 'E',\n    '\\u1EBA': 'E',\n    '\\u011A': 'E',\n    '\\u0204': 'E',\n    '\\u0206': 'E',\n    '\\u1EB8': 'E',\n    '\\u1EC6': 'E',\n    '\\u0228': 'E',\n    '\\u1E1C': 'E',\n    '\\u0118': 'E',\n    '\\u1E18': 'E',\n    '\\u1E1A': 'E',\n    '\\u0190': 'E',\n    '\\u018E': 'E',\n    '\\u24BB': 'F',\n    '\\uFF26': 'F',\n    '\\u1E1E': 'F',\n    '\\u0191': 'F',\n    '\\uA77B': 'F',\n    '\\u24BC': 'G',\n    '\\uFF27': 'G',\n    '\\u01F4': 'G',\n    '\\u011C': 'G',\n    '\\u1E20': 'G',\n    '\\u011E': 'G',\n    '\\u0120': 'G',\n    '\\u01E6': 'G',\n    '\\u0122': 'G',\n    '\\u01E4': 'G',\n    '\\u0193': 'G',\n    '\\uA7A0': 'G',\n    '\\uA77D': 'G',\n    '\\uA77E': 'G',\n    '\\u24BD': 'H',\n    '\\uFF28': 'H',\n    '\\u0124': 'H',\n    '\\u1E22': 'H',\n    '\\u1E26': 'H',\n    '\\u021E': 'H',\n    '\\u1E24': 'H',\n    '\\u1E28': 'H',\n    '\\u1E2A': 'H',\n    '\\u0126': 'H',\n    '\\u2C67': 'H',\n    '\\u2C75': 'H',\n    '\\uA78D': 'H',\n    '\\u24BE': 'I',\n    '\\uFF29': 'I',\n    '\\u00CC': 'I',\n    '\\u00CD': 'I',\n    '\\u00CE': 'I',\n    '\\u0128': 'I',\n    '\\u012A': 'I',\n    '\\u012C': 'I',\n    '\\u0130': 'I',\n    '\\u00CF': 'I',\n    '\\u1E2E': 'I',\n    '\\u1EC8': 'I',\n    '\\u01CF': 'I',\n    '\\u0208': 'I',\n    '\\u020A': 'I',\n    '\\u1ECA': 'I',\n    '\\u012E': 'I',\n    '\\u1E2C': 'I',\n    '\\u0197': 'I',\n    '\\u24BF': 'J',\n    '\\uFF2A': 'J',\n    '\\u0134': 'J',\n    '\\u0248': 'J',\n    '\\u24C0': 'K',\n    '\\uFF2B': 'K',\n    '\\u1E30': 'K',\n    '\\u01E8': 'K',\n    '\\u1E32': 'K',\n    '\\u0136': 'K',\n    '\\u1E34': 'K',\n    '\\u0198': 'K',\n    '\\u2C69': 'K',\n    '\\uA740': 'K',\n    '\\uA742': 'K',\n    '\\uA744': 'K',\n    '\\uA7A2': 'K',\n    '\\u24C1': 'L',\n    '\\uFF2C': 'L',\n    '\\u013F': 'L',\n    '\\u0139': 'L',\n    '\\u013D': 'L',\n    '\\u1E36': 'L',\n    '\\u1E38': 'L',\n    '\\u013B': 'L',\n    '\\u1E3C': 'L',\n    '\\u1E3A': 'L',\n    '\\u0141': 'L',\n    '\\u023D': 'L',\n    '\\u2C62': 'L',\n    '\\u2C60': 'L',\n    '\\uA748': 'L',\n    '\\uA746': 'L',\n    '\\uA780': 'L',\n    '\\u01C7': 'LJ',\n    '\\u01C8': 'Lj',\n    '\\u24C2': 'M',\n    '\\uFF2D': 'M',\n    '\\u1E3E': 'M',\n    '\\u1E40': 'M',\n    '\\u1E42': 'M',\n    '\\u2C6E': 'M',\n    '\\u019C': 'M',\n    '\\u24C3': 'N',\n    '\\uFF2E': 'N',\n    '\\u01F8': 'N',\n    '\\u0143': 'N',\n    '\\u00D1': 'N',\n    '\\u1E44': 'N',\n    '\\u0147': 'N',\n    '\\u1E46': 'N',\n    '\\u0145': 'N',\n    '\\u1E4A': 'N',\n    '\\u1E48': 'N',\n    '\\u0220': 'N',\n    '\\u019D': 'N',\n    '\\uA790': 'N',\n    '\\uA7A4': 'N',\n    '\\u01CA': 'NJ',\n    '\\u01CB': 'Nj',\n    '\\u24C4': 'O',\n    '\\uFF2F': 'O',\n    '\\u00D2': 'O',\n    '\\u00D3': 'O',\n    '\\u00D4': 'O',\n    '\\u1ED2': 'O',\n    '\\u1ED0': 'O',\n    '\\u1ED6': 'O',\n    '\\u1ED4': 'O',\n    '\\u00D5': 'O',\n    '\\u1E4C': 'O',\n    '\\u022C': 'O',\n    '\\u1E4E': 'O',\n    '\\u014C': 'O',\n    '\\u1E50': 'O',\n    '\\u1E52': 'O',\n    '\\u014E': 'O',\n    '\\u022E': 'O',\n    '\\u0230': 'O',\n    '\\u00D6': 'O',\n    '\\u022A': 'O',\n    '\\u1ECE': 'O',\n    '\\u0150': 'O',\n    '\\u01D1': 'O',\n    '\\u020C': 'O',\n    '\\u020E': 'O',\n    '\\u01A0': 'O',\n    '\\u1EDC': 'O',\n    '\\u1EDA': 'O',\n    '\\u1EE0': 'O',\n    '\\u1EDE': 'O',\n    '\\u1EE2': 'O',\n    '\\u1ECC': 'O',\n    '\\u1ED8': 'O',\n    '\\u01EA': 'O',\n    '\\u01EC': 'O',\n    '\\u00D8': 'O',\n    '\\u01FE': 'O',\n    '\\u0186': 'O',\n    '\\u019F': 'O',\n    '\\uA74A': 'O',\n    '\\uA74C': 'O',\n    '\\u0152': 'OE',\n    '\\u01A2': 'OI',\n    '\\uA74E': 'OO',\n    '\\u0222': 'OU',\n    '\\u24C5': 'P',\n    '\\uFF30': 'P',\n    '\\u1E54': 'P',\n    '\\u1E56': 'P',\n    '\\u01A4': 'P',\n    '\\u2C63': 'P',\n    '\\uA750': 'P',\n    '\\uA752': 'P',\n    '\\uA754': 'P',\n    '\\u24C6': 'Q',\n    '\\uFF31': 'Q',\n    '\\uA756': 'Q',\n    '\\uA758': 'Q',\n    '\\u024A': 'Q',\n    '\\u24C7': 'R',\n    '\\uFF32': 'R',\n    '\\u0154': 'R',\n    '\\u1E58': 'R',\n    '\\u0158': 'R',\n    '\\u0210': 'R',\n    '\\u0212': 'R',\n    '\\u1E5A': 'R',\n    '\\u1E5C': 'R',\n    '\\u0156': 'R',\n    '\\u1E5E': 'R',\n    '\\u024C': 'R',\n    '\\u2C64': 'R',\n    '\\uA75A': 'R',\n    '\\uA7A6': 'R',\n    '\\uA782': 'R',\n    '\\u24C8': 'S',\n    '\\uFF33': 'S',\n    '\\u1E9E': 'S',\n    '\\u015A': 'S',\n    '\\u1E64': 'S',\n    '\\u015C': 'S',\n    '\\u1E60': 'S',\n    '\\u0160': 'S',\n    '\\u1E66': 'S',\n    '\\u1E62': 'S',\n    '\\u1E68': 'S',\n    '\\u0218': 'S',\n    '\\u015E': 'S',\n    '\\u2C7E': 'S',\n    '\\uA7A8': 'S',\n    '\\uA784': 'S',\n    '\\u24C9': 'T',\n    '\\uFF34': 'T',\n    '\\u1E6A': 'T',\n    '\\u0164': 'T',\n    '\\u1E6C': 'T',\n    '\\u021A': 'T',\n    '\\u0162': 'T',\n    '\\u1E70': 'T',\n    '\\u1E6E': 'T',\n    '\\u0166': 'T',\n    '\\u01AC': 'T',\n    '\\u01AE': 'T',\n    '\\u023E': 'T',\n    '\\uA786': 'T',\n    '\\uA728': 'TZ',\n    '\\u24CA': 'U',\n    '\\uFF35': 'U',\n    '\\u00D9': 'U',\n    '\\u00DA': 'U',\n    '\\u00DB': 'U',\n    '\\u0168': 'U',\n    '\\u1E78': 'U',\n    '\\u016A': 'U',\n    '\\u1E7A': 'U',\n    '\\u016C': 'U',\n    '\\u00DC': 'U',\n    '\\u01DB': 'U',\n    '\\u01D7': 'U',\n    '\\u01D5': 'U',\n    '\\u01D9': 'U',\n    '\\u1EE6': 'U',\n    '\\u016E': 'U',\n    '\\u0170': 'U',\n    '\\u01D3': 'U',\n    '\\u0214': 'U',\n    '\\u0216': 'U',\n    '\\u01AF': 'U',\n    '\\u1EEA': 'U',\n    '\\u1EE8': 'U',\n    '\\u1EEE': 'U',\n    '\\u1EEC': 'U',\n    '\\u1EF0': 'U',\n    '\\u1EE4': 'U',\n    '\\u1E72': 'U',\n    '\\u0172': 'U',\n    '\\u1E76': 'U',\n    '\\u1E74': 'U',\n    '\\u0244': 'U',\n    '\\u24CB': 'V',\n    '\\uFF36': 'V',\n    '\\u1E7C': 'V',\n    '\\u1E7E': 'V',\n    '\\u01B2': 'V',\n    '\\uA75E': 'V',\n    '\\u0245': 'V',\n    '\\uA760': 'VY',\n    '\\u24CC': 'W',\n    '\\uFF37': 'W',\n    '\\u1E80': 'W',\n    '\\u1E82': 'W',\n    '\\u0174': 'W',\n    '\\u1E86': 'W',\n    '\\u1E84': 'W',\n    '\\u1E88': 'W',\n    '\\u2C72': 'W',\n    '\\u24CD': 'X',\n    '\\uFF38': 'X',\n    '\\u1E8A': 'X',\n    '\\u1E8C': 'X',\n    '\\u24CE': 'Y',\n    '\\uFF39': 'Y',\n    '\\u1EF2': 'Y',\n    '\\u00DD': 'Y',\n    '\\u0176': 'Y',\n    '\\u1EF8': 'Y',\n    '\\u0232': 'Y',\n    '\\u1E8E': 'Y',\n    '\\u0178': 'Y',\n    '\\u1EF6': 'Y',\n    '\\u1EF4': 'Y',\n    '\\u01B3': 'Y',\n    '\\u024E': 'Y',\n    '\\u1EFE': 'Y',\n    '\\u24CF': 'Z',\n    '\\uFF3A': 'Z',\n    '\\u0179': 'Z',\n    '\\u1E90': 'Z',\n    '\\u017B': 'Z',\n    '\\u017D': 'Z',\n    '\\u1E92': 'Z',\n    '\\u1E94': 'Z',\n    '\\u01B5': 'Z',\n    '\\u0224': 'Z',\n    '\\u2C7F': 'Z',\n    '\\u2C6B': 'Z',\n    '\\uA762': 'Z',\n    '\\u24D0': 'a',\n    '\\uFF41': 'a',\n    '\\u1E9A': 'a',\n    '\\u00E0': 'a',\n    '\\u00E1': 'a',\n    '\\u00E2': 'a',\n    '\\u1EA7': 'a',\n    '\\u1EA5': 'a',\n    '\\u1EAB': 'a',\n    '\\u1EA9': 'a',\n    '\\u00E3': 'a',\n    '\\u0101': 'a',\n    '\\u0103': 'a',\n    '\\u1EB1': 'a',\n    '\\u1EAF': 'a',\n    '\\u1EB5': 'a',\n    '\\u1EB3': 'a',\n    '\\u0227': 'a',\n    '\\u01E1': 'a',\n    '\\u00E4': 'a',\n    '\\u01DF': 'a',\n    '\\u1EA3': 'a',\n    '\\u00E5': 'a',\n    '\\u01FB': 'a',\n    '\\u01CE': 'a',\n    '\\u0201': 'a',\n    '\\u0203': 'a',\n    '\\u1EA1': 'a',\n    '\\u1EAD': 'a',\n    '\\u1EB7': 'a',\n    '\\u1E01': 'a',\n    '\\u0105': 'a',\n    '\\u2C65': 'a',\n    '\\u0250': 'a',\n    '\\uA733': 'aa',\n    '\\u00E6': 'ae',\n    '\\u01FD': 'ae',\n    '\\u01E3': 'ae',\n    '\\uA735': 'ao',\n    '\\uA737': 'au',\n    '\\uA739': 'av',\n    '\\uA73B': 'av',\n    '\\uA73D': 'ay',\n    '\\u24D1': 'b',\n    '\\uFF42': 'b',\n    '\\u1E03': 'b',\n    '\\u1E05': 'b',\n    '\\u1E07': 'b',\n    '\\u0180': 'b',\n    '\\u0183': 'b',\n    '\\u0253': 'b',\n    '\\u24D2': 'c',\n    '\\uFF43': 'c',\n    '\\u0107': 'c',\n    '\\u0109': 'c',\n    '\\u010B': 'c',\n    '\\u010D': 'c',\n    '\\u00E7': 'c',\n    '\\u1E09': 'c',\n    '\\u0188': 'c',\n    '\\u023C': 'c',\n    '\\uA73F': 'c',\n    '\\u2184': 'c',\n    '\\u24D3': 'd',\n    '\\uFF44': 'd',\n    '\\u1E0B': 'd',\n    '\\u010F': 'd',\n    '\\u1E0D': 'd',\n    '\\u1E11': 'd',\n    '\\u1E13': 'd',\n    '\\u1E0F': 'd',\n    '\\u0111': 'd',\n    '\\u018C': 'd',\n    '\\u0256': 'd',\n    '\\u0257': 'd',\n    '\\uA77A': 'd',\n    '\\u01F3': 'dz',\n    '\\u01C6': 'dz',\n    '\\u24D4': 'e',\n    '\\uFF45': 'e',\n    '\\u00E8': 'e',\n    '\\u00E9': 'e',\n    '\\u00EA': 'e',\n    '\\u1EC1': 'e',\n    '\\u1EBF': 'e',\n    '\\u1EC5': 'e',\n    '\\u1EC3': 'e',\n    '\\u1EBD': 'e',\n    '\\u0113': 'e',\n    '\\u1E15': 'e',\n    '\\u1E17': 'e',\n    '\\u0115': 'e',\n    '\\u0117': 'e',\n    '\\u00EB': 'e',\n    '\\u1EBB': 'e',\n    '\\u011B': 'e',\n    '\\u0205': 'e',\n    '\\u0207': 'e',\n    '\\u1EB9': 'e',\n    '\\u1EC7': 'e',\n    '\\u0229': 'e',\n    '\\u1E1D': 'e',\n    '\\u0119': 'e',\n    '\\u1E19': 'e',\n    '\\u1E1B': 'e',\n    '\\u0247': 'e',\n    '\\u025B': 'e',\n    '\\u01DD': 'e',\n    '\\u24D5': 'f',\n    '\\uFF46': 'f',\n    '\\u1E1F': 'f',\n    '\\u0192': 'f',\n    '\\uA77C': 'f',\n    '\\u24D6': 'g',\n    '\\uFF47': 'g',\n    '\\u01F5': 'g',\n    '\\u011D': 'g',\n    '\\u1E21': 'g',\n    '\\u011F': 'g',\n    '\\u0121': 'g',\n    '\\u01E7': 'g',\n    '\\u0123': 'g',\n    '\\u01E5': 'g',\n    '\\u0260': 'g',\n    '\\uA7A1': 'g',\n    '\\u1D79': 'g',\n    '\\uA77F': 'g',\n    '\\u24D7': 'h',\n    '\\uFF48': 'h',\n    '\\u0125': 'h',\n    '\\u1E23': 'h',\n    '\\u1E27': 'h',\n    '\\u021F': 'h',\n    '\\u1E25': 'h',\n    '\\u1E29': 'h',\n    '\\u1E2B': 'h',\n    '\\u1E96': 'h',\n    '\\u0127': 'h',\n    '\\u2C68': 'h',\n    '\\u2C76': 'h',\n    '\\u0265': 'h',\n    '\\u0195': 'hv',\n    '\\u24D8': 'i',\n    '\\uFF49': 'i',\n    '\\u00EC': 'i',\n    '\\u00ED': 'i',\n    '\\u00EE': 'i',\n    '\\u0129': 'i',\n    '\\u012B': 'i',\n    '\\u012D': 'i',\n    '\\u00EF': 'i',\n    '\\u1E2F': 'i',\n    '\\u1EC9': 'i',\n    '\\u01D0': 'i',\n    '\\u0209': 'i',\n    '\\u020B': 'i',\n    '\\u1ECB': 'i',\n    '\\u012F': 'i',\n    '\\u1E2D': 'i',\n    '\\u0268': 'i',\n    '\\u0131': 'i',\n    '\\u24D9': 'j',\n    '\\uFF4A': 'j',\n    '\\u0135': 'j',\n    '\\u01F0': 'j',\n    '\\u0249': 'j',\n    '\\u24DA': 'k',\n    '\\uFF4B': 'k',\n    '\\u1E31': 'k',\n    '\\u01E9': 'k',\n    '\\u1E33': 'k',\n    '\\u0137': 'k',\n    '\\u1E35': 'k',\n    '\\u0199': 'k',\n    '\\u2C6A': 'k',\n    '\\uA741': 'k',\n    '\\uA743': 'k',\n    '\\uA745': 'k',\n    '\\uA7A3': 'k',\n    '\\u24DB': 'l',\n    '\\uFF4C': 'l',\n    '\\u0140': 'l',\n    '\\u013A': 'l',\n    '\\u013E': 'l',\n    '\\u1E37': 'l',\n    '\\u1E39': 'l',\n    '\\u013C': 'l',\n    '\\u1E3D': 'l',\n    '\\u1E3B': 'l',\n    '\\u017F': 'l',\n    '\\u0142': 'l',\n    '\\u019A': 'l',\n    '\\u026B': 'l',\n    '\\u2C61': 'l',\n    '\\uA749': 'l',\n    '\\uA781': 'l',\n    '\\uA747': 'l',\n    '\\u01C9': 'lj',\n    '\\u24DC': 'm',\n    '\\uFF4D': 'm',\n    '\\u1E3F': 'm',\n    '\\u1E41': 'm',\n    '\\u1E43': 'm',\n    '\\u0271': 'm',\n    '\\u026F': 'm',\n    '\\u24DD': 'n',\n    '\\uFF4E': 'n',\n    '\\u01F9': 'n',\n    '\\u0144': 'n',\n    '\\u00F1': 'n',\n    '\\u1E45': 'n',\n    '\\u0148': 'n',\n    '\\u1E47': 'n',\n    '\\u0146': 'n',\n    '\\u1E4B': 'n',\n    '\\u1E49': 'n',\n    '\\u019E': 'n',\n    '\\u0272': 'n',\n    '\\u0149': 'n',\n    '\\uA791': 'n',\n    '\\uA7A5': 'n',\n    '\\u01CC': 'nj',\n    '\\u24DE': 'o',\n    '\\uFF4F': 'o',\n    '\\u00F2': 'o',\n    '\\u00F3': 'o',\n    '\\u00F4': 'o',\n    '\\u1ED3': 'o',\n    '\\u1ED1': 'o',\n    '\\u1ED7': 'o',\n    '\\u1ED5': 'o',\n    '\\u00F5': 'o',\n    '\\u1E4D': 'o',\n    '\\u022D': 'o',\n    '\\u1E4F': 'o',\n    '\\u014D': 'o',\n    '\\u1E51': 'o',\n    '\\u1E53': 'o',\n    '\\u014F': 'o',\n    '\\u022F': 'o',\n    '\\u0231': 'o',\n    '\\u00F6': 'o',\n    '\\u022B': 'o',\n    '\\u1ECF': 'o',\n    '\\u0151': 'o',\n    '\\u01D2': 'o',\n    '\\u020D': 'o',\n    '\\u020F': 'o',\n    '\\u01A1': 'o',\n    '\\u1EDD': 'o',\n    '\\u1EDB': 'o',\n    '\\u1EE1': 'o',\n    '\\u1EDF': 'o',\n    '\\u1EE3': 'o',\n    '\\u1ECD': 'o',\n    '\\u1ED9': 'o',\n    '\\u01EB': 'o',\n    '\\u01ED': 'o',\n    '\\u00F8': 'o',\n    '\\u01FF': 'o',\n    '\\u0254': 'o',\n    '\\uA74B': 'o',\n    '\\uA74D': 'o',\n    '\\u0275': 'o',\n    '\\u0153': 'oe',\n    '\\u01A3': 'oi',\n    '\\u0223': 'ou',\n    '\\uA74F': 'oo',\n    '\\u24DF': 'p',\n    '\\uFF50': 'p',\n    '\\u1E55': 'p',\n    '\\u1E57': 'p',\n    '\\u01A5': 'p',\n    '\\u1D7D': 'p',\n    '\\uA751': 'p',\n    '\\uA753': 'p',\n    '\\uA755': 'p',\n    '\\u24E0': 'q',\n    '\\uFF51': 'q',\n    '\\u024B': 'q',\n    '\\uA757': 'q',\n    '\\uA759': 'q',\n    '\\u24E1': 'r',\n    '\\uFF52': 'r',\n    '\\u0155': 'r',\n    '\\u1E59': 'r',\n    '\\u0159': 'r',\n    '\\u0211': 'r',\n    '\\u0213': 'r',\n    '\\u1E5B': 'r',\n    '\\u1E5D': 'r',\n    '\\u0157': 'r',\n    '\\u1E5F': 'r',\n    '\\u024D': 'r',\n    '\\u027D': 'r',\n    '\\uA75B': 'r',\n    '\\uA7A7': 'r',\n    '\\uA783': 'r',\n    '\\u24E2': 's',\n    '\\uFF53': 's',\n    '\\u00DF': 's',\n    '\\u015B': 's',\n    '\\u1E65': 's',\n    '\\u015D': 's',\n    '\\u1E61': 's',\n    '\\u0161': 's',\n    '\\u1E67': 's',\n    '\\u1E63': 's',\n    '\\u1E69': 's',\n    '\\u0219': 's',\n    '\\u015F': 's',\n    '\\u023F': 's',\n    '\\uA7A9': 's',\n    '\\uA785': 's',\n    '\\u1E9B': 's',\n    '\\u24E3': 't',\n    '\\uFF54': 't',\n    '\\u1E6B': 't',\n    '\\u1E97': 't',\n    '\\u0165': 't',\n    '\\u1E6D': 't',\n    '\\u021B': 't',\n    '\\u0163': 't',\n    '\\u1E71': 't',\n    '\\u1E6F': 't',\n    '\\u0167': 't',\n    '\\u01AD': 't',\n    '\\u0288': 't',\n    '\\u2C66': 't',\n    '\\uA787': 't',\n    '\\uA729': 'tz',\n    '\\u24E4': 'u',\n    '\\uFF55': 'u',\n    '\\u00F9': 'u',\n    '\\u00FA': 'u',\n    '\\u00FB': 'u',\n    '\\u0169': 'u',\n    '\\u1E79': 'u',\n    '\\u016B': 'u',\n    '\\u1E7B': 'u',\n    '\\u016D': 'u',\n    '\\u00FC': 'u',\n    '\\u01DC': 'u',\n    '\\u01D8': 'u',\n    '\\u01D6': 'u',\n    '\\u01DA': 'u',\n    '\\u1EE7': 'u',\n    '\\u016F': 'u',\n    '\\u0171': 'u',\n    '\\u01D4': 'u',\n    '\\u0215': 'u',\n    '\\u0217': 'u',\n    '\\u01B0': 'u',\n    '\\u1EEB': 'u',\n    '\\u1EE9': 'u',\n    '\\u1EEF': 'u',\n    '\\u1EED': 'u',\n    '\\u1EF1': 'u',\n    '\\u1EE5': 'u',\n    '\\u1E73': 'u',\n    '\\u0173': 'u',\n    '\\u1E77': 'u',\n    '\\u1E75': 'u',\n    '\\u0289': 'u',\n    '\\u24E5': 'v',\n    '\\uFF56': 'v',\n    '\\u1E7D': 'v',\n    '\\u1E7F': 'v',\n    '\\u028B': 'v',\n    '\\uA75F': 'v',\n    '\\u028C': 'v',\n    '\\uA761': 'vy',\n    '\\u24E6': 'w',\n    '\\uFF57': 'w',\n    '\\u1E81': 'w',\n    '\\u1E83': 'w',\n    '\\u0175': 'w',\n    '\\u1E87': 'w',\n    '\\u1E85': 'w',\n    '\\u1E98': 'w',\n    '\\u1E89': 'w',\n    '\\u2C73': 'w',\n    '\\u24E7': 'x',\n    '\\uFF58': 'x',\n    '\\u1E8B': 'x',\n    '\\u1E8D': 'x',\n    '\\u24E8': 'y',\n    '\\uFF59': 'y',\n    '\\u1EF3': 'y',\n    '\\u00FD': 'y',\n    '\\u0177': 'y',\n    '\\u1EF9': 'y',\n    '\\u0233': 'y',\n    '\\u1E8F': 'y',\n    '\\u00FF': 'y',\n    '\\u1EF7': 'y',\n    '\\u1E99': 'y',\n    '\\u1EF5': 'y',\n    '\\u01B4': 'y',\n    '\\u024F': 'y',\n    '\\u1EFF': 'y',\n    '\\u24E9': 'z',\n    '\\uFF5A': 'z',\n    '\\u017A': 'z',\n    '\\u1E91': 'z',\n    '\\u017C': 'z',\n    '\\u017E': 'z',\n    '\\u1E93': 'z',\n    '\\u1E95': 'z',\n    '\\u01B6': 'z',\n    '\\u0225': 'z',\n    '\\u0240': 'z',\n    '\\u2C6C': 'z',\n    '\\uA763': 'z',\n    '\\u0386': '\\u0391',\n    '\\u0388': '\\u0395',\n    '\\u0389': '\\u0397',\n    '\\u038A': '\\u0399',\n    '\\u03AA': '\\u0399',\n    '\\u038C': '\\u039F',\n    '\\u038E': '\\u03A5',\n    '\\u03AB': '\\u03A5',\n    '\\u038F': '\\u03A9',\n    '\\u03AC': '\\u03B1',\n    '\\u03AD': '\\u03B5',\n    '\\u03AE': '\\u03B7',\n    '\\u03AF': '\\u03B9',\n    '\\u03CA': '\\u03B9',\n    '\\u0390': '\\u03B9',\n    '\\u03CC': '\\u03BF',\n    '\\u03CD': '\\u03C5',\n    '\\u03CB': '\\u03C5',\n    '\\u03B0': '\\u03C5',\n    '\\u03CE': '\\u03C9',\n    '\\u03C2': '\\u03C3',\n    '\\u2019': '\\''\n  };\n\n  return diacritics;\n});\n\nS2.define('select2/data/base',[\n  '../utils'\n], function (Utils) {\n  function BaseAdapter ($element, options) {\n    BaseAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseAdapter, Utils.Observable);\n\n  BaseAdapter.prototype.current = function (callback) {\n    throw new Error('The `current` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.query = function (params, callback) {\n    throw new Error('The `query` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.bind = function (container, $container) {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.destroy = function () {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.generateResultId = function (container, data) {\n    var id = container.id + '-result-';\n\n    id += Utils.generateChars(4);\n\n    if (data.id != null) {\n      id += '-' + data.id.toString();\n    } else {\n      id += '-' + Utils.generateChars(4);\n    }\n    return id;\n  };\n\n  return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n  './base',\n  '../utils',\n  'jquery'\n], function (BaseAdapter, Utils, $) {\n  function SelectAdapter ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    SelectAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(SelectAdapter, BaseAdapter);\n\n  SelectAdapter.prototype.current = function (callback) {\n    var data = [];\n    var self = this;\n\n    this.$element.find(':selected').each(function () {\n      var $option = $(this);\n\n      var option = self.item($option);\n\n      data.push(option);\n    });\n\n    callback(data);\n  };\n\n  SelectAdapter.prototype.select = function (data) {\n    var self = this;\n\n    data.selected = true;\n\n    // If data.element is a DOM node, use it instead\n    if ($(data.element).is('option')) {\n      data.element.selected = true;\n\n      this.$element.trigger('input').trigger('change');\n\n      return;\n    }\n\n    if (this.$element.prop('multiple')) {\n      this.current(function (currentData) {\n        var val = [];\n\n        data = [data];\n        data.push.apply(data, currentData);\n\n        for (var d = 0; d < data.length; d++) {\n          var id = data[d].id;\n\n          if ($.inArray(id, val) === -1) {\n            val.push(id);\n          }\n        }\n\n        self.$element.val(val);\n        self.$element.trigger('input').trigger('change');\n      });\n    } else {\n      var val = data.id;\n\n      this.$element.val(val);\n      this.$element.trigger('input').trigger('change');\n    }\n  };\n\n  SelectAdapter.prototype.unselect = function (data) {\n    var self = this;\n\n    if (!this.$element.prop('multiple')) {\n      return;\n    }\n\n    data.selected = false;\n\n    if ($(data.element).is('option')) {\n      data.element.selected = false;\n\n      this.$element.trigger('input').trigger('change');\n\n      return;\n    }\n\n    this.current(function (currentData) {\n      var val = [];\n\n      for (var d = 0; d < currentData.length; d++) {\n        var id = currentData[d].id;\n\n        if (id !== data.id && $.inArray(id, val) === -1) {\n          val.push(id);\n        }\n      }\n\n      self.$element.val(val);\n\n      self.$element.trigger('input').trigger('change');\n    });\n  };\n\n  SelectAdapter.prototype.bind = function (container, $container) {\n    var self = this;\n\n    this.container = container;\n\n    container.on('select', function (params) {\n      self.select(params.data);\n    });\n\n    container.on('unselect', function (params) {\n      self.unselect(params.data);\n    });\n  };\n\n  SelectAdapter.prototype.destroy = function () {\n    // Remove anything added to child elements\n    this.$element.find('*').each(function () {\n      // Remove any custom data set by Select2\n      Utils.RemoveData(this);\n    });\n  };\n\n  SelectAdapter.prototype.query = function (params, callback) {\n    var data = [];\n    var self = this;\n\n    var $options = this.$element.children();\n\n    $options.each(function () {\n      var $option = $(this);\n\n      if (!$option.is('option') && !$option.is('optgroup')) {\n        return;\n      }\n\n      var option = self.item($option);\n\n      var matches = self.matches(params, option);\n\n      if (matches !== null) {\n        data.push(matches);\n      }\n    });\n\n    callback({\n      results: data\n    });\n  };\n\n  SelectAdapter.prototype.addOptions = function ($options) {\n    Utils.appendMany(this.$element, $options);\n  };\n\n  SelectAdapter.prototype.option = function (data) {\n    var option;\n\n    if (data.children) {\n      option = document.createElement('optgroup');\n      option.label = data.text;\n    } else {\n      option = document.createElement('option');\n\n      if (option.textContent !== undefined) {\n        option.textContent = data.text;\n      } else {\n        option.innerText = data.text;\n      }\n    }\n\n    if (data.id !== undefined) {\n      option.value = data.id;\n    }\n\n    if (data.disabled) {\n      option.disabled = true;\n    }\n\n    if (data.selected) {\n      option.selected = true;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    var $option = $(option);\n\n    var normalizedData = this._normalizeItem(data);\n    normalizedData.element = option;\n\n    // Override the option's data with the combined data\n    Utils.StoreData(option, 'data', normalizedData);\n\n    return $option;\n  };\n\n  SelectAdapter.prototype.item = function ($option) {\n    var data = {};\n\n    data = Utils.GetData($option[0], 'data');\n\n    if (data != null) {\n      return data;\n    }\n\n    if ($option.is('option')) {\n      data = {\n        id: $option.val(),\n        text: $option.text(),\n        disabled: $option.prop('disabled'),\n        selected: $option.prop('selected'),\n        title: $option.prop('title')\n      };\n    } else if ($option.is('optgroup')) {\n      data = {\n        text: $option.prop('label'),\n        children: [],\n        title: $option.prop('title')\n      };\n\n      var $children = $option.children('option');\n      var children = [];\n\n      for (var c = 0; c < $children.length; c++) {\n        var $child = $($children[c]);\n\n        var child = this.item($child);\n\n        children.push(child);\n      }\n\n      data.children = children;\n    }\n\n    data = this._normalizeItem(data);\n    data.element = $option[0];\n\n    Utils.StoreData($option[0], 'data', data);\n\n    return data;\n  };\n\n  SelectAdapter.prototype._normalizeItem = function (item) {\n    if (item !== Object(item)) {\n      item = {\n        id: item,\n        text: item\n      };\n    }\n\n    item = $.extend({}, {\n      text: ''\n    }, item);\n\n    var defaults = {\n      selected: false,\n      disabled: false\n    };\n\n    if (item.id != null) {\n      item.id = item.id.toString();\n    }\n\n    if (item.text != null) {\n      item.text = item.text.toString();\n    }\n\n    if (item._resultId == null && item.id && this.container != null) {\n      item._resultId = this.generateResultId(this.container, item);\n    }\n\n    return $.extend({}, defaults, item);\n  };\n\n  SelectAdapter.prototype.matches = function (params, data) {\n    var matcher = this.options.get('matcher');\n\n    return matcher(params, data);\n  };\n\n  return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n  './select',\n  '../utils',\n  'jquery'\n], function (SelectAdapter, Utils, $) {\n  function ArrayAdapter ($element, options) {\n    this._dataToConvert = options.get('data') || [];\n\n    ArrayAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(ArrayAdapter, SelectAdapter);\n\n  ArrayAdapter.prototype.bind = function (container, $container) {\n    ArrayAdapter.__super__.bind.call(this, container, $container);\n\n    this.addOptions(this.convertToOptions(this._dataToConvert));\n  };\n\n  ArrayAdapter.prototype.select = function (data) {\n    var $option = this.$element.find('option').filter(function (i, elm) {\n      return elm.value == data.id.toString();\n    });\n\n    if ($option.length === 0) {\n      $option = this.option(data);\n\n      this.addOptions($option);\n    }\n\n    ArrayAdapter.__super__.select.call(this, data);\n  };\n\n  ArrayAdapter.prototype.convertToOptions = function (data) {\n    var self = this;\n\n    var $existing = this.$element.find('option');\n    var existingIds = $existing.map(function () {\n      return self.item($(this)).id;\n    }).get();\n\n    var $options = [];\n\n    // Filter out all items except for the one passed in the argument\n    function onlyItem (item) {\n      return function () {\n        return $(this).val() == item.id;\n      };\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      var item = this._normalizeItem(data[d]);\n\n      // Skip items which were pre-loaded, only merge the data\n      if ($.inArray(item.id, existingIds) >= 0) {\n        var $existingOption = $existing.filter(onlyItem(item));\n\n        var existingData = this.item($existingOption);\n        var newData = $.extend(true, {}, item, existingData);\n\n        var $newOption = this.option(newData);\n\n        $existingOption.replaceWith($newOption);\n\n        continue;\n      }\n\n      var $option = this.option(item);\n\n      if (item.children) {\n        var $children = this.convertToOptions(item.children);\n\n        Utils.appendMany($option, $children);\n      }\n\n      $options.push($option);\n    }\n\n    return $options;\n  };\n\n  return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n  './array',\n  '../utils',\n  'jquery'\n], function (ArrayAdapter, Utils, $) {\n  function AjaxAdapter ($element, options) {\n    this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n    if (this.ajaxOptions.processResults != null) {\n      this.processResults = this.ajaxOptions.processResults;\n    }\n\n    AjaxAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n  AjaxAdapter.prototype._applyDefaults = function (options) {\n    var defaults = {\n      data: function (params) {\n        return $.extend({}, params, {\n          q: params.term\n        });\n      },\n      transport: function (params, success, failure) {\n        var $request = $.ajax(params);\n\n        $request.then(success);\n        $request.fail(failure);\n\n        return $request;\n      }\n    };\n\n    return $.extend({}, defaults, options, true);\n  };\n\n  AjaxAdapter.prototype.processResults = function (results) {\n    return results;\n  };\n\n  AjaxAdapter.prototype.query = function (params, callback) {\n    var matches = [];\n    var self = this;\n\n    if (this._request != null) {\n      // JSONP requests cannot always be aborted\n      if ($.isFunction(this._request.abort)) {\n        this._request.abort();\n      }\n\n      this._request = null;\n    }\n\n    var options = $.extend({\n      type: 'GET'\n    }, this.ajaxOptions);\n\n    if (typeof options.url === 'function') {\n      options.url = options.url.call(this.$element, params);\n    }\n\n    if (typeof options.data === 'function') {\n      options.data = options.data.call(this.$element, params);\n    }\n\n    function request () {\n      var $request = options.transport(options, function (data) {\n        var results = self.processResults(data, params);\n\n        if (self.options.get('debug') && window.console && console.error) {\n          // Check to make sure that the response included a `results` key.\n          if (!results || !results.results || !$.isArray(results.results)) {\n            console.error(\n              'Select2: The AJAX results did not return an array in the ' +\n              '`results` key of the response.'\n            );\n          }\n        }\n\n        callback(results);\n      }, function () {\n        // Attempt to detect if a request was aborted\n        // Only works if the transport exposes a status property\n        if ('status' in $request &&\n            ($request.status === 0 || $request.status === '0')) {\n          return;\n        }\n\n        self.trigger('results:message', {\n          message: 'errorLoading'\n        });\n      });\n\n      self._request = $request;\n    }\n\n    if (this.ajaxOptions.delay && params.term != null) {\n      if (this._queryTimeout) {\n        window.clearTimeout(this._queryTimeout);\n      }\n\n      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n    } else {\n      request();\n    }\n  };\n\n  return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n  'jquery'\n], function ($) {\n  function Tags (decorated, $element, options) {\n    var tags = options.get('tags');\n\n    var createTag = options.get('createTag');\n\n    if (createTag !== undefined) {\n      this.createTag = createTag;\n    }\n\n    var insertTag = options.get('insertTag');\n\n    if (insertTag !== undefined) {\n        this.insertTag = insertTag;\n    }\n\n    decorated.call(this, $element, options);\n\n    if ($.isArray(tags)) {\n      for (var t = 0; t < tags.length; t++) {\n        var tag = tags[t];\n        var item = this._normalizeItem(tag);\n\n        var $option = this.option(item);\n\n        this.$element.append($option);\n      }\n    }\n  }\n\n  Tags.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    this._removeOldTags();\n\n    if (params.term == null || params.page != null) {\n      decorated.call(this, params, callback);\n      return;\n    }\n\n    function wrapper (obj, child) {\n      var data = obj.results;\n\n      for (var i = 0; i < data.length; i++) {\n        var option = data[i];\n\n        var checkChildren = (\n          option.children != null &&\n          !wrapper({\n            results: option.children\n          }, true)\n        );\n\n        var optionText = (option.text || '').toUpperCase();\n        var paramsTerm = (params.term || '').toUpperCase();\n\n        var checkText = optionText === paramsTerm;\n\n        if (checkText || checkChildren) {\n          if (child) {\n            return false;\n          }\n\n          obj.data = data;\n          callback(obj);\n\n          return;\n        }\n      }\n\n      if (child) {\n        return true;\n      }\n\n      var tag = self.createTag(params);\n\n      if (tag != null) {\n        var $option = self.option(tag);\n        $option.attr('data-select2-tag', true);\n\n        self.addOptions([$option]);\n\n        self.insertTag(data, tag);\n      }\n\n      obj.results = data;\n\n      callback(obj);\n    }\n\n    decorated.call(this, params, wrapper);\n  };\n\n  Tags.prototype.createTag = function (decorated, params) {\n    var term = $.trim(params.term);\n\n    if (term === '') {\n      return null;\n    }\n\n    return {\n      id: term,\n      text: term\n    };\n  };\n\n  Tags.prototype.insertTag = function (_, data, tag) {\n    data.unshift(tag);\n  };\n\n  Tags.prototype._removeOldTags = function (_) {\n    var $options = this.$element.find('option[data-select2-tag]');\n\n    $options.each(function () {\n      if (this.selected) {\n        return;\n      }\n\n      $(this).remove();\n    });\n  };\n\n  return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n  'jquery'\n], function ($) {\n  function Tokenizer (decorated, $element, options) {\n    var tokenizer = options.get('tokenizer');\n\n    if (tokenizer !== undefined) {\n      this.tokenizer = tokenizer;\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Tokenizer.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    this.$search =  container.dropdown.$search || container.selection.$search ||\n      $container.find('.select2-search__field');\n  };\n\n  Tokenizer.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    function createAndSelect (data) {\n      // Normalize the data object so we can use it for checks\n      var item = self._normalizeItem(data);\n\n      // Check if the data object already exists as a tag\n      // Select it if it doesn't\n      var $existingOptions = self.$element.find('option').filter(function () {\n        return $(this).val() === item.id;\n      });\n\n      // If an existing option wasn't found for it, create the option\n      if (!$existingOptions.length) {\n        var $option = self.option(item);\n        $option.attr('data-select2-tag', true);\n\n        self._removeOldTags();\n        self.addOptions([$option]);\n      }\n\n      // Select the item, now that we know there is an option for it\n      select(item);\n    }\n\n    function select (data) {\n      self.trigger('select', {\n        data: data\n      });\n    }\n\n    params.term = params.term || '';\n\n    var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n    if (tokenData.term !== params.term) {\n      // Replace the search term if we have the search box\n      if (this.$search.length) {\n        this.$search.val(tokenData.term);\n        this.$search.trigger('focus');\n      }\n\n      params.term = tokenData.term;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n    var separators = options.get('tokenSeparators') || [];\n    var term = params.term;\n    var i = 0;\n\n    var createTag = this.createTag || function (params) {\n      return {\n        id: params.term,\n        text: params.term\n      };\n    };\n\n    while (i < term.length) {\n      var termChar = term[i];\n\n      if ($.inArray(termChar, separators) === -1) {\n        i++;\n\n        continue;\n      }\n\n      var part = term.substr(0, i);\n      var partParams = $.extend({}, params, {\n        term: part\n      });\n\n      var data = createTag(partParams);\n\n      if (data == null) {\n        i++;\n        continue;\n      }\n\n      callback(data);\n\n      // Reset the term to not include the tokenized portion\n      term = term.substr(i + 1) || '';\n      i = 0;\n    }\n\n    return {\n      term: term\n    };\n  };\n\n  return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n  function MinimumInputLength (decorated, $e, options) {\n    this.minimumInputLength = options.get('minimumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MinimumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (params.term.length < this.minimumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooShort',\n        args: {\n          minimum: this.minimumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n  function MaximumInputLength (decorated, $e, options) {\n    this.maximumInputLength = options.get('maximumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (this.maximumInputLength > 0 &&\n        params.term.length > this.maximumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooLong',\n        args: {\n          maximum: this.maximumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n  function MaximumSelectionLength (decorated, $e, options) {\n    this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumSelectionLength.prototype.bind =\n    function (decorated, container, $container) {\n      var self = this;\n\n      decorated.call(this, container, $container);\n\n      container.on('select', function () {\n        self._checkIfMaximumSelected();\n      });\n  };\n\n  MaximumSelectionLength.prototype.query =\n    function (decorated, params, callback) {\n      var self = this;\n\n      this._checkIfMaximumSelected(function () {\n        decorated.call(self, params, callback);\n      });\n  };\n\n  MaximumSelectionLength.prototype._checkIfMaximumSelected =\n    function (_, successCallback) {\n      var self = this;\n\n      this.current(function (currentData) {\n        var count = currentData != null ? currentData.length : 0;\n        if (self.maximumSelectionLength > 0 &&\n          count >= self.maximumSelectionLength) {\n          self.trigger('results:message', {\n            message: 'maximumSelected',\n            args: {\n              maximum: self.maximumSelectionLength\n            }\n          });\n          return;\n        }\n\n        if (successCallback) {\n          successCallback();\n        }\n      });\n  };\n\n  return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Dropdown ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    Dropdown.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Dropdown, Utils.Observable);\n\n  Dropdown.prototype.render = function () {\n    var $dropdown = $(\n      '<span class=\"select2-dropdown\">' +\n        '<span class=\"select2-results\"></span>' +\n      '</span>'\n    );\n\n    $dropdown.attr('dir', this.options.get('dir'));\n\n    this.$dropdown = $dropdown;\n\n    return $dropdown;\n  };\n\n  Dropdown.prototype.bind = function () {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.position = function ($dropdown, $container) {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.destroy = function () {\n    // Remove the dropdown from the DOM\n    this.$dropdown.remove();\n  };\n\n  return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function Search () { }\n\n  Search.prototype.render = function (decorated) {\n    var $rendered = decorated.call(this);\n\n    var $search = $(\n      '<span class=\"select2-search select2-search--dropdown\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n      '</span>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    $rendered.prepend($search);\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    decorated.call(this, container, $container);\n\n    this.$search.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n    });\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$search.on('input', function (evt) {\n      // Unbind the duplicated `keyup` event\n      $(this).off('keyup');\n    });\n\n    this.$search.on('keyup input', function (evt) {\n      self.handleSearch(evt);\n    });\n\n    container.on('open', function () {\n      self.$search.attr('tabindex', 0);\n      self.$search.attr('aria-controls', resultsId);\n\n      self.$search.trigger('focus');\n\n      window.setTimeout(function () {\n        self.$search.trigger('focus');\n      }, 0);\n    });\n\n    container.on('close', function () {\n      self.$search.attr('tabindex', -1);\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n\n      self.$search.val('');\n      self.$search.trigger('blur');\n    });\n\n    container.on('focus', function () {\n      if (!container.isOpen()) {\n        self.$search.trigger('focus');\n      }\n    });\n\n    container.on('results:all', function (params) {\n      if (params.query.term == null || params.query.term === '') {\n        var showSearch = self.showSearch(params);\n\n        if (showSearch) {\n          self.$searchContainer.removeClass('select2-search--hide');\n        } else {\n          self.$searchContainer.addClass('select2-search--hide');\n        }\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n  };\n\n  Search.prototype.handleSearch = function (evt) {\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.showSearch = function (_, params) {\n    return true;\n  };\n\n  return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n  function HidePlaceholder (decorated, $element, options, dataAdapter) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  HidePlaceholder.prototype.append = function (decorated, data) {\n    data.results = this.removePlaceholder(data.results);\n\n    decorated.call(this, data);\n  };\n\n  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n    var modifiedData = data.slice(0);\n\n    for (var d = data.length - 1; d >= 0; d--) {\n      var item = data[d];\n\n      if (this.placeholder.id === item.id) {\n        modifiedData.splice(d, 1);\n      }\n    }\n\n    return modifiedData;\n  };\n\n  return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n  'jquery'\n], function ($) {\n  function InfiniteScroll (decorated, $element, options, dataAdapter) {\n    this.lastParams = {};\n\n    decorated.call(this, $element, options, dataAdapter);\n\n    this.$loadingMore = this.createLoadingMore();\n    this.loading = false;\n  }\n\n  InfiniteScroll.prototype.append = function (decorated, data) {\n    this.$loadingMore.remove();\n    this.loading = false;\n\n    decorated.call(this, data);\n\n    if (this.showLoadingMore(data)) {\n      this.$results.append(this.$loadingMore);\n      this.loadMoreIfNeeded();\n    }\n  };\n\n  InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('query', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    container.on('query:append', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\n  };\n\n  InfiniteScroll.prototype.loadMoreIfNeeded = function () {\n    var isLoadMoreVisible = $.contains(\n      document.documentElement,\n      this.$loadingMore[0]\n    );\n\n    if (this.loading || !isLoadMoreVisible) {\n      return;\n    }\n\n    var currentOffset = this.$results.offset().top +\n      this.$results.outerHeight(false);\n    var loadingMoreOffset = this.$loadingMore.offset().top +\n      this.$loadingMore.outerHeight(false);\n\n    if (currentOffset + 50 >= loadingMoreOffset) {\n      this.loadMore();\n    }\n  };\n\n  InfiniteScroll.prototype.loadMore = function () {\n    this.loading = true;\n\n    var params = $.extend({}, {page: 1}, this.lastParams);\n\n    params.page++;\n\n    this.trigger('query:append', params);\n  };\n\n  InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n    return data.pagination && data.pagination.more;\n  };\n\n  InfiniteScroll.prototype.createLoadingMore = function () {\n    var $option = $(\n      '<li ' +\n      'class=\"select2-results__option select2-results__option--load-more\"' +\n      'role=\"option\" aria-disabled=\"true\"></li>'\n    );\n\n    var message = this.options.get('translations').get('loadingMore');\n\n    $option.html(message(this.lastParams));\n\n    return $option;\n  };\n\n  return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function AttachBody (decorated, $element, options) {\n    this.$dropdownParent = $(options.get('dropdownParent') || document.body);\n\n    decorated.call(this, $element, options);\n  }\n\n  AttachBody.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self._showDropdown();\n      self._attachPositioningHandler(container);\n\n      // Must bind after the results handlers to ensure correct sizing\n      self._bindContainerResultHandlers(container);\n    });\n\n    container.on('close', function () {\n      self._hideDropdown();\n      self._detachPositioningHandler(container);\n    });\n\n    this.$dropdownContainer.on('mousedown', function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  AttachBody.prototype.destroy = function (decorated) {\n    decorated.call(this);\n\n    this.$dropdownContainer.remove();\n  };\n\n  AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n    // Clone all of the container classes\n    $dropdown.attr('class', $container.attr('class'));\n\n    $dropdown.removeClass('select2');\n    $dropdown.addClass('select2-container--open');\n\n    $dropdown.css({\n      position: 'absolute',\n      top: -999999\n    });\n\n    this.$container = $container;\n  };\n\n  AttachBody.prototype.render = function (decorated) {\n    var $container = $('<span></span>');\n\n    var $dropdown = decorated.call(this);\n    $container.append($dropdown);\n\n    this.$dropdownContainer = $container;\n\n    return $container;\n  };\n\n  AttachBody.prototype._hideDropdown = function (decorated) {\n    this.$dropdownContainer.detach();\n  };\n\n  AttachBody.prototype._bindContainerResultHandlers =\n      function (decorated, container) {\n\n    // These should only be bound once\n    if (this._containerResultsHandlersBound) {\n      return;\n    }\n\n    var self = this;\n\n    container.on('results:all', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:append', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:message', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('select', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('unselect', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    this._containerResultsHandlersBound = true;\n  };\n\n  AttachBody.prototype._attachPositioningHandler =\n      function (decorated, container) {\n    var self = this;\n\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.each(function () {\n      Utils.StoreData(this, 'select2-scroll-position', {\n        x: $(this).scrollLeft(),\n        y: $(this).scrollTop()\n      });\n    });\n\n    $watchers.on(scrollEvent, function (ev) {\n      var position = Utils.GetData(this, 'select2-scroll-position');\n      $(this).scrollTop(position.y);\n    });\n\n    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n      function (e) {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n  };\n\n  AttachBody.prototype._detachPositioningHandler =\n      function (decorated, container) {\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.off(scrollEvent);\n\n    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n  };\n\n  AttachBody.prototype._positionDropdown = function () {\n    var $window = $(window);\n\n    var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n    var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n\n    var newDirection = null;\n\n    var offset = this.$container.offset();\n\n    offset.bottom = offset.top + this.$container.outerHeight(false);\n\n    var container = {\n      height: this.$container.outerHeight(false)\n    };\n\n    container.top = offset.top;\n    container.bottom = offset.top + container.height;\n\n    var dropdown = {\n      height: this.$dropdown.outerHeight(false)\n    };\n\n    var viewport = {\n      top: $window.scrollTop(),\n      bottom: $window.scrollTop() + $window.height()\n    };\n\n    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n    var css = {\n      left: offset.left,\n      top: container.bottom\n    };\n\n    // Determine what the parent element is to use for calculating the offset\n    var $offsetParent = this.$dropdownParent;\n\n    // For statically positioned elements, we need to get the element\n    // that is determining the offset\n    if ($offsetParent.css('position') === 'static') {\n      $offsetParent = $offsetParent.offsetParent();\n    }\n\n    var parentOffset = {\n      top: 0,\n      left: 0\n    };\n\n    if (\n      $.contains(document.body, $offsetParent[0]) ||\n      $offsetParent[0].isConnected\n      ) {\n      parentOffset = $offsetParent.offset();\n    }\n\n    css.top -= parentOffset.top;\n    css.left -= parentOffset.left;\n\n    if (!isCurrentlyAbove && !isCurrentlyBelow) {\n      newDirection = 'below';\n    }\n\n    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n      newDirection = 'above';\n    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n      newDirection = 'below';\n    }\n\n    if (newDirection == 'above' ||\n      (isCurrentlyAbove && newDirection !== 'below')) {\n      css.top = container.top - parentOffset.top - dropdown.height;\n    }\n\n    if (newDirection != null) {\n      this.$dropdown\n        .removeClass('select2-dropdown--below select2-dropdown--above')\n        .addClass('select2-dropdown--' + newDirection);\n      this.$container\n        .removeClass('select2-container--below select2-container--above')\n        .addClass('select2-container--' + newDirection);\n    }\n\n    this.$dropdownContainer.css(css);\n  };\n\n  AttachBody.prototype._resizeDropdown = function () {\n    var css = {\n      width: this.$container.outerWidth(false) + 'px'\n    };\n\n    if (this.options.get('dropdownAutoWidth')) {\n      css.minWidth = css.width;\n      css.position = 'relative';\n      css.width = 'auto';\n    }\n\n    this.$dropdown.css(css);\n  };\n\n  AttachBody.prototype._showDropdown = function (decorated) {\n    this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n    this._positionDropdown();\n    this._resizeDropdown();\n  };\n\n  return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n  function countResults (data) {\n    var count = 0;\n\n    for (var d = 0; d < data.length; d++) {\n      var item = data[d];\n\n      if (item.children) {\n        count += countResults(item.children);\n      } else {\n        count++;\n      }\n    }\n\n    return count;\n  }\n\n  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n    this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n    if (this.minimumResultsForSearch < 0) {\n      this.minimumResultsForSearch = Infinity;\n    }\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n    if (countResults(params.data.results) < this.minimumResultsForSearch) {\n      return false;\n    }\n\n    return decorated.call(this, params);\n  };\n\n  return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n  '../utils'\n], function (Utils) {\n  function SelectOnClose () { }\n\n  SelectOnClose.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('close', function (params) {\n      self._handleSelectOnClose(params);\n    });\n  };\n\n  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n    if (params && params.originalSelect2Event != null) {\n      var event = params.originalSelect2Event;\n\n      // Don't select an item if the close event was triggered from a select or\n      // unselect event\n      if (event._type === 'select' || event._type === 'unselect') {\n        return;\n      }\n    }\n\n    var $highlightedResults = this.getHighlightedResults();\n\n    // Only select highlighted results\n    if ($highlightedResults.length < 1) {\n      return;\n    }\n\n    var data = Utils.GetData($highlightedResults[0], 'data');\n\n    // Don't re-select already selected resulte\n    if (\n      (data.element != null && data.element.selected) ||\n      (data.element == null && data.selected)\n    ) {\n      return;\n    }\n\n    this.trigger('select', {\n        data: data\n    });\n  };\n\n  return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n  function CloseOnSelect () { }\n\n  CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('select', function (evt) {\n      self._selectTriggered(evt);\n    });\n\n    container.on('unselect', function (evt) {\n      self._selectTriggered(evt);\n    });\n  };\n\n  CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n    var originalEvent = evt.originalEvent;\n\n    // Don't close if the control key is being held\n    if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\n      return;\n    }\n\n    this.trigger('close', {\n      originalEvent: originalEvent,\n      originalSelect2Event: evt\n    });\n  };\n\n  return CloseOnSelect;\n});\n\nS2.define('select2/i18n/en',[],function () {\n  // English\n  return {\n    errorLoading: function () {\n      return 'The results could not be loaded.';\n    },\n    inputTooLong: function (args) {\n      var overChars = args.input.length - args.maximum;\n\n      var message = 'Please delete ' + overChars + ' character';\n\n      if (overChars != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    inputTooShort: function (args) {\n      var remainingChars = args.minimum - args.input.length;\n\n      var message = 'Please enter ' + remainingChars + ' or more characters';\n\n      return message;\n    },\n    loadingMore: function () {\n      return 'Loading more results…';\n    },\n    maximumSelected: function (args) {\n      var message = 'You can only select ' + args.maximum + ' item';\n\n      if (args.maximum != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    noResults: function () {\n      return 'No results found';\n    },\n    searching: function () {\n      return 'Searching…';\n    },\n    removeAllItems: function () {\n      return 'Remove all items';\n    }\n  };\n});\n\nS2.define('select2/defaults',[\n  'jquery',\n  'require',\n\n  './results',\n\n  './selection/single',\n  './selection/multiple',\n  './selection/placeholder',\n  './selection/allowClear',\n  './selection/search',\n  './selection/eventRelay',\n\n  './utils',\n  './translation',\n  './diacritics',\n\n  './data/select',\n  './data/array',\n  './data/ajax',\n  './data/tags',\n  './data/tokenizer',\n  './data/minimumInputLength',\n  './data/maximumInputLength',\n  './data/maximumSelectionLength',\n\n  './dropdown',\n  './dropdown/search',\n  './dropdown/hidePlaceholder',\n  './dropdown/infiniteScroll',\n  './dropdown/attachBody',\n  './dropdown/minimumResultsForSearch',\n  './dropdown/selectOnClose',\n  './dropdown/closeOnSelect',\n\n  './i18n/en'\n], function ($, require,\n\n             ResultsList,\n\n             SingleSelection, MultipleSelection, Placeholder, AllowClear,\n             SelectionSearch, EventRelay,\n\n             Utils, Translation, DIACRITICS,\n\n             SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n\n             EnglishTranslation) {\n  function Defaults () {\n    this.reset();\n  }\n\n  Defaults.prototype.apply = function (options) {\n    options = $.extend(true, {}, this.defaults, options);\n\n    if (options.dataAdapter == null) {\n      if (options.ajax != null) {\n        options.dataAdapter = AjaxData;\n      } else if (options.data != null) {\n        options.dataAdapter = ArrayData;\n      } else {\n        options.dataAdapter = SelectData;\n      }\n\n      if (options.minimumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MinimumInputLength\n        );\n      }\n\n      if (options.maximumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumInputLength\n        );\n      }\n\n      if (options.maximumSelectionLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumSelectionLength\n        );\n      }\n\n      if (options.tags) {\n        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n      }\n\n      if (options.tokenSeparators != null || options.tokenizer != null) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Tokenizer\n        );\n      }\n\n      if (options.query != null) {\n        var Query = require(options.amdBase + 'compat/query');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Query\n        );\n      }\n\n      if (options.initSelection != null) {\n        var InitSelection = require(options.amdBase + 'compat/initSelection');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          InitSelection\n        );\n      }\n    }\n\n    if (options.resultsAdapter == null) {\n      options.resultsAdapter = ResultsList;\n\n      if (options.ajax != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          InfiniteScroll\n        );\n      }\n\n      if (options.placeholder != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          HidePlaceholder\n        );\n      }\n\n      if (options.selectOnClose) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          SelectOnClose\n        );\n      }\n    }\n\n    if (options.dropdownAdapter == null) {\n      if (options.multiple) {\n        options.dropdownAdapter = Dropdown;\n      } else {\n        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n        options.dropdownAdapter = SearchableDropdown;\n      }\n\n      if (options.minimumResultsForSearch !== 0) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          MinimumResultsForSearch\n        );\n      }\n\n      if (options.closeOnSelect) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          CloseOnSelect\n        );\n      }\n\n      if (\n        options.dropdownCssClass != null ||\n        options.dropdownCss != null ||\n        options.adaptDropdownCssClass != null\n      ) {\n        var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');\n\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          DropdownCSS\n        );\n      }\n\n      options.dropdownAdapter = Utils.Decorate(\n        options.dropdownAdapter,\n        AttachBody\n      );\n    }\n\n    if (options.selectionAdapter == null) {\n      if (options.multiple) {\n        options.selectionAdapter = MultipleSelection;\n      } else {\n        options.selectionAdapter = SingleSelection;\n      }\n\n      // Add the placeholder mixin if a placeholder was specified\n      if (options.placeholder != null) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          Placeholder\n        );\n      }\n\n      if (options.allowClear) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          AllowClear\n        );\n      }\n\n      if (options.multiple) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          SelectionSearch\n        );\n      }\n\n      if (\n        options.containerCssClass != null ||\n        options.containerCss != null ||\n        options.adaptContainerCssClass != null\n      ) {\n        var ContainerCSS = require(options.amdBase + 'compat/containerCss');\n\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          ContainerCSS\n        );\n      }\n\n      options.selectionAdapter = Utils.Decorate(\n        options.selectionAdapter,\n        EventRelay\n      );\n    }\n\n    // If the defaults were not previously applied from an element, it is\n    // possible for the language option to have not been resolved\n    options.language = this._resolveLanguage(options.language);\n\n    // Always fall back to English since it will always be complete\n    options.language.push('en');\n\n    var uniqueLanguages = [];\n\n    for (var l = 0; l < options.language.length; l++) {\n      var language = options.language[l];\n\n      if (uniqueLanguages.indexOf(language) === -1) {\n        uniqueLanguages.push(language);\n      }\n    }\n\n    options.language = uniqueLanguages;\n\n    options.translations = this._processTranslations(\n      options.language,\n      options.debug\n    );\n\n    return options;\n  };\n\n  Defaults.prototype.reset = function () {\n    function stripDiacritics (text) {\n      // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n      function match(a) {\n        return DIACRITICS[a] || a;\n      }\n\n      return text.replace(/[^\\u0000-\\u007E]/g, match);\n    }\n\n    function matcher (params, data) {\n      // Always return the object if there is nothing to compare\n      if ($.trim(params.term) === '') {\n        return data;\n      }\n\n      // Do a recursive check for options with children\n      if (data.children && data.children.length > 0) {\n        // Clone the data object if there are children\n        // This is required as we modify the object to remove any non-matches\n        var match = $.extend(true, {}, data);\n\n        // Check each child of the option\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          var matches = matcher(params, child);\n\n          // If there wasn't a match, remove the object in the array\n          if (matches == null) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        // If any children matched, return the new object\n        if (match.children.length > 0) {\n          return match;\n        }\n\n        // If there were no matching children, check just the plain object\n        return matcher(params, match);\n      }\n\n      var original = stripDiacritics(data.text).toUpperCase();\n      var term = stripDiacritics(params.term).toUpperCase();\n\n      // Check if the text contains the term\n      if (original.indexOf(term) > -1) {\n        return data;\n      }\n\n      // If it doesn't contain the term, don't return anything\n      return null;\n    }\n\n    this.defaults = {\n      amdBase: './',\n      amdLanguageBase: './i18n/',\n      closeOnSelect: true,\n      debug: false,\n      dropdownAutoWidth: false,\n      escapeMarkup: Utils.escapeMarkup,\n      language: {},\n      matcher: matcher,\n      minimumInputLength: 0,\n      maximumInputLength: 0,\n      maximumSelectionLength: 0,\n      minimumResultsForSearch: 0,\n      selectOnClose: false,\n      scrollAfterSelect: false,\n      sorter: function (data) {\n        return data;\n      },\n      templateResult: function (result) {\n        return result.text;\n      },\n      templateSelection: function (selection) {\n        return selection.text;\n      },\n      theme: 'default',\n      width: 'resolve'\n    };\n  };\n\n  Defaults.prototype.applyFromElement = function (options, $element) {\n    var optionLanguage = options.language;\n    var defaultLanguage = this.defaults.language;\n    var elementLanguage = $element.prop('lang');\n    var parentLanguage = $element.closest('[lang]').prop('lang');\n\n    var languages = Array.prototype.concat.call(\n      this._resolveLanguage(elementLanguage),\n      this._resolveLanguage(optionLanguage),\n      this._resolveLanguage(defaultLanguage),\n      this._resolveLanguage(parentLanguage)\n    );\n\n    options.language = languages;\n\n    return options;\n  };\n\n  Defaults.prototype._resolveLanguage = function (language) {\n    if (!language) {\n      return [];\n    }\n\n    if ($.isEmptyObject(language)) {\n      return [];\n    }\n\n    if ($.isPlainObject(language)) {\n      return [language];\n    }\n\n    var languages;\n\n    if (!$.isArray(language)) {\n      languages = [language];\n    } else {\n      languages = language;\n    }\n\n    var resolvedLanguages = [];\n\n    for (var l = 0; l < languages.length; l++) {\n      resolvedLanguages.push(languages[l]);\n\n      if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {\n        // Extract the region information if it is included\n        var languageParts = languages[l].split('-');\n        var baseLanguage = languageParts[0];\n\n        resolvedLanguages.push(baseLanguage);\n      }\n    }\n\n    return resolvedLanguages;\n  };\n\n  Defaults.prototype._processTranslations = function (languages, debug) {\n    var translations = new Translation();\n\n    for (var l = 0; l < languages.length; l++) {\n      var languageData = new Translation();\n\n      var language = languages[l];\n\n      if (typeof language === 'string') {\n        try {\n          // Try to load it with the original name\n          languageData = Translation.loadPath(language);\n        } catch (e) {\n          try {\n            // If we couldn't load it, check if it wasn't the full path\n            language = this.defaults.amdLanguageBase + language;\n            languageData = Translation.loadPath(language);\n          } catch (ex) {\n            // The translation could not be loaded at all. Sometimes this is\n            // because of a configuration problem, other times this can be\n            // because of how Select2 helps load all possible translation files\n            if (debug && window.console && console.warn) {\n              console.warn(\n                'Select2: The language file for \"' + language + '\" could ' +\n                'not be automatically loaded. A fallback will be used instead.'\n              );\n            }\n          }\n        }\n      } else if ($.isPlainObject(language)) {\n        languageData = new Translation(language);\n      } else {\n        languageData = language;\n      }\n\n      translations.extend(languageData);\n    }\n\n    return translations;\n  };\n\n  Defaults.prototype.set = function (key, value) {\n    var camelKey = $.camelCase(key);\n\n    var data = {};\n    data[camelKey] = value;\n\n    var convertedData = Utils._convertData(data);\n\n    $.extend(true, this.defaults, convertedData);\n  };\n\n  var defaults = new Defaults();\n\n  return defaults;\n});\n\nS2.define('select2/options',[\n  'require',\n  'jquery',\n  './defaults',\n  './utils'\n], function (require, $, Defaults, Utils) {\n  function Options (options, $element) {\n    this.options = options;\n\n    if ($element != null) {\n      this.fromElement($element);\n    }\n\n    if ($element != null) {\n      this.options = Defaults.applyFromElement(this.options, $element);\n    }\n\n    this.options = Defaults.apply(this.options);\n\n    if ($element && $element.is('input')) {\n      var InputCompat = require(this.get('amdBase') + 'compat/inputData');\n\n      this.options.dataAdapter = Utils.Decorate(\n        this.options.dataAdapter,\n        InputCompat\n      );\n    }\n  }\n\n  Options.prototype.fromElement = function ($e) {\n    var excludedData = ['select2'];\n\n    if (this.options.multiple == null) {\n      this.options.multiple = $e.prop('multiple');\n    }\n\n    if (this.options.disabled == null) {\n      this.options.disabled = $e.prop('disabled');\n    }\n\n    if (this.options.dir == null) {\n      if ($e.prop('dir')) {\n        this.options.dir = $e.prop('dir');\n      } else if ($e.closest('[dir]').prop('dir')) {\n        this.options.dir = $e.closest('[dir]').prop('dir');\n      } else {\n        this.options.dir = 'ltr';\n      }\n    }\n\n    $e.prop('disabled', this.options.disabled);\n    $e.prop('multiple', this.options.multiple);\n\n    if (Utils.GetData($e[0], 'select2Tags')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-select2-tags` attribute has been changed to ' +\n          'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n          'removed in future versions of Select2.'\n        );\n      }\n\n      Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));\n      Utils.StoreData($e[0], 'tags', true);\n    }\n\n    if (Utils.GetData($e[0], 'ajaxUrl')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-ajax-url` attribute has been changed to ' +\n          '`data-ajax--url` and support for the old attribute will be removed' +\n          ' in future versions of Select2.'\n        );\n      }\n\n      $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));\n      Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));\n    }\n\n    var dataset = {};\n\n    function upperCaseLetter(_, letter) {\n      return letter.toUpperCase();\n    }\n\n    // Pre-load all of the attributes which are prefixed with `data-`\n    for (var attr = 0; attr < $e[0].attributes.length; attr++) {\n      var attributeName = $e[0].attributes[attr].name;\n      var prefix = 'data-';\n\n      if (attributeName.substr(0, prefix.length) == prefix) {\n        // Get the contents of the attribute after `data-`\n        var dataName = attributeName.substring(prefix.length);\n\n        // Get the data contents from the consistent source\n        // This is more than likely the jQuery data helper\n        var dataValue = Utils.GetData($e[0], dataName);\n\n        // camelCase the attribute name to match the spec\n        var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);\n\n        // Store the data attribute contents into the dataset since\n        dataset[camelDataName] = dataValue;\n      }\n    }\n\n    // Prefer the element's `dataset` attribute if it exists\n    // jQuery 1.x does not correctly handle data attributes with multiple dashes\n    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n      dataset = $.extend(true, {}, $e[0].dataset, dataset);\n    }\n\n    // Prefer our internal data cache if it exists\n    var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\n\n    data = Utils._convertData(data);\n\n    for (var key in data) {\n      if ($.inArray(key, excludedData) > -1) {\n        continue;\n      }\n\n      if ($.isPlainObject(this.options[key])) {\n        $.extend(this.options[key], data[key]);\n      } else {\n        this.options[key] = data[key];\n      }\n    }\n\n    return this;\n  };\n\n  Options.prototype.get = function (key) {\n    return this.options[key];\n  };\n\n  Options.prototype.set = function (key, val) {\n    this.options[key] = val;\n  };\n\n  return Options;\n});\n\nS2.define('select2/core',[\n  'jquery',\n  './options',\n  './utils',\n  './keys'\n], function ($, Options, Utils, KEYS) {\n  var Select2 = function ($element, options) {\n    if (Utils.GetData($element[0], 'select2') != null) {\n      Utils.GetData($element[0], 'select2').destroy();\n    }\n\n    this.$element = $element;\n\n    this.id = this._generateId($element);\n\n    options = options || {};\n\n    this.options = new Options(options, $element);\n\n    Select2.__super__.constructor.call(this);\n\n    // Set up the tabindex\n\n    var tabindex = $element.attr('tabindex') || 0;\n    Utils.StoreData($element[0], 'old-tabindex', tabindex);\n    $element.attr('tabindex', '-1');\n\n    // Set up containers and adapters\n\n    var DataAdapter = this.options.get('dataAdapter');\n    this.dataAdapter = new DataAdapter($element, this.options);\n\n    var $container = this.render();\n\n    this._placeContainer($container);\n\n    var SelectionAdapter = this.options.get('selectionAdapter');\n    this.selection = new SelectionAdapter($element, this.options);\n    this.$selection = this.selection.render();\n\n    this.selection.position(this.$selection, $container);\n\n    var DropdownAdapter = this.options.get('dropdownAdapter');\n    this.dropdown = new DropdownAdapter($element, this.options);\n    this.$dropdown = this.dropdown.render();\n\n    this.dropdown.position(this.$dropdown, $container);\n\n    var ResultsAdapter = this.options.get('resultsAdapter');\n    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n    this.$results = this.results.render();\n\n    this.results.position(this.$results, this.$dropdown);\n\n    // Bind events\n\n    var self = this;\n\n    // Bind the container to all of the adapters\n    this._bindAdapters();\n\n    // Register any DOM event handlers\n    this._registerDomEvents();\n\n    // Register any internal event handlers\n    this._registerDataEvents();\n    this._registerSelectionEvents();\n    this._registerDropdownEvents();\n    this._registerResultsEvents();\n    this._registerEvents();\n\n    // Set the initial state\n    this.dataAdapter.current(function (initialData) {\n      self.trigger('selection:update', {\n        data: initialData\n      });\n    });\n\n    // Hide the original select\n    $element.addClass('select2-hidden-accessible');\n    $element.attr('aria-hidden', 'true');\n\n    // Synchronize any monitored attributes\n    this._syncAttributes();\n\n    Utils.StoreData($element[0], 'select2', this);\n\n    // Ensure backwards compatibility with $element.data('select2').\n    $element.data('select2', this);\n  };\n\n  Utils.Extend(Select2, Utils.Observable);\n\n  Select2.prototype._generateId = function ($element) {\n    var id = '';\n\n    if ($element.attr('id') != null) {\n      id = $element.attr('id');\n    } else if ($element.attr('name') != null) {\n      id = $element.attr('name') + '-' + Utils.generateChars(2);\n    } else {\n      id = Utils.generateChars(4);\n    }\n\n    id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n    id = 'select2-' + id;\n\n    return id;\n  };\n\n  Select2.prototype._placeContainer = function ($container) {\n    $container.insertAfter(this.$element);\n\n    var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n    if (width != null) {\n      $container.css('width', width);\n    }\n  };\n\n  Select2.prototype._resolveWidth = function ($element, method) {\n    var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n    if (method == 'resolve') {\n      var styleWidth = this._resolveWidth($element, 'style');\n\n      if (styleWidth != null) {\n        return styleWidth;\n      }\n\n      return this._resolveWidth($element, 'element');\n    }\n\n    if (method == 'element') {\n      var elementWidth = $element.outerWidth(false);\n\n      if (elementWidth <= 0) {\n        return 'auto';\n      }\n\n      return elementWidth + 'px';\n    }\n\n    if (method == 'style') {\n      var style = $element.attr('style');\n\n      if (typeof(style) !== 'string') {\n        return null;\n      }\n\n      var attrs = style.split(';');\n\n      for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n        var attr = attrs[i].replace(/\\s/g, '');\n        var matches = attr.match(WIDTH);\n\n        if (matches !== null && matches.length >= 1) {\n          return matches[1];\n        }\n      }\n\n      return null;\n    }\n\n    if (method == 'computedstyle') {\n      var computedStyle = window.getComputedStyle($element[0]);\n\n      return computedStyle.width;\n    }\n\n    return method;\n  };\n\n  Select2.prototype._bindAdapters = function () {\n    this.dataAdapter.bind(this, this.$container);\n    this.selection.bind(this, this.$container);\n\n    this.dropdown.bind(this, this.$container);\n    this.results.bind(this, this.$container);\n  };\n\n  Select2.prototype._registerDomEvents = function () {\n    var self = this;\n\n    this.$element.on('change.select2', function () {\n      self.dataAdapter.current(function (data) {\n        self.trigger('selection:update', {\n          data: data\n        });\n      });\n    });\n\n    this.$element.on('focus.select2', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this._syncA = Utils.bind(this._syncAttributes, this);\n    this._syncS = Utils.bind(this._syncSubtree, this);\n\n    if (this.$element[0].attachEvent) {\n      this.$element[0].attachEvent('onpropertychange', this._syncA);\n    }\n\n    var observer = window.MutationObserver ||\n      window.WebKitMutationObserver ||\n      window.MozMutationObserver\n    ;\n\n    if (observer != null) {\n      this._observer = new observer(function (mutations) {\n        self._syncA();\n        self._syncS(null, mutations);\n      });\n      this._observer.observe(this.$element[0], {\n        attributes: true,\n        childList: true,\n        subtree: false\n      });\n    } else if (this.$element[0].addEventListener) {\n      this.$element[0].addEventListener(\n        'DOMAttrModified',\n        self._syncA,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeInserted',\n        self._syncS,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeRemoved',\n        self._syncS,\n        false\n      );\n    }\n  };\n\n  Select2.prototype._registerDataEvents = function () {\n    var self = this;\n\n    this.dataAdapter.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerSelectionEvents = function () {\n    var self = this;\n    var nonRelayEvents = ['toggle', 'focus'];\n\n    this.selection.on('toggle', function () {\n      self.toggleDropdown();\n    });\n\n    this.selection.on('focus', function (params) {\n      self.focus(params);\n    });\n\n    this.selection.on('*', function (name, params) {\n      if ($.inArray(name, nonRelayEvents) !== -1) {\n        return;\n      }\n\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerDropdownEvents = function () {\n    var self = this;\n\n    this.dropdown.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerResultsEvents = function () {\n    var self = this;\n\n    this.results.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerEvents = function () {\n    var self = this;\n\n    this.on('open', function () {\n      self.$container.addClass('select2-container--open');\n    });\n\n    this.on('close', function () {\n      self.$container.removeClass('select2-container--open');\n    });\n\n    this.on('enable', function () {\n      self.$container.removeClass('select2-container--disabled');\n    });\n\n    this.on('disable', function () {\n      self.$container.addClass('select2-container--disabled');\n    });\n\n    this.on('blur', function () {\n      self.$container.removeClass('select2-container--focus');\n    });\n\n    this.on('query', function (params) {\n      if (!self.isOpen()) {\n        self.trigger('open', {});\n      }\n\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:all', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('query:append', function (params) {\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:append', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('keypress', function (evt) {\n      var key = evt.which;\n\n      if (self.isOpen()) {\n        if (key === KEYS.ESC || key === KEYS.TAB ||\n            (key === KEYS.UP && evt.altKey)) {\n          self.close(evt);\n\n          evt.preventDefault();\n        } else if (key === KEYS.ENTER) {\n          self.trigger('results:select', {});\n\n          evt.preventDefault();\n        } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n          self.trigger('results:toggle', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.UP) {\n          self.trigger('results:previous', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.DOWN) {\n          self.trigger('results:next', {});\n\n          evt.preventDefault();\n        }\n      } else {\n        if (key === KEYS.ENTER || key === KEYS.SPACE ||\n            (key === KEYS.DOWN && evt.altKey)) {\n          self.open();\n\n          evt.preventDefault();\n        }\n      }\n    });\n  };\n\n  Select2.prototype._syncAttributes = function () {\n    this.options.set('disabled', this.$element.prop('disabled'));\n\n    if (this.isDisabled()) {\n      if (this.isOpen()) {\n        this.close();\n      }\n\n      this.trigger('disable', {});\n    } else {\n      this.trigger('enable', {});\n    }\n  };\n\n  Select2.prototype._isChangeMutation = function (evt, mutations) {\n    var changed = false;\n    var self = this;\n\n    // Ignore any mutation events raised for elements that aren't options or\n    // optgroups. This handles the case when the select element is destroyed\n    if (\n      evt && evt.target && (\n        evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'\n      )\n    ) {\n      return;\n    }\n\n    if (!mutations) {\n      // If mutation events aren't supported, then we can only assume that the\n      // change affected the selections\n      changed = true;\n    } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n      for (var n = 0; n < mutations.addedNodes.length; n++) {\n        var node = mutations.addedNodes[n];\n\n        if (node.selected) {\n          changed = true;\n        }\n      }\n    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n      changed = true;\n    } else if ($.isArray(mutations)) {\n      $.each(mutations, function(evt, mutation) {\n        if (self._isChangeMutation(evt, mutation)) {\n          // We've found a change mutation.\n          // Let's escape from the loop and continue\n          changed = true;\n          return false;\n        }\n      });\n    }\n    return changed;\n  };\n\n  Select2.prototype._syncSubtree = function (evt, mutations) {\n    var changed = this._isChangeMutation(evt, mutations);\n    var self = this;\n\n    // Only re-pull the data if we think there is a change\n    if (changed) {\n      this.dataAdapter.current(function (currentData) {\n        self.trigger('selection:update', {\n          data: currentData\n        });\n      });\n    }\n  };\n\n  /**\n   * Override the trigger method to automatically trigger pre-events when\n   * there are events that can be prevented.\n   */\n  Select2.prototype.trigger = function (name, args) {\n    var actualTrigger = Select2.__super__.trigger;\n    var preTriggerMap = {\n      'open': 'opening',\n      'close': 'closing',\n      'select': 'selecting',\n      'unselect': 'unselecting',\n      'clear': 'clearing'\n    };\n\n    if (args === undefined) {\n      args = {};\n    }\n\n    if (name in preTriggerMap) {\n      var preTriggerName = preTriggerMap[name];\n      var preTriggerArgs = {\n        prevented: false,\n        name: name,\n        args: args\n      };\n\n      actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n      if (preTriggerArgs.prevented) {\n        args.prevented = true;\n\n        return;\n      }\n    }\n\n    actualTrigger.call(this, name, args);\n  };\n\n  Select2.prototype.toggleDropdown = function () {\n    if (this.isDisabled()) {\n      return;\n    }\n\n    if (this.isOpen()) {\n      this.close();\n    } else {\n      this.open();\n    }\n  };\n\n  Select2.prototype.open = function () {\n    if (this.isOpen()) {\n      return;\n    }\n\n    if (this.isDisabled()) {\n      return;\n    }\n\n    this.trigger('query', {});\n  };\n\n  Select2.prototype.close = function (evt) {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    this.trigger('close', { originalEvent : evt });\n  };\n\n  /**\n   * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n   * object.\n   *\n   * @return {true} if the instance is not disabled.\n   * @return {false} if the instance is disabled.\n   */\n  Select2.prototype.isEnabled = function () {\n    return !this.isDisabled();\n  };\n\n  /**\n   * Helper method to abstract the \"disabled\" state of this object.\n   *\n   * @return {true} if the disabled option is true.\n   * @return {false} if the disabled option is false.\n   */\n  Select2.prototype.isDisabled = function () {\n    return this.options.get('disabled');\n  };\n\n  Select2.prototype.isOpen = function () {\n    return this.$container.hasClass('select2-container--open');\n  };\n\n  Select2.prototype.hasFocus = function () {\n    return this.$container.hasClass('select2-container--focus');\n  };\n\n  Select2.prototype.focus = function (data) {\n    // No need to re-trigger focus events if we are already focused\n    if (this.hasFocus()) {\n      return;\n    }\n\n    this.$container.addClass('select2-container--focus');\n    this.trigger('focus', {});\n  };\n\n  Select2.prototype.enable = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n        ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n        ' instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      args = [true];\n    }\n\n    var disabled = !args[0];\n\n    this.$element.prop('disabled', disabled);\n  };\n\n  Select2.prototype.data = function () {\n    if (this.options.get('debug') &&\n        arguments.length > 0 && window.console && console.warn) {\n      console.warn(\n        'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n        'should consider setting the value instead using `$element.val()`.'\n      );\n    }\n\n    var data = [];\n\n    this.dataAdapter.current(function (currentData) {\n      data = currentData;\n    });\n\n    return data;\n  };\n\n  Select2.prototype.val = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n        ' removed in later Select2 versions. Use $element.val() instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      return this.$element.val();\n    }\n\n    var newVal = args[0];\n\n    if ($.isArray(newVal)) {\n      newVal = $.map(newVal, function (obj) {\n        return obj.toString();\n      });\n    }\n\n    this.$element.val(newVal).trigger('input').trigger('change');\n  };\n\n  Select2.prototype.destroy = function () {\n    this.$container.remove();\n\n    if (this.$element[0].detachEvent) {\n      this.$element[0].detachEvent('onpropertychange', this._syncA);\n    }\n\n    if (this._observer != null) {\n      this._observer.disconnect();\n      this._observer = null;\n    } else if (this.$element[0].removeEventListener) {\n      this.$element[0]\n        .removeEventListener('DOMAttrModified', this._syncA, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeInserted', this._syncS, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeRemoved', this._syncS, false);\n    }\n\n    this._syncA = null;\n    this._syncS = null;\n\n    this.$element.off('.select2');\n    this.$element.attr('tabindex',\n    Utils.GetData(this.$element[0], 'old-tabindex'));\n\n    this.$element.removeClass('select2-hidden-accessible');\n    this.$element.attr('aria-hidden', 'false');\n    Utils.RemoveData(this.$element[0]);\n    this.$element.removeData('select2');\n\n    this.dataAdapter.destroy();\n    this.selection.destroy();\n    this.dropdown.destroy();\n    this.results.destroy();\n\n    this.dataAdapter = null;\n    this.selection = null;\n    this.dropdown = null;\n    this.results = null;\n  };\n\n  Select2.prototype.render = function () {\n    var $container = $(\n      '<span class=\"select2 select2-container\">' +\n        '<span class=\"selection\"></span>' +\n        '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n      '</span>'\n    );\n\n    $container.attr('dir', this.options.get('dir'));\n\n    this.$container = $container;\n\n    this.$container.addClass('select2-container--' + this.options.get('theme'));\n\n    Utils.StoreData($container[0], 'element', this.$element);\n\n    return $container;\n  };\n\n  return Select2;\n});\n\nS2.define('jquery-mousewheel',[\n  'jquery'\n], function ($) {\n  // Used to shim jQuery.mousewheel for non-full builds.\n  return $;\n});\n\nS2.define('jquery.select2',[\n  'jquery',\n  'jquery-mousewheel',\n\n  './select2/core',\n  './select2/defaults',\n  './select2/utils'\n], function ($, _, Select2, Defaults, Utils) {\n  if ($.fn.select2 == null) {\n    // All methods that should return the element\n    var thisMethods = ['open', 'close', 'destroy'];\n\n    $.fn.select2 = function (options) {\n      options = options || {};\n\n      if (typeof options === 'object') {\n        this.each(function () {\n          var instanceOptions = $.extend(true, {}, options);\n\n          var instance = new Select2($(this), instanceOptions);\n        });\n\n        return this;\n      } else if (typeof options === 'string') {\n        var ret;\n        var args = Array.prototype.slice.call(arguments, 1);\n\n        this.each(function () {\n          var instance = Utils.GetData(this, 'select2');\n\n          if (instance == null && window.console && console.error) {\n            console.error(\n              'The select2(\\'' + options + '\\') method was called on an ' +\n              'element that is not using Select2.'\n            );\n          }\n\n          ret = instance[options].apply(instance, args);\n        });\n\n        // Check if we should be returning `this`\n        if ($.inArray(options, thisMethods) > -1) {\n          return this;\n        }\n\n        return ret;\n      } else {\n        throw new Error('Invalid arguments for Select2: ' + options);\n      }\n    };\n  }\n\n  if ($.fn.select2.defaults == null) {\n    $.fn.select2.defaults = Defaults;\n  }\n\n  return Select2;\n});\n\n  // Return the AMD loader configuration so it can be used outside of this file\n  return {\n    define: S2.define,\n    require: S2.require\n  };\n}());\n\n  // Autoload the jQuery bindings\n  // We know that all of the modules exist above this, so we're safe\n  var select2 = S2.require('jquery.select2');\n\n  // Hold the AMD module references on the jQuery function that was just loaded\n  // This allows Select2 to use the internal loader outside of this file, such\n  // as in the language files.\n  jQuery.fn.select2.amd = S2;\n\n  // Return the Select2 instance for anyone who is importing it.\n  return select2;\n}));\n","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.swal=e():t.swal=e()}(this,function(){return function(t){function e(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return t[o].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,o){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:o})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=8)}([function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=\"swal-button\";e.CLASS_NAMES={MODAL:\"swal-modal\",OVERLAY:\"swal-overlay\",SHOW_MODAL:\"swal-overlay--show-modal\",MODAL_TITLE:\"swal-title\",MODAL_TEXT:\"swal-text\",ICON:\"swal-icon\",ICON_CUSTOM:\"swal-icon--custom\",CONTENT:\"swal-content\",FOOTER:\"swal-footer\",BUTTON_CONTAINER:\"swal-button-container\",BUTTON:o,CONFIRM_BUTTON:o+\"--confirm\",CANCEL_BUTTON:o+\"--cancel\",DANGER_BUTTON:o+\"--danger\",BUTTON_LOADING:o+\"--loading\",BUTTON_LOADER:o+\"__loader\"},e.default=e.CLASS_NAMES},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getNode=function(t){var e=\".\"+t;return document.querySelector(e)},e.stringToNode=function(t){var e=document.createElement(\"div\");return e.innerHTML=t.trim(),e.firstChild},e.insertAfter=function(t,e){var n=e.nextSibling;e.parentNode.insertBefore(t,n)},e.removeNode=function(t){t.parentElement.removeChild(t)},e.throwErr=function(t){throw t=t.replace(/ +(?= )/g,\"\"),\"SweetAlert: \"+(t=t.trim())},e.isPlainObject=function(t){if(\"[object Object]\"!==Object.prototype.toString.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype},e.ordinalSuffixOf=function(t){var e=t%10,n=t%100;return 1===e&&11!==n?t+\"st\":2===e&&12!==n?t+\"nd\":3===e&&13!==n?t+\"rd\":t+\"th\"}},function(t,e,n){\"use strict\";function o(t){for(var n in t)e.hasOwnProperty(n)||(e[n]=t[n])}Object.defineProperty(e,\"__esModule\",{value:!0}),o(n(25));var r=n(26);e.overlayMarkup=r.default,o(n(27)),o(n(28)),o(n(29));var i=n(0),a=i.default.MODAL_TITLE,s=i.default.MODAL_TEXT,c=i.default.ICON,l=i.default.FOOTER;e.iconMarkup='\\n  <div class=\"'+c+'\"></div>',e.titleMarkup='\\n  <div class=\"'+a+'\"></div>\\n',e.textMarkup='\\n  <div class=\"'+s+'\"></div>',e.footerMarkup='\\n  <div class=\"'+l+'\"></div>\\n'},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(1);e.CONFIRM_KEY=\"confirm\",e.CANCEL_KEY=\"cancel\";var r={visible:!0,text:null,value:null,className:\"\",closeModal:!0},i=Object.assign({},r,{visible:!1,text:\"Cancel\",value:null}),a=Object.assign({},r,{text:\"OK\",value:!0});e.defaultButtonList={cancel:i,confirm:a};var s=function(t){switch(t){case e.CONFIRM_KEY:return a;case e.CANCEL_KEY:return i;default:var n=t.charAt(0).toUpperCase()+t.slice(1);return Object.assign({},r,{text:n,value:t})}},c=function(t,e){var n=s(t);return!0===e?Object.assign({},n,{visible:!0}):\"string\"==typeof e?Object.assign({},n,{visible:!0,text:e}):o.isPlainObject(e)?Object.assign({visible:!0},n,e):Object.assign({},n,{visible:!1})},l=function(t){for(var e={},n=0,o=Object.keys(t);n<o.length;n++){var r=o[n],a=t[r],s=c(r,a);e[r]=s}return e.cancel||(e.cancel=i),e},u=function(t){var n={};switch(t.length){case 1:n[e.CANCEL_KEY]=Object.assign({},i,{visible:!1});break;case 2:n[e.CANCEL_KEY]=c(e.CANCEL_KEY,t[0]),n[e.CONFIRM_KEY]=c(e.CONFIRM_KEY,t[1]);break;default:o.throwErr(\"Invalid number of 'buttons' in array (\"+t.length+\").\\n      If you want more than 2 buttons, you need to use an object!\")}return n};e.getButtonListOpts=function(t){var n=e.defaultButtonList;return\"string\"==typeof t?n[e.CONFIRM_KEY]=c(e.CONFIRM_KEY,t):Array.isArray(t)?n=u(t):o.isPlainObject(t)?n=l(t):!0===t?n=u([!0,!0]):!1===t?n=u([!1,!1]):void 0===t&&(n=e.defaultButtonList),n}},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(1),r=n(2),i=n(0),a=i.default.MODAL,s=i.default.OVERLAY,c=n(30),l=n(31),u=n(32),f=n(33);e.injectElIntoModal=function(t){var e=o.getNode(a),n=o.stringToNode(t);return e.appendChild(n),n};var d=function(t){t.className=a,t.textContent=\"\"},p=function(t,e){d(t);var n=e.className;n&&t.classList.add(n)};e.initModalContent=function(t){var e=o.getNode(a);p(e,t),c.default(t.icon),l.initTitle(t.title),l.initText(t.text),f.default(t.content),u.default(t.buttons,t.dangerMode)};var m=function(){var t=o.getNode(s),e=o.stringToNode(r.modalMarkup);t.appendChild(e)};e.default=m},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(3),r={isOpen:!1,promise:null,actions:{},timer:null},i=Object.assign({},r);e.resetState=function(){i=Object.assign({},r)},e.setActionValue=function(t){if(\"string\"==typeof t)return a(o.CONFIRM_KEY,t);for(var e in t)a(e,t[e])};var a=function(t,e){i.actions[t]||(i.actions[t]={}),Object.assign(i.actions[t],{value:e})};e.setActionOptionsFor=function(t,e){var n=(void 0===e?{}:e).closeModal,o=void 0===n||n;Object.assign(i.actions[t],{closeModal:o})},e.default=i},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(1),r=n(3),i=n(0),a=i.default.OVERLAY,s=i.default.SHOW_MODAL,c=i.default.BUTTON,l=i.default.BUTTON_LOADING,u=n(5);e.openModal=function(){o.getNode(a).classList.add(s),u.default.isOpen=!0};var f=function(){o.getNode(a).classList.remove(s),u.default.isOpen=!1};e.onAction=function(t){void 0===t&&(t=r.CANCEL_KEY);var e=u.default.actions[t],n=e.value;if(!1===e.closeModal){var i=c+\"--\"+t;o.getNode(i).classList.add(l)}else f();u.default.promise.resolve(n)},e.getState=function(){var t=Object.assign({},u.default);return delete t.promise,delete t.timer,t},e.stopLoading=function(){for(var t=document.querySelectorAll(\".\"+c),e=0;e<t.length;e++){t[e].classList.remove(l)}}},function(t,e){var n;n=function(){return this}();try{n=n||Function(\"return this\")()||(0,eval)(\"this\")}catch(t){\"object\"==typeof window&&(n=window)}t.exports=n},function(t,e,n){(function(e){t.exports=e.sweetAlert=n(9)}).call(e,n(7))},function(t,e,n){(function(e){t.exports=e.swal=n(10)}).call(e,n(7))},function(t,e,n){\"undefined\"!=typeof window&&n(11),n(16);var o=n(23).default;t.exports=o},function(t,e,n){var o=n(12);\"string\"==typeof o&&(o=[[t.i,o,\"\"]]);var r={insertAt:\"top\"};r.transform=void 0;n(14)(o,r);o.locals&&(t.exports=o.locals)},function(t,e,n){e=t.exports=n(13)(void 0),e.push([t.i,'.swal-icon--error{border-color:#f27474;-webkit-animation:animateErrorIcon .5s;animation:animateErrorIcon .5s}.swal-icon--error__x-mark{position:relative;display:block;-webkit-animation:animateXMark .5s;animation:animateXMark .5s}.swal-icon--error__line{position:absolute;height:5px;width:47px;background-color:#f27474;display:block;top:37px;border-radius:2px}.swal-icon--error__line--left{-webkit-transform:rotate(45deg);transform:rotate(45deg);left:17px}.swal-icon--error__line--right{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);right:16px}@-webkit-keyframes animateErrorIcon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}to{-webkit-transform:rotateX(0deg);transform:rotateX(0deg);opacity:1}}@keyframes animateErrorIcon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}to{-webkit-transform:rotateX(0deg);transform:rotateX(0deg);opacity:1}}@-webkit-keyframes animateXMark{0%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}to{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}@keyframes animateXMark{0%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}to{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}.swal-icon--warning{border-color:#f8bb86;-webkit-animation:pulseWarning .75s infinite alternate;animation:pulseWarning .75s infinite alternate}.swal-icon--warning__body{width:5px;height:47px;top:10px;border-radius:2px;margin-left:-2px}.swal-icon--warning__body,.swal-icon--warning__dot{position:absolute;left:50%;background-color:#f8bb86}.swal-icon--warning__dot{width:7px;height:7px;border-radius:50%;margin-left:-4px;bottom:-11px}@-webkit-keyframes pulseWarning{0%{border-color:#f8d486}to{border-color:#f8bb86}}@keyframes pulseWarning{0%{border-color:#f8d486}to{border-color:#f8bb86}}.swal-icon--success{border-color:#a5dc86}.swal-icon--success:after,.swal-icon--success:before{content:\"\";border-radius:50%;position:absolute;width:60px;height:120px;background:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swal-icon--success:before{border-radius:120px 0 0 120px;top:-7px;left:-33px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:60px 60px;transform-origin:60px 60px}.swal-icon--success:after{border-radius:0 120px 120px 0;top:-11px;left:30px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:0 60px;transform-origin:0 60px;-webkit-animation:rotatePlaceholder 4.25s ease-in;animation:rotatePlaceholder 4.25s ease-in}.swal-icon--success__ring{width:80px;height:80px;border:4px solid hsla(98,55%,69%,.2);border-radius:50%;box-sizing:content-box;position:absolute;left:-4px;top:-4px;z-index:2}.swal-icon--success__hide-corners{width:5px;height:90px;background-color:#fff;padding:1px;position:absolute;left:28px;top:8px;z-index:1;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal-icon--success__line{height:5px;background-color:#a5dc86;display:block;border-radius:2px;position:absolute;z-index:2}.swal-icon--success__line--tip{width:25px;left:14px;top:46px;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-animation:animateSuccessTip .75s;animation:animateSuccessTip .75s}.swal-icon--success__line--long{width:47px;right:8px;top:38px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-animation:animateSuccessLong .75s;animation:animateSuccessLong .75s}@-webkit-keyframes rotatePlaceholder{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}to{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}@keyframes rotatePlaceholder{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}to{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}@-webkit-keyframes animateSuccessTip{0%{width:0;left:1px;top:19px}54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}to{width:25px;left:14px;top:45px}}@keyframes animateSuccessTip{0%{width:0;left:1px;top:19px}54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}to{width:25px;left:14px;top:45px}}@-webkit-keyframes animateSuccessLong{0%{width:0;right:46px;top:54px}65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}to{width:47px;right:8px;top:38px}}@keyframes animateSuccessLong{0%{width:0;right:46px;top:54px}65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}to{width:47px;right:8px;top:38px}}.swal-icon--info{border-color:#c9dae1}.swal-icon--info:before{width:5px;height:29px;bottom:17px;border-radius:2px;margin-left:-2px}.swal-icon--info:after,.swal-icon--info:before{content:\"\";position:absolute;left:50%;background-color:#c9dae1}.swal-icon--info:after{width:7px;height:7px;border-radius:50%;margin-left:-3px;top:19px}.swal-icon{width:80px;height:80px;border-width:4px;border-style:solid;border-radius:50%;padding:0;position:relative;box-sizing:content-box;margin:20px auto}.swal-icon:first-child{margin-top:32px}.swal-icon--custom{width:auto;height:auto;max-width:100%;border:none;border-radius:0}.swal-icon img{max-width:100%;max-height:100%}.swal-title{color:rgba(0,0,0,.65);font-weight:600;text-transform:none;position:relative;display:block;padding:13px 16px;font-size:27px;line-height:normal;text-align:center;margin-bottom:0}.swal-title:first-child{margin-top:26px}.swal-title:not(:first-child){padding-bottom:0}.swal-title:not(:last-child){margin-bottom:13px}.swal-text{font-size:16px;position:relative;float:none;line-height:normal;vertical-align:top;text-align:left;display:inline-block;margin:0;padding:0 10px;font-weight:400;color:rgba(0,0,0,.64);max-width:calc(100% - 20px);overflow-wrap:break-word;box-sizing:border-box}.swal-text:first-child{margin-top:45px}.swal-text:last-child{margin-bottom:45px}.swal-footer{text-align:right;padding-top:13px;margin-top:13px;padding:13px 16px;border-radius:inherit;border-top-left-radius:0;border-top-right-radius:0}.swal-button-container{margin:5px;display:inline-block;position:relative}.swal-button{background-color:#7cd1f9;color:#fff;border:none;box-shadow:none;border-radius:5px;font-weight:600;font-size:14px;padding:10px 24px;margin:0;cursor:pointer}.swal-button:not([disabled]):hover{background-color:#78cbf2}.swal-button:active{background-color:#70bce0}.swal-button:focus{outline:none;box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(43,114,165,.29)}.swal-button[disabled]{opacity:.5;cursor:default}.swal-button::-moz-focus-inner{border:0}.swal-button--cancel{color:#555;background-color:#efefef}.swal-button--cancel:not([disabled]):hover{background-color:#e8e8e8}.swal-button--cancel:active{background-color:#d7d7d7}.swal-button--cancel:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(116,136,150,.29)}.swal-button--danger{background-color:#e64942}.swal-button--danger:not([disabled]):hover{background-color:#df4740}.swal-button--danger:active{background-color:#cf423b}.swal-button--danger:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(165,43,43,.29)}.swal-content{padding:0 20px;margin-top:20px;font-size:medium}.swal-content:last-child{margin-bottom:20px}.swal-content__input,.swal-content__textarea{-webkit-appearance:none;background-color:#fff;border:none;font-size:14px;display:block;box-sizing:border-box;width:100%;border:1px solid rgba(0,0,0,.14);padding:10px 13px;border-radius:2px;transition:border-color .2s}.swal-content__input:focus,.swal-content__textarea:focus{outline:none;border-color:#6db8ff}.swal-content__textarea{resize:vertical}.swal-button--loading{color:transparent}.swal-button--loading~.swal-button__loader{opacity:1}.swal-button__loader{position:absolute;height:auto;width:43px;z-index:2;left:50%;top:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);text-align:center;pointer-events:none;opacity:0}.swal-button__loader div{display:inline-block;float:none;vertical-align:baseline;width:9px;height:9px;padding:0;border:none;margin:2px;opacity:.4;border-radius:7px;background-color:hsla(0,0%,100%,.9);transition:background .2s;-webkit-animation:swal-loading-anim 1s infinite;animation:swal-loading-anim 1s infinite}.swal-button__loader div:nth-child(3n+2){-webkit-animation-delay:.15s;animation-delay:.15s}.swal-button__loader div:nth-child(3n+3){-webkit-animation-delay:.3s;animation-delay:.3s}@-webkit-keyframes swal-loading-anim{0%{opacity:.4}20%{opacity:.4}50%{opacity:1}to{opacity:.4}}@keyframes swal-loading-anim{0%{opacity:.4}20%{opacity:.4}50%{opacity:1}to{opacity:.4}}.swal-overlay{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center;font-size:0;overflow-y:auto;background-color:rgba(0,0,0,.4);z-index:10000;pointer-events:none;opacity:0;transition:opacity .3s}.swal-overlay:before{content:\" \";display:inline-block;vertical-align:middle;height:100%}.swal-overlay--show-modal{opacity:1;pointer-events:auto}.swal-overlay--show-modal .swal-modal{opacity:1;pointer-events:auto;box-sizing:border-box;-webkit-animation:showSweetAlert .3s;animation:showSweetAlert .3s;will-change:transform}.swal-modal{width:478px;opacity:0;pointer-events:none;background-color:#fff;text-align:center;border-radius:5px;position:static;margin:20px auto;display:inline-block;vertical-align:middle;-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;z-index:10001;transition:opacity .2s,-webkit-transform .3s;transition:transform .3s,opacity .2s;transition:transform .3s,opacity .2s,-webkit-transform .3s}@media (max-width:500px){.swal-modal{width:calc(100% - 20px)}}@-webkit-keyframes showSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1)}1%{-webkit-transform:scale(.5);transform:scale(.5)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes showSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1)}1%{-webkit-transform:scale(.5);transform:scale(.5)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}to{-webkit-transform:scale(1);transform:scale(1)}}',\"\"])},function(t,e){function n(t,e){var n=t[1]||\"\",r=t[3];if(!r)return n;if(e&&\"function\"==typeof btoa){var i=o(r);return[n].concat(r.sources.map(function(t){return\"/*# sourceURL=\"+r.sourceRoot+t+\" */\"})).concat([i]).join(\"\\n\")}return[n].join(\"\\n\")}function o(t){return\"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(t))))+\" */\"}t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var o=n(e,t);return e[2]?\"@media \"+e[2]+\"{\"+o+\"}\":o}).join(\"\")},e.i=function(t,n){\"string\"==typeof t&&(t=[[null,t,\"\"]]);for(var o={},r=0;r<this.length;r++){var i=this[r][0];\"number\"==typeof i&&(o[i]=!0)}for(r=0;r<t.length;r++){var a=t[r];\"number\"==typeof a[0]&&o[a[0]]||(n&&!a[2]?a[2]=n:n&&(a[2]=\"(\"+a[2]+\") and (\"+n+\")\"),e.push(a))}},e}},function(t,e,n){function o(t,e){for(var n=0;n<t.length;n++){var o=t[n],r=m[o.id];if(r){r.refs++;for(var i=0;i<r.parts.length;i++)r.parts[i](o.parts[i]);for(;i<o.parts.length;i++)r.parts.push(u(o.parts[i],e))}else{for(var a=[],i=0;i<o.parts.length;i++)a.push(u(o.parts[i],e));m[o.id]={id:o.id,refs:1,parts:a}}}}function r(t,e){for(var n=[],o={},r=0;r<t.length;r++){var i=t[r],a=e.base?i[0]+e.base:i[0],s=i[1],c=i[2],l=i[3],u={css:s,media:c,sourceMap:l};o[a]?o[a].parts.push(u):n.push(o[a]={id:a,parts:[u]})}return n}function i(t,e){var n=v(t.insertInto);if(!n)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");var o=w[w.length-1];if(\"top\"===t.insertAt)o?o.nextSibling?n.insertBefore(e,o.nextSibling):n.appendChild(e):n.insertBefore(e,n.firstChild),w.push(e);else{if(\"bottom\"!==t.insertAt)throw new Error(\"Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.\");n.appendChild(e)}}function a(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t);var e=w.indexOf(t);e>=0&&w.splice(e,1)}function s(t){var e=document.createElement(\"style\");return t.attrs.type=\"text/css\",l(e,t.attrs),i(t,e),e}function c(t){var e=document.createElement(\"link\");return t.attrs.type=\"text/css\",t.attrs.rel=\"stylesheet\",l(e,t.attrs),i(t,e),e}function l(t,e){Object.keys(e).forEach(function(n){t.setAttribute(n,e[n])})}function u(t,e){var n,o,r,i;if(e.transform&&t.css){if(!(i=e.transform(t.css)))return function(){};t.css=i}if(e.singleton){var l=h++;n=g||(g=s(e)),o=f.bind(null,n,l,!1),r=f.bind(null,n,l,!0)}else t.sourceMap&&\"function\"==typeof URL&&\"function\"==typeof URL.createObjectURL&&\"function\"==typeof URL.revokeObjectURL&&\"function\"==typeof Blob&&\"function\"==typeof btoa?(n=c(e),o=p.bind(null,n,e),r=function(){a(n),n.href&&URL.revokeObjectURL(n.href)}):(n=s(e),o=d.bind(null,n),r=function(){a(n)});return o(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;o(t=e)}else r()}}function f(t,e,n,o){var r=n?\"\":o.css;if(t.styleSheet)t.styleSheet.cssText=x(e,r);else{var i=document.createTextNode(r),a=t.childNodes;a[e]&&t.removeChild(a[e]),a.length?t.insertBefore(i,a[e]):t.appendChild(i)}}function d(t,e){var n=e.css,o=e.media;if(o&&t.setAttribute(\"media\",o),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}function p(t,e,n){var o=n.css,r=n.sourceMap,i=void 0===e.convertToAbsoluteUrls&&r;(e.convertToAbsoluteUrls||i)&&(o=y(o)),r&&(o+=\"\\n/*# sourceMappingURL=data:application/json;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(r))))+\" */\");var a=new Blob([o],{type:\"text/css\"}),s=t.href;t.href=URL.createObjectURL(a),s&&URL.revokeObjectURL(s)}var m={},b=function(t){var e;return function(){return void 0===e&&(e=t.apply(this,arguments)),e}}(function(){return window&&document&&document.all&&!window.atob}),v=function(t){var e={};return function(n){return void 0===e[n]&&(e[n]=t.call(this,n)),e[n]}}(function(t){return document.querySelector(t)}),g=null,h=0,w=[],y=n(15);t.exports=function(t,e){if(\"undefined\"!=typeof DEBUG&&DEBUG&&\"object\"!=typeof document)throw new Error(\"The style-loader cannot be used in a non-browser environment\");e=e||{},e.attrs=\"object\"==typeof e.attrs?e.attrs:{},e.singleton||(e.singleton=b()),e.insertInto||(e.insertInto=\"head\"),e.insertAt||(e.insertAt=\"bottom\");var n=r(t,e);return o(n,e),function(t){for(var i=[],a=0;a<n.length;a++){var s=n[a],c=m[s.id];c.refs--,i.push(c)}if(t){o(r(t,e),e)}for(var a=0;a<i.length;a++){var c=i[a];if(0===c.refs){for(var l=0;l<c.parts.length;l++)c.parts[l]();delete m[c.id]}}}};var x=function(){var t=[];return function(e,n){return t[e]=n,t.filter(Boolean).join(\"\\n\")}}()},function(t,e){t.exports=function(t){var e=\"undefined\"!=typeof window&&window.location;if(!e)throw new Error(\"fixUrls requires window.location\");if(!t||\"string\"!=typeof t)return t;var n=e.protocol+\"//\"+e.host,o=n+e.pathname.replace(/\\/[^\\/]*$/,\"/\");return t.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi,function(t,e){var r=e.trim().replace(/^\"(.*)\"$/,function(t,e){return e}).replace(/^'(.*)'$/,function(t,e){return e});if(/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/)/i.test(r))return t;var i;return i=0===r.indexOf(\"//\")?r:0===r.indexOf(\"/\")?n+r:o+r.replace(/^\\.\\//,\"\"),\"url(\"+JSON.stringify(i)+\")\"})}},function(t,e,n){var o=n(17);\"undefined\"==typeof window||window.Promise||(window.Promise=o),n(21),String.prototype.includes||(String.prototype.includes=function(t,e){\"use strict\";return\"number\"!=typeof e&&(e=0),!(e+t.length>this.length)&&-1!==this.indexOf(t,e)}),Array.prototype.includes||Object.defineProperty(Array.prototype,\"includes\",{value:function(t,e){if(null==this)throw new TypeError('\"this\" is null or not defined');var n=Object(this),o=n.length>>>0;if(0===o)return!1;for(var r=0|e,i=Math.max(r>=0?r:o-Math.abs(r),0);i<o;){if(function(t,e){return t===e||\"number\"==typeof t&&\"number\"==typeof e&&isNaN(t)&&isNaN(e)}(n[i],t))return!0;i++}return!1}}),\"undefined\"!=typeof window&&function(t){t.forEach(function(t){t.hasOwnProperty(\"remove\")||Object.defineProperty(t,\"remove\",{configurable:!0,enumerable:!0,writable:!0,value:function(){this.parentNode.removeChild(this)}})})}([Element.prototype,CharacterData.prototype,DocumentType.prototype])},function(t,e,n){(function(e){!function(n){function o(){}function r(t,e){return function(){t.apply(e,arguments)}}function i(t){if(\"object\"!=typeof this)throw new TypeError(\"Promises must be constructed via new\");if(\"function\"!=typeof t)throw new TypeError(\"not a function\");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],f(t,this)}function a(t,e){for(;3===t._state;)t=t._value;if(0===t._state)return void t._deferreds.push(e);t._handled=!0,i._immediateFn(function(){var n=1===t._state?e.onFulfilled:e.onRejected;if(null===n)return void(1===t._state?s:c)(e.promise,t._value);var o;try{o=n(t._value)}catch(t){return void c(e.promise,t)}s(e.promise,o)})}function s(t,e){try{if(e===t)throw new TypeError(\"A promise cannot be resolved with itself.\");if(e&&(\"object\"==typeof e||\"function\"==typeof e)){var n=e.then;if(e instanceof i)return t._state=3,t._value=e,void l(t);if(\"function\"==typeof n)return void f(r(n,e),t)}t._state=1,t._value=e,l(t)}catch(e){c(t,e)}}function c(t,e){t._state=2,t._value=e,l(t)}function l(t){2===t._state&&0===t._deferreds.length&&i._immediateFn(function(){t._handled||i._unhandledRejectionFn(t._value)});for(var e=0,n=t._deferreds.length;e<n;e++)a(t,t._deferreds[e]);t._deferreds=null}function u(t,e,n){this.onFulfilled=\"function\"==typeof t?t:null,this.onRejected=\"function\"==typeof e?e:null,this.promise=n}function f(t,e){var n=!1;try{t(function(t){n||(n=!0,s(e,t))},function(t){n||(n=!0,c(e,t))})}catch(t){if(n)return;n=!0,c(e,t)}}var d=setTimeout;i.prototype.catch=function(t){return this.then(null,t)},i.prototype.then=function(t,e){var n=new this.constructor(o);return a(this,new u(t,e,n)),n},i.all=function(t){var e=Array.prototype.slice.call(t);return new i(function(t,n){function o(i,a){try{if(a&&(\"object\"==typeof a||\"function\"==typeof a)){var s=a.then;if(\"function\"==typeof s)return void s.call(a,function(t){o(i,t)},n)}e[i]=a,0==--r&&t(e)}catch(t){n(t)}}if(0===e.length)return t([]);for(var r=e.length,i=0;i<e.length;i++)o(i,e[i])})},i.resolve=function(t){return t&&\"object\"==typeof t&&t.constructor===i?t:new i(function(e){e(t)})},i.reject=function(t){return new i(function(e,n){n(t)})},i.race=function(t){return new i(function(e,n){for(var o=0,r=t.length;o<r;o++)t[o].then(e,n)})},i._immediateFn=\"function\"==typeof e&&function(t){e(t)}||function(t){d(t,0)},i._unhandledRejectionFn=function(t){\"undefined\"!=typeof console&&console&&console.warn(\"Possible Unhandled Promise Rejection:\",t)},i._setImmediateFn=function(t){i._immediateFn=t},i._setUnhandledRejectionFn=function(t){i._unhandledRejectionFn=t},void 0!==t&&t.exports?t.exports=i:n.Promise||(n.Promise=i)}(this)}).call(e,n(18).setImmediate)},function(t,e,n){function o(t,e){this._id=t,this._clearFn=e}var r=Function.prototype.apply;e.setTimeout=function(){return new o(r.call(setTimeout,window,arguments),clearTimeout)},e.setInterval=function(){return new o(r.call(setInterval,window,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t&&t.close()},o.prototype.unref=o.prototype.ref=function(){},o.prototype.close=function(){this._clearFn.call(window,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},n(19),e.setImmediate=setImmediate,e.clearImmediate=clearImmediate},function(t,e,n){(function(t,e){!function(t,n){\"use strict\";function o(t){\"function\"!=typeof t&&(t=new Function(\"\"+t));for(var e=new Array(arguments.length-1),n=0;n<e.length;n++)e[n]=arguments[n+1];var o={callback:t,args:e};return l[c]=o,s(c),c++}function r(t){delete l[t]}function i(t){var e=t.callback,o=t.args;switch(o.length){case 0:e();break;case 1:e(o[0]);break;case 2:e(o[0],o[1]);break;case 3:e(o[0],o[1],o[2]);break;default:e.apply(n,o)}}function a(t){if(u)setTimeout(a,0,t);else{var e=l[t];if(e){u=!0;try{i(e)}finally{r(t),u=!1}}}}if(!t.setImmediate){var s,c=1,l={},u=!1,f=t.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(t);d=d&&d.setTimeout?d:t,\"[object process]\"==={}.toString.call(t.process)?function(){s=function(t){e.nextTick(function(){a(t)})}}():function(){if(t.postMessage&&!t.importScripts){var e=!0,n=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage(\"\",\"*\"),t.onmessage=n,e}}()?function(){var e=\"setImmediate$\"+Math.random()+\"$\",n=function(n){n.source===t&&\"string\"==typeof n.data&&0===n.data.indexOf(e)&&a(+n.data.slice(e.length))};t.addEventListener?t.addEventListener(\"message\",n,!1):t.attachEvent(\"onmessage\",n),s=function(n){t.postMessage(e+n,\"*\")}}():t.MessageChannel?function(){var t=new MessageChannel;t.port1.onmessage=function(t){a(t.data)},s=function(e){t.port2.postMessage(e)}}():f&&\"onreadystatechange\"in f.createElement(\"script\")?function(){var t=f.documentElement;s=function(e){var n=f.createElement(\"script\");n.onreadystatechange=function(){a(e),n.onreadystatechange=null,t.removeChild(n),n=null},t.appendChild(n)}}():function(){s=function(t){setTimeout(a,0,t)}}(),d.setImmediate=o,d.clearImmediate=r}}(\"undefined\"==typeof self?void 0===t?this:t:self)}).call(e,n(7),n(20))},function(t,e){function n(){throw new Error(\"setTimeout has not been defined\")}function o(){throw new Error(\"clearTimeout has not been defined\")}function r(t){if(u===setTimeout)return setTimeout(t,0);if((u===n||!u)&&setTimeout)return u=setTimeout,setTimeout(t,0);try{return u(t,0)}catch(e){try{return u.call(null,t,0)}catch(e){return u.call(this,t,0)}}}function i(t){if(f===clearTimeout)return clearTimeout(t);if((f===o||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(t);try{return f(t)}catch(e){try{return f.call(null,t)}catch(e){return f.call(this,t)}}}function a(){b&&p&&(b=!1,p.length?m=p.concat(m):v=-1,m.length&&s())}function s(){if(!b){var t=r(a);b=!0;for(var e=m.length;e;){for(p=m,m=[];++v<e;)p&&p[v].run();v=-1,e=m.length}p=null,b=!1,i(t)}}function c(t,e){this.fun=t,this.array=e}function l(){}var u,f,d=t.exports={};!function(){try{u=\"function\"==typeof setTimeout?setTimeout:n}catch(t){u=n}try{f=\"function\"==typeof clearTimeout?clearTimeout:o}catch(t){f=o}}();var p,m=[],b=!1,v=-1;d.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];m.push(new c(t,e)),1!==m.length||b||r(s)},c.prototype.run=function(){this.fun.apply(null,this.array)},d.title=\"browser\",d.browser=!0,d.env={},d.argv=[],d.version=\"\",d.versions={},d.on=l,d.addListener=l,d.once=l,d.off=l,d.removeListener=l,d.removeAllListeners=l,d.emit=l,d.prependListener=l,d.prependOnceListener=l,d.listeners=function(t){return[]},d.binding=function(t){throw new Error(\"process.binding is not supported\")},d.cwd=function(){return\"/\"},d.chdir=function(t){throw new Error(\"process.chdir is not supported\")},d.umask=function(){return 0}},function(t,e,n){\"use strict\";n(22).polyfill()},function(t,e,n){\"use strict\";function o(t,e){if(void 0===t||null===t)throw new TypeError(\"Cannot convert first argument to object\");for(var n=Object(t),o=1;o<arguments.length;o++){var r=arguments[o];if(void 0!==r&&null!==r)for(var i=Object.keys(Object(r)),a=0,s=i.length;a<s;a++){var c=i[a],l=Object.getOwnPropertyDescriptor(r,c);void 0!==l&&l.enumerable&&(n[c]=r[c])}}return n}function r(){Object.assign||Object.defineProperty(Object,\"assign\",{enumerable:!1,configurable:!0,writable:!0,value:o})}t.exports={assign:o,polyfill:r}},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(24),r=n(6),i=n(5),a=n(36),s=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];if(\"undefined\"!=typeof window){var n=a.getOpts.apply(void 0,t);return new Promise(function(t,e){i.default.promise={resolve:t,reject:e},o.default(n),setTimeout(function(){r.openModal()})})}};s.close=r.onAction,s.getState=r.getState,s.setActionValue=i.setActionValue,s.stopLoading=r.stopLoading,s.setDefaults=a.setDefaults,e.default=s},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(1),r=n(0),i=r.default.MODAL,a=n(4),s=n(34),c=n(35),l=n(1);e.init=function(t){o.getNode(i)||(document.body||l.throwErr(\"You can only use SweetAlert AFTER the DOM has loaded!\"),s.default(),a.default()),a.initModalContent(t),c.default(t)},e.default=e.init},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(0),r=o.default.MODAL;e.modalMarkup='\\n  <div class=\"'+r+'\" role=\"dialog\" aria-modal=\"true\"></div>',e.default=e.modalMarkup},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(0),r=o.default.OVERLAY,i='<div \\n    class=\"'+r+'\"\\n    tabIndex=\"-1\">\\n  </div>';e.default=i},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(0),r=o.default.ICON;e.errorIconMarkup=function(){var t=r+\"--error\",e=t+\"__line\";return'\\n    <div class=\"'+t+'__x-mark\">\\n      <span class=\"'+e+\" \"+e+'--left\"></span>\\n      <span class=\"'+e+\" \"+e+'--right\"></span>\\n    </div>\\n  '},e.warningIconMarkup=function(){var t=r+\"--warning\";return'\\n    <span class=\"'+t+'__body\">\\n      <span class=\"'+t+'__dot\"></span>\\n    </span>\\n  '},e.successIconMarkup=function(){var t=r+\"--success\";return'\\n    <span class=\"'+t+\"__line \"+t+'__line--long\"></span>\\n    <span class=\"'+t+\"__line \"+t+'__line--tip\"></span>\\n\\n    <div class=\"'+t+'__ring\"></div>\\n    <div class=\"'+t+'__hide-corners\"></div>\\n  '}},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(0),r=o.default.CONTENT;e.contentMarkup='\\n  <div class=\"'+r+'\">\\n\\n  </div>\\n'},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(0),r=o.default.BUTTON_CONTAINER,i=o.default.BUTTON,a=o.default.BUTTON_LOADER;e.buttonMarkup='\\n  <div class=\"'+r+'\">\\n\\n    <button\\n      class=\"'+i+'\"\\n    ></button>\\n\\n    <div class=\"'+a+'\">\\n      <div></div>\\n      <div></div>\\n      <div></div>\\n    </div>\\n\\n  </div>\\n'},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(4),r=n(2),i=n(0),a=i.default.ICON,s=i.default.ICON_CUSTOM,c=[\"error\",\"warning\",\"success\",\"info\"],l={error:r.errorIconMarkup(),warning:r.warningIconMarkup(),success:r.successIconMarkup()},u=function(t,e){var n=a+\"--\"+t;e.classList.add(n);var o=l[t];o&&(e.innerHTML=o)},f=function(t,e){e.classList.add(s);var n=document.createElement(\"img\");n.src=t,e.appendChild(n)},d=function(t){if(t){var e=o.injectElIntoModal(r.iconMarkup);c.includes(t)?u(t,e):f(t,e)}};e.default=d},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(2),r=n(4),i=function(t){navigator.userAgent.includes(\"AppleWebKit\")&&(t.style.display=\"none\",t.offsetHeight,t.style.display=\"\")};e.initTitle=function(t){if(t){var e=r.injectElIntoModal(o.titleMarkup);e.textContent=t,i(e)}},e.initText=function(t){if(t){var e=document.createDocumentFragment();t.split(\"\\n\").forEach(function(t,n,o){e.appendChild(document.createTextNode(t)),n<o.length-1&&e.appendChild(document.createElement(\"br\"))});var n=r.injectElIntoModal(o.textMarkup);n.appendChild(e),i(n)}}},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(1),r=n(4),i=n(0),a=i.default.BUTTON,s=i.default.DANGER_BUTTON,c=n(3),l=n(2),u=n(6),f=n(5),d=function(t,e,n){var r=e.text,i=e.value,d=e.className,p=e.closeModal,m=o.stringToNode(l.buttonMarkup),b=m.querySelector(\".\"+a),v=a+\"--\"+t;if(b.classList.add(v),d){(Array.isArray(d)?d:d.split(\" \")).filter(function(t){return t.length>0}).forEach(function(t){b.classList.add(t)})}n&&t===c.CONFIRM_KEY&&b.classList.add(s),b.textContent=r;var g={};return g[t]=i,f.setActionValue(g),f.setActionOptionsFor(t,{closeModal:p}),b.addEventListener(\"click\",function(){return u.onAction(t)}),m},p=function(t,e){var n=r.injectElIntoModal(l.footerMarkup);for(var o in t){var i=t[o],a=d(o,i,e);i.visible&&n.appendChild(a)}0===n.children.length&&n.remove()};e.default=p},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(3),r=n(4),i=n(2),a=n(5),s=n(6),c=n(0),l=c.default.CONTENT,u=function(t){t.addEventListener(\"input\",function(t){var e=t.target,n=e.value;a.setActionValue(n)}),t.addEventListener(\"keyup\",function(t){if(\"Enter\"===t.key)return s.onAction(o.CONFIRM_KEY)}),setTimeout(function(){t.focus(),a.setActionValue(\"\")},0)},f=function(t,e,n){var o=document.createElement(e),r=l+\"__\"+e;o.classList.add(r);for(var i in n){var a=n[i];o[i]=a}\"input\"===e&&u(o),t.appendChild(o)},d=function(t){if(t){var e=r.injectElIntoModal(i.contentMarkup),n=t.element,o=t.attributes;\"string\"==typeof n?f(e,n,o):e.appendChild(n)}};e.default=d},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(1),r=n(2),i=function(){var t=o.stringToNode(r.overlayMarkup);document.body.appendChild(t)};e.default=i},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(5),r=n(6),i=n(1),a=n(3),s=n(0),c=s.default.MODAL,l=s.default.BUTTON,u=s.default.OVERLAY,f=function(t){t.preventDefault(),v()},d=function(t){t.preventDefault(),g()},p=function(t){if(o.default.isOpen)switch(t.key){case\"Escape\":return r.onAction(a.CANCEL_KEY)}},m=function(t){if(o.default.isOpen)switch(t.key){case\"Tab\":return f(t)}},b=function(t){if(o.default.isOpen)return\"Tab\"===t.key&&t.shiftKey?d(t):void 0},v=function(){var t=i.getNode(l);t&&(t.tabIndex=0,t.focus())},g=function(){var t=i.getNode(c),e=t.querySelectorAll(\".\"+l),n=e.length-1,o=e[n];o&&o.focus()},h=function(t){t[t.length-1].addEventListener(\"keydown\",m)},w=function(t){t[0].addEventListener(\"keydown\",b)},y=function(){var t=i.getNode(c),e=t.querySelectorAll(\".\"+l);e.length&&(h(e),w(e))},x=function(t){if(i.getNode(u)===t.target)return r.onAction(a.CANCEL_KEY)},_=function(t){var e=i.getNode(u);e.removeEventListener(\"click\",x),t&&e.addEventListener(\"click\",x)},k=function(t){o.default.timer&&clearTimeout(o.default.timer),t&&(o.default.timer=window.setTimeout(function(){return r.onAction(a.CANCEL_KEY)},t))},O=function(t){t.closeOnEsc?document.addEventListener(\"keyup\",p):document.removeEventListener(\"keyup\",p),t.dangerMode?v():g(),y(),_(t.closeOnClickOutside),k(t.timer)};e.default=O},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(1),r=n(3),i=n(37),a=n(38),s={title:null,text:null,icon:null,buttons:r.defaultButtonList,content:null,className:null,closeOnClickOutside:!0,closeOnEsc:!0,dangerMode:!1,timer:null},c=Object.assign({},s);e.setDefaults=function(t){c=Object.assign({},s,t)};var l=function(t){var e=t&&t.button,n=t&&t.buttons;return void 0!==e&&void 0!==n&&o.throwErr(\"Cannot set both 'button' and 'buttons' options!\"),void 0!==e?{confirm:e}:n},u=function(t){return o.ordinalSuffixOf(t+1)},f=function(t,e){o.throwErr(u(e)+\" argument ('\"+t+\"') is invalid\")},d=function(t,e){var n=t+1,r=e[n];o.isPlainObject(r)||void 0===r||o.throwErr(\"Expected \"+u(n)+\" argument ('\"+r+\"') to be a plain object\")},p=function(t,e){var n=t+1,r=e[n];void 0!==r&&o.throwErr(\"Unexpected \"+u(n)+\" argument (\"+r+\")\")},m=function(t,e,n,r){var i=typeof e,a=\"string\"===i,s=e instanceof Element;if(a){if(0===n)return{text:e};if(1===n)return{text:e,title:r[0]};if(2===n)return d(n,r),{icon:e};f(e,n)}else{if(s&&0===n)return d(n,r),{content:e};if(o.isPlainObject(e))return p(n,r),e;f(e,n)}};e.getOpts=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n={};t.forEach(function(e,o){var r=m(0,e,o,t);Object.assign(n,r)});var o=l(n);n.buttons=r.getButtonListOpts(o),delete n.button,n.content=i.getContentOpts(n.content);var u=Object.assign({},s,c,n);return Object.keys(u).forEach(function(t){a.DEPRECATED_OPTS[t]&&a.logDeprecation(t)}),u}},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(1),r={element:\"input\",attributes:{placeholder:\"\"}};e.getContentOpts=function(t){var e={};return o.isPlainObject(t)?Object.assign(e,t):t instanceof Element?{element:t}:\"input\"===t?r:null}},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.logDeprecation=function(t){var n=e.DEPRECATED_OPTS[t],o=n.onlyRename,r=n.replacement,i=n.subOption,a=n.link,s=o?\"renamed\":\"deprecated\",c='SweetAlert warning: \"'+t+'\" option has been '+s+\".\";if(r){c+=\" Please use\"+(i?' \"'+i+'\" in ':\" \")+'\"'+r+'\" instead.'}var l=\"https://sweetalert.js.org\";c+=a?\" More details: \"+l+a:\" More details: \"+l+\"/guides/#upgrading-from-1x\",console.warn(c)},e.DEPRECATED_OPTS={type:{replacement:\"icon\",link:\"/docs/#icon\"},imageUrl:{replacement:\"icon\",link:\"/docs/#icon\"},customClass:{replacement:\"className\",onlyRename:!0,link:\"/docs/#classname\"},imageSize:{},showCancelButton:{replacement:\"buttons\",link:\"/docs/#buttons\"},showConfirmButton:{replacement:\"button\",link:\"/docs/#button\"},confirmButtonText:{replacement:\"button\",link:\"/docs/#button\"},confirmButtonColor:{},cancelButtonText:{replacement:\"buttons\",link:\"/docs/#buttons\"},closeOnConfirm:{replacement:\"button\",subOption:\"closeModal\",link:\"/docs/#button\"},closeOnCancel:{replacement:\"buttons\",subOption:\"closeModal\",link:\"/docs/#buttons\"},showLoaderOnConfirm:{replacement:\"buttons\"},animation:{},inputType:{replacement:\"content\",link:\"/docs/#content\"},inputValue:{replacement:\"content\",link:\"/docs/#content\"},inputPlaceholder:{replacement:\"content\",link:\"/docs/#content\"},html:{replacement:\"content\",link:\"/docs/#content\"},allowEscapeKey:{replacement:\"closeOnEsc\",onlyRename:!0,link:\"/docs/#closeonesc\"},allowClickOutside:{replacement:\"closeOnClickOutside\",onlyRename:!0,link:\"/docs/#closeonclickoutside\"}}}])});","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.10.5 (2022-05-25)\n */\n(function () {\n    'use strict';\n\n    var typeOf$1 = function (x) {\n      if (x === null) {\n        return 'null';\n      }\n      if (x === undefined) {\n        return 'undefined';\n      }\n      var t = typeof x;\n      if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n        return 'array';\n      }\n      if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n        return 'string';\n      }\n      return t;\n    };\n    var isEquatableType = function (x) {\n      return [\n        'undefined',\n        'boolean',\n        'number',\n        'string',\n        'function',\n        'xml',\n        'null'\n      ].indexOf(x) !== -1;\n    };\n\n    var sort$1 = function (xs, compareFn) {\n      var clone = Array.prototype.slice.call(xs);\n      return clone.sort(compareFn);\n    };\n\n    var contramap = function (eqa, f) {\n      return eq$2(function (x, y) {\n        return eqa.eq(f(x), f(y));\n      });\n    };\n    var eq$2 = function (f) {\n      return { eq: f };\n    };\n    var tripleEq = eq$2(function (x, y) {\n      return x === y;\n    });\n    var eqString = tripleEq;\n    var eqArray = function (eqa) {\n      return eq$2(function (x, y) {\n        if (x.length !== y.length) {\n          return false;\n        }\n        var len = x.length;\n        for (var i = 0; i < len; i++) {\n          if (!eqa.eq(x[i], y[i])) {\n            return false;\n          }\n        }\n        return true;\n      });\n    };\n    var eqSortedArray = function (eqa, compareFn) {\n      return contramap(eqArray(eqa), function (xs) {\n        return sort$1(xs, compareFn);\n      });\n    };\n    var eqRecord = function (eqa) {\n      return eq$2(function (x, y) {\n        var kx = Object.keys(x);\n        var ky = Object.keys(y);\n        if (!eqSortedArray(eqString).eq(kx, ky)) {\n          return false;\n        }\n        var len = kx.length;\n        for (var i = 0; i < len; i++) {\n          var q = kx[i];\n          if (!eqa.eq(x[q], y[q])) {\n            return false;\n          }\n        }\n        return true;\n      });\n    };\n    var eqAny = eq$2(function (x, y) {\n      if (x === y) {\n        return true;\n      }\n      var tx = typeOf$1(x);\n      var ty = typeOf$1(y);\n      if (tx !== ty) {\n        return false;\n      }\n      if (isEquatableType(tx)) {\n        return x === y;\n      } else if (tx === 'array') {\n        return eqArray(eqAny).eq(x, y);\n      } else if (tx === 'object') {\n        return eqRecord(eqAny).eq(x, y);\n      }\n      return false;\n    });\n\n    var typeOf = function (x) {\n      var t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n        return 'array';\n      } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    var isType$1 = function (type) {\n      return function (value) {\n        return typeOf(value) === type;\n      };\n    };\n    var isSimpleType = function (type) {\n      return function (value) {\n        return typeof value === type;\n      };\n    };\n    var eq$1 = function (t) {\n      return function (a) {\n        return t === a;\n      };\n    };\n    var isString$1 = isType$1('string');\n    var isObject = isType$1('object');\n    var isArray$1 = isType$1('array');\n    var isNull = eq$1(null);\n    var isBoolean = isSimpleType('boolean');\n    var isUndefined = eq$1(undefined);\n    var isNullable = function (a) {\n      return a === null || a === undefined;\n    };\n    var isNonNullable = function (a) {\n      return !isNullable(a);\n    };\n    var isFunction = isSimpleType('function');\n    var isNumber = isSimpleType('number');\n\n    var noop = function () {\n    };\n    var compose = function (fa, fb) {\n      return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n        return fa(fb.apply(null, args));\n      };\n    };\n    var compose1 = function (fbc, fab) {\n      return function (a) {\n        return fbc(fab(a));\n      };\n    };\n    var constant = function (value) {\n      return function () {\n        return value;\n      };\n    };\n    var identity = function (x) {\n      return x;\n    };\n    var tripleEquals = function (a, b) {\n      return a === b;\n    };\n    function curry(fn) {\n      var initialArgs = [];\n      for (var _i = 1; _i < arguments.length; _i++) {\n        initialArgs[_i - 1] = arguments[_i];\n      }\n      return function () {\n        var restArgs = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          restArgs[_i] = arguments[_i];\n        }\n        var all = initialArgs.concat(restArgs);\n        return fn.apply(null, all);\n      };\n    }\n    var not = function (f) {\n      return function (t) {\n        return !f(t);\n      };\n    };\n    var die = function (msg) {\n      return function () {\n        throw new Error(msg);\n      };\n    };\n    var apply = function (f) {\n      return f();\n    };\n    var call = function (f) {\n      f();\n    };\n    var never = constant(false);\n    var always = constant(true);\n\n    var none = function () {\n      return NONE;\n    };\n    var NONE = function () {\n      var call = function (thunk) {\n        return thunk();\n      };\n      var id = identity;\n      var me = {\n        fold: function (n, _s) {\n          return n();\n        },\n        isSome: never,\n        isNone: always,\n        getOr: id,\n        getOrThunk: call,\n        getOrDie: function (msg) {\n          throw new Error(msg || 'error: getOrDie called on none.');\n        },\n        getOrNull: constant(null),\n        getOrUndefined: constant(undefined),\n        or: id,\n        orThunk: call,\n        map: none,\n        each: noop,\n        bind: none,\n        exists: never,\n        forall: always,\n        filter: function () {\n          return none();\n        },\n        toArray: function () {\n          return [];\n        },\n        toString: constant('none()')\n      };\n      return me;\n    }();\n    var some = function (a) {\n      var constant_a = constant(a);\n      var self = function () {\n        return me;\n      };\n      var bind = function (f) {\n        return f(a);\n      };\n      var me = {\n        fold: function (n, s) {\n          return s(a);\n        },\n        isSome: always,\n        isNone: never,\n        getOr: constant_a,\n        getOrThunk: constant_a,\n        getOrDie: constant_a,\n        getOrNull: constant_a,\n        getOrUndefined: constant_a,\n        or: self,\n        orThunk: self,\n        map: function (f) {\n          return some(f(a));\n        },\n        each: function (f) {\n          f(a);\n        },\n        bind: bind,\n        exists: bind,\n        forall: bind,\n        filter: function (f) {\n          return f(a) ? me : NONE;\n        },\n        toArray: function () {\n          return [a];\n        },\n        toString: function () {\n          return 'some(' + a + ')';\n        }\n      };\n      return me;\n    };\n    var from$1 = function (value) {\n      return value === null || value === undefined ? NONE : some(value);\n    };\n    var Optional = {\n      some: some,\n      none: none,\n      from: from$1\n    };\n\n    var nativeSlice = Array.prototype.slice;\n    var nativeIndexOf = Array.prototype.indexOf;\n    var nativePush = Array.prototype.push;\n    var rawIndexOf = function (ts, t) {\n      return nativeIndexOf.call(ts, t);\n    };\n    var indexOf$2 = function (xs, x) {\n      var r = rawIndexOf(xs, x);\n      return r === -1 ? Optional.none() : Optional.some(r);\n    };\n    var contains$3 = function (xs, x) {\n      return rawIndexOf(xs, x) > -1;\n    };\n    var exists = function (xs, pred) {\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        if (pred(x, i)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    var map$3 = function (xs, f) {\n      var len = xs.length;\n      var r = new Array(len);\n      for (var i = 0; i < len; i++) {\n        var x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    var each$k = function (xs, f) {\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        f(x, i);\n      }\n    };\n    var eachr = function (xs, f) {\n      for (var i = xs.length - 1; i >= 0; i--) {\n        var x = xs[i];\n        f(x, i);\n      }\n    };\n    var partition = function (xs, pred) {\n      var pass = [];\n      var fail = [];\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        var arr = pred(x, i) ? pass : fail;\n        arr.push(x);\n      }\n      return {\n        pass: pass,\n        fail: fail\n      };\n    };\n    var filter$4 = function (xs, pred) {\n      var r = [];\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        if (pred(x, i)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n    var foldr = function (xs, f, acc) {\n      eachr(xs, function (x, i) {\n        acc = f(acc, x, i);\n      });\n      return acc;\n    };\n    var foldl = function (xs, f, acc) {\n      each$k(xs, function (x, i) {\n        acc = f(acc, x, i);\n      });\n      return acc;\n    };\n    var findUntil$1 = function (xs, pred, until) {\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(x);\n        } else if (until(x, i)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    var find$3 = function (xs, pred) {\n      return findUntil$1(xs, pred, never);\n    };\n    var findIndex$2 = function (xs, pred) {\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(i);\n        }\n      }\n      return Optional.none();\n    };\n    var flatten = function (xs) {\n      var r = [];\n      for (var i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray$1(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    var bind = function (xs, f) {\n      return flatten(map$3(xs, f));\n    };\n    var forall = function (xs, pred) {\n      for (var i = 0, len = xs.length; i < len; ++i) {\n        var x = xs[i];\n        if (pred(x, i) !== true) {\n          return false;\n        }\n      }\n      return true;\n    };\n    var reverse = function (xs) {\n      var r = nativeSlice.call(xs, 0);\n      r.reverse();\n      return r;\n    };\n    var difference = function (a1, a2) {\n      return filter$4(a1, function (x) {\n        return !contains$3(a2, x);\n      });\n    };\n    var mapToObject = function (xs, f) {\n      var r = {};\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        r[String(x)] = f(x, i);\n      }\n      return r;\n    };\n    var sort = function (xs, comparator) {\n      var copy = nativeSlice.call(xs, 0);\n      copy.sort(comparator);\n      return copy;\n    };\n    var get$a = function (xs, i) {\n      return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n    };\n    var head = function (xs) {\n      return get$a(xs, 0);\n    };\n    var last$2 = function (xs) {\n      return get$a(xs, xs.length - 1);\n    };\n    var from = isFunction(Array.from) ? Array.from : function (x) {\n      return nativeSlice.call(x);\n    };\n    var findMap = function (arr, f) {\n      for (var i = 0; i < arr.length; i++) {\n        var r = f(arr[i], i);\n        if (r.isSome()) {\n          return r;\n        }\n      }\n      return Optional.none();\n    };\n\n    var keys = Object.keys;\n    var hasOwnProperty$1 = Object.hasOwnProperty;\n    var each$j = function (obj, f) {\n      var props = keys(obj);\n      for (var k = 0, len = props.length; k < len; k++) {\n        var i = props[k];\n        var x = obj[i];\n        f(x, i);\n      }\n    };\n    var map$2 = function (obj, f) {\n      return tupleMap(obj, function (x, i) {\n        return {\n          k: i,\n          v: f(x, i)\n        };\n      });\n    };\n    var tupleMap = function (obj, f) {\n      var r = {};\n      each$j(obj, function (x, i) {\n        var tuple = f(x, i);\n        r[tuple.k] = tuple.v;\n      });\n      return r;\n    };\n    var objAcc = function (r) {\n      return function (x, i) {\n        r[i] = x;\n      };\n    };\n    var internalFilter = function (obj, pred, onTrue, onFalse) {\n      var r = {};\n      each$j(obj, function (x, i) {\n        (pred(x, i) ? onTrue : onFalse)(x, i);\n      });\n      return r;\n    };\n    var bifilter = function (obj, pred) {\n      var t = {};\n      var f = {};\n      internalFilter(obj, pred, objAcc(t), objAcc(f));\n      return {\n        t: t,\n        f: f\n      };\n    };\n    var filter$3 = function (obj, pred) {\n      var t = {};\n      internalFilter(obj, pred, objAcc(t), noop);\n      return t;\n    };\n    var mapToArray = function (obj, f) {\n      var r = [];\n      each$j(obj, function (value, name) {\n        r.push(f(value, name));\n      });\n      return r;\n    };\n    var values = function (obj) {\n      return mapToArray(obj, identity);\n    };\n    var get$9 = function (obj, key) {\n      return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n    };\n    var has$2 = function (obj, key) {\n      return hasOwnProperty$1.call(obj, key);\n    };\n    var hasNonNullableKey = function (obj, key) {\n      return has$2(obj, key) && obj[key] !== undefined && obj[key] !== null;\n    };\n    var equal$1 = function (a1, a2, eq) {\n      if (eq === void 0) {\n        eq = eqAny;\n      }\n      return eqRecord(eq).eq(a1, a2);\n    };\n\n    var isArray = Array.isArray;\n    var toArray$1 = function (obj) {\n      if (!isArray(obj)) {\n        var array = [];\n        for (var i = 0, l = obj.length; i < l; i++) {\n          array[i] = obj[i];\n        }\n        return array;\n      } else {\n        return obj;\n      }\n    };\n    var each$i = function (o, cb, s) {\n      var n, l;\n      if (!o) {\n        return false;\n      }\n      s = s || o;\n      if (o.length !== undefined) {\n        for (n = 0, l = o.length; n < l; n++) {\n          if (cb.call(s, o[n], n, o) === false) {\n            return false;\n          }\n        }\n      } else {\n        for (n in o) {\n          if (has$2(o, n)) {\n            if (cb.call(s, o[n], n, o) === false) {\n              return false;\n            }\n          }\n        }\n      }\n      return true;\n    };\n    var map$1 = function (array, callback) {\n      var out = [];\n      each$i(array, function (item, index) {\n        out.push(callback(item, index, array));\n      });\n      return out;\n    };\n    var filter$2 = function (a, f) {\n      var o = [];\n      each$i(a, function (v, index) {\n        if (!f || f(v, index, a)) {\n          o.push(v);\n        }\n      });\n      return o;\n    };\n    var indexOf$1 = function (a, v) {\n      if (a) {\n        for (var i = 0, l = a.length; i < l; i++) {\n          if (a[i] === v) {\n            return i;\n          }\n        }\n      }\n      return -1;\n    };\n    var reduce = function (collection, iteratee, accumulator, thisArg) {\n      var acc = isUndefined(accumulator) ? collection[0] : accumulator;\n      for (var i = 0; i < collection.length; i++) {\n        acc = iteratee.call(thisArg, acc, collection[i], i);\n      }\n      return acc;\n    };\n    var findIndex$1 = function (array, predicate, thisArg) {\n      var i, l;\n      for (i = 0, l = array.length; i < l; i++) {\n        if (predicate.call(thisArg, array[i], i, array)) {\n          return i;\n        }\n      }\n      return -1;\n    };\n    var last$1 = function (collection) {\n      return collection[collection.length - 1];\n    };\n\n    var __assign = function () {\n      __assign = Object.assign || function __assign(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s)\n            if (Object.prototype.hasOwnProperty.call(s, p))\n              t[p] = s[p];\n        }\n        return t;\n      };\n      return __assign.apply(this, arguments);\n    };\n    function __rest(s, e) {\n      var t = {};\n      for (var p in s)\n        if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n          t[p] = s[p];\n      if (s != null && typeof Object.getOwnPropertySymbols === 'function')\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n            t[p[i]] = s[p[i]];\n        }\n      return t;\n    }\n    function __spreadArray(to, from, pack) {\n      if (pack || arguments.length === 2)\n        for (var i = 0, l = from.length, ar; i < l; i++) {\n          if (ar || !(i in from)) {\n            if (!ar)\n              ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n          }\n        }\n      return to.concat(ar || Array.prototype.slice.call(from));\n    }\n\n    var cached = function (f) {\n      var called = false;\n      var r;\n      return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n        if (!called) {\n          called = true;\n          r = f.apply(null, args);\n        }\n        return r;\n      };\n    };\n\n    var DeviceType = function (os, browser, userAgent, mediaMatch) {\n      var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n      var isiPhone = os.isiOS() && !isiPad;\n      var isMobile = os.isiOS() || os.isAndroid();\n      var isTouch = isMobile || mediaMatch('(pointer:coarse)');\n      var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n      var isPhone = isiPhone || isMobile && !isTablet;\n      var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n      var isDesktop = !isPhone && !isTablet && !iOSwebview;\n      return {\n        isiPad: constant(isiPad),\n        isiPhone: constant(isiPhone),\n        isTablet: constant(isTablet),\n        isPhone: constant(isPhone),\n        isTouch: constant(isTouch),\n        isAndroid: os.isAndroid,\n        isiOS: os.isiOS,\n        isWebView: constant(iOSwebview),\n        isDesktop: constant(isDesktop)\n      };\n    };\n\n    var firstMatch = function (regexes, s) {\n      for (var i = 0; i < regexes.length; i++) {\n        var x = regexes[i];\n        if (x.test(s)) {\n          return x;\n        }\n      }\n      return undefined;\n    };\n    var find$2 = function (regexes, agent) {\n      var r = firstMatch(regexes, agent);\n      if (!r) {\n        return {\n          major: 0,\n          minor: 0\n        };\n      }\n      var group = function (i) {\n        return Number(agent.replace(r, '$' + i));\n      };\n      return nu$4(group(1), group(2));\n    };\n    var detect$3 = function (versionRegexes, agent) {\n      var cleanedAgent = String(agent).toLowerCase();\n      if (versionRegexes.length === 0) {\n        return unknown$2();\n      }\n      return find$2(versionRegexes, cleanedAgent);\n    };\n    var unknown$2 = function () {\n      return nu$4(0, 0);\n    };\n    var nu$4 = function (major, minor) {\n      return {\n        major: major,\n        minor: minor\n      };\n    };\n    var Version = {\n      nu: nu$4,\n      detect: detect$3,\n      unknown: unknown$2\n    };\n\n    var detectBrowser$1 = function (browsers, userAgentData) {\n      return findMap(userAgentData.brands, function (uaBrand) {\n        var lcBrand = uaBrand.brand.toLowerCase();\n        return find$3(browsers, function (browser) {\n          var _a;\n          return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n        }).map(function (info) {\n          return {\n            current: info.name,\n            version: Version.nu(parseInt(uaBrand.version, 10), 0)\n          };\n        });\n      });\n    };\n\n    var detect$2 = function (candidates, userAgent) {\n      var agent = String(userAgent).toLowerCase();\n      return find$3(candidates, function (candidate) {\n        return candidate.search(agent);\n      });\n    };\n    var detectBrowser = function (browsers, userAgent) {\n      return detect$2(browsers, userAgent).map(function (browser) {\n        var version = Version.detect(browser.versionRegexes, userAgent);\n        return {\n          current: browser.name,\n          version: version\n        };\n      });\n    };\n    var detectOs = function (oses, userAgent) {\n      return detect$2(oses, userAgent).map(function (os) {\n        var version = Version.detect(os.versionRegexes, userAgent);\n        return {\n          current: os.name,\n          version: version\n        };\n      });\n    };\n\n    var removeFromStart = function (str, numChars) {\n      return str.substring(numChars);\n    };\n\n    var checkRange = function (str, substr, start) {\n      return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n    };\n    var removeLeading = function (str, prefix) {\n      return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n    };\n    var contains$2 = function (str, substr) {\n      return str.indexOf(substr) !== -1;\n    };\n    var startsWith = function (str, prefix) {\n      return checkRange(str, prefix, 0);\n    };\n    var blank = function (r) {\n      return function (s) {\n        return s.replace(r, '');\n      };\n    };\n    var trim$4 = blank(/^\\s+|\\s+$/g);\n    var lTrim = blank(/^\\s+/g);\n    var rTrim = blank(/\\s+$/g);\n    var isNotEmpty = function (s) {\n      return s.length > 0;\n    };\n    var isEmpty$3 = function (s) {\n      return !isNotEmpty(s);\n    };\n\n    var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n    var checkContains = function (target) {\n      return function (uastring) {\n        return contains$2(uastring, target);\n      };\n    };\n    var browsers = [\n      {\n        name: 'Edge',\n        versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n        search: function (uastring) {\n          return contains$2(uastring, 'edge/') && contains$2(uastring, 'chrome') && contains$2(uastring, 'safari') && contains$2(uastring, 'applewebkit');\n        }\n      },\n      {\n        name: 'Chrome',\n        brand: 'Chromium',\n        versionRegexes: [\n          /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n          normalVersionRegex\n        ],\n        search: function (uastring) {\n          return contains$2(uastring, 'chrome') && !contains$2(uastring, 'chromeframe');\n        }\n      },\n      {\n        name: 'IE',\n        versionRegexes: [\n          /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*?rv:([0-9]+)\\.([0-9]+).*/\n        ],\n        search: function (uastring) {\n          return contains$2(uastring, 'msie') || contains$2(uastring, 'trident');\n        }\n      },\n      {\n        name: 'Opera',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n        ],\n        search: checkContains('opera')\n      },\n      {\n        name: 'Firefox',\n        versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n        search: checkContains('firefox')\n      },\n      {\n        name: 'Safari',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?cpu os ([0-9]+)_([0-9]+).*/\n        ],\n        search: function (uastring) {\n          return (contains$2(uastring, 'safari') || contains$2(uastring, 'mobile/')) && contains$2(uastring, 'applewebkit');\n        }\n      }\n    ];\n    var oses = [\n      {\n        name: 'Windows',\n        search: checkContains('win'),\n        versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'iOS',\n        search: function (uastring) {\n          return contains$2(uastring, 'iphone') || contains$2(uastring, 'ipad');\n        },\n        versionRegexes: [\n          /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*cpu os ([0-9]+)_([0-9]+).*/,\n          /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n        ]\n      },\n      {\n        name: 'Android',\n        search: checkContains('android'),\n        versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'OSX',\n        search: checkContains('mac os x'),\n        versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n      },\n      {\n        name: 'Linux',\n        search: checkContains('linux'),\n        versionRegexes: []\n      },\n      {\n        name: 'Solaris',\n        search: checkContains('sunos'),\n        versionRegexes: []\n      },\n      {\n        name: 'FreeBSD',\n        search: checkContains('freebsd'),\n        versionRegexes: []\n      },\n      {\n        name: 'ChromeOS',\n        search: checkContains('cros'),\n        versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n      }\n    ];\n    var PlatformInfo = {\n      browsers: constant(browsers),\n      oses: constant(oses)\n    };\n\n    var edge = 'Edge';\n    var chrome = 'Chrome';\n    var ie$1 = 'IE';\n    var opera = 'Opera';\n    var firefox = 'Firefox';\n    var safari = 'Safari';\n    var unknown$1 = function () {\n      return nu$3({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    var nu$3 = function (info) {\n      var current = info.current;\n      var version = info.version;\n      var isBrowser = function (name) {\n        return function () {\n          return current === name;\n        };\n      };\n      return {\n        current: current,\n        version: version,\n        isEdge: isBrowser(edge),\n        isChrome: isBrowser(chrome),\n        isIE: isBrowser(ie$1),\n        isOpera: isBrowser(opera),\n        isFirefox: isBrowser(firefox),\n        isSafari: isBrowser(safari)\n      };\n    };\n    var Browser = {\n      unknown: unknown$1,\n      nu: nu$3,\n      edge: constant(edge),\n      chrome: constant(chrome),\n      ie: constant(ie$1),\n      opera: constant(opera),\n      firefox: constant(firefox),\n      safari: constant(safari)\n    };\n\n    var windows = 'Windows';\n    var ios = 'iOS';\n    var android = 'Android';\n    var linux = 'Linux';\n    var osx = 'OSX';\n    var solaris = 'Solaris';\n    var freebsd = 'FreeBSD';\n    var chromeos = 'ChromeOS';\n    var unknown = function () {\n      return nu$2({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    var nu$2 = function (info) {\n      var current = info.current;\n      var version = info.version;\n      var isOS = function (name) {\n        return function () {\n          return current === name;\n        };\n      };\n      return {\n        current: current,\n        version: version,\n        isWindows: isOS(windows),\n        isiOS: isOS(ios),\n        isAndroid: isOS(android),\n        isOSX: isOS(osx),\n        isLinux: isOS(linux),\n        isSolaris: isOS(solaris),\n        isFreeBSD: isOS(freebsd),\n        isChromeOS: isOS(chromeos)\n      };\n    };\n    var OperatingSystem = {\n      unknown: unknown,\n      nu: nu$2,\n      windows: constant(windows),\n      ios: constant(ios),\n      android: constant(android),\n      linux: constant(linux),\n      osx: constant(osx),\n      solaris: constant(solaris),\n      freebsd: constant(freebsd),\n      chromeos: constant(chromeos)\n    };\n\n    var detect$1 = function (userAgent, userAgentDataOpt, mediaMatch) {\n      var browsers = PlatformInfo.browsers();\n      var oses = PlatformInfo.oses();\n      var browser = userAgentDataOpt.bind(function (userAgentData) {\n        return detectBrowser$1(browsers, userAgentData);\n      }).orThunk(function () {\n        return detectBrowser(browsers, userAgent);\n      }).fold(Browser.unknown, Browser.nu);\n      var os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n      var deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n      return {\n        browser: browser,\n        os: os,\n        deviceType: deviceType\n      };\n    };\n    var PlatformDetection = { detect: detect$1 };\n\n    var mediaMatch = function (query) {\n      return window.matchMedia(query).matches;\n    };\n    var platform$2 = cached(function () {\n      return PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch);\n    });\n    var detect = function () {\n      return platform$2();\n    };\n\n    var userAgent = navigator.userAgent;\n    var platform$1 = detect();\n    var browser$4 = platform$1.browser;\n    var os = platform$1.os;\n    var deviceType = platform$1.deviceType;\n    var webkit = /WebKit/.test(userAgent) && !browser$4.isEdge();\n    var fileApi = 'FormData' in window && 'FileReader' in window && 'URL' in window && !!URL.createObjectURL;\n    var windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\n    var Env = {\n      opera: browser$4.isOpera(),\n      webkit: webkit,\n      ie: browser$4.isIE() || browser$4.isEdge() ? browser$4.version.major : false,\n      gecko: browser$4.isFirefox(),\n      mac: os.isOSX() || os.isiOS(),\n      iOS: deviceType.isiPad() || deviceType.isiPhone(),\n      android: os.isAndroid(),\n      contentEditable: true,\n      transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\n      caretAfter: true,\n      range: window.getSelection && 'Range' in window,\n      documentMode: browser$4.isIE() ? document.documentMode || 7 : 10,\n      fileApi: fileApi,\n      ceFalse: true,\n      cacheSuffix: null,\n      container: null,\n      experimentalShadowDom: false,\n      canHaveCSP: !browser$4.isIE(),\n      desktop: deviceType.isDesktop(),\n      windowsPhone: windowsPhone,\n      browser: {\n        current: browser$4.current,\n        version: browser$4.version,\n        isChrome: browser$4.isChrome,\n        isEdge: browser$4.isEdge,\n        isFirefox: browser$4.isFirefox,\n        isIE: browser$4.isIE,\n        isOpera: browser$4.isOpera,\n        isSafari: browser$4.isSafari\n      },\n      os: {\n        current: os.current,\n        version: os.version,\n        isAndroid: os.isAndroid,\n        isChromeOS: os.isChromeOS,\n        isFreeBSD: os.isFreeBSD,\n        isiOS: os.isiOS,\n        isLinux: os.isLinux,\n        isOSX: os.isOSX,\n        isSolaris: os.isSolaris,\n        isWindows: os.isWindows\n      },\n      deviceType: {\n        isDesktop: deviceType.isDesktop,\n        isiPad: deviceType.isiPad,\n        isiPhone: deviceType.isiPhone,\n        isPhone: deviceType.isPhone,\n        isTablet: deviceType.isTablet,\n        isTouch: deviceType.isTouch,\n        isWebView: deviceType.isWebView\n      }\n    };\n\n    var whiteSpaceRegExp$2 = /^\\s*|\\s*$/g;\n    var trim$3 = function (str) {\n      return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$2, '');\n    };\n    var is$3 = function (obj, type) {\n      if (!type) {\n        return obj !== undefined;\n      }\n      if (type === 'array' && isArray(obj)) {\n        return true;\n      }\n      return typeof obj === type;\n    };\n    var makeMap$4 = function (items, delim, map) {\n      var i;\n      items = items || [];\n      delim = delim || ',';\n      if (typeof items === 'string') {\n        items = items.split(delim);\n      }\n      map = map || {};\n      i = items.length;\n      while (i--) {\n        map[items[i]] = {};\n      }\n      return map;\n    };\n    var hasOwnProperty = has$2;\n    var create$9 = function (s, p, root) {\n      var self = this;\n      var sp, scn, c, de = 0;\n      s = /^((static) )?([\\w.]+)(:([\\w.]+))?/.exec(s);\n      var cn = s[3].match(/(^|\\.)(\\w+)$/i)[2];\n      var ns = self.createNS(s[3].replace(/\\.\\w+$/, ''), root);\n      if (ns[cn]) {\n        return;\n      }\n      if (s[2] === 'static') {\n        ns[cn] = p;\n        if (this.onCreate) {\n          this.onCreate(s[2], s[3], ns[cn]);\n        }\n        return;\n      }\n      if (!p[cn]) {\n        p[cn] = function () {\n        };\n        de = 1;\n      }\n      ns[cn] = p[cn];\n      self.extend(ns[cn].prototype, p);\n      if (s[5]) {\n        sp = self.resolve(s[5]).prototype;\n        scn = s[5].match(/\\.(\\w+)$/i)[1];\n        c = ns[cn];\n        if (de) {\n          ns[cn] = function () {\n            return sp[scn].apply(this, arguments);\n          };\n        } else {\n          ns[cn] = function () {\n            this.parent = sp[scn];\n            return c.apply(this, arguments);\n          };\n        }\n        ns[cn].prototype[cn] = ns[cn];\n        self.each(sp, function (f, n) {\n          ns[cn].prototype[n] = sp[n];\n        });\n        self.each(p, function (f, n) {\n          if (sp[n]) {\n            ns[cn].prototype[n] = function () {\n              this.parent = sp[n];\n              return f.apply(this, arguments);\n            };\n          } else {\n            if (n !== cn) {\n              ns[cn].prototype[n] = f;\n            }\n          }\n        });\n      }\n      self.each(p.static, function (f, n) {\n        ns[cn][n] = f;\n      });\n    };\n    var extend$6 = function (obj) {\n      var exts = [];\n      for (var _i = 1; _i < arguments.length; _i++) {\n        exts[_i - 1] = arguments[_i];\n      }\n      for (var i = 0; i < exts.length; i++) {\n        var ext = exts[i];\n        for (var name_1 in ext) {\n          if (has$2(ext, name_1)) {\n            var value = ext[name_1];\n            if (value !== undefined) {\n              obj[name_1] = value;\n            }\n          }\n        }\n      }\n      return obj;\n    };\n    var walk$3 = function (o, f, n, s) {\n      s = s || this;\n      if (o) {\n        if (n) {\n          o = o[n];\n        }\n        each$i(o, function (o, i) {\n          if (f.call(s, o, i, n) === false) {\n            return false;\n          }\n          walk$3(o, f, n, s);\n        });\n      }\n    };\n    var createNS = function (n, o) {\n      var i, v;\n      o = o || window;\n      n = n.split('.');\n      for (i = 0; i < n.length; i++) {\n        v = n[i];\n        if (!o[v]) {\n          o[v] = {};\n        }\n        o = o[v];\n      }\n      return o;\n    };\n    var resolve$3 = function (n, o) {\n      var i, l;\n      o = o || window;\n      n = n.split('.');\n      for (i = 0, l = n.length; i < l; i++) {\n        o = o[n[i]];\n        if (!o) {\n          break;\n        }\n      }\n      return o;\n    };\n    var explode$4 = function (s, d) {\n      if (!s || is$3(s, 'array')) {\n        return s;\n      }\n      return map$1(s.split(d || ','), trim$3);\n    };\n    var _addCacheSuffix = function (url) {\n      var cacheSuffix = Env.cacheSuffix;\n      if (cacheSuffix) {\n        url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;\n      }\n      return url;\n    };\n    var Tools = {\n      trim: trim$3,\n      isArray: isArray,\n      is: is$3,\n      toArray: toArray$1,\n      makeMap: makeMap$4,\n      each: each$i,\n      map: map$1,\n      grep: filter$2,\n      inArray: indexOf$1,\n      hasOwn: hasOwnProperty,\n      extend: extend$6,\n      create: create$9,\n      walk: walk$3,\n      createNS: createNS,\n      resolve: resolve$3,\n      explode: explode$4,\n      _addCacheSuffix: _addCacheSuffix\n    };\n\n    var fromHtml$1 = function (html, scope) {\n      var doc = scope || document;\n      var div = doc.createElement('div');\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        console.error('HTML does not have a single root node', html);\n        throw new Error('HTML must have a single root node');\n      }\n      return fromDom$2(div.childNodes[0]);\n    };\n    var fromTag = function (tag, scope) {\n      var doc = scope || document;\n      var node = doc.createElement(tag);\n      return fromDom$2(node);\n    };\n    var fromText = function (text, scope) {\n      var doc = scope || document;\n      var node = doc.createTextNode(text);\n      return fromDom$2(node);\n    };\n    var fromDom$2 = function (node) {\n      if (node === null || node === undefined) {\n        throw new Error('Node cannot be null or undefined');\n      }\n      return { dom: node };\n    };\n    var fromPoint$1 = function (docElm, x, y) {\n      return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$2);\n    };\n    var SugarElement = {\n      fromHtml: fromHtml$1,\n      fromTag: fromTag,\n      fromText: fromText,\n      fromDom: fromDom$2,\n      fromPoint: fromPoint$1\n    };\n\n    var toArray = function (target, f) {\n      var r = [];\n      var recurse = function (e) {\n        r.push(e);\n        return f(e);\n      };\n      var cur = f(target);\n      do {\n        cur = cur.bind(recurse);\n      } while (cur.isSome());\n      return r;\n    };\n\n    var compareDocumentPosition = function (a, b, match) {\n      return (a.compareDocumentPosition(b) & match) !== 0;\n    };\n    var documentPositionContainedBy = function (a, b) {\n      return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_CONTAINED_BY);\n    };\n\n    var COMMENT = 8;\n    var DOCUMENT = 9;\n    var DOCUMENT_FRAGMENT = 11;\n    var ELEMENT = 1;\n    var TEXT = 3;\n\n    var is$2 = function (element, selector) {\n      var dom = element.dom;\n      if (dom.nodeType !== ELEMENT) {\n        return false;\n      } else {\n        var elem = dom;\n        if (elem.matches !== undefined) {\n          return elem.matches(selector);\n        } else if (elem.msMatchesSelector !== undefined) {\n          return elem.msMatchesSelector(selector);\n        } else if (elem.webkitMatchesSelector !== undefined) {\n          return elem.webkitMatchesSelector(selector);\n        } else if (elem.mozMatchesSelector !== undefined) {\n          return elem.mozMatchesSelector(selector);\n        } else {\n          throw new Error('Browser lacks native selectors');\n        }\n      }\n    };\n    var bypassSelector = function (dom) {\n      return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n    };\n    var all = function (selector, scope) {\n      var base = scope === undefined ? document : scope.dom;\n      return bypassSelector(base) ? [] : map$3(base.querySelectorAll(selector), SugarElement.fromDom);\n    };\n    var one = function (selector, scope) {\n      var base = scope === undefined ? document : scope.dom;\n      return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n    };\n\n    var eq = function (e1, e2) {\n      return e1.dom === e2.dom;\n    };\n    var regularContains = function (e1, e2) {\n      var d1 = e1.dom;\n      var d2 = e2.dom;\n      return d1 === d2 ? false : d1.contains(d2);\n    };\n    var ieContains = function (e1, e2) {\n      return documentPositionContainedBy(e1.dom, e2.dom);\n    };\n    var contains$1 = function (e1, e2) {\n      return detect().browser.isIE() ? ieContains(e1, e2) : regularContains(e1, e2);\n    };\n\n    typeof window !== 'undefined' ? window : Function('return this;')();\n\n    var name = function (element) {\n      var r = element.dom.nodeName;\n      return r.toLowerCase();\n    };\n    var type = function (element) {\n      return element.dom.nodeType;\n    };\n    var isType = function (t) {\n      return function (element) {\n        return type(element) === t;\n      };\n    };\n    var isComment$1 = function (element) {\n      return type(element) === COMMENT || name(element) === '#comment';\n    };\n    var isElement$6 = isType(ELEMENT);\n    var isText$8 = isType(TEXT);\n    var isDocument$2 = isType(DOCUMENT);\n    var isDocumentFragment$1 = isType(DOCUMENT_FRAGMENT);\n    var isTag = function (tag) {\n      return function (e) {\n        return isElement$6(e) && name(e) === tag;\n      };\n    };\n\n    var owner$1 = function (element) {\n      return SugarElement.fromDom(element.dom.ownerDocument);\n    };\n    var documentOrOwner = function (dos) {\n      return isDocument$2(dos) ? dos : owner$1(dos);\n    };\n    var documentElement = function (element) {\n      return SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n    };\n    var defaultView = function (element) {\n      return SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n    };\n    var parent = function (element) {\n      return Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n    };\n    var parents$1 = function (element, isRoot) {\n      var stop = isFunction(isRoot) ? isRoot : never;\n      var dom = element.dom;\n      var ret = [];\n      while (dom.parentNode !== null && dom.parentNode !== undefined) {\n        var rawParent = dom.parentNode;\n        var p = SugarElement.fromDom(rawParent);\n        ret.push(p);\n        if (stop(p) === true) {\n          break;\n        } else {\n          dom = rawParent;\n        }\n      }\n      return ret;\n    };\n    var siblings = function (element) {\n      var filterSelf = function (elements) {\n        return filter$4(elements, function (x) {\n          return !eq(element, x);\n        });\n      };\n      return parent(element).map(children).map(filterSelf).getOr([]);\n    };\n    var prevSibling = function (element) {\n      return Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n    };\n    var nextSibling = function (element) {\n      return Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n    };\n    var prevSiblings = function (element) {\n      return reverse(toArray(element, prevSibling));\n    };\n    var nextSiblings = function (element) {\n      return toArray(element, nextSibling);\n    };\n    var children = function (element) {\n      return map$3(element.dom.childNodes, SugarElement.fromDom);\n    };\n    var child$1 = function (element, index) {\n      var cs = element.dom.childNodes;\n      return Optional.from(cs[index]).map(SugarElement.fromDom);\n    };\n    var firstChild = function (element) {\n      return child$1(element, 0);\n    };\n    var lastChild = function (element) {\n      return child$1(element, element.dom.childNodes.length - 1);\n    };\n    var childNodesCount = function (element) {\n      return element.dom.childNodes.length;\n    };\n\n    var getHead = function (doc) {\n      var b = doc.dom.head;\n      if (b === null || b === undefined) {\n        throw new Error('Head is not available yet');\n      }\n      return SugarElement.fromDom(b);\n    };\n\n    var isShadowRoot = function (dos) {\n      return isDocumentFragment$1(dos) && isNonNullable(dos.dom.host);\n    };\n    var supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n    var isSupported$1 = constant(supported);\n    var getRootNode = supported ? function (e) {\n      return SugarElement.fromDom(e.dom.getRootNode());\n    } : documentOrOwner;\n    var getStyleContainer = function (dos) {\n      return isShadowRoot(dos) ? dos : getHead(documentOrOwner(dos));\n    };\n    var getShadowRoot = function (e) {\n      var r = getRootNode(e);\n      return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n    };\n    var getShadowHost = function (e) {\n      return SugarElement.fromDom(e.dom.host);\n    };\n    var getOriginalEventTarget = function (event) {\n      if (isSupported$1() && isNonNullable(event.target)) {\n        var el = SugarElement.fromDom(event.target);\n        if (isElement$6(el) && isOpenShadowHost(el)) {\n          if (event.composed && event.composedPath) {\n            var composedPath = event.composedPath();\n            if (composedPath) {\n              return head(composedPath);\n            }\n          }\n        }\n      }\n      return Optional.from(event.target);\n    };\n    var isOpenShadowHost = function (element) {\n      return isNonNullable(element.dom.shadowRoot);\n    };\n\n    var before$4 = function (marker, element) {\n      var parent$1 = parent(marker);\n      parent$1.each(function (v) {\n        v.dom.insertBefore(element.dom, marker.dom);\n      });\n    };\n    var after$3 = function (marker, element) {\n      var sibling = nextSibling(marker);\n      sibling.fold(function () {\n        var parent$1 = parent(marker);\n        parent$1.each(function (v) {\n          append$1(v, element);\n        });\n      }, function (v) {\n        before$4(v, element);\n      });\n    };\n    var prepend = function (parent, element) {\n      var firstChild$1 = firstChild(parent);\n      firstChild$1.fold(function () {\n        append$1(parent, element);\n      }, function (v) {\n        parent.dom.insertBefore(element.dom, v.dom);\n      });\n    };\n    var append$1 = function (parent, element) {\n      parent.dom.appendChild(element.dom);\n    };\n    var wrap$3 = function (element, wrapper) {\n      before$4(element, wrapper);\n      append$1(wrapper, element);\n    };\n\n    var before$3 = function (marker, elements) {\n      each$k(elements, function (x) {\n        before$4(marker, x);\n      });\n    };\n    var append = function (parent, elements) {\n      each$k(elements, function (x) {\n        append$1(parent, x);\n      });\n    };\n\n    var empty = function (element) {\n      element.dom.textContent = '';\n      each$k(children(element), function (rogue) {\n        remove$7(rogue);\n      });\n    };\n    var remove$7 = function (element) {\n      var dom = element.dom;\n      if (dom.parentNode !== null) {\n        dom.parentNode.removeChild(dom);\n      }\n    };\n    var unwrap = function (wrapper) {\n      var children$1 = children(wrapper);\n      if (children$1.length > 0) {\n        before$3(wrapper, children$1);\n      }\n      remove$7(wrapper);\n    };\n\n    var inBody = function (element) {\n      var dom = isText$8(element) ? element.dom.parentNode : element.dom;\n      if (dom === undefined || dom === null || dom.ownerDocument === null) {\n        return false;\n      }\n      var doc = dom.ownerDocument;\n      return getShadowRoot(SugarElement.fromDom(dom)).fold(function () {\n        return doc.body.contains(dom);\n      }, compose1(inBody, getShadowHost));\n    };\n\n    var r = function (left, top) {\n      var translate = function (x, y) {\n        return r(left + x, top + y);\n      };\n      return {\n        left: left,\n        top: top,\n        translate: translate\n      };\n    };\n    var SugarPosition = r;\n\n    var boxPosition = function (dom) {\n      var box = dom.getBoundingClientRect();\n      return SugarPosition(box.left, box.top);\n    };\n    var firstDefinedOrZero = function (a, b) {\n      if (a !== undefined) {\n        return a;\n      } else {\n        return b !== undefined ? b : 0;\n      }\n    };\n    var absolute = function (element) {\n      var doc = element.dom.ownerDocument;\n      var body = doc.body;\n      var win = doc.defaultView;\n      var html = doc.documentElement;\n      if (body === element.dom) {\n        return SugarPosition(body.offsetLeft, body.offsetTop);\n      }\n      var scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n      var scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n      var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n      var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n      return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n    };\n    var viewport = function (element) {\n      var dom = element.dom;\n      var doc = dom.ownerDocument;\n      var body = doc.body;\n      if (body === dom) {\n        return SugarPosition(body.offsetLeft, body.offsetTop);\n      }\n      if (!inBody(element)) {\n        return SugarPosition(0, 0);\n      }\n      return boxPosition(dom);\n    };\n\n    var get$8 = function (_DOC) {\n      var doc = _DOC !== undefined ? _DOC.dom : document;\n      var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n      var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n      return SugarPosition(x, y);\n    };\n    var to = function (x, y, _DOC) {\n      var doc = _DOC !== undefined ? _DOC.dom : document;\n      var win = doc.defaultView;\n      if (win) {\n        win.scrollTo(x, y);\n      }\n    };\n    var intoView = function (element, alignToTop) {\n      var isSafari = detect().browser.isSafari();\n      if (isSafari && isFunction(element.dom.scrollIntoViewIfNeeded)) {\n        element.dom.scrollIntoViewIfNeeded(false);\n      } else {\n        element.dom.scrollIntoView(alignToTop);\n      }\n    };\n\n    var get$7 = function (_win) {\n      var win = _win === undefined ? window : _win;\n      if (detect().browser.isFirefox()) {\n        return Optional.none();\n      } else {\n        return Optional.from(win['visualViewport']);\n      }\n    };\n    var bounds = function (x, y, width, height) {\n      return {\n        x: x,\n        y: y,\n        width: width,\n        height: height,\n        right: x + width,\n        bottom: y + height\n      };\n    };\n    var getBounds = function (_win) {\n      var win = _win === undefined ? window : _win;\n      var doc = win.document;\n      var scroll = get$8(SugarElement.fromDom(doc));\n      return get$7(win).fold(function () {\n        var html = win.document.documentElement;\n        var width = html.clientWidth;\n        var height = html.clientHeight;\n        return bounds(scroll.left, scroll.top, width, height);\n      }, function (visualViewport) {\n        return bounds(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height);\n      });\n    };\n\n    var isNodeType = function (type) {\n      return function (node) {\n        return !!node && node.nodeType === type;\n      };\n    };\n    var isRestrictedNode = function (node) {\n      return !!node && !Object.getPrototypeOf(node);\n    };\n    var isElement$5 = isNodeType(1);\n    var matchNodeNames = function (names) {\n      var lowercasedNames = names.map(function (s) {\n        return s.toLowerCase();\n      });\n      return function (node) {\n        if (node && node.nodeName) {\n          var nodeName = node.nodeName.toLowerCase();\n          return contains$3(lowercasedNames, nodeName);\n        }\n        return false;\n      };\n    };\n    var matchStyleValues = function (name, values) {\n      var items = values.toLowerCase().split(' ');\n      return function (node) {\n        if (isElement$5(node)) {\n          for (var i = 0; i < items.length; i++) {\n            var computed = node.ownerDocument.defaultView.getComputedStyle(node, null);\n            var cssValue = computed ? computed.getPropertyValue(name) : null;\n            if (cssValue === items[i]) {\n              return true;\n            }\n          }\n        }\n        return false;\n      };\n    };\n    var hasAttribute = function (attrName) {\n      return function (node) {\n        return isElement$5(node) && node.hasAttribute(attrName);\n      };\n    };\n    var hasAttributeValue = function (attrName, attrValue) {\n      return function (node) {\n        return isElement$5(node) && node.getAttribute(attrName) === attrValue;\n      };\n    };\n    var isBogus$2 = function (node) {\n      return isElement$5(node) && node.hasAttribute('data-mce-bogus');\n    };\n    var isBogusAll$1 = function (node) {\n      return isElement$5(node) && node.getAttribute('data-mce-bogus') === 'all';\n    };\n    var isTable$3 = function (node) {\n      return isElement$5(node) && node.tagName === 'TABLE';\n    };\n    var hasContentEditableState = function (value) {\n      return function (node) {\n        if (isElement$5(node)) {\n          if (node.contentEditable === value) {\n            return true;\n          }\n          if (node.getAttribute('data-mce-contenteditable') === value) {\n            return true;\n          }\n        }\n        return false;\n      };\n    };\n    var isTextareaOrInput = matchNodeNames([\n      'textarea',\n      'input'\n    ]);\n    var isText$7 = isNodeType(3);\n    var isComment = isNodeType(8);\n    var isDocument$1 = isNodeType(9);\n    var isDocumentFragment = isNodeType(11);\n    var isBr$5 = matchNodeNames(['br']);\n    var isImg = matchNodeNames(['img']);\n    var isContentEditableTrue$4 = hasContentEditableState('true');\n    var isContentEditableFalse$b = hasContentEditableState('false');\n    var isTableCell$5 = matchNodeNames([\n      'td',\n      'th'\n    ]);\n    var isMedia$2 = matchNodeNames([\n      'video',\n      'audio',\n      'object',\n      'embed'\n    ]);\n\n    var is$1 = function (lhs, rhs, comparator) {\n      if (comparator === void 0) {\n        comparator = tripleEquals;\n      }\n      return lhs.exists(function (left) {\n        return comparator(left, rhs);\n      });\n    };\n    var cat = function (arr) {\n      var r = [];\n      var push = function (x) {\n        r.push(x);\n      };\n      for (var i = 0; i < arr.length; i++) {\n        arr[i].each(push);\n      }\n      return r;\n    };\n    var lift2 = function (oa, ob, f) {\n      return oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n    };\n    var lift3 = function (oa, ob, oc, f) {\n      return oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n    };\n    var someIf = function (b, a) {\n      return b ? Optional.some(a) : Optional.none();\n    };\n\n    var isSupported = function (dom) {\n      return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n    };\n\n    var rawSet = function (dom, key, value) {\n      if (isString$1(value) || isBoolean(value) || isNumber(value)) {\n        dom.setAttribute(key, value + '');\n      } else {\n        console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n        throw new Error('Attribute value was not simple');\n      }\n    };\n    var set$1 = function (element, key, value) {\n      rawSet(element.dom, key, value);\n    };\n    var setAll$1 = function (element, attrs) {\n      var dom = element.dom;\n      each$j(attrs, function (v, k) {\n        rawSet(dom, k, v);\n      });\n    };\n    var get$6 = function (element, key) {\n      var v = element.dom.getAttribute(key);\n      return v === null ? undefined : v;\n    };\n    var getOpt = function (element, key) {\n      return Optional.from(get$6(element, key));\n    };\n    var has$1 = function (element, key) {\n      var dom = element.dom;\n      return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n    };\n    var remove$6 = function (element, key) {\n      element.dom.removeAttribute(key);\n    };\n    var clone$3 = function (element) {\n      return foldl(element.dom.attributes, function (acc, attr) {\n        acc[attr.name] = attr.value;\n        return acc;\n      }, {});\n    };\n\n    var internalSet = function (dom, property, value) {\n      if (!isString$1(value)) {\n        console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n        throw new Error('CSS value must be a string: ' + value);\n      }\n      if (isSupported(dom)) {\n        dom.style.setProperty(property, value);\n      }\n    };\n    var setAll = function (element, css) {\n      var dom = element.dom;\n      each$j(css, function (v, k) {\n        internalSet(dom, k, v);\n      });\n    };\n    var get$5 = function (element, property) {\n      var dom = element.dom;\n      var styles = window.getComputedStyle(dom);\n      var r = styles.getPropertyValue(property);\n      return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n    };\n    var getUnsafeProperty = function (dom, property) {\n      return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n    };\n    var getRaw = function (element, property) {\n      var dom = element.dom;\n      var raw = getUnsafeProperty(dom, property);\n      return Optional.from(raw).filter(function (r) {\n        return r.length > 0;\n      });\n    };\n    var getAllRaw = function (element) {\n      var css = {};\n      var dom = element.dom;\n      if (isSupported(dom)) {\n        for (var i = 0; i < dom.style.length; i++) {\n          var ruleName = dom.style.item(i);\n          css[ruleName] = dom.style[ruleName];\n        }\n      }\n      return css;\n    };\n    var reflow = function (e) {\n      return e.dom.offsetWidth;\n    };\n\n    var browser$3 = detect().browser;\n    var firstElement = function (nodes) {\n      return find$3(nodes, isElement$6);\n    };\n    var getTableCaptionDeltaY = function (elm) {\n      if (browser$3.isFirefox() && name(elm) === 'table') {\n        return firstElement(children(elm)).filter(function (elm) {\n          return name(elm) === 'caption';\n        }).bind(function (caption) {\n          return firstElement(nextSiblings(caption)).map(function (body) {\n            var bodyTop = body.dom.offsetTop;\n            var captionTop = caption.dom.offsetTop;\n            var captionHeight = caption.dom.offsetHeight;\n            return bodyTop <= captionTop ? -captionHeight : 0;\n          });\n        }).getOr(0);\n      } else {\n        return 0;\n      }\n    };\n    var hasChild = function (elm, child) {\n      return elm.children && contains$3(elm.children, child);\n    };\n    var getPos = function (body, elm, rootElm) {\n      var x = 0, y = 0;\n      var doc = body.ownerDocument;\n      rootElm = rootElm ? rootElm : body;\n      if (elm) {\n        if (rootElm === body && elm.getBoundingClientRect && get$5(SugarElement.fromDom(body), 'position') === 'static') {\n          var pos = elm.getBoundingClientRect();\n          x = pos.left + (doc.documentElement.scrollLeft || body.scrollLeft) - doc.documentElement.clientLeft;\n          y = pos.top + (doc.documentElement.scrollTop || body.scrollTop) - doc.documentElement.clientTop;\n          return {\n            x: x,\n            y: y\n          };\n        }\n        var offsetParent = elm;\n        while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n          var castOffsetParent = offsetParent;\n          x += castOffsetParent.offsetLeft || 0;\n          y += castOffsetParent.offsetTop || 0;\n          offsetParent = castOffsetParent.offsetParent;\n        }\n        offsetParent = elm.parentNode;\n        while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n          x -= offsetParent.scrollLeft || 0;\n          y -= offsetParent.scrollTop || 0;\n          offsetParent = offsetParent.parentNode;\n        }\n        y += getTableCaptionDeltaY(SugarElement.fromDom(elm));\n      }\n      return {\n        x: x,\n        y: y\n      };\n    };\n\n    var exports$1 = {}, module$1 = { exports: exports$1 };\n    (function (define, exports, module, require) {\n      (function (global, factory) {\n        typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EphoxContactWrapper = factory());\n      }(this, function () {\n        var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n        var promise = { exports: {} };\n        (function (module) {\n          (function (root) {\n            var setTimeoutFunc = setTimeout;\n            function noop() {\n            }\n            function bind(fn, thisArg) {\n              return function () {\n                fn.apply(thisArg, arguments);\n              };\n            }\n            function Promise(fn) {\n              if (typeof this !== 'object')\n                throw new TypeError('Promises must be constructed via new');\n              if (typeof fn !== 'function')\n                throw new TypeError('not a function');\n              this._state = 0;\n              this._handled = false;\n              this._value = undefined;\n              this._deferreds = [];\n              doResolve(fn, this);\n            }\n            function handle(self, deferred) {\n              while (self._state === 3) {\n                self = self._value;\n              }\n              if (self._state === 0) {\n                self._deferreds.push(deferred);\n                return;\n              }\n              self._handled = true;\n              Promise._immediateFn(function () {\n                var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n                if (cb === null) {\n                  (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n                  return;\n                }\n                var ret;\n                try {\n                  ret = cb(self._value);\n                } catch (e) {\n                  reject(deferred.promise, e);\n                  return;\n                }\n                resolve(deferred.promise, ret);\n              });\n            }\n            function resolve(self, newValue) {\n              try {\n                if (newValue === self)\n                  throw new TypeError('A promise cannot be resolved with itself.');\n                if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n                  var then = newValue.then;\n                  if (newValue instanceof Promise) {\n                    self._state = 3;\n                    self._value = newValue;\n                    finale(self);\n                    return;\n                  } else if (typeof then === 'function') {\n                    doResolve(bind(then, newValue), self);\n                    return;\n                  }\n                }\n                self._state = 1;\n                self._value = newValue;\n                finale(self);\n              } catch (e) {\n                reject(self, e);\n              }\n            }\n            function reject(self, newValue) {\n              self._state = 2;\n              self._value = newValue;\n              finale(self);\n            }\n            function finale(self) {\n              if (self._state === 2 && self._deferreds.length === 0) {\n                Promise._immediateFn(function () {\n                  if (!self._handled) {\n                    Promise._unhandledRejectionFn(self._value);\n                  }\n                });\n              }\n              for (var i = 0, len = self._deferreds.length; i < len; i++) {\n                handle(self, self._deferreds[i]);\n              }\n              self._deferreds = null;\n            }\n            function Handler(onFulfilled, onRejected, promise) {\n              this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n              this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n              this.promise = promise;\n            }\n            function doResolve(fn, self) {\n              var done = false;\n              try {\n                fn(function (value) {\n                  if (done)\n                    return;\n                  done = true;\n                  resolve(self, value);\n                }, function (reason) {\n                  if (done)\n                    return;\n                  done = true;\n                  reject(self, reason);\n                });\n              } catch (ex) {\n                if (done)\n                  return;\n                done = true;\n                reject(self, ex);\n              }\n            }\n            Promise.prototype['catch'] = function (onRejected) {\n              return this.then(null, onRejected);\n            };\n            Promise.prototype.then = function (onFulfilled, onRejected) {\n              var prom = new this.constructor(noop);\n              handle(this, new Handler(onFulfilled, onRejected, prom));\n              return prom;\n            };\n            Promise.all = function (arr) {\n              var args = Array.prototype.slice.call(arr);\n              return new Promise(function (resolve, reject) {\n                if (args.length === 0)\n                  return resolve([]);\n                var remaining = args.length;\n                function res(i, val) {\n                  try {\n                    if (val && (typeof val === 'object' || typeof val === 'function')) {\n                      var then = val.then;\n                      if (typeof then === 'function') {\n                        then.call(val, function (val) {\n                          res(i, val);\n                        }, reject);\n                        return;\n                      }\n                    }\n                    args[i] = val;\n                    if (--remaining === 0) {\n                      resolve(args);\n                    }\n                  } catch (ex) {\n                    reject(ex);\n                  }\n                }\n                for (var i = 0; i < args.length; i++) {\n                  res(i, args[i]);\n                }\n              });\n            };\n            Promise.resolve = function (value) {\n              if (value && typeof value === 'object' && value.constructor === Promise) {\n                return value;\n              }\n              return new Promise(function (resolve) {\n                resolve(value);\n              });\n            };\n            Promise.reject = function (value) {\n              return new Promise(function (resolve, reject) {\n                reject(value);\n              });\n            };\n            Promise.race = function (values) {\n              return new Promise(function (resolve, reject) {\n                for (var i = 0, len = values.length; i < len; i++) {\n                  values[i].then(resolve, reject);\n                }\n              });\n            };\n            Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) {\n              setImmediate(fn);\n            } : function (fn) {\n              setTimeoutFunc(fn, 0);\n            };\n            Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n              if (typeof console !== 'undefined' && console) {\n                console.warn('Possible Unhandled Promise Rejection:', err);\n              }\n            };\n            Promise._setImmediateFn = function _setImmediateFn(fn) {\n              Promise._immediateFn = fn;\n            };\n            Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\n              Promise._unhandledRejectionFn = fn;\n            };\n            if (module.exports) {\n              module.exports = Promise;\n            } else if (!root.Promise) {\n              root.Promise = Promise;\n            }\n          }(commonjsGlobal));\n        }(promise));\n        var promisePolyfill = promise.exports;\n        var Global = function () {\n          if (typeof window !== 'undefined') {\n            return window;\n          } else {\n            return Function('return this;')();\n          }\n        }();\n        var promisePolyfill_1 = { boltExport: Global.Promise || promisePolyfill };\n        return promisePolyfill_1;\n      }));\n    }(undefined, exports$1, module$1));\n    var Promise$1 = module$1.exports.boltExport;\n\n    var nu$1 = function (baseFn) {\n      var data = Optional.none();\n      var callbacks = [];\n      var map = function (f) {\n        return nu$1(function (nCallback) {\n          get(function (data) {\n            nCallback(f(data));\n          });\n        });\n      };\n      var get = function (nCallback) {\n        if (isReady()) {\n          call(nCallback);\n        } else {\n          callbacks.push(nCallback);\n        }\n      };\n      var set = function (x) {\n        if (!isReady()) {\n          data = Optional.some(x);\n          run(callbacks);\n          callbacks = [];\n        }\n      };\n      var isReady = function () {\n        return data.isSome();\n      };\n      var run = function (cbs) {\n        each$k(cbs, call);\n      };\n      var call = function (cb) {\n        data.each(function (x) {\n          setTimeout(function () {\n            cb(x);\n          }, 0);\n        });\n      };\n      baseFn(set);\n      return {\n        get: get,\n        map: map,\n        isReady: isReady\n      };\n    };\n    var pure$1 = function (a) {\n      return nu$1(function (callback) {\n        callback(a);\n      });\n    };\n    var LazyValue = {\n      nu: nu$1,\n      pure: pure$1\n    };\n\n    var errorReporter = function (err) {\n      setTimeout(function () {\n        throw err;\n      }, 0);\n    };\n    var make = function (run) {\n      var get = function (callback) {\n        run().then(callback, errorReporter);\n      };\n      var map = function (fab) {\n        return make(function () {\n          return run().then(fab);\n        });\n      };\n      var bind = function (aFutureB) {\n        return make(function () {\n          return run().then(function (v) {\n            return aFutureB(v).toPromise();\n          });\n        });\n      };\n      var anonBind = function (futureB) {\n        return make(function () {\n          return run().then(function () {\n            return futureB.toPromise();\n          });\n        });\n      };\n      var toLazy = function () {\n        return LazyValue.nu(get);\n      };\n      var toCached = function () {\n        var cache = null;\n        return make(function () {\n          if (cache === null) {\n            cache = run();\n          }\n          return cache;\n        });\n      };\n      var toPromise = run;\n      return {\n        map: map,\n        bind: bind,\n        anonBind: anonBind,\n        toLazy: toLazy,\n        toCached: toCached,\n        toPromise: toPromise,\n        get: get\n      };\n    };\n    var nu = function (baseFn) {\n      return make(function () {\n        return new Promise$1(baseFn);\n      });\n    };\n    var pure = function (a) {\n      return make(function () {\n        return Promise$1.resolve(a);\n      });\n    };\n    var Future = {\n      nu: nu,\n      pure: pure\n    };\n\n    var par$1 = function (asyncValues, nu) {\n      return nu(function (callback) {\n        var r = [];\n        var count = 0;\n        var cb = function (i) {\n          return function (value) {\n            r[i] = value;\n            count++;\n            if (count >= asyncValues.length) {\n              callback(r);\n            }\n          };\n        };\n        if (asyncValues.length === 0) {\n          callback([]);\n        } else {\n          each$k(asyncValues, function (asyncValue, i) {\n            asyncValue.get(cb(i));\n          });\n        }\n      });\n    };\n\n    var par = function (futures) {\n      return par$1(futures, Future.nu);\n    };\n\n    var value$1 = function (o) {\n      var or = function (_opt) {\n        return value$1(o);\n      };\n      var orThunk = function (_f) {\n        return value$1(o);\n      };\n      var map = function (f) {\n        return value$1(f(o));\n      };\n      var mapError = function (_f) {\n        return value$1(o);\n      };\n      var each = function (f) {\n        f(o);\n      };\n      var bind = function (f) {\n        return f(o);\n      };\n      var fold = function (_, onValue) {\n        return onValue(o);\n      };\n      var exists = function (f) {\n        return f(o);\n      };\n      var forall = function (f) {\n        return f(o);\n      };\n      var toOptional = function () {\n        return Optional.some(o);\n      };\n      return {\n        isValue: always,\n        isError: never,\n        getOr: constant(o),\n        getOrThunk: constant(o),\n        getOrDie: constant(o),\n        or: or,\n        orThunk: orThunk,\n        fold: fold,\n        map: map,\n        mapError: mapError,\n        each: each,\n        bind: bind,\n        exists: exists,\n        forall: forall,\n        toOptional: toOptional\n      };\n    };\n    var error = function (message) {\n      var getOrThunk = function (f) {\n        return f();\n      };\n      var getOrDie = function () {\n        return die(String(message))();\n      };\n      var or = identity;\n      var orThunk = function (f) {\n        return f();\n      };\n      var map = function (_f) {\n        return error(message);\n      };\n      var mapError = function (f) {\n        return error(f(message));\n      };\n      var bind = function (_f) {\n        return error(message);\n      };\n      var fold = function (onError, _) {\n        return onError(message);\n      };\n      return {\n        isValue: never,\n        isError: always,\n        getOr: identity,\n        getOrThunk: getOrThunk,\n        getOrDie: getOrDie,\n        or: or,\n        orThunk: orThunk,\n        fold: fold,\n        map: map,\n        mapError: mapError,\n        each: noop,\n        bind: bind,\n        exists: never,\n        forall: always,\n        toOptional: Optional.none\n      };\n    };\n    var fromOption = function (opt, err) {\n      return opt.fold(function () {\n        return error(err);\n      }, value$1);\n    };\n    var Result = {\n      value: value$1,\n      error: error,\n      fromOption: fromOption\n    };\n\n    var generate$1 = function (cases) {\n      if (!isArray$1(cases)) {\n        throw new Error('cases must be an array');\n      }\n      if (cases.length === 0) {\n        throw new Error('there must be at least one case');\n      }\n      var constructors = [];\n      var adt = {};\n      each$k(cases, function (acase, count) {\n        var keys$1 = keys(acase);\n        if (keys$1.length !== 1) {\n          throw new Error('one and only one name per case');\n        }\n        var key = keys$1[0];\n        var value = acase[key];\n        if (adt[key] !== undefined) {\n          throw new Error('duplicate key detected:' + key);\n        } else if (key === 'cata') {\n          throw new Error('cannot have a case named cata (sorry)');\n        } else if (!isArray$1(value)) {\n          throw new Error('case arguments must be an array');\n        }\n        constructors.push(key);\n        adt[key] = function () {\n          var args = [];\n          for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n          }\n          var argLength = args.length;\n          if (argLength !== value.length) {\n            throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n          }\n          var match = function (branches) {\n            var branchKeys = keys(branches);\n            if (constructors.length !== branchKeys.length) {\n              throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n            }\n            var allReqd = forall(constructors, function (reqKey) {\n              return contains$3(branchKeys, reqKey);\n            });\n            if (!allReqd) {\n              throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n            }\n            return branches[key].apply(null, args);\n          };\n          return {\n            fold: function () {\n              var foldArgs = [];\n              for (var _i = 0; _i < arguments.length; _i++) {\n                foldArgs[_i] = arguments[_i];\n              }\n              if (foldArgs.length !== cases.length) {\n                throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n              }\n              var target = foldArgs[count];\n              return target.apply(null, args);\n            },\n            match: match,\n            log: function (label) {\n              console.log(label, {\n                constructors: constructors,\n                constructor: key,\n                params: args\n              });\n            }\n          };\n        };\n      });\n      return adt;\n    };\n    var Adt = { generate: generate$1 };\n\n    Adt.generate([\n      {\n        bothErrors: [\n          'error1',\n          'error2'\n        ]\n      },\n      {\n        firstError: [\n          'error1',\n          'value2'\n        ]\n      },\n      {\n        secondError: [\n          'value1',\n          'error2'\n        ]\n      },\n      {\n        bothValues: [\n          'value1',\n          'value2'\n        ]\n      }\n    ]);\n    var unite = function (result) {\n      return result.fold(identity, identity);\n    };\n\n    function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {\n      if (is(scope, a)) {\n        return Optional.some(scope);\n      } else if (isFunction(isRoot) && isRoot(scope)) {\n        return Optional.none();\n      } else {\n        return ancestor(scope, a, isRoot);\n      }\n    }\n\n    var ancestor$3 = function (scope, predicate, isRoot) {\n      var element = scope.dom;\n      var stop = isFunction(isRoot) ? isRoot : never;\n      while (element.parentNode) {\n        element = element.parentNode;\n        var el = SugarElement.fromDom(element);\n        if (predicate(el)) {\n          return Optional.some(el);\n        } else if (stop(el)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    var closest$3 = function (scope, predicate, isRoot) {\n      var is = function (s, test) {\n        return test(s);\n      };\n      return ClosestOrAncestor(is, ancestor$3, scope, predicate, isRoot);\n    };\n    var sibling$2 = function (scope, predicate) {\n      var element = scope.dom;\n      if (!element.parentNode) {\n        return Optional.none();\n      }\n      return child(SugarElement.fromDom(element.parentNode), function (x) {\n        return !eq(scope, x) && predicate(x);\n      });\n    };\n    var child = function (scope, predicate) {\n      var pred = function (node) {\n        return predicate(SugarElement.fromDom(node));\n      };\n      var result = find$3(scope.dom.childNodes, pred);\n      return result.map(SugarElement.fromDom);\n    };\n\n    var ancestor$2 = function (scope, selector, isRoot) {\n      return ancestor$3(scope, function (e) {\n        return is$2(e, selector);\n      }, isRoot);\n    };\n    var descendant = function (scope, selector) {\n      return one(selector, scope);\n    };\n    var closest$2 = function (scope, selector, isRoot) {\n      var is = function (element, selector) {\n        return is$2(element, selector);\n      };\n      return ClosestOrAncestor(is, ancestor$2, scope, selector, isRoot);\n    };\n\n    var promiseObj = window.Promise ? window.Promise : Promise$1;\n\n    var requestAnimationFramePromise;\n    var requestAnimationFrame = function (callback, element) {\n      var requestAnimationFrameFunc = window.requestAnimationFrame;\n      var vendors = [\n        'ms',\n        'moz',\n        'webkit'\n      ];\n      var featurefill = function (cb) {\n        window.setTimeout(cb, 0);\n      };\n      for (var i = 0; i < vendors.length && !requestAnimationFrameFunc; i++) {\n        requestAnimationFrameFunc = window[vendors[i] + 'RequestAnimationFrame'];\n      }\n      if (!requestAnimationFrameFunc) {\n        requestAnimationFrameFunc = featurefill;\n      }\n      requestAnimationFrameFunc(callback, element);\n    };\n    var wrappedSetTimeout = function (callback, time) {\n      if (typeof time !== 'number') {\n        time = 0;\n      }\n      return setTimeout(callback, time);\n    };\n    var wrappedSetInterval = function (callback, time) {\n      if (typeof time !== 'number') {\n        time = 1;\n      }\n      return setInterval(callback, time);\n    };\n    var wrappedClearTimeout = function (id) {\n      return clearTimeout(id);\n    };\n    var wrappedClearInterval = function (id) {\n      return clearInterval(id);\n    };\n    var debounce = function (callback, time) {\n      var timer;\n      var func = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n        clearTimeout(timer);\n        timer = wrappedSetTimeout(function () {\n          callback.apply(this, args);\n        }, time);\n      };\n      func.stop = function () {\n        clearTimeout(timer);\n      };\n      return func;\n    };\n    var Delay = {\n      requestAnimationFrame: function (callback, element) {\n        if (requestAnimationFramePromise) {\n          requestAnimationFramePromise.then(callback);\n          return;\n        }\n        requestAnimationFramePromise = new promiseObj(function (resolve) {\n          if (!element) {\n            element = document.body;\n          }\n          requestAnimationFrame(resolve, element);\n        }).then(callback);\n      },\n      setTimeout: wrappedSetTimeout,\n      setInterval: wrappedSetInterval,\n      setEditorTimeout: function (editor, callback, time) {\n        return wrappedSetTimeout(function () {\n          if (!editor.removed) {\n            callback();\n          }\n        }, time);\n      },\n      setEditorInterval: function (editor, callback, time) {\n        var timer = wrappedSetInterval(function () {\n          if (!editor.removed) {\n            callback();\n          } else {\n            clearInterval(timer);\n          }\n        }, time);\n        return timer;\n      },\n      debounce: debounce,\n      throttle: debounce,\n      clearInterval: wrappedClearInterval,\n      clearTimeout: wrappedClearTimeout\n    };\n\n    var StyleSheetLoader = function (documentOrShadowRoot, settings) {\n      if (settings === void 0) {\n        settings = {};\n      }\n      var idCount = 0;\n      var loadedStates = {};\n      var edos = SugarElement.fromDom(documentOrShadowRoot);\n      var doc = documentOrOwner(edos);\n      var maxLoadTime = settings.maxLoadTime || 5000;\n      var _setReferrerPolicy = function (referrerPolicy) {\n        settings.referrerPolicy = referrerPolicy;\n      };\n      var addStyle = function (element) {\n        append$1(getStyleContainer(edos), element);\n      };\n      var removeStyle = function (id) {\n        var styleContainer = getStyleContainer(edos);\n        descendant(styleContainer, '#' + id).each(remove$7);\n      };\n      var getOrCreateState = function (url) {\n        return get$9(loadedStates, url).getOrThunk(function () {\n          return {\n            id: 'mce-u' + idCount++,\n            passed: [],\n            failed: [],\n            count: 0\n          };\n        });\n      };\n      var load = function (url, success, failure) {\n        var link;\n        var urlWithSuffix = Tools._addCacheSuffix(url);\n        var state = getOrCreateState(urlWithSuffix);\n        loadedStates[urlWithSuffix] = state;\n        state.count++;\n        var resolve = function (callbacks, status) {\n          var i = callbacks.length;\n          while (i--) {\n            callbacks[i]();\n          }\n          state.status = status;\n          state.passed = [];\n          state.failed = [];\n          if (link) {\n            link.onload = null;\n            link.onerror = null;\n            link = null;\n          }\n        };\n        var passed = function () {\n          return resolve(state.passed, 2);\n        };\n        var failed = function () {\n          return resolve(state.failed, 3);\n        };\n        var wait = function (testCallback, waitCallback) {\n          if (!testCallback()) {\n            if (Date.now() - startTime < maxLoadTime) {\n              Delay.setTimeout(waitCallback);\n            } else {\n              failed();\n            }\n          }\n        };\n        var waitForWebKitLinkLoaded = function () {\n          wait(function () {\n            var styleSheets = documentOrShadowRoot.styleSheets;\n            var i = styleSheets.length;\n            while (i--) {\n              var styleSheet = styleSheets[i];\n              var owner = styleSheet.ownerNode;\n              if (owner && owner.id === link.id) {\n                passed();\n                return true;\n              }\n            }\n            return false;\n          }, waitForWebKitLinkLoaded);\n        };\n        if (success) {\n          state.passed.push(success);\n        }\n        if (failure) {\n          state.failed.push(failure);\n        }\n        if (state.status === 1) {\n          return;\n        }\n        if (state.status === 2) {\n          passed();\n          return;\n        }\n        if (state.status === 3) {\n          failed();\n          return;\n        }\n        state.status = 1;\n        var linkElem = SugarElement.fromTag('link', doc.dom);\n        setAll$1(linkElem, {\n          rel: 'stylesheet',\n          type: 'text/css',\n          id: state.id\n        });\n        var startTime = Date.now();\n        if (settings.contentCssCors) {\n          set$1(linkElem, 'crossOrigin', 'anonymous');\n        }\n        if (settings.referrerPolicy) {\n          set$1(linkElem, 'referrerpolicy', settings.referrerPolicy);\n        }\n        link = linkElem.dom;\n        link.onload = waitForWebKitLinkLoaded;\n        link.onerror = failed;\n        addStyle(linkElem);\n        set$1(linkElem, 'href', urlWithSuffix);\n      };\n      var loadF = function (url) {\n        return Future.nu(function (resolve) {\n          load(url, compose(resolve, constant(Result.value(url))), compose(resolve, constant(Result.error(url))));\n        });\n      };\n      var loadAll = function (urls, success, failure) {\n        par(map$3(urls, loadF)).get(function (result) {\n          var parts = partition(result, function (r) {\n            return r.isValue();\n          });\n          if (parts.fail.length > 0) {\n            failure(parts.fail.map(unite));\n          } else {\n            success(parts.pass.map(unite));\n          }\n        });\n      };\n      var unload = function (url) {\n        var urlWithSuffix = Tools._addCacheSuffix(url);\n        get$9(loadedStates, urlWithSuffix).each(function (state) {\n          var count = --state.count;\n          if (count === 0) {\n            delete loadedStates[urlWithSuffix];\n            removeStyle(state.id);\n          }\n        });\n      };\n      var unloadAll = function (urls) {\n        each$k(urls, function (url) {\n          unload(url);\n        });\n      };\n      return {\n        load: load,\n        loadAll: loadAll,\n        unload: unload,\n        unloadAll: unloadAll,\n        _setReferrerPolicy: _setReferrerPolicy\n      };\n    };\n\n    var create$8 = function () {\n      var map = new WeakMap();\n      var forElement = function (referenceElement, settings) {\n        var root = getRootNode(referenceElement);\n        var rootDom = root.dom;\n        return Optional.from(map.get(rootDom)).getOrThunk(function () {\n          var sl = StyleSheetLoader(rootDom, settings);\n          map.set(rootDom, sl);\n          return sl;\n        });\n      };\n      return { forElement: forElement };\n    };\n    var instance = create$8();\n\n    var DomTreeWalker = function () {\n      function DomTreeWalker(startNode, rootNode) {\n        this.node = startNode;\n        this.rootNode = rootNode;\n        this.current = this.current.bind(this);\n        this.next = this.next.bind(this);\n        this.prev = this.prev.bind(this);\n        this.prev2 = this.prev2.bind(this);\n      }\n      DomTreeWalker.prototype.current = function () {\n        return this.node;\n      };\n      DomTreeWalker.prototype.next = function (shallow) {\n        this.node = this.findSibling(this.node, 'firstChild', 'nextSibling', shallow);\n        return this.node;\n      };\n      DomTreeWalker.prototype.prev = function (shallow) {\n        this.node = this.findSibling(this.node, 'lastChild', 'previousSibling', shallow);\n        return this.node;\n      };\n      DomTreeWalker.prototype.prev2 = function (shallow) {\n        this.node = this.findPreviousNode(this.node, 'lastChild', 'previousSibling', shallow);\n        return this.node;\n      };\n      DomTreeWalker.prototype.findSibling = function (node, startName, siblingName, shallow) {\n        var sibling, parent;\n        if (node) {\n          if (!shallow && node[startName]) {\n            return node[startName];\n          }\n          if (node !== this.rootNode) {\n            sibling = node[siblingName];\n            if (sibling) {\n              return sibling;\n            }\n            for (parent = node.parentNode; parent && parent !== this.rootNode; parent = parent.parentNode) {\n              sibling = parent[siblingName];\n              if (sibling) {\n                return sibling;\n              }\n            }\n          }\n        }\n      };\n      DomTreeWalker.prototype.findPreviousNode = function (node, startName, siblingName, shallow) {\n        var sibling, parent, child;\n        if (node) {\n          sibling = node[siblingName];\n          if (this.rootNode && sibling === this.rootNode) {\n            return;\n          }\n          if (sibling) {\n            if (!shallow) {\n              for (child = sibling[startName]; child; child = child[startName]) {\n                if (!child[startName]) {\n                  return child;\n                }\n              }\n            }\n            return sibling;\n          }\n          parent = node.parentNode;\n          if (parent && parent !== this.rootNode) {\n            return parent;\n          }\n        }\n      };\n      return DomTreeWalker;\n    }();\n\n    var blocks = [\n      'article',\n      'aside',\n      'details',\n      'div',\n      'dt',\n      'figcaption',\n      'footer',\n      'form',\n      'fieldset',\n      'header',\n      'hgroup',\n      'html',\n      'main',\n      'nav',\n      'section',\n      'summary',\n      'body',\n      'p',\n      'dl',\n      'multicol',\n      'dd',\n      'figure',\n      'address',\n      'center',\n      'blockquote',\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6',\n      'listing',\n      'xmp',\n      'pre',\n      'plaintext',\n      'menu',\n      'dir',\n      'ul',\n      'ol',\n      'li',\n      'hr',\n      'table',\n      'tbody',\n      'thead',\n      'tfoot',\n      'th',\n      'tr',\n      'td',\n      'caption'\n    ];\n    var tableCells = [\n      'td',\n      'th'\n    ];\n    var tableSections = [\n      'thead',\n      'tbody',\n      'tfoot'\n    ];\n    var textBlocks = [\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6',\n      'p',\n      'div',\n      'address',\n      'pre',\n      'form',\n      'blockquote',\n      'center',\n      'dir',\n      'fieldset',\n      'header',\n      'footer',\n      'article',\n      'section',\n      'hgroup',\n      'aside',\n      'nav',\n      'figure'\n    ];\n    var headings = [\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6'\n    ];\n    var listItems$1 = [\n      'li',\n      'dd',\n      'dt'\n    ];\n    var lists = [\n      'ul',\n      'ol',\n      'dl'\n    ];\n    var wsElements = [\n      'pre',\n      'script',\n      'textarea',\n      'style'\n    ];\n    var lazyLookup = function (items) {\n      var lookup;\n      return function (node) {\n        lookup = lookup ? lookup : mapToObject(items, always);\n        return has$2(lookup, name(node));\n      };\n    };\n    var isHeading = lazyLookup(headings);\n    var isBlock$2 = lazyLookup(blocks);\n    var isTable$2 = function (node) {\n      return name(node) === 'table';\n    };\n    var isInline$1 = function (node) {\n      return isElement$6(node) && !isBlock$2(node);\n    };\n    var isBr$4 = function (node) {\n      return isElement$6(node) && name(node) === 'br';\n    };\n    var isTextBlock$2 = lazyLookup(textBlocks);\n    var isList = lazyLookup(lists);\n    var isListItem = lazyLookup(listItems$1);\n    var isTableSection = lazyLookup(tableSections);\n    var isTableCell$4 = lazyLookup(tableCells);\n    var isWsPreserveElement = lazyLookup(wsElements);\n\n    var ancestor$1 = function (scope, selector, isRoot) {\n      return ancestor$2(scope, selector, isRoot).isSome();\n    };\n\n    var zeroWidth = '\\uFEFF';\n    var nbsp = '\\xA0';\n    var isZwsp$1 = function (char) {\n      return char === zeroWidth;\n    };\n    var removeZwsp = function (s) {\n      return s.replace(/\\uFEFF/g, '');\n    };\n\n    var ZWSP$1 = zeroWidth;\n    var isZwsp = isZwsp$1;\n    var trim$2 = removeZwsp;\n\n    var isElement$4 = isElement$5;\n    var isText$6 = isText$7;\n    var isCaretContainerBlock$1 = function (node) {\n      if (isText$6(node)) {\n        node = node.parentNode;\n      }\n      return isElement$4(node) && node.hasAttribute('data-mce-caret');\n    };\n    var isCaretContainerInline = function (node) {\n      return isText$6(node) && isZwsp(node.data);\n    };\n    var isCaretContainer$2 = function (node) {\n      return isCaretContainerBlock$1(node) || isCaretContainerInline(node);\n    };\n    var hasContent = function (node) {\n      return node.firstChild !== node.lastChild || !isBr$5(node.firstChild);\n    };\n    var insertInline$1 = function (node, before) {\n      var doc = node.ownerDocument;\n      var textNode = doc.createTextNode(ZWSP$1);\n      var parentNode = node.parentNode;\n      if (!before) {\n        var sibling = node.nextSibling;\n        if (isText$6(sibling)) {\n          if (isCaretContainer$2(sibling)) {\n            return sibling;\n          }\n          if (startsWithCaretContainer$1(sibling)) {\n            sibling.splitText(1);\n            return sibling;\n          }\n        }\n        if (node.nextSibling) {\n          parentNode.insertBefore(textNode, node.nextSibling);\n        } else {\n          parentNode.appendChild(textNode);\n        }\n      } else {\n        var sibling = node.previousSibling;\n        if (isText$6(sibling)) {\n          if (isCaretContainer$2(sibling)) {\n            return sibling;\n          }\n          if (endsWithCaretContainer$1(sibling)) {\n            return sibling.splitText(sibling.data.length - 1);\n          }\n        }\n        parentNode.insertBefore(textNode, node);\n      }\n      return textNode;\n    };\n    var isBeforeInline = function (pos) {\n      var container = pos.container();\n      if (!isText$7(container)) {\n        return false;\n      }\n      return container.data.charAt(pos.offset()) === ZWSP$1 || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\n    };\n    var isAfterInline = function (pos) {\n      var container = pos.container();\n      if (!isText$7(container)) {\n        return false;\n      }\n      return container.data.charAt(pos.offset() - 1) === ZWSP$1 || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\n    };\n    var createBogusBr = function () {\n      var br = document.createElement('br');\n      br.setAttribute('data-mce-bogus', '1');\n      return br;\n    };\n    var insertBlock$1 = function (blockName, node, before) {\n      var doc = node.ownerDocument;\n      var blockNode = doc.createElement(blockName);\n      blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');\n      blockNode.setAttribute('data-mce-bogus', 'all');\n      blockNode.appendChild(createBogusBr());\n      var parentNode = node.parentNode;\n      if (!before) {\n        if (node.nextSibling) {\n          parentNode.insertBefore(blockNode, node.nextSibling);\n        } else {\n          parentNode.appendChild(blockNode);\n        }\n      } else {\n        parentNode.insertBefore(blockNode, node);\n      }\n      return blockNode;\n    };\n    var startsWithCaretContainer$1 = function (node) {\n      return isText$6(node) && node.data[0] === ZWSP$1;\n    };\n    var endsWithCaretContainer$1 = function (node) {\n      return isText$6(node) && node.data[node.data.length - 1] === ZWSP$1;\n    };\n    var trimBogusBr = function (elm) {\n      var brs = elm.getElementsByTagName('br');\n      var lastBr = brs[brs.length - 1];\n      if (isBogus$2(lastBr)) {\n        lastBr.parentNode.removeChild(lastBr);\n      }\n    };\n    var showCaretContainerBlock = function (caretContainer) {\n      if (caretContainer && caretContainer.hasAttribute('data-mce-caret')) {\n        trimBogusBr(caretContainer);\n        caretContainer.removeAttribute('data-mce-caret');\n        caretContainer.removeAttribute('data-mce-bogus');\n        caretContainer.removeAttribute('style');\n        caretContainer.removeAttribute('_moz_abspos');\n        return caretContainer;\n      }\n      return null;\n    };\n    var isRangeInCaretContainerBlock = function (range) {\n      return isCaretContainerBlock$1(range.startContainer);\n    };\n\n    var isContentEditableTrue$3 = isContentEditableTrue$4;\n    var isContentEditableFalse$a = isContentEditableFalse$b;\n    var isBr$3 = isBr$5;\n    var isText$5 = isText$7;\n    var isInvalidTextElement = matchNodeNames([\n      'script',\n      'style',\n      'textarea'\n    ]);\n    var isAtomicInline = matchNodeNames([\n      'img',\n      'input',\n      'textarea',\n      'hr',\n      'iframe',\n      'video',\n      'audio',\n      'object',\n      'embed'\n    ]);\n    var isTable$1 = matchNodeNames(['table']);\n    var isCaretContainer$1 = isCaretContainer$2;\n    var isCaretCandidate$3 = function (node) {\n      if (isCaretContainer$1(node)) {\n        return false;\n      }\n      if (isText$5(node)) {\n        return !isInvalidTextElement(node.parentNode);\n      }\n      return isAtomicInline(node) || isBr$3(node) || isTable$1(node) || isNonUiContentEditableFalse(node);\n    };\n    var isUnselectable = function (node) {\n      return isElement$5(node) && node.getAttribute('unselectable') === 'true';\n    };\n    var isNonUiContentEditableFalse = function (node) {\n      return isUnselectable(node) === false && isContentEditableFalse$a(node);\n    };\n    var isInEditable = function (node, root) {\n      for (node = node.parentNode; node && node !== root; node = node.parentNode) {\n        if (isNonUiContentEditableFalse(node)) {\n          return false;\n        }\n        if (isContentEditableTrue$3(node)) {\n          return true;\n        }\n      }\n      return true;\n    };\n    var isAtomicContentEditableFalse = function (node) {\n      if (!isNonUiContentEditableFalse(node)) {\n        return false;\n      }\n      return foldl(from(node.getElementsByTagName('*')), function (result, elm) {\n        return result || isContentEditableTrue$3(elm);\n      }, false) !== true;\n    };\n    var isAtomic$1 = function (node) {\n      return isAtomicInline(node) || isAtomicContentEditableFalse(node);\n    };\n    var isEditableCaretCandidate$1 = function (node, root) {\n      return isCaretCandidate$3(node) && isInEditable(node, root);\n    };\n\n    var whiteSpaceRegExp$1 = /^[ \\t\\r\\n]*$/;\n    var isWhitespaceText = function (text) {\n      return whiteSpaceRegExp$1.test(text);\n    };\n\n    var hasWhitespacePreserveParent = function (node, rootNode) {\n      var rootElement = SugarElement.fromDom(rootNode);\n      var startNode = SugarElement.fromDom(node);\n      return ancestor$1(startNode, 'pre,code', curry(eq, rootElement));\n    };\n    var isWhitespace = function (node, rootNode) {\n      return isText$7(node) && isWhitespaceText(node.data) && hasWhitespacePreserveParent(node, rootNode) === false;\n    };\n    var isNamedAnchor = function (node) {\n      return isElement$5(node) && node.nodeName === 'A' && !node.hasAttribute('href') && (node.hasAttribute('name') || node.hasAttribute('id'));\n    };\n    var isContent$1 = function (node, rootNode) {\n      return isCaretCandidate$3(node) && isWhitespace(node, rootNode) === false || isNamedAnchor(node) || isBookmark(node);\n    };\n    var isBookmark = hasAttribute('data-mce-bookmark');\n    var isBogus$1 = hasAttribute('data-mce-bogus');\n    var isBogusAll = hasAttributeValue('data-mce-bogus', 'all');\n    var isEmptyNode = function (targetNode, skipBogus) {\n      var brCount = 0;\n      if (isContent$1(targetNode, targetNode)) {\n        return false;\n      } else {\n        var node = targetNode.firstChild;\n        if (!node) {\n          return true;\n        }\n        var walker = new DomTreeWalker(node, targetNode);\n        do {\n          if (skipBogus) {\n            if (isBogusAll(node)) {\n              node = walker.next(true);\n              continue;\n            }\n            if (isBogus$1(node)) {\n              node = walker.next();\n              continue;\n            }\n          }\n          if (isBr$5(node)) {\n            brCount++;\n            node = walker.next();\n            continue;\n          }\n          if (isContent$1(node, targetNode)) {\n            return false;\n          }\n          node = walker.next();\n        } while (node);\n        return brCount <= 1;\n      }\n    };\n    var isEmpty$2 = function (elm, skipBogus) {\n      if (skipBogus === void 0) {\n        skipBogus = true;\n      }\n      return isEmptyNode(elm.dom, skipBogus);\n    };\n\n    var isSpan = function (node) {\n      return node.nodeName.toLowerCase() === 'span';\n    };\n    var isInlineContent = function (node, root) {\n      return isNonNullable(node) && (isContent$1(node, root) || isInline$1(SugarElement.fromDom(node)));\n    };\n    var surroundedByInlineContent = function (node, root) {\n      var prev = new DomTreeWalker(node, root).prev(false);\n      var next = new DomTreeWalker(node, root).next(false);\n      var prevIsInline = isUndefined(prev) || isInlineContent(prev, root);\n      var nextIsInline = isUndefined(next) || isInlineContent(next, root);\n      return prevIsInline && nextIsInline;\n    };\n    var isBookmarkNode$2 = function (node) {\n      return isSpan(node) && node.getAttribute('data-mce-type') === 'bookmark';\n    };\n    var isKeepTextNode = function (node, root) {\n      return isText$7(node) && node.data.length > 0 && surroundedByInlineContent(node, root);\n    };\n    var isKeepElement = function (node) {\n      return isElement$5(node) ? node.childNodes.length > 0 : false;\n    };\n    var isDocument = function (node) {\n      return isDocumentFragment(node) || isDocument$1(node);\n    };\n    var trimNode = function (dom, node, root) {\n      var rootNode = root || node;\n      if (isElement$5(node) && isBookmarkNode$2(node)) {\n        return node;\n      }\n      var children = node.childNodes;\n      for (var i = children.length - 1; i >= 0; i--) {\n        trimNode(dom, children[i], rootNode);\n      }\n      if (isElement$5(node)) {\n        var currentChildren = node.childNodes;\n        if (currentChildren.length === 1 && isBookmarkNode$2(currentChildren[0])) {\n          node.parentNode.insertBefore(currentChildren[0], node);\n        }\n      }\n      if (!isDocument(node) && !isContent$1(node, rootNode) && !isKeepElement(node) && !isKeepTextNode(node, rootNode)) {\n        dom.remove(node);\n      }\n      return node;\n    };\n\n    var makeMap$3 = Tools.makeMap;\n    var attrsCharsRegExp = /[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n    var textCharsRegExp = /[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n    var rawCharsRegExp = /[<>&\\\"\\']/g;\n    var entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi;\n    var asciiMap = {\n      128: '\\u20AC',\n      130: '\\u201A',\n      131: '\\u0192',\n      132: '\\u201E',\n      133: '\\u2026',\n      134: '\\u2020',\n      135: '\\u2021',\n      136: '\\u02c6',\n      137: '\\u2030',\n      138: '\\u0160',\n      139: '\\u2039',\n      140: '\\u0152',\n      142: '\\u017d',\n      145: '\\u2018',\n      146: '\\u2019',\n      147: '\\u201C',\n      148: '\\u201D',\n      149: '\\u2022',\n      150: '\\u2013',\n      151: '\\u2014',\n      152: '\\u02DC',\n      153: '\\u2122',\n      154: '\\u0161',\n      155: '\\u203A',\n      156: '\\u0153',\n      158: '\\u017e',\n      159: '\\u0178'\n    };\n    var baseEntities = {\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '&': '&amp;',\n      '`': '&#96;'\n    };\n    var reverseEntities = {\n      '&lt;': '<',\n      '&gt;': '>',\n      '&amp;': '&',\n      '&quot;': '\"',\n      '&apos;': '\\''\n    };\n    var nativeDecode = function (text) {\n      var elm = SugarElement.fromTag('div').dom;\n      elm.innerHTML = text;\n      return elm.textContent || elm.innerText || text;\n    };\n    var buildEntitiesLookup = function (items, radix) {\n      var i, chr, entity;\n      var lookup = {};\n      if (items) {\n        items = items.split(',');\n        radix = radix || 10;\n        for (i = 0; i < items.length; i += 2) {\n          chr = String.fromCharCode(parseInt(items[i], radix));\n          if (!baseEntities[chr]) {\n            entity = '&' + items[i + 1] + ';';\n            lookup[chr] = entity;\n            lookup[entity] = chr;\n          }\n        }\n        return lookup;\n      }\n    };\n    var namedEntities = buildEntitiesLookup('50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' + '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' + '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' + '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' + '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' + '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' + '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' + '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' + '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' + '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' + 'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' + 'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' + 't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' + 'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' + 'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' + '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' + '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' + '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' + '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' + '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' + 'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' + 'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' + 'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' + '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' + '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32);\n    var encodeRaw = function (text, attr) {\n      return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n        return baseEntities[chr] || chr;\n      });\n    };\n    var encodeAllRaw = function (text) {\n      return ('' + text).replace(rawCharsRegExp, function (chr) {\n        return baseEntities[chr] || chr;\n      });\n    };\n    var encodeNumeric = function (text, attr) {\n      return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n        if (chr.length > 1) {\n          return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n        }\n        return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';\n      });\n    };\n    var encodeNamed = function (text, attr, entities) {\n      entities = entities || namedEntities;\n      return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n        return baseEntities[chr] || entities[chr] || chr;\n      });\n    };\n    var getEncodeFunc = function (name, entities) {\n      var entitiesMap = buildEntitiesLookup(entities) || namedEntities;\n      var encodeNamedAndNumeric = function (text, attr) {\n        return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n          if (baseEntities[chr] !== undefined) {\n            return baseEntities[chr];\n          }\n          if (entitiesMap[chr] !== undefined) {\n            return entitiesMap[chr];\n          }\n          if (chr.length > 1) {\n            return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n          }\n          return '&#' + chr.charCodeAt(0) + ';';\n        });\n      };\n      var encodeCustomNamed = function (text, attr) {\n        return encodeNamed(text, attr, entitiesMap);\n      };\n      var nameMap = makeMap$3(name.replace(/\\+/g, ','));\n      if (nameMap.named && nameMap.numeric) {\n        return encodeNamedAndNumeric;\n      }\n      if (nameMap.named) {\n        if (entities) {\n          return encodeCustomNamed;\n        }\n        return encodeNamed;\n      }\n      if (nameMap.numeric) {\n        return encodeNumeric;\n      }\n      return encodeRaw;\n    };\n    var decode = function (text) {\n      return text.replace(entityRegExp, function (all, numeric) {\n        if (numeric) {\n          if (numeric.charAt(0).toLowerCase() === 'x') {\n            numeric = parseInt(numeric.substr(1), 16);\n          } else {\n            numeric = parseInt(numeric, 10);\n          }\n          if (numeric > 65535) {\n            numeric -= 65536;\n            return String.fromCharCode(55296 + (numeric >> 10), 56320 + (numeric & 1023));\n          }\n          return asciiMap[numeric] || String.fromCharCode(numeric);\n        }\n        return reverseEntities[all] || namedEntities[all] || nativeDecode(all);\n      });\n    };\n    var Entities = {\n      encodeRaw: encodeRaw,\n      encodeAllRaw: encodeAllRaw,\n      encodeNumeric: encodeNumeric,\n      encodeNamed: encodeNamed,\n      getEncodeFunc: getEncodeFunc,\n      decode: decode\n    };\n\n    var mapCache = {}, dummyObj = {};\n    var makeMap$2 = Tools.makeMap, each$h = Tools.each, extend$5 = Tools.extend, explode$3 = Tools.explode, inArray$2 = Tools.inArray;\n    var split$1 = function (items, delim) {\n      items = Tools.trim(items);\n      return items ? items.split(delim || ' ') : [];\n    };\n    var createMap = function (defaultValue, extendWith) {\n      var value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' '));\n      return extend$5(value, extendWith);\n    };\n    var getTextRootBlockElements = function (schema) {\n      return createMap('td th li dt dd figcaption caption details summary', schema.getTextBlockElements());\n    };\n    var compileSchema = function (type) {\n      var schema = {};\n      var globalAttributes, blockContent;\n      var phrasingContent, flowContent, html4BlockContent, html4PhrasingContent;\n      var add = function (name, attributes, children) {\n        var ni, attributesOrder, element;\n        var arrayToMap = function (array, obj) {\n          var map = {};\n          var i, l;\n          for (i = 0, l = array.length; i < l; i++) {\n            map[array[i]] = obj || {};\n          }\n          return map;\n        };\n        children = children || [];\n        attributes = attributes || '';\n        if (typeof children === 'string') {\n          children = split$1(children);\n        }\n        var names = split$1(name);\n        ni = names.length;\n        while (ni--) {\n          attributesOrder = split$1([\n            globalAttributes,\n            attributes\n          ].join(' '));\n          element = {\n            attributes: arrayToMap(attributesOrder),\n            attributesOrder: attributesOrder,\n            children: arrayToMap(children, dummyObj)\n          };\n          schema[names[ni]] = element;\n        }\n      };\n      var addAttrs = function (name, attributes) {\n        var ni, schemaItem, i, l;\n        var names = split$1(name);\n        ni = names.length;\n        var attrs = split$1(attributes);\n        while (ni--) {\n          schemaItem = schema[names[ni]];\n          for (i = 0, l = attrs.length; i < l; i++) {\n            schemaItem.attributes[attrs[i]] = {};\n            schemaItem.attributesOrder.push(attrs[i]);\n          }\n        }\n      };\n      if (mapCache[type]) {\n        return mapCache[type];\n      }\n      globalAttributes = 'id accesskey class dir lang style tabindex title role';\n      blockContent = 'address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul';\n      phrasingContent = 'a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd ' + 'label map noscript object q s samp script select small span strong sub sup ' + 'textarea u var #text #comment';\n      if (type !== 'html4') {\n        globalAttributes += ' contenteditable contextmenu draggable dropzone ' + 'hidden spellcheck translate';\n        blockContent += ' article aside details dialog figure main header footer hgroup section nav';\n        phrasingContent += ' audio canvas command datalist mark meter output picture ' + 'progress time wbr video ruby bdi keygen';\n      }\n      if (type !== 'html5-strict') {\n        globalAttributes += ' xml:lang';\n        html4PhrasingContent = 'acronym applet basefont big font strike tt';\n        phrasingContent = [\n          phrasingContent,\n          html4PhrasingContent\n        ].join(' ');\n        each$h(split$1(html4PhrasingContent), function (name) {\n          add(name, '', phrasingContent);\n        });\n        html4BlockContent = 'center dir isindex noframes';\n        blockContent = [\n          blockContent,\n          html4BlockContent\n        ].join(' ');\n        flowContent = [\n          blockContent,\n          phrasingContent\n        ].join(' ');\n        each$h(split$1(html4BlockContent), function (name) {\n          add(name, '', flowContent);\n        });\n      }\n      flowContent = flowContent || [\n        blockContent,\n        phrasingContent\n      ].join(' ');\n      add('html', 'manifest', 'head body');\n      add('head', '', 'base command link meta noscript script style title');\n      add('title hr noscript br');\n      add('base', 'href target');\n      add('link', 'href rel media hreflang type sizes hreflang');\n      add('meta', 'name http-equiv content charset');\n      add('style', 'media type scoped');\n      add('script', 'src async defer type charset');\n      add('body', 'onafterprint onbeforeprint onbeforeunload onblur onerror onfocus ' + 'onhashchange onload onmessage onoffline ononline onpagehide onpageshow ' + 'onpopstate onresize onscroll onstorage onunload', flowContent);\n      add('address dt dd div caption', '', flowContent);\n      add('h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn', '', phrasingContent);\n      add('blockquote', 'cite', flowContent);\n      add('ol', 'reversed start type', 'li');\n      add('ul', '', 'li');\n      add('li', 'value', flowContent);\n      add('dl', '', 'dt dd');\n      add('a', 'href target rel media hreflang type', phrasingContent);\n      add('q', 'cite', phrasingContent);\n      add('ins del', 'cite datetime', flowContent);\n      add('img', 'src sizes srcset alt usemap ismap width height');\n      add('iframe', 'src name width height', flowContent);\n      add('embed', 'src type width height');\n      add('object', 'data type typemustmatch name usemap form width height', [\n        flowContent,\n        'param'\n      ].join(' '));\n      add('param', 'name value');\n      add('map', 'name', [\n        flowContent,\n        'area'\n      ].join(' '));\n      add('area', 'alt coords shape href target rel media hreflang type');\n      add('table', 'border', 'caption colgroup thead tfoot tbody tr' + (type === 'html4' ? ' col' : ''));\n      add('colgroup', 'span', 'col');\n      add('col', 'span');\n      add('tbody thead tfoot', '', 'tr');\n      add('tr', '', 'td th');\n      add('td', 'colspan rowspan headers', flowContent);\n      add('th', 'colspan rowspan headers scope abbr', flowContent);\n      add('form', 'accept-charset action autocomplete enctype method name novalidate target', flowContent);\n      add('fieldset', 'disabled form name', [\n        flowContent,\n        'legend'\n      ].join(' '));\n      add('label', 'form for', phrasingContent);\n      add('input', 'accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate ' + 'formtarget height list max maxlength min multiple name pattern readonly required size src step type value width');\n      add('button', 'disabled form formaction formenctype formmethod formnovalidate formtarget name type value', type === 'html4' ? flowContent : phrasingContent);\n      add('select', 'disabled form multiple name required size', 'option optgroup');\n      add('optgroup', 'disabled label', 'option');\n      add('option', 'disabled label selected value');\n      add('textarea', 'cols dirname disabled form maxlength name readonly required rows wrap');\n      add('menu', 'type label', [\n        flowContent,\n        'li'\n      ].join(' '));\n      add('noscript', '', flowContent);\n      if (type !== 'html4') {\n        add('wbr');\n        add('ruby', '', [\n          phrasingContent,\n          'rt rp'\n        ].join(' '));\n        add('figcaption', '', flowContent);\n        add('mark rt rp summary bdi', '', phrasingContent);\n        add('canvas', 'width height', flowContent);\n        add('video', 'src crossorigin poster preload autoplay mediagroup loop ' + 'muted controls width height buffered', [\n          flowContent,\n          'track source'\n        ].join(' '));\n        add('audio', 'src crossorigin preload autoplay mediagroup loop muted controls ' + 'buffered volume', [\n          flowContent,\n          'track source'\n        ].join(' '));\n        add('picture', '', 'img source');\n        add('source', 'src srcset type media sizes');\n        add('track', 'kind src srclang label default');\n        add('datalist', '', [\n          phrasingContent,\n          'option'\n        ].join(' '));\n        add('article section nav aside main header footer', '', flowContent);\n        add('hgroup', '', 'h1 h2 h3 h4 h5 h6');\n        add('figure', '', [\n          flowContent,\n          'figcaption'\n        ].join(' '));\n        add('time', 'datetime', phrasingContent);\n        add('dialog', 'open', flowContent);\n        add('command', 'type label icon disabled checked radiogroup command');\n        add('output', 'for form name', phrasingContent);\n        add('progress', 'value max', phrasingContent);\n        add('meter', 'value min max low high optimum', phrasingContent);\n        add('details', 'open', [\n          flowContent,\n          'summary'\n        ].join(' '));\n        add('keygen', 'autofocus challenge disabled form keytype name');\n      }\n      if (type !== 'html5-strict') {\n        addAttrs('script', 'language xml:space');\n        addAttrs('style', 'xml:space');\n        addAttrs('object', 'declare classid code codebase codetype archive standby align border hspace vspace');\n        addAttrs('embed', 'align name hspace vspace');\n        addAttrs('param', 'valuetype type');\n        addAttrs('a', 'charset name rev shape coords');\n        addAttrs('br', 'clear');\n        addAttrs('applet', 'codebase archive code object alt name width height align hspace vspace');\n        addAttrs('img', 'name longdesc align border hspace vspace');\n        addAttrs('iframe', 'longdesc frameborder marginwidth marginheight scrolling align');\n        addAttrs('font basefont', 'size color face');\n        addAttrs('input', 'usemap align');\n        addAttrs('select');\n        addAttrs('textarea');\n        addAttrs('h1 h2 h3 h4 h5 h6 div p legend caption', 'align');\n        addAttrs('ul', 'type compact');\n        addAttrs('li', 'type');\n        addAttrs('ol dl menu dir', 'compact');\n        addAttrs('pre', 'width xml:space');\n        addAttrs('hr', 'align noshade size width');\n        addAttrs('isindex', 'prompt');\n        addAttrs('table', 'summary width frame rules cellspacing cellpadding align bgcolor');\n        addAttrs('col', 'width align char charoff valign');\n        addAttrs('colgroup', 'width align char charoff valign');\n        addAttrs('thead', 'align char charoff valign');\n        addAttrs('tr', 'align char charoff valign bgcolor');\n        addAttrs('th', 'axis align char charoff valign nowrap bgcolor width height');\n        addAttrs('form', 'accept');\n        addAttrs('td', 'abbr axis scope align char charoff valign nowrap bgcolor width height');\n        addAttrs('tfoot', 'align char charoff valign');\n        addAttrs('tbody', 'align char charoff valign');\n        addAttrs('area', 'nohref');\n        addAttrs('body', 'background bgcolor text link vlink alink');\n      }\n      if (type !== 'html4') {\n        addAttrs('input button select textarea', 'autofocus');\n        addAttrs('input textarea', 'placeholder');\n        addAttrs('a', 'download');\n        addAttrs('link script img', 'crossorigin');\n        addAttrs('img', 'loading');\n        addAttrs('iframe', 'sandbox seamless allowfullscreen loading');\n      }\n      each$h(split$1('a form meter progress dfn'), function (name) {\n        if (schema[name]) {\n          delete schema[name].children[name];\n        }\n      });\n      delete schema.caption.children.table;\n      delete schema.script;\n      mapCache[type] = schema;\n      return schema;\n    };\n    var compileElementMap = function (value, mode) {\n      var styles;\n      if (value) {\n        styles = {};\n        if (typeof value === 'string') {\n          value = { '*': value };\n        }\n        each$h(value, function (value, key) {\n          styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$3(value, /[, ]/);\n        });\n      }\n      return styles;\n    };\n    var Schema = function (settings) {\n      var elements = {};\n      var children = {};\n      var patternElements = [];\n      var customElementsMap = {}, specialElements = {};\n      var createLookupTable = function (option, defaultValue, extendWith) {\n        var value = settings[option];\n        if (!value) {\n          value = mapCache[option];\n          if (!value) {\n            value = createMap(defaultValue, extendWith);\n            mapCache[option] = value;\n          }\n        } else {\n          value = makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/));\n        }\n        return value;\n      };\n      settings = settings || {};\n      var schemaItems = compileSchema(settings.schema);\n      if (settings.verify_html === false) {\n        settings.valid_elements = '*[*]';\n      }\n      var validStyles = compileElementMap(settings.valid_styles);\n      var invalidStyles = compileElementMap(settings.invalid_styles, 'map');\n      var validClasses = compileElementMap(settings.valid_classes, 'map');\n      var whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');\n      var selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\n      var shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');\n      var boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls');\n      var nonEmptyOrMoveCaretBeforeOnEnter = 'td th iframe video audio object script code';\n      var nonEmptyElementsMap = createLookupTable('non_empty_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' pre', shortEndedElementsMap);\n      var moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' table', shortEndedElementsMap);\n      var textBlockElementsMap = createLookupTable('text_block_elements', 'h1 h2 h3 h4 h5 h6 p div address pre form ' + 'blockquote center dir fieldset header footer article section hgroup aside main nav figure');\n      var blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + 'datalist select optgroup figcaption details summary', textBlockElementsMap);\n      var textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font s strike u var cite ' + 'dfn code mark q sup sub samp');\n      each$h((settings.special || 'script noscript iframe noframes noembed title style textarea xmp').split(' '), function (name) {\n        specialElements[name] = new RegExp('</' + name + '[^>]*>', 'gi');\n      });\n      var patternToRegExp = function (str) {\n        return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\n      };\n      var addValidElements = function (validElements) {\n        var ei, el, ai, al, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, prefix, outputName, globalAttributes, globalAttributesOrder, value;\n        var elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)])?$/, attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=:<]+)?(?:([=:<])(.*))?$/, hasPatternsRegExp = /[*?+]/;\n        if (validElements) {\n          var validElementsArr = split$1(validElements, ',');\n          if (elements['@']) {\n            globalAttributes = elements['@'].attributes;\n            globalAttributesOrder = elements['@'].attributesOrder;\n          }\n          for (ei = 0, el = validElementsArr.length; ei < el; ei++) {\n            matches = elementRuleRegExp.exec(validElementsArr[ei]);\n            if (matches) {\n              prefix = matches[1];\n              elementName = matches[2];\n              outputName = matches[3];\n              attrData = matches[5];\n              attributes = {};\n              attributesOrder = [];\n              element = {\n                attributes: attributes,\n                attributesOrder: attributesOrder\n              };\n              if (prefix === '#') {\n                element.paddEmpty = true;\n              }\n              if (prefix === '-') {\n                element.removeEmpty = true;\n              }\n              if (matches[4] === '!') {\n                element.removeEmptyAttrs = true;\n              }\n              if (globalAttributes) {\n                each$j(globalAttributes, function (value, key) {\n                  attributes[key] = value;\n                });\n                attributesOrder.push.apply(attributesOrder, globalAttributesOrder);\n              }\n              if (attrData) {\n                attrData = split$1(attrData, '|');\n                for (ai = 0, al = attrData.length; ai < al; ai++) {\n                  matches = attrRuleRegExp.exec(attrData[ai]);\n                  if (matches) {\n                    attr = {};\n                    attrType = matches[1];\n                    attrName = matches[2].replace(/[\\\\:]:/g, ':');\n                    prefix = matches[3];\n                    value = matches[4];\n                    if (attrType === '!') {\n                      element.attributesRequired = element.attributesRequired || [];\n                      element.attributesRequired.push(attrName);\n                      attr.required = true;\n                    }\n                    if (attrType === '-') {\n                      delete attributes[attrName];\n                      attributesOrder.splice(inArray$2(attributesOrder, attrName), 1);\n                      continue;\n                    }\n                    if (prefix) {\n                      if (prefix === '=') {\n                        element.attributesDefault = element.attributesDefault || [];\n                        element.attributesDefault.push({\n                          name: attrName,\n                          value: value\n                        });\n                        attr.defaultValue = value;\n                      }\n                      if (prefix === ':') {\n                        element.attributesForced = element.attributesForced || [];\n                        element.attributesForced.push({\n                          name: attrName,\n                          value: value\n                        });\n                        attr.forcedValue = value;\n                      }\n                      if (prefix === '<') {\n                        attr.validValues = makeMap$2(value, '?');\n                      }\n                    }\n                    if (hasPatternsRegExp.test(attrName)) {\n                      element.attributePatterns = element.attributePatterns || [];\n                      attr.pattern = patternToRegExp(attrName);\n                      element.attributePatterns.push(attr);\n                    } else {\n                      if (!attributes[attrName]) {\n                        attributesOrder.push(attrName);\n                      }\n                      attributes[attrName] = attr;\n                    }\n                  }\n                }\n              }\n              if (!globalAttributes && elementName === '@') {\n                globalAttributes = attributes;\n                globalAttributesOrder = attributesOrder;\n              }\n              if (outputName) {\n                element.outputName = elementName;\n                elements[outputName] = element;\n              }\n              if (hasPatternsRegExp.test(elementName)) {\n                element.pattern = patternToRegExp(elementName);\n                patternElements.push(element);\n              } else {\n                elements[elementName] = element;\n              }\n            }\n          }\n        }\n      };\n      var setValidElements = function (validElements) {\n        elements = {};\n        patternElements = [];\n        addValidElements(validElements);\n        each$h(schemaItems, function (element, name) {\n          children[name] = element.children;\n        });\n      };\n      var addCustomElements = function (customElements) {\n        var customElementRegExp = /^(~)?(.+)$/;\n        if (customElements) {\n          mapCache.text_block_elements = mapCache.block_elements = null;\n          each$h(split$1(customElements, ','), function (rule) {\n            var matches = customElementRegExp.exec(rule), inline = matches[1] === '~', cloneName = inline ? 'span' : 'div', name = matches[2];\n            children[name] = children[cloneName];\n            customElementsMap[name] = cloneName;\n            if (!inline) {\n              blockElementsMap[name.toUpperCase()] = {};\n              blockElementsMap[name] = {};\n            }\n            if (!elements[name]) {\n              var customRule = elements[cloneName];\n              customRule = extend$5({}, customRule);\n              delete customRule.removeEmptyAttrs;\n              delete customRule.removeEmpty;\n              elements[name] = customRule;\n            }\n            each$h(children, function (element, elmName) {\n              if (element[cloneName]) {\n                children[elmName] = element = extend$5({}, children[elmName]);\n                element[name] = element[cloneName];\n              }\n            });\n          });\n        }\n      };\n      var addValidChildren = function (validChildren) {\n        var childRuleRegExp = /^([+\\-]?)([A-Za-z0-9_\\-.\\u00b7\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u037d\\u037f-\\u1fff\\u200c-\\u200d\\u203f-\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]+)\\[([^\\]]+)]$/;\n        mapCache[settings.schema] = null;\n        if (validChildren) {\n          each$h(split$1(validChildren, ','), function (rule) {\n            var matches = childRuleRegExp.exec(rule);\n            var parent, prefix;\n            if (matches) {\n              prefix = matches[1];\n              if (prefix) {\n                parent = children[matches[2]];\n              } else {\n                parent = children[matches[2]] = { '#comment': {} };\n              }\n              parent = children[matches[2]];\n              each$h(split$1(matches[3], '|'), function (child) {\n                if (prefix === '-') {\n                  delete parent[child];\n                } else {\n                  parent[child] = {};\n                }\n              });\n            }\n          });\n        }\n      };\n      var getElementRule = function (name) {\n        var element = elements[name], i;\n        if (element) {\n          return element;\n        }\n        i = patternElements.length;\n        while (i--) {\n          element = patternElements[i];\n          if (element.pattern.test(name)) {\n            return element;\n          }\n        }\n      };\n      if (!settings.valid_elements) {\n        each$h(schemaItems, function (element, name) {\n          elements[name] = {\n            attributes: element.attributes,\n            attributesOrder: element.attributesOrder\n          };\n          children[name] = element.children;\n        });\n        if (settings.schema !== 'html5') {\n          each$h(split$1('strong/b em/i'), function (item) {\n            var items = split$1(item, '/');\n            elements[items[1]].outputName = items[0];\n          });\n        }\n        each$h(textInlineElementsMap, function (_val, name) {\n          if (elements[name]) {\n            if (settings.padd_empty_block_inline_children) {\n              elements[name].paddInEmptyBlock = true;\n            }\n            elements[name].removeEmpty = true;\n          }\n        });\n        each$h(split$1('ol ul blockquote a table tbody'), function (name) {\n          if (elements[name]) {\n            elements[name].removeEmpty = true;\n          }\n        });\n        each$h(split$1('p h1 h2 h3 h4 h5 h6 th td pre div address caption li'), function (name) {\n          elements[name].paddEmpty = true;\n        });\n        each$h(split$1('span'), function (name) {\n          elements[name].removeEmptyAttrs = true;\n        });\n      } else {\n        setValidElements(settings.valid_elements);\n      }\n      addCustomElements(settings.custom_elements);\n      addValidChildren(settings.valid_children);\n      addValidElements(settings.extended_valid_elements);\n      addValidChildren('+ol[ul|ol],+ul[ul|ol]');\n      each$h({\n        dd: 'dl',\n        dt: 'dl',\n        li: 'ul ol',\n        td: 'tr',\n        th: 'tr',\n        tr: 'tbody thead tfoot',\n        tbody: 'table',\n        thead: 'table',\n        tfoot: 'table',\n        legend: 'fieldset',\n        area: 'map',\n        param: 'video audio object'\n      }, function (parents, item) {\n        if (elements[item]) {\n          elements[item].parentsRequired = split$1(parents);\n        }\n      });\n      if (settings.invalid_elements) {\n        each$h(explode$3(settings.invalid_elements), function (item) {\n          if (elements[item]) {\n            delete elements[item];\n          }\n        });\n      }\n      if (!getElementRule('span')) {\n        addValidElements('span[!data-mce-type|*]');\n      }\n      var getValidStyles = constant(validStyles);\n      var getInvalidStyles = constant(invalidStyles);\n      var getValidClasses = constant(validClasses);\n      var getBoolAttrs = constant(boolAttrMap);\n      var getBlockElements = constant(blockElementsMap);\n      var getTextBlockElements = constant(textBlockElementsMap);\n      var getTextInlineElements = constant(textInlineElementsMap);\n      var getShortEndedElements = constant(shortEndedElementsMap);\n      var getSelfClosingElements = constant(selfClosingElementsMap);\n      var getNonEmptyElements = constant(nonEmptyElementsMap);\n      var getMoveCaretBeforeOnEnterElements = constant(moveCaretBeforeOnEnterElementsMap);\n      var getWhiteSpaceElements = constant(whiteSpaceElementsMap);\n      var getSpecialElements = constant(specialElements);\n      var isValidChild = function (name, child) {\n        var parent = children[name.toLowerCase()];\n        return !!(parent && parent[child.toLowerCase()]);\n      };\n      var isValid = function (name, attr) {\n        var attrPatterns, i;\n        var rule = getElementRule(name);\n        if (rule) {\n          if (attr) {\n            if (rule.attributes[attr]) {\n              return true;\n            }\n            attrPatterns = rule.attributePatterns;\n            if (attrPatterns) {\n              i = attrPatterns.length;\n              while (i--) {\n                if (attrPatterns[i].pattern.test(name)) {\n                  return true;\n                }\n              }\n            }\n          } else {\n            return true;\n          }\n        }\n        return false;\n      };\n      var getCustomElements = constant(customElementsMap);\n      return {\n        children: children,\n        elements: elements,\n        getValidStyles: getValidStyles,\n        getValidClasses: getValidClasses,\n        getBlockElements: getBlockElements,\n        getInvalidStyles: getInvalidStyles,\n        getShortEndedElements: getShortEndedElements,\n        getTextBlockElements: getTextBlockElements,\n        getTextInlineElements: getTextInlineElements,\n        getBoolAttrs: getBoolAttrs,\n        getElementRule: getElementRule,\n        getSelfClosingElements: getSelfClosingElements,\n        getNonEmptyElements: getNonEmptyElements,\n        getMoveCaretBeforeOnEnterElements: getMoveCaretBeforeOnEnterElements,\n        getWhiteSpaceElements: getWhiteSpaceElements,\n        getSpecialElements: getSpecialElements,\n        isValidChild: isValidChild,\n        isValid: isValid,\n        getCustomElements: getCustomElements,\n        addValidElements: addValidElements,\n        setValidElements: setValidElements,\n        addCustomElements: addCustomElements,\n        addValidChildren: addValidChildren\n      };\n    };\n\n    var toHex = function (match, r, g, b) {\n      var hex = function (val) {\n        val = parseInt(val, 10).toString(16);\n        return val.length > 1 ? val : '0' + val;\n      };\n      return '#' + hex(r) + hex(g) + hex(b);\n    };\n    var Styles = function (settings, schema) {\n      var _this = this;\n      var rgbRegExp = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/gi;\n      var urlOrStrRegExp = /(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi;\n      var styleRegExp = /\\s*([^:]+):\\s*([^;]+);?/g;\n      var trimRightRegExp = /\\s+$/;\n      var i;\n      var encodingLookup = {};\n      var validStyles;\n      var invalidStyles;\n      var invisibleChar = zeroWidth;\n      settings = settings || {};\n      if (schema) {\n        validStyles = schema.getValidStyles();\n        invalidStyles = schema.getInvalidStyles();\n      }\n      var encodingItems = ('\\\\\" \\\\\\' \\\\; \\\\: ; : ' + invisibleChar).split(' ');\n      for (i = 0; i < encodingItems.length; i++) {\n        encodingLookup[encodingItems[i]] = invisibleChar + i;\n        encodingLookup[invisibleChar + i] = encodingItems[i];\n      }\n      return {\n        toHex: function (color) {\n          return color.replace(rgbRegExp, toHex);\n        },\n        parse: function (css) {\n          var styles = {};\n          var matches, name, value, isEncoded;\n          var urlConverter = settings.url_converter;\n          var urlConverterScope = settings.url_converter_scope || _this;\n          var compress = function (prefix, suffix, noJoin) {\n            var top = styles[prefix + '-top' + suffix];\n            if (!top) {\n              return;\n            }\n            var right = styles[prefix + '-right' + suffix];\n            if (!right) {\n              return;\n            }\n            var bottom = styles[prefix + '-bottom' + suffix];\n            if (!bottom) {\n              return;\n            }\n            var left = styles[prefix + '-left' + suffix];\n            if (!left) {\n              return;\n            }\n            var box = [\n              top,\n              right,\n              bottom,\n              left\n            ];\n            i = box.length - 1;\n            while (i--) {\n              if (box[i] !== box[i + 1]) {\n                break;\n              }\n            }\n            if (i > -1 && noJoin) {\n              return;\n            }\n            styles[prefix + suffix] = i === -1 ? box[0] : box.join(' ');\n            delete styles[prefix + '-top' + suffix];\n            delete styles[prefix + '-right' + suffix];\n            delete styles[prefix + '-bottom' + suffix];\n            delete styles[prefix + '-left' + suffix];\n          };\n          var canCompress = function (key) {\n            var value = styles[key], i;\n            if (!value) {\n              return;\n            }\n            value = value.split(' ');\n            i = value.length;\n            while (i--) {\n              if (value[i] !== value[0]) {\n                return false;\n              }\n            }\n            styles[key] = value[0];\n            return true;\n          };\n          var compress2 = function (target, a, b, c) {\n            if (!canCompress(a)) {\n              return;\n            }\n            if (!canCompress(b)) {\n              return;\n            }\n            if (!canCompress(c)) {\n              return;\n            }\n            styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];\n            delete styles[a];\n            delete styles[b];\n            delete styles[c];\n          };\n          var encode = function (str) {\n            isEncoded = true;\n            return encodingLookup[str];\n          };\n          var decode = function (str, keepSlashes) {\n            if (isEncoded) {\n              str = str.replace(/\\uFEFF[0-9]/g, function (str) {\n                return encodingLookup[str];\n              });\n            }\n            if (!keepSlashes) {\n              str = str.replace(/\\\\([\\'\\\";:])/g, '$1');\n            }\n            return str;\n          };\n          var decodeSingleHexSequence = function (escSeq) {\n            return String.fromCharCode(parseInt(escSeq.slice(1), 16));\n          };\n          var decodeHexSequences = function (value) {\n            return value.replace(/\\\\[0-9a-f]+/gi, decodeSingleHexSequence);\n          };\n          var processUrl = function (match, url, url2, url3, str, str2) {\n            str = str || str2;\n            if (str) {\n              str = decode(str);\n              return '\\'' + str.replace(/\\'/g, '\\\\\\'') + '\\'';\n            }\n            url = decode(url || url2 || url3);\n            if (!settings.allow_script_urls) {\n              var scriptUrl = url.replace(/[\\s\\r\\n]+/g, '');\n              if (/(java|vb)script:/i.test(scriptUrl)) {\n                return '';\n              }\n              if (!settings.allow_svg_data_urls && /^data:image\\/svg/i.test(scriptUrl)) {\n                return '';\n              }\n            }\n            if (urlConverter) {\n              url = urlConverter.call(urlConverterScope, url, 'style');\n            }\n            return 'url(\\'' + url.replace(/\\'/g, '\\\\\\'') + '\\')';\n          };\n          if (css) {\n            css = css.replace(/[\\u0000-\\u001F]/g, '');\n            css = css.replace(/\\\\[\\\"\\';:\\uFEFF]/g, encode).replace(/\\\"[^\\\"]+\\\"|\\'[^\\']+\\'/g, function (str) {\n              return str.replace(/[;:]/g, encode);\n            });\n            while (matches = styleRegExp.exec(css)) {\n              styleRegExp.lastIndex = matches.index + matches[0].length;\n              name = matches[1].replace(trimRightRegExp, '').toLowerCase();\n              value = matches[2].replace(trimRightRegExp, '');\n              if (name && value) {\n                name = decodeHexSequences(name);\n                value = decodeHexSequences(value);\n                if (name.indexOf(invisibleChar) !== -1 || name.indexOf('\"') !== -1) {\n                  continue;\n                }\n                if (!settings.allow_script_urls && (name === 'behavior' || /expression\\s*\\(|\\/\\*|\\*\\//.test(value))) {\n                  continue;\n                }\n                if (name === 'font-weight' && value === '700') {\n                  value = 'bold';\n                } else if (name === 'color' || name === 'background-color') {\n                  value = value.toLowerCase();\n                }\n                value = value.replace(rgbRegExp, toHex);\n                value = value.replace(urlOrStrRegExp, processUrl);\n                styles[name] = isEncoded ? decode(value, true) : value;\n              }\n            }\n            compress('border', '', true);\n            compress('border', '-width');\n            compress('border', '-color');\n            compress('border', '-style');\n            compress('padding', '');\n            compress('margin', '');\n            compress2('border', 'border-width', 'border-style', 'border-color');\n            if (styles.border === 'medium none') {\n              delete styles.border;\n            }\n            if (styles['border-image'] === 'none') {\n              delete styles['border-image'];\n            }\n          }\n          return styles;\n        },\n        serialize: function (styles, elementName) {\n          var css = '';\n          var serializeStyles = function (name) {\n            var value;\n            var styleList = validStyles[name];\n            if (styleList) {\n              for (var i_1 = 0, l = styleList.length; i_1 < l; i_1++) {\n                name = styleList[i_1];\n                value = styles[name];\n                if (value) {\n                  css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n                }\n              }\n            }\n          };\n          var isValid = function (name, elementName) {\n            var styleMap = invalidStyles['*'];\n            if (styleMap && styleMap[name]) {\n              return false;\n            }\n            styleMap = invalidStyles[elementName];\n            return !(styleMap && styleMap[name]);\n          };\n          if (elementName && validStyles) {\n            serializeStyles('*');\n            serializeStyles(elementName);\n          } else {\n            each$j(styles, function (value, name) {\n              if (value && (!invalidStyles || isValid(name, elementName))) {\n                css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n              }\n            });\n          }\n          return css;\n        }\n      };\n    };\n\n    var deprecated = {\n      keyLocation: true,\n      layerX: true,\n      layerY: true,\n      returnValue: true,\n      webkitMovementX: true,\n      webkitMovementY: true,\n      keyIdentifier: true,\n      mozPressure: true\n    };\n    var isNativeEvent = function (event) {\n      return event instanceof Event || isFunction(event.initEvent);\n    };\n    var hasIsDefaultPrevented = function (event) {\n      return event.isDefaultPrevented === always || event.isDefaultPrevented === never;\n    };\n    var needsNormalizing = function (event) {\n      return isNullable(event.preventDefault) || isNativeEvent(event);\n    };\n    var clone$2 = function (originalEvent, data) {\n      var event = data !== null && data !== void 0 ? data : {};\n      for (var name_1 in originalEvent) {\n        if (!has$2(deprecated, name_1)) {\n          event[name_1] = originalEvent[name_1];\n        }\n      }\n      if (isNonNullable(event.composedPath)) {\n        event.composedPath = function () {\n          return originalEvent.composedPath();\n        };\n      }\n      return event;\n    };\n    var normalize$3 = function (type, originalEvent, fallbackTarget, data) {\n      var _a;\n      var event = clone$2(originalEvent, data);\n      event.type = type;\n      if (isNullable(event.target)) {\n        event.target = (_a = event.srcElement) !== null && _a !== void 0 ? _a : fallbackTarget;\n      }\n      if (needsNormalizing(originalEvent)) {\n        event.preventDefault = function () {\n          event.defaultPrevented = true;\n          event.isDefaultPrevented = always;\n          if (isFunction(originalEvent.preventDefault)) {\n            originalEvent.preventDefault();\n          } else if (isNativeEvent(originalEvent)) {\n            originalEvent.returnValue = false;\n          }\n        };\n        event.stopPropagation = function () {\n          event.cancelBubble = true;\n          event.isPropagationStopped = always;\n          if (isFunction(originalEvent.stopPropagation)) {\n            originalEvent.stopPropagation();\n          } else if (isNativeEvent(originalEvent)) {\n            originalEvent.cancelBubble = true;\n          }\n        };\n        event.stopImmediatePropagation = function () {\n          event.isImmediatePropagationStopped = always;\n          event.stopPropagation();\n        };\n        if (!hasIsDefaultPrevented(event)) {\n          event.isDefaultPrevented = event.defaultPrevented === true ? always : never;\n          event.isPropagationStopped = event.cancelBubble === true ? always : never;\n          event.isImmediatePropagationStopped = never;\n        }\n      }\n      return event;\n    };\n\n    var eventExpandoPrefix = 'mce-data-';\n    var mouseEventRe = /^(?:mouse|contextmenu)|click/;\n    var addEvent = function (target, name, callback, capture) {\n      if (target.addEventListener) {\n        target.addEventListener(name, callback, capture || false);\n      } else if (target.attachEvent) {\n        target.attachEvent('on' + name, callback);\n      }\n    };\n    var removeEvent = function (target, name, callback, capture) {\n      if (target.removeEventListener) {\n        target.removeEventListener(name, callback, capture || false);\n      } else if (target.detachEvent) {\n        target.detachEvent('on' + name, callback);\n      }\n    };\n    var isMouseEvent = function (event) {\n      return isNonNullable(event) && mouseEventRe.test(event.type);\n    };\n    var fix = function (originalEvent, data) {\n      var event = normalize$3(originalEvent.type, originalEvent, document, data);\n      if (isMouseEvent(originalEvent) && isUndefined(originalEvent.pageX) && !isUndefined(originalEvent.clientX)) {\n        var eventDoc = event.target.ownerDocument || document;\n        var doc = eventDoc.documentElement;\n        var body = eventDoc.body;\n        var mouseEvent = event;\n        mouseEvent.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n        mouseEvent.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n      }\n      if (isUndefined(event.metaKey)) {\n        event.metaKey = false;\n      }\n      return event;\n    };\n    var bindOnReady = function (win, callback, eventUtils) {\n      var doc = win.document, event = { type: 'ready' };\n      if (eventUtils.domLoaded) {\n        callback(event);\n        return;\n      }\n      var isDocReady = function () {\n        return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;\n      };\n      var readyHandler = function () {\n        removeEvent(win, 'DOMContentLoaded', readyHandler);\n        removeEvent(win, 'load', readyHandler);\n        if (!eventUtils.domLoaded) {\n          eventUtils.domLoaded = true;\n          callback(event);\n        }\n        win = null;\n      };\n      if (isDocReady()) {\n        readyHandler();\n      } else {\n        addEvent(win, 'DOMContentLoaded', readyHandler);\n      }\n      if (!eventUtils.domLoaded) {\n        addEvent(win, 'load', readyHandler);\n      }\n    };\n    var EventUtils = function () {\n      function EventUtils() {\n        this.domLoaded = false;\n        this.events = {};\n        this.count = 1;\n        this.expando = eventExpandoPrefix + (+new Date()).toString(32);\n        this.hasMouseEnterLeave = 'onmouseenter' in document.documentElement;\n        this.hasFocusIn = 'onfocusin' in document.documentElement;\n        this.count = 1;\n      }\n      EventUtils.prototype.bind = function (target, names, callback, scope) {\n        var self = this;\n        var id, callbackList, i, name, fakeName, nativeHandler, capture;\n        var win = window;\n        var defaultNativeHandler = function (evt) {\n          self.executeHandlers(fix(evt || win.event), id);\n        };\n        if (!target || target.nodeType === 3 || target.nodeType === 8) {\n          return;\n        }\n        if (!target[self.expando]) {\n          id = self.count++;\n          target[self.expando] = id;\n          self.events[id] = {};\n        } else {\n          id = target[self.expando];\n        }\n        scope = scope || target;\n        var namesList = names.split(' ');\n        i = namesList.length;\n        while (i--) {\n          name = namesList[i];\n          nativeHandler = defaultNativeHandler;\n          fakeName = capture = false;\n          if (name === 'DOMContentLoaded') {\n            name = 'ready';\n          }\n          if (self.domLoaded && name === 'ready' && target.readyState === 'complete') {\n            callback.call(scope, fix({ type: name }));\n            continue;\n          }\n          if (!self.hasMouseEnterLeave) {\n            fakeName = self.mouseEnterLeave[name];\n            if (fakeName) {\n              nativeHandler = function (evt) {\n                var current = evt.currentTarget;\n                var related = evt.relatedTarget;\n                if (related && current.contains) {\n                  related = current.contains(related);\n                } else {\n                  while (related && related !== current) {\n                    related = related.parentNode;\n                  }\n                }\n                if (!related) {\n                  evt = fix(evt || win.event);\n                  evt.type = evt.type === 'mouseout' ? 'mouseleave' : 'mouseenter';\n                  evt.target = current;\n                  self.executeHandlers(evt, id);\n                }\n              };\n            }\n          }\n          if (!self.hasFocusIn && (name === 'focusin' || name === 'focusout')) {\n            capture = true;\n            fakeName = name === 'focusin' ? 'focus' : 'blur';\n            nativeHandler = function (evt) {\n              evt = fix(evt || win.event);\n              evt.type = evt.type === 'focus' ? 'focusin' : 'focusout';\n              self.executeHandlers(evt, id);\n            };\n          }\n          callbackList = self.events[id][name];\n          if (!callbackList) {\n            self.events[id][name] = callbackList = [{\n                func: callback,\n                scope: scope\n              }];\n            callbackList.fakeName = fakeName;\n            callbackList.capture = capture;\n            callbackList.nativeHandler = nativeHandler;\n            if (name === 'ready') {\n              bindOnReady(target, nativeHandler, self);\n            } else {\n              addEvent(target, fakeName || name, nativeHandler, capture);\n            }\n          } else {\n            if (name === 'ready' && self.domLoaded) {\n              callback(fix({ type: name }));\n            } else {\n              callbackList.push({\n                func: callback,\n                scope: scope\n              });\n            }\n          }\n        }\n        target = callbackList = null;\n        return callback;\n      };\n      EventUtils.prototype.unbind = function (target, names, callback) {\n        var callbackList, i, ci, name, eventMap;\n        if (!target || target.nodeType === 3 || target.nodeType === 8) {\n          return this;\n        }\n        var id = target[this.expando];\n        if (id) {\n          eventMap = this.events[id];\n          if (names) {\n            var namesList = names.split(' ');\n            i = namesList.length;\n            while (i--) {\n              name = namesList[i];\n              callbackList = eventMap[name];\n              if (callbackList) {\n                if (callback) {\n                  ci = callbackList.length;\n                  while (ci--) {\n                    if (callbackList[ci].func === callback) {\n                      var nativeHandler = callbackList.nativeHandler;\n                      var fakeName = callbackList.fakeName, capture = callbackList.capture;\n                      callbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1));\n                      callbackList.nativeHandler = nativeHandler;\n                      callbackList.fakeName = fakeName;\n                      callbackList.capture = capture;\n                      eventMap[name] = callbackList;\n                    }\n                  }\n                }\n                if (!callback || callbackList.length === 0) {\n                  delete eventMap[name];\n                  removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n                }\n              }\n            }\n          } else {\n            each$j(eventMap, function (callbackList, name) {\n              removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n            });\n            eventMap = {};\n          }\n          for (name in eventMap) {\n            if (has$2(eventMap, name)) {\n              return this;\n            }\n          }\n          delete this.events[id];\n          try {\n            delete target[this.expando];\n          } catch (ex) {\n            target[this.expando] = null;\n          }\n        }\n        return this;\n      };\n      EventUtils.prototype.fire = function (target, name, args) {\n        var id;\n        if (!target || target.nodeType === 3 || target.nodeType === 8) {\n          return this;\n        }\n        var event = fix({\n          type: name,\n          target: target\n        }, args);\n        do {\n          id = target[this.expando];\n          if (id) {\n            this.executeHandlers(event, id);\n          }\n          target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;\n        } while (target && !event.isPropagationStopped());\n        return this;\n      };\n      EventUtils.prototype.clean = function (target) {\n        var i, children;\n        if (!target || target.nodeType === 3 || target.nodeType === 8) {\n          return this;\n        }\n        if (target[this.expando]) {\n          this.unbind(target);\n        }\n        if (!target.getElementsByTagName) {\n          target = target.document;\n        }\n        if (target && target.getElementsByTagName) {\n          this.unbind(target);\n          children = target.getElementsByTagName('*');\n          i = children.length;\n          while (i--) {\n            target = children[i];\n            if (target[this.expando]) {\n              this.unbind(target);\n            }\n          }\n        }\n        return this;\n      };\n      EventUtils.prototype.destroy = function () {\n        this.events = {};\n      };\n      EventUtils.prototype.cancel = function (e) {\n        if (e) {\n          e.preventDefault();\n          e.stopImmediatePropagation();\n        }\n        return false;\n      };\n      EventUtils.prototype.executeHandlers = function (evt, id) {\n        var container = this.events[id];\n        var callbackList = container && container[evt.type];\n        if (callbackList) {\n          for (var i = 0, l = callbackList.length; i < l; i++) {\n            var callback = callbackList[i];\n            if (callback && callback.func.call(callback.scope, evt) === false) {\n              evt.preventDefault();\n            }\n            if (evt.isImmediatePropagationStopped()) {\n              return;\n            }\n          }\n        }\n      };\n      EventUtils.Event = new EventUtils();\n      return EventUtils;\n    }();\n\n    var support, Expr, getText, isXML, tokenize, compile, select$1, outermostContext, sortInput, hasDuplicate, setDocument, document$1, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains, expando = 'sizzle' + -new Date(), preferredDoc = window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function (a, b) {\n        if (a === b) {\n          hasDuplicate = true;\n        }\n        return 0;\n      }, strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, hasOwn = {}.hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push$1 = arr.push, slice$1 = arr.slice, indexOf = arr.indexOf || function (elem) {\n        var i = 0, len = this.length;\n        for (; i < len; i++) {\n          if (this[i] === elem) {\n            return i;\n          }\n        }\n        return -1;\n      }, booleans = 'checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped', whitespace = '[\\\\x20\\\\t\\\\r\\\\n\\\\f]', identifier = '(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+', attributes = '\\\\[' + whitespace + '*(' + identifier + ')(?:' + whitespace + '*([*^$|!~]?=)' + whitespace + '*(?:\\'((?:\\\\\\\\.|[^\\\\\\\\\\'])*)\\'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\"|(' + identifier + '))|)' + whitespace + '*\\\\]', pseudos = ':(' + identifier + ')(?:\\\\((' + '(\\'((?:\\\\\\\\.|[^\\\\\\\\\\'])*)\\'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\")|' + '((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|' + attributes + ')*)|' + '.*' + ')\\\\)|)', rtrim = new RegExp('^' + whitespace + '+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)' + whitespace + '+$', 'g'), rcomma = new RegExp('^' + whitespace + '*,' + whitespace + '*'), rcombinators = new RegExp('^' + whitespace + '*([>+~]|' + whitespace + ')' + whitespace + '*'), rattributeQuotes = new RegExp('=' + whitespace + '*([^\\\\]\\'\"]*?)' + whitespace + '*\\\\]', 'g'), rpseudo = new RegExp(pseudos), ridentifier = new RegExp('^' + identifier + '$'), matchExpr = {\n        ID: new RegExp('^#(' + identifier + ')'),\n        CLASS: new RegExp('^\\\\.(' + identifier + ')'),\n        TAG: new RegExp('^(' + identifier + '|[*])'),\n        ATTR: new RegExp('^' + attributes),\n        PSEUDO: new RegExp('^' + pseudos),\n        CHILD: new RegExp('^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(' + whitespace + '*(even|odd|(([+-]|)(\\\\d*)n|)' + whitespace + '*(?:([+-]|)' + whitespace + '*(\\\\d+)|))' + whitespace + '*\\\\)|)', 'i'),\n        bool: new RegExp('^(?:' + booleans + ')$', 'i'),\n        needsContext: new RegExp('^' + whitespace + '*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(' + whitespace + '*((?:-\\\\d)?\\\\d*)' + whitespace + '*\\\\)|)(?=[^-]|$)', 'i')\n      }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\\d$/i, rnative = /^[^{]+\\{\\s*\\[native \\w/, rquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/, rsibling = /[+~]/, rescape = /'|\\\\/g, runescape = new RegExp('\\\\\\\\([\\\\da-f]{1,6}' + whitespace + '?|(' + whitespace + ')|.)', 'ig'), funescape = function (_, escaped, escapedWhitespace) {\n        var high = '0x' + escaped - 65536;\n        return high !== high || escapedWhitespace ? escaped : high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320);\n      };\n    try {\n      push$1.apply(arr = slice$1.call(preferredDoc.childNodes), preferredDoc.childNodes);\n      arr[preferredDoc.childNodes.length].nodeType;\n    } catch (e) {\n      push$1 = {\n        apply: arr.length ? function (target, els) {\n          push_native.apply(target, slice$1.call(els));\n        } : function (target, els) {\n          var j = target.length, i = 0;\n          while (target[j++] = els[i++]) {\n          }\n          target.length = j - 1;\n        }\n      };\n    }\n    var Sizzle = function (selector, context, results, seed) {\n      var match, elem, m, nodeType, i, groups, old, nid, newContext, newSelector;\n      if ((context ? context.ownerDocument || context : preferredDoc) !== document$1) {\n        setDocument(context);\n      }\n      context = context || document$1;\n      results = results || [];\n      if (!selector || typeof selector !== 'string') {\n        return results;\n      }\n      if ((nodeType = context.nodeType) !== 1 && nodeType !== 9) {\n        return [];\n      }\n      if (documentIsHTML && !seed) {\n        if (match = rquickExpr$1.exec(selector)) {\n          if (m = match[1]) {\n            if (nodeType === 9) {\n              elem = context.getElementById(m);\n              if (elem && elem.parentNode) {\n                if (elem.id === m) {\n                  results.push(elem);\n                  return results;\n                }\n              } else {\n                return results;\n              }\n            } else {\n              if (context.ownerDocument && (elem = context.ownerDocument.getElementById(m)) && contains(context, elem) && elem.id === m) {\n                results.push(elem);\n                return results;\n              }\n            }\n          } else if (match[2]) {\n            push$1.apply(results, context.getElementsByTagName(selector));\n            return results;\n          } else if ((m = match[3]) && support.getElementsByClassName) {\n            push$1.apply(results, context.getElementsByClassName(m));\n            return results;\n          }\n        }\n        if (support.qsa && (!rbuggyQSA || !rbuggyQSA.test(selector))) {\n          nid = old = expando;\n          newContext = context;\n          newSelector = nodeType === 9 && selector;\n          if (nodeType === 1 && context.nodeName.toLowerCase() !== 'object') {\n            groups = tokenize(selector);\n            if (old = context.getAttribute('id')) {\n              nid = old.replace(rescape, '\\\\$&');\n            } else {\n              context.setAttribute('id', nid);\n            }\n            nid = '[id=\\'' + nid + '\\'] ';\n            i = groups.length;\n            while (i--) {\n              groups[i] = nid + toSelector(groups[i]);\n            }\n            newContext = rsibling.test(selector) && testContext(context.parentNode) || context;\n            newSelector = groups.join(',');\n          }\n          if (newSelector) {\n            try {\n              push$1.apply(results, newContext.querySelectorAll(newSelector));\n              return results;\n            } catch (qsaError) {\n            } finally {\n              if (!old) {\n                context.removeAttribute('id');\n              }\n            }\n          }\n        }\n      }\n      return select$1(selector.replace(rtrim, '$1'), context, results, seed);\n    };\n    function createCache() {\n      var keys = [];\n      function cache(key, value) {\n        if (keys.push(key + ' ') > Expr.cacheLength) {\n          delete cache[keys.shift()];\n        }\n        return cache[key + ' '] = value;\n      }\n      return cache;\n    }\n    function markFunction(fn) {\n      fn[expando] = true;\n      return fn;\n    }\n    function siblingCheck(a, b) {\n      var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && (~b.sourceIndex || MAX_NEGATIVE) - (~a.sourceIndex || MAX_NEGATIVE);\n      if (diff) {\n        return diff;\n      }\n      if (cur) {\n        while (cur = cur.nextSibling) {\n          if (cur === b) {\n            return -1;\n          }\n        }\n      }\n      return a ? 1 : -1;\n    }\n    function createInputPseudo(type) {\n      return function (elem) {\n        var name = elem.nodeName.toLowerCase();\n        return name === 'input' && elem.type === type;\n      };\n    }\n    function createButtonPseudo(type) {\n      return function (elem) {\n        var name = elem.nodeName.toLowerCase();\n        return (name === 'input' || name === 'button') && elem.type === type;\n      };\n    }\n    function createPositionalPseudo(fn) {\n      return markFunction(function (argument) {\n        argument = +argument;\n        return markFunction(function (seed, matches) {\n          var j, matchIndexes = fn([], seed.length, argument), i = matchIndexes.length;\n          while (i--) {\n            if (seed[j = matchIndexes[i]]) {\n              seed[j] = !(matches[j] = seed[j]);\n            }\n          }\n        });\n      });\n    }\n    function testContext(context) {\n      return context && typeof context.getElementsByTagName !== strundefined && context;\n    }\n    support = Sizzle.support = {};\n    isXML = Sizzle.isXML = function (elem) {\n      var documentElement = elem && (elem.ownerDocument || elem).documentElement;\n      return documentElement ? documentElement.nodeName !== 'HTML' : false;\n    };\n    setDocument = Sizzle.setDocument = function (node) {\n      var hasCompare, doc = node ? node.ownerDocument || node : preferredDoc, parent = doc.defaultView;\n      function getTop(win) {\n        try {\n          return win.top;\n        } catch (ex) {\n        }\n        return null;\n      }\n      if (doc === document$1 || doc.nodeType !== 9 || !doc.documentElement) {\n        return document$1;\n      }\n      document$1 = doc;\n      docElem = doc.documentElement;\n      documentIsHTML = !isXML(doc);\n      if (parent && parent !== getTop(parent)) {\n        if (parent.addEventListener) {\n          parent.addEventListener('unload', function () {\n            setDocument();\n          }, false);\n        } else if (parent.attachEvent) {\n          parent.attachEvent('onunload', function () {\n            setDocument();\n          });\n        }\n      }\n      support.attributes = true;\n      support.getElementsByTagName = true;\n      support.getElementsByClassName = rnative.test(doc.getElementsByClassName);\n      support.getById = true;\n      Expr.find.ID = function (id, context) {\n        if (typeof context.getElementById !== strundefined && documentIsHTML) {\n          var m = context.getElementById(id);\n          return m && m.parentNode ? [m] : [];\n        }\n      };\n      Expr.filter.ID = function (id) {\n        var attrId = id.replace(runescape, funescape);\n        return function (elem) {\n          return elem.getAttribute('id') === attrId;\n        };\n      };\n      Expr.find.TAG = support.getElementsByTagName ? function (tag, context) {\n        if (typeof context.getElementsByTagName !== strundefined) {\n          return context.getElementsByTagName(tag);\n        }\n      } : function (tag, context) {\n        var elem, tmp = [], i = 0, results = context.getElementsByTagName(tag);\n        if (tag === '*') {\n          while (elem = results[i++]) {\n            if (elem.nodeType === 1) {\n              tmp.push(elem);\n            }\n          }\n          return tmp;\n        }\n        return results;\n      };\n      Expr.find.CLASS = support.getElementsByClassName && function (className, context) {\n        if (documentIsHTML) {\n          return context.getElementsByClassName(className);\n        }\n      };\n      rbuggyMatches = [];\n      rbuggyQSA = [];\n      support.disconnectedMatch = true;\n      rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join('|'));\n      rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join('|'));\n      hasCompare = rnative.test(docElem.compareDocumentPosition);\n      contains = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\n        var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode;\n        return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n      } : function (a, b) {\n        if (b) {\n          while (b = b.parentNode) {\n            if (b === a) {\n              return true;\n            }\n          }\n        }\n        return false;\n      };\n      sortOrder = hasCompare ? function (a, b) {\n        if (a === b) {\n          hasDuplicate = true;\n          return 0;\n        }\n        var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n        if (compare) {\n          return compare;\n        }\n        compare = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1;\n        if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n          if (a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a)) {\n            return -1;\n          }\n          if (b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b)) {\n            return 1;\n          }\n          return sortInput ? indexOf.call(sortInput, a) - indexOf.call(sortInput, b) : 0;\n        }\n        return compare & 4 ? -1 : 1;\n      } : function (a, b) {\n        if (a === b) {\n          hasDuplicate = true;\n          return 0;\n        }\n        var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [a], bp = [b];\n        if (!aup || !bup) {\n          return a === doc ? -1 : b === doc ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf.call(sortInput, a) - indexOf.call(sortInput, b) : 0;\n        } else if (aup === bup) {\n          return siblingCheck(a, b);\n        }\n        cur = a;\n        while (cur = cur.parentNode) {\n          ap.unshift(cur);\n        }\n        cur = b;\n        while (cur = cur.parentNode) {\n          bp.unshift(cur);\n        }\n        while (ap[i] === bp[i]) {\n          i++;\n        }\n        return i ? siblingCheck(ap[i], bp[i]) : ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0;\n      };\n      return doc;\n    };\n    Sizzle.matches = function (expr, elements) {\n      return Sizzle(expr, null, null, elements);\n    };\n    Sizzle.matchesSelector = function (elem, expr) {\n      if ((elem.ownerDocument || elem) !== document$1) {\n        setDocument(elem);\n      }\n      expr = expr.replace(rattributeQuotes, '=\\'$1\\']');\n      if (support.matchesSelector && documentIsHTML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n        try {\n          var ret = matches.call(elem, expr);\n          if (ret || support.disconnectedMatch || elem.document && elem.document.nodeType !== 11) {\n            return ret;\n          }\n        } catch (e) {\n        }\n      }\n      return Sizzle(expr, document$1, null, [elem]).length > 0;\n    };\n    Sizzle.contains = function (context, elem) {\n      if ((context.ownerDocument || context) !== document$1) {\n        setDocument(context);\n      }\n      return contains(context, elem);\n    };\n    Sizzle.attr = function (elem, name) {\n      if ((elem.ownerDocument || elem) !== document$1) {\n        setDocument(elem);\n      }\n      var fn = Expr.attrHandle[name.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n      return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n    };\n    Sizzle.error = function (msg) {\n      throw new Error('Syntax error, unrecognized expression: ' + msg);\n    };\n    Sizzle.uniqueSort = function (results) {\n      var elem, duplicates = [], j = 0, i = 0;\n      hasDuplicate = !support.detectDuplicates;\n      sortInput = !support.sortStable && results.slice(0);\n      results.sort(sortOrder);\n      if (hasDuplicate) {\n        while (elem = results[i++]) {\n          if (elem === results[i]) {\n            j = duplicates.push(i);\n          }\n        }\n        while (j--) {\n          results.splice(duplicates[j], 1);\n        }\n      }\n      sortInput = null;\n      return results;\n    };\n    getText = Sizzle.getText = function (elem) {\n      var node, ret = '', i = 0, nodeType = elem.nodeType;\n      if (!nodeType) {\n        while (node = elem[i++]) {\n          ret += getText(node);\n        }\n      } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n        if (typeof elem.textContent === 'string') {\n          return elem.textContent;\n        } else {\n          for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n            ret += getText(elem);\n          }\n        }\n      } else if (nodeType === 3 || nodeType === 4) {\n        return elem.nodeValue;\n      }\n      return ret;\n    };\n    Expr = Sizzle.selectors = {\n      cacheLength: 50,\n      createPseudo: markFunction,\n      match: matchExpr,\n      attrHandle: {},\n      find: {},\n      relative: {\n        '>': {\n          dir: 'parentNode',\n          first: true\n        },\n        ' ': { dir: 'parentNode' },\n        '+': {\n          dir: 'previousSibling',\n          first: true\n        },\n        '~': { dir: 'previousSibling' }\n      },\n      preFilter: {\n        ATTR: function (match) {\n          match[1] = match[1].replace(runescape, funescape);\n          match[3] = (match[3] || match[4] || match[5] || '').replace(runescape, funescape);\n          if (match[2] === '~=') {\n            match[3] = ' ' + match[3] + ' ';\n          }\n          return match.slice(0, 4);\n        },\n        CHILD: function (match) {\n          match[1] = match[1].toLowerCase();\n          if (match[1].slice(0, 3) === 'nth') {\n            if (!match[3]) {\n              Sizzle.error(match[0]);\n            }\n            match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === 'even' || match[3] === 'odd'));\n            match[5] = +(match[7] + match[8] || match[3] === 'odd');\n          } else if (match[3]) {\n            Sizzle.error(match[0]);\n          }\n          return match;\n        },\n        PSEUDO: function (match) {\n          var excess, unquoted = !match[6] && match[2];\n          if (matchExpr.CHILD.test(match[0])) {\n            return null;\n          }\n          if (match[3]) {\n            match[2] = match[4] || match[5] || '';\n          } else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(')', unquoted.length - excess) - unquoted.length)) {\n            match[0] = match[0].slice(0, excess);\n            match[2] = unquoted.slice(0, excess);\n          }\n          return match.slice(0, 3);\n        }\n      },\n      filter: {\n        TAG: function (nodeNameSelector) {\n          var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n          return nodeNameSelector === '*' ? function () {\n            return true;\n          } : function (elem) {\n            return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n          };\n        },\n        CLASS: function (className) {\n          var pattern = classCache[className + ' '];\n          return pattern || (pattern = new RegExp('(^|' + whitespace + ')' + className + '(' + whitespace + '|$)')) && classCache(className, function (elem) {\n            return pattern.test(typeof elem.className === 'string' && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute('class') || '');\n          });\n        },\n        ATTR: function (name, operator, check) {\n          return function (elem) {\n            var result = Sizzle.attr(elem, name);\n            if (result == null) {\n              return operator === '!=';\n            }\n            if (!operator) {\n              return true;\n            }\n            result += '';\n            return operator === '=' ? result === check : operator === '!=' ? result !== check : operator === '^=' ? check && result.indexOf(check) === 0 : operator === '*=' ? check && result.indexOf(check) > -1 : operator === '$=' ? check && result.slice(-check.length) === check : operator === '~=' ? (' ' + result + ' ').indexOf(check) > -1 : operator === '|=' ? result === check || result.slice(0, check.length + 1) === check + '-' : false;\n          };\n        },\n        CHILD: function (type, what, argument, first, last) {\n          var simple = type.slice(0, 3) !== 'nth', forward = type.slice(-4) !== 'last', ofType = what === 'of-type';\n          return first === 1 && last === 0 ? function (elem) {\n            return !!elem.parentNode;\n          } : function (elem, context, xml) {\n            var cache, outerCache, node, diff, nodeIndex, start, dir = simple !== forward ? 'nextSibling' : 'previousSibling', parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType;\n            if (parent) {\n              if (simple) {\n                while (dir) {\n                  node = elem;\n                  while (node = node[dir]) {\n                    if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n                      return false;\n                    }\n                  }\n                  start = dir = type === 'only' && !start && 'nextSibling';\n                }\n                return true;\n              }\n              start = [forward ? parent.firstChild : parent.lastChild];\n              if (forward && useCache) {\n                outerCache = parent[expando] || (parent[expando] = {});\n                cache = outerCache[type] || [];\n                nodeIndex = cache[0] === dirruns && cache[1];\n                diff = cache[0] === dirruns && cache[2];\n                node = nodeIndex && parent.childNodes[nodeIndex];\n                while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n                  if (node.nodeType === 1 && ++diff && node === elem) {\n                    outerCache[type] = [\n                      dirruns,\n                      nodeIndex,\n                      diff\n                    ];\n                    break;\n                  }\n                }\n              } else if (useCache && (cache = (elem[expando] || (elem[expando] = {}))[type]) && cache[0] === dirruns) {\n                diff = cache[1];\n              } else {\n                while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n                  if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n                    if (useCache) {\n                      (node[expando] || (node[expando] = {}))[type] = [\n                        dirruns,\n                        diff\n                      ];\n                    }\n                    if (node === elem) {\n                      break;\n                    }\n                  }\n                }\n              }\n              diff -= last;\n              return diff === first || diff % first === 0 && diff / first >= 0;\n            }\n          };\n        },\n        PSEUDO: function (pseudo, argument) {\n          var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error('unsupported pseudo: ' + pseudo);\n          if (fn[expando]) {\n            return fn(argument);\n          }\n          if (fn.length > 1) {\n            args = [\n              pseudo,\n              pseudo,\n              '',\n              argument\n            ];\n            return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n              var idx, matched = fn(seed, argument), i = matched.length;\n              while (i--) {\n                idx = indexOf.call(seed, matched[i]);\n                seed[idx] = !(matches[idx] = matched[i]);\n              }\n            }) : function (elem) {\n              return fn(elem, 0, args);\n            };\n          }\n          return fn;\n        }\n      },\n      pseudos: {\n        not: markFunction(function (selector) {\n          var input = [], results = [], matcher = compile(selector.replace(rtrim, '$1'));\n          return matcher[expando] ? markFunction(function (seed, matches, context, xml) {\n            var elem, unmatched = matcher(seed, null, xml, []), i = seed.length;\n            while (i--) {\n              if (elem = unmatched[i]) {\n                seed[i] = !(matches[i] = elem);\n              }\n            }\n          }) : function (elem, context, xml) {\n            input[0] = elem;\n            matcher(input, null, xml, results);\n            input[0] = null;\n            return !results.pop();\n          };\n        }),\n        has: markFunction(function (selector) {\n          return function (elem) {\n            return Sizzle(selector, elem).length > 0;\n          };\n        }),\n        contains: markFunction(function (text) {\n          text = text.replace(runescape, funescape);\n          return function (elem) {\n            return (elem.textContent || elem.innerText || getText(elem)).indexOf(text) > -1;\n          };\n        }),\n        lang: markFunction(function (lang) {\n          if (!ridentifier.test(lang || '')) {\n            Sizzle.error('unsupported lang: ' + lang);\n          }\n          lang = lang.replace(runescape, funescape).toLowerCase();\n          return function (elem) {\n            var elemLang;\n            do {\n              if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute('xml:lang') || elem.getAttribute('lang')) {\n                elemLang = elemLang.toLowerCase();\n                return elemLang === lang || elemLang.indexOf(lang + '-') === 0;\n              }\n            } while ((elem = elem.parentNode) && elem.nodeType === 1);\n            return false;\n          };\n        }),\n        target: function (elem) {\n          var hash = window.location && window.location.hash;\n          return hash && hash.slice(1) === elem.id;\n        },\n        root: function (elem) {\n          return elem === docElem;\n        },\n        focus: function (elem) {\n          return elem === document$1.activeElement && (!document$1.hasFocus || document$1.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n        },\n        enabled: function (elem) {\n          return elem.disabled === false;\n        },\n        disabled: function (elem) {\n          return elem.disabled === true;\n        },\n        checked: function (elem) {\n          var nodeName = elem.nodeName.toLowerCase();\n          return nodeName === 'input' && !!elem.checked || nodeName === 'option' && !!elem.selected;\n        },\n        selected: function (elem) {\n          if (elem.parentNode) {\n            elem.parentNode.selectedIndex;\n          }\n          return elem.selected === true;\n        },\n        empty: function (elem) {\n          for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n            if (elem.nodeType < 6) {\n              return false;\n            }\n          }\n          return true;\n        },\n        parent: function (elem) {\n          return !Expr.pseudos.empty(elem);\n        },\n        header: function (elem) {\n          return rheader.test(elem.nodeName);\n        },\n        input: function (elem) {\n          return rinputs.test(elem.nodeName);\n        },\n        button: function (elem) {\n          var name = elem.nodeName.toLowerCase();\n          return name === 'input' && elem.type === 'button' || name === 'button';\n        },\n        text: function (elem) {\n          var attr;\n          return elem.nodeName.toLowerCase() === 'input' && elem.type === 'text' && ((attr = elem.getAttribute('type')) == null || attr.toLowerCase() === 'text');\n        },\n        first: createPositionalPseudo(function () {\n          return [0];\n        }),\n        last: createPositionalPseudo(function (matchIndexes, length) {\n          return [length - 1];\n        }),\n        eq: createPositionalPseudo(function (matchIndexes, length, argument) {\n          return [argument < 0 ? argument + length : argument];\n        }),\n        even: createPositionalPseudo(function (matchIndexes, length) {\n          var i = 0;\n          for (; i < length; i += 2) {\n            matchIndexes.push(i);\n          }\n          return matchIndexes;\n        }),\n        odd: createPositionalPseudo(function (matchIndexes, length) {\n          var i = 1;\n          for (; i < length; i += 2) {\n            matchIndexes.push(i);\n          }\n          return matchIndexes;\n        }),\n        lt: createPositionalPseudo(function (matchIndexes, length, argument) {\n          var i = argument < 0 ? argument + length : argument;\n          for (; --i >= 0;) {\n            matchIndexes.push(i);\n          }\n          return matchIndexes;\n        }),\n        gt: createPositionalPseudo(function (matchIndexes, length, argument) {\n          var i = argument < 0 ? argument + length : argument;\n          for (; ++i < length;) {\n            matchIndexes.push(i);\n          }\n          return matchIndexes;\n        })\n      }\n    };\n    Expr.pseudos.nth = Expr.pseudos.eq;\n    each$k([\n      'radio',\n      'checkbox',\n      'file',\n      'password',\n      'image'\n    ], function (i) {\n      Expr.pseudos[i] = createInputPseudo(i);\n    });\n    each$k([\n      'submit',\n      'reset'\n    ], function (i) {\n      Expr.pseudos[i] = createButtonPseudo(i);\n    });\n    function setFilters() {\n    }\n    setFilters.prototype = Expr.filters = Expr.pseudos;\n    Expr.setFilters = new setFilters();\n    tokenize = Sizzle.tokenize = function (selector, parseOnly) {\n      var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + ' '];\n      if (cached) {\n        return parseOnly ? 0 : cached.slice(0);\n      }\n      soFar = selector;\n      groups = [];\n      preFilters = Expr.preFilter;\n      while (soFar) {\n        if (!matched || (match = rcomma.exec(soFar))) {\n          if (match) {\n            soFar = soFar.slice(match[0].length) || soFar;\n          }\n          groups.push(tokens = []);\n        }\n        matched = false;\n        if (match = rcombinators.exec(soFar)) {\n          matched = match.shift();\n          tokens.push({\n            value: matched,\n            type: match[0].replace(rtrim, ' ')\n          });\n          soFar = soFar.slice(matched.length);\n        }\n        for (type in Expr.filter) {\n          if (!Expr.filter.hasOwnProperty(type)) {\n            continue;\n          }\n          if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n            matched = match.shift();\n            tokens.push({\n              value: matched,\n              type: type,\n              matches: match\n            });\n            soFar = soFar.slice(matched.length);\n          }\n        }\n        if (!matched) {\n          break;\n        }\n      }\n      return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : tokenCache(selector, groups).slice(0);\n    };\n    function toSelector(tokens) {\n      var i = 0, len = tokens.length, selector = '';\n      for (; i < len; i++) {\n        selector += tokens[i].value;\n      }\n      return selector;\n    }\n    function addCombinator(matcher, combinator, base) {\n      var dir = combinator.dir, checkNonElements = base && dir === 'parentNode', doneName = done++;\n      return combinator.first ? function (elem, context, xml) {\n        while (elem = elem[dir]) {\n          if (elem.nodeType === 1 || checkNonElements) {\n            return matcher(elem, context, xml);\n          }\n        }\n      } : function (elem, context, xml) {\n        var oldCache, outerCache, newCache = [\n            dirruns,\n            doneName\n          ];\n        if (xml) {\n          while (elem = elem[dir]) {\n            if (elem.nodeType === 1 || checkNonElements) {\n              if (matcher(elem, context, xml)) {\n                return true;\n              }\n            }\n          }\n        } else {\n          while (elem = elem[dir]) {\n            if (elem.nodeType === 1 || checkNonElements) {\n              outerCache = elem[expando] || (elem[expando] = {});\n              if ((oldCache = outerCache[dir]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n                return newCache[2] = oldCache[2];\n              } else {\n                outerCache[dir] = newCache;\n                if (newCache[2] = matcher(elem, context, xml)) {\n                  return true;\n                }\n              }\n            }\n          }\n        }\n      };\n    }\n    function elementMatcher(matchers) {\n      return matchers.length > 1 ? function (elem, context, xml) {\n        var i = matchers.length;\n        while (i--) {\n          if (!matchers[i](elem, context, xml)) {\n            return false;\n          }\n        }\n        return true;\n      } : matchers[0];\n    }\n    function multipleContexts(selector, contexts, results) {\n      var i = 0, len = contexts.length;\n      for (; i < len; i++) {\n        Sizzle(selector, contexts[i], results);\n      }\n      return results;\n    }\n    function condense(unmatched, map, filter, context, xml) {\n      var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null;\n      for (; i < len; i++) {\n        if (elem = unmatched[i]) {\n          if (!filter || filter(elem, context, xml)) {\n            newUnmatched.push(elem);\n            if (mapped) {\n              map.push(i);\n            }\n          }\n        }\n      }\n      return newUnmatched;\n    }\n    function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n      if (postFilter && !postFilter[expando]) {\n        postFilter = setMatcher(postFilter);\n      }\n      if (postFinder && !postFinder[expando]) {\n        postFinder = setMatcher(postFinder, postSelector);\n      }\n      return markFunction(function (seed, results, context, xml) {\n        var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(selector || '*', context.nodeType ? [context] : context, []), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems, matcherOut = matcher ? postFinder || (seed ? preFilter : preexisting || postFilter) ? [] : results : matcherIn;\n        if (matcher) {\n          matcher(matcherIn, matcherOut, context, xml);\n        }\n        if (postFilter) {\n          temp = condense(matcherOut, postMap);\n          postFilter(temp, [], context, xml);\n          i = temp.length;\n          while (i--) {\n            if (elem = temp[i]) {\n              matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n            }\n          }\n        }\n        if (seed) {\n          if (postFinder || preFilter) {\n            if (postFinder) {\n              temp = [];\n              i = matcherOut.length;\n              while (i--) {\n                if (elem = matcherOut[i]) {\n                  temp.push(matcherIn[i] = elem);\n                }\n              }\n              postFinder(null, matcherOut = [], temp, xml);\n            }\n            i = matcherOut.length;\n            while (i--) {\n              if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n                seed[temp] = !(results[temp] = elem);\n              }\n            }\n          }\n        } else {\n          matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n          if (postFinder) {\n            postFinder(null, results, matcherOut, xml);\n          } else {\n            push$1.apply(results, matcherOut);\n          }\n        }\n      });\n    }\n    function matcherFromTokens(tokens) {\n      var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[' '], i = leadingRelative ? 1 : 0, matchContext = addCombinator(function (elem) {\n          return elem === checkContext;\n        }, implicitRelative, true), matchAnyContext = addCombinator(function (elem) {\n          return indexOf.call(checkContext, elem) > -1;\n        }, implicitRelative, true), matchers = [function (elem, context, xml) {\n            var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));\n            checkContext = null;\n            return ret;\n          }];\n      for (; i < len; i++) {\n        if (matcher = Expr.relative[tokens[i].type]) {\n          matchers = [addCombinator(elementMatcher(matchers), matcher)];\n        } else {\n          matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n          if (matcher[expando]) {\n            j = ++i;\n            for (; j < len; j++) {\n              if (Expr.relative[tokens[j].type]) {\n                break;\n              }\n            }\n            return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(tokens.slice(0, i - 1).concat({ value: tokens[i - 2].type === ' ' ? '*' : '' })).replace(rtrim, '$1'), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n          }\n          matchers.push(matcher);\n        }\n      }\n      return elementMatcher(matchers);\n    }\n    function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n      var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function (seed, context, xml, results, outermost) {\n          var elem, j, matcher, matchedCount = 0, i = '0', unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find.TAG('*', outermost), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, len = elems.length;\n          if (outermost) {\n            outermostContext = context !== document$1 && context;\n          }\n          for (; i !== len && (elem = elems[i]) != null; i++) {\n            if (byElement && elem) {\n              j = 0;\n              while (matcher = elementMatchers[j++]) {\n                if (matcher(elem, context, xml)) {\n                  results.push(elem);\n                  break;\n                }\n              }\n              if (outermost) {\n                dirruns = dirrunsUnique;\n              }\n            }\n            if (bySet) {\n              if (elem = !matcher && elem) {\n                matchedCount--;\n              }\n              if (seed) {\n                unmatched.push(elem);\n              }\n            }\n          }\n          matchedCount += i;\n          if (bySet && i !== matchedCount) {\n            j = 0;\n            while (matcher = setMatchers[j++]) {\n              matcher(unmatched, setMatched, context, xml);\n            }\n            if (seed) {\n              if (matchedCount > 0) {\n                while (i--) {\n                  if (!(unmatched[i] || setMatched[i])) {\n                    setMatched[i] = pop.call(results);\n                  }\n                }\n              }\n              setMatched = condense(setMatched);\n            }\n            push$1.apply(results, setMatched);\n            if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n              Sizzle.uniqueSort(results);\n            }\n          }\n          if (outermost) {\n            dirruns = dirrunsUnique;\n            outermostContext = contextBackup;\n          }\n          return unmatched;\n        };\n      return bySet ? markFunction(superMatcher) : superMatcher;\n    }\n    compile = Sizzle.compile = function (selector, match) {\n      var i, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + ' '];\n      if (!cached) {\n        if (!match) {\n          match = tokenize(selector);\n        }\n        i = match.length;\n        while (i--) {\n          cached = matcherFromTokens(match[i]);\n          if (cached[expando]) {\n            setMatchers.push(cached);\n          } else {\n            elementMatchers.push(cached);\n          }\n        }\n        cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));\n        cached.selector = selector;\n      }\n      return cached;\n    };\n    select$1 = Sizzle.select = function (selector, context, results, seed) {\n      var i, tokens, token, type, find, compiled = typeof selector === 'function' && selector, match = !seed && tokenize(selector = compiled.selector || selector);\n      results = results || [];\n      if (match.length === 1) {\n        tokens = match[0] = match[0].slice(0);\n        if (tokens.length > 2 && (token = tokens[0]).type === 'ID' && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n          context = (Expr.find.ID(token.matches[0].replace(runescape, funescape), context) || [])[0];\n          if (!context) {\n            return results;\n          } else if (compiled) {\n            context = context.parentNode;\n          }\n          selector = selector.slice(tokens.shift().value.length);\n        }\n        i = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n        while (i--) {\n          token = tokens[i];\n          if (Expr.relative[type = token.type]) {\n            break;\n          }\n          if (find = Expr.find[type]) {\n            if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n              tokens.splice(i, 1);\n              selector = seed.length && toSelector(tokens);\n              if (!selector) {\n                push$1.apply(results, seed);\n                return results;\n              }\n              break;\n            }\n          }\n        }\n      }\n      (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, rsibling.test(selector) && testContext(context.parentNode) || context);\n      return results;\n    };\n    support.sortStable = expando.split('').sort(sortOrder).join('') === expando;\n    support.detectDuplicates = !!hasDuplicate;\n    setDocument();\n    support.sortDetached = true;\n\n    var doc = document;\n    var push = Array.prototype.push;\n    var slice = Array.prototype.slice;\n    var rquickExpr = /^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/;\n    var Event$1 = EventUtils.Event;\n    var skipUniques = Tools.makeMap('children,contents,next,prev');\n    var isDefined = function (obj) {\n      return typeof obj !== 'undefined';\n    };\n    var isString = function (obj) {\n      return typeof obj === 'string';\n    };\n    var isWindow = function (obj) {\n      return obj && obj === obj.window;\n    };\n    var createFragment$1 = function (html, fragDoc) {\n      fragDoc = fragDoc || doc;\n      var container = fragDoc.createElement('div');\n      var frag = fragDoc.createDocumentFragment();\n      container.innerHTML = html;\n      var node;\n      while (node = container.firstChild) {\n        frag.appendChild(node);\n      }\n      return frag;\n    };\n    var domManipulate = function (targetNodes, sourceItem, callback, reverse) {\n      var i;\n      if (isString(sourceItem)) {\n        sourceItem = createFragment$1(sourceItem, getElementDocument(targetNodes[0]));\n      } else if (sourceItem.length && !sourceItem.nodeType) {\n        sourceItem = DomQuery.makeArray(sourceItem);\n        if (reverse) {\n          for (i = sourceItem.length - 1; i >= 0; i--) {\n            domManipulate(targetNodes, sourceItem[i], callback, reverse);\n          }\n        } else {\n          for (i = 0; i < sourceItem.length; i++) {\n            domManipulate(targetNodes, sourceItem[i], callback, reverse);\n          }\n        }\n        return targetNodes;\n      }\n      if (sourceItem.nodeType) {\n        i = targetNodes.length;\n        while (i--) {\n          callback.call(targetNodes[i], sourceItem);\n        }\n      }\n      return targetNodes;\n    };\n    var hasClass = function (node, className) {\n      return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1;\n    };\n    var wrap$2 = function (elements, wrapper, all) {\n      var lastParent, newWrapper;\n      wrapper = DomQuery(wrapper)[0];\n      elements.each(function () {\n        var self = this;\n        if (!all || lastParent !== self.parentNode) {\n          lastParent = self.parentNode;\n          newWrapper = wrapper.cloneNode(false);\n          self.parentNode.insertBefore(newWrapper, self);\n          newWrapper.appendChild(self);\n        } else {\n          newWrapper.appendChild(self);\n        }\n      });\n      return elements;\n    };\n    var numericCssMap = Tools.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' ');\n    var booleanMap = Tools.makeMap('checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected', ' ');\n    var propFix = {\n      for: 'htmlFor',\n      class: 'className',\n      readonly: 'readOnly'\n    };\n    var cssFix = { float: 'cssFloat' };\n    var attrHooks = {}, cssHooks = {};\n    var DomQueryConstructor = function (selector, context) {\n      return new DomQuery.fn.init(selector, context);\n    };\n    var inArray$1 = function (item, array) {\n      var i;\n      if (array.indexOf) {\n        return array.indexOf(item);\n      }\n      i = array.length;\n      while (i--) {\n        if (array[i] === item) {\n          return i;\n        }\n      }\n      return -1;\n    };\n    var whiteSpaceRegExp = /^\\s*|\\s*$/g;\n    var trim$1 = function (str) {\n      return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp, '');\n    };\n    var each$g = function (obj, callback) {\n      var length, key, i, value;\n      if (obj) {\n        length = obj.length;\n        if (length === undefined) {\n          for (key in obj) {\n            if (obj.hasOwnProperty(key)) {\n              value = obj[key];\n              if (callback.call(value, key, value) === false) {\n                break;\n              }\n            }\n          }\n        } else {\n          for (i = 0; i < length; i++) {\n            value = obj[i];\n            if (callback.call(value, i, value) === false) {\n              break;\n            }\n          }\n        }\n      }\n      return obj;\n    };\n    var grep$2 = function (array, callback) {\n      var out = [];\n      each$g(array, function (i, item) {\n        if (callback(item, i)) {\n          out.push(item);\n        }\n      });\n      return out;\n    };\n    var getElementDocument = function (element) {\n      if (!element) {\n        return doc;\n      }\n      if (element.nodeType === 9) {\n        return element;\n      }\n      return element.ownerDocument;\n    };\n    DomQueryConstructor.fn = DomQueryConstructor.prototype = {\n      constructor: DomQueryConstructor,\n      selector: '',\n      context: null,\n      length: 0,\n      init: function (selector, context) {\n        var self = this;\n        var match, node;\n        if (!selector) {\n          return self;\n        }\n        if (selector.nodeType) {\n          self.context = self[0] = selector;\n          self.length = 1;\n          return self;\n        }\n        if (context && context.nodeType) {\n          self.context = context;\n        } else {\n          if (context) {\n            return DomQuery(selector).attr(context);\n          }\n          self.context = context = document;\n        }\n        if (isString(selector)) {\n          self.selector = selector;\n          if (selector.charAt(0) === '<' && selector.charAt(selector.length - 1) === '>' && selector.length >= 3) {\n            match = [\n              null,\n              selector,\n              null\n            ];\n          } else {\n            match = rquickExpr.exec(selector);\n          }\n          if (match) {\n            if (match[1]) {\n              node = createFragment$1(selector, getElementDocument(context)).firstChild;\n              while (node) {\n                push.call(self, node);\n                node = node.nextSibling;\n              }\n            } else {\n              node = getElementDocument(context).getElementById(match[2]);\n              if (!node) {\n                return self;\n              }\n              if (node.id !== match[2]) {\n                return self.find(selector);\n              }\n              self.length = 1;\n              self[0] = node;\n            }\n          } else {\n            return DomQuery(context).find(selector);\n          }\n        } else {\n          this.add(selector, false);\n        }\n        return self;\n      },\n      toArray: function () {\n        return Tools.toArray(this);\n      },\n      add: function (items, sort) {\n        var self = this;\n        var nodes, i;\n        if (isString(items)) {\n          return self.add(DomQuery(items));\n        }\n        if (sort !== false) {\n          nodes = DomQuery.unique(self.toArray().concat(DomQuery.makeArray(items)));\n          self.length = nodes.length;\n          for (i = 0; i < nodes.length; i++) {\n            self[i] = nodes[i];\n          }\n        } else {\n          push.apply(self, DomQuery.makeArray(items));\n        }\n        return self;\n      },\n      attr: function (name, value) {\n        var self = this;\n        var hook;\n        if (typeof name === 'object') {\n          each$g(name, function (name, value) {\n            self.attr(name, value);\n          });\n        } else if (isDefined(value)) {\n          this.each(function () {\n            var hook;\n            if (this.nodeType === 1) {\n              hook = attrHooks[name];\n              if (hook && hook.set) {\n                hook.set(this, value);\n                return;\n              }\n              if (value === null) {\n                this.removeAttribute(name, 2);\n              } else {\n                this.setAttribute(name, value, 2);\n              }\n            }\n          });\n        } else {\n          if (self[0] && self[0].nodeType === 1) {\n            hook = attrHooks[name];\n            if (hook && hook.get) {\n              return hook.get(self[0], name);\n            }\n            if (booleanMap[name]) {\n              return self.prop(name) ? name : undefined;\n            }\n            value = self[0].getAttribute(name, 2);\n            if (value === null) {\n              value = undefined;\n            }\n          }\n          return value;\n        }\n        return self;\n      },\n      removeAttr: function (name) {\n        return this.attr(name, null);\n      },\n      prop: function (name, value) {\n        var self = this;\n        name = propFix[name] || name;\n        if (typeof name === 'object') {\n          each$g(name, function (name, value) {\n            self.prop(name, value);\n          });\n        } else if (isDefined(value)) {\n          this.each(function () {\n            if (this.nodeType === 1) {\n              this[name] = value;\n            }\n          });\n        } else {\n          if (self[0] && self[0].nodeType && name in self[0]) {\n            return self[0][name];\n          }\n          return value;\n        }\n        return self;\n      },\n      css: function (name, value) {\n        var self = this;\n        var elm, hook;\n        var camel = function (name) {\n          return name.replace(/-(\\D)/g, function (a, b) {\n            return b.toUpperCase();\n          });\n        };\n        var dashed = function (name) {\n          return name.replace(/[A-Z]/g, function (a) {\n            return '-' + a;\n          });\n        };\n        if (typeof name === 'object') {\n          each$g(name, function (name, value) {\n            self.css(name, value);\n          });\n        } else {\n          if (isDefined(value)) {\n            name = camel(name);\n            if (typeof value === 'number' && !numericCssMap[name]) {\n              value = value.toString() + 'px';\n            }\n            self.each(function () {\n              var style = this.style;\n              hook = cssHooks[name];\n              if (hook && hook.set) {\n                hook.set(this, value);\n                return;\n              }\n              try {\n                this.style[cssFix[name] || name] = value;\n              } catch (ex) {\n              }\n              if (value === null || value === '') {\n                if (style.removeProperty) {\n                  style.removeProperty(dashed(name));\n                } else {\n                  style.removeAttribute(name);\n                }\n              }\n            });\n          } else {\n            elm = self[0];\n            hook = cssHooks[name];\n            if (hook && hook.get) {\n              return hook.get(elm);\n            }\n            if (elm.ownerDocument.defaultView) {\n              try {\n                return elm.ownerDocument.defaultView.getComputedStyle(elm, null).getPropertyValue(dashed(name));\n              } catch (ex) {\n                return undefined;\n              }\n            } else if (elm.currentStyle) {\n              return elm.currentStyle[camel(name)];\n            } else {\n              return '';\n            }\n          }\n        }\n        return self;\n      },\n      remove: function () {\n        var self = this;\n        var node, i = this.length;\n        while (i--) {\n          node = self[i];\n          Event$1.clean(node);\n          if (node.parentNode) {\n            node.parentNode.removeChild(node);\n          }\n        }\n        return this;\n      },\n      empty: function () {\n        var self = this;\n        var node, i = this.length;\n        while (i--) {\n          node = self[i];\n          while (node.firstChild) {\n            node.removeChild(node.firstChild);\n          }\n        }\n        return this;\n      },\n      html: function (value) {\n        var self = this;\n        var i;\n        if (isDefined(value)) {\n          i = self.length;\n          try {\n            while (i--) {\n              self[i].innerHTML = value;\n            }\n          } catch (ex) {\n            DomQuery(self[i]).empty().append(value);\n          }\n          return self;\n        }\n        return self[0] ? self[0].innerHTML : '';\n      },\n      text: function (value) {\n        var self = this;\n        var i;\n        if (isDefined(value)) {\n          i = self.length;\n          while (i--) {\n            if ('innerText' in self[i]) {\n              self[i].innerText = value;\n            } else {\n              self[0].textContent = value;\n            }\n          }\n          return self;\n        }\n        return self[0] ? self[0].innerText || self[0].textContent : '';\n      },\n      append: function () {\n        return domManipulate(this, arguments, function (node) {\n          if (this.nodeType === 1 || this.host && this.host.nodeType === 1) {\n            this.appendChild(node);\n          }\n        });\n      },\n      prepend: function () {\n        return domManipulate(this, arguments, function (node) {\n          if (this.nodeType === 1 || this.host && this.host.nodeType === 1) {\n            this.insertBefore(node, this.firstChild);\n          }\n        }, true);\n      },\n      before: function () {\n        var self = this;\n        if (self[0] && self[0].parentNode) {\n          return domManipulate(self, arguments, function (node) {\n            this.parentNode.insertBefore(node, this);\n          });\n        }\n        return self;\n      },\n      after: function () {\n        var self = this;\n        if (self[0] && self[0].parentNode) {\n          return domManipulate(self, arguments, function (node) {\n            this.parentNode.insertBefore(node, this.nextSibling);\n          }, true);\n        }\n        return self;\n      },\n      appendTo: function (val) {\n        DomQuery(val).append(this);\n        return this;\n      },\n      prependTo: function (val) {\n        DomQuery(val).prepend(this);\n        return this;\n      },\n      replaceWith: function (content) {\n        return this.before(content).remove();\n      },\n      wrap: function (content) {\n        return wrap$2(this, content);\n      },\n      wrapAll: function (content) {\n        return wrap$2(this, content, true);\n      },\n      wrapInner: function (content) {\n        this.each(function () {\n          DomQuery(this).contents().wrapAll(content);\n        });\n        return this;\n      },\n      unwrap: function () {\n        return this.parent().each(function () {\n          DomQuery(this).replaceWith(this.childNodes);\n        });\n      },\n      clone: function () {\n        var result = [];\n        this.each(function () {\n          result.push(this.cloneNode(true));\n        });\n        return DomQuery(result);\n      },\n      addClass: function (className) {\n        return this.toggleClass(className, true);\n      },\n      removeClass: function (className) {\n        return this.toggleClass(className, false);\n      },\n      toggleClass: function (className, state) {\n        var self = this;\n        if (typeof className !== 'string') {\n          return self;\n        }\n        if (className.indexOf(' ') !== -1) {\n          each$g(className.split(' '), function () {\n            self.toggleClass(this, state);\n          });\n        } else {\n          self.each(function (index, node) {\n            var classState = hasClass(node, className);\n            if (classState !== state) {\n              var existingClassName = node.className;\n              if (classState) {\n                node.className = trim$1((' ' + existingClassName + ' ').replace(' ' + className + ' ', ' '));\n              } else {\n                node.className += existingClassName ? ' ' + className : className;\n              }\n            }\n          });\n        }\n        return self;\n      },\n      hasClass: function (className) {\n        return hasClass(this[0], className);\n      },\n      each: function (callback) {\n        return each$g(this, callback);\n      },\n      on: function (name, callback) {\n        return this.each(function () {\n          Event$1.bind(this, name, callback);\n        });\n      },\n      off: function (name, callback) {\n        return this.each(function () {\n          Event$1.unbind(this, name, callback);\n        });\n      },\n      trigger: function (name) {\n        return this.each(function () {\n          if (typeof name === 'object') {\n            Event$1.fire(this, name.type, name);\n          } else {\n            Event$1.fire(this, name);\n          }\n        });\n      },\n      show: function () {\n        return this.css('display', '');\n      },\n      hide: function () {\n        return this.css('display', 'none');\n      },\n      slice: function () {\n        return DomQuery(slice.apply(this, arguments));\n      },\n      eq: function (index) {\n        return index === -1 ? this.slice(index) : this.slice(index, +index + 1);\n      },\n      first: function () {\n        return this.eq(0);\n      },\n      last: function () {\n        return this.eq(-1);\n      },\n      find: function (selector) {\n        var i, l;\n        var ret = [];\n        for (i = 0, l = this.length; i < l; i++) {\n          DomQuery.find(selector, this[i], ret);\n        }\n        return DomQuery(ret);\n      },\n      filter: function (selector) {\n        if (typeof selector === 'function') {\n          return DomQuery(grep$2(this.toArray(), function (item, i) {\n            return selector(i, item);\n          }));\n        }\n        return DomQuery(DomQuery.filter(selector, this.toArray()));\n      },\n      closest: function (selector) {\n        var result = [];\n        if (selector instanceof DomQuery) {\n          selector = selector[0];\n        }\n        this.each(function (i, node) {\n          while (node) {\n            if (typeof selector === 'string' && DomQuery(node).is(selector)) {\n              result.push(node);\n              break;\n            } else if (node === selector) {\n              result.push(node);\n              break;\n            }\n            node = node.parentNode;\n          }\n        });\n        return DomQuery(result);\n      },\n      offset: function (offset) {\n        var elm, doc, docElm;\n        var x = 0, y = 0, pos;\n        if (!offset) {\n          elm = this[0];\n          if (elm) {\n            doc = elm.ownerDocument;\n            docElm = doc.documentElement;\n            if (elm.getBoundingClientRect) {\n              pos = elm.getBoundingClientRect();\n              x = pos.left + (docElm.scrollLeft || doc.body.scrollLeft) - docElm.clientLeft;\n              y = pos.top + (docElm.scrollTop || doc.body.scrollTop) - docElm.clientTop;\n            }\n          }\n          return {\n            left: x,\n            top: y\n          };\n        }\n        return this.css(offset);\n      },\n      push: push,\n      sort: Array.prototype.sort,\n      splice: Array.prototype.splice\n    };\n    Tools.extend(DomQueryConstructor, {\n      extend: Tools.extend,\n      makeArray: function (object) {\n        if (isWindow(object) || object.nodeType) {\n          return [object];\n        }\n        return Tools.toArray(object);\n      },\n      inArray: inArray$1,\n      isArray: Tools.isArray,\n      each: each$g,\n      trim: trim$1,\n      grep: grep$2,\n      find: Sizzle,\n      expr: Sizzle.selectors,\n      unique: Sizzle.uniqueSort,\n      text: Sizzle.getText,\n      contains: Sizzle.contains,\n      filter: function (expr, elems, not) {\n        var i = elems.length;\n        if (not) {\n          expr = ':not(' + expr + ')';\n        }\n        while (i--) {\n          if (elems[i].nodeType !== 1) {\n            elems.splice(i, 1);\n          }\n        }\n        if (elems.length === 1) {\n          elems = DomQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : [];\n        } else {\n          elems = DomQuery.find.matches(expr, elems);\n        }\n        return elems;\n      }\n    });\n    var dir = function (el, prop, until) {\n      var matched = [];\n      var cur = el[prop];\n      if (typeof until !== 'string' && until instanceof DomQuery) {\n        until = until[0];\n      }\n      while (cur && cur.nodeType !== 9) {\n        if (until !== undefined) {\n          if (cur === until) {\n            break;\n          }\n          if (typeof until === 'string' && DomQuery(cur).is(until)) {\n            break;\n          }\n        }\n        if (cur.nodeType === 1) {\n          matched.push(cur);\n        }\n        cur = cur[prop];\n      }\n      return matched;\n    };\n    var sibling$1 = function (node, siblingName, nodeType, until) {\n      var result = [];\n      if (until instanceof DomQuery) {\n        until = until[0];\n      }\n      for (; node; node = node[siblingName]) {\n        if (nodeType && node.nodeType !== nodeType) {\n          continue;\n        }\n        if (until !== undefined) {\n          if (node === until) {\n            break;\n          }\n          if (typeof until === 'string' && DomQuery(node).is(until)) {\n            break;\n          }\n        }\n        result.push(node);\n      }\n      return result;\n    };\n    var firstSibling = function (node, siblingName, nodeType) {\n      for (node = node[siblingName]; node; node = node[siblingName]) {\n        if (node.nodeType === nodeType) {\n          return node;\n        }\n      }\n      return null;\n    };\n    each$g({\n      parent: function (node) {\n        var parent = node.parentNode;\n        return parent && parent.nodeType !== 11 ? parent : null;\n      },\n      parents: function (node) {\n        return dir(node, 'parentNode');\n      },\n      next: function (node) {\n        return firstSibling(node, 'nextSibling', 1);\n      },\n      prev: function (node) {\n        return firstSibling(node, 'previousSibling', 1);\n      },\n      children: function (node) {\n        return sibling$1(node.firstChild, 'nextSibling', 1);\n      },\n      contents: function (node) {\n        return Tools.toArray((node.nodeName === 'iframe' ? node.contentDocument || node.contentWindow.document : node).childNodes);\n      }\n    }, function (name, fn) {\n      DomQueryConstructor.fn[name] = function (selector) {\n        var self = this;\n        var result = [];\n        self.each(function () {\n          var nodes = fn.call(result, this, selector, result);\n          if (nodes) {\n            if (DomQuery.isArray(nodes)) {\n              result.push.apply(result, nodes);\n            } else {\n              result.push(nodes);\n            }\n          }\n        });\n        if (this.length > 1) {\n          if (!skipUniques[name]) {\n            result = DomQuery.unique(result);\n          }\n          if (name.indexOf('parents') === 0) {\n            result = result.reverse();\n          }\n        }\n        var wrappedResult = DomQuery(result);\n        if (selector) {\n          return wrappedResult.filter(selector);\n        }\n        return wrappedResult;\n      };\n    });\n    each$g({\n      parentsUntil: function (node, until) {\n        return dir(node, 'parentNode', until);\n      },\n      nextUntil: function (node, until) {\n        return sibling$1(node, 'nextSibling', 1, until).slice(1);\n      },\n      prevUntil: function (node, until) {\n        return sibling$1(node, 'previousSibling', 1, until).slice(1);\n      }\n    }, function (name, fn) {\n      DomQueryConstructor.fn[name] = function (selector, filter) {\n        var self = this;\n        var result = [];\n        self.each(function () {\n          var nodes = fn.call(result, this, selector, result);\n          if (nodes) {\n            if (DomQuery.isArray(nodes)) {\n              result.push.apply(result, nodes);\n            } else {\n              result.push(nodes);\n            }\n          }\n        });\n        if (this.length > 1) {\n          result = DomQuery.unique(result);\n          if (name.indexOf('parents') === 0 || name === 'prevUntil') {\n            result = result.reverse();\n          }\n        }\n        var wrappedResult = DomQuery(result);\n        if (filter) {\n          return wrappedResult.filter(filter);\n        }\n        return wrappedResult;\n      };\n    });\n    DomQueryConstructor.fn.is = function (selector) {\n      return !!selector && this.filter(selector).length > 0;\n    };\n    DomQueryConstructor.fn.init.prototype = DomQueryConstructor.fn;\n    DomQueryConstructor.overrideDefaults = function (callback) {\n      var defaults;\n      var sub = function (selector, context) {\n        defaults = defaults || callback();\n        if (arguments.length === 0) {\n          selector = defaults.element;\n        }\n        if (!context) {\n          context = defaults.context;\n        }\n        return new sub.fn.init(selector, context);\n      };\n      DomQuery.extend(sub, this);\n      return sub;\n    };\n    DomQueryConstructor.attrHooks = attrHooks;\n    DomQueryConstructor.cssHooks = cssHooks;\n    var DomQuery = DomQueryConstructor;\n\n    var each$f = Tools.each;\n    var grep$1 = Tools.grep;\n    var isIE = Env.ie;\n    var simpleSelectorRe = /^([a-z0-9],?)+$/i;\n    var setupAttrHooks = function (styles, settings, getContext) {\n      var keepValues = settings.keep_values;\n      var keepUrlHook = {\n        set: function ($elm, value, name) {\n          if (settings.url_converter && value !== null) {\n            value = settings.url_converter.call(settings.url_converter_scope || getContext(), value, name, $elm[0]);\n          }\n          $elm.attr('data-mce-' + name, value).attr(name, value);\n        },\n        get: function ($elm, name) {\n          return $elm.attr('data-mce-' + name) || $elm.attr(name);\n        }\n      };\n      var attrHooks = {\n        style: {\n          set: function ($elm, value) {\n            if (value !== null && typeof value === 'object') {\n              $elm.css(value);\n              return;\n            }\n            if (keepValues) {\n              $elm.attr('data-mce-style', value);\n            }\n            if (value !== null && typeof value === 'string') {\n              $elm.removeAttr('style');\n              $elm.css(styles.parse(value));\n            } else {\n              $elm.attr('style', value);\n            }\n          },\n          get: function ($elm) {\n            var value = $elm.attr('data-mce-style') || $elm.attr('style');\n            value = styles.serialize(styles.parse(value), $elm[0].nodeName);\n            return value;\n          }\n        }\n      };\n      if (keepValues) {\n        attrHooks.href = attrHooks.src = keepUrlHook;\n      }\n      return attrHooks;\n    };\n    var updateInternalStyleAttr = function (styles, $elm) {\n      var rawValue = $elm.attr('style');\n      var value = styles.serialize(styles.parse(rawValue), $elm[0].nodeName);\n      if (!value) {\n        value = null;\n      }\n      $elm.attr('data-mce-style', value);\n    };\n    var findNodeIndex = function (node, normalized) {\n      var idx = 0, lastNodeType, nodeType;\n      if (node) {\n        for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) {\n          nodeType = node.nodeType;\n          if (normalized && nodeType === 3) {\n            if (nodeType === lastNodeType || !node.nodeValue.length) {\n              continue;\n            }\n          }\n          idx++;\n          lastNodeType = nodeType;\n        }\n      }\n      return idx;\n    };\n    var DOMUtils = function (doc, settings) {\n      if (settings === void 0) {\n        settings = {};\n      }\n      var addedStyles = {};\n      var win = window;\n      var files = {};\n      var counter = 0;\n      var stdMode = true;\n      var boxModel = true;\n      var styleSheetLoader = instance.forElement(SugarElement.fromDom(doc), {\n        contentCssCors: settings.contentCssCors,\n        referrerPolicy: settings.referrerPolicy\n      });\n      var boundEvents = [];\n      var schema = settings.schema ? settings.schema : Schema({});\n      var styles = Styles({\n        url_converter: settings.url_converter,\n        url_converter_scope: settings.url_converter_scope\n      }, settings.schema);\n      var events = settings.ownEvents ? new EventUtils() : EventUtils.Event;\n      var blockElementsMap = schema.getBlockElements();\n      var $ = DomQuery.overrideDefaults(function () {\n        return {\n          context: doc,\n          element: self.getRoot()\n        };\n      });\n      var isBlock = function (node) {\n        if (typeof node === 'string') {\n          return !!blockElementsMap[node];\n        } else if (node) {\n          var type = node.nodeType;\n          if (type) {\n            return !!(type === 1 && blockElementsMap[node.nodeName]);\n          }\n        }\n        return false;\n      };\n      var get = function (elm) {\n        return elm && doc && isString$1(elm) ? doc.getElementById(elm) : elm;\n      };\n      var $$ = function (elm) {\n        return $(typeof elm === 'string' ? get(elm) : elm);\n      };\n      var getAttrib = function (elm, name, defaultVal) {\n        var hook, value;\n        var $elm = $$(elm);\n        if ($elm.length) {\n          hook = attrHooks[name];\n          if (hook && hook.get) {\n            value = hook.get($elm, name);\n          } else {\n            value = $elm.attr(name);\n          }\n        }\n        if (typeof value === 'undefined') {\n          value = defaultVal || '';\n        }\n        return value;\n      };\n      var getAttribs = function (elm) {\n        var node = get(elm);\n        if (!node) {\n          return [];\n        }\n        return node.attributes;\n      };\n      var setAttrib = function (elm, name, value) {\n        if (value === '') {\n          value = null;\n        }\n        var $elm = $$(elm);\n        var originalValue = $elm.attr(name);\n        if (!$elm.length) {\n          return;\n        }\n        var hook = attrHooks[name];\n        if (hook && hook.set) {\n          hook.set($elm, value, name);\n        } else {\n          $elm.attr(name, value);\n        }\n        if (originalValue !== value && settings.onSetAttrib) {\n          settings.onSetAttrib({\n            attrElm: $elm,\n            attrName: name,\n            attrValue: value\n          });\n        }\n      };\n      var clone = function (node, deep) {\n        if (!isIE || node.nodeType !== 1 || deep) {\n          return node.cloneNode(deep);\n        } else {\n          var clone_1 = doc.createElement(node.nodeName);\n          each$f(getAttribs(node), function (attr) {\n            setAttrib(clone_1, attr.nodeName, getAttrib(node, attr.nodeName));\n          });\n          return clone_1;\n        }\n      };\n      var getRoot = function () {\n        return settings.root_element || doc.body;\n      };\n      var getViewPort = function (argWin) {\n        var vp = getBounds(argWin);\n        return {\n          x: vp.x,\n          y: vp.y,\n          w: vp.width,\n          h: vp.height\n        };\n      };\n      var getPos$1 = function (elm, rootElm) {\n        return getPos(doc.body, get(elm), rootElm);\n      };\n      var setStyle = function (elm, name, value) {\n        var $elm = isString$1(name) ? $$(elm).css(name, value) : $$(elm).css(name);\n        if (settings.update_styles) {\n          updateInternalStyleAttr(styles, $elm);\n        }\n      };\n      var setStyles = function (elm, stylesArg) {\n        var $elm = $$(elm).css(stylesArg);\n        if (settings.update_styles) {\n          updateInternalStyleAttr(styles, $elm);\n        }\n      };\n      var getStyle = function (elm, name, computed) {\n        var $elm = $$(elm);\n        if (computed) {\n          return $elm.css(name);\n        }\n        name = name.replace(/-(\\D)/g, function (a, b) {\n          return b.toUpperCase();\n        });\n        if (name === 'float') {\n          name = Env.browser.isIE() ? 'styleFloat' : 'cssFloat';\n        }\n        return $elm[0] && $elm[0].style ? $elm[0].style[name] : undefined;\n      };\n      var getSize = function (elm) {\n        var w, h;\n        elm = get(elm);\n        w = getStyle(elm, 'width');\n        h = getStyle(elm, 'height');\n        if (w.indexOf('px') === -1) {\n          w = 0;\n        }\n        if (h.indexOf('px') === -1) {\n          h = 0;\n        }\n        return {\n          w: parseInt(w, 10) || elm.offsetWidth || elm.clientWidth,\n          h: parseInt(h, 10) || elm.offsetHeight || elm.clientHeight\n        };\n      };\n      var getRect = function (elm) {\n        elm = get(elm);\n        var pos = getPos$1(elm);\n        var size = getSize(elm);\n        return {\n          x: pos.x,\n          y: pos.y,\n          w: size.w,\n          h: size.h\n        };\n      };\n      var is = function (elm, selector) {\n        var i;\n        if (!elm) {\n          return false;\n        }\n        if (!Array.isArray(elm)) {\n          if (selector === '*') {\n            return elm.nodeType === 1;\n          }\n          if (simpleSelectorRe.test(selector)) {\n            var selectors = selector.toLowerCase().split(/,/);\n            var elmName = elm.nodeName.toLowerCase();\n            for (i = selectors.length - 1; i >= 0; i--) {\n              if (selectors[i] === elmName) {\n                return true;\n              }\n            }\n            return false;\n          }\n          if (elm.nodeType && elm.nodeType !== 1) {\n            return false;\n          }\n        }\n        var elms = !Array.isArray(elm) ? [elm] : elm;\n        return Sizzle(selector, elms[0].ownerDocument || elms[0], null, elms).length > 0;\n      };\n      var getParents = function (elm, selector, root, collect) {\n        var result = [];\n        var selectorVal;\n        var node = get(elm);\n        collect = collect === undefined;\n        root = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null);\n        if (Tools.is(selector, 'string')) {\n          selectorVal = selector;\n          if (selector === '*') {\n            selector = function (node) {\n              return node.nodeType === 1;\n            };\n          } else {\n            selector = function (node) {\n              return is(node, selectorVal);\n            };\n          }\n        }\n        while (node) {\n          if (node === root || isNullable(node.nodeType) || isDocument$1(node) || isDocumentFragment(node)) {\n            break;\n          }\n          if (!selector || typeof selector === 'function' && selector(node)) {\n            if (collect) {\n              result.push(node);\n            } else {\n              return [node];\n            }\n          }\n          node = node.parentNode;\n        }\n        return collect ? result : null;\n      };\n      var getParent = function (node, selector, root) {\n        var parents = getParents(node, selector, root, false);\n        return parents && parents.length > 0 ? parents[0] : null;\n      };\n      var _findSib = function (node, selector, name) {\n        var func = selector;\n        if (node) {\n          if (typeof selector === 'string') {\n            func = function (node) {\n              return is(node, selector);\n            };\n          }\n          for (node = node[name]; node; node = node[name]) {\n            if (typeof func === 'function' && func(node)) {\n              return node;\n            }\n          }\n        }\n        return null;\n      };\n      var getNext = function (node, selector) {\n        return _findSib(node, selector, 'nextSibling');\n      };\n      var getPrev = function (node, selector) {\n        return _findSib(node, selector, 'previousSibling');\n      };\n      var select = function (selector, scope) {\n        return Sizzle(selector, get(scope) || settings.root_element || doc, []);\n      };\n      var run = function (elm, func, scope) {\n        var result;\n        var node = typeof elm === 'string' ? get(elm) : elm;\n        if (!node) {\n          return false;\n        }\n        if (Tools.isArray(node) && (node.length || node.length === 0)) {\n          result = [];\n          each$f(node, function (elm, i) {\n            if (elm) {\n              result.push(func.call(scope, typeof elm === 'string' ? get(elm) : elm, i));\n            }\n          });\n          return result;\n        }\n        var context = scope ? scope : this;\n        return func.call(context, node);\n      };\n      var setAttribs = function (elm, attrs) {\n        $$(elm).each(function (i, node) {\n          each$f(attrs, function (value, name) {\n            setAttrib(node, name, value);\n          });\n        });\n      };\n      var setHTML = function (elm, html) {\n        var $elm = $$(elm);\n        if (isIE) {\n          $elm.each(function (i, target) {\n            if (target.canHaveHTML === false) {\n              return;\n            }\n            while (target.firstChild) {\n              target.removeChild(target.firstChild);\n            }\n            try {\n              target.innerHTML = '<br>' + html;\n              target.removeChild(target.firstChild);\n            } catch (ex) {\n              DomQuery('<div></div>').html('<br>' + html).contents().slice(1).appendTo(target);\n            }\n            return html;\n          });\n        } else {\n          $elm.html(html);\n        }\n      };\n      var add = function (parentElm, name, attrs, html, create) {\n        return run(parentElm, function (parentElm) {\n          var newElm = typeof name === 'string' ? doc.createElement(name) : name;\n          setAttribs(newElm, attrs);\n          if (html) {\n            if (typeof html !== 'string' && html.nodeType) {\n              newElm.appendChild(html);\n            } else if (typeof html === 'string') {\n              setHTML(newElm, html);\n            }\n          }\n          return !create ? parentElm.appendChild(newElm) : newElm;\n        });\n      };\n      var create = function (name, attrs, html) {\n        return add(doc.createElement(name), name, attrs, html, true);\n      };\n      var decode = Entities.decode;\n      var encode = Entities.encodeAllRaw;\n      var createHTML = function (name, attrs, html) {\n        var outHtml = '', key;\n        outHtml += '<' + name;\n        for (key in attrs) {\n          if (hasNonNullableKey(attrs, key)) {\n            outHtml += ' ' + key + '=\"' + encode(attrs[key]) + '\"';\n          }\n        }\n        if (typeof html !== 'undefined') {\n          return outHtml + '>' + html + '</' + name + '>';\n        }\n        return outHtml + ' />';\n      };\n      var createFragment = function (html) {\n        var node;\n        var container = doc.createElement('div');\n        var frag = doc.createDocumentFragment();\n        frag.appendChild(container);\n        if (html) {\n          container.innerHTML = html;\n        }\n        while (node = container.firstChild) {\n          frag.appendChild(node);\n        }\n        frag.removeChild(container);\n        return frag;\n      };\n      var remove = function (node, keepChildren) {\n        var $node = $$(node);\n        if (keepChildren) {\n          $node.each(function () {\n            var child;\n            while (child = this.firstChild) {\n              if (child.nodeType === 3 && child.data.length === 0) {\n                this.removeChild(child);\n              } else {\n                this.parentNode.insertBefore(child, this);\n              }\n            }\n          }).remove();\n        } else {\n          $node.remove();\n        }\n        return $node.length > 1 ? $node.toArray() : $node[0];\n      };\n      var removeAllAttribs = function (e) {\n        return run(e, function (e) {\n          var i;\n          var attrs = e.attributes;\n          for (i = attrs.length - 1; i >= 0; i--) {\n            e.removeAttributeNode(attrs.item(i));\n          }\n        });\n      };\n      var parseStyle = function (cssText) {\n        return styles.parse(cssText);\n      };\n      var serializeStyle = function (stylesArg, name) {\n        return styles.serialize(stylesArg, name);\n      };\n      var addStyle = function (cssText) {\n        var head, styleElm;\n        if (self !== DOMUtils.DOM && doc === document) {\n          if (addedStyles[cssText]) {\n            return;\n          }\n          addedStyles[cssText] = true;\n        }\n        styleElm = doc.getElementById('mceDefaultStyles');\n        if (!styleElm) {\n          styleElm = doc.createElement('style');\n          styleElm.id = 'mceDefaultStyles';\n          styleElm.type = 'text/css';\n          head = doc.getElementsByTagName('head')[0];\n          if (head.firstChild) {\n            head.insertBefore(styleElm, head.firstChild);\n          } else {\n            head.appendChild(styleElm);\n          }\n        }\n        if (styleElm.styleSheet) {\n          styleElm.styleSheet.cssText += cssText;\n        } else {\n          styleElm.appendChild(doc.createTextNode(cssText));\n        }\n      };\n      var loadCSS = function (urls) {\n        if (!urls) {\n          urls = '';\n        }\n        each$k(urls.split(','), function (url) {\n          files[url] = true;\n          styleSheetLoader.load(url, noop);\n        });\n      };\n      var toggleClass = function (elm, cls, state) {\n        $$(elm).toggleClass(cls, state).each(function () {\n          if (this.className === '') {\n            DomQuery(this).attr('class', null);\n          }\n        });\n      };\n      var addClass = function (elm, cls) {\n        $$(elm).addClass(cls);\n      };\n      var removeClass = function (elm, cls) {\n        toggleClass(elm, cls, false);\n      };\n      var hasClass = function (elm, cls) {\n        return $$(elm).hasClass(cls);\n      };\n      var show = function (elm) {\n        $$(elm).show();\n      };\n      var hide = function (elm) {\n        $$(elm).hide();\n      };\n      var isHidden = function (elm) {\n        return $$(elm).css('display') === 'none';\n      };\n      var uniqueId = function (prefix) {\n        return (!prefix ? 'mce_' : prefix) + counter++;\n      };\n      var getOuterHTML = function (elm) {\n        var node = typeof elm === 'string' ? get(elm) : elm;\n        return isElement$5(node) ? node.outerHTML : DomQuery('<div></div>').append(DomQuery(node).clone()).html();\n      };\n      var setOuterHTML = function (elm, html) {\n        $$(elm).each(function () {\n          try {\n            if ('outerHTML' in this) {\n              this.outerHTML = html;\n              return;\n            }\n          } catch (ex) {\n          }\n          remove(DomQuery(this).html(html), true);\n        });\n      };\n      var insertAfter = function (node, reference) {\n        var referenceNode = get(reference);\n        return run(node, function (node) {\n          var parent = referenceNode.parentNode;\n          var nextSibling = referenceNode.nextSibling;\n          if (nextSibling) {\n            parent.insertBefore(node, nextSibling);\n          } else {\n            parent.appendChild(node);\n          }\n          return node;\n        });\n      };\n      var replace = function (newElm, oldElm, keepChildren) {\n        return run(oldElm, function (oldElm) {\n          if (Tools.is(oldElm, 'array')) {\n            newElm = newElm.cloneNode(true);\n          }\n          if (keepChildren) {\n            each$f(grep$1(oldElm.childNodes), function (node) {\n              newElm.appendChild(node);\n            });\n          }\n          return oldElm.parentNode.replaceChild(newElm, oldElm);\n        });\n      };\n      var rename = function (elm, name) {\n        var newElm;\n        if (elm.nodeName !== name.toUpperCase()) {\n          newElm = create(name);\n          each$f(getAttribs(elm), function (attrNode) {\n            setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName));\n          });\n          replace(newElm, elm, true);\n        }\n        return newElm || elm;\n      };\n      var findCommonAncestor = function (a, b) {\n        var ps = a, pe;\n        while (ps) {\n          pe = b;\n          while (pe && ps !== pe) {\n            pe = pe.parentNode;\n          }\n          if (ps === pe) {\n            break;\n          }\n          ps = ps.parentNode;\n        }\n        if (!ps && a.ownerDocument) {\n          return a.ownerDocument.documentElement;\n        }\n        return ps;\n      };\n      var toHex = function (rgbVal) {\n        return styles.toHex(Tools.trim(rgbVal));\n      };\n      var isNonEmptyElement = function (node) {\n        if (isElement$5(node)) {\n          var isNamedAnchor = node.nodeName.toLowerCase() === 'a' && !getAttrib(node, 'href') && getAttrib(node, 'id');\n          if (getAttrib(node, 'name') || getAttrib(node, 'data-mce-bookmark') || isNamedAnchor) {\n            return true;\n          }\n        }\n        return false;\n      };\n      var isEmpty = function (node, elements) {\n        var type, name, brCount = 0;\n        if (isNonEmptyElement(node)) {\n          return false;\n        }\n        node = node.firstChild;\n        if (node) {\n          var walker = new DomTreeWalker(node, node.parentNode);\n          var whitespace = schema ? schema.getWhiteSpaceElements() : {};\n          elements = elements || (schema ? schema.getNonEmptyElements() : null);\n          do {\n            type = node.nodeType;\n            if (isElement$5(node)) {\n              var bogusVal = node.getAttribute('data-mce-bogus');\n              if (bogusVal) {\n                node = walker.next(bogusVal === 'all');\n                continue;\n              }\n              name = node.nodeName.toLowerCase();\n              if (elements && elements[name]) {\n                if (name === 'br') {\n                  brCount++;\n                  node = walker.next();\n                  continue;\n                }\n                return false;\n              }\n              if (isNonEmptyElement(node)) {\n                return false;\n              }\n            }\n            if (type === 8) {\n              return false;\n            }\n            if (type === 3 && !isWhitespaceText(node.nodeValue)) {\n              return false;\n            }\n            if (type === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && isWhitespaceText(node.nodeValue)) {\n              return false;\n            }\n            node = walker.next();\n          } while (node);\n        }\n        return brCount <= 1;\n      };\n      var createRng = function () {\n        return doc.createRange();\n      };\n      var split = function (parentElm, splitElm, replacementElm) {\n        var range = createRng();\n        var beforeFragment;\n        var afterFragment;\n        var parentNode;\n        if (parentElm && splitElm) {\n          range.setStart(parentElm.parentNode, findNodeIndex(parentElm));\n          range.setEnd(splitElm.parentNode, findNodeIndex(splitElm));\n          beforeFragment = range.extractContents();\n          range = createRng();\n          range.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);\n          range.setEnd(parentElm.parentNode, findNodeIndex(parentElm) + 1);\n          afterFragment = range.extractContents();\n          parentNode = parentElm.parentNode;\n          parentNode.insertBefore(trimNode(self, beforeFragment), parentElm);\n          if (replacementElm) {\n            parentNode.insertBefore(replacementElm, parentElm);\n          } else {\n            parentNode.insertBefore(splitElm, parentElm);\n          }\n          parentNode.insertBefore(trimNode(self, afterFragment), parentElm);\n          remove(parentElm);\n          return replacementElm || splitElm;\n        }\n      };\n      var bind = function (target, name, func, scope) {\n        if (Tools.isArray(target)) {\n          var i = target.length;\n          var rv = [];\n          while (i--) {\n            rv[i] = bind(target[i], name, func, scope);\n          }\n          return rv;\n        }\n        if (settings.collect && (target === doc || target === win)) {\n          boundEvents.push([\n            target,\n            name,\n            func,\n            scope\n          ]);\n        }\n        var output = events.bind(target, name, func, scope || self);\n        return output;\n      };\n      var unbind = function (target, name, func) {\n        if (Tools.isArray(target)) {\n          var i = target.length;\n          var rv = [];\n          while (i--) {\n            rv[i] = unbind(target[i], name, func);\n          }\n          return rv;\n        } else {\n          if (boundEvents.length > 0 && (target === doc || target === win)) {\n            var i = boundEvents.length;\n            while (i--) {\n              var item = boundEvents[i];\n              if (target === item[0] && (!name || name === item[1]) && (!func || func === item[2])) {\n                events.unbind(item[0], item[1], item[2]);\n              }\n            }\n          }\n          return events.unbind(target, name, func);\n        }\n      };\n      var fire = function (target, name, evt) {\n        return events.fire(target, name, evt);\n      };\n      var getContentEditable = function (node) {\n        if (node && isElement$5(node)) {\n          var contentEditable = node.getAttribute('data-mce-contenteditable');\n          if (contentEditable && contentEditable !== 'inherit') {\n            return contentEditable;\n          }\n          return node.contentEditable !== 'inherit' ? node.contentEditable : null;\n        } else {\n          return null;\n        }\n      };\n      var getContentEditableParent = function (node) {\n        var root = getRoot();\n        var state = null;\n        for (; node && node !== root; node = node.parentNode) {\n          state = getContentEditable(node);\n          if (state !== null) {\n            break;\n          }\n        }\n        return state;\n      };\n      var destroy = function () {\n        if (boundEvents.length > 0) {\n          var i = boundEvents.length;\n          while (i--) {\n            var item = boundEvents[i];\n            events.unbind(item[0], item[1], item[2]);\n          }\n        }\n        each$j(files, function (_, url) {\n          styleSheetLoader.unload(url);\n          delete files[url];\n        });\n        if (Sizzle.setDocument) {\n          Sizzle.setDocument();\n        }\n      };\n      var isChildOf = function (node, parent) {\n        if (!isIE) {\n          return node === parent || parent.contains(node);\n        } else {\n          while (node) {\n            if (parent === node) {\n              return true;\n            }\n            node = node.parentNode;\n          }\n          return false;\n        }\n      };\n      var dumpRng = function (r) {\n        return 'startContainer: ' + r.startContainer.nodeName + ', startOffset: ' + r.startOffset + ', endContainer: ' + r.endContainer.nodeName + ', endOffset: ' + r.endOffset;\n      };\n      var self = {\n        doc: doc,\n        settings: settings,\n        win: win,\n        files: files,\n        stdMode: stdMode,\n        boxModel: boxModel,\n        styleSheetLoader: styleSheetLoader,\n        boundEvents: boundEvents,\n        styles: styles,\n        schema: schema,\n        events: events,\n        isBlock: isBlock,\n        $: $,\n        $$: $$,\n        root: null,\n        clone: clone,\n        getRoot: getRoot,\n        getViewPort: getViewPort,\n        getRect: getRect,\n        getSize: getSize,\n        getParent: getParent,\n        getParents: getParents,\n        get: get,\n        getNext: getNext,\n        getPrev: getPrev,\n        select: select,\n        is: is,\n        add: add,\n        create: create,\n        createHTML: createHTML,\n        createFragment: createFragment,\n        remove: remove,\n        setStyle: setStyle,\n        getStyle: getStyle,\n        setStyles: setStyles,\n        removeAllAttribs: removeAllAttribs,\n        setAttrib: setAttrib,\n        setAttribs: setAttribs,\n        getAttrib: getAttrib,\n        getPos: getPos$1,\n        parseStyle: parseStyle,\n        serializeStyle: serializeStyle,\n        addStyle: addStyle,\n        loadCSS: loadCSS,\n        addClass: addClass,\n        removeClass: removeClass,\n        hasClass: hasClass,\n        toggleClass: toggleClass,\n        show: show,\n        hide: hide,\n        isHidden: isHidden,\n        uniqueId: uniqueId,\n        setHTML: setHTML,\n        getOuterHTML: getOuterHTML,\n        setOuterHTML: setOuterHTML,\n        decode: decode,\n        encode: encode,\n        insertAfter: insertAfter,\n        replace: replace,\n        rename: rename,\n        findCommonAncestor: findCommonAncestor,\n        toHex: toHex,\n        run: run,\n        getAttribs: getAttribs,\n        isEmpty: isEmpty,\n        createRng: createRng,\n        nodeIndex: findNodeIndex,\n        split: split,\n        bind: bind,\n        unbind: unbind,\n        fire: fire,\n        getContentEditable: getContentEditable,\n        getContentEditableParent: getContentEditableParent,\n        destroy: destroy,\n        isChildOf: isChildOf,\n        dumpRng: dumpRng\n      };\n      var attrHooks = setupAttrHooks(styles, settings, constant(self));\n      return self;\n    };\n    DOMUtils.DOM = DOMUtils(document);\n    DOMUtils.nodeIndex = findNodeIndex;\n\n    var DOM$a = DOMUtils.DOM;\n    var each$e = Tools.each, grep = Tools.grep;\n    var QUEUED = 0;\n    var LOADING = 1;\n    var LOADED = 2;\n    var FAILED = 3;\n    var ScriptLoader = function () {\n      function ScriptLoader(settings) {\n        if (settings === void 0) {\n          settings = {};\n        }\n        this.states = {};\n        this.queue = [];\n        this.scriptLoadedCallbacks = {};\n        this.queueLoadedCallbacks = [];\n        this.loading = 0;\n        this.settings = settings;\n      }\n      ScriptLoader.prototype._setReferrerPolicy = function (referrerPolicy) {\n        this.settings.referrerPolicy = referrerPolicy;\n      };\n      ScriptLoader.prototype.loadScript = function (url, success, failure) {\n        var dom = DOM$a;\n        var elm;\n        var cleanup = function () {\n          dom.remove(id);\n          if (elm) {\n            elm.onerror = elm.onload = elm = null;\n          }\n        };\n        var done = function () {\n          cleanup();\n          success();\n        };\n        var error = function () {\n          cleanup();\n          if (isFunction(failure)) {\n            failure();\n          } else {\n            if (typeof console !== 'undefined' && console.log) {\n              console.log('Failed to load script: ' + url);\n            }\n          }\n        };\n        var id = dom.uniqueId();\n        elm = document.createElement('script');\n        elm.id = id;\n        elm.type = 'text/javascript';\n        elm.src = Tools._addCacheSuffix(url);\n        if (this.settings.referrerPolicy) {\n          dom.setAttrib(elm, 'referrerpolicy', this.settings.referrerPolicy);\n        }\n        elm.onload = done;\n        elm.onerror = error;\n        (document.getElementsByTagName('head')[0] || document.body).appendChild(elm);\n      };\n      ScriptLoader.prototype.isDone = function (url) {\n        return this.states[url] === LOADED;\n      };\n      ScriptLoader.prototype.markDone = function (url) {\n        this.states[url] = LOADED;\n      };\n      ScriptLoader.prototype.add = function (url, success, scope, failure) {\n        var state = this.states[url];\n        this.queue.push(url);\n        if (state === undefined) {\n          this.states[url] = QUEUED;\n        }\n        if (success) {\n          if (!this.scriptLoadedCallbacks[url]) {\n            this.scriptLoadedCallbacks[url] = [];\n          }\n          this.scriptLoadedCallbacks[url].push({\n            success: success,\n            failure: failure,\n            scope: scope || this\n          });\n        }\n      };\n      ScriptLoader.prototype.load = function (url, success, scope, failure) {\n        return this.add(url, success, scope, failure);\n      };\n      ScriptLoader.prototype.remove = function (url) {\n        delete this.states[url];\n        delete this.scriptLoadedCallbacks[url];\n      };\n      ScriptLoader.prototype.loadQueue = function (success, scope, failure) {\n        this.loadScripts(this.queue, success, scope, failure);\n      };\n      ScriptLoader.prototype.loadScripts = function (scripts, success, scope, failure) {\n        var self = this;\n        var failures = [];\n        var execCallbacks = function (name, url) {\n          each$e(self.scriptLoadedCallbacks[url], function (callback) {\n            if (isFunction(callback[name])) {\n              callback[name].call(callback.scope);\n            }\n          });\n          self.scriptLoadedCallbacks[url] = undefined;\n        };\n        self.queueLoadedCallbacks.push({\n          success: success,\n          failure: failure,\n          scope: scope || this\n        });\n        var loadScripts = function () {\n          var loadingScripts = grep(scripts);\n          scripts.length = 0;\n          each$e(loadingScripts, function (url) {\n            if (self.states[url] === LOADED) {\n              execCallbacks('success', url);\n              return;\n            }\n            if (self.states[url] === FAILED) {\n              execCallbacks('failure', url);\n              return;\n            }\n            if (self.states[url] !== LOADING) {\n              self.states[url] = LOADING;\n              self.loading++;\n              self.loadScript(url, function () {\n                self.states[url] = LOADED;\n                self.loading--;\n                execCallbacks('success', url);\n                loadScripts();\n              }, function () {\n                self.states[url] = FAILED;\n                self.loading--;\n                failures.push(url);\n                execCallbacks('failure', url);\n                loadScripts();\n              });\n            }\n          });\n          if (!self.loading) {\n            var notifyCallbacks = self.queueLoadedCallbacks.slice(0);\n            self.queueLoadedCallbacks.length = 0;\n            each$e(notifyCallbacks, function (callback) {\n              if (failures.length === 0) {\n                if (isFunction(callback.success)) {\n                  callback.success.call(callback.scope);\n                }\n              } else {\n                if (isFunction(callback.failure)) {\n                  callback.failure.call(callback.scope, failures);\n                }\n              }\n            });\n          }\n        };\n        loadScripts();\n      };\n      ScriptLoader.ScriptLoader = new ScriptLoader();\n      return ScriptLoader;\n    }();\n\n    var Cell = function (initial) {\n      var value = initial;\n      var get = function () {\n        return value;\n      };\n      var set = function (v) {\n        value = v;\n      };\n      return {\n        get: get,\n        set: set\n      };\n    };\n\n    var isRaw = function (str) {\n      return isObject(str) && has$2(str, 'raw');\n    };\n    var isTokenised = function (str) {\n      return isArray$1(str) && str.length > 1;\n    };\n    var data = {};\n    var currentCode = Cell('en');\n    var getLanguageData = function () {\n      return get$9(data, currentCode.get());\n    };\n    var getData = function () {\n      return map$2(data, function (value) {\n        return __assign({}, value);\n      });\n    };\n    var setCode = function (newCode) {\n      if (newCode) {\n        currentCode.set(newCode);\n      }\n    };\n    var getCode = function () {\n      return currentCode.get();\n    };\n    var add$4 = function (code, items) {\n      var langData = data[code];\n      if (!langData) {\n        data[code] = langData = {};\n      }\n      each$j(items, function (translation, name) {\n        langData[name.toLowerCase()] = translation;\n      });\n    };\n    var translate = function (text) {\n      var langData = getLanguageData().getOr({});\n      var toString = function (obj) {\n        if (isFunction(obj)) {\n          return Object.prototype.toString.call(obj);\n        }\n        return !isEmpty(obj) ? '' + obj : '';\n      };\n      var isEmpty = function (text) {\n        return text === '' || text === null || text === undefined;\n      };\n      var getLangData = function (text) {\n        var textstr = toString(text);\n        return get$9(langData, textstr.toLowerCase()).map(toString).getOr(textstr);\n      };\n      var removeContext = function (str) {\n        return str.replace(/{context:\\w+}$/, '');\n      };\n      if (isEmpty(text)) {\n        return '';\n      }\n      if (isRaw(text)) {\n        return toString(text.raw);\n      }\n      if (isTokenised(text)) {\n        var values_1 = text.slice(1);\n        var substitued = getLangData(text[0]).replace(/\\{([0-9]+)\\}/g, function ($1, $2) {\n          return has$2(values_1, $2) ? toString(values_1[$2]) : $1;\n        });\n        return removeContext(substitued);\n      }\n      return removeContext(getLangData(text));\n    };\n    var isRtl$1 = function () {\n      return getLanguageData().bind(function (items) {\n        return get$9(items, '_dir');\n      }).exists(function (dir) {\n        return dir === 'rtl';\n      });\n    };\n    var hasCode = function (code) {\n      return has$2(data, code);\n    };\n    var I18n = {\n      getData: getData,\n      setCode: setCode,\n      getCode: getCode,\n      add: add$4,\n      translate: translate,\n      isRtl: isRtl$1,\n      hasCode: hasCode\n    };\n\n    var AddOnManager = function () {\n      var items = [];\n      var urls = {};\n      var lookup = {};\n      var _listeners = [];\n      var runListeners = function (name, state) {\n        var matchedListeners = filter$4(_listeners, function (listener) {\n          return listener.name === name && listener.state === state;\n        });\n        each$k(matchedListeners, function (listener) {\n          return listener.callback();\n        });\n      };\n      var get = function (name) {\n        if (lookup[name]) {\n          return lookup[name].instance;\n        }\n        return undefined;\n      };\n      var dependencies = function (name) {\n        var result;\n        if (lookup[name]) {\n          result = lookup[name].dependencies;\n        }\n        return result || [];\n      };\n      var requireLangPack = function (name, languages) {\n        if (AddOnManager.languageLoad !== false) {\n          waitFor(name, function () {\n            var language = I18n.getCode();\n            var wrappedLanguages = ',' + (languages || '') + ',';\n            if (!language || languages && wrappedLanguages.indexOf(',' + language + ',') === -1) {\n              return;\n            }\n            ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');\n          }, 'loaded');\n        }\n      };\n      var add = function (id, addOn, dependencies) {\n        var addOnConstructor = addOn;\n        items.push(addOnConstructor);\n        lookup[id] = {\n          instance: addOnConstructor,\n          dependencies: dependencies\n        };\n        runListeners(id, 'added');\n        return addOnConstructor;\n      };\n      var remove = function (name) {\n        delete urls[name];\n        delete lookup[name];\n      };\n      var createUrl = function (baseUrl, dep) {\n        if (typeof dep === 'object') {\n          return dep;\n        }\n        return typeof baseUrl === 'string' ? {\n          prefix: '',\n          resource: dep,\n          suffix: ''\n        } : {\n          prefix: baseUrl.prefix,\n          resource: dep,\n          suffix: baseUrl.suffix\n        };\n      };\n      var addComponents = function (pluginName, scripts) {\n        var pluginUrl = urls[pluginName];\n        each$k(scripts, function (script) {\n          ScriptLoader.ScriptLoader.add(pluginUrl + '/' + script);\n        });\n      };\n      var loadDependencies = function (name, addOnUrl, success, scope) {\n        var deps = dependencies(name);\n        each$k(deps, function (dep) {\n          var newUrl = createUrl(addOnUrl, dep);\n          load(newUrl.resource, newUrl, undefined, undefined);\n        });\n        if (success) {\n          if (scope) {\n            success.call(scope);\n          } else {\n            success.call(ScriptLoader);\n          }\n        }\n      };\n      var load = function (name, addOnUrl, success, scope, failure) {\n        if (urls[name]) {\n          return;\n        }\n        var urlString = typeof addOnUrl === 'string' ? addOnUrl : addOnUrl.prefix + addOnUrl.resource + addOnUrl.suffix;\n        if (urlString.indexOf('/') !== 0 && urlString.indexOf('://') === -1) {\n          urlString = AddOnManager.baseURL + '/' + urlString;\n        }\n        urls[name] = urlString.substring(0, urlString.lastIndexOf('/'));\n        var done = function () {\n          runListeners(name, 'loaded');\n          loadDependencies(name, addOnUrl, success, scope);\n        };\n        if (lookup[name]) {\n          done();\n        } else {\n          ScriptLoader.ScriptLoader.add(urlString, done, scope, failure);\n        }\n      };\n      var waitFor = function (name, callback, state) {\n        if (state === void 0) {\n          state = 'added';\n        }\n        if (has$2(lookup, name) && state === 'added') {\n          callback();\n        } else if (has$2(urls, name) && state === 'loaded') {\n          callback();\n        } else {\n          _listeners.push({\n            name: name,\n            state: state,\n            callback: callback\n          });\n        }\n      };\n      return {\n        items: items,\n        urls: urls,\n        lookup: lookup,\n        _listeners: _listeners,\n        get: get,\n        dependencies: dependencies,\n        requireLangPack: requireLangPack,\n        add: add,\n        remove: remove,\n        createUrl: createUrl,\n        addComponents: addComponents,\n        load: load,\n        waitFor: waitFor\n      };\n    };\n    AddOnManager.languageLoad = true;\n    AddOnManager.baseURL = '';\n    AddOnManager.PluginManager = AddOnManager();\n    AddOnManager.ThemeManager = AddOnManager();\n\n    var singleton = function (doRevoke) {\n      var subject = Cell(Optional.none());\n      var revoke = function () {\n        return subject.get().each(doRevoke);\n      };\n      var clear = function () {\n        revoke();\n        subject.set(Optional.none());\n      };\n      var isSet = function () {\n        return subject.get().isSome();\n      };\n      var get = function () {\n        return subject.get();\n      };\n      var set = function (s) {\n        revoke();\n        subject.set(Optional.some(s));\n      };\n      return {\n        clear: clear,\n        isSet: isSet,\n        get: get,\n        set: set\n      };\n    };\n    var value = function () {\n      var subject = singleton(noop);\n      var on = function (f) {\n        return subject.get().each(f);\n      };\n      return __assign(__assign({}, subject), { on: on });\n    };\n\n    var first = function (fn, rate) {\n      var timer = null;\n      var cancel = function () {\n        if (!isNull(timer)) {\n          clearTimeout(timer);\n          timer = null;\n        }\n      };\n      var throttle = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n        if (isNull(timer)) {\n          timer = setTimeout(function () {\n            timer = null;\n            fn.apply(null, args);\n          }, rate);\n        }\n      };\n      return {\n        cancel: cancel,\n        throttle: throttle\n      };\n    };\n    var last = function (fn, rate) {\n      var timer = null;\n      var cancel = function () {\n        if (!isNull(timer)) {\n          clearTimeout(timer);\n          timer = null;\n        }\n      };\n      var throttle = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n        cancel();\n        timer = setTimeout(function () {\n          timer = null;\n          fn.apply(null, args);\n        }, rate);\n      };\n      return {\n        cancel: cancel,\n        throttle: throttle\n      };\n    };\n\n    var read$4 = function (element, attr) {\n      var value = get$6(element, attr);\n      return value === undefined || value === '' ? [] : value.split(' ');\n    };\n    var add$3 = function (element, attr, id) {\n      var old = read$4(element, attr);\n      var nu = old.concat([id]);\n      set$1(element, attr, nu.join(' '));\n      return true;\n    };\n    var remove$5 = function (element, attr, id) {\n      var nu = filter$4(read$4(element, attr), function (v) {\n        return v !== id;\n      });\n      if (nu.length > 0) {\n        set$1(element, attr, nu.join(' '));\n      } else {\n        remove$6(element, attr);\n      }\n      return false;\n    };\n\n    var supports = function (element) {\n      return element.dom.classList !== undefined;\n    };\n    var get$4 = function (element) {\n      return read$4(element, 'class');\n    };\n    var add$2 = function (element, clazz) {\n      return add$3(element, 'class', clazz);\n    };\n    var remove$4 = function (element, clazz) {\n      return remove$5(element, 'class', clazz);\n    };\n\n    var add$1 = function (element, clazz) {\n      if (supports(element)) {\n        element.dom.classList.add(clazz);\n      } else {\n        add$2(element, clazz);\n      }\n    };\n    var cleanClass = function (element) {\n      var classList = supports(element) ? element.dom.classList : get$4(element);\n      if (classList.length === 0) {\n        remove$6(element, 'class');\n      }\n    };\n    var remove$3 = function (element, clazz) {\n      if (supports(element)) {\n        var classList = element.dom.classList;\n        classList.remove(clazz);\n      } else {\n        remove$4(element, clazz);\n      }\n      cleanClass(element);\n    };\n    var has = function (element, clazz) {\n      return supports(element) && element.dom.classList.contains(clazz);\n    };\n\n    var descendants$1 = function (scope, predicate) {\n      var result = [];\n      each$k(children(scope), function (x) {\n        if (predicate(x)) {\n          result = result.concat([x]);\n        }\n        result = result.concat(descendants$1(x, predicate));\n      });\n      return result;\n    };\n\n    var descendants = function (scope, selector) {\n      return all(selector, scope);\n    };\n\n    var annotation = constant('mce-annotation');\n    var dataAnnotation = constant('data-mce-annotation');\n    var dataAnnotationId = constant('data-mce-annotation-uid');\n\n    var identify = function (editor, annotationName) {\n      var rng = editor.selection.getRng();\n      var start = SugarElement.fromDom(rng.startContainer);\n      var root = SugarElement.fromDom(editor.getBody());\n      var selector = annotationName.fold(function () {\n        return '.' + annotation();\n      }, function (an) {\n        return '[' + dataAnnotation() + '=\"' + an + '\"]';\n      });\n      var newStart = child$1(start, rng.startOffset).getOr(start);\n      var closest = closest$2(newStart, selector, function (n) {\n        return eq(n, root);\n      });\n      var getAttr = function (c, property) {\n        if (has$1(c, property)) {\n          return Optional.some(get$6(c, property));\n        } else {\n          return Optional.none();\n        }\n      };\n      return closest.bind(function (c) {\n        return getAttr(c, '' + dataAnnotationId()).bind(function (uid) {\n          return getAttr(c, '' + dataAnnotation()).map(function (name) {\n            var elements = findMarkers(editor, uid);\n            return {\n              uid: uid,\n              name: name,\n              elements: elements\n            };\n          });\n        });\n      });\n    };\n    var isAnnotation = function (elem) {\n      return isElement$6(elem) && has(elem, annotation());\n    };\n    var findMarkers = function (editor, uid) {\n      var body = SugarElement.fromDom(editor.getBody());\n      return descendants(body, '[' + dataAnnotationId() + '=\"' + uid + '\"]');\n    };\n    var findAll = function (editor, name) {\n      var body = SugarElement.fromDom(editor.getBody());\n      var markers = descendants(body, '[' + dataAnnotation() + '=\"' + name + '\"]');\n      var directory = {};\n      each$k(markers, function (m) {\n        var uid = get$6(m, dataAnnotationId());\n        var nodesAlready = get$9(directory, uid).getOr([]);\n        directory[uid] = nodesAlready.concat([m]);\n      });\n      return directory;\n    };\n\n    var setup$n = function (editor, _registry) {\n      var changeCallbacks = Cell({});\n      var initData = function () {\n        return {\n          listeners: [],\n          previous: value()\n        };\n      };\n      var withCallbacks = function (name, f) {\n        updateCallbacks(name, function (data) {\n          f(data);\n          return data;\n        });\n      };\n      var updateCallbacks = function (name, f) {\n        var callbackMap = changeCallbacks.get();\n        var data = get$9(callbackMap, name).getOrThunk(initData);\n        var outputData = f(data);\n        callbackMap[name] = outputData;\n        changeCallbacks.set(callbackMap);\n      };\n      var fireCallbacks = function (name, uid, elements) {\n        withCallbacks(name, function (data) {\n          each$k(data.listeners, function (f) {\n            return f(true, name, {\n              uid: uid,\n              nodes: map$3(elements, function (elem) {\n                return elem.dom;\n              })\n            });\n          });\n        });\n      };\n      var fireNoAnnotation = function (name) {\n        withCallbacks(name, function (data) {\n          each$k(data.listeners, function (f) {\n            return f(false, name);\n          });\n        });\n      };\n      var onNodeChange = last(function () {\n        var callbackMap = changeCallbacks.get();\n        var annotations = sort(keys(callbackMap));\n        each$k(annotations, function (name) {\n          updateCallbacks(name, function (data) {\n            var prev = data.previous.get();\n            identify(editor, Optional.some(name)).fold(function () {\n              if (prev.isSome()) {\n                fireNoAnnotation(name);\n                data.previous.clear();\n              }\n            }, function (_a) {\n              var uid = _a.uid, name = _a.name, elements = _a.elements;\n              if (!is$1(prev, uid)) {\n                fireCallbacks(name, uid, elements);\n                data.previous.set(uid);\n              }\n            });\n            return {\n              previous: data.previous,\n              listeners: data.listeners\n            };\n          });\n        });\n      }, 30);\n      editor.on('remove', function () {\n        onNodeChange.cancel();\n      });\n      editor.on('NodeChange', function () {\n        onNodeChange.throttle();\n      });\n      var addListener = function (name, f) {\n        updateCallbacks(name, function (data) {\n          return {\n            previous: data.previous,\n            listeners: data.listeners.concat([f])\n          };\n        });\n      };\n      return { addListener: addListener };\n    };\n\n    var setup$m = function (editor, registry) {\n      var identifyParserNode = function (span) {\n        return Optional.from(span.attr(dataAnnotation())).bind(registry.lookup);\n      };\n      editor.on('init', function () {\n        editor.serializer.addNodeFilter('span', function (spans) {\n          each$k(spans, function (span) {\n            identifyParserNode(span).each(function (settings) {\n              if (settings.persistent === false) {\n                span.unwrap();\n              }\n            });\n          });\n        });\n      });\n    };\n\n    var create$7 = function () {\n      var annotations = {};\n      var register = function (name, settings) {\n        annotations[name] = {\n          name: name,\n          settings: settings\n        };\n      };\n      var lookup = function (name) {\n        return get$9(annotations, name).map(function (a) {\n          return a.settings;\n        });\n      };\n      return {\n        register: register,\n        lookup: lookup\n      };\n    };\n\n    var unique = 0;\n    var generate = function (prefix) {\n      var date = new Date();\n      var time = date.getTime();\n      var random = Math.floor(Math.random() * 1000000000);\n      unique++;\n      return prefix + '_' + random + unique + String(time);\n    };\n\n    var add = function (element, classes) {\n      each$k(classes, function (x) {\n        add$1(element, x);\n      });\n    };\n\n    var fromHtml = function (html, scope) {\n      var doc = scope || document;\n      var div = doc.createElement('div');\n      div.innerHTML = html;\n      return children(SugarElement.fromDom(div));\n    };\n    var fromDom$1 = function (nodes) {\n      return map$3(nodes, SugarElement.fromDom);\n    };\n\n    var get$3 = function (element) {\n      return element.dom.innerHTML;\n    };\n    var set = function (element, content) {\n      var owner = owner$1(element);\n      var docDom = owner.dom;\n      var fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n      var contentElements = fromHtml(content, docDom);\n      append(fragment, contentElements);\n      empty(element);\n      append$1(element, fragment);\n    };\n\n    var clone$1 = function (original, isDeep) {\n      return SugarElement.fromDom(original.dom.cloneNode(isDeep));\n    };\n    var shallow = function (original) {\n      return clone$1(original, false);\n    };\n    var deep$1 = function (original) {\n      return clone$1(original, true);\n    };\n\n    var TextWalker = function (startNode, rootNode, isBoundary) {\n      if (isBoundary === void 0) {\n        isBoundary = never;\n      }\n      var walker = new DomTreeWalker(startNode, rootNode);\n      var walk = function (direction) {\n        var next;\n        do {\n          next = walker[direction]();\n        } while (next && !isText$7(next) && !isBoundary(next));\n        return Optional.from(next).filter(isText$7);\n      };\n      return {\n        current: function () {\n          return Optional.from(walker.current()).filter(isText$7);\n        },\n        next: function () {\n          return walk('next');\n        },\n        prev: function () {\n          return walk('prev');\n        },\n        prev2: function () {\n          return walk('prev2');\n        }\n      };\n    };\n\n    var TextSeeker = function (dom, isBoundary) {\n      var isBlockBoundary = isBoundary ? isBoundary : function (node) {\n        return dom.isBlock(node) || isBr$5(node) || isContentEditableFalse$b(node);\n      };\n      var walk = function (node, offset, walker, process) {\n        if (isText$7(node)) {\n          var newOffset = process(node, offset, node.data);\n          if (newOffset !== -1) {\n            return Optional.some({\n              container: node,\n              offset: newOffset\n            });\n          }\n        }\n        return walker().bind(function (next) {\n          return walk(next.container, next.offset, walker, process);\n        });\n      };\n      var backwards = function (node, offset, process, root) {\n        var walker = TextWalker(node, root, isBlockBoundary);\n        return walk(node, offset, function () {\n          return walker.prev().map(function (prev) {\n            return {\n              container: prev,\n              offset: prev.length\n            };\n          });\n        }, process).getOrNull();\n      };\n      var forwards = function (node, offset, process, root) {\n        var walker = TextWalker(node, root, isBlockBoundary);\n        return walk(node, offset, function () {\n          return walker.next().map(function (next) {\n            return {\n              container: next,\n              offset: 0\n            };\n          });\n        }, process).getOrNull();\n      };\n      return {\n        backwards: backwards,\n        forwards: forwards\n      };\n    };\n\n    var round$2 = Math.round;\n    var clone = function (rect) {\n      if (!rect) {\n        return {\n          left: 0,\n          top: 0,\n          bottom: 0,\n          right: 0,\n          width: 0,\n          height: 0\n        };\n      }\n      return {\n        left: round$2(rect.left),\n        top: round$2(rect.top),\n        bottom: round$2(rect.bottom),\n        right: round$2(rect.right),\n        width: round$2(rect.width),\n        height: round$2(rect.height)\n      };\n    };\n    var collapse = function (rect, toStart) {\n      rect = clone(rect);\n      if (toStart) {\n        rect.right = rect.left;\n      } else {\n        rect.left = rect.left + rect.width;\n        rect.right = rect.left;\n      }\n      rect.width = 0;\n      return rect;\n    };\n    var isEqual = function (rect1, rect2) {\n      return rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right;\n    };\n    var isValidOverflow = function (overflowY, rect1, rect2) {\n      return overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;\n    };\n    var isAbove$1 = function (rect1, rect2) {\n      var halfHeight = Math.min(rect2.height / 2, rect1.height / 2);\n      if (rect1.bottom - halfHeight < rect2.top) {\n        return true;\n      }\n      if (rect1.top > rect2.bottom) {\n        return false;\n      }\n      return isValidOverflow(rect2.top - rect1.bottom, rect1, rect2);\n    };\n    var isBelow$1 = function (rect1, rect2) {\n      if (rect1.top > rect2.bottom) {\n        return true;\n      }\n      if (rect1.bottom < rect2.top) {\n        return false;\n      }\n      return isValidOverflow(rect2.bottom - rect1.top, rect1, rect2);\n    };\n    var containsXY = function (rect, clientX, clientY) {\n      return clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;\n    };\n\n    var clamp$2 = function (value, min, max) {\n      return Math.min(Math.max(value, min), max);\n    };\n\n    var getSelectedNode = function (range) {\n      var startContainer = range.startContainer, startOffset = range.startOffset;\n      if (startContainer.hasChildNodes() && range.endOffset === startOffset + 1) {\n        return startContainer.childNodes[startOffset];\n      }\n      return null;\n    };\n    var getNode$1 = function (container, offset) {\n      if (isElement$5(container) && container.hasChildNodes()) {\n        var childNodes = container.childNodes;\n        var safeOffset = clamp$2(offset, 0, childNodes.length - 1);\n        return childNodes[safeOffset];\n      } else {\n        return container;\n      }\n    };\n    var getNodeUnsafe = function (container, offset) {\n      if (offset < 0 && isElement$5(container) && container.hasChildNodes()) {\n        return undefined;\n      } else {\n        return getNode$1(container, offset);\n      }\n    };\n\n    var extendingChars = new RegExp('[\\u0300-\\u036f\\u0483-\\u0487\\u0488-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u0610-\\u061a' + '\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7-\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0' + '\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08e3-\\u0902\\u093a\\u093c' + '\\u0941-\\u0948\\u094d\\u0951-\\u0957\\u0962-\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2-\\u09e3' + '\\u0a01-\\u0a02\\u0a3c\\u0a41-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70-\\u0a71\\u0a75\\u0a81-\\u0a82\\u0abc' + '\\u0ac1-\\u0ac5\\u0ac7-\\u0ac8\\u0acd\\u0ae2-\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57' + '\\u0b62-\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c00\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56' + '\\u0c62-\\u0c63\\u0c81\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc-\\u0ccd\\u0cd5-\\u0cd6\\u0ce2-\\u0ce3\\u0d01\\u0d3e\\u0d41-\\u0d44' + '\\u0d4d\\u0d57\\u0d62-\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9' + '\\u0ebb-\\u0ebc\\u0ec8-\\u0ecd\\u0f18-\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97' + '\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039-\\u103a\\u103d-\\u103e\\u1058-\\u1059\\u105e-\\u1060\\u1071-\\u1074' + '\\u1082\\u1085-\\u1086\\u108d\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17b4-\\u17b5' + '\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927-\\u1928\\u1932\\u1939-\\u193b\\u1a17-\\u1a18' + '\\u1a1b\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1ab0-\\u1abd\\u1ABE\\u1b00-\\u1b03\\u1b34' + '\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80-\\u1b81\\u1ba2-\\u1ba5\\u1ba8-\\u1ba9\\u1bab-\\u1bad\\u1be6\\u1be8-\\u1be9' + '\\u1bed\\u1bef-\\u1bf1\\u1c2c-\\u1c33\\u1c36-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1cf4\\u1cf8-\\u1cf9' + '\\u1dc0-\\u1df5\\u1dfc-\\u1dff\\u200c-\\u200d\\u20d0-\\u20dc\\u20DD-\\u20E0\\u20e1\\u20E2-\\u20E4\\u20e5-\\u20f0\\u2cef-\\u2cf1' + '\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302d\\u302e-\\u302f\\u3099-\\u309a\\ua66f\\uA670-\\uA672\\ua674-\\ua67d\\ua69e-\\ua69f\\ua6f0-\\ua6f1' + '\\ua802\\ua806\\ua80b\\ua825-\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc' + '\\ua9e5\\uaa29-\\uaa2e\\uaa31-\\uaa32\\uaa35-\\uaa36\\uaa43\\uaa4c\\uaa7c\\uaab0\\uaab2-\\uaab4\\uaab7-\\uaab8\\uaabe-\\uaabf\\uaac1' + '\\uaaec-\\uaaed\\uaaf6\\uabe5\\uabe8\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\uff9e-\\uff9f]');\n    var isExtendingChar = function (ch) {\n      return typeof ch === 'string' && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n    };\n\n    var or = function () {\n      var args = [];\n      for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n      }\n      return function (x) {\n        for (var i = 0; i < args.length; i++) {\n          if (args[i](x)) {\n            return true;\n          }\n        }\n        return false;\n      };\n    };\n    var and = function () {\n      var args = [];\n      for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n      }\n      return function (x) {\n        for (var i = 0; i < args.length; i++) {\n          if (!args[i](x)) {\n            return false;\n          }\n        }\n        return true;\n      };\n    };\n\n    var isElement$3 = isElement$5;\n    var isCaretCandidate$2 = isCaretCandidate$3;\n    var isBlock$1 = matchStyleValues('display', 'block table');\n    var isFloated = matchStyleValues('float', 'left right');\n    var isValidElementCaretCandidate = and(isElement$3, isCaretCandidate$2, not(isFloated));\n    var isNotPre = not(matchStyleValues('white-space', 'pre pre-line pre-wrap'));\n    var isText$4 = isText$7;\n    var isBr$2 = isBr$5;\n    var nodeIndex$1 = DOMUtils.nodeIndex;\n    var resolveIndex$1 = getNodeUnsafe;\n    var createRange$1 = function (doc) {\n      return 'createRange' in doc ? doc.createRange() : DOMUtils.DOM.createRng();\n    };\n    var isWhiteSpace$1 = function (chr) {\n      return chr && /[\\r\\n\\t ]/.test(chr);\n    };\n    var isRange = function (rng) {\n      return !!rng.setStart && !!rng.setEnd;\n    };\n    var isHiddenWhiteSpaceRange = function (range) {\n      var container = range.startContainer;\n      var offset = range.startOffset;\n      if (isWhiteSpace$1(range.toString()) && isNotPre(container.parentNode) && isText$7(container)) {\n        var text = container.data;\n        if (isWhiteSpace$1(text[offset - 1]) || isWhiteSpace$1(text[offset + 1])) {\n          return true;\n        }\n      }\n      return false;\n    };\n    var getBrClientRect = function (brNode) {\n      var doc = brNode.ownerDocument;\n      var rng = createRange$1(doc);\n      var nbsp$1 = doc.createTextNode(nbsp);\n      var parentNode = brNode.parentNode;\n      parentNode.insertBefore(nbsp$1, brNode);\n      rng.setStart(nbsp$1, 0);\n      rng.setEnd(nbsp$1, 1);\n      var clientRect = clone(rng.getBoundingClientRect());\n      parentNode.removeChild(nbsp$1);\n      return clientRect;\n    };\n    var getBoundingClientRectWebKitText = function (rng) {\n      var sc = rng.startContainer;\n      var ec = rng.endContainer;\n      var so = rng.startOffset;\n      var eo = rng.endOffset;\n      if (sc === ec && isText$7(ec) && so === 0 && eo === 1) {\n        var newRng = rng.cloneRange();\n        newRng.setEndAfter(ec);\n        return getBoundingClientRect$1(newRng);\n      } else {\n        return null;\n      }\n    };\n    var isZeroRect = function (r) {\n      return r.left === 0 && r.right === 0 && r.top === 0 && r.bottom === 0;\n    };\n    var getBoundingClientRect$1 = function (item) {\n      var clientRect;\n      var clientRects = item.getClientRects();\n      if (clientRects.length > 0) {\n        clientRect = clone(clientRects[0]);\n      } else {\n        clientRect = clone(item.getBoundingClientRect());\n      }\n      if (!isRange(item) && isBr$2(item) && isZeroRect(clientRect)) {\n        return getBrClientRect(item);\n      }\n      if (isZeroRect(clientRect) && isRange(item)) {\n        return getBoundingClientRectWebKitText(item);\n      }\n      return clientRect;\n    };\n    var collapseAndInflateWidth = function (clientRect, toStart) {\n      var newClientRect = collapse(clientRect, toStart);\n      newClientRect.width = 1;\n      newClientRect.right = newClientRect.left + 1;\n      return newClientRect;\n    };\n    var getCaretPositionClientRects = function (caretPosition) {\n      var clientRects = [];\n      var addUniqueAndValidRect = function (clientRect) {\n        if (clientRect.height === 0) {\n          return;\n        }\n        if (clientRects.length > 0) {\n          if (isEqual(clientRect, clientRects[clientRects.length - 1])) {\n            return;\n          }\n        }\n        clientRects.push(clientRect);\n      };\n      var addCharacterOffset = function (container, offset) {\n        var range = createRange$1(container.ownerDocument);\n        if (offset < container.data.length) {\n          if (isExtendingChar(container.data[offset])) {\n            return clientRects;\n          }\n          if (isExtendingChar(container.data[offset - 1])) {\n            range.setStart(container, offset);\n            range.setEnd(container, offset + 1);\n            if (!isHiddenWhiteSpaceRange(range)) {\n              addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), false));\n              return clientRects;\n            }\n          }\n        }\n        if (offset > 0) {\n          range.setStart(container, offset - 1);\n          range.setEnd(container, offset);\n          if (!isHiddenWhiteSpaceRange(range)) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), false));\n          }\n        }\n        if (offset < container.data.length) {\n          range.setStart(container, offset);\n          range.setEnd(container, offset + 1);\n          if (!isHiddenWhiteSpaceRange(range)) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), true));\n          }\n        }\n      };\n      var container = caretPosition.container();\n      var offset = caretPosition.offset();\n      if (isText$4(container)) {\n        addCharacterOffset(container, offset);\n        return clientRects;\n      }\n      if (isElement$3(container)) {\n        if (caretPosition.isAtEnd()) {\n          var node = resolveIndex$1(container, offset);\n          if (isText$4(node)) {\n            addCharacterOffset(node, node.data.length);\n          }\n          if (isValidElementCaretCandidate(node) && !isBr$2(node)) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n          }\n        } else {\n          var node = resolveIndex$1(container, offset);\n          if (isText$4(node)) {\n            addCharacterOffset(node, 0);\n          }\n          if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n            return clientRects;\n          }\n          var beforeNode = resolveIndex$1(caretPosition.container(), caretPosition.offset() - 1);\n          if (isValidElementCaretCandidate(beforeNode) && !isBr$2(beforeNode)) {\n            if (isBlock$1(beforeNode) || isBlock$1(node) || !isValidElementCaretCandidate(node)) {\n              addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(beforeNode), false));\n            }\n          }\n          if (isValidElementCaretCandidate(node)) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), true));\n          }\n        }\n      }\n      return clientRects;\n    };\n    var CaretPosition = function (container, offset, clientRects) {\n      var isAtStart = function () {\n        if (isText$4(container)) {\n          return offset === 0;\n        }\n        return offset === 0;\n      };\n      var isAtEnd = function () {\n        if (isText$4(container)) {\n          return offset >= container.data.length;\n        }\n        return offset >= container.childNodes.length;\n      };\n      var toRange = function () {\n        var range = createRange$1(container.ownerDocument);\n        range.setStart(container, offset);\n        range.setEnd(container, offset);\n        return range;\n      };\n      var getClientRects = function () {\n        if (!clientRects) {\n          clientRects = getCaretPositionClientRects(CaretPosition(container, offset));\n        }\n        return clientRects;\n      };\n      var isVisible = function () {\n        return getClientRects().length > 0;\n      };\n      var isEqual = function (caretPosition) {\n        return caretPosition && container === caretPosition.container() && offset === caretPosition.offset();\n      };\n      var getNode = function (before) {\n        return resolveIndex$1(container, before ? offset - 1 : offset);\n      };\n      return {\n        container: constant(container),\n        offset: constant(offset),\n        toRange: toRange,\n        getClientRects: getClientRects,\n        isVisible: isVisible,\n        isAtStart: isAtStart,\n        isAtEnd: isAtEnd,\n        isEqual: isEqual,\n        getNode: getNode\n      };\n    };\n    CaretPosition.fromRangeStart = function (range) {\n      return CaretPosition(range.startContainer, range.startOffset);\n    };\n    CaretPosition.fromRangeEnd = function (range) {\n      return CaretPosition(range.endContainer, range.endOffset);\n    };\n    CaretPosition.after = function (node) {\n      return CaretPosition(node.parentNode, nodeIndex$1(node) + 1);\n    };\n    CaretPosition.before = function (node) {\n      return CaretPosition(node.parentNode, nodeIndex$1(node));\n    };\n    CaretPosition.isAbove = function (pos1, pos2) {\n      return lift2(head(pos2.getClientRects()), last$2(pos1.getClientRects()), isAbove$1).getOr(false);\n    };\n    CaretPosition.isBelow = function (pos1, pos2) {\n      return lift2(last$2(pos2.getClientRects()), head(pos1.getClientRects()), isBelow$1).getOr(false);\n    };\n    CaretPosition.isAtStart = function (pos) {\n      return pos ? pos.isAtStart() : false;\n    };\n    CaretPosition.isAtEnd = function (pos) {\n      return pos ? pos.isAtEnd() : false;\n    };\n    CaretPosition.isTextPosition = function (pos) {\n      return pos ? isText$7(pos.container()) : false;\n    };\n    CaretPosition.isElementPosition = function (pos) {\n      return CaretPosition.isTextPosition(pos) === false;\n    };\n\n    var trimEmptyTextNode$1 = function (dom, node) {\n      if (isText$7(node) && node.data.length === 0) {\n        dom.remove(node);\n      }\n    };\n    var insertNode = function (dom, rng, node) {\n      rng.insertNode(node);\n      trimEmptyTextNode$1(dom, node.previousSibling);\n      trimEmptyTextNode$1(dom, node.nextSibling);\n    };\n    var insertFragment = function (dom, rng, frag) {\n      var firstChild = Optional.from(frag.firstChild);\n      var lastChild = Optional.from(frag.lastChild);\n      rng.insertNode(frag);\n      firstChild.each(function (child) {\n        return trimEmptyTextNode$1(dom, child.previousSibling);\n      });\n      lastChild.each(function (child) {\n        return trimEmptyTextNode$1(dom, child.nextSibling);\n      });\n    };\n    var rangeInsertNode = function (dom, rng, node) {\n      if (isDocumentFragment(node)) {\n        insertFragment(dom, rng, node);\n      } else {\n        insertNode(dom, rng, node);\n      }\n    };\n\n    var isText$3 = isText$7;\n    var isBogus = isBogus$2;\n    var nodeIndex = DOMUtils.nodeIndex;\n    var normalizedParent = function (node) {\n      var parentNode = node.parentNode;\n      if (isBogus(parentNode)) {\n        return normalizedParent(parentNode);\n      }\n      return parentNode;\n    };\n    var getChildNodes = function (node) {\n      if (!node) {\n        return [];\n      }\n      return reduce(node.childNodes, function (result, node) {\n        if (isBogus(node) && node.nodeName !== 'BR') {\n          result = result.concat(getChildNodes(node));\n        } else {\n          result.push(node);\n        }\n        return result;\n      }, []);\n    };\n    var normalizedTextOffset = function (node, offset) {\n      while (node = node.previousSibling) {\n        if (!isText$3(node)) {\n          break;\n        }\n        offset += node.data.length;\n      }\n      return offset;\n    };\n    var equal = function (a) {\n      return function (b) {\n        return a === b;\n      };\n    };\n    var normalizedNodeIndex = function (node) {\n      var nodes, index;\n      nodes = getChildNodes(normalizedParent(node));\n      index = findIndex$1(nodes, equal(node), node);\n      nodes = nodes.slice(0, index + 1);\n      var numTextFragments = reduce(nodes, function (result, node, i) {\n        if (isText$3(node) && isText$3(nodes[i - 1])) {\n          result++;\n        }\n        return result;\n      }, 0);\n      nodes = filter$2(nodes, matchNodeNames([node.nodeName]));\n      index = findIndex$1(nodes, equal(node), node);\n      return index - numTextFragments;\n    };\n    var createPathItem = function (node) {\n      var name;\n      if (isText$3(node)) {\n        name = 'text()';\n      } else {\n        name = node.nodeName.toLowerCase();\n      }\n      return name + '[' + normalizedNodeIndex(node) + ']';\n    };\n    var parentsUntil$1 = function (root, node, predicate) {\n      var parents = [];\n      for (node = node.parentNode; node !== root; node = node.parentNode) {\n        if (predicate && predicate(node)) {\n          break;\n        }\n        parents.push(node);\n      }\n      return parents;\n    };\n    var create$6 = function (root, caretPosition) {\n      var container, offset, path = [], outputOffset, childNodes, parents;\n      container = caretPosition.container();\n      offset = caretPosition.offset();\n      if (isText$3(container)) {\n        outputOffset = normalizedTextOffset(container, offset);\n      } else {\n        childNodes = container.childNodes;\n        if (offset >= childNodes.length) {\n          outputOffset = 'after';\n          offset = childNodes.length - 1;\n        } else {\n          outputOffset = 'before';\n        }\n        container = childNodes[offset];\n      }\n      path.push(createPathItem(container));\n      parents = parentsUntil$1(root, container);\n      parents = filter$2(parents, not(isBogus$2));\n      path = path.concat(map$1(parents, function (node) {\n        return createPathItem(node);\n      }));\n      return path.reverse().join('/') + ',' + outputOffset;\n    };\n    var resolvePathItem = function (node, name, index) {\n      var nodes = getChildNodes(node);\n      nodes = filter$2(nodes, function (node, index) {\n        return !isText$3(node) || !isText$3(nodes[index - 1]);\n      });\n      nodes = filter$2(nodes, matchNodeNames([name]));\n      return nodes[index];\n    };\n    var findTextPosition = function (container, offset) {\n      var node = container, targetOffset = 0, dataLen;\n      while (isText$3(node)) {\n        dataLen = node.data.length;\n        if (offset >= targetOffset && offset <= targetOffset + dataLen) {\n          container = node;\n          offset = offset - targetOffset;\n          break;\n        }\n        if (!isText$3(node.nextSibling)) {\n          container = node;\n          offset = dataLen;\n          break;\n        }\n        targetOffset += dataLen;\n        node = node.nextSibling;\n      }\n      if (isText$3(container) && offset > container.data.length) {\n        offset = container.data.length;\n      }\n      return CaretPosition(container, offset);\n    };\n    var resolve$2 = function (root, path) {\n      var offset;\n      if (!path) {\n        return null;\n      }\n      var parts = path.split(',');\n      var paths = parts[0].split('/');\n      offset = parts.length > 1 ? parts[1] : 'before';\n      var container = reduce(paths, function (result, value) {\n        var match = /([\\w\\-\\(\\)]+)\\[([0-9]+)\\]/.exec(value);\n        if (!match) {\n          return null;\n        }\n        if (match[1] === 'text()') {\n          match[1] = '#text';\n        }\n        return resolvePathItem(result, match[1], parseInt(match[2], 10));\n      }, root);\n      if (!container) {\n        return null;\n      }\n      if (!isText$3(container)) {\n        if (offset === 'after') {\n          offset = nodeIndex(container) + 1;\n        } else {\n          offset = nodeIndex(container);\n        }\n        return CaretPosition(container.parentNode, offset);\n      }\n      return findTextPosition(container, parseInt(offset, 10));\n    };\n\n    var isContentEditableFalse$9 = isContentEditableFalse$b;\n    var getNormalizedTextOffset = function (trim, container, offset) {\n      var node, trimmedOffset;\n      trimmedOffset = trim(container.data.slice(0, offset)).length;\n      for (node = container.previousSibling; node && isText$7(node); node = node.previousSibling) {\n        trimmedOffset += trim(node.data).length;\n      }\n      return trimmedOffset;\n    };\n    var getPoint = function (dom, trim, normalized, rng, start) {\n      var container = rng[start ? 'startContainer' : 'endContainer'];\n      var offset = rng[start ? 'startOffset' : 'endOffset'];\n      var point = [];\n      var childNodes, after = 0;\n      var root = dom.getRoot();\n      if (isText$7(container)) {\n        point.push(normalized ? getNormalizedTextOffset(trim, container, offset) : offset);\n      } else {\n        childNodes = container.childNodes;\n        if (offset >= childNodes.length && childNodes.length) {\n          after = 1;\n          offset = Math.max(0, childNodes.length - 1);\n        }\n        point.push(dom.nodeIndex(childNodes[offset], normalized) + after);\n      }\n      for (; container && container !== root; container = container.parentNode) {\n        point.push(dom.nodeIndex(container, normalized));\n      }\n      return point;\n    };\n    var getLocation = function (trim, selection, normalized, rng) {\n      var dom = selection.dom, bookmark = {};\n      bookmark.start = getPoint(dom, trim, normalized, rng, true);\n      if (!selection.isCollapsed()) {\n        bookmark.end = getPoint(dom, trim, normalized, rng, false);\n      }\n      if (isRangeInCaretContainerBlock(rng)) {\n        bookmark.isFakeCaret = true;\n      }\n      return bookmark;\n    };\n    var findIndex = function (dom, name, element) {\n      var count = 0;\n      Tools.each(dom.select(name), function (node) {\n        if (node.getAttribute('data-mce-bogus') === 'all') {\n          return;\n        }\n        if (node === element) {\n          return false;\n        }\n        count++;\n      });\n      return count;\n    };\n    var moveEndPoint$1 = function (rng, start) {\n      var container, offset, childNodes;\n      var prefix = start ? 'start' : 'end';\n      container = rng[prefix + 'Container'];\n      offset = rng[prefix + 'Offset'];\n      if (isElement$5(container) && container.nodeName === 'TR') {\n        childNodes = container.childNodes;\n        container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)];\n        if (container) {\n          offset = start ? 0 : container.childNodes.length;\n          rng['set' + (start ? 'Start' : 'End')](container, offset);\n        }\n      }\n    };\n    var normalizeTableCellSelection = function (rng) {\n      moveEndPoint$1(rng, true);\n      moveEndPoint$1(rng, false);\n      return rng;\n    };\n    var findSibling = function (node, offset) {\n      var sibling;\n      if (isElement$5(node)) {\n        node = getNode$1(node, offset);\n        if (isContentEditableFalse$9(node)) {\n          return node;\n        }\n      }\n      if (isCaretContainer$2(node)) {\n        if (isText$7(node) && isCaretContainerBlock$1(node)) {\n          node = node.parentNode;\n        }\n        sibling = node.previousSibling;\n        if (isContentEditableFalse$9(sibling)) {\n          return sibling;\n        }\n        sibling = node.nextSibling;\n        if (isContentEditableFalse$9(sibling)) {\n          return sibling;\n        }\n      }\n    };\n    var findAdjacentContentEditableFalseElm = function (rng) {\n      return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset);\n    };\n    var getOffsetBookmark = function (trim, normalized, selection) {\n      var element = selection.getNode();\n      var name = element ? element.nodeName : null;\n      var rng = selection.getRng();\n      if (isContentEditableFalse$9(element) || name === 'IMG') {\n        return {\n          name: name,\n          index: findIndex(selection.dom, name, element)\n        };\n      }\n      var sibling = findAdjacentContentEditableFalseElm(rng);\n      if (sibling) {\n        name = sibling.tagName;\n        return {\n          name: name,\n          index: findIndex(selection.dom, name, sibling)\n        };\n      }\n      return getLocation(trim, selection, normalized, rng);\n    };\n    var getCaretBookmark = function (selection) {\n      var rng = selection.getRng();\n      return {\n        start: create$6(selection.dom.getRoot(), CaretPosition.fromRangeStart(rng)),\n        end: create$6(selection.dom.getRoot(), CaretPosition.fromRangeEnd(rng))\n      };\n    };\n    var getRangeBookmark = function (selection) {\n      return { rng: selection.getRng() };\n    };\n    var createBookmarkSpan = function (dom, id, filled) {\n      var args = {\n        'data-mce-type': 'bookmark',\n        id: id,\n        'style': 'overflow:hidden;line-height:0px'\n      };\n      return filled ? dom.create('span', args, '&#xFEFF;') : dom.create('span', args);\n    };\n    var getPersistentBookmark = function (selection, filled) {\n      var dom = selection.dom;\n      var rng = selection.getRng();\n      var id = dom.uniqueId();\n      var collapsed = selection.isCollapsed();\n      var element = selection.getNode();\n      var name = element.nodeName;\n      if (name === 'IMG') {\n        return {\n          name: name,\n          index: findIndex(dom, name, element)\n        };\n      }\n      var rng2 = normalizeTableCellSelection(rng.cloneRange());\n      if (!collapsed) {\n        rng2.collapse(false);\n        var endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);\n        rangeInsertNode(dom, rng2, endBookmarkNode);\n      }\n      rng = normalizeTableCellSelection(rng);\n      rng.collapse(true);\n      var startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);\n      rangeInsertNode(dom, rng, startBookmarkNode);\n      selection.moveToBookmark({\n        id: id,\n        keep: true\n      });\n      return { id: id };\n    };\n    var getBookmark$2 = function (selection, type, normalized) {\n      if (type === 2) {\n        return getOffsetBookmark(trim$2, normalized, selection);\n      } else if (type === 3) {\n        return getCaretBookmark(selection);\n      } else if (type) {\n        return getRangeBookmark(selection);\n      } else {\n        return getPersistentBookmark(selection, false);\n      }\n    };\n    var getUndoBookmark = curry(getOffsetBookmark, identity, true);\n\n    var DOM$9 = DOMUtils.DOM;\n    var defaultPreviewStyles = 'font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow';\n    var getBodySetting = function (editor, name, defaultValue) {\n      var value = editor.getParam(name, defaultValue);\n      if (value.indexOf('=') !== -1) {\n        var bodyObj = editor.getParam(name, '', 'hash');\n        return get$9(bodyObj, editor.id).getOr(defaultValue);\n      } else {\n        return value;\n      }\n    };\n    var getIframeAttrs = function (editor) {\n      return editor.getParam('iframe_attrs', {});\n    };\n    var getDocType = function (editor) {\n      return editor.getParam('doctype', '<!DOCTYPE html>');\n    };\n    var getDocumentBaseUrl = function (editor) {\n      return editor.getParam('document_base_url', '');\n    };\n    var getBodyId = function (editor) {\n      return getBodySetting(editor, 'body_id', 'tinymce');\n    };\n    var getBodyClass = function (editor) {\n      return getBodySetting(editor, 'body_class', '');\n    };\n    var getContentSecurityPolicy = function (editor) {\n      return editor.getParam('content_security_policy', '');\n    };\n    var shouldPutBrInPre$1 = function (editor) {\n      return editor.getParam('br_in_pre', true);\n    };\n    var getForcedRootBlock = function (editor) {\n      if (editor.getParam('force_p_newlines', false)) {\n        return 'p';\n      }\n      var block = editor.getParam('forced_root_block', 'p');\n      if (block === false) {\n        return '';\n      } else if (block === true) {\n        return 'p';\n      } else {\n        return block;\n      }\n    };\n    var getForcedRootBlockAttrs = function (editor) {\n      return editor.getParam('forced_root_block_attrs', {});\n    };\n    var getBrNewLineSelector = function (editor) {\n      return editor.getParam('br_newline_selector', '.mce-toc h2,figcaption,caption');\n    };\n    var getNoNewLineSelector = function (editor) {\n      return editor.getParam('no_newline_selector', '');\n    };\n    var shouldKeepStyles = function (editor) {\n      return editor.getParam('keep_styles', true);\n    };\n    var shouldEndContainerOnEmptyBlock = function (editor) {\n      return editor.getParam('end_container_on_empty_block', false);\n    };\n    var getFontStyleValues = function (editor) {\n      return Tools.explode(editor.getParam('font_size_style_values', 'xx-small,x-small,small,medium,large,x-large,xx-large'));\n    };\n    var getFontSizeClasses = function (editor) {\n      return Tools.explode(editor.getParam('font_size_classes', ''));\n    };\n    var getImagesDataImgFilter = function (editor) {\n      return editor.getParam('images_dataimg_filter', always, 'function');\n    };\n    var isAutomaticUploadsEnabled = function (editor) {\n      return editor.getParam('automatic_uploads', true, 'boolean');\n    };\n    var shouldReuseFileName = function (editor) {\n      return editor.getParam('images_reuse_filename', false, 'boolean');\n    };\n    var shouldReplaceBlobUris = function (editor) {\n      return editor.getParam('images_replace_blob_uris', true, 'boolean');\n    };\n    var getIconPackName = function (editor) {\n      return editor.getParam('icons', '', 'string');\n    };\n    var getIconsUrl = function (editor) {\n      return editor.getParam('icons_url', '', 'string');\n    };\n    var getImageUploadUrl = function (editor) {\n      return editor.getParam('images_upload_url', '', 'string');\n    };\n    var getImageUploadBasePath = function (editor) {\n      return editor.getParam('images_upload_base_path', '', 'string');\n    };\n    var getImagesUploadCredentials = function (editor) {\n      return editor.getParam('images_upload_credentials', false, 'boolean');\n    };\n    var getImagesUploadHandler = function (editor) {\n      return editor.getParam('images_upload_handler', null, 'function');\n    };\n    var shouldUseContentCssCors = function (editor) {\n      return editor.getParam('content_css_cors', false, 'boolean');\n    };\n    var getReferrerPolicy = function (editor) {\n      return editor.getParam('referrer_policy', '', 'string');\n    };\n    var getLanguageCode = function (editor) {\n      return editor.getParam('language', 'en', 'string');\n    };\n    var getLanguageUrl = function (editor) {\n      return editor.getParam('language_url', '', 'string');\n    };\n    var shouldIndentUseMargin = function (editor) {\n      return editor.getParam('indent_use_margin', false);\n    };\n    var getIndentation = function (editor) {\n      return editor.getParam('indentation', '40px', 'string');\n    };\n    var getContentCss = function (editor) {\n      var contentCss = editor.getParam('content_css');\n      if (isString$1(contentCss)) {\n        return map$3(contentCss.split(','), trim$4);\n      } else if (isArray$1(contentCss)) {\n        return contentCss;\n      } else if (contentCss === false || editor.inline) {\n        return [];\n      } else {\n        return ['default'];\n      }\n    };\n    var getFontCss = function (editor) {\n      var fontCss = editor.getParam('font_css', []);\n      return isArray$1(fontCss) ? fontCss : map$3(fontCss.split(','), trim$4);\n    };\n    var getDirectionality = function (editor) {\n      return editor.getParam('directionality', I18n.isRtl() ? 'rtl' : undefined);\n    };\n    var getInlineBoundarySelector = function (editor) {\n      return editor.getParam('inline_boundaries_selector', 'a[href],code,.mce-annotation', 'string');\n    };\n    var getObjectResizing = function (editor) {\n      var selector = editor.getParam('object_resizing');\n      if (selector === false || Env.iOS) {\n        return false;\n      } else {\n        return isString$1(selector) ? selector : 'table,img,figure.image,div,video,iframe';\n      }\n    };\n    var getResizeImgProportional = function (editor) {\n      return editor.getParam('resize_img_proportional', true, 'boolean');\n    };\n    var getPlaceholder = function (editor) {\n      return editor.getParam('placeholder', DOM$9.getAttrib(editor.getElement(), 'placeholder'), 'string');\n    };\n    var getEventRoot = function (editor) {\n      return editor.getParam('event_root');\n    };\n    var getServiceMessage = function (editor) {\n      return editor.getParam('service_message');\n    };\n    var getTheme = function (editor) {\n      return editor.getParam('theme');\n    };\n    var shouldValidate = function (editor) {\n      return editor.getParam('validate');\n    };\n    var isInlineBoundariesEnabled = function (editor) {\n      return editor.getParam('inline_boundaries') !== false;\n    };\n    var getFormats = function (editor) {\n      return editor.getParam('formats');\n    };\n    var getPreviewStyles = function (editor) {\n      var style = editor.getParam('preview_styles', defaultPreviewStyles);\n      if (isString$1(style)) {\n        return style;\n      } else {\n        return '';\n      }\n    };\n    var canFormatEmptyLines = function (editor) {\n      return editor.getParam('format_empty_lines', false, 'boolean');\n    };\n    var getCustomUiSelector = function (editor) {\n      return editor.getParam('custom_ui_selector', '', 'string');\n    };\n    var getThemeUrl = function (editor) {\n      return editor.getParam('theme_url');\n    };\n    var isInline = function (editor) {\n      return editor.getParam('inline');\n    };\n    var hasHiddenInput = function (editor) {\n      return editor.getParam('hidden_input');\n    };\n    var shouldPatchSubmit = function (editor) {\n      return editor.getParam('submit_patch');\n    };\n    var isEncodingXml = function (editor) {\n      return editor.getParam('encoding') === 'xml';\n    };\n    var shouldAddFormSubmitTrigger = function (editor) {\n      return editor.getParam('add_form_submit_trigger');\n    };\n    var shouldAddUnloadTrigger = function (editor) {\n      return editor.getParam('add_unload_trigger');\n    };\n    var hasForcedRootBlock = function (editor) {\n      return getForcedRootBlock(editor) !== '';\n    };\n    var getCustomUndoRedoLevels = function (editor) {\n      return editor.getParam('custom_undo_redo_levels', 0, 'number');\n    };\n    var shouldDisableNodeChange = function (editor) {\n      return editor.getParam('disable_nodechange');\n    };\n    var isReadOnly$1 = function (editor) {\n      return editor.getParam('readonly');\n    };\n    var hasContentCssCors = function (editor) {\n      return editor.getParam('content_css_cors');\n    };\n    var getPlugins = function (editor) {\n      return editor.getParam('plugins', '', 'string');\n    };\n    var getExternalPlugins$1 = function (editor) {\n      return editor.getParam('external_plugins');\n    };\n    var shouldBlockUnsupportedDrop = function (editor) {\n      return editor.getParam('block_unsupported_drop', true, 'boolean');\n    };\n    var isVisualAidsEnabled = function (editor) {\n      return editor.getParam('visual', true, 'boolean');\n    };\n    var getVisualAidsTableClass = function (editor) {\n      return editor.getParam('visual_table_class', 'mce-item-table', 'string');\n    };\n    var getVisualAidsAnchorClass = function (editor) {\n      return editor.getParam('visual_anchor_class', 'mce-item-anchor', 'string');\n    };\n    var getIframeAriaText = function (editor) {\n      return editor.getParam('iframe_aria_text', 'Rich Text Area. Press ALT-0 for help.', 'string');\n    };\n\n    var isElement$2 = isElement$5;\n    var isText$2 = isText$7;\n    var removeNode$1 = function (node) {\n      var parentNode = node.parentNode;\n      if (parentNode) {\n        parentNode.removeChild(node);\n      }\n    };\n    var trimCount = function (text) {\n      var trimmedText = trim$2(text);\n      return {\n        count: text.length - trimmedText.length,\n        text: trimmedText\n      };\n    };\n    var deleteZwspChars = function (caretContainer) {\n      var idx;\n      while ((idx = caretContainer.data.lastIndexOf(ZWSP$1)) !== -1) {\n        caretContainer.deleteData(idx, 1);\n      }\n    };\n    var removeUnchanged = function (caretContainer, pos) {\n      remove$2(caretContainer);\n      return pos;\n    };\n    var removeTextAndReposition = function (caretContainer, pos) {\n      var before = trimCount(caretContainer.data.substr(0, pos.offset()));\n      var after = trimCount(caretContainer.data.substr(pos.offset()));\n      var text = before.text + after.text;\n      if (text.length > 0) {\n        deleteZwspChars(caretContainer);\n        return CaretPosition(caretContainer, pos.offset() - before.count);\n      } else {\n        return pos;\n      }\n    };\n    var removeElementAndReposition = function (caretContainer, pos) {\n      var parentNode = pos.container();\n      var newPosition = indexOf$2(from(parentNode.childNodes), caretContainer).map(function (index) {\n        return index < pos.offset() ? CaretPosition(parentNode, pos.offset() - 1) : pos;\n      }).getOr(pos);\n      remove$2(caretContainer);\n      return newPosition;\n    };\n    var removeTextCaretContainer = function (caretContainer, pos) {\n      return isText$2(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n    };\n    var removeElementCaretContainer = function (caretContainer, pos) {\n      return pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n    };\n    var removeAndReposition = function (container, pos) {\n      return CaretPosition.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);\n    };\n    var remove$2 = function (caretContainerNode) {\n      if (isElement$2(caretContainerNode) && isCaretContainer$2(caretContainerNode)) {\n        if (hasContent(caretContainerNode)) {\n          caretContainerNode.removeAttribute('data-mce-caret');\n        } else {\n          removeNode$1(caretContainerNode);\n        }\n      }\n      if (isText$2(caretContainerNode)) {\n        deleteZwspChars(caretContainerNode);\n        if (caretContainerNode.data.length === 0) {\n          removeNode$1(caretContainerNode);\n        }\n      }\n    };\n\n    var browser$2 = detect().browser;\n    var isContentEditableFalse$8 = isContentEditableFalse$b;\n    var isMedia$1 = isMedia$2;\n    var isTableCell$3 = isTableCell$5;\n    var inlineFakeCaretSelector = '*[contentEditable=false],video,audio,embed,object';\n    var getAbsoluteClientRect = function (root, element, before) {\n      var clientRect = collapse(element.getBoundingClientRect(), before);\n      var scrollX;\n      var scrollY;\n      if (root.tagName === 'BODY') {\n        var docElm = root.ownerDocument.documentElement;\n        scrollX = root.scrollLeft || docElm.scrollLeft;\n        scrollY = root.scrollTop || docElm.scrollTop;\n      } else {\n        var rootRect = root.getBoundingClientRect();\n        scrollX = root.scrollLeft - rootRect.left;\n        scrollY = root.scrollTop - rootRect.top;\n      }\n      clientRect.left += scrollX;\n      clientRect.right += scrollX;\n      clientRect.top += scrollY;\n      clientRect.bottom += scrollY;\n      clientRect.width = 1;\n      var margin = element.offsetWidth - element.clientWidth;\n      if (margin > 0) {\n        if (before) {\n          margin *= -1;\n        }\n        clientRect.left += margin;\n        clientRect.right += margin;\n      }\n      return clientRect;\n    };\n    var trimInlineCaretContainers = function (root) {\n      var fakeCaretTargetNodes = descendants(SugarElement.fromDom(root), inlineFakeCaretSelector);\n      for (var i = 0; i < fakeCaretTargetNodes.length; i++) {\n        var node = fakeCaretTargetNodes[i].dom;\n        var sibling = node.previousSibling;\n        if (endsWithCaretContainer$1(sibling)) {\n          var data = sibling.data;\n          if (data.length === 1) {\n            sibling.parentNode.removeChild(sibling);\n          } else {\n            sibling.deleteData(data.length - 1, 1);\n          }\n        }\n        sibling = node.nextSibling;\n        if (startsWithCaretContainer$1(sibling)) {\n          var data = sibling.data;\n          if (data.length === 1) {\n            sibling.parentNode.removeChild(sibling);\n          } else {\n            sibling.deleteData(0, 1);\n          }\n        }\n      }\n    };\n    var FakeCaret = function (editor, root, isBlock, hasFocus) {\n      var lastVisualCaret = value();\n      var cursorInterval;\n      var caretContainerNode;\n      var rootBlock = getForcedRootBlock(editor);\n      var caretBlock = rootBlock.length > 0 ? rootBlock : 'p';\n      var show = function (before, element) {\n        var rng;\n        hide();\n        if (isTableCell$3(element)) {\n          return null;\n        }\n        if (isBlock(element)) {\n          caretContainerNode = insertBlock$1(caretBlock, element, before);\n          var clientRect = getAbsoluteClientRect(root, element, before);\n          DomQuery(caretContainerNode).css('top', clientRect.top);\n          var caret = DomQuery('<div class=\"mce-visual-caret\" data-mce-bogus=\"all\"></div>').css(__assign({}, clientRect)).appendTo(root)[0];\n          lastVisualCaret.set({\n            caret: caret,\n            element: element,\n            before: before\n          });\n          if (before) {\n            DomQuery(caret).addClass('mce-visual-caret-before');\n          }\n          startBlink();\n          rng = element.ownerDocument.createRange();\n          rng.setStart(caretContainerNode, 0);\n          rng.setEnd(caretContainerNode, 0);\n        } else {\n          caretContainerNode = insertInline$1(element, before);\n          rng = element.ownerDocument.createRange();\n          if (isInlineFakeCaretTarget(caretContainerNode.nextSibling)) {\n            rng.setStart(caretContainerNode, 0);\n            rng.setEnd(caretContainerNode, 0);\n          } else {\n            rng.setStart(caretContainerNode, 1);\n            rng.setEnd(caretContainerNode, 1);\n          }\n          return rng;\n        }\n        return rng;\n      };\n      var hide = function () {\n        trimInlineCaretContainers(root);\n        if (caretContainerNode) {\n          remove$2(caretContainerNode);\n          caretContainerNode = null;\n        }\n        lastVisualCaret.on(function (caretState) {\n          DomQuery(caretState.caret).remove();\n          lastVisualCaret.clear();\n        });\n        if (cursorInterval) {\n          Delay.clearInterval(cursorInterval);\n          cursorInterval = undefined;\n        }\n      };\n      var startBlink = function () {\n        cursorInterval = Delay.setInterval(function () {\n          if (hasFocus()) {\n            DomQuery('div.mce-visual-caret', root).toggleClass('mce-visual-caret-hidden');\n          } else {\n            DomQuery('div.mce-visual-caret', root).addClass('mce-visual-caret-hidden');\n          }\n        }, 500);\n      };\n      var reposition = function () {\n        lastVisualCaret.on(function (caretState) {\n          var clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before);\n          DomQuery(caretState.caret).css(__assign({}, clientRect));\n        });\n      };\n      var destroy = function () {\n        return Delay.clearInterval(cursorInterval);\n      };\n      var getCss = function () {\n        return '.mce-visual-caret {' + 'position: absolute;' + 'background-color: black;' + 'background-color: currentcolor;' + '}' + '.mce-visual-caret-hidden {' + 'display: none;' + '}' + '*[data-mce-caret] {' + 'position: absolute;' + 'left: -1000px;' + 'right: auto;' + 'top: 0;' + 'margin: 0;' + 'padding: 0;' + '}';\n      };\n      return {\n        show: show,\n        hide: hide,\n        getCss: getCss,\n        reposition: reposition,\n        destroy: destroy\n      };\n    };\n    var isFakeCaretTableBrowser = function () {\n      return browser$2.isIE() || browser$2.isEdge() || browser$2.isFirefox();\n    };\n    var isInlineFakeCaretTarget = function (node) {\n      return isContentEditableFalse$8(node) || isMedia$1(node);\n    };\n    var isFakeCaretTarget = function (node) {\n      return isInlineFakeCaretTarget(node) || isTable$3(node) && isFakeCaretTableBrowser();\n    };\n\n    var isContentEditableFalse$7 = isContentEditableFalse$b;\n    var isMedia = isMedia$2;\n    var isBlockLike = matchStyleValues('display', 'block table table-cell table-caption list-item');\n    var isCaretContainer = isCaretContainer$2;\n    var isCaretContainerBlock = isCaretContainerBlock$1;\n    var isElement$1 = isElement$5;\n    var isCaretCandidate$1 = isCaretCandidate$3;\n    var isForwards = function (direction) {\n      return direction > 0;\n    };\n    var isBackwards = function (direction) {\n      return direction < 0;\n    };\n    var skipCaretContainers = function (walk, shallow) {\n      var node;\n      while (node = walk(shallow)) {\n        if (!isCaretContainerBlock(node)) {\n          return node;\n        }\n      }\n      return null;\n    };\n    var findNode$1 = function (node, direction, predicateFn, rootNode, shallow) {\n      var walker = new DomTreeWalker(node, rootNode);\n      var isCefOrCaretContainer = isContentEditableFalse$7(node) || isCaretContainerBlock(node);\n      if (isBackwards(direction)) {\n        if (isCefOrCaretContainer) {\n          node = skipCaretContainers(walker.prev.bind(walker), true);\n          if (predicateFn(node)) {\n            return node;\n          }\n        }\n        while (node = skipCaretContainers(walker.prev.bind(walker), shallow)) {\n          if (predicateFn(node)) {\n            return node;\n          }\n        }\n      }\n      if (isForwards(direction)) {\n        if (isCefOrCaretContainer) {\n          node = skipCaretContainers(walker.next.bind(walker), true);\n          if (predicateFn(node)) {\n            return node;\n          }\n        }\n        while (node = skipCaretContainers(walker.next.bind(walker), shallow)) {\n          if (predicateFn(node)) {\n            return node;\n          }\n        }\n      }\n      return null;\n    };\n    var getParentBlock$2 = function (node, rootNode) {\n      while (node && node !== rootNode) {\n        if (isBlockLike(node)) {\n          return node;\n        }\n        node = node.parentNode;\n      }\n      return null;\n    };\n    var isInSameBlock = function (caretPosition1, caretPosition2, rootNode) {\n      return getParentBlock$2(caretPosition1.container(), rootNode) === getParentBlock$2(caretPosition2.container(), rootNode);\n    };\n    var getChildNodeAtRelativeOffset = function (relativeOffset, caretPosition) {\n      if (!caretPosition) {\n        return null;\n      }\n      var container = caretPosition.container();\n      var offset = caretPosition.offset();\n      if (!isElement$1(container)) {\n        return null;\n      }\n      return container.childNodes[offset + relativeOffset];\n    };\n    var beforeAfter = function (before, node) {\n      var range = node.ownerDocument.createRange();\n      if (before) {\n        range.setStartBefore(node);\n        range.setEndBefore(node);\n      } else {\n        range.setStartAfter(node);\n        range.setEndAfter(node);\n      }\n      return range;\n    };\n    var isNodesInSameBlock = function (root, node1, node2) {\n      return getParentBlock$2(node1, root) === getParentBlock$2(node2, root);\n    };\n    var lean = function (left, root, node) {\n      var siblingName = left ? 'previousSibling' : 'nextSibling';\n      while (node && node !== root) {\n        var sibling = node[siblingName];\n        if (isCaretContainer(sibling)) {\n          sibling = sibling[siblingName];\n        }\n        if (isContentEditableFalse$7(sibling) || isMedia(sibling)) {\n          if (isNodesInSameBlock(root, sibling, node)) {\n            return sibling;\n          }\n          break;\n        }\n        if (isCaretCandidate$1(sibling)) {\n          break;\n        }\n        node = node.parentNode;\n      }\n      return null;\n    };\n    var before$2 = curry(beforeAfter, true);\n    var after$2 = curry(beforeAfter, false);\n    var normalizeRange = function (direction, root, range) {\n      var node;\n      var leanLeft = curry(lean, true, root);\n      var leanRight = curry(lean, false, root);\n      var container = range.startContainer;\n      var offset = range.startOffset;\n      if (isCaretContainerBlock$1(container)) {\n        if (!isElement$1(container)) {\n          container = container.parentNode;\n        }\n        var location_1 = container.getAttribute('data-mce-caret');\n        if (location_1 === 'before') {\n          node = container.nextSibling;\n          if (isFakeCaretTarget(node)) {\n            return before$2(node);\n          }\n        }\n        if (location_1 === 'after') {\n          node = container.previousSibling;\n          if (isFakeCaretTarget(node)) {\n            return after$2(node);\n          }\n        }\n      }\n      if (!range.collapsed) {\n        return range;\n      }\n      if (isText$7(container)) {\n        if (isCaretContainer(container)) {\n          if (direction === 1) {\n            node = leanRight(container);\n            if (node) {\n              return before$2(node);\n            }\n            node = leanLeft(container);\n            if (node) {\n              return after$2(node);\n            }\n          }\n          if (direction === -1) {\n            node = leanLeft(container);\n            if (node) {\n              return after$2(node);\n            }\n            node = leanRight(container);\n            if (node) {\n              return before$2(node);\n            }\n          }\n          return range;\n        }\n        if (endsWithCaretContainer$1(container) && offset >= container.data.length - 1) {\n          if (direction === 1) {\n            node = leanRight(container);\n            if (node) {\n              return before$2(node);\n            }\n          }\n          return range;\n        }\n        if (startsWithCaretContainer$1(container) && offset <= 1) {\n          if (direction === -1) {\n            node = leanLeft(container);\n            if (node) {\n              return after$2(node);\n            }\n          }\n          return range;\n        }\n        if (offset === container.data.length) {\n          node = leanRight(container);\n          if (node) {\n            return before$2(node);\n          }\n          return range;\n        }\n        if (offset === 0) {\n          node = leanLeft(container);\n          if (node) {\n            return after$2(node);\n          }\n          return range;\n        }\n      }\n      return range;\n    };\n    var getRelativeCefElm = function (forward, caretPosition) {\n      return Optional.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition)).filter(isContentEditableFalse$7);\n    };\n    var getNormalizedRangeEndPoint = function (direction, root, range) {\n      var normalizedRange = normalizeRange(direction, root, range);\n      if (direction === -1) {\n        return CaretPosition.fromRangeStart(normalizedRange);\n      }\n      return CaretPosition.fromRangeEnd(normalizedRange);\n    };\n    var getElementFromPosition = function (pos) {\n      return Optional.from(pos.getNode()).map(SugarElement.fromDom);\n    };\n    var getElementFromPrevPosition = function (pos) {\n      return Optional.from(pos.getNode(true)).map(SugarElement.fromDom);\n    };\n    var getVisualCaretPosition = function (walkFn, caretPosition) {\n      while (caretPosition = walkFn(caretPosition)) {\n        if (caretPosition.isVisible()) {\n          return caretPosition;\n        }\n      }\n      return caretPosition;\n    };\n    var isMoveInsideSameBlock = function (from, to) {\n      var inSameBlock = isInSameBlock(from, to);\n      if (!inSameBlock && isBr$5(from.getNode())) {\n        return true;\n      }\n      return inSameBlock;\n    };\n\n    var HDirection;\n    (function (HDirection) {\n      HDirection[HDirection['Backwards'] = -1] = 'Backwards';\n      HDirection[HDirection['Forwards'] = 1] = 'Forwards';\n    }(HDirection || (HDirection = {})));\n    var isContentEditableFalse$6 = isContentEditableFalse$b;\n    var isText$1 = isText$7;\n    var isElement = isElement$5;\n    var isBr$1 = isBr$5;\n    var isCaretCandidate = isCaretCandidate$3;\n    var isAtomic = isAtomic$1;\n    var isEditableCaretCandidate = isEditableCaretCandidate$1;\n    var getParents$3 = function (node, root) {\n      var parents = [];\n      while (node && node !== root) {\n        parents.push(node);\n        node = node.parentNode;\n      }\n      return parents;\n    };\n    var nodeAtIndex = function (container, offset) {\n      if (container.hasChildNodes() && offset < container.childNodes.length) {\n        return container.childNodes[offset];\n      }\n      return null;\n    };\n    var getCaretCandidatePosition = function (direction, node) {\n      if (isForwards(direction)) {\n        if (isCaretCandidate(node.previousSibling) && !isText$1(node.previousSibling)) {\n          return CaretPosition.before(node);\n        }\n        if (isText$1(node)) {\n          return CaretPosition(node, 0);\n        }\n      }\n      if (isBackwards(direction)) {\n        if (isCaretCandidate(node.nextSibling) && !isText$1(node.nextSibling)) {\n          return CaretPosition.after(node);\n        }\n        if (isText$1(node)) {\n          return CaretPosition(node, node.data.length);\n        }\n      }\n      if (isBackwards(direction)) {\n        if (isBr$1(node)) {\n          return CaretPosition.before(node);\n        }\n        return CaretPosition.after(node);\n      }\n      return CaretPosition.before(node);\n    };\n    var moveForwardFromBr = function (root, nextNode) {\n      var nextSibling = nextNode.nextSibling;\n      if (nextSibling && isCaretCandidate(nextSibling)) {\n        if (isText$1(nextSibling)) {\n          return CaretPosition(nextSibling, 0);\n        } else {\n          return CaretPosition.before(nextSibling);\n        }\n      } else {\n        return findCaretPosition$1(HDirection.Forwards, CaretPosition.after(nextNode), root);\n      }\n    };\n    var findCaretPosition$1 = function (direction, startPos, root) {\n      var node;\n      var nextNode;\n      var innerNode;\n      var caretPosition;\n      if (!isElement(root) || !startPos) {\n        return null;\n      }\n      if (startPos.isEqual(CaretPosition.after(root)) && root.lastChild) {\n        caretPosition = CaretPosition.after(root.lastChild);\n        if (isBackwards(direction) && isCaretCandidate(root.lastChild) && isElement(root.lastChild)) {\n          return isBr$1(root.lastChild) ? CaretPosition.before(root.lastChild) : caretPosition;\n        }\n      } else {\n        caretPosition = startPos;\n      }\n      var container = caretPosition.container();\n      var offset = caretPosition.offset();\n      if (isText$1(container)) {\n        if (isBackwards(direction) && offset > 0) {\n          return CaretPosition(container, --offset);\n        }\n        if (isForwards(direction) && offset < container.length) {\n          return CaretPosition(container, ++offset);\n        }\n        node = container;\n      } else {\n        if (isBackwards(direction) && offset > 0) {\n          nextNode = nodeAtIndex(container, offset - 1);\n          if (isCaretCandidate(nextNode)) {\n            if (!isAtomic(nextNode)) {\n              innerNode = findNode$1(nextNode, direction, isEditableCaretCandidate, nextNode);\n              if (innerNode) {\n                if (isText$1(innerNode)) {\n                  return CaretPosition(innerNode, innerNode.data.length);\n                }\n                return CaretPosition.after(innerNode);\n              }\n            }\n            if (isText$1(nextNode)) {\n              return CaretPosition(nextNode, nextNode.data.length);\n            }\n            return CaretPosition.before(nextNode);\n          }\n        }\n        if (isForwards(direction) && offset < container.childNodes.length) {\n          nextNode = nodeAtIndex(container, offset);\n          if (isCaretCandidate(nextNode)) {\n            if (isBr$1(nextNode)) {\n              return moveForwardFromBr(root, nextNode);\n            }\n            if (!isAtomic(nextNode)) {\n              innerNode = findNode$1(nextNode, direction, isEditableCaretCandidate, nextNode);\n              if (innerNode) {\n                if (isText$1(innerNode)) {\n                  return CaretPosition(innerNode, 0);\n                }\n                return CaretPosition.before(innerNode);\n              }\n            }\n            if (isText$1(nextNode)) {\n              return CaretPosition(nextNode, 0);\n            }\n            return CaretPosition.after(nextNode);\n          }\n        }\n        node = nextNode ? nextNode : caretPosition.getNode();\n      }\n      if (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart()) {\n        node = findNode$1(node, direction, always, root, true);\n        if (isEditableCaretCandidate(node, root)) {\n          return getCaretCandidatePosition(direction, node);\n        }\n      }\n      nextNode = findNode$1(node, direction, isEditableCaretCandidate, root);\n      var rootContentEditableFalseElm = last$1(filter$4(getParents$3(container, root), isContentEditableFalse$6));\n      if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {\n        if (isForwards(direction)) {\n          caretPosition = CaretPosition.after(rootContentEditableFalseElm);\n        } else {\n          caretPosition = CaretPosition.before(rootContentEditableFalseElm);\n        }\n        return caretPosition;\n      }\n      if (nextNode) {\n        return getCaretCandidatePosition(direction, nextNode);\n      }\n      return null;\n    };\n    var CaretWalker = function (root) {\n      return {\n        next: function (caretPosition) {\n          return findCaretPosition$1(HDirection.Forwards, caretPosition, root);\n        },\n        prev: function (caretPosition) {\n          return findCaretPosition$1(HDirection.Backwards, caretPosition, root);\n        }\n      };\n    };\n\n    var walkToPositionIn = function (forward, root, start) {\n      var position = forward ? CaretPosition.before(start) : CaretPosition.after(start);\n      return fromPosition(forward, root, position);\n    };\n    var afterElement = function (node) {\n      return isBr$5(node) ? CaretPosition.before(node) : CaretPosition.after(node);\n    };\n    var isBeforeOrStart = function (position) {\n      if (CaretPosition.isTextPosition(position)) {\n        return position.offset() === 0;\n      } else {\n        return isCaretCandidate$3(position.getNode());\n      }\n    };\n    var isAfterOrEnd = function (position) {\n      if (CaretPosition.isTextPosition(position)) {\n        var container = position.container();\n        return position.offset() === container.data.length;\n      } else {\n        return isCaretCandidate$3(position.getNode(true));\n      }\n    };\n    var isBeforeAfterSameElement = function (from, to) {\n      return !CaretPosition.isTextPosition(from) && !CaretPosition.isTextPosition(to) && from.getNode() === to.getNode(true);\n    };\n    var isAtBr = function (position) {\n      return !CaretPosition.isTextPosition(position) && isBr$5(position.getNode());\n    };\n    var shouldSkipPosition = function (forward, from, to) {\n      if (forward) {\n        return !isBeforeAfterSameElement(from, to) && !isAtBr(from) && isAfterOrEnd(from) && isBeforeOrStart(to);\n      } else {\n        return !isBeforeAfterSameElement(to, from) && isBeforeOrStart(from) && isAfterOrEnd(to);\n      }\n    };\n    var fromPosition = function (forward, root, pos) {\n      var walker = CaretWalker(root);\n      return Optional.from(forward ? walker.next(pos) : walker.prev(pos));\n    };\n    var navigate = function (forward, root, from) {\n      return fromPosition(forward, root, from).bind(function (to) {\n        if (isInSameBlock(from, to, root) && shouldSkipPosition(forward, from, to)) {\n          return fromPosition(forward, root, to);\n        } else {\n          return Optional.some(to);\n        }\n      });\n    };\n    var navigateIgnore = function (forward, root, from, ignoreFilter) {\n      return navigate(forward, root, from).bind(function (pos) {\n        return ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Optional.some(pos);\n      });\n    };\n    var positionIn = function (forward, element) {\n      var startNode = forward ? element.firstChild : element.lastChild;\n      if (isText$7(startNode)) {\n        return Optional.some(CaretPosition(startNode, forward ? 0 : startNode.data.length));\n      } else if (startNode) {\n        if (isCaretCandidate$3(startNode)) {\n          return Optional.some(forward ? CaretPosition.before(startNode) : afterElement(startNode));\n        } else {\n          return walkToPositionIn(forward, element, startNode);\n        }\n      } else {\n        return Optional.none();\n      }\n    };\n    var nextPosition = curry(fromPosition, true);\n    var prevPosition = curry(fromPosition, false);\n    var firstPositionIn = curry(positionIn, true);\n    var lastPositionIn = curry(positionIn, false);\n\n    var CARET_ID$1 = '_mce_caret';\n    var isCaretNode = function (node) {\n      return isElement$5(node) && node.id === CARET_ID$1;\n    };\n    var getParentCaretContainer = function (body, node) {\n      while (node && node !== body) {\n        if (node.id === CARET_ID$1) {\n          return node;\n        }\n        node = node.parentNode;\n      }\n      return null;\n    };\n\n    var isStringPathBookmark = function (bookmark) {\n      return isString$1(bookmark.start);\n    };\n    var isRangeBookmark = function (bookmark) {\n      return has$2(bookmark, 'rng');\n    };\n    var isIdBookmark = function (bookmark) {\n      return has$2(bookmark, 'id');\n    };\n    var isIndexBookmark = function (bookmark) {\n      return has$2(bookmark, 'name');\n    };\n    var isPathBookmark = function (bookmark) {\n      return Tools.isArray(bookmark.start);\n    };\n\n    var addBogus = function (dom, node) {\n      if (isElement$5(node) && dom.isBlock(node) && !node.innerHTML && !Env.ie) {\n        node.innerHTML = '<br data-mce-bogus=\"1\" />';\n      }\n      return node;\n    };\n    var resolveCaretPositionBookmark = function (dom, bookmark) {\n      var pos;\n      var rng = dom.createRng();\n      pos = resolve$2(dom.getRoot(), bookmark.start);\n      rng.setStart(pos.container(), pos.offset());\n      pos = resolve$2(dom.getRoot(), bookmark.end);\n      rng.setEnd(pos.container(), pos.offset());\n      return rng;\n    };\n    var insertZwsp = function (node, rng) {\n      var textNode = node.ownerDocument.createTextNode(ZWSP$1);\n      node.appendChild(textNode);\n      rng.setStart(textNode, 0);\n      rng.setEnd(textNode, 0);\n    };\n    var isEmpty$1 = function (node) {\n      return node.hasChildNodes() === false;\n    };\n    var tryFindRangePosition = function (node, rng) {\n      return lastPositionIn(node).fold(never, function (pos) {\n        rng.setStart(pos.container(), pos.offset());\n        rng.setEnd(pos.container(), pos.offset());\n        return true;\n      });\n    };\n    var padEmptyCaretContainer = function (root, node, rng) {\n      if (isEmpty$1(node) && getParentCaretContainer(root, node)) {\n        insertZwsp(node, rng);\n        return true;\n      } else {\n        return false;\n      }\n    };\n    var setEndPoint = function (dom, start, bookmark, rng) {\n      var point = bookmark[start ? 'start' : 'end'];\n      var i, node, offset, children;\n      var root = dom.getRoot();\n      if (point) {\n        offset = point[0];\n        for (node = root, i = point.length - 1; i >= 1; i--) {\n          children = node.childNodes;\n          if (padEmptyCaretContainer(root, node, rng)) {\n            return true;\n          }\n          if (point[i] > children.length - 1) {\n            if (padEmptyCaretContainer(root, node, rng)) {\n              return true;\n            }\n            return tryFindRangePosition(node, rng);\n          }\n          node = children[point[i]];\n        }\n        if (node.nodeType === 3) {\n          offset = Math.min(point[0], node.nodeValue.length);\n        }\n        if (node.nodeType === 1) {\n          offset = Math.min(point[0], node.childNodes.length);\n        }\n        if (start) {\n          rng.setStart(node, offset);\n        } else {\n          rng.setEnd(node, offset);\n        }\n      }\n      return true;\n    };\n    var isValidTextNode = function (node) {\n      return isText$7(node) && node.data.length > 0;\n    };\n    var restoreEndPoint = function (dom, suffix, bookmark) {\n      var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev;\n      var keep = bookmark.keep;\n      var container, offset;\n      if (marker) {\n        node = marker.parentNode;\n        if (suffix === 'start') {\n          if (!keep) {\n            idx = dom.nodeIndex(marker);\n          } else {\n            if (marker.hasChildNodes()) {\n              node = marker.firstChild;\n              idx = 1;\n            } else if (isValidTextNode(marker.nextSibling)) {\n              node = marker.nextSibling;\n              idx = 0;\n            } else if (isValidTextNode(marker.previousSibling)) {\n              node = marker.previousSibling;\n              idx = marker.previousSibling.data.length;\n            } else {\n              node = marker.parentNode;\n              idx = dom.nodeIndex(marker) + 1;\n            }\n          }\n          container = node;\n          offset = idx;\n        } else {\n          if (!keep) {\n            idx = dom.nodeIndex(marker);\n          } else {\n            if (marker.hasChildNodes()) {\n              node = marker.firstChild;\n              idx = 1;\n            } else if (isValidTextNode(marker.previousSibling)) {\n              node = marker.previousSibling;\n              idx = marker.previousSibling.data.length;\n            } else {\n              node = marker.parentNode;\n              idx = dom.nodeIndex(marker);\n            }\n          }\n          container = node;\n          offset = idx;\n        }\n        if (!keep) {\n          prev = marker.previousSibling;\n          next = marker.nextSibling;\n          Tools.each(Tools.grep(marker.childNodes), function (node) {\n            if (isText$7(node)) {\n              node.nodeValue = node.nodeValue.replace(/\\uFEFF/g, '');\n            }\n          });\n          while (marker = dom.get(bookmark.id + '_' + suffix)) {\n            dom.remove(marker, true);\n          }\n          if (prev && next && prev.nodeType === next.nodeType && isText$7(prev) && !Env.opera) {\n            idx = prev.nodeValue.length;\n            prev.appendData(next.nodeValue);\n            dom.remove(next);\n            container = prev;\n            offset = idx;\n          }\n        }\n        return Optional.some(CaretPosition(container, offset));\n      } else {\n        return Optional.none();\n      }\n    };\n    var resolvePaths = function (dom, bookmark) {\n      var rng = dom.createRng();\n      if (setEndPoint(dom, true, bookmark, rng) && setEndPoint(dom, false, bookmark, rng)) {\n        return Optional.some(rng);\n      } else {\n        return Optional.none();\n      }\n    };\n    var resolveId = function (dom, bookmark) {\n      var startPos = restoreEndPoint(dom, 'start', bookmark);\n      var endPos = restoreEndPoint(dom, 'end', bookmark);\n      return lift2(startPos, endPos.or(startPos), function (spos, epos) {\n        var rng = dom.createRng();\n        rng.setStart(addBogus(dom, spos.container()), spos.offset());\n        rng.setEnd(addBogus(dom, epos.container()), epos.offset());\n        return rng;\n      });\n    };\n    var resolveIndex = function (dom, bookmark) {\n      return Optional.from(dom.select(bookmark.name)[bookmark.index]).map(function (elm) {\n        var rng = dom.createRng();\n        rng.selectNode(elm);\n        return rng;\n      });\n    };\n    var resolve$1 = function (selection, bookmark) {\n      var dom = selection.dom;\n      if (bookmark) {\n        if (isPathBookmark(bookmark)) {\n          return resolvePaths(dom, bookmark);\n        } else if (isStringPathBookmark(bookmark)) {\n          return Optional.some(resolveCaretPositionBookmark(dom, bookmark));\n        } else if (isIdBookmark(bookmark)) {\n          return resolveId(dom, bookmark);\n        } else if (isIndexBookmark(bookmark)) {\n          return resolveIndex(dom, bookmark);\n        } else if (isRangeBookmark(bookmark)) {\n          return Optional.some(bookmark.rng);\n        }\n      }\n      return Optional.none();\n    };\n\n    var getBookmark$1 = function (selection, type, normalized) {\n      return getBookmark$2(selection, type, normalized);\n    };\n    var moveToBookmark = function (selection, bookmark) {\n      resolve$1(selection, bookmark).each(function (rng) {\n        selection.setRng(rng);\n      });\n    };\n    var isBookmarkNode$1 = function (node) {\n      return isElement$5(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n    };\n\n    var is = function (expected) {\n      return function (actual) {\n        return expected === actual;\n      };\n    };\n    var isNbsp = is(nbsp);\n    var isWhiteSpace = function (chr) {\n      return chr !== '' && ' \\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n    };\n    var isContent = function (chr) {\n      return !isWhiteSpace(chr) && !isNbsp(chr);\n    };\n\n    var isNode = function (node) {\n      return !!node.nodeType;\n    };\n    var isInlineBlock = function (node) {\n      return node && /^(IMG)$/.test(node.nodeName);\n    };\n    var moveStart = function (dom, selection, rng) {\n      var offset = rng.startOffset;\n      var container = rng.startContainer;\n      if (container === rng.endContainer) {\n        if (isInlineBlock(container.childNodes[offset])) {\n          return;\n        }\n      }\n      if (isElement$5(container)) {\n        var nodes = container.childNodes;\n        var walker = void 0;\n        if (offset < nodes.length) {\n          container = nodes[offset];\n          walker = new DomTreeWalker(container, dom.getParent(container, dom.isBlock));\n        } else {\n          container = nodes[nodes.length - 1];\n          walker = new DomTreeWalker(container, dom.getParent(container, dom.isBlock));\n          walker.next(true);\n        }\n        for (var node = walker.current(); node; node = walker.next()) {\n          if (isText$7(node) && !isWhiteSpaceNode$1(node)) {\n            rng.setStart(node, 0);\n            selection.setRng(rng);\n            return;\n          }\n        }\n      }\n    };\n    var getNonWhiteSpaceSibling = function (node, next, inc) {\n      if (node) {\n        var nextName = next ? 'nextSibling' : 'previousSibling';\n        for (node = inc ? node : node[nextName]; node; node = node[nextName]) {\n          if (isElement$5(node) || !isWhiteSpaceNode$1(node)) {\n            return node;\n          }\n        }\n      }\n    };\n    var isTextBlock$1 = function (editor, name) {\n      if (isNode(name)) {\n        name = name.nodeName;\n      }\n      return !!editor.schema.getTextBlockElements()[name.toLowerCase()];\n    };\n    var isValid = function (ed, parent, child) {\n      return ed.schema.isValidChild(parent, child);\n    };\n    var isWhiteSpaceNode$1 = function (node, allowSpaces) {\n      if (allowSpaces === void 0) {\n        allowSpaces = false;\n      }\n      if (isNonNullable(node) && isText$7(node)) {\n        var data = allowSpaces ? node.data.replace(/ /g, '\\xA0') : node.data;\n        return isWhitespaceText(data);\n      } else {\n        return false;\n      }\n    };\n    var isEmptyTextNode$1 = function (node) {\n      return isNonNullable(node) && isText$7(node) && node.length === 0;\n    };\n    var replaceVars = function (value, vars) {\n      if (isFunction(value)) {\n        value = value(vars);\n      } else if (isNonNullable(vars)) {\n        value = value.replace(/%(\\w+)/g, function (str, name) {\n          return vars[name] || str;\n        });\n      }\n      return value;\n    };\n    var isEq$5 = function (str1, str2) {\n      str1 = str1 || '';\n      str2 = str2 || '';\n      str1 = '' + (str1.nodeName || str1);\n      str2 = '' + (str2.nodeName || str2);\n      return str1.toLowerCase() === str2.toLowerCase();\n    };\n    var normalizeStyleValue = function (dom, value, name) {\n      if (name === 'color' || name === 'backgroundColor') {\n        value = dom.toHex(value);\n      }\n      if (name === 'fontWeight' && value === 700) {\n        value = 'bold';\n      }\n      if (name === 'fontFamily') {\n        value = value.replace(/[\\'\\\"]/g, '').replace(/,\\s+/g, ',');\n      }\n      return '' + value;\n    };\n    var getStyle = function (dom, node, name) {\n      return normalizeStyleValue(dom, dom.getStyle(node, name), name);\n    };\n    var getTextDecoration = function (dom, node) {\n      var decoration;\n      dom.getParent(node, function (n) {\n        decoration = dom.getStyle(n, 'text-decoration');\n        return decoration && decoration !== 'none';\n      });\n      return decoration;\n    };\n    var getParents$2 = function (dom, node, selector) {\n      return dom.getParents(node, selector, dom.getRoot());\n    };\n    var isVariableFormatName = function (editor, formatName) {\n      var hasVariableValues = function (format) {\n        var isVariableValue = function (val) {\n          return val.length > 1 && val.charAt(0) === '%';\n        };\n        return exists([\n          'styles',\n          'attributes'\n        ], function (key) {\n          return get$9(format, key).exists(function (field) {\n            var fieldValues = isArray$1(field) ? field : values(field);\n            return exists(fieldValues, isVariableValue);\n          });\n        });\n      };\n      return exists(editor.formatter.get(formatName), hasVariableValues);\n    };\n    var areSimilarFormats = function (editor, formatName, otherFormatName) {\n      var validKeys = [\n        'inline',\n        'block',\n        'selector',\n        'attributes',\n        'styles',\n        'classes'\n      ];\n      var filterObj = function (format) {\n        return filter$3(format, function (_, key) {\n          return exists(validKeys, function (validKey) {\n            return validKey === key;\n          });\n        });\n      };\n      return exists(editor.formatter.get(formatName), function (fmt1) {\n        var filteredFmt1 = filterObj(fmt1);\n        return exists(editor.formatter.get(otherFormatName), function (fmt2) {\n          var filteredFmt2 = filterObj(fmt2);\n          return equal$1(filteredFmt1, filteredFmt2);\n        });\n      });\n    };\n    var isBlockFormat = function (format) {\n      return hasNonNullableKey(format, 'block');\n    };\n    var isSelectorFormat = function (format) {\n      return hasNonNullableKey(format, 'selector');\n    };\n    var isInlineFormat = function (format) {\n      return hasNonNullableKey(format, 'inline');\n    };\n    var isMixedFormat = function (format) {\n      return isSelectorFormat(format) && isInlineFormat(format) && is$1(get$9(format, 'mixed'), true);\n    };\n    var shouldExpandToSelector = function (format) {\n      return isSelectorFormat(format) && format.expand !== false && !isInlineFormat(format);\n    };\n\n    var isBookmarkNode = isBookmarkNode$1;\n    var getParents$1 = getParents$2;\n    var isWhiteSpaceNode = isWhiteSpaceNode$1;\n    var isTextBlock = isTextBlock$1;\n    var isBogusBr = function (node) {\n      return isBr$5(node) && node.getAttribute('data-mce-bogus') && !node.nextSibling;\n    };\n    var findParentContentEditable = function (dom, node) {\n      var parent = node;\n      while (parent) {\n        if (isElement$5(parent) && dom.getContentEditable(parent)) {\n          return dom.getContentEditable(parent) === 'false' ? parent : node;\n        }\n        parent = parent.parentNode;\n      }\n      return node;\n    };\n    var walkText = function (start, node, offset, predicate) {\n      var str = node.data;\n      for (var i = offset; start ? i >= 0 : i < str.length; start ? i-- : i++) {\n        if (predicate(str.charAt(i))) {\n          return start ? i + 1 : i;\n        }\n      }\n      return -1;\n    };\n    var findSpace = function (start, node, offset) {\n      return walkText(start, node, offset, function (c) {\n        return isNbsp(c) || isWhiteSpace(c);\n      });\n    };\n    var findContent = function (start, node, offset) {\n      return walkText(start, node, offset, isContent);\n    };\n    var findWordEndPoint = function (dom, body, container, offset, start, includeTrailingSpaces) {\n      var lastTextNode;\n      var rootNode = dom.getParent(container, dom.isBlock) || body;\n      var walk = function (container, offset, pred) {\n        var textSeeker = TextSeeker(dom);\n        var walker = start ? textSeeker.backwards : textSeeker.forwards;\n        return Optional.from(walker(container, offset, function (text, textOffset) {\n          if (isBookmarkNode(text.parentNode)) {\n            return -1;\n          } else {\n            lastTextNode = text;\n            return pred(start, text, textOffset);\n          }\n        }, rootNode));\n      };\n      var spaceResult = walk(container, offset, findSpace);\n      return spaceResult.bind(function (result) {\n        return includeTrailingSpaces ? walk(result.container, result.offset + (start ? -1 : 0), findContent) : Optional.some(result);\n      }).orThunk(function () {\n        return lastTextNode ? Optional.some({\n          container: lastTextNode,\n          offset: start ? 0 : lastTextNode.length\n        }) : Optional.none();\n      });\n    };\n    var findSelectorEndPoint = function (dom, formatList, rng, container, siblingName) {\n      if (isText$7(container) && isEmpty$3(container.data) && container[siblingName]) {\n        container = container[siblingName];\n      }\n      var parents = getParents$1(dom, container);\n      for (var i = 0; i < parents.length; i++) {\n        for (var y = 0; y < formatList.length; y++) {\n          var curFormat = formatList[y];\n          if (isNonNullable(curFormat.collapsed) && curFormat.collapsed !== rng.collapsed) {\n            continue;\n          }\n          if (isSelectorFormat(curFormat) && dom.is(parents[i], curFormat.selector)) {\n            return parents[i];\n          }\n        }\n      }\n      return container;\n    };\n    var findBlockEndPoint = function (editor, formatList, container, siblingName) {\n      var node = container;\n      var dom = editor.dom;\n      var root = dom.getRoot();\n      var format = formatList[0];\n      if (isBlockFormat(format)) {\n        node = format.wrapper ? null : dom.getParent(container, format.block, root);\n      }\n      if (!node) {\n        var scopeRoot = dom.getParent(container, 'LI,TD,TH');\n        node = dom.getParent(isText$7(container) ? container.parentNode : container, function (node) {\n          return node !== root && isTextBlock(editor, node);\n        }, scopeRoot);\n      }\n      if (node && isBlockFormat(format) && format.wrapper) {\n        node = getParents$1(dom, node, 'ul,ol').reverse()[0] || node;\n      }\n      if (!node) {\n        node = container;\n        while (node[siblingName] && !dom.isBlock(node[siblingName])) {\n          node = node[siblingName];\n          if (isEq$5(node, 'br')) {\n            break;\n          }\n        }\n      }\n      return node || container;\n    };\n    var isAtBlockBoundary$1 = function (dom, root, container, siblingName) {\n      var parent = container.parentNode;\n      if (isNonNullable(container[siblingName])) {\n        return false;\n      } else if (parent === root || isNullable(parent) || dom.isBlock(parent)) {\n        return true;\n      } else {\n        return isAtBlockBoundary$1(dom, root, parent, siblingName);\n      }\n    };\n    var findParentContainer = function (dom, formatList, container, offset, start) {\n      var parent = container;\n      var siblingName = start ? 'previousSibling' : 'nextSibling';\n      var root = dom.getRoot();\n      if (isText$7(container) && !isWhiteSpaceNode(container)) {\n        if (start ? offset > 0 : offset < container.data.length) {\n          return container;\n        }\n      }\n      while (true) {\n        if (!formatList[0].block_expand && dom.isBlock(parent)) {\n          return parent;\n        }\n        for (var sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {\n          var allowSpaces = isText$7(sibling) && !isAtBlockBoundary$1(dom, root, sibling, siblingName);\n          if (!isBookmarkNode(sibling) && !isBogusBr(sibling) && !isWhiteSpaceNode(sibling, allowSpaces)) {\n            return parent;\n          }\n        }\n        if (parent === root || parent.parentNode === root) {\n          container = parent;\n          break;\n        }\n        parent = parent.parentNode;\n      }\n      return container;\n    };\n    var isSelfOrParentBookmark = function (container) {\n      return isBookmarkNode(container.parentNode) || isBookmarkNode(container);\n    };\n    var expandRng = function (editor, rng, formatList, includeTrailingSpace) {\n      if (includeTrailingSpace === void 0) {\n        includeTrailingSpace = false;\n      }\n      var startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n      var dom = editor.dom;\n      var format = formatList[0];\n      if (isElement$5(startContainer) && startContainer.hasChildNodes()) {\n        startContainer = getNode$1(startContainer, startOffset);\n        if (isText$7(startContainer)) {\n          startOffset = 0;\n        }\n      }\n      if (isElement$5(endContainer) && endContainer.hasChildNodes()) {\n        endContainer = getNode$1(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n        if (isText$7(endContainer)) {\n          endOffset = endContainer.nodeValue.length;\n        }\n      }\n      startContainer = findParentContentEditable(dom, startContainer);\n      endContainer = findParentContentEditable(dom, endContainer);\n      if (isSelfOrParentBookmark(startContainer)) {\n        startContainer = isBookmarkNode(startContainer) ? startContainer : startContainer.parentNode;\n        if (rng.collapsed) {\n          startContainer = startContainer.previousSibling || startContainer;\n        } else {\n          startContainer = startContainer.nextSibling || startContainer;\n        }\n        if (isText$7(startContainer)) {\n          startOffset = rng.collapsed ? startContainer.length : 0;\n        }\n      }\n      if (isSelfOrParentBookmark(endContainer)) {\n        endContainer = isBookmarkNode(endContainer) ? endContainer : endContainer.parentNode;\n        if (rng.collapsed) {\n          endContainer = endContainer.nextSibling || endContainer;\n        } else {\n          endContainer = endContainer.previousSibling || endContainer;\n        }\n        if (isText$7(endContainer)) {\n          endOffset = rng.collapsed ? 0 : endContainer.length;\n        }\n      }\n      if (rng.collapsed) {\n        var startPoint = findWordEndPoint(dom, editor.getBody(), startContainer, startOffset, true, includeTrailingSpace);\n        startPoint.each(function (_a) {\n          var container = _a.container, offset = _a.offset;\n          startContainer = container;\n          startOffset = offset;\n        });\n        var endPoint = findWordEndPoint(dom, editor.getBody(), endContainer, endOffset, false, includeTrailingSpace);\n        endPoint.each(function (_a) {\n          var container = _a.container, offset = _a.offset;\n          endContainer = container;\n          endOffset = offset;\n        });\n      }\n      if (isInlineFormat(format) || format.block_expand) {\n        if (!isInlineFormat(format) || (!isText$7(startContainer) || startOffset === 0)) {\n          startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true);\n        }\n        if (!isInlineFormat(format) || (!isText$7(endContainer) || endOffset === endContainer.nodeValue.length)) {\n          endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false);\n        }\n      }\n      if (shouldExpandToSelector(format)) {\n        startContainer = findSelectorEndPoint(dom, formatList, rng, startContainer, 'previousSibling');\n        endContainer = findSelectorEndPoint(dom, formatList, rng, endContainer, 'nextSibling');\n      }\n      if (isBlockFormat(format) || isSelectorFormat(format)) {\n        startContainer = findBlockEndPoint(editor, formatList, startContainer, 'previousSibling');\n        endContainer = findBlockEndPoint(editor, formatList, endContainer, 'nextSibling');\n        if (isBlockFormat(format)) {\n          if (!dom.isBlock(startContainer)) {\n            startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true);\n          }\n          if (!dom.isBlock(endContainer)) {\n            endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false);\n          }\n        }\n      }\n      if (isElement$5(startContainer)) {\n        startOffset = dom.nodeIndex(startContainer);\n        startContainer = startContainer.parentNode;\n      }\n      if (isElement$5(endContainer)) {\n        endOffset = dom.nodeIndex(endContainer) + 1;\n        endContainer = endContainer.parentNode;\n      }\n      return {\n        startContainer: startContainer,\n        startOffset: startOffset,\n        endContainer: endContainer,\n        endOffset: endOffset\n      };\n    };\n\n    var walk$2 = function (dom, rng, callback) {\n      var startOffset = rng.startOffset;\n      var startContainer = getNode$1(rng.startContainer, startOffset);\n      var endOffset = rng.endOffset;\n      var endContainer = getNode$1(rng.endContainer, endOffset - 1);\n      var exclude = function (nodes) {\n        var firstNode = nodes[0];\n        if (isText$7(firstNode) && firstNode === startContainer && startOffset >= firstNode.data.length) {\n          nodes.splice(0, 1);\n        }\n        var lastNode = nodes[nodes.length - 1];\n        if (endOffset === 0 && nodes.length > 0 && lastNode === endContainer && isText$7(lastNode)) {\n          nodes.splice(nodes.length - 1, 1);\n        }\n        return nodes;\n      };\n      var collectSiblings = function (node, name, endNode) {\n        var siblings = [];\n        for (; node && node !== endNode; node = node[name]) {\n          siblings.push(node);\n        }\n        return siblings;\n      };\n      var findEndPoint = function (node, root) {\n        return dom.getParent(node, function (node) {\n          return node.parentNode === root;\n        }, root);\n      };\n      var walkBoundary = function (startNode, endNode, next) {\n        var siblingName = next ? 'nextSibling' : 'previousSibling';\n        for (var node = startNode, parent_1 = node.parentNode; node && node !== endNode; node = parent_1) {\n          parent_1 = node.parentNode;\n          var siblings_1 = collectSiblings(node === startNode ? node : node[siblingName], siblingName);\n          if (siblings_1.length) {\n            if (!next) {\n              siblings_1.reverse();\n            }\n            callback(exclude(siblings_1));\n          }\n        }\n      };\n      if (startContainer === endContainer) {\n        return callback(exclude([startContainer]));\n      }\n      var ancestor = dom.findCommonAncestor(startContainer, endContainer);\n      if (dom.isChildOf(startContainer, endContainer)) {\n        return walkBoundary(startContainer, ancestor, true);\n      }\n      if (dom.isChildOf(endContainer, startContainer)) {\n        return walkBoundary(endContainer, ancestor);\n      }\n      var startPoint = findEndPoint(startContainer, ancestor) || startContainer;\n      var endPoint = findEndPoint(endContainer, ancestor) || endContainer;\n      walkBoundary(startContainer, startPoint, true);\n      var siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint);\n      if (siblings.length) {\n        callback(exclude(siblings));\n      }\n      walkBoundary(endContainer, endPoint);\n    };\n\n    var getRanges = function (selection) {\n      var ranges = [];\n      if (selection) {\n        for (var i = 0; i < selection.rangeCount; i++) {\n          ranges.push(selection.getRangeAt(i));\n        }\n      }\n      return ranges;\n    };\n    var getSelectedNodes = function (ranges) {\n      return bind(ranges, function (range) {\n        var node = getSelectedNode(range);\n        return node ? [SugarElement.fromDom(node)] : [];\n      });\n    };\n    var hasMultipleRanges = function (selection) {\n      return getRanges(selection).length > 1;\n    };\n\n    var getCellsFromRanges = function (ranges) {\n      return filter$4(getSelectedNodes(ranges), isTableCell$4);\n    };\n    var getCellsFromElement = function (elm) {\n      return descendants(elm, 'td[data-mce-selected],th[data-mce-selected]');\n    };\n    var getCellsFromElementOrRanges = function (ranges, element) {\n      var selectedCells = getCellsFromElement(element);\n      return selectedCells.length > 0 ? selectedCells : getCellsFromRanges(ranges);\n    };\n    var getCellsFromEditor = function (editor) {\n      return getCellsFromElementOrRanges(getRanges(editor.selection.getSel()), SugarElement.fromDom(editor.getBody()));\n    };\n    var getClosestTable = function (cell, isRoot) {\n      return ancestor$2(cell, 'table', isRoot);\n    };\n\n    var getStartNode = function (rng) {\n      var sc = rng.startContainer, so = rng.startOffset;\n      if (isText$7(sc)) {\n        return so === 0 ? Optional.some(SugarElement.fromDom(sc)) : Optional.none();\n      } else {\n        return Optional.from(sc.childNodes[so]).map(SugarElement.fromDom);\n      }\n    };\n    var getEndNode = function (rng) {\n      var ec = rng.endContainer, eo = rng.endOffset;\n      if (isText$7(ec)) {\n        return eo === ec.data.length ? Optional.some(SugarElement.fromDom(ec)) : Optional.none();\n      } else {\n        return Optional.from(ec.childNodes[eo - 1]).map(SugarElement.fromDom);\n      }\n    };\n    var getFirstChildren = function (node) {\n      return firstChild(node).fold(constant([node]), function (child) {\n        return [node].concat(getFirstChildren(child));\n      });\n    };\n    var getLastChildren$1 = function (node) {\n      return lastChild(node).fold(constant([node]), function (child) {\n        if (name(child) === 'br') {\n          return prevSibling(child).map(function (sibling) {\n            return [node].concat(getLastChildren$1(sibling));\n          }).getOr([]);\n        } else {\n          return [node].concat(getLastChildren$1(child));\n        }\n      });\n    };\n    var hasAllContentsSelected = function (elm, rng) {\n      return lift2(getStartNode(rng), getEndNode(rng), function (startNode, endNode) {\n        var start = find$3(getFirstChildren(elm), curry(eq, startNode));\n        var end = find$3(getLastChildren$1(elm), curry(eq, endNode));\n        return start.isSome() && end.isSome();\n      }).getOr(false);\n    };\n    var moveEndPoint = function (dom, rng, node, start) {\n      var root = node, walker = new DomTreeWalker(node, root);\n      var moveCaretBeforeOnEnterElementsMap = filter$3(dom.schema.getMoveCaretBeforeOnEnterElements(), function (_, name) {\n        return !contains$3([\n          'td',\n          'th',\n          'table'\n        ], name.toLowerCase());\n      });\n      do {\n        if (isText$7(node) && Tools.trim(node.nodeValue).length !== 0) {\n          if (start) {\n            rng.setStart(node, 0);\n          } else {\n            rng.setEnd(node, node.nodeValue.length);\n          }\n          return;\n        }\n        if (moveCaretBeforeOnEnterElementsMap[node.nodeName]) {\n          if (start) {\n            rng.setStartBefore(node);\n          } else {\n            if (node.nodeName === 'BR') {\n              rng.setEndBefore(node);\n            } else {\n              rng.setEndAfter(node);\n            }\n          }\n          return;\n        }\n      } while (node = start ? walker.next() : walker.prev());\n      if (root.nodeName === 'BODY') {\n        if (start) {\n          rng.setStart(root, 0);\n        } else {\n          rng.setEnd(root, root.childNodes.length);\n        }\n      }\n    };\n    var hasAnyRanges = function (editor) {\n      var sel = editor.selection.getSel();\n      return sel && sel.rangeCount > 0;\n    };\n    var runOnRanges = function (editor, executor) {\n      var fakeSelectionNodes = getCellsFromEditor(editor);\n      if (fakeSelectionNodes.length > 0) {\n        each$k(fakeSelectionNodes, function (elem) {\n          var node = elem.dom;\n          var fakeNodeRng = editor.dom.createRng();\n          fakeNodeRng.setStartBefore(node);\n          fakeNodeRng.setEndAfter(node);\n          executor(fakeNodeRng, true);\n        });\n      } else {\n        executor(editor.selection.getRng(), false);\n      }\n    };\n    var preserve = function (selection, fillBookmark, executor) {\n      var bookmark = getPersistentBookmark(selection, fillBookmark);\n      executor(bookmark);\n      selection.moveToBookmark(bookmark);\n    };\n\n    var NodeValue = function (is, name) {\n      var get = function (element) {\n        if (!is(element)) {\n          throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n        }\n        return getOption(element).getOr('');\n      };\n      var getOption = function (element) {\n        return is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n      };\n      var set = function (element, value) {\n        if (!is(element)) {\n          throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n        }\n        element.dom.nodeValue = value;\n      };\n      return {\n        get: get,\n        getOption: getOption,\n        set: set\n      };\n    };\n\n    var api$1 = NodeValue(isText$8, 'text');\n    var get$2 = function (element) {\n      return api$1.get(element);\n    };\n\n    var isZeroWidth = function (elem) {\n      return isText$8(elem) && get$2(elem) === ZWSP$1;\n    };\n    var context = function (editor, elem, wrapName, nodeName) {\n      return parent(elem).fold(function () {\n        return 'skipping';\n      }, function (parent) {\n        if (nodeName === 'br' || isZeroWidth(elem)) {\n          return 'valid';\n        } else if (isAnnotation(elem)) {\n          return 'existing';\n        } else if (isCaretNode(elem.dom)) {\n          return 'caret';\n        } else if (!isValid(editor, wrapName, nodeName) || !isValid(editor, name(parent), wrapName)) {\n          return 'invalid-child';\n        } else {\n          return 'valid';\n        }\n      });\n    };\n\n    var applyWordGrab = function (editor, rng) {\n      var r = expandRng(editor, rng, [{ inline: 'span' }]);\n      rng.setStart(r.startContainer, r.startOffset);\n      rng.setEnd(r.endContainer, r.endOffset);\n      editor.selection.setRng(rng);\n    };\n    var makeAnnotation = function (eDoc, _a, annotationName, decorate) {\n      var _b = _a.uid, uid = _b === void 0 ? generate('mce-annotation') : _b, data = __rest(_a, ['uid']);\n      var master = SugarElement.fromTag('span', eDoc);\n      add$1(master, annotation());\n      set$1(master, '' + dataAnnotationId(), uid);\n      set$1(master, '' + dataAnnotation(), annotationName);\n      var _c = decorate(uid, data), _d = _c.attributes, attributes = _d === void 0 ? {} : _d, _e = _c.classes, classes = _e === void 0 ? [] : _e;\n      setAll$1(master, attributes);\n      add(master, classes);\n      return master;\n    };\n    var annotate = function (editor, rng, annotationName, decorate, data) {\n      var newWrappers = [];\n      var master = makeAnnotation(editor.getDoc(), data, annotationName, decorate);\n      var wrapper = value();\n      var finishWrapper = function () {\n        wrapper.clear();\n      };\n      var getOrOpenWrapper = function () {\n        return wrapper.get().getOrThunk(function () {\n          var nu = shallow(master);\n          newWrappers.push(nu);\n          wrapper.set(nu);\n          return nu;\n        });\n      };\n      var processElements = function (elems) {\n        each$k(elems, processElement);\n      };\n      var processElement = function (elem) {\n        var ctx = context(editor, elem, 'span', name(elem));\n        switch (ctx) {\n        case 'invalid-child': {\n            finishWrapper();\n            var children$1 = children(elem);\n            processElements(children$1);\n            finishWrapper();\n            break;\n          }\n        case 'valid': {\n            var w = getOrOpenWrapper();\n            wrap$3(elem, w);\n            break;\n          }\n        }\n      };\n      var processNodes = function (nodes) {\n        var elems = map$3(nodes, SugarElement.fromDom);\n        processElements(elems);\n      };\n      walk$2(editor.dom, rng, function (nodes) {\n        finishWrapper();\n        processNodes(nodes);\n      });\n      return newWrappers;\n    };\n    var annotateWithBookmark = function (editor, name, settings, data) {\n      editor.undoManager.transact(function () {\n        var selection = editor.selection;\n        var initialRng = selection.getRng();\n        var hasFakeSelection = getCellsFromEditor(editor).length > 0;\n        if (initialRng.collapsed && !hasFakeSelection) {\n          applyWordGrab(editor, initialRng);\n        }\n        if (selection.getRng().collapsed && !hasFakeSelection) {\n          var wrapper = makeAnnotation(editor.getDoc(), data, name, settings.decorate);\n          set(wrapper, nbsp);\n          selection.getRng().insertNode(wrapper.dom);\n          selection.select(wrapper.dom);\n        } else {\n          preserve(selection, false, function () {\n            runOnRanges(editor, function (selectionRng) {\n              annotate(editor, selectionRng, name, settings.decorate, data);\n            });\n          });\n        }\n      });\n    };\n\n    var Annotator = function (editor) {\n      var registry = create$7();\n      setup$m(editor, registry);\n      var changes = setup$n(editor);\n      return {\n        register: function (name, settings) {\n          registry.register(name, settings);\n        },\n        annotate: function (name, data) {\n          registry.lookup(name).each(function (settings) {\n            annotateWithBookmark(editor, name, settings, data);\n          });\n        },\n        annotationChanged: function (name, callback) {\n          changes.addListener(name, callback);\n        },\n        remove: function (name) {\n          identify(editor, Optional.some(name)).each(function (_a) {\n            var elements = _a.elements;\n            each$k(elements, unwrap);\n          });\n        },\n        getAll: function (name) {\n          var directory = findAll(editor, name);\n          return map$2(directory, function (elems) {\n            return map$3(elems, function (elem) {\n              return elem.dom;\n            });\n          });\n        }\n      };\n    };\n\n    var BookmarkManager = function (selection) {\n      return {\n        getBookmark: curry(getBookmark$1, selection),\n        moveToBookmark: curry(moveToBookmark, selection)\n      };\n    };\n    BookmarkManager.isBookmarkNode = isBookmarkNode$1;\n\n    var getContentEditableRoot$1 = function (root, node) {\n      while (node && node !== root) {\n        if (isContentEditableTrue$4(node) || isContentEditableFalse$b(node)) {\n          return node;\n        }\n        node = node.parentNode;\n      }\n      return null;\n    };\n\n    var isXYWithinRange = function (clientX, clientY, range) {\n      if (range.collapsed) {\n        return false;\n      }\n      if (Env.browser.isIE() && range.startOffset === range.endOffset - 1 && range.startContainer === range.endContainer) {\n        var elm = range.startContainer.childNodes[range.startOffset];\n        if (isElement$5(elm)) {\n          return exists(elm.getClientRects(), function (rect) {\n            return containsXY(rect, clientX, clientY);\n          });\n        }\n      }\n      return exists(range.getClientRects(), function (rect) {\n        return containsXY(rect, clientX, clientY);\n      });\n    };\n\n    var firePreProcess = function (editor, args) {\n      return editor.fire('PreProcess', args);\n    };\n    var firePostProcess = function (editor, args) {\n      return editor.fire('PostProcess', args);\n    };\n    var fireRemove = function (editor) {\n      return editor.fire('remove');\n    };\n    var fireDetach = function (editor) {\n      return editor.fire('detach');\n    };\n    var fireSwitchMode = function (editor, mode) {\n      return editor.fire('SwitchMode', { mode: mode });\n    };\n    var fireObjectResizeStart = function (editor, target, width, height, origin) {\n      editor.fire('ObjectResizeStart', {\n        target: target,\n        width: width,\n        height: height,\n        origin: origin\n      });\n    };\n    var fireObjectResized = function (editor, target, width, height, origin) {\n      editor.fire('ObjectResized', {\n        target: target,\n        width: width,\n        height: height,\n        origin: origin\n      });\n    };\n    var firePreInit = function (editor) {\n      return editor.fire('PreInit');\n    };\n    var firePostRender = function (editor) {\n      return editor.fire('PostRender');\n    };\n    var fireInit = function (editor) {\n      return editor.fire('Init');\n    };\n    var firePlaceholderToggle = function (editor, state) {\n      return editor.fire('PlaceholderToggle', { state: state });\n    };\n    var fireError = function (editor, errorType, error) {\n      return editor.fire(errorType, error);\n    };\n    var fireFormatApply = function (editor, format, node, vars) {\n      return editor.fire('FormatApply', {\n        format: format,\n        node: node,\n        vars: vars\n      });\n    };\n    var fireFormatRemove = function (editor, format, node, vars) {\n      return editor.fire('FormatRemove', {\n        format: format,\n        node: node,\n        vars: vars\n      });\n    };\n\n    var VK = {\n      BACKSPACE: 8,\n      DELETE: 46,\n      DOWN: 40,\n      ENTER: 13,\n      ESC: 27,\n      LEFT: 37,\n      RIGHT: 39,\n      SPACEBAR: 32,\n      TAB: 9,\n      UP: 38,\n      PAGE_UP: 33,\n      PAGE_DOWN: 34,\n      END: 35,\n      HOME: 36,\n      modifierPressed: function (e) {\n        return e.shiftKey || e.ctrlKey || e.altKey || VK.metaKeyPressed(e);\n      },\n      metaKeyPressed: function (e) {\n        return Env.mac ? e.metaKey : e.ctrlKey && !e.altKey;\n      }\n    };\n\n    var isContentEditableFalse$5 = isContentEditableFalse$b;\n    var ControlSelection = function (selection, editor) {\n      var elementSelectionAttr = 'data-mce-selected';\n      var dom = editor.dom, each = Tools.each;\n      var selectedElm, selectedElmGhost, resizeHelper, selectedHandle, resizeBackdrop;\n      var startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted;\n      var width, height;\n      var editableDoc = editor.getDoc(), rootDocument = document;\n      var abs = Math.abs, round = Math.round, rootElement = editor.getBody();\n      var startScrollWidth, startScrollHeight;\n      var resizeHandles = {\n        nw: [\n          0,\n          0,\n          -1,\n          -1\n        ],\n        ne: [\n          1,\n          0,\n          1,\n          -1\n        ],\n        se: [\n          1,\n          1,\n          1,\n          1\n        ],\n        sw: [\n          0,\n          1,\n          -1,\n          1\n        ]\n      };\n      var isImage = function (elm) {\n        return elm && (elm.nodeName === 'IMG' || editor.dom.is(elm, 'figure.image'));\n      };\n      var isMedia = function (elm) {\n        return isMedia$2(elm) || dom.hasClass(elm, 'mce-preview-object');\n      };\n      var isEventOnImageOutsideRange = function (evt, range) {\n        if (evt.type === 'longpress' || evt.type.indexOf('touch') === 0) {\n          var touch = evt.touches[0];\n          return isImage(evt.target) && !isXYWithinRange(touch.clientX, touch.clientY, range);\n        } else {\n          return isImage(evt.target) && !isXYWithinRange(evt.clientX, evt.clientY, range);\n        }\n      };\n      var contextMenuSelectImage = function (evt) {\n        var target = evt.target;\n        if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n          editor.selection.select(target);\n        }\n      };\n      var getResizeTargets = function (elm) {\n        if (dom.is(elm, 'figure.image')) {\n          return [elm.querySelector('img')];\n        } else if (dom.hasClass(elm, 'mce-preview-object') && isNonNullable(elm.firstElementChild)) {\n          return [\n            elm,\n            elm.firstElementChild\n          ];\n        } else {\n          return [elm];\n        }\n      };\n      var isResizable = function (elm) {\n        var selector = getObjectResizing(editor);\n        if (!selector) {\n          return false;\n        }\n        if (elm.getAttribute('data-mce-resize') === 'false') {\n          return false;\n        }\n        if (elm === editor.getBody()) {\n          return false;\n        }\n        if (dom.hasClass(elm, 'mce-preview-object')) {\n          return is$2(SugarElement.fromDom(elm.firstElementChild), selector);\n        } else {\n          return is$2(SugarElement.fromDom(elm), selector);\n        }\n      };\n      var createGhostElement = function (elm) {\n        if (isMedia(elm)) {\n          return dom.create('img', { src: Env.transparentSrc });\n        } else {\n          return elm.cloneNode(true);\n        }\n      };\n      var setSizeProp = function (element, name, value) {\n        if (isNonNullable(value)) {\n          var targets = getResizeTargets(element);\n          each$k(targets, function (target) {\n            if (target.style[name] || !editor.schema.isValid(target.nodeName.toLowerCase(), name)) {\n              dom.setStyle(target, name, value);\n            } else {\n              dom.setAttrib(target, name, '' + value);\n            }\n          });\n        }\n      };\n      var setGhostElmSize = function (ghostElm, width, height) {\n        setSizeProp(ghostElm, 'width', width);\n        setSizeProp(ghostElm, 'height', height);\n      };\n      var resizeGhostElement = function (e) {\n        var deltaX, deltaY, proportional;\n        var resizeHelperX, resizeHelperY;\n        deltaX = e.screenX - startX;\n        deltaY = e.screenY - startY;\n        width = deltaX * selectedHandle[2] + startW;\n        height = deltaY * selectedHandle[3] + startH;\n        width = width < 5 ? 5 : width;\n        height = height < 5 ? 5 : height;\n        if ((isImage(selectedElm) || isMedia(selectedElm)) && getResizeImgProportional(editor) !== false) {\n          proportional = !VK.modifierPressed(e);\n        } else {\n          proportional = VK.modifierPressed(e);\n        }\n        if (proportional) {\n          if (abs(deltaX) > abs(deltaY)) {\n            height = round(width * ratio);\n            width = round(height / ratio);\n          } else {\n            width = round(height / ratio);\n            height = round(width * ratio);\n          }\n        }\n        setGhostElmSize(selectedElmGhost, width, height);\n        resizeHelperX = selectedHandle.startPos.x + deltaX;\n        resizeHelperY = selectedHandle.startPos.y + deltaY;\n        resizeHelperX = resizeHelperX > 0 ? resizeHelperX : 0;\n        resizeHelperY = resizeHelperY > 0 ? resizeHelperY : 0;\n        dom.setStyles(resizeHelper, {\n          left: resizeHelperX,\n          top: resizeHelperY,\n          display: 'block'\n        });\n        resizeHelper.innerHTML = width + ' &times; ' + height;\n        if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) {\n          dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width));\n        }\n        if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) {\n          dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height));\n        }\n        deltaX = rootElement.scrollWidth - startScrollWidth;\n        deltaY = rootElement.scrollHeight - startScrollHeight;\n        if (deltaX + deltaY !== 0) {\n          dom.setStyles(resizeHelper, {\n            left: resizeHelperX - deltaX,\n            top: resizeHelperY - deltaY\n          });\n        }\n        if (!resizeStarted) {\n          fireObjectResizeStart(editor, selectedElm, startW, startH, 'corner-' + selectedHandle.name);\n          resizeStarted = true;\n        }\n      };\n      var endGhostResize = function () {\n        var wasResizeStarted = resizeStarted;\n        resizeStarted = false;\n        if (wasResizeStarted) {\n          setSizeProp(selectedElm, 'width', width);\n          setSizeProp(selectedElm, 'height', height);\n        }\n        dom.unbind(editableDoc, 'mousemove', resizeGhostElement);\n        dom.unbind(editableDoc, 'mouseup', endGhostResize);\n        if (rootDocument !== editableDoc) {\n          dom.unbind(rootDocument, 'mousemove', resizeGhostElement);\n          dom.unbind(rootDocument, 'mouseup', endGhostResize);\n        }\n        dom.remove(selectedElmGhost);\n        dom.remove(resizeHelper);\n        dom.remove(resizeBackdrop);\n        showResizeRect(selectedElm);\n        if (wasResizeStarted) {\n          fireObjectResized(editor, selectedElm, width, height, 'corner-' + selectedHandle.name);\n          dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));\n        }\n        editor.nodeChanged();\n      };\n      var showResizeRect = function (targetElm) {\n        unbindResizeHandleEvents();\n        var position = dom.getPos(targetElm, rootElement);\n        var selectedElmX = position.x;\n        var selectedElmY = position.y;\n        var rect = targetElm.getBoundingClientRect();\n        var targetWidth = rect.width || rect.right - rect.left;\n        var targetHeight = rect.height || rect.bottom - rect.top;\n        if (selectedElm !== targetElm) {\n          hideResizeRect();\n          selectedElm = targetElm;\n          width = height = 0;\n        }\n        var e = editor.fire('ObjectSelected', { target: targetElm });\n        var selectedValue = dom.getAttrib(selectedElm, elementSelectionAttr, '1');\n        if (isResizable(targetElm) && !e.isDefaultPrevented()) {\n          each(resizeHandles, function (handle, name) {\n            var handleElm;\n            var startDrag = function (e) {\n              var target = getResizeTargets(selectedElm)[0];\n              startX = e.screenX;\n              startY = e.screenY;\n              startW = target.clientWidth;\n              startH = target.clientHeight;\n              ratio = startH / startW;\n              selectedHandle = handle;\n              selectedHandle.name = name;\n              selectedHandle.startPos = {\n                x: targetWidth * handle[0] + selectedElmX,\n                y: targetHeight * handle[1] + selectedElmY\n              };\n              startScrollWidth = rootElement.scrollWidth;\n              startScrollHeight = rootElement.scrollHeight;\n              resizeBackdrop = dom.add(rootElement, 'div', {\n                'class': 'mce-resize-backdrop',\n                'data-mce-bogus': 'all'\n              });\n              dom.setStyles(resizeBackdrop, {\n                position: 'fixed',\n                left: '0',\n                top: '0',\n                width: '100%',\n                height: '100%'\n              });\n              selectedElmGhost = createGhostElement(selectedElm);\n              dom.addClass(selectedElmGhost, 'mce-clonedresizable');\n              dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');\n              selectedElmGhost.contentEditable = 'false';\n              dom.setStyles(selectedElmGhost, {\n                left: selectedElmX,\n                top: selectedElmY,\n                margin: 0\n              });\n              setGhostElmSize(selectedElmGhost, targetWidth, targetHeight);\n              selectedElmGhost.removeAttribute(elementSelectionAttr);\n              rootElement.appendChild(selectedElmGhost);\n              dom.bind(editableDoc, 'mousemove', resizeGhostElement);\n              dom.bind(editableDoc, 'mouseup', endGhostResize);\n              if (rootDocument !== editableDoc) {\n                dom.bind(rootDocument, 'mousemove', resizeGhostElement);\n                dom.bind(rootDocument, 'mouseup', endGhostResize);\n              }\n              resizeHelper = dom.add(rootElement, 'div', {\n                'class': 'mce-resize-helper',\n                'data-mce-bogus': 'all'\n              }, startW + ' &times; ' + startH);\n            };\n            handleElm = dom.get('mceResizeHandle' + name);\n            if (handleElm) {\n              dom.remove(handleElm);\n            }\n            handleElm = dom.add(rootElement, 'div', {\n              'id': 'mceResizeHandle' + name,\n              'data-mce-bogus': 'all',\n              'class': 'mce-resizehandle',\n              'unselectable': true,\n              'style': 'cursor:' + name + '-resize; margin:0; padding:0'\n            });\n            if (Env.ie === 11) {\n              handleElm.contentEditable = false;\n            }\n            dom.bind(handleElm, 'mousedown', function (e) {\n              e.stopImmediatePropagation();\n              e.preventDefault();\n              startDrag(e);\n            });\n            handle.elm = handleElm;\n            dom.setStyles(handleElm, {\n              left: targetWidth * handle[0] + selectedElmX - handleElm.offsetWidth / 2,\n              top: targetHeight * handle[1] + selectedElmY - handleElm.offsetHeight / 2\n            });\n          });\n        } else {\n          hideResizeRect();\n        }\n        if (!dom.getAttrib(selectedElm, elementSelectionAttr)) {\n          selectedElm.setAttribute(elementSelectionAttr, selectedValue);\n        }\n      };\n      var hideResizeRect = function () {\n        unbindResizeHandleEvents();\n        if (selectedElm) {\n          selectedElm.removeAttribute(elementSelectionAttr);\n        }\n        each$j(resizeHandles, function (value, name) {\n          var handleElm = dom.get('mceResizeHandle' + name);\n          if (handleElm) {\n            dom.unbind(handleElm);\n            dom.remove(handleElm);\n          }\n        });\n      };\n      var updateResizeRect = function (e) {\n        var startElm, controlElm;\n        var isChildOrEqual = function (node, parent) {\n          if (node) {\n            do {\n              if (node === parent) {\n                return true;\n              }\n            } while (node = node.parentNode);\n          }\n        };\n        if (resizeStarted || editor.removed) {\n          return;\n        }\n        each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function (img) {\n          img.removeAttribute(elementSelectionAttr);\n        });\n        controlElm = e.type === 'mousedown' ? e.target : selection.getNode();\n        controlElm = dom.$(controlElm).closest('table,img,figure.image,hr,video,span.mce-preview-object')[0];\n        if (isChildOrEqual(controlElm, rootElement)) {\n          disableGeckoResize();\n          startElm = selection.getStart(true);\n          if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {\n            showResizeRect(controlElm);\n            return;\n          }\n        }\n        hideResizeRect();\n      };\n      var isWithinContentEditableFalse = function (elm) {\n        return isContentEditableFalse$5(getContentEditableRoot$1(editor.getBody(), elm));\n      };\n      var unbindResizeHandleEvents = function () {\n        each$j(resizeHandles, function (handle) {\n          if (handle.elm) {\n            dom.unbind(handle.elm);\n            delete handle.elm;\n          }\n        });\n      };\n      var disableGeckoResize = function () {\n        try {\n          editor.getDoc().execCommand('enableObjectResizing', false, 'false');\n        } catch (ex) {\n        }\n      };\n      editor.on('init', function () {\n        disableGeckoResize();\n        if (Env.browser.isIE() || Env.browser.isEdge()) {\n          editor.on('mousedown click', function (e) {\n            var target = e.target, nodeName = target.nodeName;\n            if (!resizeStarted && /^(TABLE|IMG|HR)$/.test(nodeName) && !isWithinContentEditableFalse(target)) {\n              if (e.button !== 2) {\n                editor.selection.select(target, nodeName === 'TABLE');\n              }\n              if (e.type === 'mousedown') {\n                editor.nodeChanged();\n              }\n            }\n          });\n          var handleMSControlSelect_1 = function (e) {\n            var delayedSelect = function (node) {\n              Delay.setEditorTimeout(editor, function () {\n                return editor.selection.select(node);\n              });\n            };\n            if (isWithinContentEditableFalse(e.target) || isMedia$2(e.target)) {\n              e.preventDefault();\n              delayedSelect(e.target);\n              return;\n            }\n            if (/^(TABLE|IMG|HR)$/.test(e.target.nodeName)) {\n              e.preventDefault();\n              if (e.target.tagName === 'IMG') {\n                delayedSelect(e.target);\n              }\n            }\n          };\n          dom.bind(rootElement, 'mscontrolselect', handleMSControlSelect_1);\n          editor.on('remove', function () {\n            return dom.unbind(rootElement, 'mscontrolselect', handleMSControlSelect_1);\n          });\n        }\n        var throttledUpdateResizeRect = Delay.throttle(function (e) {\n          if (!editor.composing) {\n            updateResizeRect(e);\n          }\n        });\n        editor.on('nodechange ResizeEditor ResizeWindow ResizeContent drop FullscreenStateChanged', throttledUpdateResizeRect);\n        editor.on('keyup compositionend', function (e) {\n          if (selectedElm && selectedElm.nodeName === 'TABLE') {\n            throttledUpdateResizeRect(e);\n          }\n        });\n        editor.on('hide blur', hideResizeRect);\n        editor.on('contextmenu longpress', contextMenuSelectImage, true);\n      });\n      editor.on('remove', unbindResizeHandleEvents);\n      var destroy = function () {\n        selectedElm = selectedElmGhost = resizeBackdrop = null;\n      };\n      return {\n        isResizable: isResizable,\n        showResizeRect: showResizeRect,\n        hideResizeRect: hideResizeRect,\n        updateResizeRect: updateResizeRect,\n        destroy: destroy\n      };\n    };\n\n    var hasCeProperty = function (node) {\n      return isContentEditableTrue$4(node) || isContentEditableFalse$b(node);\n    };\n    var findParent$1 = function (node, rootNode, predicate) {\n      while (node && node !== rootNode) {\n        if (predicate(node)) {\n          return node;\n        }\n        node = node.parentNode;\n      }\n      return null;\n    };\n    var findClosestIeRange = function (clientX, clientY, doc) {\n      var rects;\n      var element = doc.elementFromPoint(clientX, clientY);\n      var rng = doc.body.createTextRange();\n      if (!element || element.tagName === 'HTML') {\n        element = doc.body;\n      }\n      rng.moveToElementText(element);\n      rects = Tools.toArray(rng.getClientRects());\n      rects = rects.sort(function (a, b) {\n        a = Math.abs(Math.max(a.top - clientY, a.bottom - clientY));\n        b = Math.abs(Math.max(b.top - clientY, b.bottom - clientY));\n        return a - b;\n      });\n      if (rects.length > 0) {\n        clientY = (rects[0].bottom + rects[0].top) / 2;\n        try {\n          rng.moveToPoint(clientX, clientY);\n          rng.collapse(true);\n          return rng;\n        } catch (ex) {\n        }\n      }\n      return null;\n    };\n    var moveOutOfContentEditableFalse = function (rng, rootNode) {\n      var parentElement = rng && rng.parentElement ? rng.parentElement() : null;\n      return isContentEditableFalse$b(findParent$1(parentElement, rootNode, hasCeProperty)) ? null : rng;\n    };\n    var fromPoint = function (clientX, clientY, doc) {\n      var rng, point;\n      var pointDoc = doc;\n      if (pointDoc.caretPositionFromPoint) {\n        point = pointDoc.caretPositionFromPoint(clientX, clientY);\n        if (point) {\n          rng = doc.createRange();\n          rng.setStart(point.offsetNode, point.offset);\n          rng.collapse(true);\n        }\n      } else if (pointDoc.caretRangeFromPoint) {\n        rng = pointDoc.caretRangeFromPoint(clientX, clientY);\n      } else if (pointDoc.body.createTextRange) {\n        rng = pointDoc.body.createTextRange();\n        try {\n          rng.moveToPoint(clientX, clientY);\n          rng.collapse(true);\n        } catch (ex) {\n          rng = findClosestIeRange(clientX, clientY, doc);\n        }\n        return moveOutOfContentEditableFalse(rng, doc.body);\n      }\n      return rng;\n    };\n\n    var isEq$4 = function (rng1, rng2) {\n      return rng1 && rng2 && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);\n    };\n\n    var findParent = function (node, rootNode, predicate) {\n      while (node && node !== rootNode) {\n        if (predicate(node)) {\n          return node;\n        }\n        node = node.parentNode;\n      }\n      return null;\n    };\n    var hasParent$1 = function (node, rootNode, predicate) {\n      return findParent(node, rootNode, predicate) !== null;\n    };\n    var hasParentWithName = function (node, rootNode, name) {\n      return hasParent$1(node, rootNode, function (node) {\n        return node.nodeName === name;\n      });\n    };\n    var isTable = function (node) {\n      return node && node.nodeName === 'TABLE';\n    };\n    var isTableCell$2 = function (node) {\n      return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n    };\n    var isCeFalseCaretContainer = function (node, rootNode) {\n      return isCaretContainer$2(node) && hasParent$1(node, rootNode, isCaretNode) === false;\n    };\n    var hasBrBeforeAfter = function (dom, node, left) {\n      var walker = new DomTreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || dom.getRoot());\n      while (node = walker[left ? 'prev' : 'next']()) {\n        if (isBr$5(node)) {\n          return true;\n        }\n      }\n    };\n    var isPrevNode = function (node, name) {\n      return node.previousSibling && node.previousSibling.nodeName === name;\n    };\n    var hasContentEditableFalseParent = function (body, node) {\n      while (node && node !== body) {\n        if (isContentEditableFalse$b(node)) {\n          return true;\n        }\n        node = node.parentNode;\n      }\n      return false;\n    };\n    var findTextNodeRelative = function (dom, isAfterNode, collapsed, left, startNode) {\n      var lastInlineElement;\n      var body = dom.getRoot();\n      var node;\n      var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n      var parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body;\n      if (left && isBr$5(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {\n        return Optional.some(CaretPosition(startNode.parentNode, dom.nodeIndex(startNode)));\n      }\n      var walker = new DomTreeWalker(startNode, parentBlockContainer);\n      while (node = walker[left ? 'prev' : 'next']()) {\n        if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) {\n          return Optional.none();\n        }\n        if (isText$7(node) && node.nodeValue.length > 0) {\n          if (hasParentWithName(node, body, 'A') === false) {\n            return Optional.some(CaretPosition(node, left ? node.nodeValue.length : 0));\n          }\n          return Optional.none();\n        }\n        if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n          return Optional.none();\n        }\n        lastInlineElement = node;\n      }\n      if (collapsed && lastInlineElement) {\n        return Optional.some(CaretPosition(lastInlineElement, 0));\n      }\n      return Optional.none();\n    };\n    var normalizeEndPoint = function (dom, collapsed, start, rng) {\n      var container, offset;\n      var body = dom.getRoot();\n      var node;\n      var directionLeft, normalized = false;\n      container = rng[(start ? 'start' : 'end') + 'Container'];\n      offset = rng[(start ? 'start' : 'end') + 'Offset'];\n      var isAfterNode = isElement$5(container) && offset === container.childNodes.length;\n      var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n      directionLeft = start;\n      if (isCaretContainer$2(container)) {\n        return Optional.none();\n      }\n      if (isElement$5(container) && offset > container.childNodes.length - 1) {\n        directionLeft = false;\n      }\n      if (isDocument$1(container)) {\n        container = body;\n        offset = 0;\n      }\n      if (container === body) {\n        if (directionLeft) {\n          node = container.childNodes[offset > 0 ? offset - 1 : 0];\n          if (node) {\n            if (isCaretContainer$2(node)) {\n              return Optional.none();\n            }\n            if (nonEmptyElementsMap[node.nodeName] || isTable(node)) {\n              return Optional.none();\n            }\n          }\n        }\n        if (container.hasChildNodes()) {\n          offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1);\n          container = container.childNodes[offset];\n          offset = isText$7(container) && isAfterNode ? container.data.length : 0;\n          if (!collapsed && container === body.lastChild && isTable(container)) {\n            return Optional.none();\n          }\n          if (hasContentEditableFalseParent(body, container) || isCaretContainer$2(container)) {\n            return Optional.none();\n          }\n          if (container.hasChildNodes() && isTable(container) === false) {\n            node = container;\n            var walker = new DomTreeWalker(container, body);\n            do {\n              if (isContentEditableFalse$b(node) || isCaretContainer$2(node)) {\n                normalized = false;\n                break;\n              }\n              if (isText$7(node) && node.nodeValue.length > 0) {\n                offset = directionLeft ? 0 : node.nodeValue.length;\n                container = node;\n                normalized = true;\n                break;\n              }\n              if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCell$2(node)) {\n                offset = dom.nodeIndex(node);\n                container = node.parentNode;\n                if (!directionLeft) {\n                  offset++;\n                }\n                normalized = true;\n                break;\n              }\n            } while (node = directionLeft ? walker.next() : walker.prev());\n          }\n        }\n      }\n      if (collapsed) {\n        if (isText$7(container) && offset === 0) {\n          findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(function (pos) {\n            container = pos.container();\n            offset = pos.offset();\n            normalized = true;\n          });\n        }\n        if (isElement$5(container)) {\n          node = container.childNodes[offset];\n          if (!node) {\n            node = container.childNodes[offset - 1];\n          }\n          if (node && isBr$5(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) {\n            findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(function (pos) {\n              container = pos.container();\n              offset = pos.offset();\n              normalized = true;\n            });\n          }\n        }\n      }\n      if (directionLeft && !collapsed && isText$7(container) && offset === container.nodeValue.length) {\n        findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(function (pos) {\n          container = pos.container();\n          offset = pos.offset();\n          normalized = true;\n        });\n      }\n      return normalized ? Optional.some(CaretPosition(container, offset)) : Optional.none();\n    };\n    var normalize$2 = function (dom, rng) {\n      var collapsed = rng.collapsed, normRng = rng.cloneRange();\n      var startPos = CaretPosition.fromRangeStart(rng);\n      normalizeEndPoint(dom, collapsed, true, normRng).each(function (pos) {\n        if (!collapsed || !CaretPosition.isAbove(startPos, pos)) {\n          normRng.setStart(pos.container(), pos.offset());\n        }\n      });\n      if (!collapsed) {\n        normalizeEndPoint(dom, collapsed, false, normRng).each(function (pos) {\n          normRng.setEnd(pos.container(), pos.offset());\n        });\n      }\n      if (collapsed) {\n        normRng.collapse(true);\n      }\n      return isEq$4(rng, normRng) ? Optional.none() : Optional.some(normRng);\n    };\n\n    var splitText = function (node, offset) {\n      return node.splitText(offset);\n    };\n    var split = function (rng) {\n      var startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n      if (startContainer === endContainer && isText$7(startContainer)) {\n        if (startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n          endContainer = splitText(startContainer, startOffset);\n          startContainer = endContainer.previousSibling;\n          if (endOffset > startOffset) {\n            endOffset = endOffset - startOffset;\n            startContainer = endContainer = splitText(endContainer, endOffset).previousSibling;\n            endOffset = endContainer.nodeValue.length;\n            startOffset = 0;\n          } else {\n            endOffset = 0;\n          }\n        }\n      } else {\n        if (isText$7(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n          startContainer = splitText(startContainer, startOffset);\n          startOffset = 0;\n        }\n        if (isText$7(endContainer) && endOffset > 0 && endOffset < endContainer.nodeValue.length) {\n          endContainer = splitText(endContainer, endOffset).previousSibling;\n          endOffset = endContainer.nodeValue.length;\n        }\n      }\n      return {\n        startContainer: startContainer,\n        startOffset: startOffset,\n        endContainer: endContainer,\n        endOffset: endOffset\n      };\n    };\n\n    var RangeUtils = function (dom) {\n      var walk = function (rng, callback) {\n        return walk$2(dom, rng, callback);\n      };\n      var split$1 = split;\n      var normalize = function (rng) {\n        return normalize$2(dom, rng).fold(never, function (normalizedRng) {\n          rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);\n          rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);\n          return true;\n        });\n      };\n      return {\n        walk: walk,\n        split: split$1,\n        normalize: normalize\n      };\n    };\n    RangeUtils.compareRanges = isEq$4;\n    RangeUtils.getCaretRangeFromPoint = fromPoint;\n    RangeUtils.getSelectedNode = getSelectedNode;\n    RangeUtils.getNode = getNode$1;\n\n    var Dimension = function (name, getOffset) {\n      var set = function (element, h) {\n        if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n          throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n        }\n        var dom = element.dom;\n        if (isSupported(dom)) {\n          dom.style[name] = h + 'px';\n        }\n      };\n      var get = function (element) {\n        var r = getOffset(element);\n        if (r <= 0 || r === null) {\n          var css = get$5(element, name);\n          return parseFloat(css) || 0;\n        }\n        return r;\n      };\n      var getOuter = get;\n      var aggregate = function (element, properties) {\n        return foldl(properties, function (acc, property) {\n          var val = get$5(element, property);\n          var value = val === undefined ? 0 : parseInt(val, 10);\n          return isNaN(value) ? acc : acc + value;\n        }, 0);\n      };\n      var max = function (element, value, properties) {\n        var cumulativeInclusions = aggregate(element, properties);\n        var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n        return absoluteMax;\n      };\n      return {\n        set: set,\n        get: get,\n        getOuter: getOuter,\n        aggregate: aggregate,\n        max: max\n      };\n    };\n\n    var api = Dimension('height', function (element) {\n      var dom = element.dom;\n      return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n    });\n    var get$1 = function (element) {\n      return api.get(element);\n    };\n\n    var walkUp = function (navigation, doc) {\n      var frame = navigation.view(doc);\n      return frame.fold(constant([]), function (f) {\n        var parent = navigation.owner(f);\n        var rest = walkUp(navigation, parent);\n        return [f].concat(rest);\n      });\n    };\n    var pathTo = function (element, navigation) {\n      var d = navigation.owner(element);\n      return walkUp(navigation, d);\n    };\n\n    var view = function (doc) {\n      var _a;\n      var element = doc.dom === document ? Optional.none() : Optional.from((_a = doc.dom.defaultView) === null || _a === void 0 ? void 0 : _a.frameElement);\n      return element.map(SugarElement.fromDom);\n    };\n    var owner = function (element) {\n      return documentOrOwner(element);\n    };\n\n    var Navigation = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        view: view,\n        owner: owner\n    });\n\n    var find$1 = function (element) {\n      var doc = SugarElement.fromDom(document);\n      var scroll = get$8(doc);\n      var frames = pathTo(element, Navigation);\n      var offset = viewport(element);\n      var r = foldr(frames, function (b, a) {\n        var loc = viewport(a);\n        return {\n          left: b.left + loc.left,\n          top: b.top + loc.top\n        };\n      }, {\n        left: 0,\n        top: 0\n      });\n      return SugarPosition(r.left + offset.left + scroll.left, r.top + offset.top + scroll.top);\n    };\n\n    var excludeFromDescend = function (element) {\n      return name(element) === 'textarea';\n    };\n    var fireScrollIntoViewEvent = function (editor, data) {\n      var scrollEvent = editor.fire('ScrollIntoView', data);\n      return scrollEvent.isDefaultPrevented();\n    };\n    var fireAfterScrollIntoViewEvent = function (editor, data) {\n      editor.fire('AfterScrollIntoView', data);\n    };\n    var descend = function (element, offset) {\n      var children$1 = children(element);\n      if (children$1.length === 0 || excludeFromDescend(element)) {\n        return {\n          element: element,\n          offset: offset\n        };\n      } else if (offset < children$1.length && !excludeFromDescend(children$1[offset])) {\n        return {\n          element: children$1[offset],\n          offset: 0\n        };\n      } else {\n        var last = children$1[children$1.length - 1];\n        if (excludeFromDescend(last)) {\n          return {\n            element: element,\n            offset: offset\n          };\n        } else {\n          if (name(last) === 'img') {\n            return {\n              element: last,\n              offset: 1\n            };\n          } else if (isText$8(last)) {\n            return {\n              element: last,\n              offset: get$2(last).length\n            };\n          } else {\n            return {\n              element: last,\n              offset: children(last).length\n            };\n          }\n        }\n      }\n    };\n    var markerInfo = function (element, cleanupFun) {\n      var pos = absolute(element);\n      var height = get$1(element);\n      return {\n        element: element,\n        bottom: pos.top + height,\n        height: height,\n        pos: pos,\n        cleanup: cleanupFun\n      };\n    };\n    var createMarker = function (element, offset) {\n      var startPoint = descend(element, offset);\n      var span = SugarElement.fromHtml('<span data-mce-bogus=\"all\" style=\"display: inline-block;\">' + ZWSP$1 + '</span>');\n      before$4(startPoint.element, span);\n      return markerInfo(span, function () {\n        return remove$7(span);\n      });\n    };\n    var elementMarker = function (element) {\n      return markerInfo(SugarElement.fromDom(element), noop);\n    };\n    var withMarker = function (editor, f, rng, alignToTop) {\n      preserveWith(editor, function (_s, _e) {\n        return applyWithMarker(editor, f, rng, alignToTop);\n      }, rng);\n    };\n    var withScrollEvents = function (editor, doc, f, marker, alignToTop) {\n      var data = {\n        elm: marker.element.dom,\n        alignToTop: alignToTop\n      };\n      if (fireScrollIntoViewEvent(editor, data)) {\n        return;\n      }\n      var scrollTop = get$8(doc).top;\n      f(doc, scrollTop, marker, alignToTop);\n      fireAfterScrollIntoViewEvent(editor, data);\n    };\n    var applyWithMarker = function (editor, f, rng, alignToTop) {\n      var body = SugarElement.fromDom(editor.getBody());\n      var doc = SugarElement.fromDom(editor.getDoc());\n      reflow(body);\n      var marker = createMarker(SugarElement.fromDom(rng.startContainer), rng.startOffset);\n      withScrollEvents(editor, doc, f, marker, alignToTop);\n      marker.cleanup();\n    };\n    var withElement = function (editor, element, f, alignToTop) {\n      var doc = SugarElement.fromDom(editor.getDoc());\n      withScrollEvents(editor, doc, f, elementMarker(element), alignToTop);\n    };\n    var preserveWith = function (editor, f, rng) {\n      var startElement = rng.startContainer;\n      var startOffset = rng.startOffset;\n      var endElement = rng.endContainer;\n      var endOffset = rng.endOffset;\n      f(SugarElement.fromDom(startElement), SugarElement.fromDom(endElement));\n      var newRng = editor.dom.createRng();\n      newRng.setStart(startElement, startOffset);\n      newRng.setEnd(endElement, endOffset);\n      editor.selection.setRng(rng);\n    };\n    var scrollToMarker = function (marker, viewHeight, alignToTop, doc) {\n      var pos = marker.pos;\n      if (alignToTop) {\n        to(pos.left, pos.top, doc);\n      } else {\n        var y = pos.top - viewHeight + marker.height;\n        to(pos.left, y, doc);\n      }\n    };\n    var intoWindowIfNeeded = function (doc, scrollTop, viewHeight, marker, alignToTop) {\n      var viewportBottom = viewHeight + scrollTop;\n      var markerTop = marker.pos.top;\n      var markerBottom = marker.bottom;\n      var largerThanViewport = markerBottom - markerTop >= viewHeight;\n      if (markerTop < scrollTop) {\n        scrollToMarker(marker, viewHeight, alignToTop !== false, doc);\n      } else if (markerTop > viewportBottom) {\n        var align = largerThanViewport ? alignToTop !== false : alignToTop === true;\n        scrollToMarker(marker, viewHeight, align, doc);\n      } else if (markerBottom > viewportBottom && !largerThanViewport) {\n        scrollToMarker(marker, viewHeight, alignToTop === true, doc);\n      }\n    };\n    var intoWindow = function (doc, scrollTop, marker, alignToTop) {\n      var viewHeight = doc.dom.defaultView.innerHeight;\n      intoWindowIfNeeded(doc, scrollTop, viewHeight, marker, alignToTop);\n    };\n    var intoFrame = function (doc, scrollTop, marker, alignToTop) {\n      var frameViewHeight = doc.dom.defaultView.innerHeight;\n      intoWindowIfNeeded(doc, scrollTop, frameViewHeight, marker, alignToTop);\n      var op = find$1(marker.element);\n      var viewportBounds = getBounds(window);\n      if (op.top < viewportBounds.y) {\n        intoView(marker.element, alignToTop !== false);\n      } else if (op.top > viewportBounds.bottom) {\n        intoView(marker.element, alignToTop === true);\n      }\n    };\n    var rangeIntoWindow = function (editor, rng, alignToTop) {\n      return withMarker(editor, intoWindow, rng, alignToTop);\n    };\n    var elementIntoWindow = function (editor, element, alignToTop) {\n      return withElement(editor, element, intoWindow, alignToTop);\n    };\n    var rangeIntoFrame = function (editor, rng, alignToTop) {\n      return withMarker(editor, intoFrame, rng, alignToTop);\n    };\n    var elementIntoFrame = function (editor, element, alignToTop) {\n      return withElement(editor, element, intoFrame, alignToTop);\n    };\n    var scrollElementIntoView = function (editor, element, alignToTop) {\n      var scroller = editor.inline ? elementIntoWindow : elementIntoFrame;\n      scroller(editor, element, alignToTop);\n    };\n    var scrollRangeIntoView = function (editor, rng, alignToTop) {\n      var scroller = editor.inline ? rangeIntoWindow : rangeIntoFrame;\n      scroller(editor, rng, alignToTop);\n    };\n\n    var getDocument = function () {\n      return SugarElement.fromDom(document);\n    };\n\n    var focus$1 = function (element) {\n      return element.dom.focus();\n    };\n    var hasFocus$1 = function (element) {\n      var root = getRootNode(element).dom;\n      return element.dom === root.activeElement;\n    };\n    var active = function (root) {\n      if (root === void 0) {\n        root = getDocument();\n      }\n      return Optional.from(root.dom.activeElement).map(SugarElement.fromDom);\n    };\n    var search = function (element) {\n      return active(getRootNode(element)).filter(function (e) {\n        return element.dom.contains(e.dom);\n      });\n    };\n\n    var create$5 = function (start, soffset, finish, foffset) {\n      return {\n        start: start,\n        soffset: soffset,\n        finish: finish,\n        foffset: foffset\n      };\n    };\n    var SimRange = { create: create$5 };\n\n    var adt$1 = Adt.generate([\n      { before: ['element'] },\n      {\n        on: [\n          'element',\n          'offset'\n        ]\n      },\n      { after: ['element'] }\n    ]);\n    var cata = function (subject, onBefore, onOn, onAfter) {\n      return subject.fold(onBefore, onOn, onAfter);\n    };\n    var getStart$2 = function (situ) {\n      return situ.fold(identity, identity, identity);\n    };\n    var before$1 = adt$1.before;\n    var on = adt$1.on;\n    var after$1 = adt$1.after;\n    var Situ = {\n      before: before$1,\n      on: on,\n      after: after$1,\n      cata: cata,\n      getStart: getStart$2\n    };\n\n    var adt = Adt.generate([\n      { domRange: ['rng'] },\n      {\n        relative: [\n          'startSitu',\n          'finishSitu'\n        ]\n      },\n      {\n        exact: [\n          'start',\n          'soffset',\n          'finish',\n          'foffset'\n        ]\n      }\n    ]);\n    var exactFromRange = function (simRange) {\n      return adt.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n    };\n    var getStart$1 = function (selection) {\n      return selection.match({\n        domRange: function (rng) {\n          return SugarElement.fromDom(rng.startContainer);\n        },\n        relative: function (startSitu, _finishSitu) {\n          return Situ.getStart(startSitu);\n        },\n        exact: function (start, _soffset, _finish, _foffset) {\n          return start;\n        }\n      });\n    };\n    var domRange = adt.domRange;\n    var relative = adt.relative;\n    var exact = adt.exact;\n    var getWin = function (selection) {\n      var start = getStart$1(selection);\n      return defaultView(start);\n    };\n    var range = SimRange.create;\n    var SimSelection = {\n      domRange: domRange,\n      relative: relative,\n      exact: exact,\n      exactFromRange: exactFromRange,\n      getWin: getWin,\n      range: range\n    };\n\n    var browser$1 = detect().browser;\n    var clamp$1 = function (offset, element) {\n      var max = isText$8(element) ? get$2(element).length : children(element).length + 1;\n      if (offset > max) {\n        return max;\n      } else if (offset < 0) {\n        return 0;\n      }\n      return offset;\n    };\n    var normalizeRng = function (rng) {\n      return SimSelection.range(rng.start, clamp$1(rng.soffset, rng.start), rng.finish, clamp$1(rng.foffset, rng.finish));\n    };\n    var isOrContains = function (root, elm) {\n      return !isRestrictedNode(elm.dom) && (contains$1(root, elm) || eq(root, elm));\n    };\n    var isRngInRoot = function (root) {\n      return function (rng) {\n        return isOrContains(root, rng.start) && isOrContains(root, rng.finish);\n      };\n    };\n    var shouldStore = function (editor) {\n      return editor.inline === true || browser$1.isIE();\n    };\n    var nativeRangeToSelectionRange = function (r) {\n      return SimSelection.range(SugarElement.fromDom(r.startContainer), r.startOffset, SugarElement.fromDom(r.endContainer), r.endOffset);\n    };\n    var readRange = function (win) {\n      var selection = win.getSelection();\n      var rng = !selection || selection.rangeCount === 0 ? Optional.none() : Optional.from(selection.getRangeAt(0));\n      return rng.map(nativeRangeToSelectionRange);\n    };\n    var getBookmark = function (root) {\n      var win = defaultView(root);\n      return readRange(win.dom).filter(isRngInRoot(root));\n    };\n    var validate = function (root, bookmark) {\n      return Optional.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng);\n    };\n    var bookmarkToNativeRng = function (bookmark) {\n      var rng = document.createRange();\n      try {\n        rng.setStart(bookmark.start.dom, bookmark.soffset);\n        rng.setEnd(bookmark.finish.dom, bookmark.foffset);\n        return Optional.some(rng);\n      } catch (_) {\n        return Optional.none();\n      }\n    };\n    var store = function (editor) {\n      var newBookmark = shouldStore(editor) ? getBookmark(SugarElement.fromDom(editor.getBody())) : Optional.none();\n      editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n    };\n    var storeNative = function (editor, rng) {\n      var root = SugarElement.fromDom(editor.getBody());\n      var range = shouldStore(editor) ? Optional.from(rng) : Optional.none();\n      var newBookmark = range.map(nativeRangeToSelectionRange).filter(isRngInRoot(root));\n      editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n    };\n    var getRng = function (editor) {\n      var bookmark = editor.bookmark ? editor.bookmark : Optional.none();\n      return bookmark.bind(function (x) {\n        return validate(SugarElement.fromDom(editor.getBody()), x);\n      }).bind(bookmarkToNativeRng);\n    };\n    var restore = function (editor) {\n      getRng(editor).each(function (rng) {\n        return editor.selection.setRng(rng);\n      });\n    };\n\n    var isEditorUIElement$1 = function (elm) {\n      var className = elm.className.toString();\n      return className.indexOf('tox-') !== -1 || className.indexOf('mce-') !== -1;\n    };\n    var FocusManager = { isEditorUIElement: isEditorUIElement$1 };\n\n    var isManualNodeChange = function (e) {\n      return e.type === 'nodechange' && e.selectionChange;\n    };\n    var registerPageMouseUp = function (editor, throttledStore) {\n      var mouseUpPage = function () {\n        throttledStore.throttle();\n      };\n      DOMUtils.DOM.bind(document, 'mouseup', mouseUpPage);\n      editor.on('remove', function () {\n        DOMUtils.DOM.unbind(document, 'mouseup', mouseUpPage);\n      });\n    };\n    var registerFocusOut = function (editor) {\n      editor.on('focusout', function () {\n        store(editor);\n      });\n    };\n    var registerMouseUp = function (editor, throttledStore) {\n      editor.on('mouseup touchend', function (_e) {\n        throttledStore.throttle();\n      });\n    };\n    var registerEditorEvents = function (editor, throttledStore) {\n      var browser = detect().browser;\n      if (browser.isIE()) {\n        registerFocusOut(editor);\n      } else {\n        registerMouseUp(editor, throttledStore);\n      }\n      editor.on('keyup NodeChange', function (e) {\n        if (!isManualNodeChange(e)) {\n          store(editor);\n        }\n      });\n    };\n    var register$3 = function (editor) {\n      var throttledStore = first(function () {\n        store(editor);\n      }, 0);\n      editor.on('init', function () {\n        if (editor.inline) {\n          registerPageMouseUp(editor, throttledStore);\n        }\n        registerEditorEvents(editor, throttledStore);\n      });\n      editor.on('remove', function () {\n        throttledStore.cancel();\n      });\n    };\n\n    var documentFocusInHandler;\n    var DOM$8 = DOMUtils.DOM;\n    var isEditorUIElement = function (elm) {\n      return FocusManager.isEditorUIElement(elm);\n    };\n    var isEditorContentAreaElement = function (elm) {\n      var classList = elm.classList;\n      if (classList !== undefined) {\n        return classList.contains('tox-edit-area') || classList.contains('tox-edit-area__iframe') || classList.contains('mce-content-body');\n      } else {\n        return false;\n      }\n    };\n    var isUIElement = function (editor, elm) {\n      var customSelector = getCustomUiSelector(editor);\n      var parent = DOM$8.getParent(elm, function (elm) {\n        return isEditorUIElement(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);\n      });\n      return parent !== null;\n    };\n    var getActiveElement = function (editor) {\n      try {\n        var root = getRootNode(SugarElement.fromDom(editor.getElement()));\n        return active(root).fold(function () {\n          return document.body;\n        }, function (x) {\n          return x.dom;\n        });\n      } catch (ex) {\n        return document.body;\n      }\n    };\n    var registerEvents$1 = function (editorManager, e) {\n      var editor = e.editor;\n      register$3(editor);\n      editor.on('focusin', function () {\n        var focusedEditor = editorManager.focusedEditor;\n        if (focusedEditor !== editor) {\n          if (focusedEditor) {\n            focusedEditor.fire('blur', { focusedEditor: editor });\n          }\n          editorManager.setActive(editor);\n          editorManager.focusedEditor = editor;\n          editor.fire('focus', { blurredEditor: focusedEditor });\n          editor.focus(true);\n        }\n      });\n      editor.on('focusout', function () {\n        Delay.setEditorTimeout(editor, function () {\n          var focusedEditor = editorManager.focusedEditor;\n          if (!isUIElement(editor, getActiveElement(editor)) && focusedEditor === editor) {\n            editor.fire('blur', { focusedEditor: null });\n            editorManager.focusedEditor = null;\n          }\n        });\n      });\n      if (!documentFocusInHandler) {\n        documentFocusInHandler = function (e) {\n          var activeEditor = editorManager.activeEditor;\n          if (activeEditor) {\n            getOriginalEventTarget(e).each(function (target) {\n              if (target.ownerDocument === document) {\n                if (target !== document.body && !isUIElement(activeEditor, target) && editorManager.focusedEditor === activeEditor) {\n                  activeEditor.fire('blur', { focusedEditor: null });\n                  editorManager.focusedEditor = null;\n                }\n              }\n            });\n          }\n        };\n        DOM$8.bind(document, 'focusin', documentFocusInHandler);\n      }\n    };\n    var unregisterDocumentEvents = function (editorManager, e) {\n      if (editorManager.focusedEditor === e.editor) {\n        editorManager.focusedEditor = null;\n      }\n      if (!editorManager.activeEditor) {\n        DOM$8.unbind(document, 'focusin', documentFocusInHandler);\n        documentFocusInHandler = null;\n      }\n    };\n    var setup$l = function (editorManager) {\n      editorManager.on('AddEditor', curry(registerEvents$1, editorManager));\n      editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));\n    };\n\n    var getContentEditableHost = function (editor, node) {\n      return editor.dom.getParent(node, function (node) {\n        return editor.dom.getContentEditable(node) === 'true';\n      });\n    };\n    var getCollapsedNode = function (rng) {\n      return rng.collapsed ? Optional.from(getNode$1(rng.startContainer, rng.startOffset)).map(SugarElement.fromDom) : Optional.none();\n    };\n    var getFocusInElement = function (root, rng) {\n      return getCollapsedNode(rng).bind(function (node) {\n        if (isTableSection(node)) {\n          return Optional.some(node);\n        } else if (contains$1(root, node) === false) {\n          return Optional.some(root);\n        } else {\n          return Optional.none();\n        }\n      });\n    };\n    var normalizeSelection$1 = function (editor, rng) {\n      getFocusInElement(SugarElement.fromDom(editor.getBody()), rng).bind(function (elm) {\n        return firstPositionIn(elm.dom);\n      }).fold(function () {\n        editor.selection.normalize();\n        return;\n      }, function (caretPos) {\n        return editor.selection.setRng(caretPos.toRange());\n      });\n    };\n    var focusBody = function (body) {\n      if (body.setActive) {\n        try {\n          body.setActive();\n        } catch (ex) {\n          body.focus();\n        }\n      } else {\n        body.focus();\n      }\n    };\n    var hasElementFocus = function (elm) {\n      return hasFocus$1(elm) || search(elm).isSome();\n    };\n    var hasIframeFocus = function (editor) {\n      return editor.iframeElement && hasFocus$1(SugarElement.fromDom(editor.iframeElement));\n    };\n    var hasInlineFocus = function (editor) {\n      var rawBody = editor.getBody();\n      return rawBody && hasElementFocus(SugarElement.fromDom(rawBody));\n    };\n    var hasUiFocus = function (editor) {\n      var dos = getRootNode(SugarElement.fromDom(editor.getElement()));\n      return active(dos).filter(function (elem) {\n        return !isEditorContentAreaElement(elem.dom) && isUIElement(editor, elem.dom);\n      }).isSome();\n    };\n    var hasFocus = function (editor) {\n      return editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n    };\n    var hasEditorOrUiFocus = function (editor) {\n      return hasFocus(editor) || hasUiFocus(editor);\n    };\n    var focusEditor = function (editor) {\n      var selection = editor.selection;\n      var body = editor.getBody();\n      var rng = selection.getRng();\n      editor.quirks.refreshContentEditable();\n      if (editor.bookmark !== undefined && hasFocus(editor) === false) {\n        getRng(editor).each(function (bookmarkRng) {\n          editor.selection.setRng(bookmarkRng);\n          rng = bookmarkRng;\n        });\n      }\n      var contentEditableHost = getContentEditableHost(editor, selection.getNode());\n      if (editor.$.contains(body, contentEditableHost)) {\n        focusBody(contentEditableHost);\n        normalizeSelection$1(editor, rng);\n        activateEditor(editor);\n        return;\n      }\n      if (!editor.inline) {\n        if (!Env.opera) {\n          focusBody(body);\n        }\n        editor.getWin().focus();\n      }\n      if (Env.gecko || editor.inline) {\n        focusBody(body);\n        normalizeSelection$1(editor, rng);\n      }\n      activateEditor(editor);\n    };\n    var activateEditor = function (editor) {\n      return editor.editorManager.setActive(editor);\n    };\n    var focus = function (editor, skipFocus) {\n      if (editor.removed) {\n        return;\n      }\n      if (skipFocus) {\n        activateEditor(editor);\n      } else {\n        focusEditor(editor);\n      }\n    };\n\n    var getEndpointElement = function (root, rng, start, real, resolve) {\n      var container = start ? rng.startContainer : rng.endContainer;\n      var offset = start ? rng.startOffset : rng.endOffset;\n      return Optional.from(container).map(SugarElement.fromDom).map(function (elm) {\n        return !real || !rng.collapsed ? child$1(elm, resolve(elm, offset)).getOr(elm) : elm;\n      }).bind(function (elm) {\n        return isElement$6(elm) ? Optional.some(elm) : parent(elm).filter(isElement$6);\n      }).map(function (elm) {\n        return elm.dom;\n      }).getOr(root);\n    };\n    var getStart = function (root, rng, real) {\n      return getEndpointElement(root, rng, true, real, function (elm, offset) {\n        return Math.min(childNodesCount(elm), offset);\n      });\n    };\n    var getEnd = function (root, rng, real) {\n      return getEndpointElement(root, rng, false, real, function (elm, offset) {\n        return offset > 0 ? offset - 1 : offset;\n      });\n    };\n    var skipEmptyTextNodes = function (node, forwards) {\n      var orig = node;\n      while (node && isText$7(node) && node.length === 0) {\n        node = forwards ? node.nextSibling : node.previousSibling;\n      }\n      return node || orig;\n    };\n    var getNode = function (root, rng) {\n      var elm, startContainer, endContainer;\n      if (!rng) {\n        return root;\n      }\n      startContainer = rng.startContainer;\n      endContainer = rng.endContainer;\n      var startOffset = rng.startOffset;\n      var endOffset = rng.endOffset;\n      elm = rng.commonAncestorContainer;\n      if (!rng.collapsed) {\n        if (startContainer === endContainer) {\n          if (endOffset - startOffset < 2) {\n            if (startContainer.hasChildNodes()) {\n              elm = startContainer.childNodes[startOffset];\n            }\n          }\n        }\n        if (startContainer.nodeType === 3 && endContainer.nodeType === 3) {\n          if (startContainer.length === startOffset) {\n            startContainer = skipEmptyTextNodes(startContainer.nextSibling, true);\n          } else {\n            startContainer = startContainer.parentNode;\n          }\n          if (endOffset === 0) {\n            endContainer = skipEmptyTextNodes(endContainer.previousSibling, false);\n          } else {\n            endContainer = endContainer.parentNode;\n          }\n          if (startContainer && startContainer === endContainer) {\n            return startContainer;\n          }\n        }\n      }\n      if (elm && elm.nodeType === 3) {\n        return elm.parentNode;\n      }\n      return elm;\n    };\n    var getSelectedBlocks = function (dom, rng, startElm, endElm) {\n      var node;\n      var selectedBlocks = [];\n      var root = dom.getRoot();\n      startElm = dom.getParent(startElm || getStart(root, rng, rng.collapsed), dom.isBlock);\n      endElm = dom.getParent(endElm || getEnd(root, rng, rng.collapsed), dom.isBlock);\n      if (startElm && startElm !== root) {\n        selectedBlocks.push(startElm);\n      }\n      if (startElm && endElm && startElm !== endElm) {\n        node = startElm;\n        var walker = new DomTreeWalker(startElm, root);\n        while ((node = walker.next()) && node !== endElm) {\n          if (dom.isBlock(node)) {\n            selectedBlocks.push(node);\n          }\n        }\n      }\n      if (endElm && startElm !== endElm && endElm !== root) {\n        selectedBlocks.push(endElm);\n      }\n      return selectedBlocks;\n    };\n    var select = function (dom, node, content) {\n      return Optional.from(node).map(function (node) {\n        var idx = dom.nodeIndex(node);\n        var rng = dom.createRng();\n        rng.setStart(node.parentNode, idx);\n        rng.setEnd(node.parentNode, idx + 1);\n        if (content) {\n          moveEndPoint(dom, rng, node, true);\n          moveEndPoint(dom, rng, node, false);\n        }\n        return rng;\n      });\n    };\n\n    var processRanges = function (editor, ranges) {\n      return map$3(ranges, function (range) {\n        var evt = editor.fire('GetSelectionRange', { range: range });\n        return evt.range !== range ? evt.range : range;\n      });\n    };\n\n    var typeLookup = {\n      '#text': 3,\n      '#comment': 8,\n      '#cdata': 4,\n      '#pi': 7,\n      '#doctype': 10,\n      '#document-fragment': 11\n    };\n    var walk$1 = function (node, root, prev) {\n      var startName = prev ? 'lastChild' : 'firstChild';\n      var siblingName = prev ? 'prev' : 'next';\n      if (node[startName]) {\n        return node[startName];\n      }\n      if (node !== root) {\n        var sibling = node[siblingName];\n        if (sibling) {\n          return sibling;\n        }\n        for (var parent_1 = node.parent; parent_1 && parent_1 !== root; parent_1 = parent_1.parent) {\n          sibling = parent_1[siblingName];\n          if (sibling) {\n            return sibling;\n          }\n        }\n      }\n    };\n    var isEmptyTextNode = function (node) {\n      if (!isWhitespaceText(node.value)) {\n        return false;\n      }\n      var parentNode = node.parent;\n      if (parentNode && (parentNode.name !== 'span' || parentNode.attr('style')) && /^[ ]+$/.test(node.value)) {\n        return false;\n      }\n      return true;\n    };\n    var isNonEmptyElement = function (node) {\n      var isNamedAnchor = node.name === 'a' && !node.attr('href') && node.attr('id');\n      return node.attr('name') || node.attr('id') && !node.firstChild || node.attr('data-mce-bookmark') || isNamedAnchor;\n    };\n    var AstNode = function () {\n      function AstNode(name, type) {\n        this.name = name;\n        this.type = type;\n        if (type === 1) {\n          this.attributes = [];\n          this.attributes.map = {};\n        }\n      }\n      AstNode.create = function (name, attrs) {\n        var node = new AstNode(name, typeLookup[name] || 1);\n        if (attrs) {\n          each$j(attrs, function (value, attrName) {\n            node.attr(attrName, value);\n          });\n        }\n        return node;\n      };\n      AstNode.prototype.replace = function (node) {\n        var self = this;\n        if (node.parent) {\n          node.remove();\n        }\n        self.insert(node, self);\n        self.remove();\n        return self;\n      };\n      AstNode.prototype.attr = function (name, value) {\n        var self = this;\n        var attrs;\n        if (typeof name !== 'string') {\n          if (name !== undefined && name !== null) {\n            each$j(name, function (value, key) {\n              self.attr(key, value);\n            });\n          }\n          return self;\n        }\n        if (attrs = self.attributes) {\n          if (value !== undefined) {\n            if (value === null) {\n              if (name in attrs.map) {\n                delete attrs.map[name];\n                var i = attrs.length;\n                while (i--) {\n                  if (attrs[i].name === name) {\n                    attrs.splice(i, 1);\n                    return self;\n                  }\n                }\n              }\n              return self;\n            }\n            if (name in attrs.map) {\n              var i = attrs.length;\n              while (i--) {\n                if (attrs[i].name === name) {\n                  attrs[i].value = value;\n                  break;\n                }\n              }\n            } else {\n              attrs.push({\n                name: name,\n                value: value\n              });\n            }\n            attrs.map[name] = value;\n            return self;\n          }\n          return attrs.map[name];\n        }\n      };\n      AstNode.prototype.clone = function () {\n        var self = this;\n        var clone = new AstNode(self.name, self.type);\n        var selfAttrs;\n        if (selfAttrs = self.attributes) {\n          var cloneAttrs = [];\n          cloneAttrs.map = {};\n          for (var i = 0, l = selfAttrs.length; i < l; i++) {\n            var selfAttr = selfAttrs[i];\n            if (selfAttr.name !== 'id') {\n              cloneAttrs[cloneAttrs.length] = {\n                name: selfAttr.name,\n                value: selfAttr.value\n              };\n              cloneAttrs.map[selfAttr.name] = selfAttr.value;\n            }\n          }\n          clone.attributes = cloneAttrs;\n        }\n        clone.value = self.value;\n        clone.shortEnded = self.shortEnded;\n        return clone;\n      };\n      AstNode.prototype.wrap = function (wrapper) {\n        var self = this;\n        self.parent.insert(wrapper, self);\n        wrapper.append(self);\n        return self;\n      };\n      AstNode.prototype.unwrap = function () {\n        var self = this;\n        for (var node = self.firstChild; node;) {\n          var next = node.next;\n          self.insert(node, self, true);\n          node = next;\n        }\n        self.remove();\n      };\n      AstNode.prototype.remove = function () {\n        var self = this, parent = self.parent, next = self.next, prev = self.prev;\n        if (parent) {\n          if (parent.firstChild === self) {\n            parent.firstChild = next;\n            if (next) {\n              next.prev = null;\n            }\n          } else {\n            prev.next = next;\n          }\n          if (parent.lastChild === self) {\n            parent.lastChild = prev;\n            if (prev) {\n              prev.next = null;\n            }\n          } else {\n            next.prev = prev;\n          }\n          self.parent = self.next = self.prev = null;\n        }\n        return self;\n      };\n      AstNode.prototype.append = function (node) {\n        var self = this;\n        if (node.parent) {\n          node.remove();\n        }\n        var last = self.lastChild;\n        if (last) {\n          last.next = node;\n          node.prev = last;\n          self.lastChild = node;\n        } else {\n          self.lastChild = self.firstChild = node;\n        }\n        node.parent = self;\n        return node;\n      };\n      AstNode.prototype.insert = function (node, refNode, before) {\n        if (node.parent) {\n          node.remove();\n        }\n        var parent = refNode.parent || this;\n        if (before) {\n          if (refNode === parent.firstChild) {\n            parent.firstChild = node;\n          } else {\n            refNode.prev.next = node;\n          }\n          node.prev = refNode.prev;\n          node.next = refNode;\n          refNode.prev = node;\n        } else {\n          if (refNode === parent.lastChild) {\n            parent.lastChild = node;\n          } else {\n            refNode.next.prev = node;\n          }\n          node.next = refNode.next;\n          node.prev = refNode;\n          refNode.next = node;\n        }\n        node.parent = parent;\n        return node;\n      };\n      AstNode.prototype.getAll = function (name) {\n        var self = this;\n        var collection = [];\n        for (var node = self.firstChild; node; node = walk$1(node, self)) {\n          if (node.name === name) {\n            collection.push(node);\n          }\n        }\n        return collection;\n      };\n      AstNode.prototype.children = function () {\n        var self = this;\n        var collection = [];\n        for (var node = self.firstChild; node; node = node.next) {\n          collection.push(node);\n        }\n        return collection;\n      };\n      AstNode.prototype.empty = function () {\n        var self = this;\n        if (self.firstChild) {\n          var nodes = [];\n          for (var node = self.firstChild; node; node = walk$1(node, self)) {\n            nodes.push(node);\n          }\n          var i = nodes.length;\n          while (i--) {\n            var node = nodes[i];\n            node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;\n          }\n        }\n        self.firstChild = self.lastChild = null;\n        return self;\n      };\n      AstNode.prototype.isEmpty = function (elements, whitespace, predicate) {\n        if (whitespace === void 0) {\n          whitespace = {};\n        }\n        var self = this;\n        var node = self.firstChild;\n        if (isNonEmptyElement(self)) {\n          return false;\n        }\n        if (node) {\n          do {\n            if (node.type === 1) {\n              if (node.attr('data-mce-bogus')) {\n                continue;\n              }\n              if (elements[node.name]) {\n                return false;\n              }\n              if (isNonEmptyElement(node)) {\n                return false;\n              }\n            }\n            if (node.type === 8) {\n              return false;\n            }\n            if (node.type === 3 && !isEmptyTextNode(node)) {\n              return false;\n            }\n            if (node.type === 3 && node.parent && whitespace[node.parent.name] && isWhitespaceText(node.value)) {\n              return false;\n            }\n            if (predicate && predicate(node)) {\n              return false;\n            }\n          } while (node = walk$1(node, self));\n        }\n        return true;\n      };\n      AstNode.prototype.walk = function (prev) {\n        return walk$1(this, null, prev);\n      };\n      return AstNode;\n    }();\n\n    var extractBase64DataUris = function (html) {\n      var dataImageUri = /data:[^;<\"'\\s]+;base64,([a-z0-9\\+\\/=\\s]+)/gi;\n      var chunks = [];\n      var uris = {};\n      var prefix = generate('img');\n      var matches;\n      var index = 0;\n      var count = 0;\n      while (matches = dataImageUri.exec(html)) {\n        var uri = matches[0];\n        var imageId = prefix + '_' + count++;\n        uris[imageId] = uri;\n        if (index < matches.index) {\n          chunks.push(html.substr(index, matches.index - index));\n        }\n        chunks.push(imageId);\n        index = matches.index + uri.length;\n      }\n      var re = new RegExp(prefix + '_[0-9]+', 'g');\n      if (index === 0) {\n        return {\n          prefix: prefix,\n          uris: uris,\n          html: html,\n          re: re\n        };\n      } else {\n        if (index < html.length) {\n          chunks.push(html.substr(index));\n        }\n        return {\n          prefix: prefix,\n          uris: uris,\n          html: chunks.join(''),\n          re: re\n        };\n      }\n    };\n    var restoreDataUris = function (html, result) {\n      return html.replace(result.re, function (imageId) {\n        return get$9(result.uris, imageId).getOr(imageId);\n      });\n    };\n    var parseDataUri$1 = function (uri) {\n      var matches = /data:([^;]+);base64,([a-z0-9\\+\\/=\\s]+)/i.exec(uri);\n      if (matches) {\n        return Optional.some({\n          type: matches[1],\n          data: decodeURIComponent(matches[2])\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n\n    var each$d = Tools.each, trim = Tools.trim;\n    var queryParts = 'source protocol authority userInfo user password host port relative path directory file query anchor'.split(' ');\n    var DEFAULT_PORTS = {\n      ftp: 21,\n      http: 80,\n      https: 443,\n      mailto: 25\n    };\n    var safeSvgDataUrlElements = [\n      'img',\n      'video'\n    ];\n    var blockSvgDataUris = function (allowSvgDataUrls, tagName) {\n      if (isNonNullable(allowSvgDataUrls)) {\n        return !allowSvgDataUrls;\n      } else {\n        return isNonNullable(tagName) ? !contains$3(safeSvgDataUrlElements, tagName) : true;\n      }\n    };\n    var isInvalidUri = function (settings, uri, tagName) {\n      if (settings.allow_html_data_urls) {\n        return false;\n      } else if (/^data:image\\//i.test(uri)) {\n        return blockSvgDataUris(settings.allow_svg_data_urls, tagName) && /^data:image\\/svg\\+xml/i.test(uri);\n      } else {\n        return /^data:/i.test(uri);\n      }\n    };\n    var URI = function () {\n      function URI(url, settings) {\n        url = trim(url);\n        this.settings = settings || {};\n        var baseUri = this.settings.base_uri;\n        var self = this;\n        if (/^([\\w\\-]+):([^\\/]{2})/i.test(url) || /^\\s*#/.test(url)) {\n          self.source = url;\n          return;\n        }\n        var isProtocolRelative = url.indexOf('//') === 0;\n        if (url.indexOf('/') === 0 && !isProtocolRelative) {\n          url = (baseUri ? baseUri.protocol || 'http' : 'http') + '://mce_host' + url;\n        }\n        if (!/^[\\w\\-]*:?\\/\\//.test(url)) {\n          var baseUrl = this.settings.base_uri ? this.settings.base_uri.path : new URI(document.location.href).directory;\n          if (this.settings.base_uri && this.settings.base_uri.protocol == '') {\n            url = '//mce_host' + self.toAbsPath(baseUrl, url);\n          } else {\n            var match = /([^#?]*)([#?]?.*)/.exec(url);\n            url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self.toAbsPath(baseUrl, match[1]) + match[2];\n          }\n        }\n        url = url.replace(/@@/g, '(mce_at)');\n        var urlMatch = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?(\\[[a-zA-Z0-9:.%]+\\]|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(url);\n        each$d(queryParts, function (v, i) {\n          var part = urlMatch[i];\n          if (part) {\n            part = part.replace(/\\(mce_at\\)/g, '@@');\n          }\n          self[v] = part;\n        });\n        if (baseUri) {\n          if (!self.protocol) {\n            self.protocol = baseUri.protocol;\n          }\n          if (!self.userInfo) {\n            self.userInfo = baseUri.userInfo;\n          }\n          if (!self.port && self.host === 'mce_host') {\n            self.port = baseUri.port;\n          }\n          if (!self.host || self.host === 'mce_host') {\n            self.host = baseUri.host;\n          }\n          self.source = '';\n        }\n        if (isProtocolRelative) {\n          self.protocol = '';\n        }\n      }\n      URI.parseDataUri = function (uri) {\n        var type;\n        var uriComponents = decodeURIComponent(uri).split(',');\n        var matches = /data:([^;]+)/.exec(uriComponents[0]);\n        if (matches) {\n          type = matches[1];\n        }\n        return {\n          type: type,\n          data: uriComponents[1]\n        };\n      };\n      URI.isDomSafe = function (uri, context, options) {\n        if (options === void 0) {\n          options = {};\n        }\n        if (options.allow_script_urls) {\n          return true;\n        } else {\n          var decodedUri = Entities.decode(uri).replace(/[\\s\\u0000-\\u001F]+/g, '');\n          try {\n            decodedUri = decodeURIComponent(decodedUri);\n          } catch (ex) {\n            decodedUri = unescape(decodedUri);\n          }\n          if (/((java|vb)script|mhtml):/i.test(decodedUri)) {\n            return false;\n          }\n          return !isInvalidUri(options, decodedUri, context);\n        }\n      };\n      URI.getDocumentBaseUrl = function (loc) {\n        var baseUrl;\n        if (loc.protocol.indexOf('http') !== 0 && loc.protocol !== 'file:') {\n          baseUrl = loc.href;\n        } else {\n          baseUrl = loc.protocol + '//' + loc.host + loc.pathname;\n        }\n        if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(baseUrl)) {\n          baseUrl = baseUrl.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n          if (!/[\\/\\\\]$/.test(baseUrl)) {\n            baseUrl += '/';\n          }\n        }\n        return baseUrl;\n      };\n      URI.prototype.setPath = function (path) {\n        var pathMatch = /^(.*?)\\/?(\\w+)?$/.exec(path);\n        this.path = pathMatch[0];\n        this.directory = pathMatch[1];\n        this.file = pathMatch[2];\n        this.source = '';\n        this.getURI();\n      };\n      URI.prototype.toRelative = function (uri) {\n        var output;\n        if (uri === './') {\n          return uri;\n        }\n        var relativeUri = new URI(uri, { base_uri: this });\n        if (relativeUri.host !== 'mce_host' && this.host !== relativeUri.host && relativeUri.host || this.port !== relativeUri.port || this.protocol !== relativeUri.protocol && relativeUri.protocol !== '') {\n          return relativeUri.getURI();\n        }\n        var tu = this.getURI(), uu = relativeUri.getURI();\n        if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) {\n          return tu;\n        }\n        output = this.toRelPath(this.path, relativeUri.path);\n        if (relativeUri.query) {\n          output += '?' + relativeUri.query;\n        }\n        if (relativeUri.anchor) {\n          output += '#' + relativeUri.anchor;\n        }\n        return output;\n      };\n      URI.prototype.toAbsolute = function (uri, noHost) {\n        var absoluteUri = new URI(uri, { base_uri: this });\n        return absoluteUri.getURI(noHost && this.isSameOrigin(absoluteUri));\n      };\n      URI.prototype.isSameOrigin = function (uri) {\n        if (this.host == uri.host && this.protocol == uri.protocol) {\n          if (this.port == uri.port) {\n            return true;\n          }\n          var defaultPort = DEFAULT_PORTS[this.protocol];\n          if (defaultPort && (this.port || defaultPort) == (uri.port || defaultPort)) {\n            return true;\n          }\n        }\n        return false;\n      };\n      URI.prototype.toRelPath = function (base, path) {\n        var breakPoint = 0, out = '', i, l;\n        var normalizedBase = base.substring(0, base.lastIndexOf('/')).split('/');\n        var items = path.split('/');\n        if (normalizedBase.length >= items.length) {\n          for (i = 0, l = normalizedBase.length; i < l; i++) {\n            if (i >= items.length || normalizedBase[i] !== items[i]) {\n              breakPoint = i + 1;\n              break;\n            }\n          }\n        }\n        if (normalizedBase.length < items.length) {\n          for (i = 0, l = items.length; i < l; i++) {\n            if (i >= normalizedBase.length || normalizedBase[i] !== items[i]) {\n              breakPoint = i + 1;\n              break;\n            }\n          }\n        }\n        if (breakPoint === 1) {\n          return path;\n        }\n        for (i = 0, l = normalizedBase.length - (breakPoint - 1); i < l; i++) {\n          out += '../';\n        }\n        for (i = breakPoint - 1, l = items.length; i < l; i++) {\n          if (i !== breakPoint - 1) {\n            out += '/' + items[i];\n          } else {\n            out += items[i];\n          }\n        }\n        return out;\n      };\n      URI.prototype.toAbsPath = function (base, path) {\n        var i, nb = 0, o = [], outPath;\n        var tr = /\\/$/.test(path) ? '/' : '';\n        var normalizedBase = base.split('/');\n        var normalizedPath = path.split('/');\n        each$d(normalizedBase, function (k) {\n          if (k) {\n            o.push(k);\n          }\n        });\n        normalizedBase = o;\n        for (i = normalizedPath.length - 1, o = []; i >= 0; i--) {\n          if (normalizedPath[i].length === 0 || normalizedPath[i] === '.') {\n            continue;\n          }\n          if (normalizedPath[i] === '..') {\n            nb++;\n            continue;\n          }\n          if (nb > 0) {\n            nb--;\n            continue;\n          }\n          o.push(normalizedPath[i]);\n        }\n        i = normalizedBase.length - nb;\n        if (i <= 0) {\n          outPath = reverse(o).join('/');\n        } else {\n          outPath = normalizedBase.slice(0, i).join('/') + '/' + reverse(o).join('/');\n        }\n        if (outPath.indexOf('/') !== 0) {\n          outPath = '/' + outPath;\n        }\n        if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) {\n          outPath += tr;\n        }\n        return outPath;\n      };\n      URI.prototype.getURI = function (noProtoHost) {\n        if (noProtoHost === void 0) {\n          noProtoHost = false;\n        }\n        var s;\n        if (!this.source || noProtoHost) {\n          s = '';\n          if (!noProtoHost) {\n            if (this.protocol) {\n              s += this.protocol + '://';\n            } else {\n              s += '//';\n            }\n            if (this.userInfo) {\n              s += this.userInfo + '@';\n            }\n            if (this.host) {\n              s += this.host;\n            }\n            if (this.port) {\n              s += ':' + this.port;\n            }\n          }\n          if (this.path) {\n            s += this.path;\n          }\n          if (this.query) {\n            s += '?' + this.query;\n          }\n          if (this.anchor) {\n            s += '#' + this.anchor;\n          }\n          this.source = s;\n        }\n        return this.source;\n      };\n      return URI;\n    }();\n\n    var filteredClobberElements = Tools.makeMap('button,fieldset,form,iframe,img,image,input,object,output,select,textarea');\n    var isValidPrefixAttrName = function (name) {\n      return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0;\n    };\n    var findMatchingEndTagIndex = function (schema, html, startIndex) {\n      var startTagRegExp = /<([!?\\/])?([A-Za-z0-9\\-_:.]+)/g;\n      var endTagRegExp = /(?:\\s(?:[^'\">]+(?:\"[^\"]*\"|'[^']*'))*[^\"'>]*(?:\"[^\">]*|'[^'>]*)?|\\s*|\\/)>/g;\n      var shortEndedElements = schema.getShortEndedElements();\n      var count = 1, index = startIndex;\n      while (count !== 0) {\n        startTagRegExp.lastIndex = index;\n        while (true) {\n          var startMatch = startTagRegExp.exec(html);\n          if (startMatch === null) {\n            return index;\n          } else if (startMatch[1] === '!') {\n            if (startsWith(startMatch[2], '--')) {\n              index = findCommentEndIndex(html, false, startMatch.index + '!--'.length);\n            } else {\n              index = findCommentEndIndex(html, true, startMatch.index + 1);\n            }\n            break;\n          } else {\n            endTagRegExp.lastIndex = startTagRegExp.lastIndex;\n            var endMatch = endTagRegExp.exec(html);\n            if (isNull(endMatch) || endMatch.index !== startTagRegExp.lastIndex) {\n              continue;\n            }\n            if (startMatch[1] === '/') {\n              count -= 1;\n            } else if (!has$2(shortEndedElements, startMatch[2])) {\n              count += 1;\n            }\n            index = startTagRegExp.lastIndex + endMatch[0].length;\n            break;\n          }\n        }\n      }\n      return index;\n    };\n    var isConditionalComment = function (html, startIndex) {\n      return /^\\s*\\[if [\\w\\W]+\\]>.*<!\\[endif\\](--!?)?>/.test(html.substr(startIndex));\n    };\n    var findCommentEndIndex = function (html, isBogus, startIndex) {\n      if (startIndex === void 0) {\n        startIndex = 0;\n      }\n      var lcHtml = html.toLowerCase();\n      if (lcHtml.indexOf('[if ', startIndex) !== -1 && isConditionalComment(lcHtml, startIndex)) {\n        var endIfIndex = lcHtml.indexOf('[endif]', startIndex);\n        return lcHtml.indexOf('>', endIfIndex);\n      } else {\n        if (isBogus) {\n          var endIndex = lcHtml.indexOf('>', startIndex);\n          return endIndex !== -1 ? endIndex : lcHtml.length;\n        } else {\n          var endCommentRegexp = /--!?>/g;\n          endCommentRegexp.lastIndex = startIndex;\n          var match = endCommentRegexp.exec(html);\n          return match ? match.index + match[0].length : lcHtml.length;\n        }\n      }\n    };\n    var checkBogusAttribute = function (regExp, attrString) {\n      var matches = regExp.exec(attrString);\n      if (matches) {\n        var name_1 = matches[1];\n        var value = matches[2];\n        return typeof name_1 === 'string' && name_1.toLowerCase() === 'data-mce-bogus' ? value : null;\n      } else {\n        return null;\n      }\n    };\n    var SaxParser = function (settings, schema) {\n      var _a;\n      if (schema === void 0) {\n        schema = Schema();\n      }\n      settings = settings || {};\n      var doc = (_a = settings.document) !== null && _a !== void 0 ? _a : document;\n      var form = doc.createElement('form');\n      if (settings.fix_self_closing !== false) {\n        settings.fix_self_closing = true;\n      }\n      var comment = settings.comment ? settings.comment : noop;\n      var cdata = settings.cdata ? settings.cdata : noop;\n      var text = settings.text ? settings.text : noop;\n      var start = settings.start ? settings.start : noop;\n      var end = settings.end ? settings.end : noop;\n      var pi = settings.pi ? settings.pi : noop;\n      var doctype = settings.doctype ? settings.doctype : noop;\n      var parseInternal = function (base64Extract, format) {\n        if (format === void 0) {\n          format = 'html';\n        }\n        var html = base64Extract.html;\n        var matches, index = 0, value, endRegExp;\n        var stack = [];\n        var attrList, i, textData, name;\n        var isInternalElement, isShortEnded;\n        var elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns;\n        var attributesRequired, attributesDefault, attributesForced;\n        var anyAttributesRequired, attrValue, idCount = 0;\n        var decode = Entities.decode;\n        var filteredUrlAttrs = Tools.makeMap('src,href,data,background,action,formaction,poster,xlink:href');\n        var parsingMode = format === 'html' ? 0 : 1;\n        var processEndTag = function (name) {\n          var pos, i;\n          pos = stack.length;\n          while (pos--) {\n            if (stack[pos].name === name) {\n              break;\n            }\n          }\n          if (pos >= 0) {\n            for (i = stack.length - 1; i >= pos; i--) {\n              name = stack[i];\n              if (name.valid) {\n                end(name.name);\n              }\n            }\n            stack.length = pos;\n          }\n        };\n        var processText = function (value, raw) {\n          return text(restoreDataUris(value, base64Extract), raw);\n        };\n        var processComment = function (value) {\n          if (value === '') {\n            return;\n          }\n          if (value.charAt(0) === '>') {\n            value = ' ' + value;\n          }\n          if (!settings.allow_conditional_comments && value.substr(0, 3).toLowerCase() === '[if') {\n            value = ' ' + value;\n          }\n          comment(restoreDataUris(value, base64Extract));\n        };\n        var processAttr = function (value) {\n          return restoreDataUris(value, base64Extract);\n        };\n        var processMalformedComment = function (value, startIndex) {\n          var startTag = value || '';\n          var isBogus = !startsWith(startTag, '--');\n          var endIndex = findCommentEndIndex(html, isBogus, startIndex);\n          value = html.substr(startIndex, endIndex - startIndex);\n          processComment(isBogus ? startTag + value : value);\n          return endIndex + 1;\n        };\n        var parseAttribute = function (tagName, name, value, val2, val3) {\n          name = name.toLowerCase();\n          value = processAttr(name in fillAttrsMap ? name : decode(value || val2 || val3 || ''));\n          if (validate && !isInternalElement && isValidPrefixAttrName(name) === false) {\n            var attrRule = validAttributesMap[name];\n            if (!attrRule && validAttributePatterns) {\n              var i_1 = validAttributePatterns.length;\n              while (i_1--) {\n                attrRule = validAttributePatterns[i_1];\n                if (attrRule.pattern.test(name)) {\n                  break;\n                }\n              }\n              if (i_1 === -1) {\n                attrRule = null;\n              }\n            }\n            if (!attrRule) {\n              return;\n            }\n            if (attrRule.validValues && !(value in attrRule.validValues)) {\n              return;\n            }\n          }\n          var isNameOrId = name === 'name' || name === 'id';\n          if (isNameOrId && tagName in filteredClobberElements && (value in doc || value in form)) {\n            return;\n          }\n          if (filteredUrlAttrs[name] && !URI.isDomSafe(value, tagName, settings)) {\n            return;\n          }\n          if (isInternalElement && (name in filteredUrlAttrs || name.indexOf('on') === 0)) {\n            return;\n          }\n          attrList.map[name] = value;\n          attrList.push({\n            name: name,\n            value: value\n          });\n        };\n        var tokenRegExp = new RegExp('<(?:' + '(?:!--([\\\\w\\\\W]*?)--!?>)|' + '(?:!\\\\[CDATA\\\\[([\\\\w\\\\W]*?)\\\\]\\\\]>)|' + '(?:![Dd][Oo][Cc][Tt][Yy][Pp][Ee]([\\\\w\\\\W]*?)>)|' + '(?:!(--)?)|' + '(?:\\\\?([^\\\\s\\\\/<>]+) ?([\\\\w\\\\W]*?)[?/]>)|' + '(?:\\\\/([A-Za-z][A-Za-z0-9\\\\-_\\\\:\\\\.]*)>)|' + '(?:([A-Za-z][A-Za-z0-9\\\\-_:.]*)(\\\\s(?:[^\\'\">]+(?:\"[^\"]*\"|\\'[^\\']*\\'))*[^\"\\'>]*(?:\"[^\">]*|\\'[^\\'>]*)?|\\\\s*|\\\\/)>)' + ')', 'g');\n        var attrRegExp = /([\\w:\\-]+)(?:\\s*=\\s*(?:(?:\\\"((?:[^\\\"])*)\\\")|(?:\\'((?:[^\\'])*)\\')|([^>\\s]+)))?/g;\n        var shortEndedElements = schema.getShortEndedElements();\n        var selfClosing = settings.self_closing_elements || schema.getSelfClosingElements();\n        var fillAttrsMap = schema.getBoolAttrs();\n        var validate = settings.validate;\n        var removeInternalElements = settings.remove_internals;\n        var fixSelfClosing = settings.fix_self_closing;\n        var specialElements = schema.getSpecialElements();\n        var processHtml = html + '>';\n        while (matches = tokenRegExp.exec(processHtml)) {\n          var matchText = matches[0];\n          if (index < matches.index) {\n            processText(decode(html.substr(index, matches.index - index)));\n          }\n          if (value = matches[7]) {\n            value = value.toLowerCase();\n            if (value.charAt(0) === ':') {\n              value = value.substr(1);\n            }\n            processEndTag(value);\n          } else if (value = matches[8]) {\n            if (matches.index + matchText.length > html.length) {\n              processText(decode(html.substr(matches.index)));\n              index = matches.index + matchText.length;\n              continue;\n            }\n            value = value.toLowerCase();\n            if (value.charAt(0) === ':') {\n              value = value.substr(1);\n            }\n            isShortEnded = value in shortEndedElements;\n            if (fixSelfClosing && selfClosing[value] && stack.length > 0 && stack[stack.length - 1].name === value) {\n              processEndTag(value);\n            }\n            var bogusValue = checkBogusAttribute(attrRegExp, matches[9]);\n            if (bogusValue !== null) {\n              if (bogusValue === 'all') {\n                index = findMatchingEndTagIndex(schema, html, tokenRegExp.lastIndex);\n                tokenRegExp.lastIndex = index;\n                continue;\n              }\n              isValidElement = false;\n            }\n            if (!validate || (elementRule = schema.getElementRule(value))) {\n              isValidElement = true;\n              if (validate) {\n                validAttributesMap = elementRule.attributes;\n                validAttributePatterns = elementRule.attributePatterns;\n              }\n              if (attribsValue = matches[9]) {\n                isInternalElement = attribsValue.indexOf('data-mce-type') !== -1;\n                if (isInternalElement && removeInternalElements) {\n                  isValidElement = false;\n                }\n                attrList = [];\n                attrList.map = {};\n                attribsValue.replace(attrRegExp, function (match, name, val, val2, val3) {\n                  parseAttribute(value, name, val, val2, val3);\n                  return '';\n                });\n              } else {\n                attrList = [];\n                attrList.map = {};\n              }\n              if (validate && !isInternalElement) {\n                attributesRequired = elementRule.attributesRequired;\n                attributesDefault = elementRule.attributesDefault;\n                attributesForced = elementRule.attributesForced;\n                anyAttributesRequired = elementRule.removeEmptyAttrs;\n                if (anyAttributesRequired && !attrList.length) {\n                  isValidElement = false;\n                }\n                if (attributesForced) {\n                  i = attributesForced.length;\n                  while (i--) {\n                    attr = attributesForced[i];\n                    name = attr.name;\n                    attrValue = attr.value;\n                    if (attrValue === '{$uid}') {\n                      attrValue = 'mce_' + idCount++;\n                    }\n                    attrList.map[name] = attrValue;\n                    attrList.push({\n                      name: name,\n                      value: attrValue\n                    });\n                  }\n                }\n                if (attributesDefault) {\n                  i = attributesDefault.length;\n                  while (i--) {\n                    attr = attributesDefault[i];\n                    name = attr.name;\n                    if (!(name in attrList.map)) {\n                      attrValue = attr.value;\n                      if (attrValue === '{$uid}') {\n                        attrValue = 'mce_' + idCount++;\n                      }\n                      attrList.map[name] = attrValue;\n                      attrList.push({\n                        name: name,\n                        value: attrValue\n                      });\n                    }\n                  }\n                }\n                if (attributesRequired) {\n                  i = attributesRequired.length;\n                  while (i--) {\n                    if (attributesRequired[i] in attrList.map) {\n                      break;\n                    }\n                  }\n                  if (i === -1) {\n                    isValidElement = false;\n                  }\n                }\n                if (attr = attrList.map['data-mce-bogus']) {\n                  if (attr === 'all') {\n                    index = findMatchingEndTagIndex(schema, html, tokenRegExp.lastIndex);\n                    tokenRegExp.lastIndex = index;\n                    continue;\n                  }\n                  isValidElement = false;\n                }\n              }\n              if (isValidElement) {\n                start(value, attrList, isShortEnded);\n              }\n            } else {\n              isValidElement = false;\n            }\n            if (endRegExp = specialElements[value]) {\n              endRegExp.lastIndex = index = matches.index + matchText.length;\n              if (matches = endRegExp.exec(html)) {\n                if (isValidElement) {\n                  textData = html.substr(index, matches.index - index);\n                }\n                index = matches.index + matches[0].length;\n              } else {\n                textData = html.substr(index);\n                index = html.length;\n              }\n              if (isValidElement) {\n                if (textData.length > 0) {\n                  processText(textData, true);\n                }\n                end(value);\n              }\n              tokenRegExp.lastIndex = index;\n              continue;\n            }\n            if (!isShortEnded) {\n              if (!attribsValue || attribsValue.indexOf('/') !== attribsValue.length - 1) {\n                stack.push({\n                  name: value,\n                  valid: isValidElement\n                });\n              } else if (isValidElement) {\n                end(value);\n              }\n            }\n          } else if (value = matches[1]) {\n            processComment(value);\n          } else if (value = matches[2]) {\n            var isValidCdataSection = parsingMode === 1 || settings.preserve_cdata || stack.length > 0 && schema.isValidChild(stack[stack.length - 1].name, '#cdata');\n            if (isValidCdataSection) {\n              cdata(value);\n            } else {\n              index = processMalformedComment('', matches.index + 2);\n              tokenRegExp.lastIndex = index;\n              continue;\n            }\n          } else if (value = matches[3]) {\n            doctype(value);\n          } else if ((value = matches[4]) || matchText === '<!') {\n            index = processMalformedComment(value, matches.index + matchText.length);\n            tokenRegExp.lastIndex = index;\n            continue;\n          } else if (value = matches[5]) {\n            if (parsingMode === 1) {\n              pi(value, matches[6]);\n            } else {\n              index = processMalformedComment('?', matches.index + 2);\n              tokenRegExp.lastIndex = index;\n              continue;\n            }\n          }\n          index = matches.index + matchText.length;\n        }\n        if (index < html.length) {\n          processText(decode(html.substr(index)));\n        }\n        for (i = stack.length - 1; i >= 0; i--) {\n          value = stack[i];\n          if (value.valid) {\n            end(value.name);\n          }\n        }\n      };\n      var parse = function (html, format) {\n        if (format === void 0) {\n          format = 'html';\n        }\n        parseInternal(extractBase64DataUris(html), format);\n      };\n      return { parse: parse };\n    };\n    SaxParser.findEndTag = findMatchingEndTagIndex;\n\n    var trimHtml = function (tempAttrs, html) {\n      var trimContentRegExp = new RegExp(['\\\\s?(' + tempAttrs.join('|') + ')=\"[^\"]+\"'].join('|'), 'gi');\n      return html.replace(trimContentRegExp, '');\n    };\n    var trimInternal = function (serializer, html) {\n      var bogusAllRegExp = /<(\\w+) [^>]*data-mce-bogus=\"all\"[^>]*>/g;\n      var schema = serializer.schema;\n      var content = trimHtml(serializer.getTempAttrs(), html);\n      var shortEndedElements = schema.getShortEndedElements();\n      var matches;\n      while (matches = bogusAllRegExp.exec(content)) {\n        var index = bogusAllRegExp.lastIndex;\n        var matchLength = matches[0].length;\n        var endTagIndex = void 0;\n        if (shortEndedElements[matches[1]]) {\n          endTagIndex = index;\n        } else {\n          endTagIndex = SaxParser.findEndTag(schema, content, index);\n        }\n        content = content.substring(0, index - matchLength) + content.substring(endTagIndex);\n        bogusAllRegExp.lastIndex = index - matchLength;\n      }\n      return trim$2(content);\n    };\n    var trimExternal = trimInternal;\n\n    var trimEmptyContents = function (editor, html) {\n      var blockName = getForcedRootBlock(editor);\n      var emptyRegExp = new RegExp('^(<' + blockName + '[^>]*>(&nbsp;|&#160;|\\\\s|\\xA0|<br \\\\/>|)<\\\\/' + blockName + '>[\\r\\n]*|<br \\\\/>[\\r\\n]*)$');\n      return html.replace(emptyRegExp, '');\n    };\n    var setupArgs$3 = function (args, format) {\n      return __assign(__assign({}, args), {\n        format: format,\n        get: true,\n        getInner: true\n      });\n    };\n    var getContentFromBody = function (editor, args, format, body) {\n      var defaultedArgs = setupArgs$3(args, format);\n      var updatedArgs = args.no_events ? defaultedArgs : editor.fire('BeforeGetContent', defaultedArgs);\n      var content;\n      if (updatedArgs.format === 'raw') {\n        content = Tools.trim(trimExternal(editor.serializer, body.innerHTML));\n      } else if (updatedArgs.format === 'text') {\n        content = editor.dom.isEmpty(body) ? '' : trim$2(body.innerText || body.textContent);\n      } else if (updatedArgs.format === 'tree') {\n        content = editor.serializer.serialize(body, updatedArgs);\n      } else {\n        content = trimEmptyContents(editor, editor.serializer.serialize(body, updatedArgs));\n      }\n      if (!contains$3([\n          'text',\n          'tree'\n        ], updatedArgs.format) && !isWsPreserveElement(SugarElement.fromDom(body))) {\n        updatedArgs.content = Tools.trim(content);\n      } else {\n        updatedArgs.content = content;\n      }\n      if (updatedArgs.no_events) {\n        return updatedArgs.content;\n      } else {\n        return editor.fire('GetContent', updatedArgs).content;\n      }\n    };\n    var getContentInternal = function (editor, args, format) {\n      return Optional.from(editor.getBody()).fold(constant(args.format === 'tree' ? new AstNode('body', 11) : ''), function (body) {\n        return getContentFromBody(editor, args, format, body);\n      });\n    };\n\n    var each$c = Tools.each;\n    var ElementUtils = function (dom) {\n      var compare = function (node1, node2) {\n        if (node1.nodeName !== node2.nodeName) {\n          return false;\n        }\n        var getAttribs = function (node) {\n          var attribs = {};\n          each$c(dom.getAttribs(node), function (attr) {\n            var name = attr.nodeName.toLowerCase();\n            if (name.indexOf('_') !== 0 && name !== 'style' && name.indexOf('data-') !== 0) {\n              attribs[name] = dom.getAttrib(node, name);\n            }\n          });\n          return attribs;\n        };\n        var compareObjects = function (obj1, obj2) {\n          var value, name;\n          for (name in obj1) {\n            if (has$2(obj1, name)) {\n              value = obj2[name];\n              if (typeof value === 'undefined') {\n                return false;\n              }\n              if (obj1[name] !== value) {\n                return false;\n              }\n              delete obj2[name];\n            }\n          }\n          for (name in obj2) {\n            if (has$2(obj2, name)) {\n              return false;\n            }\n          }\n          return true;\n        };\n        if (!compareObjects(getAttribs(node1), getAttribs(node2))) {\n          return false;\n        }\n        if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) {\n          return false;\n        }\n        return !isBookmarkNode$1(node1) && !isBookmarkNode$1(node2);\n      };\n      return { compare: compare };\n    };\n\n    var makeMap$1 = Tools.makeMap;\n    var Writer = function (settings) {\n      var html = [];\n      settings = settings || {};\n      var indent = settings.indent;\n      var indentBefore = makeMap$1(settings.indent_before || '');\n      var indentAfter = makeMap$1(settings.indent_after || '');\n      var encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\n      var htmlOutput = settings.element_format === 'html';\n      return {\n        start: function (name, attrs, empty) {\n          var i, l, attr, value;\n          if (indent && indentBefore[name] && html.length > 0) {\n            value = html[html.length - 1];\n            if (value.length > 0 && value !== '\\n') {\n              html.push('\\n');\n            }\n          }\n          html.push('<', name);\n          if (attrs) {\n            for (i = 0, l = attrs.length; i < l; i++) {\n              attr = attrs[i];\n              html.push(' ', attr.name, '=\"', encode(attr.value, true), '\"');\n            }\n          }\n          if (!empty || htmlOutput) {\n            html[html.length] = '>';\n          } else {\n            html[html.length] = ' />';\n          }\n          if (empty && indent && indentAfter[name] && html.length > 0) {\n            value = html[html.length - 1];\n            if (value.length > 0 && value !== '\\n') {\n              html.push('\\n');\n            }\n          }\n        },\n        end: function (name) {\n          var value;\n          html.push('</', name, '>');\n          if (indent && indentAfter[name] && html.length > 0) {\n            value = html[html.length - 1];\n            if (value.length > 0 && value !== '\\n') {\n              html.push('\\n');\n            }\n          }\n        },\n        text: function (text, raw) {\n          if (text.length > 0) {\n            html[html.length] = raw ? text : encode(text);\n          }\n        },\n        cdata: function (text) {\n          html.push('<![CDATA[', text, ']]>');\n        },\n        comment: function (text) {\n          html.push('<!--', text, '-->');\n        },\n        pi: function (name, text) {\n          if (text) {\n            html.push('<?', name, ' ', encode(text), '?>');\n          } else {\n            html.push('<?', name, '?>');\n          }\n          if (indent) {\n            html.push('\\n');\n          }\n        },\n        doctype: function (text) {\n          html.push('<!DOCTYPE', text, '>', indent ? '\\n' : '');\n        },\n        reset: function () {\n          html.length = 0;\n        },\n        getContent: function () {\n          return html.join('').replace(/\\n$/, '');\n        }\n      };\n    };\n\n    var HtmlSerializer = function (settings, schema) {\n      if (schema === void 0) {\n        schema = Schema();\n      }\n      var writer = Writer(settings);\n      settings = settings || {};\n      settings.validate = 'validate' in settings ? settings.validate : true;\n      var serialize = function (node) {\n        var validate = settings.validate;\n        var handlers = {\n          3: function (node) {\n            writer.text(node.value, node.raw);\n          },\n          8: function (node) {\n            writer.comment(node.value);\n          },\n          7: function (node) {\n            writer.pi(node.name, node.value);\n          },\n          10: function (node) {\n            writer.doctype(node.value);\n          },\n          4: function (node) {\n            writer.cdata(node.value);\n          },\n          11: function (node) {\n            if (node = node.firstChild) {\n              do {\n                walk(node);\n              } while (node = node.next);\n            }\n          }\n        };\n        writer.reset();\n        var walk = function (node) {\n          var handler = handlers[node.type];\n          if (!handler) {\n            var name_1 = node.name;\n            var isEmpty = node.shortEnded;\n            var attrs = node.attributes;\n            if (validate && attrs && attrs.length > 1) {\n              var sortedAttrs = [];\n              sortedAttrs.map = {};\n              var elementRule = schema.getElementRule(node.name);\n              if (elementRule) {\n                for (var i = 0, l = elementRule.attributesOrder.length; i < l; i++) {\n                  var attrName = elementRule.attributesOrder[i];\n                  if (attrName in attrs.map) {\n                    var attrValue = attrs.map[attrName];\n                    sortedAttrs.map[attrName] = attrValue;\n                    sortedAttrs.push({\n                      name: attrName,\n                      value: attrValue\n                    });\n                  }\n                }\n                for (var i = 0, l = attrs.length; i < l; i++) {\n                  var attrName = attrs[i].name;\n                  if (!(attrName in sortedAttrs.map)) {\n                    var attrValue = attrs.map[attrName];\n                    sortedAttrs.map[attrName] = attrValue;\n                    sortedAttrs.push({\n                      name: attrName,\n                      value: attrValue\n                    });\n                  }\n                }\n                attrs = sortedAttrs;\n              }\n            }\n            writer.start(node.name, attrs, isEmpty);\n            if (!isEmpty) {\n              if (node = node.firstChild) {\n                do {\n                  walk(node);\n                } while (node = node.next);\n              }\n              writer.end(name_1);\n            }\n          } else {\n            handler(node);\n          }\n        };\n        if (node.type === 1 && !settings.inner) {\n          walk(node);\n        } else {\n          handlers[11](node);\n        }\n        return writer.getContent();\n      };\n      return { serialize: serialize };\n    };\n\n    var nonInheritableStyles = new Set();\n    (function () {\n      var nonInheritableStylesArr = [\n        'margin',\n        'margin-left',\n        'margin-right',\n        'margin-top',\n        'margin-bottom',\n        'padding',\n        'padding-left',\n        'padding-right',\n        'padding-top',\n        'padding-bottom',\n        'border',\n        'border-width',\n        'border-style',\n        'border-color',\n        'background',\n        'background-attachment',\n        'background-clip',\n        'background-color',\n        'background-image',\n        'background-origin',\n        'background-position',\n        'background-repeat',\n        'background-size',\n        'float',\n        'position',\n        'left',\n        'right',\n        'top',\n        'bottom',\n        'z-index',\n        'display',\n        'transform',\n        'width',\n        'max-width',\n        'min-width',\n        'height',\n        'max-height',\n        'min-height',\n        'overflow',\n        'overflow-x',\n        'overflow-y',\n        'text-overflow',\n        'vertical-align',\n        'transition',\n        'transition-delay',\n        'transition-duration',\n        'transition-property',\n        'transition-timing-function'\n      ];\n      each$k(nonInheritableStylesArr, function (style) {\n        nonInheritableStyles.add(style);\n      });\n    }());\n    var shorthandStyleProps = [\n      'font',\n      'text-decoration',\n      'text-emphasis'\n    ];\n    var getStyleProps = function (dom, node) {\n      return keys(dom.parseStyle(dom.getAttrib(node, 'style')));\n    };\n    var isNonInheritableStyle = function (style) {\n      return nonInheritableStyles.has(style);\n    };\n    var hasInheritableStyles = function (dom, node) {\n      return forall(getStyleProps(dom, node), function (style) {\n        return !isNonInheritableStyle(style);\n      });\n    };\n    var getLonghandStyleProps = function (styles) {\n      return filter$4(styles, function (style) {\n        return exists(shorthandStyleProps, function (prop) {\n          return startsWith(style, prop);\n        });\n      });\n    };\n    var hasStyleConflict = function (dom, node, parentNode) {\n      var nodeStyleProps = getStyleProps(dom, node);\n      var parentNodeStyleProps = getStyleProps(dom, parentNode);\n      var valueMismatch = function (prop) {\n        var nodeValue = dom.getStyle(node, prop);\n        var parentValue = dom.getStyle(parentNode, prop);\n        return isNotEmpty(nodeValue) && isNotEmpty(parentValue) && nodeValue !== parentValue;\n      };\n      return exists(nodeStyleProps, function (nodeStyleProp) {\n        var propExists = function (props) {\n          return exists(props, function (prop) {\n            return prop === nodeStyleProp;\n          });\n        };\n        if (!propExists(parentNodeStyleProps) && propExists(shorthandStyleProps)) {\n          var longhandProps = getLonghandStyleProps(parentNodeStyleProps);\n          return exists(longhandProps, valueMismatch);\n        } else {\n          return valueMismatch(nodeStyleProp);\n        }\n      });\n    };\n\n    var isChar = function (forward, predicate, pos) {\n      return Optional.from(pos.container()).filter(isText$7).exists(function (text) {\n        var delta = forward ? 0 : -1;\n        return predicate(text.data.charAt(pos.offset() + delta));\n      });\n    };\n    var isBeforeSpace = curry(isChar, true, isWhiteSpace);\n    var isAfterSpace = curry(isChar, false, isWhiteSpace);\n    var isEmptyText = function (pos) {\n      var container = pos.container();\n      return isText$7(container) && (container.data.length === 0 || isZwsp(container.data) && BookmarkManager.isBookmarkNode(container.parentNode));\n    };\n    var matchesElementPosition = function (before, predicate) {\n      return function (pos) {\n        return Optional.from(getChildNodeAtRelativeOffset(before ? 0 : -1, pos)).filter(predicate).isSome();\n      };\n    };\n    var isImageBlock = function (node) {\n      return isImg(node) && get$5(SugarElement.fromDom(node), 'display') === 'block';\n    };\n    var isCefNode = function (node) {\n      return isContentEditableFalse$b(node) && !isBogusAll$1(node);\n    };\n    var isBeforeImageBlock = matchesElementPosition(true, isImageBlock);\n    var isAfterImageBlock = matchesElementPosition(false, isImageBlock);\n    var isBeforeMedia = matchesElementPosition(true, isMedia$2);\n    var isAfterMedia = matchesElementPosition(false, isMedia$2);\n    var isBeforeTable = matchesElementPosition(true, isTable$3);\n    var isAfterTable = matchesElementPosition(false, isTable$3);\n    var isBeforeContentEditableFalse = matchesElementPosition(true, isCefNode);\n    var isAfterContentEditableFalse = matchesElementPosition(false, isCefNode);\n\n    var getLastChildren = function (elm) {\n      var children = [];\n      var rawNode = elm.dom;\n      while (rawNode) {\n        children.push(SugarElement.fromDom(rawNode));\n        rawNode = rawNode.lastChild;\n      }\n      return children;\n    };\n    var removeTrailingBr = function (elm) {\n      var allBrs = descendants(elm, 'br');\n      var brs = filter$4(getLastChildren(elm).slice(-1), isBr$4);\n      if (allBrs.length === brs.length) {\n        each$k(brs, remove$7);\n      }\n    };\n    var fillWithPaddingBr = function (elm) {\n      empty(elm);\n      append$1(elm, SugarElement.fromHtml('<br data-mce-bogus=\"1\">'));\n    };\n    var trimBlockTrailingBr = function (elm) {\n      lastChild(elm).each(function (lastChild) {\n        prevSibling(lastChild).each(function (lastChildPrevSibling) {\n          if (isBlock$2(elm) && isBr$4(lastChild) && isBlock$2(lastChildPrevSibling)) {\n            remove$7(lastChild);\n          }\n        });\n      });\n    };\n\n    var dropLast = function (xs) {\n      return xs.slice(0, -1);\n    };\n    var parentsUntil = function (start, root, predicate) {\n      if (contains$1(root, start)) {\n        return dropLast(parents$1(start, function (elm) {\n          return predicate(elm) || eq(elm, root);\n        }));\n      } else {\n        return [];\n      }\n    };\n    var parents = function (start, root) {\n      return parentsUntil(start, root, never);\n    };\n    var parentsAndSelf = function (start, root) {\n      return [start].concat(parents(start, root));\n    };\n\n    var navigateIgnoreEmptyTextNodes = function (forward, root, from) {\n      return navigateIgnore(forward, root, from, isEmptyText);\n    };\n    var getClosestBlock$1 = function (root, pos) {\n      return find$3(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\n    };\n    var isAtBeforeAfterBlockBoundary = function (forward, root, pos) {\n      return navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(function (newPos) {\n        return getClosestBlock$1(root, pos).fold(function () {\n          return isInSameBlock(newPos, pos, root.dom) === false;\n        }, function (fromBlock) {\n          return isInSameBlock(newPos, pos, root.dom) === false && contains$1(fromBlock, SugarElement.fromDom(newPos.container()));\n        });\n      });\n    };\n    var isAtBlockBoundary = function (forward, root, pos) {\n      return getClosestBlock$1(root, pos).fold(function () {\n        return navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(function (newPos) {\n          return isInSameBlock(newPos, pos, root.dom) === false;\n        });\n      }, function (parent) {\n        return navigateIgnoreEmptyTextNodes(forward, parent.dom, pos).isNone();\n      });\n    };\n    var isAtStartOfBlock = curry(isAtBlockBoundary, false);\n    var isAtEndOfBlock = curry(isAtBlockBoundary, true);\n    var isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false);\n    var isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true);\n\n    var isBr = function (pos) {\n      return getElementFromPosition(pos).exists(isBr$4);\n    };\n    var findBr = function (forward, root, pos) {\n      var parentBlocks = filter$4(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\n      var scope = head(parentBlocks).getOr(root);\n      return fromPosition(forward, scope.dom, pos).filter(isBr);\n    };\n    var isBeforeBr$1 = function (root, pos) {\n      return getElementFromPosition(pos).exists(isBr$4) || findBr(true, root, pos).isSome();\n    };\n    var isAfterBr = function (root, pos) {\n      return getElementFromPrevPosition(pos).exists(isBr$4) || findBr(false, root, pos).isSome();\n    };\n    var findPreviousBr = curry(findBr, false);\n    var findNextBr = curry(findBr, true);\n\n    var isInMiddleOfText = function (pos) {\n      return CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();\n    };\n    var getClosestBlock = function (root, pos) {\n      var parentBlocks = filter$4(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\n      return head(parentBlocks).getOr(root);\n    };\n    var hasSpaceBefore = function (root, pos) {\n      if (isInMiddleOfText(pos)) {\n        return isAfterSpace(pos);\n      } else {\n        return isAfterSpace(pos) || prevPosition(getClosestBlock(root, pos).dom, pos).exists(isAfterSpace);\n      }\n    };\n    var hasSpaceAfter = function (root, pos) {\n      if (isInMiddleOfText(pos)) {\n        return isBeforeSpace(pos);\n      } else {\n        return isBeforeSpace(pos) || nextPosition(getClosestBlock(root, pos).dom, pos).exists(isBeforeSpace);\n      }\n    };\n    var isPreValue = function (value) {\n      return contains$3([\n        'pre',\n        'pre-wrap'\n      ], value);\n    };\n    var isInPre = function (pos) {\n      return getElementFromPosition(pos).bind(function (elm) {\n        return closest$3(elm, isElement$6);\n      }).exists(function (elm) {\n        return isPreValue(get$5(elm, 'white-space'));\n      });\n    };\n    var isAtBeginningOfBody = function (root, pos) {\n      return prevPosition(root.dom, pos).isNone();\n    };\n    var isAtEndOfBody = function (root, pos) {\n      return nextPosition(root.dom, pos).isNone();\n    };\n    var isAtLineBoundary = function (root, pos) {\n      return isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos) || isAtEndOfBlock(root, pos) || isAfterBr(root, pos) || isBeforeBr$1(root, pos);\n    };\n    var needsToHaveNbsp = function (root, pos) {\n      if (isInPre(pos)) {\n        return false;\n      } else {\n        return isAtLineBoundary(root, pos) || hasSpaceBefore(root, pos) || hasSpaceAfter(root, pos);\n      }\n    };\n    var needsToBeNbspLeft = function (root, pos) {\n      if (isInPre(pos)) {\n        return false;\n      } else {\n        return isAtStartOfBlock(root, pos) || isBeforeBlock(root, pos) || isAfterBr(root, pos) || hasSpaceBefore(root, pos);\n      }\n    };\n    var leanRight = function (pos) {\n      var container = pos.container();\n      var offset = pos.offset();\n      if (isText$7(container) && offset < container.data.length) {\n        return CaretPosition(container, offset + 1);\n      } else {\n        return pos;\n      }\n    };\n    var needsToBeNbspRight = function (root, pos) {\n      if (isInPre(pos)) {\n        return false;\n      } else {\n        return isAtEndOfBlock(root, pos) || isAfterBlock(root, pos) || isBeforeBr$1(root, pos) || hasSpaceAfter(root, pos);\n      }\n    };\n    var needsToBeNbsp = function (root, pos) {\n      return needsToBeNbspLeft(root, pos) || needsToBeNbspRight(root, leanRight(pos));\n    };\n    var isNbspAt = function (text, offset) {\n      return isNbsp(text.charAt(offset));\n    };\n    var hasNbsp = function (pos) {\n      var container = pos.container();\n      return isText$7(container) && contains$2(container.data, nbsp);\n    };\n    var normalizeNbspMiddle = function (text) {\n      var chars = text.split('');\n      return map$3(chars, function (chr, i) {\n        if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent(chars[i - 1]) && isContent(chars[i + 1])) {\n          return ' ';\n        } else {\n          return chr;\n        }\n      }).join('');\n    };\n    var normalizeNbspAtStart = function (root, node) {\n      var text = node.data;\n      var firstPos = CaretPosition(node, 0);\n      if (isNbspAt(text, 0) && !needsToBeNbsp(root, firstPos)) {\n        node.data = ' ' + text.slice(1);\n        return true;\n      } else {\n        return false;\n      }\n    };\n    var normalizeNbspInMiddleOfTextNode = function (node) {\n      var text = node.data;\n      var newText = normalizeNbspMiddle(text);\n      if (newText !== text) {\n        node.data = newText;\n        return true;\n      } else {\n        return false;\n      }\n    };\n    var normalizeNbspAtEnd = function (root, node) {\n      var text = node.data;\n      var lastPos = CaretPosition(node, text.length - 1);\n      if (isNbspAt(text, text.length - 1) && !needsToBeNbsp(root, lastPos)) {\n        node.data = text.slice(0, -1) + ' ';\n        return true;\n      } else {\n        return false;\n      }\n    };\n    var normalizeNbsps = function (root, pos) {\n      return Optional.some(pos).filter(hasNbsp).bind(function (pos) {\n        var container = pos.container();\n        var normalized = normalizeNbspAtStart(root, container) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container);\n        return normalized ? Optional.some(pos) : Optional.none();\n      });\n    };\n    var normalizeNbspsInEditor = function (editor) {\n      var root = SugarElement.fromDom(editor.getBody());\n      if (editor.selection.isCollapsed()) {\n        normalizeNbsps(root, CaretPosition.fromRangeStart(editor.selection.getRng())).each(function (pos) {\n          editor.selection.setRng(pos.toRange());\n        });\n      }\n    };\n\n    var normalizeContent = function (content, isStartOfContent, isEndOfContent) {\n      var result = foldl(content, function (acc, c) {\n        if (isWhiteSpace(c) || isNbsp(c)) {\n          if (acc.previousCharIsSpace || acc.str === '' && isStartOfContent || acc.str.length === content.length - 1 && isEndOfContent) {\n            return {\n              previousCharIsSpace: false,\n              str: acc.str + nbsp\n            };\n          } else {\n            return {\n              previousCharIsSpace: true,\n              str: acc.str + ' '\n            };\n          }\n        } else {\n          return {\n            previousCharIsSpace: false,\n            str: acc.str + c\n          };\n        }\n      }, {\n        previousCharIsSpace: false,\n        str: ''\n      });\n      return result.str;\n    };\n    var normalize$1 = function (node, offset, count) {\n      if (count === 0) {\n        return;\n      }\n      var elm = SugarElement.fromDom(node);\n      var root = ancestor$3(elm, isBlock$2).getOr(elm);\n      var whitespace = node.data.slice(offset, offset + count);\n      var isEndOfContent = offset + count >= node.data.length && needsToBeNbspRight(root, CaretPosition(node, node.data.length));\n      var isStartOfContent = offset === 0 && needsToBeNbspLeft(root, CaretPosition(node, 0));\n      node.replaceData(offset, count, normalizeContent(whitespace, isStartOfContent, isEndOfContent));\n    };\n    var normalizeWhitespaceAfter = function (node, offset) {\n      var content = node.data.slice(offset);\n      var whitespaceCount = content.length - lTrim(content).length;\n      normalize$1(node, offset, whitespaceCount);\n    };\n    var normalizeWhitespaceBefore = function (node, offset) {\n      var content = node.data.slice(0, offset);\n      var whitespaceCount = content.length - rTrim(content).length;\n      normalize$1(node, offset - whitespaceCount, whitespaceCount);\n    };\n    var mergeTextNodes = function (prevNode, nextNode, normalizeWhitespace, mergeToPrev) {\n      if (mergeToPrev === void 0) {\n        mergeToPrev = true;\n      }\n      var whitespaceOffset = rTrim(prevNode.data).length;\n      var newNode = mergeToPrev ? prevNode : nextNode;\n      var removeNode = mergeToPrev ? nextNode : prevNode;\n      if (mergeToPrev) {\n        newNode.appendData(removeNode.data);\n      } else {\n        newNode.insertData(0, removeNode.data);\n      }\n      remove$7(SugarElement.fromDom(removeNode));\n      if (normalizeWhitespace) {\n        normalizeWhitespaceAfter(newNode, whitespaceOffset);\n      }\n      return newNode;\n    };\n\n    var needsReposition = function (pos, elm) {\n      var container = pos.container();\n      var offset = pos.offset();\n      return CaretPosition.isTextPosition(pos) === false && container === elm.parentNode && offset > CaretPosition.before(elm).offset();\n    };\n    var reposition = function (elm, pos) {\n      return needsReposition(pos, elm) ? CaretPosition(pos.container(), pos.offset() - 1) : pos;\n    };\n    var beforeOrStartOf = function (node) {\n      return isText$7(node) ? CaretPosition(node, 0) : CaretPosition.before(node);\n    };\n    var afterOrEndOf = function (node) {\n      return isText$7(node) ? CaretPosition(node, node.data.length) : CaretPosition.after(node);\n    };\n    var getPreviousSiblingCaretPosition = function (elm) {\n      if (isCaretCandidate$3(elm.previousSibling)) {\n        return Optional.some(afterOrEndOf(elm.previousSibling));\n      } else {\n        return elm.previousSibling ? lastPositionIn(elm.previousSibling) : Optional.none();\n      }\n    };\n    var getNextSiblingCaretPosition = function (elm) {\n      if (isCaretCandidate$3(elm.nextSibling)) {\n        return Optional.some(beforeOrStartOf(elm.nextSibling));\n      } else {\n        return elm.nextSibling ? firstPositionIn(elm.nextSibling) : Optional.none();\n      }\n    };\n    var findCaretPositionBackwardsFromElm = function (rootElement, elm) {\n      var startPosition = CaretPosition.before(elm.previousSibling ? elm.previousSibling : elm.parentNode);\n      return prevPosition(rootElement, startPosition).fold(function () {\n        return nextPosition(rootElement, CaretPosition.after(elm));\n      }, Optional.some);\n    };\n    var findCaretPositionForwardsFromElm = function (rootElement, elm) {\n      return nextPosition(rootElement, CaretPosition.after(elm)).fold(function () {\n        return prevPosition(rootElement, CaretPosition.before(elm));\n      }, Optional.some);\n    };\n    var findCaretPositionBackwards = function (rootElement, elm) {\n      return getPreviousSiblingCaretPosition(elm).orThunk(function () {\n        return getNextSiblingCaretPosition(elm);\n      }).orThunk(function () {\n        return findCaretPositionBackwardsFromElm(rootElement, elm);\n      });\n    };\n    var findCaretPositionForward = function (rootElement, elm) {\n      return getNextSiblingCaretPosition(elm).orThunk(function () {\n        return getPreviousSiblingCaretPosition(elm);\n      }).orThunk(function () {\n        return findCaretPositionForwardsFromElm(rootElement, elm);\n      });\n    };\n    var findCaretPosition = function (forward, rootElement, elm) {\n      return forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm);\n    };\n    var findCaretPosOutsideElmAfterDelete = function (forward, rootElement, elm) {\n      return findCaretPosition(forward, rootElement, elm).map(curry(reposition, elm));\n    };\n    var setSelection$1 = function (editor, forward, pos) {\n      pos.fold(function () {\n        editor.focus();\n      }, function (pos) {\n        editor.selection.setRng(pos.toRange(), forward);\n      });\n    };\n    var eqRawNode = function (rawNode) {\n      return function (elm) {\n        return elm.dom === rawNode;\n      };\n    };\n    var isBlock = function (editor, elm) {\n      return elm && has$2(editor.schema.getBlockElements(), name(elm));\n    };\n    var paddEmptyBlock = function (elm) {\n      if (isEmpty$2(elm)) {\n        var br = SugarElement.fromHtml('<br data-mce-bogus=\"1\">');\n        empty(elm);\n        append$1(elm, br);\n        return Optional.some(CaretPosition.before(br.dom));\n      } else {\n        return Optional.none();\n      }\n    };\n    var deleteNormalized = function (elm, afterDeletePosOpt, normalizeWhitespace) {\n      var prevTextOpt = prevSibling(elm).filter(isText$8);\n      var nextTextOpt = nextSibling(elm).filter(isText$8);\n      remove$7(elm);\n      return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, function (prev, next, pos) {\n        var prevNode = prev.dom, nextNode = next.dom;\n        var offset = prevNode.data.length;\n        mergeTextNodes(prevNode, nextNode, normalizeWhitespace);\n        return pos.container() === nextNode ? CaretPosition(prevNode, offset) : pos;\n      }).orThunk(function () {\n        if (normalizeWhitespace) {\n          prevTextOpt.each(function (elm) {\n            return normalizeWhitespaceBefore(elm.dom, elm.dom.length);\n          });\n          nextTextOpt.each(function (elm) {\n            return normalizeWhitespaceAfter(elm.dom, 0);\n          });\n        }\n        return afterDeletePosOpt;\n      });\n    };\n    var isInlineElement = function (editor, element) {\n      return has$2(editor.schema.getTextInlineElements(), name(element));\n    };\n    var deleteElement$2 = function (editor, forward, elm, moveCaret) {\n      if (moveCaret === void 0) {\n        moveCaret = true;\n      }\n      var afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom);\n      var parentBlock = ancestor$3(elm, curry(isBlock, editor), eqRawNode(editor.getBody()));\n      var normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos, isInlineElement(editor, elm));\n      if (editor.dom.isEmpty(editor.getBody())) {\n        editor.setContent('');\n        editor.selection.setCursorLocation();\n      } else {\n        parentBlock.bind(paddEmptyBlock).fold(function () {\n          if (moveCaret) {\n            setSelection$1(editor, forward, normalizedAfterDeletePos);\n          }\n        }, function (paddPos) {\n          if (moveCaret) {\n            setSelection$1(editor, forward, Optional.some(paddPos));\n          }\n        });\n      }\n    };\n\n    var isRootFromElement = function (root) {\n      return function (cur) {\n        return eq(root, cur);\n      };\n    };\n    var getTableCells = function (table) {\n      return descendants(table, 'td,th');\n    };\n    var getTableDetailsFromRange = function (rng, isRoot) {\n      var getTable = function (node) {\n        return getClosestTable(SugarElement.fromDom(node), isRoot);\n      };\n      var startTable = getTable(rng.startContainer);\n      var endTable = getTable(rng.endContainer);\n      var isStartInTable = startTable.isSome();\n      var isEndInTable = endTable.isSome();\n      var isSameTable = lift2(startTable, endTable, eq).getOr(false);\n      var isMultiTable = !isSameTable && isStartInTable && isEndInTable;\n      return {\n        startTable: startTable,\n        endTable: endTable,\n        isStartInTable: isStartInTable,\n        isEndInTable: isEndInTable,\n        isSameTable: isSameTable,\n        isMultiTable: isMultiTable\n      };\n    };\n\n    var tableCellRng = function (start, end) {\n      return {\n        start: start,\n        end: end\n      };\n    };\n    var tableSelection = function (rng, table, cells) {\n      return {\n        rng: rng,\n        table: table,\n        cells: cells\n      };\n    };\n    var deleteAction = Adt.generate([\n      {\n        singleCellTable: [\n          'rng',\n          'cell'\n        ]\n      },\n      { fullTable: ['table'] },\n      {\n        partialTable: [\n          'cells',\n          'outsideDetails'\n        ]\n      },\n      {\n        multiTable: [\n          'startTableCells',\n          'endTableCells',\n          'betweenRng'\n        ]\n      }\n    ]);\n    var getClosestCell$1 = function (container, isRoot) {\n      return closest$2(SugarElement.fromDom(container), 'td,th', isRoot);\n    };\n    var isExpandedCellRng = function (cellRng) {\n      return !eq(cellRng.start, cellRng.end);\n    };\n    var getTableFromCellRng = function (cellRng, isRoot) {\n      return getClosestTable(cellRng.start, isRoot).bind(function (startParentTable) {\n        return getClosestTable(cellRng.end, isRoot).bind(function (endParentTable) {\n          return someIf(eq(startParentTable, endParentTable), startParentTable);\n        });\n      });\n    };\n    var isSingleCellTable = function (cellRng, isRoot) {\n      return !isExpandedCellRng(cellRng) && getTableFromCellRng(cellRng, isRoot).exists(function (table) {\n        var rows = table.dom.rows;\n        return rows.length === 1 && rows[0].cells.length === 1;\n      });\n    };\n    var getCellRng = function (rng, isRoot) {\n      var startCell = getClosestCell$1(rng.startContainer, isRoot);\n      var endCell = getClosestCell$1(rng.endContainer, isRoot);\n      return lift2(startCell, endCell, tableCellRng);\n    };\n    var getCellRangeFromStartTable = function (isRoot) {\n      return function (startCell) {\n        return getClosestTable(startCell, isRoot).bind(function (table) {\n          return last$2(getTableCells(table)).map(function (endCell) {\n            return tableCellRng(startCell, endCell);\n          });\n        });\n      };\n    };\n    var getCellRangeFromEndTable = function (isRoot) {\n      return function (endCell) {\n        return getClosestTable(endCell, isRoot).bind(function (table) {\n          return head(getTableCells(table)).map(function (startCell) {\n            return tableCellRng(startCell, endCell);\n          });\n        });\n      };\n    };\n    var getTableSelectionFromCellRng = function (isRoot) {\n      return function (cellRng) {\n        return getTableFromCellRng(cellRng, isRoot).map(function (table) {\n          return tableSelection(cellRng, table, getTableCells(table));\n        });\n      };\n    };\n    var getTableSelections = function (cellRng, selectionDetails, rng, isRoot) {\n      if (rng.collapsed || !cellRng.forall(isExpandedCellRng)) {\n        return Optional.none();\n      } else if (selectionDetails.isSameTable) {\n        var sameTableSelection = cellRng.bind(getTableSelectionFromCellRng(isRoot));\n        return Optional.some({\n          start: sameTableSelection,\n          end: sameTableSelection\n        });\n      } else {\n        var startCell = getClosestCell$1(rng.startContainer, isRoot);\n        var endCell = getClosestCell$1(rng.endContainer, isRoot);\n        var startTableSelection = startCell.bind(getCellRangeFromStartTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n        var endTableSelection = endCell.bind(getCellRangeFromEndTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n        return Optional.some({\n          start: startTableSelection,\n          end: endTableSelection\n        });\n      }\n    };\n    var getCellIndex = function (cells, cell) {\n      return findIndex$2(cells, function (x) {\n        return eq(x, cell);\n      });\n    };\n    var getSelectedCells = function (tableSelection) {\n      return lift2(getCellIndex(tableSelection.cells, tableSelection.rng.start), getCellIndex(tableSelection.cells, tableSelection.rng.end), function (startIndex, endIndex) {\n        return tableSelection.cells.slice(startIndex, endIndex + 1);\n      });\n    };\n    var isSingleCellTableContentSelected = function (optCellRng, rng, isRoot) {\n      return optCellRng.exists(function (cellRng) {\n        return isSingleCellTable(cellRng, isRoot) && hasAllContentsSelected(cellRng.start, rng);\n      });\n    };\n    var unselectCells = function (rng, selectionDetails) {\n      var startTable = selectionDetails.startTable, endTable = selectionDetails.endTable;\n      var otherContentRng = rng.cloneRange();\n      startTable.each(function (table) {\n        return otherContentRng.setStartAfter(table.dom);\n      });\n      endTable.each(function (table) {\n        return otherContentRng.setEndBefore(table.dom);\n      });\n      return otherContentRng;\n    };\n    var handleSingleTable = function (cellRng, selectionDetails, rng, isRoot) {\n      return getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(function (_a) {\n        var start = _a.start, end = _a.end;\n        return start.or(end);\n      }).bind(function (tableSelection) {\n        var isSameTable = selectionDetails.isSameTable;\n        var selectedCells = getSelectedCells(tableSelection).getOr([]);\n        if (isSameTable && tableSelection.cells.length === selectedCells.length) {\n          return Optional.some(deleteAction.fullTable(tableSelection.table));\n        } else if (selectedCells.length > 0) {\n          if (isSameTable) {\n            return Optional.some(deleteAction.partialTable(selectedCells, Optional.none()));\n          } else {\n            var otherContentRng = unselectCells(rng, selectionDetails);\n            return Optional.some(deleteAction.partialTable(selectedCells, Optional.some(__assign(__assign({}, selectionDetails), { rng: otherContentRng }))));\n          }\n        } else {\n          return Optional.none();\n        }\n      });\n    };\n    var handleMultiTable = function (cellRng, selectionDetails, rng, isRoot) {\n      return getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(function (_a) {\n        var start = _a.start, end = _a.end;\n        var startTableSelectedCells = start.bind(getSelectedCells).getOr([]);\n        var endTableSelectedCells = end.bind(getSelectedCells).getOr([]);\n        if (startTableSelectedCells.length > 0 && endTableSelectedCells.length > 0) {\n          var otherContentRng = unselectCells(rng, selectionDetails);\n          return Optional.some(deleteAction.multiTable(startTableSelectedCells, endTableSelectedCells, otherContentRng));\n        } else {\n          return Optional.none();\n        }\n      });\n    };\n    var getActionFromRange = function (root, rng) {\n      var isRoot = isRootFromElement(root);\n      var optCellRng = getCellRng(rng, isRoot);\n      var selectionDetails = getTableDetailsFromRange(rng, isRoot);\n      if (isSingleCellTableContentSelected(optCellRng, rng, isRoot)) {\n        return optCellRng.map(function (cellRng) {\n          return deleteAction.singleCellTable(rng, cellRng.start);\n        });\n      } else if (selectionDetails.isMultiTable) {\n        return handleMultiTable(optCellRng, selectionDetails, rng, isRoot);\n      } else {\n        return handleSingleTable(optCellRng, selectionDetails, rng, isRoot);\n      }\n    };\n\n    var freefallRtl = function (root) {\n      var child = isComment$1(root) ? prevSibling(root) : lastChild(root);\n      return child.bind(freefallRtl).orThunk(function () {\n        return Optional.some(root);\n      });\n    };\n    var cleanCells = function (cells) {\n      return each$k(cells, function (cell) {\n        remove$6(cell, 'contenteditable');\n        fillWithPaddingBr(cell);\n      });\n    };\n    var getOutsideBlock = function (editor, container) {\n      return Optional.from(editor.dom.getParent(container, editor.dom.isBlock)).map(SugarElement.fromDom);\n    };\n    var handleEmptyBlock = function (editor, startInTable, emptyBlock) {\n      emptyBlock.each(function (block) {\n        if (startInTable) {\n          remove$7(block);\n        } else {\n          fillWithPaddingBr(block);\n          editor.selection.setCursorLocation(block.dom, 0);\n        }\n      });\n    };\n    var deleteContentInsideCell = function (editor, cell, rng, isFirstCellInSelection) {\n      var insideTableRng = rng.cloneRange();\n      if (isFirstCellInSelection) {\n        insideTableRng.setStart(rng.startContainer, rng.startOffset);\n        insideTableRng.setEndAfter(cell.dom.lastChild);\n      } else {\n        insideTableRng.setStartBefore(cell.dom.firstChild);\n        insideTableRng.setEnd(rng.endContainer, rng.endOffset);\n      }\n      deleteCellContents(editor, insideTableRng, cell, false);\n    };\n    var collapseAndRestoreCellSelection = function (editor) {\n      var selectedCells = getCellsFromEditor(editor);\n      var selectedNode = SugarElement.fromDom(editor.selection.getNode());\n      if (isTableCell$5(selectedNode.dom) && isEmpty$2(selectedNode)) {\n        editor.selection.setCursorLocation(selectedNode.dom, 0);\n      } else {\n        editor.selection.collapse(true);\n      }\n      if (selectedCells.length > 1 && exists(selectedCells, function (cell) {\n          return eq(cell, selectedNode);\n        })) {\n        set$1(selectedNode, 'data-mce-selected', '1');\n      }\n    };\n    var emptySingleTableCells = function (editor, cells, outsideDetails) {\n      var editorRng = editor.selection.getRng();\n      var cellsToClean = outsideDetails.bind(function (_a) {\n        var rng = _a.rng, isStartInTable = _a.isStartInTable;\n        var outsideBlock = getOutsideBlock(editor, isStartInTable ? rng.endContainer : rng.startContainer);\n        rng.deleteContents();\n        handleEmptyBlock(editor, isStartInTable, outsideBlock.filter(isEmpty$2));\n        var endPointCell = isStartInTable ? cells[0] : cells[cells.length - 1];\n        deleteContentInsideCell(editor, endPointCell, editorRng, isStartInTable);\n        if (!isEmpty$2(endPointCell)) {\n          return Optional.some(isStartInTable ? cells.slice(1) : cells.slice(0, -1));\n        } else {\n          return Optional.none();\n        }\n      }).getOr(cells);\n      cleanCells(cellsToClean);\n      collapseAndRestoreCellSelection(editor);\n      return true;\n    };\n    var emptyMultiTableCells = function (editor, startTableCells, endTableCells, betweenRng) {\n      var rng = editor.selection.getRng();\n      var startCell = startTableCells[0];\n      var endCell = endTableCells[endTableCells.length - 1];\n      deleteContentInsideCell(editor, startCell, rng, true);\n      deleteContentInsideCell(editor, endCell, rng, false);\n      var startTableCellsToClean = isEmpty$2(startCell) ? startTableCells : startTableCells.slice(1);\n      var endTableCellsToClean = isEmpty$2(endCell) ? endTableCells : endTableCells.slice(0, -1);\n      cleanCells(startTableCellsToClean.concat(endTableCellsToClean));\n      betweenRng.deleteContents();\n      collapseAndRestoreCellSelection(editor);\n      return true;\n    };\n    var deleteCellContents = function (editor, rng, cell, moveSelection) {\n      if (moveSelection === void 0) {\n        moveSelection = true;\n      }\n      rng.deleteContents();\n      var lastNode = freefallRtl(cell).getOr(cell);\n      var lastBlock = SugarElement.fromDom(editor.dom.getParent(lastNode.dom, editor.dom.isBlock));\n      if (isEmpty$2(lastBlock)) {\n        fillWithPaddingBr(lastBlock);\n        if (moveSelection) {\n          editor.selection.setCursorLocation(lastBlock.dom, 0);\n        }\n      }\n      if (!eq(cell, lastBlock)) {\n        var additionalCleanupNodes = is$1(parent(lastBlock), cell) ? [] : siblings(lastBlock);\n        each$k(additionalCleanupNodes.concat(children(cell)), function (node) {\n          if (!eq(node, lastBlock) && !contains$1(node, lastBlock) && isEmpty$2(node)) {\n            remove$7(node);\n          }\n        });\n      }\n      return true;\n    };\n    var deleteTableElement = function (editor, table) {\n      deleteElement$2(editor, false, table);\n      return true;\n    };\n    var deleteCellRange = function (editor, rootElm, rng) {\n      return getActionFromRange(rootElm, rng).map(function (action) {\n        return action.fold(curry(deleteCellContents, editor), curry(deleteTableElement, editor), curry(emptySingleTableCells, editor), curry(emptyMultiTableCells, editor));\n      });\n    };\n    var deleteCaptionRange = function (editor, caption) {\n      return emptyElement(editor, caption);\n    };\n    var deleteTableRange = function (editor, rootElm, rng, startElm) {\n      return getParentCaption(rootElm, startElm).fold(function () {\n        return deleteCellRange(editor, rootElm, rng);\n      }, function (caption) {\n        return deleteCaptionRange(editor, caption);\n      }).getOr(false);\n    };\n    var deleteRange$2 = function (editor, startElm, selectedCells) {\n      var rootNode = SugarElement.fromDom(editor.getBody());\n      var rng = editor.selection.getRng();\n      return selectedCells.length !== 0 ? emptySingleTableCells(editor, selectedCells, Optional.none()) : deleteTableRange(editor, rootNode, rng, startElm);\n    };\n    var getParentCell = function (rootElm, elm) {\n      return find$3(parentsAndSelf(elm, rootElm), isTableCell$4);\n    };\n    var getParentCaption = function (rootElm, elm) {\n      return find$3(parentsAndSelf(elm, rootElm), isTag('caption'));\n    };\n    var deleteBetweenCells = function (editor, rootElm, forward, fromCell, from) {\n      return navigate(forward, editor.getBody(), from).bind(function (to) {\n        return getParentCell(rootElm, SugarElement.fromDom(to.getNode())).map(function (toCell) {\n          return eq(toCell, fromCell) === false;\n        });\n      });\n    };\n    var emptyElement = function (editor, elm) {\n      fillWithPaddingBr(elm);\n      editor.selection.setCursorLocation(elm.dom, 0);\n      return Optional.some(true);\n    };\n    var isDeleteOfLastCharPos = function (fromCaption, forward, from, to) {\n      return firstPositionIn(fromCaption.dom).bind(function (first) {\n        return lastPositionIn(fromCaption.dom).map(function (last) {\n          return forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first);\n        });\n      }).getOr(true);\n    };\n    var emptyCaretCaption = function (editor, elm) {\n      return emptyElement(editor, elm);\n    };\n    var validateCaretCaption = function (rootElm, fromCaption, to) {\n      return getParentCaption(rootElm, SugarElement.fromDom(to.getNode())).map(function (toCaption) {\n        return eq(toCaption, fromCaption) === false;\n      });\n    };\n    var deleteCaretInsideCaption = function (editor, rootElm, forward, fromCaption, from) {\n      return navigate(forward, editor.getBody(), from).bind(function (to) {\n        return isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to);\n      }).or(Optional.some(true));\n    };\n    var deleteCaretCells = function (editor, forward, rootElm, startElm) {\n      var from = CaretPosition.fromRangeStart(editor.selection.getRng());\n      return getParentCell(rootElm, startElm).bind(function (fromCell) {\n        return isEmpty$2(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from);\n      }).getOr(false);\n    };\n    var deleteCaretCaption = function (editor, forward, rootElm, fromCaption) {\n      var from = CaretPosition.fromRangeStart(editor.selection.getRng());\n      return isEmpty$2(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);\n    };\n    var isNearTable = function (forward, pos) {\n      return forward ? isBeforeTable(pos) : isAfterTable(pos);\n    };\n    var isBeforeOrAfterTable = function (editor, forward) {\n      var fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n      return isNearTable(forward, fromPos) || fromPosition(forward, editor.getBody(), fromPos).exists(function (pos) {\n        return isNearTable(forward, pos);\n      });\n    };\n    var deleteCaret$3 = function (editor, forward, startElm) {\n      var rootElm = SugarElement.fromDom(editor.getBody());\n      return getParentCaption(rootElm, startElm).fold(function () {\n        return deleteCaretCells(editor, forward, rootElm, startElm) || isBeforeOrAfterTable(editor, forward);\n      }, function (fromCaption) {\n        return deleteCaretCaption(editor, forward, rootElm, fromCaption).getOr(false);\n      });\n    };\n    var backspaceDelete$9 = function (editor, forward) {\n      var startElm = SugarElement.fromDom(editor.selection.getStart(true));\n      var cells = getCellsFromEditor(editor);\n      return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret$3(editor, forward, startElm) : deleteRange$2(editor, startElm, cells);\n    };\n\n    var createRange = function (sc, so, ec, eo) {\n      var rng = document.createRange();\n      rng.setStart(sc, so);\n      rng.setEnd(ec, eo);\n      return rng;\n    };\n    var normalizeBlockSelectionRange = function (rng) {\n      var startPos = CaretPosition.fromRangeStart(rng);\n      var endPos = CaretPosition.fromRangeEnd(rng);\n      var rootNode = rng.commonAncestorContainer;\n      return fromPosition(false, rootNode, endPos).map(function (newEndPos) {\n        if (!isInSameBlock(startPos, endPos, rootNode) && isInSameBlock(startPos, newEndPos, rootNode)) {\n          return createRange(startPos.container(), startPos.offset(), newEndPos.container(), newEndPos.offset());\n        } else {\n          return rng;\n        }\n      }).getOr(rng);\n    };\n    var normalize = function (rng) {\n      return rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\n    };\n\n    var hasOnlyOneChild$1 = function (node) {\n      return node.firstChild && node.firstChild === node.lastChild;\n    };\n    var isPaddingNode = function (node) {\n      return node.name === 'br' || node.value === nbsp;\n    };\n    var isPaddedEmptyBlock = function (schema, node) {\n      var blockElements = schema.getBlockElements();\n      return blockElements[node.name] && hasOnlyOneChild$1(node) && isPaddingNode(node.firstChild);\n    };\n    var isEmptyFragmentElement = function (schema, node) {\n      var nonEmptyElements = schema.getNonEmptyElements();\n      return node && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node));\n    };\n    var isListFragment = function (schema, fragment) {\n      var firstChild = fragment.firstChild;\n      var lastChild = fragment.lastChild;\n      if (firstChild && firstChild.name === 'meta') {\n        firstChild = firstChild.next;\n      }\n      if (lastChild && lastChild.attr('id') === 'mce_marker') {\n        lastChild = lastChild.prev;\n      }\n      if (isEmptyFragmentElement(schema, lastChild)) {\n        lastChild = lastChild.prev;\n      }\n      if (!firstChild || firstChild !== lastChild) {\n        return false;\n      }\n      return firstChild.name === 'ul' || firstChild.name === 'ol';\n    };\n    var cleanupDomFragment = function (domFragment) {\n      var firstChild = domFragment.firstChild;\n      var lastChild = domFragment.lastChild;\n      if (firstChild && firstChild.nodeName === 'META') {\n        firstChild.parentNode.removeChild(firstChild);\n      }\n      if (lastChild && lastChild.id === 'mce_marker') {\n        lastChild.parentNode.removeChild(lastChild);\n      }\n      return domFragment;\n    };\n    var toDomFragment = function (dom, serializer, fragment) {\n      var html = serializer.serialize(fragment);\n      var domFragment = dom.createFragment(html);\n      return cleanupDomFragment(domFragment);\n    };\n    var listItems = function (elm) {\n      return filter$4(elm.childNodes, function (child) {\n        return child.nodeName === 'LI';\n      });\n    };\n    var isPadding = function (node) {\n      return node.data === nbsp || isBr$5(node);\n    };\n    var isListItemPadded = function (node) {\n      return node && node.firstChild && node.firstChild === node.lastChild && isPadding(node.firstChild);\n    };\n    var isEmptyOrPadded = function (elm) {\n      return !elm.firstChild || isListItemPadded(elm);\n    };\n    var trimListItems = function (elms) {\n      return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms;\n    };\n    var getParentLi = function (dom, node) {\n      var parentBlock = dom.getParent(node, dom.isBlock);\n      return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null;\n    };\n    var isParentBlockLi = function (dom, node) {\n      return !!getParentLi(dom, node);\n    };\n    var getSplit = function (parentNode, rng) {\n      var beforeRng = rng.cloneRange();\n      var afterRng = rng.cloneRange();\n      beforeRng.setStartBefore(parentNode);\n      afterRng.setEndAfter(parentNode);\n      return [\n        beforeRng.cloneContents(),\n        afterRng.cloneContents()\n      ];\n    };\n    var findFirstIn = function (node, rootNode) {\n      var caretPos = CaretPosition.before(node);\n      var caretWalker = CaretWalker(rootNode);\n      var newCaretPos = caretWalker.next(caretPos);\n      return newCaretPos ? newCaretPos.toRange() : null;\n    };\n    var findLastOf = function (node, rootNode) {\n      var caretPos = CaretPosition.after(node);\n      var caretWalker = CaretWalker(rootNode);\n      var newCaretPos = caretWalker.prev(caretPos);\n      return newCaretPos ? newCaretPos.toRange() : null;\n    };\n    var insertMiddle = function (target, elms, rootNode, rng) {\n      var parts = getSplit(target, rng);\n      var parentElm = target.parentNode;\n      parentElm.insertBefore(parts[0], target);\n      Tools.each(elms, function (li) {\n        parentElm.insertBefore(li, target);\n      });\n      parentElm.insertBefore(parts[1], target);\n      parentElm.removeChild(target);\n      return findLastOf(elms[elms.length - 1], rootNode);\n    };\n    var insertBefore$1 = function (target, elms, rootNode) {\n      var parentElm = target.parentNode;\n      Tools.each(elms, function (elm) {\n        parentElm.insertBefore(elm, target);\n      });\n      return findFirstIn(target, rootNode);\n    };\n    var insertAfter$1 = function (target, elms, rootNode, dom) {\n      dom.insertAfter(elms.reverse(), target);\n      return findLastOf(elms[0], rootNode);\n    };\n    var insertAtCaret$1 = function (serializer, dom, rng, fragment) {\n      var domFragment = toDomFragment(dom, serializer, fragment);\n      var liTarget = getParentLi(dom, rng.startContainer);\n      var liElms = trimListItems(listItems(domFragment.firstChild));\n      var BEGINNING = 1, END = 2;\n      var rootNode = dom.getRoot();\n      var isAt = function (location) {\n        var caretPos = CaretPosition.fromRangeStart(rng);\n        var caretWalker = CaretWalker(dom.getRoot());\n        var newPos = location === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos);\n        return newPos ? getParentLi(dom, newPos.getNode()) !== liTarget : true;\n      };\n      if (isAt(BEGINNING)) {\n        return insertBefore$1(liTarget, liElms, rootNode);\n      } else if (isAt(END)) {\n        return insertAfter$1(liTarget, liElms, rootNode, dom);\n      }\n      return insertMiddle(liTarget, liElms, rootNode, rng);\n    };\n\n    var trimOrPadLeftRight = function (dom, rng, html) {\n      var root = SugarElement.fromDom(dom.getRoot());\n      if (needsToBeNbspLeft(root, CaretPosition.fromRangeStart(rng))) {\n        html = html.replace(/^ /, '&nbsp;');\n      } else {\n        html = html.replace(/^&nbsp;/, ' ');\n      }\n      if (needsToBeNbspRight(root, CaretPosition.fromRangeEnd(rng))) {\n        html = html.replace(/(&nbsp;| )(<br( \\/)>)?$/, '&nbsp;');\n      } else {\n        html = html.replace(/&nbsp;(<br( \\/)?>)?$/, ' ');\n      }\n      return html;\n    };\n\n    var isTableCell$1 = isTableCell$5;\n    var isTableCellContentSelected = function (dom, rng, cell) {\n      if (cell !== null) {\n        var endCell = dom.getParent(rng.endContainer, isTableCell$1);\n        return cell === endCell && hasAllContentsSelected(SugarElement.fromDom(cell), rng);\n      } else {\n        return false;\n      }\n    };\n    var validInsertion = function (editor, value, parentNode) {\n      if (parentNode.getAttribute('data-mce-bogus') === 'all') {\n        parentNode.parentNode.insertBefore(editor.dom.createFragment(value), parentNode);\n      } else {\n        var node = parentNode.firstChild;\n        var node2 = parentNode.lastChild;\n        if (!node || node === node2 && node.nodeName === 'BR') {\n          editor.dom.setHTML(parentNode, value);\n        } else {\n          editor.selection.setContent(value);\n        }\n      }\n    };\n    var trimBrsFromTableCell = function (dom, elm) {\n      Optional.from(dom.getParent(elm, 'td,th')).map(SugarElement.fromDom).each(trimBlockTrailingBr);\n    };\n    var reduceInlineTextElements = function (editor, merge) {\n      var textInlineElements = editor.schema.getTextInlineElements();\n      var dom = editor.dom;\n      if (merge) {\n        var root_1 = editor.getBody();\n        var elementUtils_1 = ElementUtils(dom);\n        Tools.each(dom.select('*[data-mce-fragment]'), function (node) {\n          var isInline = isNonNullable(textInlineElements[node.nodeName.toLowerCase()]);\n          if (isInline && hasInheritableStyles(dom, node)) {\n            for (var parentNode = node.parentNode; isNonNullable(parentNode) && parentNode !== root_1; parentNode = parentNode.parentNode) {\n              var styleConflict = hasStyleConflict(dom, node, parentNode);\n              if (styleConflict) {\n                break;\n              }\n              if (elementUtils_1.compare(parentNode, node)) {\n                dom.remove(node, true);\n                break;\n              }\n            }\n          }\n        });\n      }\n    };\n    var markFragmentElements = function (fragment) {\n      var node = fragment;\n      while (node = node.walk()) {\n        if (node.type === 1) {\n          node.attr('data-mce-fragment', '1');\n        }\n      }\n    };\n    var unmarkFragmentElements = function (elm) {\n      Tools.each(elm.getElementsByTagName('*'), function (elm) {\n        elm.removeAttribute('data-mce-fragment');\n      });\n    };\n    var isPartOfFragment = function (node) {\n      return !!node.getAttribute('data-mce-fragment');\n    };\n    var canHaveChildren = function (editor, node) {\n      return node && !editor.schema.getShortEndedElements()[node.nodeName];\n    };\n    var moveSelectionToMarker = function (editor, marker) {\n      var nextRng;\n      var dom = editor.dom;\n      var selection = editor.selection;\n      if (!marker) {\n        return;\n      }\n      selection.scrollIntoView(marker);\n      var parentEditableElm = getContentEditableRoot$1(editor.getBody(), marker);\n      if (dom.getContentEditable(parentEditableElm) === 'false') {\n        dom.remove(marker);\n        selection.select(parentEditableElm);\n        return;\n      }\n      var rng = dom.createRng();\n      var node = marker.previousSibling;\n      if (isText$7(node)) {\n        rng.setStart(node, node.nodeValue.length);\n        if (!Env.ie) {\n          var node2 = marker.nextSibling;\n          if (isText$7(node2)) {\n            node.appendData(node2.data);\n            node2.parentNode.removeChild(node2);\n          }\n        }\n      } else {\n        rng.setStartBefore(marker);\n        rng.setEndBefore(marker);\n      }\n      var findNextCaretRng = function (rng) {\n        var caretPos = CaretPosition.fromRangeStart(rng);\n        var caretWalker = CaretWalker(editor.getBody());\n        caretPos = caretWalker.next(caretPos);\n        if (caretPos) {\n          return caretPos.toRange();\n        }\n      };\n      var parentBlock = dom.getParent(marker, dom.isBlock);\n      dom.remove(marker);\n      if (parentBlock && dom.isEmpty(parentBlock)) {\n        editor.$(parentBlock).empty();\n        rng.setStart(parentBlock, 0);\n        rng.setEnd(parentBlock, 0);\n        if (!isTableCell$1(parentBlock) && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) {\n          rng = nextRng;\n          dom.remove(parentBlock);\n        } else {\n          dom.add(parentBlock, dom.create('br', { 'data-mce-bogus': '1' }));\n        }\n      }\n      selection.setRng(rng);\n    };\n    var deleteSelectedContent = function (editor) {\n      var dom = editor.dom;\n      var rng = normalize(editor.selection.getRng());\n      editor.selection.setRng(rng);\n      var startCell = dom.getParent(rng.startContainer, isTableCell$1);\n      if (isTableCellContentSelected(dom, rng, startCell)) {\n        deleteCellContents(editor, rng, SugarElement.fromDom(startCell));\n      } else {\n        editor.getDoc().execCommand('Delete', false, null);\n      }\n    };\n    var insertHtmlAtCaret = function (editor, value, details) {\n      var parentNode;\n      var rng, node;\n      var selection = editor.selection;\n      var dom = editor.dom;\n      if (/^ | $/.test(value)) {\n        value = trimOrPadLeftRight(dom, selection.getRng(), value);\n      }\n      var parser = editor.parser;\n      var merge = details.merge;\n      var serializer = HtmlSerializer({ validate: shouldValidate(editor) }, editor.schema);\n      var bookmarkHtml = '<span id=\"mce_marker\" data-mce-type=\"bookmark\">&#xFEFF;</span>';\n      var args = editor.fire('BeforeSetContent', {\n        content: value,\n        format: 'html',\n        selection: true,\n        paste: details.paste\n      });\n      if (args.isDefaultPrevented()) {\n        editor.fire('SetContent', {\n          content: args.content,\n          format: 'html',\n          selection: true,\n          paste: details.paste\n        });\n        return;\n      }\n      value = args.content;\n      if (value.indexOf('{$caret}') === -1) {\n        value += '{$caret}';\n      }\n      value = value.replace(/\\{\\$caret\\}/, bookmarkHtml);\n      rng = selection.getRng();\n      var caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null);\n      var body = editor.getBody();\n      if (caretElement === body && selection.isCollapsed()) {\n        if (dom.isBlock(body.firstChild) && canHaveChildren(editor, body.firstChild) && dom.isEmpty(body.firstChild)) {\n          rng = dom.createRng();\n          rng.setStart(body.firstChild, 0);\n          rng.setEnd(body.firstChild, 0);\n          selection.setRng(rng);\n        }\n      }\n      if (!selection.isCollapsed()) {\n        deleteSelectedContent(editor);\n      }\n      parentNode = selection.getNode();\n      var parserArgs = {\n        context: parentNode.nodeName.toLowerCase(),\n        data: details.data,\n        insert: true\n      };\n      var fragment = parser.parse(value, parserArgs);\n      if (details.paste === true && isListFragment(editor.schema, fragment) && isParentBlockLi(dom, parentNode)) {\n        rng = insertAtCaret$1(serializer, dom, selection.getRng(), fragment);\n        selection.setRng(rng);\n        editor.fire('SetContent', args);\n        return;\n      }\n      markFragmentElements(fragment);\n      node = fragment.lastChild;\n      if (node.attr('id') === 'mce_marker') {\n        var marker = node;\n        for (node = node.prev; node; node = node.walk(true)) {\n          if (node.type === 3 || !dom.isBlock(node.name)) {\n            if (editor.schema.isValidChild(node.parent.name, 'span')) {\n              node.parent.insert(marker, node, node.name === 'br');\n            }\n            break;\n          }\n        }\n      }\n      editor._selectionOverrides.showBlockCaretContainer(parentNode);\n      if (!parserArgs.invalid) {\n        value = serializer.serialize(fragment);\n        validInsertion(editor, value, parentNode);\n      } else {\n        editor.selection.setContent(bookmarkHtml);\n        parentNode = selection.getNode();\n        var rootNode = editor.getBody();\n        if (parentNode.nodeType === 9) {\n          parentNode = node = rootNode;\n        } else {\n          node = parentNode;\n        }\n        while (node !== rootNode) {\n          parentNode = node;\n          node = node.parentNode;\n        }\n        value = parentNode === rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);\n        value = serializer.serialize(parser.parse(value.replace(/<span (id=\"mce_marker\"|id=mce_marker).+?<\\/span>/i, function () {\n          return serializer.serialize(fragment);\n        })));\n        if (parentNode === rootNode) {\n          dom.setHTML(rootNode, value);\n        } else {\n          dom.setOuterHTML(parentNode, value);\n        }\n      }\n      reduceInlineTextElements(editor, merge);\n      moveSelectionToMarker(editor, dom.get('mce_marker'));\n      unmarkFragmentElements(editor.getBody());\n      trimBrsFromTableCell(dom, selection.getStart());\n      editor.fire('SetContent', args);\n      editor.addVisual();\n    };\n\n    var traverse = function (node, fn) {\n      fn(node);\n      if (node.firstChild) {\n        traverse(node.firstChild, fn);\n      }\n      if (node.next) {\n        traverse(node.next, fn);\n      }\n    };\n    var findMatchingNodes = function (nodeFilters, attributeFilters, node) {\n      var nodeMatches = {};\n      var attrMatches = {};\n      var matches = [];\n      if (node.firstChild) {\n        traverse(node.firstChild, function (node) {\n          each$k(nodeFilters, function (filter) {\n            if (filter.name === node.name) {\n              if (nodeMatches[filter.name]) {\n                nodeMatches[filter.name].nodes.push(node);\n              } else {\n                nodeMatches[filter.name] = {\n                  filter: filter,\n                  nodes: [node]\n                };\n              }\n            }\n          });\n          each$k(attributeFilters, function (filter) {\n            if (typeof node.attr(filter.name) === 'string') {\n              if (attrMatches[filter.name]) {\n                attrMatches[filter.name].nodes.push(node);\n              } else {\n                attrMatches[filter.name] = {\n                  filter: filter,\n                  nodes: [node]\n                };\n              }\n            }\n          });\n        });\n      }\n      for (var name_1 in nodeMatches) {\n        if (has$2(nodeMatches, name_1)) {\n          matches.push(nodeMatches[name_1]);\n        }\n      }\n      for (var name_2 in attrMatches) {\n        if (has$2(attrMatches, name_2)) {\n          matches.push(attrMatches[name_2]);\n        }\n      }\n      return matches;\n    };\n    var filter$1 = function (nodeFilters, attributeFilters, node) {\n      var matches = findMatchingNodes(nodeFilters, attributeFilters, node);\n      each$k(matches, function (match) {\n        each$k(match.filter.callbacks, function (callback) {\n          callback(match.nodes, match.filter.name, {});\n        });\n      });\n    };\n\n    var defaultFormat$1 = 'html';\n    var isTreeNode = function (content) {\n      return content instanceof AstNode;\n    };\n    var moveSelection = function (editor) {\n      if (hasFocus(editor)) {\n        firstPositionIn(editor.getBody()).each(function (pos) {\n          var node = pos.getNode();\n          var caretPos = isTable$3(node) ? firstPositionIn(node).getOr(pos) : pos;\n          editor.selection.setRng(caretPos.toRange());\n        });\n      }\n    };\n    var setEditorHtml = function (editor, html, noSelection) {\n      editor.dom.setHTML(editor.getBody(), html);\n      if (noSelection !== true) {\n        moveSelection(editor);\n      }\n    };\n    var setContentString = function (editor, body, content, args) {\n      if (content.length === 0 || /^\\s+$/.test(content)) {\n        var padd = '<br data-mce-bogus=\"1\">';\n        if (body.nodeName === 'TABLE') {\n          content = '<tr><td>' + padd + '</td></tr>';\n        } else if (/^(UL|OL)$/.test(body.nodeName)) {\n          content = '<li>' + padd + '</li>';\n        }\n        var forcedRootBlockName = getForcedRootBlock(editor);\n        if (forcedRootBlockName && editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {\n          content = padd;\n          content = editor.dom.createHTML(forcedRootBlockName, getForcedRootBlockAttrs(editor), content);\n        } else if (!content) {\n          content = '<br data-mce-bogus=\"1\">';\n        }\n        setEditorHtml(editor, content, args.no_selection);\n        editor.fire('SetContent', args);\n      } else {\n        if (args.format !== 'raw') {\n          content = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(editor.parser.parse(content, {\n            isRootContent: true,\n            insert: true\n          }));\n        }\n        args.content = isWsPreserveElement(SugarElement.fromDom(body)) ? content : Tools.trim(content);\n        setEditorHtml(editor, args.content, args.no_selection);\n        if (!args.no_events) {\n          editor.fire('SetContent', args);\n        }\n      }\n      return args.content;\n    };\n    var setContentTree = function (editor, body, content, args) {\n      filter$1(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content);\n      var html = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(content);\n      args.content = isWsPreserveElement(SugarElement.fromDom(body)) ? html : Tools.trim(html);\n      setEditorHtml(editor, args.content, args.no_selection);\n      if (!args.no_events) {\n        editor.fire('SetContent', args);\n      }\n      return content;\n    };\n    var setupArgs$2 = function (args, content) {\n      return __assign(__assign({ format: defaultFormat$1 }, args), {\n        set: true,\n        content: isTreeNode(content) ? '' : content\n      });\n    };\n    var setContentInternal = function (editor, content, args) {\n      var defaultedArgs = setupArgs$2(args, content);\n      var updatedArgs = args.no_events ? defaultedArgs : editor.fire('BeforeSetContent', defaultedArgs);\n      if (!isTreeNode(content)) {\n        content = updatedArgs.content;\n      }\n      return Optional.from(editor.getBody()).fold(constant(content), function (body) {\n        return isTreeNode(content) ? setContentTree(editor, body, content, updatedArgs) : setContentString(editor, body, content, updatedArgs);\n      });\n    };\n\n    var sibling = function (scope, predicate) {\n      return sibling$2(scope, predicate).isSome();\n    };\n\n    var ensureIsRoot = function (isRoot) {\n      return isFunction(isRoot) ? isRoot : never;\n    };\n    var ancestor = function (scope, transform, isRoot) {\n      var element = scope.dom;\n      var stop = ensureIsRoot(isRoot);\n      while (element.parentNode) {\n        element = element.parentNode;\n        var el = SugarElement.fromDom(element);\n        var transformed = transform(el);\n        if (transformed.isSome()) {\n          return transformed;\n        } else if (stop(el)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    var closest$1 = function (scope, transform, isRoot) {\n      var current = transform(scope);\n      var stop = ensureIsRoot(isRoot);\n      return current.orThunk(function () {\n        return stop(scope) ? Optional.none() : ancestor(scope, transform, stop);\n      });\n    };\n\n    var isEq$3 = isEq$5;\n    var matchesUnInheritedFormatSelector = function (ed, node, name) {\n      var formatList = ed.formatter.get(name);\n      if (formatList) {\n        for (var i = 0; i < formatList.length; i++) {\n          var format = formatList[i];\n          if (isSelectorFormat(format) && format.inherit === false && ed.dom.is(node, format.selector)) {\n            return true;\n          }\n        }\n      }\n      return false;\n    };\n    var matchParents = function (editor, node, name, vars, similar) {\n      var root = editor.dom.getRoot();\n      if (node === root) {\n        return false;\n      }\n      node = editor.dom.getParent(node, function (node) {\n        if (matchesUnInheritedFormatSelector(editor, node, name)) {\n          return true;\n        }\n        return node.parentNode === root || !!matchNode(editor, node, name, vars, true);\n      });\n      return !!matchNode(editor, node, name, vars, similar);\n    };\n    var matchName$1 = function (dom, node, format) {\n      if (isEq$3(node, format.inline)) {\n        return true;\n      }\n      if (isEq$3(node, format.block)) {\n        return true;\n      }\n      if (format.selector) {\n        return node.nodeType === 1 && dom.is(node, format.selector);\n      }\n    };\n    var matchItems = function (dom, node, format, itemName, similar, vars) {\n      var items = format[itemName];\n      if (isFunction(format.onmatch)) {\n        return format.onmatch(node, format, itemName);\n      }\n      if (items) {\n        if (isUndefined(items.length)) {\n          for (var key in items) {\n            if (has$2(items, key)) {\n              var value = itemName === 'attributes' ? dom.getAttrib(node, key) : getStyle(dom, node, key);\n              var expectedValue = replaceVars(items[key], vars);\n              var isEmptyValue = isNullable(value) || isEmpty$3(value);\n              if (isEmptyValue && isNullable(expectedValue)) {\n                continue;\n              }\n              if (similar && isEmptyValue && !format.exact) {\n                return false;\n              }\n              if ((!similar || format.exact) && !isEq$3(value, normalizeStyleValue(dom, expectedValue, key))) {\n                return false;\n              }\n            }\n          }\n        } else {\n          for (var i = 0; i < items.length; i++) {\n            if (itemName === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(dom, node, items[i])) {\n              return true;\n            }\n          }\n        }\n      }\n      return true;\n    };\n    var matchNode = function (ed, node, name, vars, similar) {\n      var formatList = ed.formatter.get(name);\n      var dom = ed.dom;\n      if (formatList && node) {\n        for (var i = 0; i < formatList.length; i++) {\n          var format = formatList[i];\n          if (matchName$1(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) {\n            var classes = format.classes;\n            if (classes) {\n              for (var x = 0; x < classes.length; x++) {\n                if (!ed.dom.hasClass(node, replaceVars(classes[x], vars))) {\n                  return;\n                }\n              }\n            }\n            return format;\n          }\n        }\n      }\n    };\n    var match$2 = function (editor, name, vars, node, similar) {\n      if (node) {\n        return matchParents(editor, node, name, vars, similar);\n      }\n      node = editor.selection.getNode();\n      if (matchParents(editor, node, name, vars, similar)) {\n        return true;\n      }\n      var startNode = editor.selection.getStart();\n      if (startNode !== node) {\n        if (matchParents(editor, startNode, name, vars, similar)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    var matchAll = function (editor, names, vars) {\n      var matchedFormatNames = [];\n      var checkedMap = {};\n      var startElement = editor.selection.getStart();\n      editor.dom.getParent(startElement, function (node) {\n        for (var i = 0; i < names.length; i++) {\n          var name_1 = names[i];\n          if (!checkedMap[name_1] && matchNode(editor, node, name_1, vars)) {\n            checkedMap[name_1] = true;\n            matchedFormatNames.push(name_1);\n          }\n        }\n      }, editor.dom.getRoot());\n      return matchedFormatNames;\n    };\n    var closest = function (editor, names) {\n      var isRoot = function (elm) {\n        return eq(elm, SugarElement.fromDom(editor.getBody()));\n      };\n      var match = function (elm, name) {\n        return matchNode(editor, elm.dom, name) ? Optional.some(name) : Optional.none();\n      };\n      return Optional.from(editor.selection.getStart(true)).bind(function (rawElm) {\n        return closest$1(SugarElement.fromDom(rawElm), function (elm) {\n          return findMap(names, function (name) {\n            return match(elm, name);\n          });\n        }, isRoot);\n      }).getOrNull();\n    };\n    var canApply = function (editor, name) {\n      var formatList = editor.formatter.get(name);\n      var dom = editor.dom;\n      if (formatList) {\n        var startNode = editor.selection.getStart();\n        var parents = getParents$2(dom, startNode);\n        for (var x = formatList.length - 1; x >= 0; x--) {\n          var format = formatList[x];\n          if (!isSelectorFormat(format) || isNonNullable(format.defaultBlock)) {\n            return true;\n          }\n          for (var i = parents.length - 1; i >= 0; i--) {\n            if (dom.is(parents[i], format.selector)) {\n              return true;\n            }\n          }\n        }\n      }\n      return false;\n    };\n    var matchAllOnNode = function (editor, node, formatNames) {\n      return foldl(formatNames, function (acc, name) {\n        var matchSimilar = isVariableFormatName(editor, name);\n        if (editor.formatter.matchNode(node, name, {}, matchSimilar)) {\n          return acc.concat([name]);\n        } else {\n          return acc;\n        }\n      }, []);\n    };\n\n    var ZWSP = ZWSP$1, CARET_ID = '_mce_caret';\n    var importNode = function (ownerDocument, node) {\n      return ownerDocument.importNode(node, true);\n    };\n    var getEmptyCaretContainers = function (node) {\n      var nodes = [];\n      while (node) {\n        if (node.nodeType === 3 && node.nodeValue !== ZWSP || node.childNodes.length > 1) {\n          return [];\n        }\n        if (node.nodeType === 1) {\n          nodes.push(node);\n        }\n        node = node.firstChild;\n      }\n      return nodes;\n    };\n    var isCaretContainerEmpty = function (node) {\n      return getEmptyCaretContainers(node).length > 0;\n    };\n    var findFirstTextNode = function (node) {\n      if (node) {\n        var walker = new DomTreeWalker(node, node);\n        for (node = walker.current(); node; node = walker.next()) {\n          if (isText$7(node)) {\n            return node;\n          }\n        }\n      }\n      return null;\n    };\n    var createCaretContainer = function (fill) {\n      var caretContainer = SugarElement.fromTag('span');\n      setAll$1(caretContainer, {\n        'id': CARET_ID,\n        'data-mce-bogus': '1',\n        'data-mce-type': 'format-caret'\n      });\n      if (fill) {\n        append$1(caretContainer, SugarElement.fromText(ZWSP));\n      }\n      return caretContainer;\n    };\n    var trimZwspFromCaretContainer = function (caretContainerNode) {\n      var textNode = findFirstTextNode(caretContainerNode);\n      if (textNode && textNode.nodeValue.charAt(0) === ZWSP) {\n        textNode.deleteData(0, 1);\n      }\n      return textNode;\n    };\n    var removeCaretContainerNode = function (editor, node, moveCaret) {\n      if (moveCaret === void 0) {\n        moveCaret = true;\n      }\n      var dom = editor.dom, selection = editor.selection;\n      if (isCaretContainerEmpty(node)) {\n        deleteElement$2(editor, false, SugarElement.fromDom(node), moveCaret);\n      } else {\n        var rng = selection.getRng();\n        var block = dom.getParent(node, dom.isBlock);\n        var startContainer = rng.startContainer;\n        var startOffset = rng.startOffset;\n        var endContainer = rng.endContainer;\n        var endOffset = rng.endOffset;\n        var textNode = trimZwspFromCaretContainer(node);\n        dom.remove(node, true);\n        if (startContainer === textNode && startOffset > 0) {\n          rng.setStart(textNode, startOffset - 1);\n        }\n        if (endContainer === textNode && endOffset > 0) {\n          rng.setEnd(textNode, endOffset - 1);\n        }\n        if (block && dom.isEmpty(block)) {\n          fillWithPaddingBr(SugarElement.fromDom(block));\n        }\n        selection.setRng(rng);\n      }\n    };\n    var removeCaretContainer = function (editor, node, moveCaret) {\n      if (moveCaret === void 0) {\n        moveCaret = true;\n      }\n      var dom = editor.dom, selection = editor.selection;\n      if (!node) {\n        node = getParentCaretContainer(editor.getBody(), selection.getStart());\n        if (!node) {\n          while (node = dom.get(CARET_ID)) {\n            removeCaretContainerNode(editor, node, false);\n          }\n        }\n      } else {\n        removeCaretContainerNode(editor, node, moveCaret);\n      }\n    };\n    var insertCaretContainerNode = function (editor, caretContainer, formatNode) {\n      var dom = editor.dom, block = dom.getParent(formatNode, curry(isTextBlock$1, editor));\n      if (block && dom.isEmpty(block)) {\n        formatNode.parentNode.replaceChild(caretContainer, formatNode);\n      } else {\n        removeTrailingBr(SugarElement.fromDom(formatNode));\n        if (dom.isEmpty(formatNode)) {\n          formatNode.parentNode.replaceChild(caretContainer, formatNode);\n        } else {\n          dom.insertAfter(caretContainer, formatNode);\n        }\n      }\n    };\n    var appendNode = function (parentNode, node) {\n      parentNode.appendChild(node);\n      return node;\n    };\n    var insertFormatNodesIntoCaretContainer = function (formatNodes, caretContainer) {\n      var innerMostFormatNode = foldr(formatNodes, function (parentNode, formatNode) {\n        return appendNode(parentNode, formatNode.cloneNode(false));\n      }, caretContainer);\n      return appendNode(innerMostFormatNode, innerMostFormatNode.ownerDocument.createTextNode(ZWSP));\n    };\n    var cleanFormatNode = function (editor, caretContainer, formatNode, name, vars, similar) {\n      var formatter = editor.formatter;\n      var dom = editor.dom;\n      var validFormats = filter$4(keys(formatter.get()), function (formatName) {\n        return formatName !== name && !contains$2(formatName, 'removeformat');\n      });\n      var matchedFormats = matchAllOnNode(editor, formatNode, validFormats);\n      var uniqueFormats = filter$4(matchedFormats, function (fmtName) {\n        return !areSimilarFormats(editor, fmtName, name);\n      });\n      if (uniqueFormats.length > 0) {\n        var clonedFormatNode = formatNode.cloneNode(false);\n        dom.add(caretContainer, clonedFormatNode);\n        formatter.remove(name, vars, clonedFormatNode, similar);\n        dom.remove(clonedFormatNode);\n        return Optional.some(clonedFormatNode);\n      } else {\n        return Optional.none();\n      }\n    };\n    var applyCaretFormat = function (editor, name, vars) {\n      var caretContainer, textNode;\n      var selection = editor.selection;\n      var selectionRng = selection.getRng();\n      var offset = selectionRng.startOffset;\n      var container = selectionRng.startContainer;\n      var text = container.nodeValue;\n      caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart());\n      if (caretContainer) {\n        textNode = findFirstTextNode(caretContainer);\n      }\n      var wordcharRegex = /[^\\s\\u00a0\\u00ad\\u200b\\ufeff]/;\n      if (text && offset > 0 && offset < text.length && wordcharRegex.test(text.charAt(offset)) && wordcharRegex.test(text.charAt(offset - 1))) {\n        var bookmark = selection.getBookmark();\n        selectionRng.collapse(true);\n        var rng = expandRng(editor, selectionRng, editor.formatter.get(name));\n        rng = split(rng);\n        editor.formatter.apply(name, vars, rng);\n        selection.moveToBookmark(bookmark);\n      } else {\n        if (!caretContainer || textNode.nodeValue !== ZWSP) {\n          caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom);\n          textNode = caretContainer.firstChild;\n          selectionRng.insertNode(caretContainer);\n          offset = 1;\n          editor.formatter.apply(name, vars, caretContainer);\n        } else {\n          editor.formatter.apply(name, vars, caretContainer);\n        }\n        selection.setCursorLocation(textNode, offset);\n      }\n    };\n    var removeCaretFormat = function (editor, name, vars, similar) {\n      var dom = editor.dom;\n      var selection = editor.selection;\n      var hasContentAfter, node, formatNode;\n      var parents = [];\n      var rng = selection.getRng();\n      var container = rng.startContainer;\n      var offset = rng.startOffset;\n      node = container;\n      if (container.nodeType === 3) {\n        if (offset !== container.nodeValue.length) {\n          hasContentAfter = true;\n        }\n        node = node.parentNode;\n      }\n      while (node) {\n        if (matchNode(editor, node, name, vars, similar)) {\n          formatNode = node;\n          break;\n        }\n        if (node.nextSibling) {\n          hasContentAfter = true;\n        }\n        parents.push(node);\n        node = node.parentNode;\n      }\n      if (!formatNode) {\n        return;\n      }\n      if (hasContentAfter) {\n        var bookmark = selection.getBookmark();\n        rng.collapse(true);\n        var expandedRng = expandRng(editor, rng, editor.formatter.get(name), true);\n        expandedRng = split(expandedRng);\n        editor.formatter.remove(name, vars, expandedRng, similar);\n        selection.moveToBookmark(bookmark);\n      } else {\n        var caretContainer = getParentCaretContainer(editor.getBody(), formatNode);\n        var newCaretContainer = createCaretContainer(false).dom;\n        insertCaretContainerNode(editor, newCaretContainer, caretContainer !== null ? caretContainer : formatNode);\n        var cleanedFormatNode = cleanFormatNode(editor, newCaretContainer, formatNode, name, vars, similar);\n        var caretTextNode = insertFormatNodesIntoCaretContainer(parents.concat(cleanedFormatNode.toArray()), newCaretContainer);\n        removeCaretContainerNode(editor, caretContainer, false);\n        selection.setCursorLocation(caretTextNode, 1);\n        if (dom.isEmpty(formatNode)) {\n          dom.remove(formatNode);\n        }\n      }\n    };\n    var disableCaretContainer = function (editor, keyCode) {\n      var selection = editor.selection, body = editor.getBody();\n      removeCaretContainer(editor, null, false);\n      if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP) {\n        removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n      }\n      if (keyCode === 37 || keyCode === 39) {\n        removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n      }\n    };\n    var setup$k = function (editor) {\n      editor.on('mouseup keydown', function (e) {\n        disableCaretContainer(editor, e.keyCode);\n      });\n    };\n    var replaceWithCaretFormat = function (targetNode, formatNodes) {\n      var caretContainer = createCaretContainer(false);\n      var innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom);\n      before$4(SugarElement.fromDom(targetNode), caretContainer);\n      remove$7(SugarElement.fromDom(targetNode));\n      return CaretPosition(innerMost, 0);\n    };\n    var isFormatElement = function (editor, element) {\n      var inlineElements = editor.schema.getTextInlineElements();\n      return has$2(inlineElements, name(element)) && !isCaretNode(element.dom) && !isBogus$2(element.dom);\n    };\n    var isEmptyCaretFormatElement = function (element) {\n      return isCaretNode(element.dom) && isCaretContainerEmpty(element.dom);\n    };\n\n    var postProcessHooks = {};\n    var filter = filter$2;\n    var each$b = each$i;\n    var addPostProcessHook = function (name, hook) {\n      var hooks = postProcessHooks[name];\n      if (!hooks) {\n        postProcessHooks[name] = [];\n      }\n      postProcessHooks[name].push(hook);\n    };\n    var postProcess$1 = function (name, editor) {\n      each$b(postProcessHooks[name], function (hook) {\n        hook(editor);\n      });\n    };\n    addPostProcessHook('pre', function (editor) {\n      var rng = editor.selection.getRng();\n      var blocks;\n      var hasPreSibling = function (pre) {\n        return isPre(pre.previousSibling) && indexOf$1(blocks, pre.previousSibling) !== -1;\n      };\n      var joinPre = function (pre1, pre2) {\n        DomQuery(pre2).remove();\n        DomQuery(pre1).append('<br><br>').append(pre2.childNodes);\n      };\n      var isPre = matchNodeNames(['pre']);\n      if (!rng.collapsed) {\n        blocks = editor.selection.getSelectedBlocks();\n        each$b(filter(filter(blocks, isPre), hasPreSibling), function (pre) {\n          joinPre(pre.previousSibling, pre);\n        });\n      }\n    });\n\n    var each$a = Tools.each;\n    var isElementNode$1 = function (node) {\n      return isElement$5(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$2(node);\n    };\n    var findElementSibling = function (node, siblingName) {\n      for (var sibling = node; sibling; sibling = sibling[siblingName]) {\n        if (isText$7(sibling) && isNotEmpty(sibling.data)) {\n          return node;\n        }\n        if (isElement$5(sibling) && !isBookmarkNode$1(sibling)) {\n          return sibling;\n        }\n      }\n      return node;\n    };\n    var mergeSiblingsNodes = function (dom, prev, next) {\n      var elementUtils = ElementUtils(dom);\n      if (prev && next) {\n        prev = findElementSibling(prev, 'previousSibling');\n        next = findElementSibling(next, 'nextSibling');\n        if (elementUtils.compare(prev, next)) {\n          for (var sibling = prev.nextSibling; sibling && sibling !== next;) {\n            var tmpSibling = sibling;\n            sibling = sibling.nextSibling;\n            prev.appendChild(tmpSibling);\n          }\n          dom.remove(next);\n          Tools.each(Tools.grep(next.childNodes), function (node) {\n            prev.appendChild(node);\n          });\n          return prev;\n        }\n      }\n      return next;\n    };\n    var mergeSiblings = function (dom, format, vars, node) {\n      if (node && format.merge_siblings !== false) {\n        var newNode = mergeSiblingsNodes(dom, getNonWhiteSpaceSibling(node), node);\n        mergeSiblingsNodes(dom, newNode, getNonWhiteSpaceSibling(newNode, true));\n      }\n    };\n    var clearChildStyles = function (dom, format, node) {\n      if (format.clear_child_styles) {\n        var selector = format.links ? '*:not(a)' : '*';\n        each$a(dom.select(selector, node), function (node) {\n          if (isElementNode$1(node)) {\n            each$a(format.styles, function (value, name) {\n              dom.setStyle(node, name, '');\n            });\n          }\n        });\n      }\n    };\n    var processChildElements = function (node, filter, process) {\n      each$a(node.childNodes, function (node) {\n        if (isElementNode$1(node)) {\n          if (filter(node)) {\n            process(node);\n          }\n          if (node.hasChildNodes()) {\n            processChildElements(node, filter, process);\n          }\n        }\n      });\n    };\n    var unwrapEmptySpan = function (dom, node) {\n      if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {\n        dom.remove(node, true);\n      }\n    };\n    var hasStyle = function (dom, name) {\n      return function (node) {\n        return !!(node && getStyle(dom, node, name));\n      };\n    };\n    var applyStyle = function (dom, name, value) {\n      return function (node) {\n        dom.setStyle(node, name, value);\n        if (node.getAttribute('style') === '') {\n          node.removeAttribute('style');\n        }\n        unwrapEmptySpan(dom, node);\n      };\n    };\n\n    var removeResult = Adt.generate([\n      { keep: [] },\n      { rename: ['name'] },\n      { removed: [] }\n    ]);\n    var MCE_ATTR_RE = /^(src|href|style)$/;\n    var each$9 = Tools.each;\n    var isEq$2 = isEq$5;\n    var isTableCellOrRow = function (node) {\n      return /^(TR|TH|TD)$/.test(node.nodeName);\n    };\n    var isChildOfInlineParent = function (dom, node, parent) {\n      return dom.isChildOf(node, parent) && node !== parent && !dom.isBlock(parent);\n    };\n    var getContainer = function (ed, rng, start) {\n      var container = rng[start ? 'startContainer' : 'endContainer'];\n      var offset = rng[start ? 'startOffset' : 'endOffset'];\n      if (isElement$5(container)) {\n        var lastIdx = container.childNodes.length - 1;\n        if (!start && offset) {\n          offset--;\n        }\n        container = container.childNodes[offset > lastIdx ? lastIdx : offset];\n      }\n      if (isText$7(container) && start && offset >= container.nodeValue.length) {\n        container = new DomTreeWalker(container, ed.getBody()).next() || container;\n      }\n      if (isText$7(container) && !start && offset === 0) {\n        container = new DomTreeWalker(container, ed.getBody()).prev() || container;\n      }\n      return container;\n    };\n    var normalizeTableSelection = function (node, start) {\n      var prop = start ? 'firstChild' : 'lastChild';\n      if (isTableCellOrRow(node) && node[prop]) {\n        var childNode = node[prop];\n        if (node.nodeName === 'TR') {\n          return childNode[prop] || childNode;\n        } else {\n          return childNode;\n        }\n      }\n      return node;\n    };\n    var wrap$1 = function (dom, node, name, attrs) {\n      var wrapper = dom.create(name, attrs);\n      node.parentNode.insertBefore(wrapper, node);\n      wrapper.appendChild(node);\n      return wrapper;\n    };\n    var wrapWithSiblings = function (dom, node, next, name, attrs) {\n      var start = SugarElement.fromDom(node);\n      var wrapper = SugarElement.fromDom(dom.create(name, attrs));\n      var siblings = next ? nextSiblings(start) : prevSiblings(start);\n      append(wrapper, siblings);\n      if (next) {\n        before$4(start, wrapper);\n        prepend(wrapper, start);\n      } else {\n        after$3(start, wrapper);\n        append$1(wrapper, start);\n      }\n      return wrapper.dom;\n    };\n    var matchName = function (dom, node, format) {\n      if (isInlineFormat(format) && isEq$2(node, format.inline)) {\n        return true;\n      }\n      if (isBlockFormat(format) && isEq$2(node, format.block)) {\n        return true;\n      }\n      if (isSelectorFormat(format)) {\n        return isElement$5(node) && dom.is(node, format.selector);\n      }\n    };\n    var isColorFormatAndAnchor = function (node, format) {\n      return format.links && node.nodeName === 'A';\n    };\n    var find = function (dom, node, next, inc) {\n      var sibling = getNonWhiteSpaceSibling(node, next, inc);\n      return isNullable(sibling) || sibling.nodeName === 'BR' || dom.isBlock(sibling);\n    };\n    var removeNode = function (ed, node, format) {\n      var parentNode = node.parentNode;\n      var rootBlockElm;\n      var dom = ed.dom, forcedRootBlock = getForcedRootBlock(ed);\n      if (isBlockFormat(format)) {\n        if (!forcedRootBlock) {\n          if (dom.isBlock(node) && !dom.isBlock(parentNode)) {\n            if (!find(dom, node, false) && !find(dom, node.firstChild, true, true)) {\n              node.insertBefore(dom.create('br'), node.firstChild);\n            }\n            if (!find(dom, node, true) && !find(dom, node.lastChild, false, true)) {\n              node.appendChild(dom.create('br'));\n            }\n          }\n        } else {\n          if (parentNode === dom.getRoot()) {\n            if (!format.list_block || !isEq$2(node, format.list_block)) {\n              each$k(from(node.childNodes), function (node) {\n                if (isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) {\n                  if (!rootBlockElm) {\n                    rootBlockElm = wrap$1(dom, node, forcedRootBlock);\n                    dom.setAttribs(rootBlockElm, ed.settings.forced_root_block_attrs);\n                  } else {\n                    rootBlockElm.appendChild(node);\n                  }\n                } else {\n                  rootBlockElm = null;\n                }\n              });\n            }\n          }\n        }\n      }\n      if (isMixedFormat(format) && !isEq$2(format.inline, node)) {\n        return;\n      }\n      dom.remove(node, true);\n    };\n    var removeFormatInternal = function (ed, format, vars, node, compareNode) {\n      var stylesModified;\n      var dom = ed.dom;\n      if (!matchName(dom, node, format) && !isColorFormatAndAnchor(node, format)) {\n        return removeResult.keep();\n      }\n      var elm = node;\n      if (isInlineFormat(format) && format.remove === 'all' && isArray$1(format.preserve_attributes)) {\n        var attrsToPreserve = filter$4(dom.getAttribs(elm), function (attr) {\n          return contains$3(format.preserve_attributes, attr.name.toLowerCase());\n        });\n        dom.removeAllAttribs(elm);\n        each$k(attrsToPreserve, function (attr) {\n          return dom.setAttrib(elm, attr.name, attr.value);\n        });\n        if (attrsToPreserve.length > 0) {\n          return removeResult.rename('span');\n        }\n      }\n      if (format.remove !== 'all') {\n        each$9(format.styles, function (value, name) {\n          value = normalizeStyleValue(dom, replaceVars(value, vars), name + '');\n          if (isNumber(name)) {\n            name = value;\n            compareNode = null;\n          }\n          if (format.remove_similar || (!compareNode || isEq$2(getStyle(dom, compareNode, name), value))) {\n            dom.setStyle(elm, name, '');\n          }\n          stylesModified = true;\n        });\n        if (stylesModified && dom.getAttrib(elm, 'style') === '') {\n          elm.removeAttribute('style');\n          elm.removeAttribute('data-mce-style');\n        }\n        each$9(format.attributes, function (value, name) {\n          var valueOut;\n          value = replaceVars(value, vars);\n          if (isNumber(name)) {\n            name = value;\n            compareNode = null;\n          }\n          if (format.remove_similar || (!compareNode || isEq$2(dom.getAttrib(compareNode, name), value))) {\n            if (name === 'class') {\n              value = dom.getAttrib(elm, name);\n              if (value) {\n                valueOut = '';\n                each$k(value.split(/\\s+/), function (cls) {\n                  if (/mce\\-\\w+/.test(cls)) {\n                    valueOut += (valueOut ? ' ' : '') + cls;\n                  }\n                });\n                if (valueOut) {\n                  dom.setAttrib(elm, name, valueOut);\n                  return;\n                }\n              }\n            }\n            if (MCE_ATTR_RE.test(name)) {\n              elm.removeAttribute('data-mce-' + name);\n            }\n            if (name === 'style' && matchNodeNames(['li'])(elm) && dom.getStyle(elm, 'list-style-type') === 'none') {\n              elm.removeAttribute(name);\n              dom.setStyle(elm, 'list-style-type', 'none');\n              return;\n            }\n            if (name === 'class') {\n              elm.removeAttribute('className');\n            }\n            elm.removeAttribute(name);\n          }\n        });\n        each$9(format.classes, function (value) {\n          value = replaceVars(value, vars);\n          if (!compareNode || dom.hasClass(compareNode, value)) {\n            dom.removeClass(elm, value);\n          }\n        });\n        var attrs = dom.getAttribs(elm);\n        for (var i = 0; i < attrs.length; i++) {\n          var attrName = attrs[i].nodeName;\n          if (attrName.indexOf('_') !== 0 && attrName.indexOf('data-') !== 0) {\n            return removeResult.keep();\n          }\n        }\n      }\n      if (format.remove !== 'none') {\n        removeNode(ed, elm, format);\n        return removeResult.removed();\n      }\n      return removeResult.keep();\n    };\n    var removeFormat$1 = function (ed, format, vars, node, compareNode) {\n      return removeFormatInternal(ed, format, vars, node, compareNode).fold(never, function (newName) {\n        ed.dom.rename(node, newName);\n        return true;\n      }, always);\n    };\n    var findFormatRoot = function (editor, container, name, vars, similar) {\n      var formatRoot;\n      each$k(getParents$2(editor.dom, container.parentNode).reverse(), function (parent) {\n        if (!formatRoot && parent.id !== '_start' && parent.id !== '_end') {\n          var format = matchNode(editor, parent, name, vars, similar);\n          if (format && format.split !== false) {\n            formatRoot = parent;\n          }\n        }\n      });\n      return formatRoot;\n    };\n    var removeFormatFromClone = function (editor, format, vars, clone) {\n      return removeFormatInternal(editor, format, vars, clone, clone).fold(constant(clone), function (newName) {\n        var fragment = editor.dom.createFragment();\n        fragment.appendChild(clone);\n        return editor.dom.rename(clone, newName);\n      }, constant(null));\n    };\n    var wrapAndSplit = function (editor, formatList, formatRoot, container, target, split, format, vars) {\n      var clone, lastClone, firstClone;\n      var dom = editor.dom;\n      if (formatRoot) {\n        var formatRootParent = formatRoot.parentNode;\n        for (var parent_1 = container.parentNode; parent_1 && parent_1 !== formatRootParent; parent_1 = parent_1.parentNode) {\n          clone = dom.clone(parent_1, false);\n          for (var i = 0; i < formatList.length; i++) {\n            clone = removeFormatFromClone(editor, formatList[i], vars, clone);\n            if (clone === null) {\n              break;\n            }\n          }\n          if (clone) {\n            if (lastClone) {\n              clone.appendChild(lastClone);\n            }\n            if (!firstClone) {\n              firstClone = clone;\n            }\n            lastClone = clone;\n          }\n        }\n        if (split && (!format.mixed || !dom.isBlock(formatRoot))) {\n          container = dom.split(formatRoot, container);\n        }\n        if (lastClone) {\n          target.parentNode.insertBefore(lastClone, target);\n          firstClone.appendChild(target);\n          if (isInlineFormat(format)) {\n            mergeSiblings(dom, format, vars, lastClone);\n          }\n        }\n      }\n      return container;\n    };\n    var remove$1 = function (ed, name, vars, node, similar) {\n      var formatList = ed.formatter.get(name);\n      var format = formatList[0];\n      var contentEditable = true;\n      var dom = ed.dom;\n      var selection = ed.selection;\n      var splitToFormatRoot = function (container) {\n        var formatRoot = findFormatRoot(ed, container, name, vars, similar);\n        return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format, vars);\n      };\n      var isRemoveBookmarkNode = function (node) {\n        return isBookmarkNode$1(node) && isElement$5(node) && (node.id === '_start' || node.id === '_end');\n      };\n      var removeNodeFormat = function (node) {\n        return exists(formatList, function (fmt) {\n          return removeFormat$1(ed, fmt, vars, node, node);\n        });\n      };\n      var process = function (node) {\n        var lastContentEditable = true;\n        var hasContentEditableState = false;\n        if (isElement$5(node) && dom.getContentEditable(node)) {\n          lastContentEditable = contentEditable;\n          contentEditable = dom.getContentEditable(node) === 'true';\n          hasContentEditableState = true;\n        }\n        var children = from(node.childNodes);\n        if (contentEditable && !hasContentEditableState) {\n          var removed = removeNodeFormat(node);\n          var currentNodeMatches = removed || exists(formatList, function (f) {\n            return matchName$1(dom, node, f);\n          });\n          var parentNode = node.parentNode;\n          if (!currentNodeMatches && isNonNullable(parentNode) && shouldExpandToSelector(format)) {\n            removeNodeFormat(parentNode);\n          }\n        }\n        if (format.deep) {\n          if (children.length) {\n            for (var i = 0; i < children.length; i++) {\n              process(children[i]);\n            }\n            if (hasContentEditableState) {\n              contentEditable = lastContentEditable;\n            }\n          }\n        }\n        var textDecorations = [\n          'underline',\n          'line-through',\n          'overline'\n        ];\n        each$k(textDecorations, function (decoration) {\n          if (isElement$5(node) && ed.dom.getStyle(node, 'text-decoration') === decoration && node.parentNode && getTextDecoration(dom, node.parentNode) === decoration) {\n            removeFormat$1(ed, {\n              deep: false,\n              exact: true,\n              inline: 'span',\n              styles: { textDecoration: decoration }\n            }, null, node);\n          }\n        });\n      };\n      var unwrap = function (start) {\n        var node = dom.get(start ? '_start' : '_end');\n        var out = node[start ? 'firstChild' : 'lastChild'];\n        if (isRemoveBookmarkNode(out)) {\n          out = out[start ? 'firstChild' : 'lastChild'];\n        }\n        if (isText$7(out) && out.data.length === 0) {\n          out = start ? node.previousSibling || node.nextSibling : node.nextSibling || node.previousSibling;\n        }\n        dom.remove(node, true);\n        return out;\n      };\n      var removeRngStyle = function (rng) {\n        var startContainer, endContainer;\n        var expandedRng = expandRng(ed, rng, formatList, rng.collapsed);\n        if (format.split) {\n          expandedRng = split(expandedRng);\n          startContainer = getContainer(ed, expandedRng, true);\n          endContainer = getContainer(ed, expandedRng);\n          if (startContainer !== endContainer) {\n            startContainer = normalizeTableSelection(startContainer, true);\n            endContainer = normalizeTableSelection(endContainer, false);\n            if (isChildOfInlineParent(dom, startContainer, endContainer)) {\n              var marker = Optional.from(startContainer.firstChild).getOr(startContainer);\n              splitToFormatRoot(wrapWithSiblings(dom, marker, true, 'span', {\n                'id': '_start',\n                'data-mce-type': 'bookmark'\n              }));\n              unwrap(true);\n              return;\n            }\n            if (isChildOfInlineParent(dom, endContainer, startContainer)) {\n              var marker = Optional.from(endContainer.lastChild).getOr(endContainer);\n              splitToFormatRoot(wrapWithSiblings(dom, marker, false, 'span', {\n                'id': '_end',\n                'data-mce-type': 'bookmark'\n              }));\n              unwrap(false);\n              return;\n            }\n            startContainer = wrap$1(dom, startContainer, 'span', {\n              'id': '_start',\n              'data-mce-type': 'bookmark'\n            });\n            endContainer = wrap$1(dom, endContainer, 'span', {\n              'id': '_end',\n              'data-mce-type': 'bookmark'\n            });\n            var newRng = dom.createRng();\n            newRng.setStartAfter(startContainer);\n            newRng.setEndBefore(endContainer);\n            walk$2(dom, newRng, function (nodes) {\n              each$k(nodes, function (n) {\n                if (!isBookmarkNode$1(n) && !isBookmarkNode$1(n.parentNode)) {\n                  splitToFormatRoot(n);\n                }\n              });\n            });\n            splitToFormatRoot(startContainer);\n            splitToFormatRoot(endContainer);\n            startContainer = unwrap(true);\n            endContainer = unwrap();\n          } else {\n            startContainer = endContainer = splitToFormatRoot(startContainer);\n          }\n          expandedRng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;\n          expandedRng.startOffset = dom.nodeIndex(startContainer);\n          expandedRng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;\n          expandedRng.endOffset = dom.nodeIndex(endContainer) + 1;\n        }\n        walk$2(dom, expandedRng, function (nodes) {\n          each$k(nodes, process);\n        });\n      };\n      if (node) {\n        if (isNode(node)) {\n          var rng = dom.createRng();\n          rng.setStartBefore(node);\n          rng.setEndAfter(node);\n          removeRngStyle(rng);\n        } else {\n          removeRngStyle(node);\n        }\n        fireFormatRemove(ed, name, node, vars);\n        return;\n      }\n      if (dom.getContentEditable(selection.getNode()) === 'false') {\n        node = selection.getNode();\n        for (var i = 0; i < formatList.length; i++) {\n          if (formatList[i].ceFalseOverride) {\n            if (removeFormat$1(ed, formatList[i], vars, node, node)) {\n              break;\n            }\n          }\n        }\n        fireFormatRemove(ed, name, node, vars);\n        return;\n      }\n      if (!selection.isCollapsed() || !isInlineFormat(format) || getCellsFromEditor(ed).length) {\n        preserve(selection, true, function () {\n          runOnRanges(ed, removeRngStyle);\n        });\n        if (isInlineFormat(format) && match$2(ed, name, vars, selection.getStart())) {\n          moveStart(dom, selection, selection.getRng());\n        }\n        ed.nodeChanged();\n      } else {\n        removeCaretFormat(ed, name, vars, similar);\n      }\n      fireFormatRemove(ed, name, node, vars);\n    };\n\n    var each$8 = Tools.each;\n    var mergeTextDecorationsAndColor = function (dom, format, vars, node) {\n      var processTextDecorationsAndColor = function (n) {\n        if (n.nodeType === 1 && n.parentNode && n.parentNode.nodeType === 1) {\n          var textDecoration = getTextDecoration(dom, n.parentNode);\n          if (dom.getStyle(n, 'color') && textDecoration) {\n            dom.setStyle(n, 'text-decoration', textDecoration);\n          } else if (dom.getStyle(n, 'text-decoration') === textDecoration) {\n            dom.setStyle(n, 'text-decoration', null);\n          }\n        }\n      };\n      if (format.styles && (format.styles.color || format.styles.textDecoration)) {\n        Tools.walk(node, processTextDecorationsAndColor, 'childNodes');\n        processTextDecorationsAndColor(node);\n      }\n    };\n    var mergeBackgroundColorAndFontSize = function (dom, format, vars, node) {\n      if (format.styles && format.styles.backgroundColor) {\n        processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'backgroundColor', replaceVars(format.styles.backgroundColor, vars)));\n      }\n    };\n    var mergeSubSup = function (dom, format, vars, node) {\n      if (isInlineFormat(format) && (format.inline === 'sub' || format.inline === 'sup')) {\n        processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'fontSize', ''));\n        dom.remove(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), true);\n      }\n    };\n    var mergeWithChildren = function (editor, formatList, vars, node) {\n      each$8(formatList, function (format) {\n        if (isInlineFormat(format)) {\n          each$8(editor.dom.select(format.inline, node), function (child) {\n            if (!isElementNode$1(child)) {\n              return;\n            }\n            removeFormat$1(editor, format, vars, child, format.exact ? child : null);\n          });\n        }\n        clearChildStyles(editor.dom, format, node);\n      });\n    };\n    var mergeWithParents = function (editor, format, name, vars, node) {\n      if (matchNode(editor, node.parentNode, name, vars)) {\n        if (removeFormat$1(editor, format, vars, node)) {\n          return;\n        }\n      }\n      if (format.merge_with_parents) {\n        editor.dom.getParent(node.parentNode, function (parent) {\n          if (matchNode(editor, parent, name, vars)) {\n            removeFormat$1(editor, format, vars, node);\n            return true;\n          }\n        });\n      }\n    };\n\n    var each$7 = Tools.each;\n    var isElementNode = function (node) {\n      return isElement$5(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$2(node);\n    };\n    var canFormatBR = function (editor, format, node, parentName) {\n      if (canFormatEmptyLines(editor) && isInlineFormat(format)) {\n        var validBRParentElements = getTextRootBlockElements(editor.schema);\n        var hasCaretNodeSibling = sibling(SugarElement.fromDom(node), function (sibling) {\n          return isCaretNode(sibling.dom);\n        });\n        return hasNonNullableKey(validBRParentElements, parentName) && isEmpty$2(SugarElement.fromDom(node.parentNode), false) && !hasCaretNodeSibling;\n      } else {\n        return false;\n      }\n    };\n    var applyFormat$1 = function (ed, name, vars, node) {\n      var formatList = ed.formatter.get(name);\n      var format = formatList[0];\n      var isCollapsed = !node && ed.selection.isCollapsed();\n      var dom = ed.dom;\n      var selection = ed.selection;\n      var setElementFormat = function (elm, fmt) {\n        if (fmt === void 0) {\n          fmt = format;\n        }\n        if (isFunction(fmt.onformat)) {\n          fmt.onformat(elm, fmt, vars, node);\n        }\n        each$7(fmt.styles, function (value, name) {\n          dom.setStyle(elm, name, replaceVars(value, vars));\n        });\n        if (fmt.styles) {\n          var styleVal = dom.getAttrib(elm, 'style');\n          if (styleVal) {\n            dom.setAttrib(elm, 'data-mce-style', styleVal);\n          }\n        }\n        each$7(fmt.attributes, function (value, name) {\n          dom.setAttrib(elm, name, replaceVars(value, vars));\n        });\n        each$7(fmt.classes, function (value) {\n          value = replaceVars(value, vars);\n          if (!dom.hasClass(elm, value)) {\n            dom.addClass(elm, value);\n          }\n        });\n      };\n      var applyNodeStyle = function (formatList, node) {\n        var found = false;\n        each$7(formatList, function (format) {\n          if (!isSelectorFormat(format)) {\n            return false;\n          }\n          if (isNonNullable(format.collapsed) && format.collapsed !== isCollapsed) {\n            return;\n          }\n          if (dom.is(node, format.selector) && !isCaretNode(node)) {\n            setElementFormat(node, format);\n            found = true;\n            return false;\n          }\n        });\n        return found;\n      };\n      var createWrapElement = function (wrapName) {\n        if (isString$1(wrapName)) {\n          var wrapElm = dom.create(wrapName);\n          setElementFormat(wrapElm);\n          return wrapElm;\n        } else {\n          return null;\n        }\n      };\n      var applyRngStyle = function (dom, rng, nodeSpecific) {\n        var newWrappers = [];\n        var contentEditable = true;\n        var wrapName = format.inline || format.block;\n        var wrapElm = createWrapElement(wrapName);\n        walk$2(dom, rng, function (nodes) {\n          var currentWrapElm;\n          var process = function (node) {\n            var hasContentEditableState = false;\n            var lastContentEditable = contentEditable;\n            var nodeName = node.nodeName.toLowerCase();\n            var parentNode = node.parentNode;\n            var parentName = parentNode.nodeName.toLowerCase();\n            if (isElement$5(node) && dom.getContentEditable(node)) {\n              lastContentEditable = contentEditable;\n              contentEditable = dom.getContentEditable(node) === 'true';\n              hasContentEditableState = true;\n            }\n            if (isBr$5(node) && !canFormatBR(ed, format, node, parentName)) {\n              currentWrapElm = null;\n              if (isBlockFormat(format)) {\n                dom.remove(node);\n              }\n              return;\n            }\n            if (isBlockFormat(format) && format.wrapper && matchNode(ed, node, name, vars)) {\n              currentWrapElm = null;\n              return;\n            }\n            if (contentEditable && !hasContentEditableState && isBlockFormat(format) && !format.wrapper && isTextBlock$1(ed, nodeName) && isValid(ed, parentName, wrapName)) {\n              var elm = dom.rename(node, wrapName);\n              setElementFormat(elm);\n              newWrappers.push(elm);\n              currentWrapElm = null;\n              return;\n            }\n            if (isSelectorFormat(format)) {\n              var found = applyNodeStyle(formatList, node);\n              if (!found && isNonNullable(parentNode) && shouldExpandToSelector(format)) {\n                found = applyNodeStyle(formatList, parentNode);\n              }\n              if (!isInlineFormat(format) || found) {\n                currentWrapElm = null;\n                return;\n              }\n            }\n            if (contentEditable && !hasContentEditableState && isValid(ed, wrapName, nodeName) && isValid(ed, parentName, wrapName) && !(!nodeSpecific && isText$7(node) && isZwsp(node.data)) && !isCaretNode(node) && (!isInlineFormat(format) || !dom.isBlock(node))) {\n              if (!currentWrapElm) {\n                currentWrapElm = dom.clone(wrapElm, false);\n                node.parentNode.insertBefore(currentWrapElm, node);\n                newWrappers.push(currentWrapElm);\n              }\n              currentWrapElm.appendChild(node);\n            } else {\n              currentWrapElm = null;\n              each$k(from(node.childNodes), process);\n              if (hasContentEditableState) {\n                contentEditable = lastContentEditable;\n              }\n              currentWrapElm = null;\n            }\n          };\n          each$k(nodes, process);\n        });\n        if (format.links === true) {\n          each$k(newWrappers, function (node) {\n            var process = function (node) {\n              if (node.nodeName === 'A') {\n                setElementFormat(node, format);\n              }\n              each$k(from(node.childNodes), process);\n            };\n            process(node);\n          });\n        }\n        each$k(newWrappers, function (node) {\n          var getChildCount = function (node) {\n            var count = 0;\n            each$k(node.childNodes, function (node) {\n              if (!isEmptyTextNode$1(node) && !isBookmarkNode$1(node)) {\n                count++;\n              }\n            });\n            return count;\n          };\n          var mergeStyles = function (node) {\n            var childElement = find$3(node.childNodes, isElementNode).filter(function (child) {\n              return matchName$1(dom, child, format);\n            });\n            return childElement.map(function (child) {\n              var clone = dom.clone(child, false);\n              setElementFormat(clone);\n              dom.replace(clone, node, true);\n              dom.remove(child, true);\n              return clone;\n            }).getOr(node);\n          };\n          var childCount = getChildCount(node);\n          if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {\n            dom.remove(node, true);\n            return;\n          }\n          if (isInlineFormat(format) || isBlockFormat(format) && format.wrapper) {\n            if (!format.exact && childCount === 1) {\n              node = mergeStyles(node);\n            }\n            mergeWithChildren(ed, formatList, vars, node);\n            mergeWithParents(ed, format, name, vars, node);\n            mergeBackgroundColorAndFontSize(dom, format, vars, node);\n            mergeTextDecorationsAndColor(dom, format, vars, node);\n            mergeSubSup(dom, format, vars, node);\n            mergeSiblings(dom, format, vars, node);\n          }\n        });\n      };\n      if (dom.getContentEditable(selection.getNode()) === 'false') {\n        node = selection.getNode();\n        for (var i = 0, l = formatList.length; i < l; i++) {\n          var formatItem = formatList[i];\n          if (formatItem.ceFalseOverride && isSelectorFormat(formatItem) && dom.is(node, formatItem.selector)) {\n            setElementFormat(node, formatItem);\n            break;\n          }\n        }\n        fireFormatApply(ed, name, node, vars);\n        return;\n      }\n      if (format) {\n        if (node) {\n          if (isNode(node)) {\n            if (!applyNodeStyle(formatList, node)) {\n              var rng = dom.createRng();\n              rng.setStartBefore(node);\n              rng.setEndAfter(node);\n              applyRngStyle(dom, expandRng(ed, rng, formatList), true);\n            }\n          } else {\n            applyRngStyle(dom, node, true);\n          }\n        } else {\n          if (!isCollapsed || !isInlineFormat(format) || getCellsFromEditor(ed).length) {\n            var curSelNode = selection.getNode();\n            var firstFormat = formatList[0];\n            if (!ed.settings.forced_root_block && firstFormat.defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) {\n              applyFormat$1(ed, firstFormat.defaultBlock);\n            }\n            selection.setRng(normalize(selection.getRng()));\n            preserve(selection, true, function () {\n              runOnRanges(ed, function (selectionRng, fake) {\n                var expandedRng = fake ? selectionRng : expandRng(ed, selectionRng, formatList);\n                applyRngStyle(dom, expandedRng, false);\n              });\n            });\n            moveStart(dom, selection, selection.getRng());\n            ed.nodeChanged();\n          } else {\n            applyCaretFormat(ed, name, vars);\n          }\n        }\n        postProcess$1(name, ed);\n      }\n      fireFormatApply(ed, name, node, vars);\n    };\n\n    var hasVars = function (value) {\n      return has$2(value, 'vars');\n    };\n    var setup$j = function (registeredFormatListeners, editor) {\n      registeredFormatListeners.set({});\n      editor.on('NodeChange', function (e) {\n        updateAndFireChangeCallbacks(editor, e.element, registeredFormatListeners.get());\n      });\n      editor.on('FormatApply FormatRemove', function (e) {\n        var element = Optional.from(e.node).map(function (nodeOrRange) {\n          return isNode(nodeOrRange) ? nodeOrRange : nodeOrRange.startContainer;\n        }).bind(function (node) {\n          return isElement$5(node) ? Optional.some(node) : Optional.from(node.parentElement);\n        }).getOrThunk(function () {\n          return fallbackElement(editor);\n        });\n        updateAndFireChangeCallbacks(editor, element, registeredFormatListeners.get());\n      });\n    };\n    var fallbackElement = function (editor) {\n      return editor.selection.getStart();\n    };\n    var matchingNode = function (editor, parents, format, similar, vars) {\n      var isMatchingNode = function (node) {\n        var matchingFormat = editor.formatter.matchNode(node, format, vars !== null && vars !== void 0 ? vars : {}, similar);\n        return !isUndefined(matchingFormat);\n      };\n      var isUnableToMatch = function (node) {\n        if (matchesUnInheritedFormatSelector(editor, node, format)) {\n          return true;\n        } else {\n          if (!similar) {\n            return isNonNullable(editor.formatter.matchNode(node, format, vars, true));\n          } else {\n            return false;\n          }\n        }\n      };\n      return findUntil$1(parents, isMatchingNode, isUnableToMatch);\n    };\n    var getParents = function (editor, elm) {\n      var element = elm !== null && elm !== void 0 ? elm : fallbackElement(editor);\n      return filter$4(getParents$2(editor.dom, element), function (node) {\n        return isElement$5(node) && !isBogus$2(node);\n      });\n    };\n    var updateAndFireChangeCallbacks = function (editor, elm, registeredCallbacks) {\n      var parents = getParents(editor, elm);\n      each$j(registeredCallbacks, function (data, format) {\n        var runIfChanged = function (spec) {\n          var match = matchingNode(editor, parents, format, spec.similar, hasVars(spec) ? spec.vars : undefined);\n          var isSet = match.isSome();\n          if (spec.state.get() !== isSet) {\n            spec.state.set(isSet);\n            var node_1 = match.getOr(elm);\n            if (hasVars(spec)) {\n              spec.callback(isSet, {\n                node: node_1,\n                format: format,\n                parents: parents\n              });\n            } else {\n              each$k(spec.callbacks, function (callback) {\n                return callback(isSet, {\n                  node: node_1,\n                  format: format,\n                  parents: parents\n                });\n              });\n            }\n          }\n        };\n        each$k([\n          data.withSimilar,\n          data.withoutSimilar\n        ], runIfChanged);\n        each$k(data.withVars, runIfChanged);\n      });\n    };\n    var addListeners = function (editor, registeredFormatListeners, formats, callback, similar, vars) {\n      var formatChangeItems = registeredFormatListeners.get();\n      each$k(formats.split(','), function (format) {\n        var group = get$9(formatChangeItems, format).getOrThunk(function () {\n          var base = {\n            withSimilar: {\n              state: Cell(false),\n              similar: true,\n              callbacks: []\n            },\n            withoutSimilar: {\n              state: Cell(false),\n              similar: false,\n              callbacks: []\n            },\n            withVars: []\n          };\n          formatChangeItems[format] = base;\n          return base;\n        });\n        var getCurrent = function () {\n          var parents = getParents(editor);\n          return matchingNode(editor, parents, format, similar, vars).isSome();\n        };\n        if (isUndefined(vars)) {\n          var toAppendTo = similar ? group.withSimilar : group.withoutSimilar;\n          toAppendTo.callbacks.push(callback);\n          if (toAppendTo.callbacks.length === 1) {\n            toAppendTo.state.set(getCurrent());\n          }\n        } else {\n          group.withVars.push({\n            state: Cell(getCurrent()),\n            similar: similar,\n            vars: vars,\n            callback: callback\n          });\n        }\n      });\n      registeredFormatListeners.set(formatChangeItems);\n    };\n    var removeListeners = function (registeredFormatListeners, formats, callback) {\n      var formatChangeItems = registeredFormatListeners.get();\n      each$k(formats.split(','), function (format) {\n        return get$9(formatChangeItems, format).each(function (group) {\n          formatChangeItems[format] = {\n            withSimilar: __assign(__assign({}, group.withSimilar), {\n              callbacks: filter$4(group.withSimilar.callbacks, function (cb) {\n                return cb !== callback;\n              })\n            }),\n            withoutSimilar: __assign(__assign({}, group.withoutSimilar), {\n              callbacks: filter$4(group.withoutSimilar.callbacks, function (cb) {\n                return cb !== callback;\n              })\n            }),\n            withVars: filter$4(group.withVars, function (item) {\n              return item.callback !== callback;\n            })\n          };\n        });\n      });\n      registeredFormatListeners.set(formatChangeItems);\n    };\n    var formatChangedInternal = function (editor, registeredFormatListeners, formats, callback, similar, vars) {\n      if (registeredFormatListeners.get() === null) {\n        setup$j(registeredFormatListeners, editor);\n      }\n      addListeners(editor, registeredFormatListeners, formats, callback, similar, vars);\n      return {\n        unbind: function () {\n          return removeListeners(registeredFormatListeners, formats, callback);\n        }\n      };\n    };\n\n    var toggle = function (editor, name, vars, node) {\n      var fmt = editor.formatter.get(name);\n      if (match$2(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {\n        remove$1(editor, name, vars, node);\n      } else {\n        applyFormat$1(editor, name, vars, node);\n      }\n    };\n\n    var fromElements = function (elements, scope) {\n      var doc = scope || document;\n      var fragment = doc.createDocumentFragment();\n      each$k(elements, function (element) {\n        fragment.appendChild(element.dom);\n      });\n      return SugarElement.fromDom(fragment);\n    };\n\n    var tableModel = function (element, width, rows) {\n      return {\n        element: element,\n        width: width,\n        rows: rows\n      };\n    };\n    var tableRow = function (element, cells) {\n      return {\n        element: element,\n        cells: cells\n      };\n    };\n    var cellPosition = function (x, y) {\n      return {\n        x: x,\n        y: y\n      };\n    };\n    var getSpan = function (td, key) {\n      var value = parseInt(get$6(td, key), 10);\n      return isNaN(value) ? 1 : value;\n    };\n    var fillout = function (table, x, y, tr, td) {\n      var rowspan = getSpan(td, 'rowspan');\n      var colspan = getSpan(td, 'colspan');\n      var rows = table.rows;\n      for (var y2 = y; y2 < y + rowspan; y2++) {\n        if (!rows[y2]) {\n          rows[y2] = tableRow(deep$1(tr), []);\n        }\n        for (var x2 = x; x2 < x + colspan; x2++) {\n          var cells = rows[y2].cells;\n          cells[x2] = y2 === y && x2 === x ? td : shallow(td);\n        }\n      }\n    };\n    var cellExists = function (table, x, y) {\n      var rows = table.rows;\n      var cells = rows[y] ? rows[y].cells : [];\n      return !!cells[x];\n    };\n    var skipCellsX = function (table, x, y) {\n      while (cellExists(table, x, y)) {\n        x++;\n      }\n      return x;\n    };\n    var getWidth = function (rows) {\n      return foldl(rows, function (acc, row) {\n        return row.cells.length > acc ? row.cells.length : acc;\n      }, 0);\n    };\n    var findElementPos = function (table, element) {\n      var rows = table.rows;\n      for (var y = 0; y < rows.length; y++) {\n        var cells = rows[y].cells;\n        for (var x = 0; x < cells.length; x++) {\n          if (eq(cells[x], element)) {\n            return Optional.some(cellPosition(x, y));\n          }\n        }\n      }\n      return Optional.none();\n    };\n    var extractRows = function (table, sx, sy, ex, ey) {\n      var newRows = [];\n      var rows = table.rows;\n      for (var y = sy; y <= ey; y++) {\n        var cells = rows[y].cells;\n        var slice = sx < ex ? cells.slice(sx, ex + 1) : cells.slice(ex, sx + 1);\n        newRows.push(tableRow(rows[y].element, slice));\n      }\n      return newRows;\n    };\n    var subTable = function (table, startPos, endPos) {\n      var sx = startPos.x, sy = startPos.y;\n      var ex = endPos.x, ey = endPos.y;\n      var newRows = sy < ey ? extractRows(table, sx, sy, ex, ey) : extractRows(table, sx, ey, ex, sy);\n      return tableModel(table.element, getWidth(newRows), newRows);\n    };\n    var createDomTable = function (table, rows) {\n      var tableElement = shallow(table.element);\n      var tableBody = SugarElement.fromTag('tbody');\n      append(tableBody, rows);\n      append$1(tableElement, tableBody);\n      return tableElement;\n    };\n    var modelRowsToDomRows = function (table) {\n      return map$3(table.rows, function (row) {\n        var cells = map$3(row.cells, function (cell) {\n          var td = deep$1(cell);\n          remove$6(td, 'colspan');\n          remove$6(td, 'rowspan');\n          return td;\n        });\n        var tr = shallow(row.element);\n        append(tr, cells);\n        return tr;\n      });\n    };\n    var fromDom = function (tableElm) {\n      var table = tableModel(shallow(tableElm), 0, []);\n      each$k(descendants(tableElm, 'tr'), function (tr, y) {\n        each$k(descendants(tr, 'td,th'), function (td, x) {\n          fillout(table, skipCellsX(table, x, y), y, tr, td);\n        });\n      });\n      return tableModel(table.element, getWidth(table.rows), table.rows);\n    };\n    var toDom = function (table) {\n      return createDomTable(table, modelRowsToDomRows(table));\n    };\n    var subsection = function (table, startElement, endElement) {\n      return findElementPos(table, startElement).bind(function (startPos) {\n        return findElementPos(table, endElement).map(function (endPos) {\n          return subTable(table, startPos, endPos);\n        });\n      });\n    };\n\n    var findParentListContainer = function (parents) {\n      return find$3(parents, function (elm) {\n        return name(elm) === 'ul' || name(elm) === 'ol';\n      });\n    };\n    var getFullySelectedListWrappers = function (parents, rng) {\n      return find$3(parents, function (elm) {\n        return name(elm) === 'li' && hasAllContentsSelected(elm, rng);\n      }).fold(constant([]), function (_li) {\n        return findParentListContainer(parents).map(function (listCont) {\n          var listElm = SugarElement.fromTag(name(listCont));\n          var listStyles = filter$3(getAllRaw(listCont), function (_style, name) {\n            return startsWith(name, 'list-style');\n          });\n          setAll(listElm, listStyles);\n          return [\n            SugarElement.fromTag('li'),\n            listElm\n          ];\n        }).getOr([]);\n      });\n    };\n    var wrap = function (innerElm, elms) {\n      var wrapped = foldl(elms, function (acc, elm) {\n        append$1(elm, acc);\n        return elm;\n      }, innerElm);\n      return elms.length > 0 ? fromElements([wrapped]) : wrapped;\n    };\n    var directListWrappers = function (commonAnchorContainer) {\n      if (isListItem(commonAnchorContainer)) {\n        return parent(commonAnchorContainer).filter(isList).fold(constant([]), function (listElm) {\n          return [\n            commonAnchorContainer,\n            listElm\n          ];\n        });\n      } else {\n        return isList(commonAnchorContainer) ? [commonAnchorContainer] : [];\n      }\n    };\n    var getWrapElements = function (rootNode, rng) {\n      var commonAnchorContainer = SugarElement.fromDom(rng.commonAncestorContainer);\n      var parents = parentsAndSelf(commonAnchorContainer, rootNode);\n      var wrapElements = filter$4(parents, function (elm) {\n        return isInline$1(elm) || isHeading(elm);\n      });\n      var listWrappers = getFullySelectedListWrappers(parents, rng);\n      var allWrappers = wrapElements.concat(listWrappers.length ? listWrappers : directListWrappers(commonAnchorContainer));\n      return map$3(allWrappers, shallow);\n    };\n    var emptyFragment = function () {\n      return fromElements([]);\n    };\n    var getFragmentFromRange = function (rootNode, rng) {\n      return wrap(SugarElement.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng));\n    };\n    var getParentTable = function (rootElm, cell) {\n      return ancestor$2(cell, 'table', curry(eq, rootElm));\n    };\n    var getTableFragment = function (rootNode, selectedTableCells) {\n      return getParentTable(rootNode, selectedTableCells[0]).bind(function (tableElm) {\n        var firstCell = selectedTableCells[0];\n        var lastCell = selectedTableCells[selectedTableCells.length - 1];\n        var fullTableModel = fromDom(tableElm);\n        return subsection(fullTableModel, firstCell, lastCell).map(function (sectionedTableModel) {\n          return fromElements([toDom(sectionedTableModel)]);\n        });\n      }).getOrThunk(emptyFragment);\n    };\n    var getSelectionFragment = function (rootNode, ranges) {\n      return ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]);\n    };\n    var read$3 = function (rootNode, ranges) {\n      var selectedCells = getCellsFromElementOrRanges(ranges, rootNode);\n      return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges);\n    };\n\n    var trimLeadingCollapsibleText = function (text) {\n      return text.replace(/^[ \\f\\n\\r\\t\\v]+/, '');\n    };\n    var isCollapsibleWhitespace = function (text, index) {\n      return index >= 0 && index < text.length && isWhiteSpace(text.charAt(index));\n    };\n    var getInnerText = function (bin, shouldTrim) {\n      var text = trim$2(bin.innerText);\n      return shouldTrim ? trimLeadingCollapsibleText(text) : text;\n    };\n    var getContextNodeName = function (parentBlockOpt) {\n      return parentBlockOpt.map(function (block) {\n        return block.nodeName;\n      }).getOr('div').toLowerCase();\n    };\n    var getTextContent = function (editor) {\n      return Optional.from(editor.selection.getRng()).map(function (rng) {\n        var parentBlockOpt = Optional.from(editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock));\n        var body = editor.getBody();\n        var contextNodeName = getContextNodeName(parentBlockOpt);\n        var shouldTrimSpaces = Env.browser.isIE() && contextNodeName !== 'pre';\n        var bin = editor.dom.add(body, contextNodeName, {\n          'data-mce-bogus': 'all',\n          'style': 'overflow: hidden; opacity: 0;'\n        }, rng.cloneContents());\n        var text = getInnerText(bin, shouldTrimSpaces);\n        var nonRenderedText = trim$2(bin.textContent);\n        editor.dom.remove(bin);\n        if (isCollapsibleWhitespace(nonRenderedText, 0) || isCollapsibleWhitespace(nonRenderedText, nonRenderedText.length - 1)) {\n          var parentBlock = parentBlockOpt.getOr(body);\n          var parentBlockText = getInnerText(parentBlock, shouldTrimSpaces);\n          var textIndex = parentBlockText.indexOf(text);\n          if (textIndex === -1) {\n            return text;\n          } else {\n            var hasProceedingSpace = isCollapsibleWhitespace(parentBlockText, textIndex - 1);\n            var hasTrailingSpace = isCollapsibleWhitespace(parentBlockText, textIndex + text.length);\n            return (hasProceedingSpace ? ' ' : '') + text + (hasTrailingSpace ? ' ' : '');\n          }\n        } else {\n          return text;\n        }\n      }).getOr('');\n    };\n    var getSerializedContent = function (editor, args) {\n      var rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');\n      var sel = editor.selection.getSel();\n      var ranges = processRanges(editor, getRanges(sel));\n      var fragment = args.contextual ? read$3(SugarElement.fromDom(editor.getBody()), ranges).dom : rng.cloneContents();\n      if (fragment) {\n        tmpElm.appendChild(fragment);\n      }\n      return editor.selection.serializer.serialize(tmpElm, args);\n    };\n    var setupArgs$1 = function (args, format) {\n      return __assign(__assign({}, args), {\n        format: format,\n        get: true,\n        selection: true\n      });\n    };\n    var getSelectedContentInternal = function (editor, format, args) {\n      if (args === void 0) {\n        args = {};\n      }\n      var defaultedArgs = setupArgs$1(args, format);\n      var updatedArgs = editor.fire('BeforeGetContent', defaultedArgs);\n      if (updatedArgs.isDefaultPrevented()) {\n        editor.fire('GetContent', updatedArgs);\n        return updatedArgs.content;\n      }\n      if (updatedArgs.format === 'text') {\n        return getTextContent(editor);\n      } else {\n        updatedArgs.getInner = true;\n        var content = getSerializedContent(editor, updatedArgs);\n        if (updatedArgs.format === 'tree') {\n          return content;\n        } else {\n          updatedArgs.content = editor.selection.isCollapsed() ? '' : content;\n          editor.fire('GetContent', updatedArgs);\n          return updatedArgs.content;\n        }\n      }\n    };\n\n    var KEEP = 0, INSERT = 1, DELETE = 2;\n    var diff = function (left, right) {\n      var size = left.length + right.length + 2;\n      var vDown = new Array(size);\n      var vUp = new Array(size);\n      var snake = function (start, end, diag) {\n        return {\n          start: start,\n          end: end,\n          diag: diag\n        };\n      };\n      var buildScript = function (start1, end1, start2, end2, script) {\n        var middle = getMiddleSnake(start1, end1, start2, end2);\n        if (middle === null || middle.start === end1 && middle.diag === end1 - end2 || middle.end === start1 && middle.diag === start1 - start2) {\n          var i = start1;\n          var j = start2;\n          while (i < end1 || j < end2) {\n            if (i < end1 && j < end2 && left[i] === right[j]) {\n              script.push([\n                KEEP,\n                left[i]\n              ]);\n              ++i;\n              ++j;\n            } else {\n              if (end1 - start1 > end2 - start2) {\n                script.push([\n                  DELETE,\n                  left[i]\n                ]);\n                ++i;\n              } else {\n                script.push([\n                  INSERT,\n                  right[j]\n                ]);\n                ++j;\n              }\n            }\n          }\n        } else {\n          buildScript(start1, middle.start, start2, middle.start - middle.diag, script);\n          for (var i2 = middle.start; i2 < middle.end; ++i2) {\n            script.push([\n              KEEP,\n              left[i2]\n            ]);\n          }\n          buildScript(middle.end, end1, middle.end - middle.diag, end2, script);\n        }\n      };\n      var buildSnake = function (start, diag, end1, end2) {\n        var end = start;\n        while (end - diag < end2 && end < end1 && left[end] === right[end - diag]) {\n          ++end;\n        }\n        return snake(start, end, diag);\n      };\n      var getMiddleSnake = function (start1, end1, start2, end2) {\n        var m = end1 - start1;\n        var n = end2 - start2;\n        if (m === 0 || n === 0) {\n          return null;\n        }\n        var delta = m - n;\n        var sum = n + m;\n        var offset = (sum % 2 === 0 ? sum : sum + 1) / 2;\n        vDown[1 + offset] = start1;\n        vUp[1 + offset] = end1 + 1;\n        var d, k, i, x, y;\n        for (d = 0; d <= offset; ++d) {\n          for (k = -d; k <= d; k += 2) {\n            i = k + offset;\n            if (k === -d || k !== d && vDown[i - 1] < vDown[i + 1]) {\n              vDown[i] = vDown[i + 1];\n            } else {\n              vDown[i] = vDown[i - 1] + 1;\n            }\n            x = vDown[i];\n            y = x - start1 + start2 - k;\n            while (x < end1 && y < end2 && left[x] === right[y]) {\n              vDown[i] = ++x;\n              ++y;\n            }\n            if (delta % 2 !== 0 && delta - d <= k && k <= delta + d) {\n              if (vUp[i - delta] <= vDown[i]) {\n                return buildSnake(vUp[i - delta], k + start1 - start2, end1, end2);\n              }\n            }\n          }\n          for (k = delta - d; k <= delta + d; k += 2) {\n            i = k + offset - delta;\n            if (k === delta - d || k !== delta + d && vUp[i + 1] <= vUp[i - 1]) {\n              vUp[i] = vUp[i + 1] - 1;\n            } else {\n              vUp[i] = vUp[i - 1];\n            }\n            x = vUp[i] - 1;\n            y = x - start1 + start2 - k;\n            while (x >= start1 && y >= start2 && left[x] === right[y]) {\n              vUp[i] = x--;\n              y--;\n            }\n            if (delta % 2 === 0 && -d <= k && k <= d) {\n              if (vUp[i] <= vDown[i + delta]) {\n                return buildSnake(vUp[i], k + start1 - start2, end1, end2);\n              }\n            }\n          }\n        }\n      };\n      var script = [];\n      buildScript(0, left.length, 0, right.length, script);\n      return script;\n    };\n\n    var getOuterHtml = function (elm) {\n      if (isElement$5(elm)) {\n        return elm.outerHTML;\n      } else if (isText$7(elm)) {\n        return Entities.encodeRaw(elm.data, false);\n      } else if (isComment(elm)) {\n        return '<!--' + elm.data + '-->';\n      }\n      return '';\n    };\n    var createFragment = function (html) {\n      var node;\n      var container = document.createElement('div');\n      var frag = document.createDocumentFragment();\n      if (html) {\n        container.innerHTML = html;\n      }\n      while (node = container.firstChild) {\n        frag.appendChild(node);\n      }\n      return frag;\n    };\n    var insertAt = function (elm, html, index) {\n      var fragment = createFragment(html);\n      if (elm.hasChildNodes() && index < elm.childNodes.length) {\n        var target = elm.childNodes[index];\n        target.parentNode.insertBefore(fragment, target);\n      } else {\n        elm.appendChild(fragment);\n      }\n    };\n    var removeAt = function (elm, index) {\n      if (elm.hasChildNodes() && index < elm.childNodes.length) {\n        var target = elm.childNodes[index];\n        target.parentNode.removeChild(target);\n      }\n    };\n    var applyDiff = function (diff, elm) {\n      var index = 0;\n      each$k(diff, function (action) {\n        if (action[0] === KEEP) {\n          index++;\n        } else if (action[0] === INSERT) {\n          insertAt(elm, action[1], index);\n          index++;\n        } else if (action[0] === DELETE) {\n          removeAt(elm, index);\n        }\n      });\n    };\n    var read$2 = function (elm) {\n      return filter$4(map$3(from(elm.childNodes), getOuterHtml), function (item) {\n        return item.length > 0;\n      });\n    };\n    var write = function (fragments, elm) {\n      var currentFragments = map$3(from(elm.childNodes), getOuterHtml);\n      applyDiff(diff(currentFragments, fragments), elm);\n      return elm;\n    };\n\n    var lazyTempDocument = cached(function () {\n      return document.implementation.createHTMLDocument('undo');\n    });\n    var hasIframes = function (html) {\n      return html.indexOf('</iframe>') !== -1;\n    };\n    var createFragmentedLevel = function (fragments) {\n      return {\n        type: 'fragmented',\n        fragments: fragments,\n        content: '',\n        bookmark: null,\n        beforeBookmark: null\n      };\n    };\n    var createCompleteLevel = function (content) {\n      return {\n        type: 'complete',\n        fragments: null,\n        content: content,\n        bookmark: null,\n        beforeBookmark: null\n      };\n    };\n    var createFromEditor = function (editor) {\n      var fragments = read$2(editor.getBody());\n      var trimmedFragments = bind(fragments, function (html) {\n        var trimmed = trimInternal(editor.serializer, html);\n        return trimmed.length > 0 ? [trimmed] : [];\n      });\n      var content = trimmedFragments.join('');\n      return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content);\n    };\n    var applyToEditor = function (editor, level, before) {\n      var bookmark = before ? level.beforeBookmark : level.bookmark;\n      if (level.type === 'fragmented') {\n        write(level.fragments, editor.getBody());\n      } else {\n        editor.setContent(level.content, {\n          format: 'raw',\n          no_selection: isNonNullable(bookmark) && isPathBookmark(bookmark) ? !bookmark.isFakeCaret : true\n        });\n      }\n      editor.selection.moveToBookmark(bookmark);\n    };\n    var getLevelContent = function (level) {\n      return level.type === 'fragmented' ? level.fragments.join('') : level.content;\n    };\n    var getCleanLevelContent = function (level) {\n      var elm = SugarElement.fromTag('body', lazyTempDocument());\n      set(elm, getLevelContent(level));\n      each$k(descendants(elm, '*[data-mce-bogus]'), unwrap);\n      return get$3(elm);\n    };\n    var hasEqualContent = function (level1, level2) {\n      return getLevelContent(level1) === getLevelContent(level2);\n    };\n    var hasEqualCleanedContent = function (level1, level2) {\n      return getCleanLevelContent(level1) === getCleanLevelContent(level2);\n    };\n    var isEq$1 = function (level1, level2) {\n      if (!level1 || !level2) {\n        return false;\n      } else if (hasEqualContent(level1, level2)) {\n        return true;\n      } else {\n        return hasEqualCleanedContent(level1, level2);\n      }\n    };\n\n    var isUnlocked = function (locks) {\n      return locks.get() === 0;\n    };\n\n    var setTyping = function (undoManager, typing, locks) {\n      if (isUnlocked(locks)) {\n        undoManager.typing = typing;\n      }\n    };\n    var endTyping = function (undoManager, locks) {\n      if (undoManager.typing) {\n        setTyping(undoManager, false, locks);\n        undoManager.add();\n      }\n    };\n    var endTypingLevelIgnoreLocks = function (undoManager) {\n      if (undoManager.typing) {\n        undoManager.typing = false;\n        undoManager.add();\n      }\n    };\n\n    var beforeChange$1 = function (editor, locks, beforeBookmark) {\n      if (isUnlocked(locks)) {\n        beforeBookmark.set(getUndoBookmark(editor.selection));\n      }\n    };\n    var addUndoLevel$1 = function (editor, undoManager, index, locks, beforeBookmark, level, event) {\n      var currentLevel = createFromEditor(editor);\n      level = level || {};\n      level = Tools.extend(level, currentLevel);\n      if (isUnlocked(locks) === false || editor.removed) {\n        return null;\n      }\n      var lastLevel = undoManager.data[index.get()];\n      if (editor.fire('BeforeAddUndo', {\n          level: level,\n          lastLevel: lastLevel,\n          originalEvent: event\n        }).isDefaultPrevented()) {\n        return null;\n      }\n      if (lastLevel && isEq$1(lastLevel, level)) {\n        return null;\n      }\n      if (undoManager.data[index.get()]) {\n        beforeBookmark.get().each(function (bm) {\n          undoManager.data[index.get()].beforeBookmark = bm;\n        });\n      }\n      var customUndoRedoLevels = getCustomUndoRedoLevels(editor);\n      if (customUndoRedoLevels) {\n        if (undoManager.data.length > customUndoRedoLevels) {\n          for (var i = 0; i < undoManager.data.length - 1; i++) {\n            undoManager.data[i] = undoManager.data[i + 1];\n          }\n          undoManager.data.length--;\n          index.set(undoManager.data.length);\n        }\n      }\n      level.bookmark = getUndoBookmark(editor.selection);\n      if (index.get() < undoManager.data.length - 1) {\n        undoManager.data.length = index.get() + 1;\n      }\n      undoManager.data.push(level);\n      index.set(undoManager.data.length - 1);\n      var args = {\n        level: level,\n        lastLevel: lastLevel,\n        originalEvent: event\n      };\n      if (index.get() > 0) {\n        editor.setDirty(true);\n        editor.fire('AddUndo', args);\n        editor.fire('change', args);\n      } else {\n        editor.fire('AddUndo', args);\n      }\n      return level;\n    };\n    var clear$1 = function (editor, undoManager, index) {\n      undoManager.data = [];\n      index.set(0);\n      undoManager.typing = false;\n      editor.fire('ClearUndos');\n    };\n    var extra$1 = function (editor, undoManager, index, callback1, callback2) {\n      if (undoManager.transact(callback1)) {\n        var bookmark = undoManager.data[index.get()].bookmark;\n        var lastLevel = undoManager.data[index.get() - 1];\n        applyToEditor(editor, lastLevel, true);\n        if (undoManager.transact(callback2)) {\n          undoManager.data[index.get() - 1].beforeBookmark = bookmark;\n        }\n      }\n    };\n    var redo$1 = function (editor, index, data) {\n      var level;\n      if (index.get() < data.length - 1) {\n        index.set(index.get() + 1);\n        level = data[index.get()];\n        applyToEditor(editor, level, false);\n        editor.setDirty(true);\n        editor.fire('Redo', { level: level });\n      }\n      return level;\n    };\n    var undo$1 = function (editor, undoManager, locks, index) {\n      var level;\n      if (undoManager.typing) {\n        undoManager.add();\n        undoManager.typing = false;\n        setTyping(undoManager, false, locks);\n      }\n      if (index.get() > 0) {\n        index.set(index.get() - 1);\n        level = undoManager.data[index.get()];\n        applyToEditor(editor, level, true);\n        editor.setDirty(true);\n        editor.fire('Undo', { level: level });\n      }\n      return level;\n    };\n    var reset$1 = function (undoManager) {\n      undoManager.clear();\n      undoManager.add();\n    };\n    var hasUndo$1 = function (editor, undoManager, index) {\n      return index.get() > 0 || undoManager.typing && undoManager.data[0] && !isEq$1(createFromEditor(editor), undoManager.data[0]);\n    };\n    var hasRedo$1 = function (undoManager, index) {\n      return index.get() < undoManager.data.length - 1 && !undoManager.typing;\n    };\n    var transact$1 = function (undoManager, locks, callback) {\n      endTyping(undoManager, locks);\n      undoManager.beforeChange();\n      undoManager.ignore(callback);\n      return undoManager.add();\n    };\n    var ignore$1 = function (locks, callback) {\n      try {\n        locks.set(locks.get() + 1);\n        callback();\n      } finally {\n        locks.set(locks.get() - 1);\n      }\n    };\n\n    var addVisualInternal = function (editor, elm) {\n      var dom = editor.dom;\n      var scope = isNonNullable(elm) ? elm : editor.getBody();\n      if (isUndefined(editor.hasVisual)) {\n        editor.hasVisual = isVisualAidsEnabled(editor);\n      }\n      each$k(dom.select('table,a', scope), function (matchedElm) {\n        switch (matchedElm.nodeName) {\n        case 'TABLE':\n          var cls = getVisualAidsTableClass(editor);\n          var value = dom.getAttrib(matchedElm, 'border');\n          if ((!value || value === '0') && editor.hasVisual) {\n            dom.addClass(matchedElm, cls);\n          } else {\n            dom.removeClass(matchedElm, cls);\n          }\n          break;\n        case 'A':\n          if (!dom.getAttrib(matchedElm, 'href')) {\n            var value_1 = dom.getAttrib(matchedElm, 'name') || matchedElm.id;\n            var cls_1 = getVisualAidsAnchorClass(editor);\n            if (value_1 && editor.hasVisual) {\n              dom.addClass(matchedElm, cls_1);\n            } else {\n              dom.removeClass(matchedElm, cls_1);\n            }\n          }\n          break;\n        }\n      });\n      editor.fire('VisualAid', {\n        element: elm,\n        hasVisual: editor.hasVisual\n      });\n    };\n\n    var makePlainAdaptor = function (editor) {\n      return {\n        undoManager: {\n          beforeChange: function (locks, beforeBookmark) {\n            return beforeChange$1(editor, locks, beforeBookmark);\n          },\n          add: function (undoManager, index, locks, beforeBookmark, level, event) {\n            return addUndoLevel$1(editor, undoManager, index, locks, beforeBookmark, level, event);\n          },\n          undo: function (undoManager, locks, index) {\n            return undo$1(editor, undoManager, locks, index);\n          },\n          redo: function (index, data) {\n            return redo$1(editor, index, data);\n          },\n          clear: function (undoManager, index) {\n            return clear$1(editor, undoManager, index);\n          },\n          reset: function (undoManager) {\n            return reset$1(undoManager);\n          },\n          hasUndo: function (undoManager, index) {\n            return hasUndo$1(editor, undoManager, index);\n          },\n          hasRedo: function (undoManager, index) {\n            return hasRedo$1(undoManager, index);\n          },\n          transact: function (undoManager, locks, callback) {\n            return transact$1(undoManager, locks, callback);\n          },\n          ignore: function (locks, callback) {\n            return ignore$1(locks, callback);\n          },\n          extra: function (undoManager, index, callback1, callback2) {\n            return extra$1(editor, undoManager, index, callback1, callback2);\n          }\n        },\n        formatter: {\n          match: function (name, vars, node, similar) {\n            return match$2(editor, name, vars, node, similar);\n          },\n          matchAll: function (names, vars) {\n            return matchAll(editor, names, vars);\n          },\n          matchNode: function (node, name, vars, similar) {\n            return matchNode(editor, node, name, vars, similar);\n          },\n          canApply: function (name) {\n            return canApply(editor, name);\n          },\n          closest: function (names) {\n            return closest(editor, names);\n          },\n          apply: function (name, vars, node) {\n            return applyFormat$1(editor, name, vars, node);\n          },\n          remove: function (name, vars, node, similar) {\n            return remove$1(editor, name, vars, node, similar);\n          },\n          toggle: function (name, vars, node) {\n            return toggle(editor, name, vars, node);\n          },\n          formatChanged: function (registeredFormatListeners, formats, callback, similar, vars) {\n            return formatChangedInternal(editor, registeredFormatListeners, formats, callback, similar, vars);\n          }\n        },\n        editor: {\n          getContent: function (args, format) {\n            return getContentInternal(editor, args, format);\n          },\n          setContent: function (content, args) {\n            return setContentInternal(editor, content, args);\n          },\n          insertContent: function (value, details) {\n            return insertHtmlAtCaret(editor, value, details);\n          },\n          addVisual: function (elm) {\n            return addVisualInternal(editor, elm);\n          }\n        },\n        selection: {\n          getContent: function (format, args) {\n            return getSelectedContentInternal(editor, format, args);\n          }\n        },\n        raw: {\n          getModel: function () {\n            return Optional.none();\n          }\n        }\n      };\n    };\n    var makeRtcAdaptor = function (rtcEditor) {\n      var defaultVars = function (vars) {\n        return isObject(vars) ? vars : {};\n      };\n      var undoManager = rtcEditor.undoManager, formatter = rtcEditor.formatter, editor = rtcEditor.editor, selection = rtcEditor.selection, raw = rtcEditor.raw;\n      return {\n        undoManager: {\n          beforeChange: undoManager.beforeChange,\n          add: undoManager.add,\n          undo: undoManager.undo,\n          redo: undoManager.redo,\n          clear: undoManager.clear,\n          reset: undoManager.reset,\n          hasUndo: undoManager.hasUndo,\n          hasRedo: undoManager.hasRedo,\n          transact: function (_undoManager, _locks, fn) {\n            return undoManager.transact(fn);\n          },\n          ignore: function (_locks, callback) {\n            return undoManager.ignore(callback);\n          },\n          extra: function (_undoManager, _index, callback1, callback2) {\n            return undoManager.extra(callback1, callback2);\n          }\n        },\n        formatter: {\n          match: function (name, vars, _node, similar) {\n            return formatter.match(name, defaultVars(vars), similar);\n          },\n          matchAll: formatter.matchAll,\n          matchNode: formatter.matchNode,\n          canApply: function (name) {\n            return formatter.canApply(name);\n          },\n          closest: function (names) {\n            return formatter.closest(names);\n          },\n          apply: function (name, vars, _node) {\n            return formatter.apply(name, defaultVars(vars));\n          },\n          remove: function (name, vars, _node, _similar) {\n            return formatter.remove(name, defaultVars(vars));\n          },\n          toggle: function (name, vars, _node) {\n            return formatter.toggle(name, defaultVars(vars));\n          },\n          formatChanged: function (_rfl, formats, callback, similar, vars) {\n            return formatter.formatChanged(formats, callback, similar, vars);\n          }\n        },\n        editor: {\n          getContent: function (args, _format) {\n            return editor.getContent(args);\n          },\n          setContent: function (content, args) {\n            return editor.setContent(content, args);\n          },\n          insertContent: function (content, _details) {\n            return editor.insertContent(content);\n          },\n          addVisual: editor.addVisual\n        },\n        selection: {\n          getContent: function (_format, args) {\n            return selection.getContent(args);\n          }\n        },\n        raw: {\n          getModel: function () {\n            return Optional.some(raw.getRawModel());\n          }\n        }\n      };\n    };\n    var makeNoopAdaptor = function () {\n      var nul = constant(null);\n      var empty = constant('');\n      return {\n        undoManager: {\n          beforeChange: noop,\n          add: nul,\n          undo: nul,\n          redo: nul,\n          clear: noop,\n          reset: noop,\n          hasUndo: never,\n          hasRedo: never,\n          transact: nul,\n          ignore: noop,\n          extra: noop\n        },\n        formatter: {\n          match: never,\n          matchAll: constant([]),\n          matchNode: constant(undefined),\n          canApply: never,\n          closest: empty,\n          apply: noop,\n          remove: noop,\n          toggle: noop,\n          formatChanged: constant({ unbind: noop })\n        },\n        editor: {\n          getContent: empty,\n          setContent: empty,\n          insertContent: noop,\n          addVisual: noop\n        },\n        selection: { getContent: empty },\n        raw: { getModel: constant(Optional.none()) }\n      };\n    };\n    var isRtc = function (editor) {\n      return has$2(editor.plugins, 'rtc');\n    };\n    var getRtcSetup = function (editor) {\n      return get$9(editor.plugins, 'rtc').bind(function (rtcPlugin) {\n        return Optional.from(rtcPlugin.setup);\n      });\n    };\n    var setup$i = function (editor) {\n      var editorCast = editor;\n      return getRtcSetup(editor).fold(function () {\n        editorCast.rtcInstance = makePlainAdaptor(editor);\n        return Optional.none();\n      }, function (setup) {\n        editorCast.rtcInstance = makeNoopAdaptor();\n        return Optional.some(function () {\n          return setup().then(function (rtcEditor) {\n            editorCast.rtcInstance = makeRtcAdaptor(rtcEditor);\n            return rtcEditor.rtc.isRemote;\n          });\n        });\n      });\n    };\n    var getRtcInstanceWithFallback = function (editor) {\n      return editor.rtcInstance ? editor.rtcInstance : makePlainAdaptor(editor);\n    };\n    var getRtcInstanceWithError = function (editor) {\n      var rtcInstance = editor.rtcInstance;\n      if (!rtcInstance) {\n        throw new Error('Failed to get RTC instance not yet initialized.');\n      } else {\n        return rtcInstance;\n      }\n    };\n    var beforeChange = function (editor, locks, beforeBookmark) {\n      getRtcInstanceWithError(editor).undoManager.beforeChange(locks, beforeBookmark);\n    };\n    var addUndoLevel = function (editor, undoManager, index, locks, beforeBookmark, level, event) {\n      return getRtcInstanceWithError(editor).undoManager.add(undoManager, index, locks, beforeBookmark, level, event);\n    };\n    var undo = function (editor, undoManager, locks, index) {\n      return getRtcInstanceWithError(editor).undoManager.undo(undoManager, locks, index);\n    };\n    var redo = function (editor, index, data) {\n      return getRtcInstanceWithError(editor).undoManager.redo(index, data);\n    };\n    var clear = function (editor, undoManager, index) {\n      getRtcInstanceWithError(editor).undoManager.clear(undoManager, index);\n    };\n    var reset = function (editor, undoManager) {\n      getRtcInstanceWithError(editor).undoManager.reset(undoManager);\n    };\n    var hasUndo = function (editor, undoManager, index) {\n      return getRtcInstanceWithError(editor).undoManager.hasUndo(undoManager, index);\n    };\n    var hasRedo = function (editor, undoManager, index) {\n      return getRtcInstanceWithError(editor).undoManager.hasRedo(undoManager, index);\n    };\n    var transact = function (editor, undoManager, locks, callback) {\n      return getRtcInstanceWithError(editor).undoManager.transact(undoManager, locks, callback);\n    };\n    var ignore = function (editor, locks, callback) {\n      getRtcInstanceWithError(editor).undoManager.ignore(locks, callback);\n    };\n    var extra = function (editor, undoManager, index, callback1, callback2) {\n      getRtcInstanceWithError(editor).undoManager.extra(undoManager, index, callback1, callback2);\n    };\n    var matchFormat = function (editor, name, vars, node, similar) {\n      return getRtcInstanceWithError(editor).formatter.match(name, vars, node, similar);\n    };\n    var matchAllFormats = function (editor, names, vars) {\n      return getRtcInstanceWithError(editor).formatter.matchAll(names, vars);\n    };\n    var matchNodeFormat = function (editor, node, name, vars, similar) {\n      return getRtcInstanceWithError(editor).formatter.matchNode(node, name, vars, similar);\n    };\n    var canApplyFormat = function (editor, name) {\n      return getRtcInstanceWithError(editor).formatter.canApply(name);\n    };\n    var closestFormat = function (editor, names) {\n      return getRtcInstanceWithError(editor).formatter.closest(names);\n    };\n    var applyFormat = function (editor, name, vars, node) {\n      getRtcInstanceWithError(editor).formatter.apply(name, vars, node);\n    };\n    var removeFormat = function (editor, name, vars, node, similar) {\n      getRtcInstanceWithError(editor).formatter.remove(name, vars, node, similar);\n    };\n    var toggleFormat = function (editor, name, vars, node) {\n      getRtcInstanceWithError(editor).formatter.toggle(name, vars, node);\n    };\n    var formatChanged = function (editor, registeredFormatListeners, formats, callback, similar, vars) {\n      return getRtcInstanceWithError(editor).formatter.formatChanged(registeredFormatListeners, formats, callback, similar, vars);\n    };\n    var getContent$2 = function (editor, args, format) {\n      return getRtcInstanceWithFallback(editor).editor.getContent(args, format);\n    };\n    var setContent$2 = function (editor, content, args) {\n      return getRtcInstanceWithFallback(editor).editor.setContent(content, args);\n    };\n    var insertContent = function (editor, value, details) {\n      return getRtcInstanceWithFallback(editor).editor.insertContent(value, details);\n    };\n    var getSelectedContent = function (editor, format, args) {\n      return getRtcInstanceWithError(editor).selection.getContent(format, args);\n    };\n    var addVisual$1 = function (editor, elm) {\n      return getRtcInstanceWithError(editor).editor.addVisual(elm);\n    };\n\n    var getContent$1 = function (editor, args) {\n      if (args === void 0) {\n        args = {};\n      }\n      var format = args.format ? args.format : 'html';\n      return getSelectedContent(editor, format, args);\n    };\n\n    var removeEmpty = function (text) {\n      if (text.dom.length === 0) {\n        remove$7(text);\n        return Optional.none();\n      } else {\n        return Optional.some(text);\n      }\n    };\n    var walkPastBookmark = function (node, start) {\n      return node.filter(function (elm) {\n        return BookmarkManager.isBookmarkNode(elm.dom);\n      }).bind(start ? nextSibling : prevSibling);\n    };\n    var merge = function (outer, inner, rng, start) {\n      var outerElm = outer.dom;\n      var innerElm = inner.dom;\n      var oldLength = start ? outerElm.length : innerElm.length;\n      if (start) {\n        mergeTextNodes(outerElm, innerElm, false, !start);\n        rng.setStart(innerElm, oldLength);\n      } else {\n        mergeTextNodes(innerElm, outerElm, false, !start);\n        rng.setEnd(innerElm, oldLength);\n      }\n    };\n    var normalizeTextIfRequired = function (inner, start) {\n      parent(inner).each(function (root) {\n        var text = inner.dom;\n        if (start && needsToBeNbspLeft(root, CaretPosition(text, 0))) {\n          normalizeWhitespaceAfter(text, 0);\n        } else if (!start && needsToBeNbspRight(root, CaretPosition(text, text.length))) {\n          normalizeWhitespaceBefore(text, text.length);\n        }\n      });\n    };\n    var mergeAndNormalizeText = function (outerNode, innerNode, rng, start) {\n      outerNode.bind(function (outer) {\n        var normalizer = start ? normalizeWhitespaceBefore : normalizeWhitespaceAfter;\n        normalizer(outer.dom, start ? outer.dom.length : 0);\n        return innerNode.filter(isText$8).map(function (inner) {\n          return merge(outer, inner, rng, start);\n        });\n      }).orThunk(function () {\n        var innerTextNode = walkPastBookmark(innerNode, start).or(innerNode).filter(isText$8);\n        return innerTextNode.map(function (inner) {\n          return normalizeTextIfRequired(inner, start);\n        });\n      });\n    };\n    var rngSetContent = function (rng, fragment) {\n      var firstChild = Optional.from(fragment.firstChild).map(SugarElement.fromDom);\n      var lastChild = Optional.from(fragment.lastChild).map(SugarElement.fromDom);\n      rng.deleteContents();\n      rng.insertNode(fragment);\n      var prevText = firstChild.bind(prevSibling).filter(isText$8).bind(removeEmpty);\n      var nextText = lastChild.bind(nextSibling).filter(isText$8).bind(removeEmpty);\n      mergeAndNormalizeText(prevText, firstChild, rng, true);\n      mergeAndNormalizeText(nextText, lastChild, rng, false);\n      rng.collapse(false);\n    };\n    var setupArgs = function (args, content) {\n      return __assign(__assign({ format: 'html' }, args), {\n        set: true,\n        selection: true,\n        content: content\n      });\n    };\n    var cleanContent = function (editor, args) {\n      if (args.format !== 'raw') {\n        var rng = editor.selection.getRng();\n        var contextBlock = editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock);\n        var contextArgs = contextBlock ? { context: contextBlock.nodeName.toLowerCase() } : {};\n        var node = editor.parser.parse(args.content, __assign(__assign({\n          isRootContent: true,\n          forced_root_block: false\n        }, contextArgs), args));\n        return HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(node);\n      } else {\n        return args.content;\n      }\n    };\n    var setContent$1 = function (editor, content, args) {\n      if (args === void 0) {\n        args = {};\n      }\n      var defaultedArgs = setupArgs(args, content);\n      var updatedArgs = defaultedArgs;\n      if (!defaultedArgs.no_events) {\n        var eventArgs = editor.fire('BeforeSetContent', defaultedArgs);\n        if (eventArgs.isDefaultPrevented()) {\n          editor.fire('SetContent', eventArgs);\n          return;\n        } else {\n          updatedArgs = eventArgs;\n        }\n      }\n      updatedArgs.content = cleanContent(editor, updatedArgs);\n      var rng = editor.selection.getRng();\n      rngSetContent(rng, rng.createContextualFragment(updatedArgs.content));\n      editor.selection.setRng(rng);\n      scrollRangeIntoView(editor, rng);\n      if (!updatedArgs.no_events) {\n        editor.fire('SetContent', updatedArgs);\n      }\n    };\n\n    var deleteFromCallbackMap = function (callbackMap, selector, callback) {\n      if (callbackMap && has$2(callbackMap, selector)) {\n        var newCallbacks = filter$4(callbackMap[selector], function (cb) {\n          return cb !== callback;\n        });\n        if (newCallbacks.length === 0) {\n          delete callbackMap[selector];\n        } else {\n          callbackMap[selector] = newCallbacks;\n        }\n      }\n    };\n    function SelectorChanged (dom, editor) {\n      var selectorChangedData;\n      var currentSelectors;\n      var findMatchingNode = function (selector, nodes) {\n        return find$3(nodes, function (node) {\n          return dom.is(node, selector);\n        });\n      };\n      var getParents = function (elem) {\n        return dom.getParents(elem, null, dom.getRoot());\n      };\n      return {\n        selectorChangedWithUnbind: function (selector, callback) {\n          if (!selectorChangedData) {\n            selectorChangedData = {};\n            currentSelectors = {};\n            editor.on('NodeChange', function (e) {\n              var node = e.element;\n              var parents = getParents(node);\n              var matchedSelectors = {};\n              Tools.each(selectorChangedData, function (callbacks, selector) {\n                findMatchingNode(selector, parents).each(function (node) {\n                  if (!currentSelectors[selector]) {\n                    each$k(callbacks, function (callback) {\n                      callback(true, {\n                        node: node,\n                        selector: selector,\n                        parents: parents\n                      });\n                    });\n                    currentSelectors[selector] = callbacks;\n                  }\n                  matchedSelectors[selector] = callbacks;\n                });\n              });\n              Tools.each(currentSelectors, function (callbacks, selector) {\n                if (!matchedSelectors[selector]) {\n                  delete currentSelectors[selector];\n                  Tools.each(callbacks, function (callback) {\n                    callback(false, {\n                      node: node,\n                      selector: selector,\n                      parents: parents\n                    });\n                  });\n                }\n              });\n            });\n          }\n          if (!selectorChangedData[selector]) {\n            selectorChangedData[selector] = [];\n          }\n          selectorChangedData[selector].push(callback);\n          findMatchingNode(selector, getParents(editor.selection.getStart())).each(function () {\n            currentSelectors[selector] = selectorChangedData[selector];\n          });\n          return {\n            unbind: function () {\n              deleteFromCallbackMap(selectorChangedData, selector, callback);\n              deleteFromCallbackMap(currentSelectors, selector, callback);\n            }\n          };\n        }\n      };\n    }\n\n    var isNativeIeSelection = function (rng) {\n      return !!rng.select;\n    };\n    var isAttachedToDom = function (node) {\n      return !!(node && node.ownerDocument) && contains$1(SugarElement.fromDom(node.ownerDocument), SugarElement.fromDom(node));\n    };\n    var isValidRange = function (rng) {\n      if (!rng) {\n        return false;\n      } else if (isNativeIeSelection(rng)) {\n        return true;\n      } else {\n        return isAttachedToDom(rng.startContainer) && isAttachedToDom(rng.endContainer);\n      }\n    };\n    var EditorSelection = function (dom, win, serializer, editor) {\n      var selectedRange;\n      var explicitRange;\n      var selectorChangedWithUnbind = SelectorChanged(dom, editor).selectorChangedWithUnbind;\n      var setCursorLocation = function (node, offset) {\n        var rng = dom.createRng();\n        if (isNonNullable(node) && isNonNullable(offset)) {\n          rng.setStart(node, offset);\n          rng.setEnd(node, offset);\n          setRng(rng);\n          collapse(false);\n        } else {\n          moveEndPoint(dom, rng, editor.getBody(), true);\n          setRng(rng);\n        }\n      };\n      var getContent = function (args) {\n        return getContent$1(editor, args);\n      };\n      var setContent = function (content, args) {\n        return setContent$1(editor, content, args);\n      };\n      var getStart$1 = function (real) {\n        return getStart(editor.getBody(), getRng$1(), real);\n      };\n      var getEnd$1 = function (real) {\n        return getEnd(editor.getBody(), getRng$1(), real);\n      };\n      var getBookmark = function (type, normalized) {\n        return bookmarkManager.getBookmark(type, normalized);\n      };\n      var moveToBookmark = function (bookmark) {\n        return bookmarkManager.moveToBookmark(bookmark);\n      };\n      var select$1 = function (node, content) {\n        select(dom, node, content).each(setRng);\n        return node;\n      };\n      var isCollapsed = function () {\n        var rng = getRng$1(), sel = getSel();\n        if (!rng || rng.item) {\n          return false;\n        }\n        if (rng.compareEndPoints) {\n          return rng.compareEndPoints('StartToEnd', rng) === 0;\n        }\n        return !sel || rng.collapsed;\n      };\n      var collapse = function (toStart) {\n        var rng = getRng$1();\n        rng.collapse(!!toStart);\n        setRng(rng);\n      };\n      var getSel = function () {\n        return win.getSelection ? win.getSelection() : win.document.selection;\n      };\n      var getRng$1 = function () {\n        var selection, rng, elm;\n        var tryCompareBoundaryPoints = function (how, sourceRange, destinationRange) {\n          try {\n            return sourceRange.compareBoundaryPoints(how, destinationRange);\n          } catch (ex) {\n            return -1;\n          }\n        };\n        var doc = win.document;\n        if (editor.bookmark !== undefined && hasFocus(editor) === false) {\n          var bookmark = getRng(editor);\n          if (bookmark.isSome()) {\n            return bookmark.map(function (r) {\n              return processRanges(editor, [r])[0];\n            }).getOr(doc.createRange());\n          }\n        }\n        try {\n          if ((selection = getSel()) && !isRestrictedNode(selection.anchorNode)) {\n            if (selection.rangeCount > 0) {\n              rng = selection.getRangeAt(0);\n            } else {\n              rng = selection.createRange ? selection.createRange() : doc.createRange();\n            }\n            rng = processRanges(editor, [rng])[0];\n          }\n        } catch (ex) {\n        }\n        if (!rng) {\n          rng = doc.createRange ? doc.createRange() : doc.body.createTextRange();\n        }\n        if (rng.setStart && rng.startContainer.nodeType === 9 && rng.collapsed) {\n          elm = dom.getRoot();\n          rng.setStart(elm, 0);\n          rng.setEnd(elm, 0);\n        }\n        if (selectedRange && explicitRange) {\n          if (tryCompareBoundaryPoints(rng.START_TO_START, rng, selectedRange) === 0 && tryCompareBoundaryPoints(rng.END_TO_END, rng, selectedRange) === 0) {\n            rng = explicitRange;\n          } else {\n            selectedRange = null;\n            explicitRange = null;\n          }\n        }\n        return rng;\n      };\n      var setRng = function (rng, forward) {\n        var node;\n        if (!isValidRange(rng)) {\n          return;\n        }\n        var ieRange = isNativeIeSelection(rng) ? rng : null;\n        if (ieRange) {\n          explicitRange = null;\n          try {\n            ieRange.select();\n          } catch (ex) {\n          }\n          return;\n        }\n        var sel = getSel();\n        var evt = editor.fire('SetSelectionRange', {\n          range: rng,\n          forward: forward\n        });\n        rng = evt.range;\n        if (sel) {\n          explicitRange = rng;\n          try {\n            sel.removeAllRanges();\n            sel.addRange(rng);\n          } catch (ex) {\n          }\n          if (forward === false && sel.extend) {\n            sel.collapse(rng.endContainer, rng.endOffset);\n            sel.extend(rng.startContainer, rng.startOffset);\n          }\n          selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n        }\n        if (!rng.collapsed && rng.startContainer === rng.endContainer && sel.setBaseAndExtent && !Env.ie) {\n          if (rng.endOffset - rng.startOffset < 2) {\n            if (rng.startContainer.hasChildNodes()) {\n              node = rng.startContainer.childNodes[rng.startOffset];\n              if (node && node.tagName === 'IMG') {\n                sel.setBaseAndExtent(rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset);\n                if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {\n                  sel.setBaseAndExtent(node, 0, node, 1);\n                }\n              }\n            }\n          }\n        }\n        editor.fire('AfterSetSelectionRange', {\n          range: rng,\n          forward: forward\n        });\n      };\n      var setNode = function (elm) {\n        setContent(dom.getOuterHTML(elm));\n        return elm;\n      };\n      var getNode$1 = function () {\n        return getNode(editor.getBody(), getRng$1());\n      };\n      var getSelectedBlocks$1 = function (startElm, endElm) {\n        return getSelectedBlocks(dom, getRng$1(), startElm, endElm);\n      };\n      var isForward = function () {\n        var sel = getSel();\n        var anchorNode = sel === null || sel === void 0 ? void 0 : sel.anchorNode;\n        var focusNode = sel === null || sel === void 0 ? void 0 : sel.focusNode;\n        if (!sel || !anchorNode || !focusNode || isRestrictedNode(anchorNode) || isRestrictedNode(focusNode)) {\n          return true;\n        }\n        var anchorRange = dom.createRng();\n        anchorRange.setStart(anchorNode, sel.anchorOffset);\n        anchorRange.collapse(true);\n        var focusRange = dom.createRng();\n        focusRange.setStart(focusNode, sel.focusOffset);\n        focusRange.collapse(true);\n        return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;\n      };\n      var normalize = function () {\n        var rng = getRng$1();\n        var sel = getSel();\n        if (!hasMultipleRanges(sel) && hasAnyRanges(editor)) {\n          var normRng = normalize$2(dom, rng);\n          normRng.each(function (normRng) {\n            setRng(normRng, isForward());\n          });\n          return normRng.getOr(rng);\n        }\n        return rng;\n      };\n      var selectorChanged = function (selector, callback) {\n        selectorChangedWithUnbind(selector, callback);\n        return exports;\n      };\n      var getScrollContainer = function () {\n        var scrollContainer;\n        var node = dom.getRoot();\n        while (node && node.nodeName !== 'BODY') {\n          if (node.scrollHeight > node.clientHeight) {\n            scrollContainer = node;\n            break;\n          }\n          node = node.parentNode;\n        }\n        return scrollContainer;\n      };\n      var scrollIntoView = function (elm, alignToTop) {\n        if (isNonNullable(elm)) {\n          scrollElementIntoView(editor, elm, alignToTop);\n        } else {\n          scrollRangeIntoView(editor, getRng$1(), alignToTop);\n        }\n      };\n      var placeCaretAt = function (clientX, clientY) {\n        return setRng(fromPoint(clientX, clientY, editor.getDoc()));\n      };\n      var getBoundingClientRect = function () {\n        var rng = getRng$1();\n        return rng.collapsed ? CaretPosition.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect();\n      };\n      var destroy = function () {\n        win = selectedRange = explicitRange = null;\n        controlSelection.destroy();\n      };\n      var exports = {\n        bookmarkManager: null,\n        controlSelection: null,\n        dom: dom,\n        win: win,\n        serializer: serializer,\n        editor: editor,\n        collapse: collapse,\n        setCursorLocation: setCursorLocation,\n        getContent: getContent,\n        setContent: setContent,\n        getBookmark: getBookmark,\n        moveToBookmark: moveToBookmark,\n        select: select$1,\n        isCollapsed: isCollapsed,\n        isForward: isForward,\n        setNode: setNode,\n        getNode: getNode$1,\n        getSel: getSel,\n        setRng: setRng,\n        getRng: getRng$1,\n        getStart: getStart$1,\n        getEnd: getEnd$1,\n        getSelectedBlocks: getSelectedBlocks$1,\n        normalize: normalize,\n        selectorChanged: selectorChanged,\n        selectorChangedWithUnbind: selectorChangedWithUnbind,\n        getScrollContainer: getScrollContainer,\n        scrollIntoView: scrollIntoView,\n        placeCaretAt: placeCaretAt,\n        getBoundingClientRect: getBoundingClientRect,\n        destroy: destroy\n      };\n      var bookmarkManager = BookmarkManager(exports);\n      var controlSelection = ControlSelection(exports, editor);\n      exports.bookmarkManager = bookmarkManager;\n      exports.controlSelection = controlSelection;\n      return exports;\n    };\n\n    var removeAttrs = function (node, names) {\n      each$k(names, function (name) {\n        node.attr(name, null);\n      });\n    };\n    var addFontToSpansFilter = function (domParser, styles, fontSizes) {\n      domParser.addNodeFilter('font', function (nodes) {\n        each$k(nodes, function (node) {\n          var props = styles.parse(node.attr('style'));\n          var color = node.attr('color');\n          var face = node.attr('face');\n          var size = node.attr('size');\n          if (color) {\n            props.color = color;\n          }\n          if (face) {\n            props['font-family'] = face;\n          }\n          if (size) {\n            props['font-size'] = fontSizes[parseInt(node.attr('size'), 10) - 1];\n          }\n          node.name = 'span';\n          node.attr('style', styles.serialize(props));\n          removeAttrs(node, [\n            'color',\n            'face',\n            'size'\n          ]);\n        });\n      });\n    };\n    var addStrikeToSpanFilter = function (domParser, styles) {\n      domParser.addNodeFilter('strike', function (nodes) {\n        each$k(nodes, function (node) {\n          var props = styles.parse(node.attr('style'));\n          props['text-decoration'] = 'line-through';\n          node.name = 'span';\n          node.attr('style', styles.serialize(props));\n        });\n      });\n    };\n    var addFilters = function (domParser, settings) {\n      var styles = Styles();\n      if (settings.convert_fonts_to_spans) {\n        addFontToSpansFilter(domParser, styles, Tools.explode(settings.font_size_legacy_values));\n      }\n      addStrikeToSpanFilter(domParser, styles);\n    };\n    var register$2 = function (domParser, settings) {\n      if (settings.inline_styles) {\n        addFilters(domParser, settings);\n      }\n    };\n\n    var blobUriToBlob = function (url) {\n      return new promiseObj(function (resolve, reject) {\n        var rejectWithError = function () {\n          reject('Cannot convert ' + url + ' to Blob. Resource might not exist or is inaccessible.');\n        };\n        try {\n          var xhr_1 = new XMLHttpRequest();\n          xhr_1.open('GET', url, true);\n          xhr_1.responseType = 'blob';\n          xhr_1.onload = function () {\n            if (xhr_1.status === 200) {\n              resolve(xhr_1.response);\n            } else {\n              rejectWithError();\n            }\n          };\n          xhr_1.onerror = rejectWithError;\n          xhr_1.send();\n        } catch (ex) {\n          rejectWithError();\n        }\n      });\n    };\n    var parseDataUri = function (uri) {\n      var type;\n      var uriParts = decodeURIComponent(uri).split(',');\n      var matches = /data:([^;]+)/.exec(uriParts[0]);\n      if (matches) {\n        type = matches[1];\n      }\n      return {\n        type: type,\n        data: uriParts[1]\n      };\n    };\n    var buildBlob = function (type, data) {\n      var str;\n      try {\n        str = atob(data);\n      } catch (e) {\n        return Optional.none();\n      }\n      var arr = new Uint8Array(str.length);\n      for (var i = 0; i < arr.length; i++) {\n        arr[i] = str.charCodeAt(i);\n      }\n      return Optional.some(new Blob([arr], { type: type }));\n    };\n    var dataUriToBlob = function (uri) {\n      return new promiseObj(function (resolve) {\n        var _a = parseDataUri(uri), type = _a.type, data = _a.data;\n        buildBlob(type, data).fold(function () {\n          return resolve(new Blob([]));\n        }, resolve);\n      });\n    };\n    var uriToBlob = function (url) {\n      if (url.indexOf('blob:') === 0) {\n        return blobUriToBlob(url);\n      }\n      if (url.indexOf('data:') === 0) {\n        return dataUriToBlob(url);\n      }\n      return null;\n    };\n    var blobToDataUri = function (blob) {\n      return new promiseObj(function (resolve) {\n        var reader = new FileReader();\n        reader.onloadend = function () {\n          resolve(reader.result);\n        };\n        reader.readAsDataURL(blob);\n      });\n    };\n\n    var count$1 = 0;\n    var uniqueId = function (prefix) {\n      return (prefix || 'blobid') + count$1++;\n    };\n    var imageToBlobInfo = function (blobCache, img, resolve, reject) {\n      var base64, blobInfo;\n      if (img.src.indexOf('blob:') === 0) {\n        blobInfo = blobCache.getByUri(img.src);\n        if (blobInfo) {\n          resolve({\n            image: img,\n            blobInfo: blobInfo\n          });\n        } else {\n          uriToBlob(img.src).then(function (blob) {\n            blobToDataUri(blob).then(function (dataUri) {\n              base64 = parseDataUri(dataUri).data;\n              blobInfo = blobCache.create(uniqueId(), blob, base64);\n              blobCache.add(blobInfo);\n              resolve({\n                image: img,\n                blobInfo: blobInfo\n              });\n            });\n          }, function (err) {\n            reject(err);\n          });\n        }\n        return;\n      }\n      var _a = parseDataUri(img.src), data = _a.data, type = _a.type;\n      base64 = data;\n      blobInfo = blobCache.getByData(base64, type);\n      if (blobInfo) {\n        resolve({\n          image: img,\n          blobInfo: blobInfo\n        });\n      } else {\n        uriToBlob(img.src).then(function (blob) {\n          blobInfo = blobCache.create(uniqueId(), blob, base64);\n          blobCache.add(blobInfo);\n          resolve({\n            image: img,\n            blobInfo: blobInfo\n          });\n        }, function (err) {\n          reject(err);\n        });\n      }\n    };\n    var getAllImages = function (elm) {\n      return elm ? from(elm.getElementsByTagName('img')) : [];\n    };\n    var ImageScanner = function (uploadStatus, blobCache) {\n      var cachedPromises = {};\n      var findAll = function (elm, predicate) {\n        if (!predicate) {\n          predicate = always;\n        }\n        var images = filter$4(getAllImages(elm), function (img) {\n          var src = img.src;\n          if (!Env.fileApi) {\n            return false;\n          }\n          if (img.hasAttribute('data-mce-bogus')) {\n            return false;\n          }\n          if (img.hasAttribute('data-mce-placeholder')) {\n            return false;\n          }\n          if (!src || src === Env.transparentSrc) {\n            return false;\n          }\n          if (src.indexOf('blob:') === 0) {\n            return !uploadStatus.isUploaded(src) && predicate(img);\n          }\n          if (src.indexOf('data:') === 0) {\n            return predicate(img);\n          }\n          return false;\n        });\n        var promises = map$3(images, function (img) {\n          if (cachedPromises[img.src] !== undefined) {\n            return new promiseObj(function (resolve) {\n              cachedPromises[img.src].then(function (imageInfo) {\n                if (typeof imageInfo === 'string') {\n                  return imageInfo;\n                }\n                resolve({\n                  image: img,\n                  blobInfo: imageInfo.blobInfo\n                });\n              });\n            });\n          }\n          var newPromise = new promiseObj(function (resolve, reject) {\n            imageToBlobInfo(blobCache, img, resolve, reject);\n          }).then(function (result) {\n            delete cachedPromises[result.image.src];\n            return result;\n          }).catch(function (error) {\n            delete cachedPromises[img.src];\n            return error;\n          });\n          cachedPromises[img.src] = newPromise;\n          return newPromise;\n        });\n        return promiseObj.all(promises);\n      };\n      return { findAll: findAll };\n    };\n\n    var paddEmptyNode = function (settings, args, blockElements, node) {\n      var brPreferred = settings.padd_empty_with_br || args.insert;\n      if (brPreferred && blockElements[node.name]) {\n        node.empty().append(new AstNode('br', 1)).shortEnded = true;\n      } else {\n        node.empty().append(new AstNode('#text', 3)).value = nbsp;\n      }\n    };\n    var isPaddedWithNbsp = function (node) {\n      return hasOnlyChild(node, '#text') && node.firstChild.value === nbsp;\n    };\n    var hasOnlyChild = function (node, name) {\n      return node && node.firstChild && node.firstChild === node.lastChild && node.firstChild.name === name;\n    };\n    var isPadded = function (schema, node) {\n      var rule = schema.getElementRule(node.name);\n      return rule && rule.paddEmpty;\n    };\n    var isEmpty = function (schema, nonEmptyElements, whitespaceElements, node) {\n      return node.isEmpty(nonEmptyElements, whitespaceElements, function (node) {\n        return isPadded(schema, node);\n      });\n    };\n    var isLineBreakNode = function (node, blockElements) {\n      return node && (has$2(blockElements, node.name) || node.name === 'br');\n    };\n\n    var isBogusImage = function (img) {\n      return isNonNullable(img.attr('data-mce-bogus'));\n    };\n    var isInternalImageSource = function (img) {\n      return img.attr('src') === Env.transparentSrc || isNonNullable(img.attr('data-mce-placeholder'));\n    };\n    var isValidDataImg = function (img, settings) {\n      if (settings.images_dataimg_filter) {\n        var imgElem_1 = new Image();\n        imgElem_1.src = img.attr('src');\n        each$j(img.attributes.map, function (value, key) {\n          imgElem_1.setAttribute(key, value);\n        });\n        return settings.images_dataimg_filter(imgElem_1);\n      } else {\n        return true;\n      }\n    };\n    var registerBase64ImageFilter = function (parser, settings) {\n      var blobCache = settings.blob_cache;\n      var processImage = function (img) {\n        var inputSrc = img.attr('src');\n        if (isInternalImageSource(img) || isBogusImage(img)) {\n          return;\n        }\n        parseDataUri$1(inputSrc).filter(function () {\n          return isValidDataImg(img, settings);\n        }).bind(function (_a) {\n          var type = _a.type, data = _a.data;\n          return Optional.from(blobCache.getByData(data, type)).orThunk(function () {\n            return buildBlob(type, data).map(function (blob) {\n              var blobInfo = blobCache.create(uniqueId(), blob, data);\n              blobCache.add(blobInfo);\n              return blobInfo;\n            });\n          });\n        }).each(function (blobInfo) {\n          img.attr('src', blobInfo.blobUri());\n        });\n      };\n      if (blobCache) {\n        parser.addAttributeFilter('src', function (nodes) {\n          return each$k(nodes, processImage);\n        });\n      }\n    };\n    var register$1 = function (parser, settings) {\n      var schema = parser.schema;\n      if (settings.remove_trailing_brs) {\n        parser.addNodeFilter('br', function (nodes, _, args) {\n          var i;\n          var l = nodes.length;\n          var node;\n          var blockElements = Tools.extend({}, schema.getBlockElements());\n          var nonEmptyElements = schema.getNonEmptyElements();\n          var parent, lastParent, prev, prevName;\n          var whiteSpaceElements = schema.getWhiteSpaceElements();\n          var elementRule, textNode;\n          blockElements.body = 1;\n          for (i = 0; i < l; i++) {\n            node = nodes[i];\n            parent = node.parent;\n            if (blockElements[node.parent.name] && node === parent.lastChild) {\n              prev = node.prev;\n              while (prev) {\n                prevName = prev.name;\n                if (prevName !== 'span' || prev.attr('data-mce-type') !== 'bookmark') {\n                  if (prevName === 'br') {\n                    node = null;\n                  }\n                  break;\n                }\n                prev = prev.prev;\n              }\n              if (node) {\n                node.remove();\n                if (isEmpty(schema, nonEmptyElements, whiteSpaceElements, parent)) {\n                  elementRule = schema.getElementRule(parent.name);\n                  if (elementRule) {\n                    if (elementRule.removeEmpty) {\n                      parent.remove();\n                    } else if (elementRule.paddEmpty) {\n                      paddEmptyNode(settings, args, blockElements, parent);\n                    }\n                  }\n                }\n              }\n            } else {\n              lastParent = node;\n              while (parent && parent.firstChild === lastParent && parent.lastChild === lastParent) {\n                lastParent = parent;\n                if (blockElements[parent.name]) {\n                  break;\n                }\n                parent = parent.parent;\n              }\n              if (lastParent === parent && settings.padd_empty_with_br !== true) {\n                textNode = new AstNode('#text', 3);\n                textNode.value = nbsp;\n                node.replace(textNode);\n              }\n            }\n          }\n        });\n      }\n      parser.addAttributeFilter('href', function (nodes) {\n        var i = nodes.length;\n        var appendRel = function (rel) {\n          var parts = rel.split(' ').filter(function (p) {\n            return p.length > 0;\n          });\n          return parts.concat(['noopener']).sort().join(' ');\n        };\n        var addNoOpener = function (rel) {\n          var newRel = rel ? Tools.trim(rel) : '';\n          if (!/\\b(noopener)\\b/g.test(newRel)) {\n            return appendRel(newRel);\n          } else {\n            return newRel;\n          }\n        };\n        if (!settings.allow_unsafe_link_target) {\n          while (i--) {\n            var node = nodes[i];\n            if (node.name === 'a' && node.attr('target') === '_blank') {\n              node.attr('rel', addNoOpener(node.attr('rel')));\n            }\n          }\n        }\n      });\n      if (!settings.allow_html_in_named_anchor) {\n        parser.addAttributeFilter('id,name', function (nodes) {\n          var i = nodes.length, sibling, prevSibling, parent, node;\n          while (i--) {\n            node = nodes[i];\n            if (node.name === 'a' && node.firstChild && !node.attr('href')) {\n              parent = node.parent;\n              sibling = node.lastChild;\n              do {\n                prevSibling = sibling.prev;\n                parent.insert(sibling, node);\n                sibling = prevSibling;\n              } while (sibling);\n            }\n          }\n        });\n      }\n      if (settings.fix_list_elements) {\n        parser.addNodeFilter('ul,ol', function (nodes) {\n          var i = nodes.length, node, parentNode;\n          while (i--) {\n            node = nodes[i];\n            parentNode = node.parent;\n            if (parentNode.name === 'ul' || parentNode.name === 'ol') {\n              if (node.prev && node.prev.name === 'li') {\n                node.prev.append(node);\n              } else {\n                var li = new AstNode('li', 1);\n                li.attr('style', 'list-style-type: none');\n                node.wrap(li);\n              }\n            }\n          }\n        });\n      }\n      if (settings.validate && schema.getValidClasses()) {\n        parser.addAttributeFilter('class', function (nodes) {\n          var validClasses = schema.getValidClasses();\n          var i = nodes.length;\n          while (i--) {\n            var node = nodes[i];\n            var classList = node.attr('class').split(' ');\n            var classValue = '';\n            for (var ci = 0; ci < classList.length; ci++) {\n              var className = classList[ci];\n              var valid = false;\n              var validClassesMap = validClasses['*'];\n              if (validClassesMap && validClassesMap[className]) {\n                valid = true;\n              }\n              validClassesMap = validClasses[node.name];\n              if (!valid && validClassesMap && validClassesMap[className]) {\n                valid = true;\n              }\n              if (valid) {\n                if (classValue) {\n                  classValue += ' ';\n                }\n                classValue += className;\n              }\n            }\n            if (!classValue.length) {\n              classValue = null;\n            }\n            node.attr('class', classValue);\n          }\n        });\n      }\n      registerBase64ImageFilter(parser, settings);\n    };\n\n    var makeMap = Tools.makeMap, each$6 = Tools.each, explode$2 = Tools.explode, extend$4 = Tools.extend;\n    var DomParser = function (settings, schema) {\n      if (schema === void 0) {\n        schema = Schema();\n      }\n      var nodeFilters = {};\n      var attributeFilters = [];\n      var matchedNodes = {};\n      var matchedAttributes = {};\n      settings = settings || {};\n      settings.validate = 'validate' in settings ? settings.validate : true;\n      settings.root_name = settings.root_name || 'body';\n      var fixInvalidChildren = function (nodes) {\n        var nonSplitableElements = makeMap('tr,td,th,tbody,thead,tfoot,table');\n        var nonEmptyElements = schema.getNonEmptyElements();\n        var whitespaceElements = schema.getWhiteSpaceElements();\n        var textBlockElements = schema.getTextBlockElements();\n        var specialElements = schema.getSpecialElements();\n        var removeOrUnwrapInvalidNode = function (node, originalNodeParent) {\n          if (originalNodeParent === void 0) {\n            originalNodeParent = node.parent;\n          }\n          if (specialElements[node.name]) {\n            node.empty().remove();\n          } else {\n            var children = node.children();\n            for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {\n              var childNode = children_1[_i];\n              if (!schema.isValidChild(originalNodeParent.name, childNode.name)) {\n                removeOrUnwrapInvalidNode(childNode, originalNodeParent);\n              }\n            }\n            node.unwrap();\n          }\n        };\n        for (var ni = 0; ni < nodes.length; ni++) {\n          var node = nodes[ni];\n          var parent_1 = void 0, newParent = void 0, tempNode = void 0;\n          if (!node.parent || node.fixed) {\n            continue;\n          }\n          if (textBlockElements[node.name] && node.parent.name === 'li') {\n            var sibling = node.next;\n            while (sibling) {\n              if (textBlockElements[sibling.name]) {\n                sibling.name = 'li';\n                sibling.fixed = true;\n                node.parent.insert(sibling, node.parent);\n              } else {\n                break;\n              }\n              sibling = sibling.next;\n            }\n            node.unwrap();\n            continue;\n          }\n          var parents = [node];\n          for (parent_1 = node.parent; parent_1 && !schema.isValidChild(parent_1.name, node.name) && !nonSplitableElements[parent_1.name]; parent_1 = parent_1.parent) {\n            parents.push(parent_1);\n          }\n          if (parent_1 && parents.length > 1) {\n            if (schema.isValidChild(parent_1.name, node.name)) {\n              parents.reverse();\n              newParent = filterNode(parents[0].clone());\n              var currentNode = newParent;\n              for (var i = 0; i < parents.length - 1; i++) {\n                if (schema.isValidChild(currentNode.name, parents[i].name)) {\n                  tempNode = filterNode(parents[i].clone());\n                  currentNode.append(tempNode);\n                } else {\n                  tempNode = currentNode;\n                }\n                for (var childNode = parents[i].firstChild; childNode && childNode !== parents[i + 1];) {\n                  var nextNode = childNode.next;\n                  tempNode.append(childNode);\n                  childNode = nextNode;\n                }\n                currentNode = tempNode;\n              }\n              if (!isEmpty(schema, nonEmptyElements, whitespaceElements, newParent)) {\n                parent_1.insert(newParent, parents[0], true);\n                parent_1.insert(node, newParent);\n              } else {\n                parent_1.insert(node, parents[0], true);\n              }\n              parent_1 = parents[0];\n              if (isEmpty(schema, nonEmptyElements, whitespaceElements, parent_1) || hasOnlyChild(parent_1, 'br')) {\n                parent_1.empty().remove();\n              }\n            } else {\n              removeOrUnwrapInvalidNode(node);\n            }\n          } else if (node.parent) {\n            if (node.name === 'li') {\n              var sibling = node.prev;\n              if (sibling && (sibling.name === 'ul' || sibling.name === 'ol')) {\n                sibling.append(node);\n                continue;\n              }\n              sibling = node.next;\n              if (sibling && (sibling.name === 'ul' || sibling.name === 'ol')) {\n                sibling.insert(node, sibling.firstChild, true);\n                continue;\n              }\n              node.wrap(filterNode(new AstNode('ul', 1)));\n              continue;\n            }\n            if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {\n              node.wrap(filterNode(new AstNode('div', 1)));\n            } else {\n              removeOrUnwrapInvalidNode(node);\n            }\n          }\n        }\n      };\n      var filterNode = function (node) {\n        var name = node.name;\n        if (name in nodeFilters) {\n          var list = matchedNodes[name];\n          if (list) {\n            list.push(node);\n          } else {\n            matchedNodes[name] = [node];\n          }\n        }\n        var i = attributeFilters.length;\n        while (i--) {\n          var attrName = attributeFilters[i].name;\n          if (attrName in node.attributes.map) {\n            var list = matchedAttributes[attrName];\n            if (list) {\n              list.push(node);\n            } else {\n              matchedAttributes[attrName] = [node];\n            }\n          }\n        }\n        return node;\n      };\n      var addNodeFilter = function (name, callback) {\n        each$6(explode$2(name), function (name) {\n          var list = nodeFilters[name];\n          if (!list) {\n            nodeFilters[name] = list = [];\n          }\n          list.push(callback);\n        });\n      };\n      var getNodeFilters = function () {\n        var out = [];\n        for (var name_1 in nodeFilters) {\n          if (has$2(nodeFilters, name_1)) {\n            out.push({\n              name: name_1,\n              callbacks: nodeFilters[name_1]\n            });\n          }\n        }\n        return out;\n      };\n      var addAttributeFilter = function (name, callback) {\n        each$6(explode$2(name), function (name) {\n          var i;\n          for (i = 0; i < attributeFilters.length; i++) {\n            if (attributeFilters[i].name === name) {\n              attributeFilters[i].callbacks.push(callback);\n              return;\n            }\n          }\n          attributeFilters.push({\n            name: name,\n            callbacks: [callback]\n          });\n        });\n      };\n      var getAttributeFilters = function () {\n        return [].concat(attributeFilters);\n      };\n      var parse = function (html, args) {\n        var nodes, i, l, fi, fl, list, name;\n        var invalidChildren = [];\n        var node;\n        var getRootBlockName = function (name) {\n          if (name === false) {\n            return '';\n          } else if (name === true) {\n            return 'p';\n          } else {\n            return name;\n          }\n        };\n        args = args || {};\n        matchedNodes = {};\n        matchedAttributes = {};\n        var blockElements = extend$4(makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n        var textRootBlockElements = getTextRootBlockElements(schema);\n        var nonEmptyElements = schema.getNonEmptyElements();\n        var children = schema.children;\n        var validate = settings.validate;\n        var forcedRootBlockName = 'forced_root_block' in args ? args.forced_root_block : settings.forced_root_block;\n        var rootBlockName = getRootBlockName(forcedRootBlockName);\n        var whiteSpaceElements = schema.getWhiteSpaceElements();\n        var startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n        var endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n        var allWhiteSpaceRegExp = /[ \\t\\r\\n]+/g;\n        var isAllWhiteSpaceRegExp = /^[ \\t\\r\\n]+$/;\n        var isInWhiteSpacePreservedElement = has$2(whiteSpaceElements, args.context) || has$2(whiteSpaceElements, settings.root_name);\n        var addRootBlocks = function () {\n          var node = rootNode.firstChild, rootBlockNode = null;\n          var trim = function (rootBlock) {\n            if (rootBlock) {\n              node = rootBlock.firstChild;\n              if (node && node.type === 3) {\n                node.value = node.value.replace(startWhiteSpaceRegExp, '');\n              }\n              node = rootBlock.lastChild;\n              if (node && node.type === 3) {\n                node.value = node.value.replace(endWhiteSpaceRegExp, '');\n              }\n            }\n          };\n          if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) {\n            return;\n          }\n          while (node) {\n            var next = node.next;\n            if (node.type === 3 || node.type === 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type')) {\n              if (!rootBlockNode) {\n                rootBlockNode = createNode(rootBlockName, 1);\n                rootBlockNode.attr(settings.forced_root_block_attrs);\n                rootNode.insert(rootBlockNode, node);\n                rootBlockNode.append(node);\n              } else {\n                rootBlockNode.append(node);\n              }\n            } else {\n              trim(rootBlockNode);\n              rootBlockNode = null;\n            }\n            node = next;\n          }\n          trim(rootBlockNode);\n        };\n        var createNode = function (name, type) {\n          var node = new AstNode(name, type);\n          var list;\n          if (name in nodeFilters) {\n            list = matchedNodes[name];\n            if (list) {\n              list.push(node);\n            } else {\n              matchedNodes[name] = [node];\n            }\n          }\n          return node;\n        };\n        var removeWhitespaceBefore = function (node) {\n          var blockElements = schema.getBlockElements();\n          for (var textNode = node.prev; textNode && textNode.type === 3;) {\n            var textVal = textNode.value.replace(endWhiteSpaceRegExp, '');\n            if (textVal.length > 0) {\n              textNode.value = textVal;\n              return;\n            }\n            var textNodeNext = textNode.next;\n            if (textNodeNext) {\n              if (textNodeNext.type === 3 && textNodeNext.value.length) {\n                textNode = textNode.prev;\n                continue;\n              }\n              if (!blockElements[textNodeNext.name] && textNodeNext.name !== 'script' && textNodeNext.name !== 'style') {\n                textNode = textNode.prev;\n                continue;\n              }\n            }\n            var sibling = textNode.prev;\n            textNode.remove();\n            textNode = sibling;\n          }\n        };\n        var cloneAndExcludeBlocks = function (input) {\n          var output = {};\n          for (var name_2 in input) {\n            if (name_2 !== 'li' && name_2 !== 'p') {\n              output[name_2] = input[name_2];\n            }\n          }\n          return output;\n        };\n        var isTextRootBlockEmpty = function (node) {\n          var tempNode = node;\n          while (isNonNullable(tempNode)) {\n            if (tempNode.name in textRootBlockElements) {\n              return isEmpty(schema, nonEmptyElements, whiteSpaceElements, tempNode);\n            } else {\n              tempNode = tempNode.parent;\n            }\n          }\n          return false;\n        };\n        var parser = SaxParser({\n          validate: validate,\n          document: settings.document,\n          allow_html_data_urls: settings.allow_html_data_urls,\n          allow_svg_data_urls: settings.allow_svg_data_urls,\n          allow_script_urls: settings.allow_script_urls,\n          allow_conditional_comments: settings.allow_conditional_comments,\n          preserve_cdata: settings.preserve_cdata,\n          self_closing_elements: cloneAndExcludeBlocks(schema.getSelfClosingElements()),\n          cdata: function (text) {\n            node.append(createNode('#cdata', 4)).value = text;\n          },\n          text: function (text, raw) {\n            var textNode;\n            if (!isInWhiteSpacePreservedElement) {\n              text = text.replace(allWhiteSpaceRegExp, ' ');\n              if (isLineBreakNode(node.lastChild, blockElements)) {\n                text = text.replace(startWhiteSpaceRegExp, '');\n              }\n            }\n            if (text.length !== 0) {\n              textNode = createNode('#text', 3);\n              textNode.raw = !!raw;\n              node.append(textNode).value = text;\n            }\n          },\n          comment: function (text) {\n            node.append(createNode('#comment', 8)).value = text;\n          },\n          pi: function (name, text) {\n            node.append(createNode(name, 7)).value = text;\n            removeWhitespaceBefore(node);\n          },\n          doctype: function (text) {\n            var newNode = node.append(createNode('#doctype', 10));\n            newNode.value = text;\n            removeWhitespaceBefore(node);\n          },\n          start: function (name, attrs, empty) {\n            var elementRule = validate ? schema.getElementRule(name) : {};\n            if (elementRule) {\n              var newNode = createNode(elementRule.outputName || name, 1);\n              newNode.attributes = attrs;\n              newNode.shortEnded = empty;\n              node.append(newNode);\n              var parent_2 = children[node.name];\n              if (parent_2 && children[newNode.name] && !parent_2[newNode.name]) {\n                invalidChildren.push(newNode);\n              }\n              var attrFiltersLen = attributeFilters.length;\n              while (attrFiltersLen--) {\n                var attrName = attributeFilters[attrFiltersLen].name;\n                if (attrName in attrs.map) {\n                  list = matchedAttributes[attrName];\n                  if (list) {\n                    list.push(newNode);\n                  } else {\n                    matchedAttributes[attrName] = [newNode];\n                  }\n                }\n              }\n              if (blockElements[name]) {\n                removeWhitespaceBefore(newNode);\n              }\n              if (!empty) {\n                node = newNode;\n              }\n              if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\n                isInWhiteSpacePreservedElement = true;\n              }\n            }\n          },\n          end: function (name) {\n            var textNode, text, sibling;\n            var elementRule = validate ? schema.getElementRule(name) : {};\n            if (elementRule) {\n              if (blockElements[name]) {\n                if (!isInWhiteSpacePreservedElement) {\n                  textNode = node.firstChild;\n                  if (textNode && textNode.type === 3) {\n                    text = textNode.value.replace(startWhiteSpaceRegExp, '');\n                    if (text.length > 0) {\n                      textNode.value = text;\n                      textNode = textNode.next;\n                    } else {\n                      sibling = textNode.next;\n                      textNode.remove();\n                      textNode = sibling;\n                      while (textNode && textNode.type === 3) {\n                        text = textNode.value;\n                        sibling = textNode.next;\n                        if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\n                          textNode.remove();\n                          textNode = sibling;\n                        }\n                        textNode = sibling;\n                      }\n                    }\n                  }\n                  textNode = node.lastChild;\n                  if (textNode && textNode.type === 3) {\n                    text = textNode.value.replace(endWhiteSpaceRegExp, '');\n                    if (text.length > 0) {\n                      textNode.value = text;\n                      textNode = textNode.prev;\n                    } else {\n                      sibling = textNode.prev;\n                      textNode.remove();\n                      textNode = sibling;\n                      while (textNode && textNode.type === 3) {\n                        text = textNode.value;\n                        sibling = textNode.prev;\n                        if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\n                          textNode.remove();\n                          textNode = sibling;\n                        }\n                        textNode = sibling;\n                      }\n                    }\n                  }\n                }\n              }\n              if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\n                isInWhiteSpacePreservedElement = false;\n              }\n              var isNodeEmpty = isEmpty(schema, nonEmptyElements, whiteSpaceElements, node);\n              var parentNode = node.parent;\n              if (elementRule.paddInEmptyBlock && isNodeEmpty && isTextRootBlockEmpty(node)) {\n                paddEmptyNode(settings, args, blockElements, node);\n              } else if (elementRule.removeEmpty && isNodeEmpty) {\n                if (blockElements[node.name]) {\n                  node.empty().remove();\n                } else {\n                  node.unwrap();\n                }\n              } else if (elementRule.paddEmpty && (isPaddedWithNbsp(node) || isNodeEmpty)) {\n                paddEmptyNode(settings, args, blockElements, node);\n              }\n              node = parentNode;\n            }\n          }\n        }, schema);\n        var rootNode = node = new AstNode(args.context || settings.root_name, 11);\n        parser.parse(html, args.format);\n        if (validate && invalidChildren.length) {\n          if (!args.context) {\n            fixInvalidChildren(invalidChildren);\n          } else {\n            args.invalid = true;\n          }\n        }\n        if (rootBlockName && (rootNode.name === 'body' || args.isRootContent)) {\n          addRootBlocks();\n        }\n        if (!args.invalid) {\n          for (name in matchedNodes) {\n            if (!has$2(matchedNodes, name)) {\n              continue;\n            }\n            list = nodeFilters[name];\n            nodes = matchedNodes[name];\n            fi = nodes.length;\n            while (fi--) {\n              if (!nodes[fi].parent) {\n                nodes.splice(fi, 1);\n              }\n            }\n            for (i = 0, l = list.length; i < l; i++) {\n              list[i](nodes, name, args);\n            }\n          }\n          for (i = 0, l = attributeFilters.length; i < l; i++) {\n            list = attributeFilters[i];\n            if (list.name in matchedAttributes) {\n              nodes = matchedAttributes[list.name];\n              fi = nodes.length;\n              while (fi--) {\n                if (!nodes[fi].parent) {\n                  nodes.splice(fi, 1);\n                }\n              }\n              for (fi = 0, fl = list.callbacks.length; fi < fl; fi++) {\n                list.callbacks[fi](nodes, list.name, args);\n              }\n            }\n          }\n        }\n        return rootNode;\n      };\n      var exports = {\n        schema: schema,\n        addAttributeFilter: addAttributeFilter,\n        getAttributeFilters: getAttributeFilters,\n        addNodeFilter: addNodeFilter,\n        getNodeFilters: getNodeFilters,\n        filterNode: filterNode,\n        parse: parse\n      };\n      register$1(exports, settings);\n      register$2(exports, settings);\n      return exports;\n    };\n\n    var register = function (htmlParser, settings, dom) {\n      htmlParser.addAttributeFilter('data-mce-tabindex', function (nodes, name) {\n        var i = nodes.length;\n        while (i--) {\n          var node = nodes[i];\n          node.attr('tabindex', node.attr('data-mce-tabindex'));\n          node.attr(name, null);\n        }\n      });\n      htmlParser.addAttributeFilter('src,href,style', function (nodes, name) {\n        var internalName = 'data-mce-' + name;\n        var urlConverter = settings.url_converter;\n        var urlConverterScope = settings.url_converter_scope;\n        var i = nodes.length;\n        while (i--) {\n          var node = nodes[i];\n          var value = node.attr(internalName);\n          if (value !== undefined) {\n            node.attr(name, value.length > 0 ? value : null);\n            node.attr(internalName, null);\n          } else {\n            value = node.attr(name);\n            if (name === 'style') {\n              value = dom.serializeStyle(dom.parseStyle(value), node.name);\n            } else if (urlConverter) {\n              value = urlConverter.call(urlConverterScope, value, name, node.name);\n            }\n            node.attr(name, value.length > 0 ? value : null);\n          }\n        }\n      });\n      htmlParser.addAttributeFilter('class', function (nodes) {\n        var i = nodes.length;\n        while (i--) {\n          var node = nodes[i];\n          var value = node.attr('class');\n          if (value) {\n            value = node.attr('class').replace(/(?:^|\\s)mce-item-\\w+(?!\\S)/g, '');\n            node.attr('class', value.length > 0 ? value : null);\n          }\n        }\n      });\n      htmlParser.addAttributeFilter('data-mce-type', function (nodes, name, args) {\n        var i = nodes.length;\n        while (i--) {\n          var node = nodes[i];\n          if (node.attr('data-mce-type') === 'bookmark' && !args.cleanup) {\n            var hasChildren = Optional.from(node.firstChild).exists(function (firstChild) {\n              return !isZwsp(firstChild.value);\n            });\n            if (hasChildren) {\n              node.unwrap();\n            } else {\n              node.remove();\n            }\n          }\n        }\n      });\n      htmlParser.addNodeFilter('noscript', function (nodes) {\n        var i = nodes.length;\n        while (i--) {\n          var node = nodes[i].firstChild;\n          if (node) {\n            node.value = Entities.decode(node.value);\n          }\n        }\n      });\n      htmlParser.addNodeFilter('script,style', function (nodes, name) {\n        var trim = function (value) {\n          return value.replace(/(<!--\\[CDATA\\[|\\]\\]-->)/g, '\\n').replace(/^[\\r\\n]*|[\\r\\n]*$/g, '').replace(/^\\s*((<!--)?(\\s*\\/\\/)?\\s*<!\\[CDATA\\[|(<!--\\s*)?\\/\\*\\s*<!\\[CDATA\\[\\s*\\*\\/|(\\/\\/)?\\s*<!--|\\/\\*\\s*<!--\\s*\\*\\/)\\s*[\\r\\n]*/gi, '').replace(/\\s*(\\/\\*\\s*\\]\\]>\\s*\\*\\/(-->)?|\\s*\\/\\/\\s*\\]\\]>(-->)?|\\/\\/\\s*(-->)?|\\]\\]>|\\/\\*\\s*-->\\s*\\*\\/|\\s*-->\\s*)\\s*$/g, '');\n        };\n        var i = nodes.length;\n        while (i--) {\n          var node = nodes[i];\n          var value = node.firstChild ? node.firstChild.value : '';\n          if (name === 'script') {\n            var type = node.attr('type');\n            if (type) {\n              node.attr('type', type === 'mce-no/type' ? null : type.replace(/^mce\\-/, ''));\n            }\n            if (settings.element_format === 'xhtml' && value.length > 0) {\n              node.firstChild.value = '// <![CDATA[\\n' + trim(value) + '\\n// ]]>';\n            }\n          } else {\n            if (settings.element_format === 'xhtml' && value.length > 0) {\n              node.firstChild.value = '<!--\\n' + trim(value) + '\\n-->';\n            }\n          }\n        }\n      });\n      htmlParser.addNodeFilter('#comment', function (nodes) {\n        var i = nodes.length;\n        while (i--) {\n          var node = nodes[i];\n          if (settings.preserve_cdata && node.value.indexOf('[CDATA[') === 0) {\n            node.name = '#cdata';\n            node.type = 4;\n            node.value = dom.decode(node.value.replace(/^\\[CDATA\\[|\\]\\]$/g, ''));\n          } else if (node.value.indexOf('mce:protected ') === 0) {\n            node.name = '#text';\n            node.type = 3;\n            node.raw = true;\n            node.value = unescape(node.value).substr(14);\n          }\n        }\n      });\n      htmlParser.addNodeFilter('xml:namespace,input', function (nodes, name) {\n        var i = nodes.length;\n        while (i--) {\n          var node = nodes[i];\n          if (node.type === 7) {\n            node.remove();\n          } else if (node.type === 1) {\n            if (name === 'input' && !node.attr('type')) {\n              node.attr('type', 'text');\n            }\n          }\n        }\n      });\n      htmlParser.addAttributeFilter('data-mce-type', function (nodes) {\n        each$k(nodes, function (node) {\n          if (node.attr('data-mce-type') === 'format-caret') {\n            if (node.isEmpty(htmlParser.schema.getNonEmptyElements())) {\n              node.remove();\n            } else {\n              node.unwrap();\n            }\n          }\n        });\n      });\n      htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style,' + 'data-mce-selected,data-mce-expando,' + 'data-mce-type,data-mce-resize,data-mce-placeholder', function (nodes, name) {\n        var i = nodes.length;\n        while (i--) {\n          nodes[i].attr(name, null);\n        }\n      });\n    };\n    var trimTrailingBr = function (rootNode) {\n      var isBr = function (node) {\n        return node && node.name === 'br';\n      };\n      var brNode1 = rootNode.lastChild;\n      if (isBr(brNode1)) {\n        var brNode2 = brNode1.prev;\n        if (isBr(brNode2)) {\n          brNode1.remove();\n          brNode2.remove();\n        }\n      }\n    };\n\n    var preProcess = function (editor, node, args) {\n      var oldDoc;\n      var dom = editor.dom;\n      var clonedNode = node.cloneNode(true);\n      var impl = document.implementation;\n      if (impl.createHTMLDocument) {\n        var doc_1 = impl.createHTMLDocument('');\n        Tools.each(clonedNode.nodeName === 'BODY' ? clonedNode.childNodes : [clonedNode], function (node) {\n          doc_1.body.appendChild(doc_1.importNode(node, true));\n        });\n        if (clonedNode.nodeName !== 'BODY') {\n          clonedNode = doc_1.body.firstChild;\n        } else {\n          clonedNode = doc_1.body;\n        }\n        oldDoc = dom.doc;\n        dom.doc = doc_1;\n      }\n      firePreProcess(editor, __assign(__assign({}, args), { node: clonedNode }));\n      if (oldDoc) {\n        dom.doc = oldDoc;\n      }\n      return clonedNode;\n    };\n    var shouldFireEvent = function (editor, args) {\n      return editor && editor.hasEventListeners('PreProcess') && !args.no_events;\n    };\n    var process = function (editor, node, args) {\n      return shouldFireEvent(editor, args) ? preProcess(editor, node, args) : node;\n    };\n\n    var addTempAttr = function (htmlParser, tempAttrs, name) {\n      if (Tools.inArray(tempAttrs, name) === -1) {\n        htmlParser.addAttributeFilter(name, function (nodes, name) {\n          var i = nodes.length;\n          while (i--) {\n            nodes[i].attr(name, null);\n          }\n        });\n        tempAttrs.push(name);\n      }\n    };\n    var postProcess = function (editor, args, content) {\n      if (!args.no_events && editor) {\n        var outArgs = firePostProcess(editor, __assign(__assign({}, args), { content: content }));\n        return outArgs.content;\n      } else {\n        return content;\n      }\n    };\n    var getHtmlFromNode = function (dom, node, args) {\n      var html = trim$2(args.getInner ? node.innerHTML : dom.getOuterHTML(node));\n      return args.selection || isWsPreserveElement(SugarElement.fromDom(node)) ? html : Tools.trim(html);\n    };\n    var parseHtml = function (htmlParser, html, args) {\n      var parserArgs = args.selection ? __assign({ forced_root_block: false }, args) : args;\n      var rootNode = htmlParser.parse(html, parserArgs);\n      trimTrailingBr(rootNode);\n      return rootNode;\n    };\n    var serializeNode = function (settings, schema, node) {\n      var htmlSerializer = HtmlSerializer(settings, schema);\n      return htmlSerializer.serialize(node);\n    };\n    var toHtml = function (editor, settings, schema, rootNode, args) {\n      var content = serializeNode(settings, schema, rootNode);\n      return postProcess(editor, args, content);\n    };\n    var DomSerializerImpl = function (settings, editor) {\n      var tempAttrs = ['data-mce-selected'];\n      var dom = editor && editor.dom ? editor.dom : DOMUtils.DOM;\n      var schema = editor && editor.schema ? editor.schema : Schema(settings);\n      settings.entity_encoding = settings.entity_encoding || 'named';\n      settings.remove_trailing_brs = 'remove_trailing_brs' in settings ? settings.remove_trailing_brs : true;\n      var htmlParser = DomParser(settings, schema);\n      register(htmlParser, settings, dom);\n      var serialize = function (node, parserArgs) {\n        if (parserArgs === void 0) {\n          parserArgs = {};\n        }\n        var args = __assign({ format: 'html' }, parserArgs);\n        var targetNode = process(editor, node, args);\n        var html = getHtmlFromNode(dom, targetNode, args);\n        var rootNode = parseHtml(htmlParser, html, args);\n        return args.format === 'tree' ? rootNode : toHtml(editor, settings, schema, rootNode, args);\n      };\n      return {\n        schema: schema,\n        addNodeFilter: htmlParser.addNodeFilter,\n        addAttributeFilter: htmlParser.addAttributeFilter,\n        serialize: serialize,\n        addRules: schema.addValidElements,\n        setRules: schema.setValidElements,\n        addTempAttr: curry(addTempAttr, htmlParser, tempAttrs),\n        getTempAttrs: constant(tempAttrs),\n        getNodeFilters: htmlParser.getNodeFilters,\n        getAttributeFilters: htmlParser.getAttributeFilters\n      };\n    };\n\n    var DomSerializer = function (settings, editor) {\n      var domSerializer = DomSerializerImpl(settings, editor);\n      return {\n        schema: domSerializer.schema,\n        addNodeFilter: domSerializer.addNodeFilter,\n        addAttributeFilter: domSerializer.addAttributeFilter,\n        serialize: domSerializer.serialize,\n        addRules: domSerializer.addRules,\n        setRules: domSerializer.setRules,\n        addTempAttr: domSerializer.addTempAttr,\n        getTempAttrs: domSerializer.getTempAttrs,\n        getNodeFilters: domSerializer.getNodeFilters,\n        getAttributeFilters: domSerializer.getAttributeFilters\n      };\n    };\n\n    var defaultFormat = 'html';\n    var getContent = function (editor, args) {\n      if (args === void 0) {\n        args = {};\n      }\n      var format = args.format ? args.format : defaultFormat;\n      return getContent$2(editor, args, format);\n    };\n\n    var setContent = function (editor, content, args) {\n      if (args === void 0) {\n        args = {};\n      }\n      return setContent$2(editor, content, args);\n    };\n\n    var DOM$7 = DOMUtils.DOM;\n    var restoreOriginalStyles = function (editor) {\n      DOM$7.setStyle(editor.id, 'display', editor.orgDisplay);\n    };\n    var safeDestroy = function (x) {\n      return Optional.from(x).each(function (x) {\n        return x.destroy();\n      });\n    };\n    var clearDomReferences = function (editor) {\n      editor.contentAreaContainer = editor.formElement = editor.container = editor.editorContainer = null;\n      editor.bodyElement = editor.contentDocument = editor.contentWindow = null;\n      editor.iframeElement = editor.targetElm = null;\n      if (editor.selection) {\n        editor.selection = editor.selection.win = editor.selection.dom = editor.selection.dom.doc = null;\n      }\n    };\n    var restoreForm = function (editor) {\n      var form = editor.formElement;\n      if (form) {\n        if (form._mceOldSubmit) {\n          form.submit = form._mceOldSubmit;\n          form._mceOldSubmit = null;\n        }\n        DOM$7.unbind(form, 'submit reset', editor.formEventDelegate);\n      }\n    };\n    var remove = function (editor) {\n      if (!editor.removed) {\n        var _selectionOverrides = editor._selectionOverrides, editorUpload = editor.editorUpload;\n        var body = editor.getBody();\n        var element = editor.getElement();\n        if (body) {\n          editor.save({ is_removing: true });\n        }\n        editor.removed = true;\n        editor.unbindAllNativeEvents();\n        if (editor.hasHiddenInput && element) {\n          DOM$7.remove(element.nextSibling);\n        }\n        fireRemove(editor);\n        editor.editorManager.remove(editor);\n        if (!editor.inline && body) {\n          restoreOriginalStyles(editor);\n        }\n        fireDetach(editor);\n        DOM$7.remove(editor.getContainer());\n        safeDestroy(_selectionOverrides);\n        safeDestroy(editorUpload);\n        editor.destroy();\n      }\n    };\n    var destroy = function (editor, automatic) {\n      var selection = editor.selection, dom = editor.dom;\n      if (editor.destroyed) {\n        return;\n      }\n      if (!automatic && !editor.removed) {\n        editor.remove();\n        return;\n      }\n      if (!automatic) {\n        editor.editorManager.off('beforeunload', editor._beforeUnload);\n        if (editor.theme && editor.theme.destroy) {\n          editor.theme.destroy();\n        }\n        safeDestroy(selection);\n        safeDestroy(dom);\n      }\n      restoreForm(editor);\n      clearDomReferences(editor);\n      editor.destroyed = true;\n    };\n\n    var deep = function (old, nu) {\n      var bothObjects = isObject(old) && isObject(nu);\n      return bothObjects ? deepMerge(old, nu) : nu;\n    };\n    var baseMerge = function (merger) {\n      return function () {\n        var objects = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          objects[_i] = arguments[_i];\n        }\n        if (objects.length === 0) {\n          throw new Error('Can\\'t merge zero objects');\n        }\n        var ret = {};\n        for (var j = 0; j < objects.length; j++) {\n          var curObject = objects[j];\n          for (var key in curObject) {\n            if (has$2(curObject, key)) {\n              ret[key] = merger(ret[key], curObject[key]);\n            }\n          }\n        }\n        return ret;\n      };\n    };\n    var deepMerge = baseMerge(deep);\n\n    var deprecatedSettings = ('autoresize_on_init,content_editable_state,convert_fonts_to_spans,inline_styles,padd_empty_with_br,block_elements,' + 'boolean_attributes,editor_deselector,editor_selector,elements,file_browser_callback_types,filepicker_validator_handler,' + 'force_hex_style_colors,force_p_newlines,gecko_spellcheck,images_dataimg_filter,media_scripts,mode,move_caret_before_on_enter_elements,' + 'non_empty_elements,self_closing_elements,short_ended_elements,special,spellchecker_select_languages,spellchecker_whitelist,' + 'tab_focus,table_responsive_width,text_block_elements,text_inline_elements,toolbar_drawer,types,validate,whitespace_elements,' + 'paste_word_valid_elements,paste_retain_style_properties,paste_convert_word_fake_lists').split(',');\n    var deprecatedPlugins = 'bbcode,colorpicker,contextmenu,fullpage,legacyoutput,spellchecker,textcolor'.split(',');\n    var movedToPremiumPlugins = 'imagetools,toc'.split(',');\n    var getDeprecatedSettings = function (settings) {\n      var settingNames = filter$4(deprecatedSettings, function (setting) {\n        return has$2(settings, setting);\n      });\n      var forcedRootBlock = settings.forced_root_block;\n      if (forcedRootBlock === false || forcedRootBlock === '') {\n        settingNames.push('forced_root_block (false only)');\n      }\n      return sort(settingNames);\n    };\n    var getDeprecatedPlugins = function (settings) {\n      var plugins = Tools.makeMap(settings.plugins, ' ');\n      var hasPlugin = function (plugin) {\n        return has$2(plugins, plugin);\n      };\n      var pluginNames = __spreadArray(__spreadArray([], filter$4(deprecatedPlugins, hasPlugin), true), bind(movedToPremiumPlugins, function (plugin) {\n        return hasPlugin(plugin) ? [plugin + ' (moving to premium)'] : [];\n      }), true);\n      return sort(pluginNames);\n    };\n    var logDeprecationsWarning = function (rawSettings, finalSettings) {\n      var deprecatedSettings = getDeprecatedSettings(rawSettings);\n      var deprecatedPlugins = getDeprecatedPlugins(finalSettings);\n      var hasDeprecatedPlugins = deprecatedPlugins.length > 0;\n      var hasDeprecatedSettings = deprecatedSettings.length > 0;\n      var isLegacyMobileTheme = finalSettings.theme === 'mobile';\n      if (hasDeprecatedPlugins || hasDeprecatedSettings || isLegacyMobileTheme) {\n        var listJoiner = '\\n- ';\n        var themesMessage = isLegacyMobileTheme ? '\\n\\nThemes:' + listJoiner + 'mobile' : '';\n        var pluginsMessage = hasDeprecatedPlugins ? '\\n\\nPlugins:' + listJoiner + deprecatedPlugins.join(listJoiner) : '';\n        var settingsMessage = hasDeprecatedSettings ? '\\n\\nSettings:' + listJoiner + deprecatedSettings.join(listJoiner) : '';\n        console.warn('The following deprecated features are currently enabled, these will be removed in TinyMCE 6.0. ' + 'See https://www.tiny.cloud/docs/release-notes/6.0-upcoming-changes/ for more information.' + themesMessage + pluginsMessage + settingsMessage);\n      }\n    };\n\n    var sectionResult = function (sections, settings) {\n      return {\n        sections: constant(sections),\n        settings: constant(settings)\n      };\n    };\n    var deviceDetection = detect().deviceType;\n    var isTouch = deviceDetection.isTouch();\n    var isPhone = deviceDetection.isPhone();\n    var isTablet = deviceDetection.isTablet();\n    var legacyMobilePlugins = [\n      'lists',\n      'autolink',\n      'autosave'\n    ];\n    var defaultTouchSettings = {\n      table_grid: false,\n      object_resizing: false,\n      resize: false\n    };\n    var normalizePlugins = function (plugins) {\n      var pluginNames = isArray$1(plugins) ? plugins.join(' ') : plugins;\n      var trimmedPlugins = map$3(isString$1(pluginNames) ? pluginNames.split(' ') : [], trim$4);\n      return filter$4(trimmedPlugins, function (item) {\n        return item.length > 0;\n      });\n    };\n    var filterLegacyMobilePlugins = function (plugins) {\n      return filter$4(plugins, curry(contains$3, legacyMobilePlugins));\n    };\n    var extractSections = function (keys, settings) {\n      var result = bifilter(settings, function (value, key) {\n        return contains$3(keys, key);\n      });\n      return sectionResult(result.t, result.f);\n    };\n    var getSection = function (sectionResult, name, defaults) {\n      if (defaults === void 0) {\n        defaults = {};\n      }\n      var sections = sectionResult.sections();\n      var sectionSettings = get$9(sections, name).getOr({});\n      return Tools.extend({}, defaults, sectionSettings);\n    };\n    var hasSection = function (sectionResult, name) {\n      return has$2(sectionResult.sections(), name);\n    };\n    var isSectionTheme = function (sectionResult, name, theme) {\n      var section = sectionResult.sections();\n      return hasSection(sectionResult, name) && section[name].theme === theme;\n    };\n    var getSectionConfig = function (sectionResult, name) {\n      return hasSection(sectionResult, name) ? sectionResult.sections()[name] : {};\n    };\n    var getToolbarMode = function (settings, defaultVal) {\n      return get$9(settings, 'toolbar_mode').orThunk(function () {\n        return get$9(settings, 'toolbar_drawer').map(function (val) {\n          return val === false ? 'wrap' : val;\n        });\n      }).getOr(defaultVal);\n    };\n    var getDefaultSettings = function (settings, id, documentBaseUrl, isTouch, editor) {\n      var baseDefaults = {\n        id: id,\n        theme: 'silver',\n        toolbar_mode: getToolbarMode(settings, 'floating'),\n        plugins: '',\n        document_base_url: documentBaseUrl,\n        add_form_submit_trigger: true,\n        submit_patch: true,\n        add_unload_trigger: true,\n        convert_urls: true,\n        relative_urls: true,\n        remove_script_host: true,\n        object_resizing: true,\n        doctype: '<!DOCTYPE html>',\n        visual: true,\n        font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%',\n        forced_root_block: 'p',\n        hidden_input: true,\n        inline_styles: true,\n        convert_fonts_to_spans: true,\n        indent: true,\n        indent_before: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',\n        indent_after: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',\n        entity_encoding: 'named',\n        url_converter: editor.convertURL,\n        url_converter_scope: editor\n      };\n      return __assign(__assign({}, baseDefaults), isTouch ? defaultTouchSettings : {});\n    };\n    var getDefaultMobileSettings = function (mobileSettings, isPhone) {\n      var defaultMobileSettings = {\n        resize: false,\n        toolbar_mode: getToolbarMode(mobileSettings, 'scrolling'),\n        toolbar_sticky: false\n      };\n      var defaultPhoneSettings = { menubar: false };\n      return __assign(__assign(__assign({}, defaultTouchSettings), defaultMobileSettings), isPhone ? defaultPhoneSettings : {});\n    };\n    var getExternalPlugins = function (overrideSettings, settings) {\n      var userDefinedExternalPlugins = settings.external_plugins ? settings.external_plugins : {};\n      if (overrideSettings && overrideSettings.external_plugins) {\n        return Tools.extend({}, overrideSettings.external_plugins, userDefinedExternalPlugins);\n      } else {\n        return userDefinedExternalPlugins;\n      }\n    };\n    var combinePlugins = function (forcedPlugins, plugins) {\n      return [].concat(normalizePlugins(forcedPlugins)).concat(normalizePlugins(plugins));\n    };\n    var getPlatformPlugins = function (isMobileDevice, sectionResult, desktopPlugins, mobilePlugins) {\n      if (isMobileDevice && isSectionTheme(sectionResult, 'mobile', 'mobile')) {\n        return filterLegacyMobilePlugins(mobilePlugins);\n      } else if (isMobileDevice && hasSection(sectionResult, 'mobile')) {\n        return mobilePlugins;\n      } else {\n        return desktopPlugins;\n      }\n    };\n    var processPlugins = function (isMobileDevice, sectionResult, defaultOverrideSettings, settings) {\n      var forcedPlugins = normalizePlugins(defaultOverrideSettings.forced_plugins);\n      var desktopPlugins = normalizePlugins(settings.plugins);\n      var mobileConfig = getSectionConfig(sectionResult, 'mobile');\n      var mobilePlugins = mobileConfig.plugins ? normalizePlugins(mobileConfig.plugins) : desktopPlugins;\n      var platformPlugins = getPlatformPlugins(isMobileDevice, sectionResult, desktopPlugins, mobilePlugins);\n      var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);\n      if (Env.browser.isIE() && contains$3(combinedPlugins, 'rtc')) {\n        throw new Error('RTC plugin is not supported on IE 11.');\n      }\n      return Tools.extend(settings, { plugins: combinedPlugins.join(' ') });\n    };\n    var isOnMobile = function (isMobileDevice, sectionResult) {\n      return isMobileDevice && hasSection(sectionResult, 'mobile');\n    };\n    var combineSettings = function (isMobileDevice, isPhone, defaultSettings, defaultOverrideSettings, settings) {\n      var defaultDeviceSettings = isMobileDevice ? { mobile: getDefaultMobileSettings(settings.mobile || {}, isPhone) } : {};\n      var sectionResult = extractSections(['mobile'], deepMerge(defaultDeviceSettings, settings));\n      var extendedSettings = Tools.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isMobileDevice, sectionResult) ? getSection(sectionResult, 'mobile') : {}, {\n        validate: true,\n        external_plugins: getExternalPlugins(defaultOverrideSettings, sectionResult.settings())\n      });\n      return processPlugins(isMobileDevice, sectionResult, defaultOverrideSettings, extendedSettings);\n    };\n    var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) {\n      var defaultSettings = getDefaultSettings(settings, id, documentBaseUrl, isTouch, editor);\n      var finalSettings = combineSettings(isPhone || isTablet, isPhone, defaultSettings, defaultOverrideSettings, settings);\n      if (finalSettings.deprecation_warnings !== false) {\n        logDeprecationsWarning(settings, finalSettings);\n      }\n      return finalSettings;\n    };\n    var getFiltered = function (predicate, editor, name) {\n      return Optional.from(editor.settings[name]).filter(predicate);\n    };\n    var getParamObject = function (value) {\n      var output = {};\n      if (typeof value === 'string') {\n        each$k(value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(','), function (val) {\n          var arr = val.split('=');\n          if (arr.length > 1) {\n            output[Tools.trim(arr[0])] = Tools.trim(arr[1]);\n          } else {\n            output[Tools.trim(arr[0])] = Tools.trim(arr[0]);\n          }\n        });\n      } else {\n        output = value;\n      }\n      return output;\n    };\n    var isArrayOf = function (p) {\n      return function (a) {\n        return isArray$1(a) && forall(a, p);\n      };\n    };\n    var getParam = function (editor, name, defaultVal, type) {\n      var value = name in editor.settings ? editor.settings[name] : defaultVal;\n      if (type === 'hash') {\n        return getParamObject(value);\n      } else if (type === 'string') {\n        return getFiltered(isString$1, editor, name).getOr(defaultVal);\n      } else if (type === 'number') {\n        return getFiltered(isNumber, editor, name).getOr(defaultVal);\n      } else if (type === 'boolean') {\n        return getFiltered(isBoolean, editor, name).getOr(defaultVal);\n      } else if (type === 'object') {\n        return getFiltered(isObject, editor, name).getOr(defaultVal);\n      } else if (type === 'array') {\n        return getFiltered(isArray$1, editor, name).getOr(defaultVal);\n      } else if (type === 'string[]') {\n        return getFiltered(isArrayOf(isString$1), editor, name).getOr(defaultVal);\n      } else if (type === 'function') {\n        return getFiltered(isFunction, editor, name).getOr(defaultVal);\n      } else {\n        return value;\n      }\n    };\n\n    var CreateIconManager = function () {\n      var lookup = {};\n      var add = function (id, iconPack) {\n        lookup[id] = iconPack;\n      };\n      var get = function (id) {\n        if (lookup[id]) {\n          return lookup[id];\n        }\n        return { icons: {} };\n      };\n      var has = function (id) {\n        return has$2(lookup, id);\n      };\n      return {\n        add: add,\n        get: get,\n        has: has\n      };\n    };\n    var IconManager = CreateIconManager();\n\n    var getProp = function (propName, elm) {\n      var rawElm = elm.dom;\n      return rawElm[propName];\n    };\n    var getComputedSizeProp = function (propName, elm) {\n      return parseInt(get$5(elm, propName), 10);\n    };\n    var getClientWidth = curry(getProp, 'clientWidth');\n    var getClientHeight = curry(getProp, 'clientHeight');\n    var getMarginTop = curry(getComputedSizeProp, 'margin-top');\n    var getMarginLeft = curry(getComputedSizeProp, 'margin-left');\n    var getBoundingClientRect = function (elm) {\n      return elm.dom.getBoundingClientRect();\n    };\n    var isInsideElementContentArea = function (bodyElm, clientX, clientY) {\n      var clientWidth = getClientWidth(bodyElm);\n      var clientHeight = getClientHeight(bodyElm);\n      return clientX >= 0 && clientY >= 0 && clientX <= clientWidth && clientY <= clientHeight;\n    };\n    var transpose = function (inline, elm, clientX, clientY) {\n      var clientRect = getBoundingClientRect(elm);\n      var deltaX = inline ? clientRect.left + elm.dom.clientLeft + getMarginLeft(elm) : 0;\n      var deltaY = inline ? clientRect.top + elm.dom.clientTop + getMarginTop(elm) : 0;\n      var x = clientX - deltaX;\n      var y = clientY - deltaY;\n      return {\n        x: x,\n        y: y\n      };\n    };\n    var isXYInContentArea = function (editor, clientX, clientY) {\n      var bodyElm = SugarElement.fromDom(editor.getBody());\n      var targetElm = editor.inline ? bodyElm : documentElement(bodyElm);\n      var transposedPoint = transpose(editor.inline, targetElm, clientX, clientY);\n      return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y);\n    };\n    var fromDomSafe = function (node) {\n      return Optional.from(node).map(SugarElement.fromDom);\n    };\n    var isEditorAttachedToDom = function (editor) {\n      var rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();\n      return fromDomSafe(rawContainer).map(inBody).getOr(false);\n    };\n\n    var NotificationManagerImpl = function () {\n      var unimplemented = function () {\n        throw new Error('Theme did not provide a NotificationManager implementation.');\n      };\n      return {\n        open: unimplemented,\n        close: unimplemented,\n        reposition: unimplemented,\n        getArgs: unimplemented\n      };\n    };\n\n    var NotificationManager = function (editor) {\n      var notifications = [];\n      var getImplementation = function () {\n        var theme = editor.theme;\n        return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl();\n      };\n      var getTopNotification = function () {\n        return Optional.from(notifications[0]);\n      };\n      var isEqual = function (a, b) {\n        return a.type === b.type && a.text === b.text && !a.progressBar && !a.timeout && !b.progressBar && !b.timeout;\n      };\n      var reposition = function () {\n        if (notifications.length > 0) {\n          getImplementation().reposition(notifications);\n        }\n      };\n      var addNotification = function (notification) {\n        notifications.push(notification);\n      };\n      var closeNotification = function (notification) {\n        findIndex$2(notifications, function (otherNotification) {\n          return otherNotification === notification;\n        }).each(function (index) {\n          notifications.splice(index, 1);\n        });\n      };\n      var open = function (spec, fireEvent) {\n        if (fireEvent === void 0) {\n          fireEvent = true;\n        }\n        if (editor.removed || !isEditorAttachedToDom(editor)) {\n          return;\n        }\n        if (fireEvent) {\n          editor.fire('BeforeOpenNotification', { notification: spec });\n        }\n        return find$3(notifications, function (notification) {\n          return isEqual(getImplementation().getArgs(notification), spec);\n        }).getOrThunk(function () {\n          editor.editorManager.setActive(editor);\n          var notification = getImplementation().open(spec, function () {\n            closeNotification(notification);\n            reposition();\n            getTopNotification().fold(function () {\n              return editor.focus();\n            }, function (top) {\n              return focus$1(SugarElement.fromDom(top.getEl()));\n            });\n          });\n          addNotification(notification);\n          reposition();\n          editor.fire('OpenNotification', { notification: __assign({}, notification) });\n          return notification;\n        });\n      };\n      var close = function () {\n        getTopNotification().each(function (notification) {\n          getImplementation().close(notification);\n          closeNotification(notification);\n          reposition();\n        });\n      };\n      var getNotifications = constant(notifications);\n      var registerEvents = function (editor) {\n        editor.on('SkinLoaded', function () {\n          var serviceMessage = getServiceMessage(editor);\n          if (serviceMessage) {\n            open({\n              text: serviceMessage,\n              type: 'warning',\n              timeout: 0\n            }, false);\n          }\n          reposition();\n        });\n        editor.on('show ResizeEditor ResizeWindow NodeChange', function () {\n          Delay.requestAnimationFrame(reposition);\n        });\n        editor.on('remove', function () {\n          each$k(notifications.slice(), function (notification) {\n            getImplementation().close(notification);\n          });\n        });\n      };\n      registerEvents(editor);\n      return {\n        open: open,\n        close: close,\n        getNotifications: getNotifications\n      };\n    };\n\n    var PluginManager = AddOnManager.PluginManager;\n\n    var ThemeManager = AddOnManager.ThemeManager;\n\n    function WindowManagerImpl () {\n      var unimplemented = function () {\n        throw new Error('Theme did not provide a WindowManager implementation.');\n      };\n      return {\n        open: unimplemented,\n        openUrl: unimplemented,\n        alert: unimplemented,\n        confirm: unimplemented,\n        close: unimplemented,\n        getParams: unimplemented,\n        setParams: unimplemented\n      };\n    }\n\n    var WindowManager = function (editor) {\n      var dialogs = [];\n      var getImplementation = function () {\n        var theme = editor.theme;\n        return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl();\n      };\n      var funcBind = function (scope, f) {\n        return function () {\n          var args = [];\n          for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n          }\n          return f ? f.apply(scope, args) : undefined;\n        };\n      };\n      var fireOpenEvent = function (dialog) {\n        editor.fire('OpenWindow', { dialog: dialog });\n      };\n      var fireCloseEvent = function (dialog) {\n        editor.fire('CloseWindow', { dialog: dialog });\n      };\n      var addDialog = function (dialog) {\n        dialogs.push(dialog);\n        fireOpenEvent(dialog);\n      };\n      var closeDialog = function (dialog) {\n        fireCloseEvent(dialog);\n        dialogs = filter$4(dialogs, function (otherDialog) {\n          return otherDialog !== dialog;\n        });\n        if (dialogs.length === 0) {\n          editor.focus();\n        }\n      };\n      var getTopDialog = function () {\n        return Optional.from(dialogs[dialogs.length - 1]);\n      };\n      var storeSelectionAndOpenDialog = function (openDialog) {\n        editor.editorManager.setActive(editor);\n        store(editor);\n        var dialog = openDialog();\n        addDialog(dialog);\n        return dialog;\n      };\n      var open = function (args, params) {\n        return storeSelectionAndOpenDialog(function () {\n          return getImplementation().open(args, params, closeDialog);\n        });\n      };\n      var openUrl = function (args) {\n        return storeSelectionAndOpenDialog(function () {\n          return getImplementation().openUrl(args, closeDialog);\n        });\n      };\n      var alert = function (message, callback, scope) {\n        var windowManagerImpl = getImplementation();\n        windowManagerImpl.alert(message, funcBind(scope ? scope : windowManagerImpl, callback));\n      };\n      var confirm = function (message, callback, scope) {\n        var windowManagerImpl = getImplementation();\n        windowManagerImpl.confirm(message, funcBind(scope ? scope : windowManagerImpl, callback));\n      };\n      var close = function () {\n        getTopDialog().each(function (dialog) {\n          getImplementation().close(dialog);\n          closeDialog(dialog);\n        });\n      };\n      editor.on('remove', function () {\n        each$k(dialogs, function (dialog) {\n          getImplementation().close(dialog);\n        });\n      });\n      return {\n        open: open,\n        openUrl: openUrl,\n        alert: alert,\n        confirm: confirm,\n        close: close\n      };\n    };\n\n    var displayNotification = function (editor, message) {\n      editor.notificationManager.open({\n        type: 'error',\n        text: message\n      });\n    };\n    var displayError = function (editor, message) {\n      if (editor._skinLoaded) {\n        displayNotification(editor, message);\n      } else {\n        editor.on('SkinLoaded', function () {\n          displayNotification(editor, message);\n        });\n      }\n    };\n    var uploadError = function (editor, message) {\n      displayError(editor, I18n.translate([\n        'Failed to upload image: {0}',\n        message\n      ]));\n    };\n    var logError = function (editor, errorType, msg) {\n      fireError(editor, errorType, { message: msg });\n      console.error(msg);\n    };\n    var createLoadError = function (type, url, name) {\n      return name ? 'Failed to load ' + type + ': ' + name + ' from url ' + url : 'Failed to load ' + type + ' url: ' + url;\n    };\n    var pluginLoadError = function (editor, url, name) {\n      logError(editor, 'PluginLoadError', createLoadError('plugin', url, name));\n    };\n    var iconsLoadError = function (editor, url, name) {\n      logError(editor, 'IconsLoadError', createLoadError('icons', url, name));\n    };\n    var languageLoadError = function (editor, url, name) {\n      logError(editor, 'LanguageLoadError', createLoadError('language', url, name));\n    };\n    var pluginInitError = function (editor, name, err) {\n      var message = I18n.translate([\n        'Failed to initialize plugin: {0}',\n        name\n      ]);\n      fireError(editor, 'PluginLoadError', { message: message });\n      initError(message, err);\n      displayError(editor, message);\n    };\n    var initError = function (message) {\n      var x = [];\n      for (var _i = 1; _i < arguments.length; _i++) {\n        x[_i - 1] = arguments[_i];\n      }\n      var console = window.console;\n      if (console) {\n        if (console.error) {\n          console.error.apply(console, __spreadArray([message], x, false));\n        } else {\n          console.log.apply(console, __spreadArray([message], x, false));\n        }\n      }\n    };\n\n    var isContentCssSkinName = function (url) {\n      return /^[a-z0-9\\-]+$/i.test(url);\n    };\n    var getContentCssUrls = function (editor) {\n      return transformToUrls(editor, getContentCss(editor));\n    };\n    var getFontCssUrls = function (editor) {\n      return transformToUrls(editor, getFontCss(editor));\n    };\n    var transformToUrls = function (editor, cssLinks) {\n      var skinUrl = editor.editorManager.baseURL + '/skins/content';\n      var suffix = editor.editorManager.suffix;\n      var contentCssFile = 'content' + suffix + '.css';\n      var inline = editor.inline === true;\n      return map$3(cssLinks, function (url) {\n        if (isContentCssSkinName(url) && !inline) {\n          return skinUrl + '/' + url + '/' + contentCssFile;\n        } else {\n          return editor.documentBaseURI.toAbsolute(url);\n        }\n      });\n    };\n    var appendContentCssFromSettings = function (editor) {\n      editor.contentCSS = editor.contentCSS.concat(getContentCssUrls(editor), getFontCssUrls(editor));\n    };\n\n    var UploadStatus = function () {\n      var PENDING = 1, UPLOADED = 2;\n      var blobUriStatuses = {};\n      var createStatus = function (status, resultUri) {\n        return {\n          status: status,\n          resultUri: resultUri\n        };\n      };\n      var hasBlobUri = function (blobUri) {\n        return blobUri in blobUriStatuses;\n      };\n      var getResultUri = function (blobUri) {\n        var result = blobUriStatuses[blobUri];\n        return result ? result.resultUri : null;\n      };\n      var isPending = function (blobUri) {\n        return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === PENDING : false;\n      };\n      var isUploaded = function (blobUri) {\n        return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === UPLOADED : false;\n      };\n      var markPending = function (blobUri) {\n        blobUriStatuses[blobUri] = createStatus(PENDING, null);\n      };\n      var markUploaded = function (blobUri, resultUri) {\n        blobUriStatuses[blobUri] = createStatus(UPLOADED, resultUri);\n      };\n      var removeFailed = function (blobUri) {\n        delete blobUriStatuses[blobUri];\n      };\n      var destroy = function () {\n        blobUriStatuses = {};\n      };\n      return {\n        hasBlobUri: hasBlobUri,\n        getResultUri: getResultUri,\n        isPending: isPending,\n        isUploaded: isUploaded,\n        markPending: markPending,\n        markUploaded: markUploaded,\n        removeFailed: removeFailed,\n        destroy: destroy\n      };\n    };\n\n    var count = 0;\n    var seed = function () {\n      var rnd = function () {\n        return Math.round(Math.random() * 4294967295).toString(36);\n      };\n      var now = new Date().getTime();\n      return 's' + now.toString(36) + rnd() + rnd() + rnd();\n    };\n    var uuid = function (prefix) {\n      return prefix + count++ + seed();\n    };\n\n    var BlobCache = function () {\n      var cache = [];\n      var mimeToExt = function (mime) {\n        var mimes = {\n          'image/jpeg': 'jpg',\n          'image/jpg': 'jpg',\n          'image/gif': 'gif',\n          'image/png': 'png',\n          'image/apng': 'apng',\n          'image/avif': 'avif',\n          'image/svg+xml': 'svg',\n          'image/webp': 'webp',\n          'image/bmp': 'bmp',\n          'image/tiff': 'tiff'\n        };\n        return mimes[mime.toLowerCase()] || 'dat';\n      };\n      var create = function (o, blob, base64, name, filename) {\n        if (isString$1(o)) {\n          var id = o;\n          return toBlobInfo({\n            id: id,\n            name: name,\n            filename: filename,\n            blob: blob,\n            base64: base64\n          });\n        } else if (isObject(o)) {\n          return toBlobInfo(o);\n        } else {\n          throw new Error('Unknown input type');\n        }\n      };\n      var toBlobInfo = function (o) {\n        if (!o.blob || !o.base64) {\n          throw new Error('blob and base64 representations of the image are required for BlobInfo to be created');\n        }\n        var id = o.id || uuid('blobid');\n        var name = o.name || id;\n        var blob = o.blob;\n        return {\n          id: constant(id),\n          name: constant(name),\n          filename: constant(o.filename || name + '.' + mimeToExt(blob.type)),\n          blob: constant(blob),\n          base64: constant(o.base64),\n          blobUri: constant(o.blobUri || URL.createObjectURL(blob)),\n          uri: constant(o.uri)\n        };\n      };\n      var add = function (blobInfo) {\n        if (!get(blobInfo.id())) {\n          cache.push(blobInfo);\n        }\n      };\n      var findFirst = function (predicate) {\n        return find$3(cache, predicate).getOrUndefined();\n      };\n      var get = function (id) {\n        return findFirst(function (cachedBlobInfo) {\n          return cachedBlobInfo.id() === id;\n        });\n      };\n      var getByUri = function (blobUri) {\n        return findFirst(function (blobInfo) {\n          return blobInfo.blobUri() === blobUri;\n        });\n      };\n      var getByData = function (base64, type) {\n        return findFirst(function (blobInfo) {\n          return blobInfo.base64() === base64 && blobInfo.blob().type === type;\n        });\n      };\n      var removeByUri = function (blobUri) {\n        cache = filter$4(cache, function (blobInfo) {\n          if (blobInfo.blobUri() === blobUri) {\n            URL.revokeObjectURL(blobInfo.blobUri());\n            return false;\n          }\n          return true;\n        });\n      };\n      var destroy = function () {\n        each$k(cache, function (cachedBlobInfo) {\n          URL.revokeObjectURL(cachedBlobInfo.blobUri());\n        });\n        cache = [];\n      };\n      return {\n        create: create,\n        add: add,\n        get: get,\n        getByUri: getByUri,\n        getByData: getByData,\n        findFirst: findFirst,\n        removeByUri: removeByUri,\n        destroy: destroy\n      };\n    };\n\n    var Uploader = function (uploadStatus, settings) {\n      var pendingPromises = {};\n      var pathJoin = function (path1, path2) {\n        if (path1) {\n          return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\n        }\n        return path2;\n      };\n      var defaultHandler = function (blobInfo, success, failure, progress) {\n        var xhr = new XMLHttpRequest();\n        xhr.open('POST', settings.url);\n        xhr.withCredentials = settings.credentials;\n        xhr.upload.onprogress = function (e) {\n          progress(e.loaded / e.total * 100);\n        };\n        xhr.onerror = function () {\n          failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);\n        };\n        xhr.onload = function () {\n          if (xhr.status < 200 || xhr.status >= 300) {\n            failure('HTTP Error: ' + xhr.status);\n            return;\n          }\n          var json = JSON.parse(xhr.responseText);\n          if (!json || typeof json.location !== 'string') {\n            failure('Invalid JSON: ' + xhr.responseText);\n            return;\n          }\n          success(pathJoin(settings.basePath, json.location));\n        };\n        var formData = new FormData();\n        formData.append('file', blobInfo.blob(), blobInfo.filename());\n        xhr.send(formData);\n      };\n      var noUpload = function () {\n        return new promiseObj(function (resolve) {\n          resolve([]);\n        });\n      };\n      var handlerSuccess = function (blobInfo, url) {\n        return {\n          url: url,\n          blobInfo: blobInfo,\n          status: true\n        };\n      };\n      var handlerFailure = function (blobInfo, message, options) {\n        return {\n          url: '',\n          blobInfo: blobInfo,\n          status: false,\n          error: {\n            message: message,\n            options: options\n          }\n        };\n      };\n      var resolvePending = function (blobUri, result) {\n        Tools.each(pendingPromises[blobUri], function (resolve) {\n          resolve(result);\n        });\n        delete pendingPromises[blobUri];\n      };\n      var uploadBlobInfo = function (blobInfo, handler, openNotification) {\n        uploadStatus.markPending(blobInfo.blobUri());\n        return new promiseObj(function (resolve) {\n          var notification, progress;\n          try {\n            var closeNotification_1 = function () {\n              if (notification) {\n                notification.close();\n                progress = noop;\n              }\n            };\n            var success = function (url) {\n              closeNotification_1();\n              uploadStatus.markUploaded(blobInfo.blobUri(), url);\n              resolvePending(blobInfo.blobUri(), handlerSuccess(blobInfo, url));\n              resolve(handlerSuccess(blobInfo, url));\n            };\n            var failure = function (error, options) {\n              var failureOptions = options ? options : {};\n              closeNotification_1();\n              uploadStatus.removeFailed(blobInfo.blobUri());\n              resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error, failureOptions));\n              resolve(handlerFailure(blobInfo, error, failureOptions));\n            };\n            progress = function (percent) {\n              if (percent < 0 || percent > 100) {\n                return;\n              }\n              Optional.from(notification).orThunk(function () {\n                return Optional.from(openNotification).map(apply);\n              }).each(function (n) {\n                notification = n;\n                n.progressBar.value(percent);\n              });\n            };\n            handler(blobInfo, success, failure, progress);\n          } catch (ex) {\n            resolve(handlerFailure(blobInfo, ex.message, {}));\n          }\n        });\n      };\n      var isDefaultHandler = function (handler) {\n        return handler === defaultHandler;\n      };\n      var pendingUploadBlobInfo = function (blobInfo) {\n        var blobUri = blobInfo.blobUri();\n        return new promiseObj(function (resolve) {\n          pendingPromises[blobUri] = pendingPromises[blobUri] || [];\n          pendingPromises[blobUri].push(resolve);\n        });\n      };\n      var uploadBlobs = function (blobInfos, openNotification) {\n        blobInfos = Tools.grep(blobInfos, function (blobInfo) {\n          return !uploadStatus.isUploaded(blobInfo.blobUri());\n        });\n        return promiseObj.all(Tools.map(blobInfos, function (blobInfo) {\n          return uploadStatus.isPending(blobInfo.blobUri()) ? pendingUploadBlobInfo(blobInfo) : uploadBlobInfo(blobInfo, settings.handler, openNotification);\n        }));\n      };\n      var upload = function (blobInfos, openNotification) {\n        return !settings.url && isDefaultHandler(settings.handler) ? noUpload() : uploadBlobs(blobInfos, openNotification);\n      };\n      if (isFunction(settings.handler) === false) {\n        settings.handler = defaultHandler;\n      }\n      return { upload: upload };\n    };\n\n    var openNotification = function (editor) {\n      return function () {\n        return editor.notificationManager.open({\n          text: editor.translate('Image uploading...'),\n          type: 'info',\n          timeout: -1,\n          progressBar: true\n        });\n      };\n    };\n    var createUploader = function (editor, uploadStatus) {\n      return Uploader(uploadStatus, {\n        url: getImageUploadUrl(editor),\n        basePath: getImageUploadBasePath(editor),\n        credentials: getImagesUploadCredentials(editor),\n        handler: getImagesUploadHandler(editor)\n      });\n    };\n    var ImageUploader = function (editor) {\n      var uploadStatus = UploadStatus();\n      var uploader = createUploader(editor, uploadStatus);\n      return {\n        upload: function (blobInfos, showNotification) {\n          if (showNotification === void 0) {\n            showNotification = true;\n          }\n          return uploader.upload(blobInfos, showNotification ? openNotification(editor) : undefined);\n        }\n      };\n    };\n\n    var UploadChangeHandler = function (editor) {\n      var lastChangedLevel = Cell(null);\n      editor.on('change AddUndo', function (e) {\n        lastChangedLevel.set(__assign({}, e.level));\n      });\n      var fireIfChanged = function () {\n        var data = editor.undoManager.data;\n        last$2(data).filter(function (level) {\n          return !isEq$1(lastChangedLevel.get(), level);\n        }).each(function (level) {\n          editor.setDirty(true);\n          editor.fire('change', {\n            level: level,\n            lastLevel: get$a(data, data.length - 2).getOrNull()\n          });\n        });\n      };\n      return { fireIfChanged: fireIfChanged };\n    };\n    var EditorUpload = function (editor) {\n      var blobCache = BlobCache();\n      var uploader, imageScanner;\n      var uploadStatus = UploadStatus();\n      var urlFilters = [];\n      var changeHandler = UploadChangeHandler(editor);\n      var aliveGuard = function (callback) {\n        return function (result) {\n          if (editor.selection) {\n            return callback(result);\n          }\n          return [];\n        };\n      };\n      var cacheInvalidator = function (url) {\n        return url + (url.indexOf('?') === -1 ? '?' : '&') + new Date().getTime();\n      };\n      var replaceString = function (content, search, replace) {\n        var index = 0;\n        do {\n          index = content.indexOf(search, index);\n          if (index !== -1) {\n            content = content.substring(0, index) + replace + content.substr(index + search.length);\n            index += replace.length - search.length + 1;\n          }\n        } while (index !== -1);\n        return content;\n      };\n      var replaceImageUrl = function (content, targetUrl, replacementUrl) {\n        var replacementString = 'src=\"' + replacementUrl + '\"' + (replacementUrl === Env.transparentSrc ? ' data-mce-placeholder=\"1\"' : '');\n        content = replaceString(content, 'src=\"' + targetUrl + '\"', replacementString);\n        content = replaceString(content, 'data-mce-src=\"' + targetUrl + '\"', 'data-mce-src=\"' + replacementUrl + '\"');\n        return content;\n      };\n      var replaceUrlInUndoStack = function (targetUrl, replacementUrl) {\n        each$k(editor.undoManager.data, function (level) {\n          if (level.type === 'fragmented') {\n            level.fragments = map$3(level.fragments, function (fragment) {\n              return replaceImageUrl(fragment, targetUrl, replacementUrl);\n            });\n          } else {\n            level.content = replaceImageUrl(level.content, targetUrl, replacementUrl);\n          }\n        });\n      };\n      var replaceImageUriInView = function (image, resultUri) {\n        var src = editor.convertURL(resultUri, 'src');\n        replaceUrlInUndoStack(image.src, resultUri);\n        editor.$(image).attr({\n          'src': shouldReuseFileName(editor) ? cacheInvalidator(resultUri) : resultUri,\n          'data-mce-src': src\n        });\n      };\n      var uploadImages = function (callback) {\n        if (!uploader) {\n          uploader = createUploader(editor, uploadStatus);\n        }\n        return scanForImages().then(aliveGuard(function (imageInfos) {\n          var blobInfos = map$3(imageInfos, function (imageInfo) {\n            return imageInfo.blobInfo;\n          });\n          return uploader.upload(blobInfos, openNotification(editor)).then(aliveGuard(function (result) {\n            var imagesToRemove = [];\n            var filteredResult = map$3(result, function (uploadInfo, index) {\n              var blobInfo = imageInfos[index].blobInfo;\n              var image = imageInfos[index].image;\n              if (uploadInfo.status && shouldReplaceBlobUris(editor)) {\n                blobCache.removeByUri(image.src);\n                if (isRtc(editor)) ; else {\n                  replaceImageUriInView(image, uploadInfo.url);\n                }\n              } else if (uploadInfo.error) {\n                if (uploadInfo.error.options.remove) {\n                  replaceUrlInUndoStack(image.getAttribute('src'), Env.transparentSrc);\n                  imagesToRemove.push(image);\n                }\n                uploadError(editor, uploadInfo.error.message);\n              }\n              return {\n                element: image,\n                status: uploadInfo.status,\n                uploadUri: uploadInfo.url,\n                blobInfo: blobInfo\n              };\n            });\n            if (filteredResult.length > 0) {\n              changeHandler.fireIfChanged();\n            }\n            if (imagesToRemove.length > 0) {\n              if (isRtc(editor)) {\n                console.error('Removing images on failed uploads is currently unsupported for RTC');\n              } else {\n                editor.undoManager.transact(function () {\n                  each$k(imagesToRemove, function (element) {\n                    editor.dom.remove(element);\n                    blobCache.removeByUri(element.src);\n                  });\n                });\n              }\n            }\n            if (callback) {\n              callback(filteredResult);\n            }\n            return filteredResult;\n          }));\n        }));\n      };\n      var uploadImagesAuto = function (callback) {\n        if (isAutomaticUploadsEnabled(editor)) {\n          return uploadImages(callback);\n        }\n      };\n      var isValidDataUriImage = function (imgElm) {\n        if (forall(urlFilters, function (filter) {\n            return filter(imgElm);\n          }) === false) {\n          return false;\n        }\n        if (imgElm.getAttribute('src').indexOf('data:') === 0) {\n          var dataImgFilter = getImagesDataImgFilter(editor);\n          return dataImgFilter(imgElm);\n        }\n        return true;\n      };\n      var addFilter = function (filter) {\n        urlFilters.push(filter);\n      };\n      var scanForImages = function () {\n        if (!imageScanner) {\n          imageScanner = ImageScanner(uploadStatus, blobCache);\n        }\n        return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard(function (result) {\n          result = filter$4(result, function (resultItem) {\n            if (typeof resultItem === 'string') {\n              displayError(editor, resultItem);\n              return false;\n            }\n            return true;\n          });\n          if (isRtc(editor)) ; else {\n            each$k(result, function (resultItem) {\n              replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri());\n              resultItem.image.src = resultItem.blobInfo.blobUri();\n              resultItem.image.removeAttribute('data-mce-src');\n            });\n          }\n          return result;\n        }));\n      };\n      var destroy = function () {\n        blobCache.destroy();\n        uploadStatus.destroy();\n        imageScanner = uploader = null;\n      };\n      var replaceBlobUris = function (content) {\n        return content.replace(/src=\"(blob:[^\"]+)\"/g, function (match, blobUri) {\n          var resultUri = uploadStatus.getResultUri(blobUri);\n          if (resultUri) {\n            return 'src=\"' + resultUri + '\"';\n          }\n          var blobInfo = blobCache.getByUri(blobUri);\n          if (!blobInfo) {\n            blobInfo = foldl(editor.editorManager.get(), function (result, editor) {\n              return result || editor.editorUpload && editor.editorUpload.blobCache.getByUri(blobUri);\n            }, null);\n          }\n          if (blobInfo) {\n            var blob = blobInfo.blob();\n            return 'src=\"data:' + blob.type + ';base64,' + blobInfo.base64() + '\"';\n          }\n          return match;\n        });\n      };\n      editor.on('SetContent', function () {\n        if (isAutomaticUploadsEnabled(editor)) {\n          uploadImagesAuto();\n        } else {\n          scanForImages();\n        }\n      });\n      editor.on('RawSaveContent', function (e) {\n        e.content = replaceBlobUris(e.content);\n      });\n      editor.on('GetContent', function (e) {\n        if (e.source_view || e.format === 'raw' || e.format === 'tree') {\n          return;\n        }\n        e.content = replaceBlobUris(e.content);\n      });\n      editor.on('PostRender', function () {\n        editor.parser.addNodeFilter('img', function (images) {\n          each$k(images, function (img) {\n            var src = img.attr('src');\n            if (blobCache.getByUri(src)) {\n              return;\n            }\n            var resultUri = uploadStatus.getResultUri(src);\n            if (resultUri) {\n              img.attr('src', resultUri);\n            }\n          });\n        });\n      });\n      return {\n        blobCache: blobCache,\n        addFilter: addFilter,\n        uploadImages: uploadImages,\n        uploadImagesAuto: uploadImagesAuto,\n        scanForImages: scanForImages,\n        destroy: destroy\n      };\n    };\n\n    var get = function (dom) {\n      var formats = {\n        valigntop: [{\n            selector: 'td,th',\n            styles: { verticalAlign: 'top' }\n          }],\n        valignmiddle: [{\n            selector: 'td,th',\n            styles: { verticalAlign: 'middle' }\n          }],\n        valignbottom: [{\n            selector: 'td,th',\n            styles: { verticalAlign: 'bottom' }\n          }],\n        alignleft: [\n          {\n            selector: 'figure.image',\n            collapsed: false,\n            classes: 'align-left',\n            ceFalseOverride: true,\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n            styles: { textAlign: 'left' },\n            inherit: false,\n            preview: false,\n            defaultBlock: 'div'\n          },\n          {\n            selector: 'img,table,audio,video',\n            collapsed: false,\n            styles: { float: 'left' },\n            preview: 'font-family font-size'\n          }\n        ],\n        aligncenter: [\n          {\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n            styles: { textAlign: 'center' },\n            inherit: false,\n            preview: 'font-family font-size',\n            defaultBlock: 'div'\n          },\n          {\n            selector: 'figure.image',\n            collapsed: false,\n            classes: 'align-center',\n            ceFalseOverride: true,\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'img,audio,video',\n            collapsed: false,\n            styles: {\n              display: 'block',\n              marginLeft: 'auto',\n              marginRight: 'auto'\n            },\n            preview: false\n          },\n          {\n            selector: 'table',\n            collapsed: false,\n            styles: {\n              marginLeft: 'auto',\n              marginRight: 'auto'\n            },\n            preview: 'font-family font-size'\n          }\n        ],\n        alignright: [\n          {\n            selector: 'figure.image',\n            collapsed: false,\n            classes: 'align-right',\n            ceFalseOverride: true,\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n            styles: { textAlign: 'right' },\n            inherit: false,\n            preview: 'font-family font-size',\n            defaultBlock: 'div'\n          },\n          {\n            selector: 'img,table,audio,video',\n            collapsed: false,\n            styles: { float: 'right' },\n            preview: 'font-family font-size'\n          }\n        ],\n        alignjustify: [{\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n            styles: { textAlign: 'justify' },\n            inherit: false,\n            defaultBlock: 'div',\n            preview: 'font-family font-size'\n          }],\n        bold: [\n          {\n            inline: 'strong',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          },\n          {\n            inline: 'span',\n            styles: { fontWeight: 'bold' }\n          },\n          {\n            inline: 'b',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          }\n        ],\n        italic: [\n          {\n            inline: 'em',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          },\n          {\n            inline: 'span',\n            styles: { fontStyle: 'italic' }\n          },\n          {\n            inline: 'i',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          }\n        ],\n        underline: [\n          {\n            inline: 'span',\n            styles: { textDecoration: 'underline' },\n            exact: true\n          },\n          {\n            inline: 'u',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          }\n        ],\n        strikethrough: [\n          {\n            inline: 'span',\n            styles: { textDecoration: 'line-through' },\n            exact: true\n          },\n          {\n            inline: 'strike',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          },\n          {\n            inline: 's',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          }\n        ],\n        forecolor: {\n          inline: 'span',\n          styles: { color: '%value' },\n          links: true,\n          remove_similar: true,\n          clear_child_styles: true\n        },\n        hilitecolor: {\n          inline: 'span',\n          styles: { backgroundColor: '%value' },\n          links: true,\n          remove_similar: true,\n          clear_child_styles: true\n        },\n        fontname: {\n          inline: 'span',\n          toggle: false,\n          styles: { fontFamily: '%value' },\n          clear_child_styles: true\n        },\n        fontsize: {\n          inline: 'span',\n          toggle: false,\n          styles: { fontSize: '%value' },\n          clear_child_styles: true\n        },\n        lineheight: {\n          selector: 'h1,h2,h3,h4,h5,h6,p,li,td,th,div',\n          defaultBlock: 'p',\n          styles: { lineHeight: '%value' }\n        },\n        fontsize_class: {\n          inline: 'span',\n          attributes: { class: '%value' }\n        },\n        blockquote: {\n          block: 'blockquote',\n          wrapper: true,\n          remove: 'all'\n        },\n        subscript: { inline: 'sub' },\n        superscript: { inline: 'sup' },\n        code: { inline: 'code' },\n        link: {\n          inline: 'a',\n          selector: 'a',\n          remove: 'all',\n          split: true,\n          deep: true,\n          onmatch: function (node, _fmt, _itemName) {\n            return isElement$5(node) && node.hasAttribute('href');\n          },\n          onformat: function (elm, _fmt, vars) {\n            Tools.each(vars, function (value, key) {\n              dom.setAttrib(elm, key, value);\n            });\n          }\n        },\n        lang: {\n          inline: 'span',\n          clear_child_styles: true,\n          remove_similar: true,\n          attributes: {\n            'lang': '%value',\n            'data-mce-lang': function (vars) {\n              var _a;\n              return (_a = vars === null || vars === void 0 ? void 0 : vars.customValue) !== null && _a !== void 0 ? _a : null;\n            }\n          }\n        },\n        removeformat: [\n          {\n            selector: 'b,strong,em,i,font,u,strike,s,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins,small',\n            remove: 'all',\n            split: true,\n            expand: false,\n            block_expand: true,\n            deep: true\n          },\n          {\n            selector: 'span',\n            attributes: [\n              'style',\n              'class'\n            ],\n            remove: 'empty',\n            split: true,\n            expand: false,\n            deep: true\n          },\n          {\n            selector: '*',\n            attributes: [\n              'style',\n              'class'\n            ],\n            split: false,\n            expand: false,\n            deep: true\n          }\n        ]\n      };\n      Tools.each('p h1 h2 h3 h4 h5 h6 div address pre dt dd samp'.split(/\\s/), function (name) {\n        formats[name] = {\n          block: name,\n          remove: 'all'\n        };\n      });\n      return formats;\n    };\n\n    var FormatRegistry = function (editor) {\n      var formats = {};\n      var get$1 = function (name) {\n        return isNonNullable(name) ? formats[name] : formats;\n      };\n      var has = function (name) {\n        return has$2(formats, name);\n      };\n      var register = function (name, format) {\n        if (name) {\n          if (!isString$1(name)) {\n            each$j(name, function (format, name) {\n              register(name, format);\n            });\n          } else {\n            if (!isArray$1(format)) {\n              format = [format];\n            }\n            each$k(format, function (format) {\n              if (isUndefined(format.deep)) {\n                format.deep = !isSelectorFormat(format);\n              }\n              if (isUndefined(format.split)) {\n                format.split = !isSelectorFormat(format) || isInlineFormat(format);\n              }\n              if (isUndefined(format.remove) && isSelectorFormat(format) && !isInlineFormat(format)) {\n                format.remove = 'none';\n              }\n              if (isSelectorFormat(format) && isInlineFormat(format)) {\n                format.mixed = true;\n                format.block_expand = true;\n              }\n              if (isString$1(format.classes)) {\n                format.classes = format.classes.split(/\\s+/);\n              }\n            });\n            formats[name] = format;\n          }\n        }\n      };\n      var unregister = function (name) {\n        if (name && formats[name]) {\n          delete formats[name];\n        }\n        return formats;\n      };\n      register(get(editor.dom));\n      register(getFormats(editor));\n      return {\n        get: get$1,\n        has: has,\n        register: register,\n        unregister: unregister\n      };\n    };\n\n    var each$5 = Tools.each;\n    var dom = DOMUtils.DOM;\n    var parsedSelectorToHtml = function (ancestry, editor) {\n      var elm, item, fragment;\n      var schema = editor && editor.schema || Schema({});\n      var decorate = function (elm, item) {\n        if (item.classes.length) {\n          dom.addClass(elm, item.classes.join(' '));\n        }\n        dom.setAttribs(elm, item.attrs);\n      };\n      var createElement = function (sItem) {\n        item = typeof sItem === 'string' ? {\n          name: sItem,\n          classes: [],\n          attrs: {}\n        } : sItem;\n        var elm = dom.create(item.name);\n        decorate(elm, item);\n        return elm;\n      };\n      var getRequiredParent = function (elm, candidate) {\n        var name = typeof elm !== 'string' ? elm.nodeName.toLowerCase() : elm;\n        var elmRule = schema.getElementRule(name);\n        var parentsRequired = elmRule && elmRule.parentsRequired;\n        if (parentsRequired && parentsRequired.length) {\n          return candidate && Tools.inArray(parentsRequired, candidate) !== -1 ? candidate : parentsRequired[0];\n        } else {\n          return false;\n        }\n      };\n      var wrapInHtml = function (elm, ancestry, siblings) {\n        var parent, parentCandidate;\n        var ancestor = ancestry.length > 0 && ancestry[0];\n        var ancestorName = ancestor && ancestor.name;\n        var parentRequired = getRequiredParent(elm, ancestorName);\n        if (parentRequired) {\n          if (ancestorName === parentRequired) {\n            parentCandidate = ancestry[0];\n            ancestry = ancestry.slice(1);\n          } else {\n            parentCandidate = parentRequired;\n          }\n        } else if (ancestor) {\n          parentCandidate = ancestry[0];\n          ancestry = ancestry.slice(1);\n        } else if (!siblings) {\n          return elm;\n        }\n        if (parentCandidate) {\n          parent = createElement(parentCandidate);\n          parent.appendChild(elm);\n        }\n        if (siblings) {\n          if (!parent) {\n            parent = dom.create('div');\n            parent.appendChild(elm);\n          }\n          Tools.each(siblings, function (sibling) {\n            var siblingElm = createElement(sibling);\n            parent.insertBefore(siblingElm, elm);\n          });\n        }\n        return wrapInHtml(parent, ancestry, parentCandidate && parentCandidate.siblings);\n      };\n      if (ancestry && ancestry.length) {\n        item = ancestry[0];\n        elm = createElement(item);\n        fragment = dom.create('div');\n        fragment.appendChild(wrapInHtml(elm, ancestry.slice(1), item.siblings));\n        return fragment;\n      } else {\n        return '';\n      }\n    };\n    var parseSelectorItem = function (item) {\n      var tagName;\n      var obj = {\n        classes: [],\n        attrs: {}\n      };\n      item = obj.selector = Tools.trim(item);\n      if (item !== '*') {\n        tagName = item.replace(/(?:([#\\.]|::?)([\\w\\-]+)|(\\[)([^\\]]+)\\]?)/g, function ($0, $1, $2, $3, $4) {\n          switch ($1) {\n          case '#':\n            obj.attrs.id = $2;\n            break;\n          case '.':\n            obj.classes.push($2);\n            break;\n          case ':':\n            if (Tools.inArray('checked disabled enabled read-only required'.split(' '), $2) !== -1) {\n              obj.attrs[$2] = $2;\n            }\n            break;\n          }\n          if ($3 === '[') {\n            var m = $4.match(/([\\w\\-]+)(?:\\=\\\"([^\\\"]+))?/);\n            if (m) {\n              obj.attrs[m[1]] = m[2];\n            }\n          }\n          return '';\n        });\n      }\n      obj.name = tagName || 'div';\n      return obj;\n    };\n    var parseSelector = function (selector) {\n      if (!selector || typeof selector !== 'string') {\n        return [];\n      }\n      selector = selector.split(/\\s*,\\s*/)[0];\n      selector = selector.replace(/\\s*(~\\+|~|\\+|>)\\s*/g, '$1');\n      return Tools.map(selector.split(/(?:>|\\s+(?![^\\[\\]]+\\]))/), function (item) {\n        var siblings = Tools.map(item.split(/(?:~\\+|~|\\+)/), parseSelectorItem);\n        var obj = siblings.pop();\n        if (siblings.length) {\n          obj.siblings = siblings;\n        }\n        return obj;\n      }).reverse();\n    };\n    var getCssText = function (editor, format) {\n      var name, previewFrag;\n      var previewCss = '', parentFontSize;\n      var previewStyles = getPreviewStyles(editor);\n      if (previewStyles === '') {\n        return '';\n      }\n      var removeVars = function (val) {\n        return val.replace(/%(\\w+)/g, '');\n      };\n      if (typeof format === 'string') {\n        format = editor.formatter.get(format);\n        if (!format) {\n          return;\n        }\n        format = format[0];\n      }\n      if ('preview' in format) {\n        var previewOpt = get$9(format, 'preview');\n        if (is$1(previewOpt, false)) {\n          return '';\n        } else {\n          previewStyles = previewOpt.getOr(previewStyles);\n        }\n      }\n      name = format.block || format.inline || 'span';\n      var items = parseSelector(format.selector);\n      if (items.length) {\n        if (!items[0].name) {\n          items[0].name = name;\n        }\n        name = format.selector;\n        previewFrag = parsedSelectorToHtml(items, editor);\n      } else {\n        previewFrag = parsedSelectorToHtml([name], editor);\n      }\n      var previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;\n      each$5(format.styles, function (value, name) {\n        var newValue = removeVars(value);\n        if (newValue) {\n          dom.setStyle(previewElm, name, newValue);\n        }\n      });\n      each$5(format.attributes, function (value, name) {\n        var newValue = removeVars(value);\n        if (newValue) {\n          dom.setAttrib(previewElm, name, newValue);\n        }\n      });\n      each$5(format.classes, function (value) {\n        var newValue = removeVars(value);\n        if (!dom.hasClass(previewElm, newValue)) {\n          dom.addClass(previewElm, newValue);\n        }\n      });\n      editor.fire('PreviewFormats');\n      dom.setStyles(previewFrag, {\n        position: 'absolute',\n        left: -65535\n      });\n      editor.getBody().appendChild(previewFrag);\n      parentFontSize = dom.getStyle(editor.getBody(), 'fontSize', true);\n      parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0;\n      each$5(previewStyles.split(' '), function (name) {\n        var value = dom.getStyle(previewElm, name, true);\n        if (name === 'background-color' && /transparent|rgba\\s*\\([^)]+,\\s*0\\)/.test(value)) {\n          value = dom.getStyle(editor.getBody(), name, true);\n          if (dom.toHex(value).toLowerCase() === '#ffffff') {\n            return;\n          }\n        }\n        if (name === 'color') {\n          if (dom.toHex(value).toLowerCase() === '#000000') {\n            return;\n          }\n        }\n        if (name === 'font-size') {\n          if (/em|%$/.test(value)) {\n            if (parentFontSize === 0) {\n              return;\n            }\n            var numValue = parseFloat(value) / (/%$/.test(value) ? 100 : 1);\n            value = numValue * parentFontSize + 'px';\n          }\n        }\n        if (name === 'border' && value) {\n          previewCss += 'padding:0 2px;';\n        }\n        previewCss += name + ':' + value + ';';\n      });\n      editor.fire('AfterPreviewFormats');\n      dom.remove(previewFrag);\n      return previewCss;\n    };\n\n    var setup$h = function (editor) {\n      editor.addShortcut('meta+b', '', 'Bold');\n      editor.addShortcut('meta+i', '', 'Italic');\n      editor.addShortcut('meta+u', '', 'Underline');\n      for (var i = 1; i <= 6; i++) {\n        editor.addShortcut('access+' + i, '', [\n          'FormatBlock',\n          false,\n          'h' + i\n        ]);\n      }\n      editor.addShortcut('access+7', '', [\n        'FormatBlock',\n        false,\n        'p'\n      ]);\n      editor.addShortcut('access+8', '', [\n        'FormatBlock',\n        false,\n        'div'\n      ]);\n      editor.addShortcut('access+9', '', [\n        'FormatBlock',\n        false,\n        'address'\n      ]);\n    };\n\n    var Formatter = function (editor) {\n      var formats = FormatRegistry(editor);\n      var formatChangeState = Cell(null);\n      setup$h(editor);\n      setup$k(editor);\n      return {\n        get: formats.get,\n        has: formats.has,\n        register: formats.register,\n        unregister: formats.unregister,\n        apply: function (name, vars, node) {\n          applyFormat(editor, name, vars, node);\n        },\n        remove: function (name, vars, node, similar) {\n          removeFormat(editor, name, vars, node, similar);\n        },\n        toggle: function (name, vars, node) {\n          toggleFormat(editor, name, vars, node);\n        },\n        match: function (name, vars, node, similar) {\n          return matchFormat(editor, name, vars, node, similar);\n        },\n        closest: function (names) {\n          return closestFormat(editor, names);\n        },\n        matchAll: function (names, vars) {\n          return matchAllFormats(editor, names, vars);\n        },\n        matchNode: function (node, name, vars, similar) {\n          return matchNodeFormat(editor, node, name, vars, similar);\n        },\n        canApply: function (name) {\n          return canApplyFormat(editor, name);\n        },\n        formatChanged: function (formats, callback, similar, vars) {\n          return formatChanged(editor, formatChangeState, formats, callback, similar, vars);\n        },\n        getCssText: curry(getCssText, editor)\n      };\n    };\n\n    var shouldIgnoreCommand = function (cmd) {\n      switch (cmd.toLowerCase()) {\n      case 'undo':\n      case 'redo':\n      case 'mcerepaint':\n      case 'mcefocus':\n        return true;\n      default:\n        return false;\n      }\n    };\n    var registerEvents = function (editor, undoManager, locks) {\n      var isFirstTypedCharacter = Cell(false);\n      var addNonTypingUndoLevel = function (e) {\n        setTyping(undoManager, false, locks);\n        undoManager.add({}, e);\n      };\n      editor.on('init', function () {\n        undoManager.add();\n      });\n      editor.on('BeforeExecCommand', function (e) {\n        var cmd = e.command;\n        if (!shouldIgnoreCommand(cmd)) {\n          endTyping(undoManager, locks);\n          undoManager.beforeChange();\n        }\n      });\n      editor.on('ExecCommand', function (e) {\n        var cmd = e.command;\n        if (!shouldIgnoreCommand(cmd)) {\n          addNonTypingUndoLevel(e);\n        }\n      });\n      editor.on('ObjectResizeStart cut', function () {\n        undoManager.beforeChange();\n      });\n      editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel);\n      editor.on('dragend', addNonTypingUndoLevel);\n      editor.on('keyup', function (e) {\n        var keyCode = e.keyCode;\n        if (e.isDefaultPrevented()) {\n          return;\n        }\n        if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45 || e.ctrlKey) {\n          addNonTypingUndoLevel();\n          editor.nodeChanged();\n        }\n        if (keyCode === 46 || keyCode === 8) {\n          editor.nodeChanged();\n        }\n        if (isFirstTypedCharacter.get() && undoManager.typing && isEq$1(createFromEditor(editor), undoManager.data[0]) === false) {\n          if (editor.isDirty() === false) {\n            editor.setDirty(true);\n            editor.fire('change', {\n              level: undoManager.data[0],\n              lastLevel: null\n            });\n          }\n          editor.fire('TypingUndo');\n          isFirstTypedCharacter.set(false);\n          editor.nodeChanged();\n        }\n      });\n      editor.on('keydown', function (e) {\n        var keyCode = e.keyCode;\n        if (e.isDefaultPrevented()) {\n          return;\n        }\n        if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45) {\n          if (undoManager.typing) {\n            addNonTypingUndoLevel(e);\n          }\n          return;\n        }\n        var modKey = e.ctrlKey && !e.altKey || e.metaKey;\n        if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !undoManager.typing && !modKey) {\n          undoManager.beforeChange();\n          setTyping(undoManager, true, locks);\n          undoManager.add({}, e);\n          isFirstTypedCharacter.set(true);\n        }\n      });\n      editor.on('mousedown', function (e) {\n        if (undoManager.typing) {\n          addNonTypingUndoLevel(e);\n        }\n      });\n      var isInsertReplacementText = function (event) {\n        return event.inputType === 'insertReplacementText';\n      };\n      var isInsertTextDataNull = function (event) {\n        return event.inputType === 'insertText' && event.data === null;\n      };\n      var isInsertFromPasteOrDrop = function (event) {\n        return event.inputType === 'insertFromPaste' || event.inputType === 'insertFromDrop';\n      };\n      editor.on('input', function (e) {\n        if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e) || isInsertFromPasteOrDrop(e))) {\n          addNonTypingUndoLevel(e);\n        }\n      });\n      editor.on('AddUndo Undo Redo ClearUndos', function (e) {\n        if (!e.isDefaultPrevented()) {\n          editor.nodeChanged();\n        }\n      });\n    };\n    var addKeyboardShortcuts = function (editor) {\n      editor.addShortcut('meta+z', '', 'Undo');\n      editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');\n    };\n\n    var UndoManager = function (editor) {\n      var beforeBookmark = value();\n      var locks = Cell(0);\n      var index = Cell(0);\n      var undoManager = {\n        data: [],\n        typing: false,\n        beforeChange: function () {\n          beforeChange(editor, locks, beforeBookmark);\n        },\n        add: function (level, event) {\n          return addUndoLevel(editor, undoManager, index, locks, beforeBookmark, level, event);\n        },\n        undo: function () {\n          return undo(editor, undoManager, locks, index);\n        },\n        redo: function () {\n          return redo(editor, index, undoManager.data);\n        },\n        clear: function () {\n          clear(editor, undoManager, index);\n        },\n        reset: function () {\n          reset(editor, undoManager);\n        },\n        hasUndo: function () {\n          return hasUndo(editor, undoManager, index);\n        },\n        hasRedo: function () {\n          return hasRedo(editor, undoManager, index);\n        },\n        transact: function (callback) {\n          return transact(editor, undoManager, locks, callback);\n        },\n        ignore: function (callback) {\n          ignore(editor, locks, callback);\n        },\n        extra: function (callback1, callback2) {\n          extra(editor, undoManager, index, callback1, callback2);\n        }\n      };\n      if (!isRtc(editor)) {\n        registerEvents(editor, undoManager, locks);\n      }\n      addKeyboardShortcuts(editor);\n      return undoManager;\n    };\n\n    var nonTypingKeycodes = [\n      9,\n      27,\n      VK.HOME,\n      VK.END,\n      19,\n      20,\n      44,\n      144,\n      145,\n      33,\n      34,\n      45,\n      16,\n      17,\n      18,\n      91,\n      92,\n      93,\n      VK.DOWN,\n      VK.UP,\n      VK.LEFT,\n      VK.RIGHT\n    ].concat(Env.browser.isFirefox() ? [224] : []);\n    var placeholderAttr = 'data-mce-placeholder';\n    var isKeyboardEvent = function (e) {\n      return e.type === 'keydown' || e.type === 'keyup';\n    };\n    var isDeleteEvent = function (e) {\n      var keyCode = e.keyCode;\n      return keyCode === VK.BACKSPACE || keyCode === VK.DELETE;\n    };\n    var isNonTypingKeyboardEvent = function (e) {\n      if (isKeyboardEvent(e)) {\n        var keyCode = e.keyCode;\n        return !isDeleteEvent(e) && (VK.metaKeyPressed(e) || e.altKey || keyCode >= 112 && keyCode <= 123 || contains$3(nonTypingKeycodes, keyCode));\n      } else {\n        return false;\n      }\n    };\n    var isTypingKeyboardEvent = function (e) {\n      return isKeyboardEvent(e) && !(isDeleteEvent(e) || e.type === 'keyup' && e.keyCode === 229);\n    };\n    var isVisuallyEmpty = function (dom, rootElm, forcedRootBlock) {\n      if (isEmpty$2(SugarElement.fromDom(rootElm), false)) {\n        var isForcedRootBlockFalse = forcedRootBlock === '';\n        var firstElement = rootElm.firstElementChild;\n        if (!firstElement) {\n          return true;\n        } else if (dom.getStyle(rootElm.firstElementChild, 'padding-left') || dom.getStyle(rootElm.firstElementChild, 'padding-right')) {\n          return false;\n        } else {\n          return isForcedRootBlockFalse ? !dom.isBlock(firstElement) : forcedRootBlock === firstElement.nodeName.toLowerCase();\n        }\n      } else {\n        return false;\n      }\n    };\n    var setup$g = function (editor) {\n      var dom = editor.dom;\n      var rootBlock = getForcedRootBlock(editor);\n      var placeholder = getPlaceholder(editor);\n      var updatePlaceholder = function (e, initial) {\n        if (isNonTypingKeyboardEvent(e)) {\n          return;\n        }\n        var body = editor.getBody();\n        var showPlaceholder = isTypingKeyboardEvent(e) ? false : isVisuallyEmpty(dom, body, rootBlock);\n        var isPlaceholderShown = dom.getAttrib(body, placeholderAttr) !== '';\n        if (isPlaceholderShown !== showPlaceholder || initial) {\n          dom.setAttrib(body, placeholderAttr, showPlaceholder ? placeholder : null);\n          dom.setAttrib(body, 'aria-placeholder', showPlaceholder ? placeholder : null);\n          firePlaceholderToggle(editor, showPlaceholder);\n          editor.on(showPlaceholder ? 'keydown' : 'keyup', updatePlaceholder);\n          editor.off(showPlaceholder ? 'keyup' : 'keydown', updatePlaceholder);\n        }\n      };\n      if (placeholder) {\n        editor.on('init', function (e) {\n          updatePlaceholder(e, true);\n          editor.on('change SetContent ExecCommand', updatePlaceholder);\n          editor.on('paste', function (e) {\n            return Delay.setEditorTimeout(editor, function () {\n              return updatePlaceholder(e);\n            });\n          });\n        });\n      }\n    };\n\n    var strongRtl = /[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/;\n    var hasStrongRtl = function (text) {\n      return strongRtl.test(text);\n    };\n\n    var isInlineTarget = function (editor, elm) {\n      return is$2(SugarElement.fromDom(elm), getInlineBoundarySelector(editor));\n    };\n    var isRtl = function (element) {\n      return DOMUtils.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl(element.textContent);\n    };\n    var findInlineParents = function (isInlineTarget, rootNode, pos) {\n      return filter$4(DOMUtils.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);\n    };\n    var findRootInline = function (isInlineTarget, rootNode, pos) {\n      var parents = findInlineParents(isInlineTarget, rootNode, pos);\n      return Optional.from(parents[parents.length - 1]);\n    };\n    var hasSameParentBlock = function (rootNode, node1, node2) {\n      var block1 = getParentBlock$2(node1, rootNode);\n      var block2 = getParentBlock$2(node2, rootNode);\n      return block1 && block1 === block2;\n    };\n    var isAtZwsp = function (pos) {\n      return isBeforeInline(pos) || isAfterInline(pos);\n    };\n    var normalizePosition = function (forward, pos) {\n      if (!pos) {\n        return pos;\n      }\n      var container = pos.container(), offset = pos.offset();\n      if (forward) {\n        if (isCaretContainerInline(container)) {\n          if (isText$7(container.nextSibling)) {\n            return CaretPosition(container.nextSibling, 0);\n          } else {\n            return CaretPosition.after(container);\n          }\n        } else {\n          return isBeforeInline(pos) ? CaretPosition(container, offset + 1) : pos;\n        }\n      } else {\n        if (isCaretContainerInline(container)) {\n          if (isText$7(container.previousSibling)) {\n            return CaretPosition(container.previousSibling, container.previousSibling.data.length);\n          } else {\n            return CaretPosition.before(container);\n          }\n        } else {\n          return isAfterInline(pos) ? CaretPosition(container, offset - 1) : pos;\n        }\n      }\n    };\n    var normalizeForwards = curry(normalizePosition, true);\n    var normalizeBackwards = curry(normalizePosition, false);\n\n    var isBeforeRoot = function (rootNode) {\n      return function (elm) {\n        return eq(rootNode, SugarElement.fromDom(elm.dom.parentNode));\n      };\n    };\n    var isTextBlockOrListItem = function (element) {\n      return isTextBlock$2(element) || isListItem(element);\n    };\n    var getParentBlock$1 = function (rootNode, elm) {\n      if (contains$1(rootNode, elm)) {\n        return closest$3(elm, isTextBlockOrListItem, isBeforeRoot(rootNode));\n      } else {\n        return Optional.none();\n      }\n    };\n    var placeCaretInEmptyBody = function (editor) {\n      var body = editor.getBody();\n      var node = body.firstChild && editor.dom.isBlock(body.firstChild) ? body.firstChild : body;\n      editor.selection.setCursorLocation(node, 0);\n    };\n    var paddEmptyBody = function (editor) {\n      if (editor.dom.isEmpty(editor.getBody())) {\n        editor.setContent('');\n        placeCaretInEmptyBody(editor);\n      }\n    };\n    var willDeleteLastPositionInElement = function (forward, fromPos, elm) {\n      return lift2(firstPositionIn(elm), lastPositionIn(elm), function (firstPos, lastPos) {\n        var normalizedFirstPos = normalizePosition(true, firstPos);\n        var normalizedLastPos = normalizePosition(false, lastPos);\n        var normalizedFromPos = normalizePosition(false, fromPos);\n        if (forward) {\n          return nextPosition(elm, normalizedFromPos).exists(function (nextPos) {\n            return nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos);\n          });\n        } else {\n          return prevPosition(elm, normalizedFromPos).exists(function (prevPos) {\n            return prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos);\n          });\n        }\n      }).getOr(true);\n    };\n\n    var blockPosition = function (block, position) {\n      return {\n        block: block,\n        position: position\n      };\n    };\n    var blockBoundary = function (from, to) {\n      return {\n        from: from,\n        to: to\n      };\n    };\n    var getBlockPosition = function (rootNode, pos) {\n      var rootElm = SugarElement.fromDom(rootNode);\n      var containerElm = SugarElement.fromDom(pos.container());\n      return getParentBlock$1(rootElm, containerElm).map(function (block) {\n        return blockPosition(block, pos);\n      });\n    };\n    var isDifferentBlocks = function (blockBoundary) {\n      return eq(blockBoundary.from.block, blockBoundary.to.block) === false;\n    };\n    var hasSameParent = function (blockBoundary) {\n      return parent(blockBoundary.from.block).bind(function (parent1) {\n        return parent(blockBoundary.to.block).filter(function (parent2) {\n          return eq(parent1, parent2);\n        });\n      }).isSome();\n    };\n    var isEditable$1 = function (blockBoundary) {\n      return isContentEditableFalse$b(blockBoundary.from.block.dom) === false && isContentEditableFalse$b(blockBoundary.to.block.dom) === false;\n    };\n    var skipLastBr = function (rootNode, forward, blockPosition) {\n      if (isBr$5(blockPosition.position.getNode()) && isEmpty$2(blockPosition.block) === false) {\n        return positionIn(false, blockPosition.block.dom).bind(function (lastPositionInBlock) {\n          if (lastPositionInBlock.isEqual(blockPosition.position)) {\n            return fromPosition(forward, rootNode, lastPositionInBlock).bind(function (to) {\n              return getBlockPosition(rootNode, to);\n            });\n          } else {\n            return Optional.some(blockPosition);\n          }\n        }).getOr(blockPosition);\n      } else {\n        return blockPosition;\n      }\n    };\n    var readFromRange = function (rootNode, forward, rng) {\n      var fromBlockPos = getBlockPosition(rootNode, CaretPosition.fromRangeStart(rng));\n      var toBlockPos = fromBlockPos.bind(function (blockPos) {\n        return fromPosition(forward, rootNode, blockPos.position).bind(function (to) {\n          return getBlockPosition(rootNode, to).map(function (blockPos) {\n            return skipLastBr(rootNode, forward, blockPos);\n          });\n        });\n      });\n      return lift2(fromBlockPos, toBlockPos, blockBoundary).filter(function (blockBoundary) {\n        return isDifferentBlocks(blockBoundary) && hasSameParent(blockBoundary) && isEditable$1(blockBoundary);\n      });\n    };\n    var read$1 = function (rootNode, forward, rng) {\n      return rng.collapsed ? readFromRange(rootNode, forward, rng) : Optional.none();\n    };\n\n    var getChildrenUntilBlockBoundary = function (block) {\n      var children$1 = children(block);\n      return findIndex$2(children$1, isBlock$2).fold(constant(children$1), function (index) {\n        return children$1.slice(0, index);\n      });\n    };\n    var extractChildren = function (block) {\n      var children = getChildrenUntilBlockBoundary(block);\n      each$k(children, remove$7);\n      return children;\n    };\n    var removeEmptyRoot = function (rootNode, block) {\n      var parents = parentsAndSelf(block, rootNode);\n      return find$3(parents.reverse(), function (element) {\n        return isEmpty$2(element);\n      }).each(remove$7);\n    };\n    var isEmptyBefore = function (el) {\n      return filter$4(prevSiblings(el), function (el) {\n        return !isEmpty$2(el);\n      }).length === 0;\n    };\n    var nestedBlockMerge = function (rootNode, fromBlock, toBlock, insertionPoint) {\n      if (isEmpty$2(toBlock)) {\n        fillWithPaddingBr(toBlock);\n        return firstPositionIn(toBlock.dom);\n      }\n      if (isEmptyBefore(insertionPoint) && isEmpty$2(fromBlock)) {\n        before$4(insertionPoint, SugarElement.fromTag('br'));\n      }\n      var position = prevPosition(toBlock.dom, CaretPosition.before(insertionPoint.dom));\n      each$k(extractChildren(fromBlock), function (child) {\n        before$4(insertionPoint, child);\n      });\n      removeEmptyRoot(rootNode, fromBlock);\n      return position;\n    };\n    var sidelongBlockMerge = function (rootNode, fromBlock, toBlock) {\n      if (isEmpty$2(toBlock)) {\n        remove$7(toBlock);\n        if (isEmpty$2(fromBlock)) {\n          fillWithPaddingBr(fromBlock);\n        }\n        return firstPositionIn(fromBlock.dom);\n      }\n      var position = lastPositionIn(toBlock.dom);\n      each$k(extractChildren(fromBlock), function (child) {\n        append$1(toBlock, child);\n      });\n      removeEmptyRoot(rootNode, fromBlock);\n      return position;\n    };\n    var findInsertionPoint = function (toBlock, block) {\n      var parentsAndSelf$1 = parentsAndSelf(block, toBlock);\n      return Optional.from(parentsAndSelf$1[parentsAndSelf$1.length - 1]);\n    };\n    var getInsertionPoint = function (fromBlock, toBlock) {\n      return contains$1(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Optional.none();\n    };\n    var trimBr = function (first, block) {\n      positionIn(first, block.dom).map(function (position) {\n        return position.getNode();\n      }).map(SugarElement.fromDom).filter(isBr$4).each(remove$7);\n    };\n    var mergeBlockInto = function (rootNode, fromBlock, toBlock) {\n      trimBr(true, fromBlock);\n      trimBr(false, toBlock);\n      return getInsertionPoint(fromBlock, toBlock).fold(curry(sidelongBlockMerge, rootNode, fromBlock, toBlock), curry(nestedBlockMerge, rootNode, fromBlock, toBlock));\n    };\n    var mergeBlocks = function (rootNode, forward, block1, block2) {\n      return forward ? mergeBlockInto(rootNode, block2, block1) : mergeBlockInto(rootNode, block1, block2);\n    };\n\n    var backspaceDelete$8 = function (editor, forward) {\n      var rootNode = SugarElement.fromDom(editor.getBody());\n      var position = read$1(rootNode.dom, forward, editor.selection.getRng()).bind(function (blockBoundary) {\n        return mergeBlocks(rootNode, forward, blockBoundary.from.block, blockBoundary.to.block);\n      });\n      position.each(function (pos) {\n        editor.selection.setRng(pos.toRange());\n      });\n      return position.isSome();\n    };\n\n    var deleteRangeMergeBlocks = function (rootNode, selection) {\n      var rng = selection.getRng();\n      return lift2(getParentBlock$1(rootNode, SugarElement.fromDom(rng.startContainer)), getParentBlock$1(rootNode, SugarElement.fromDom(rng.endContainer)), function (block1, block2) {\n        if (eq(block1, block2) === false) {\n          rng.deleteContents();\n          mergeBlocks(rootNode, true, block1, block2).each(function (pos) {\n            selection.setRng(pos.toRange());\n          });\n          return true;\n        } else {\n          return false;\n        }\n      }).getOr(false);\n    };\n    var isRawNodeInTable = function (root, rawNode) {\n      var node = SugarElement.fromDom(rawNode);\n      var isRoot = curry(eq, root);\n      return ancestor$3(node, isTableCell$4, isRoot).isSome();\n    };\n    var isSelectionInTable = function (root, rng) {\n      return isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer);\n    };\n    var isEverythingSelected = function (root, rng) {\n      var noPrevious = prevPosition(root.dom, CaretPosition.fromRangeStart(rng)).isNone();\n      var noNext = nextPosition(root.dom, CaretPosition.fromRangeEnd(rng)).isNone();\n      return !isSelectionInTable(root, rng) && noPrevious && noNext;\n    };\n    var emptyEditor = function (editor) {\n      editor.setContent('');\n      editor.selection.setCursorLocation();\n      return true;\n    };\n    var deleteRange$1 = function (editor) {\n      var rootNode = SugarElement.fromDom(editor.getBody());\n      var rng = editor.selection.getRng();\n      return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection);\n    };\n    var backspaceDelete$7 = function (editor, _forward) {\n      return editor.selection.isCollapsed() ? false : deleteRange$1(editor);\n    };\n\n    var isContentEditableTrue$2 = isContentEditableTrue$4;\n    var isContentEditableFalse$4 = isContentEditableFalse$b;\n    var showCaret = function (direction, editor, node, before, scrollIntoView) {\n      return Optional.from(editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView));\n    };\n    var getNodeRange = function (node) {\n      var rng = node.ownerDocument.createRange();\n      rng.selectNode(node);\n      return rng;\n    };\n    var selectNode = function (editor, node) {\n      var e = editor.fire('BeforeObjectSelected', { target: node });\n      if (e.isDefaultPrevented()) {\n        return Optional.none();\n      }\n      return Optional.some(getNodeRange(node));\n    };\n    var renderCaretAtRange = function (editor, range, scrollIntoView) {\n      var normalizedRange = normalizeRange(1, editor.getBody(), range);\n      var caretPosition = CaretPosition.fromRangeStart(normalizedRange);\n      var caretPositionNode = caretPosition.getNode();\n      if (isInlineFakeCaretTarget(caretPositionNode)) {\n        return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);\n      }\n      var caretPositionBeforeNode = caretPosition.getNode(true);\n      if (isInlineFakeCaretTarget(caretPositionBeforeNode)) {\n        return showCaret(1, editor, caretPositionBeforeNode, false, false);\n      }\n      var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) {\n        return isContentEditableFalse$4(node) || isContentEditableTrue$2(node);\n      });\n      if (isInlineFakeCaretTarget(ceRoot)) {\n        return showCaret(1, editor, ceRoot, false, scrollIntoView);\n      }\n      return Optional.none();\n    };\n    var renderRangeCaret = function (editor, range, scrollIntoView) {\n      return range.collapsed ? renderCaretAtRange(editor, range, scrollIntoView).getOr(range) : range;\n    };\n\n    var isBeforeBoundary = function (pos) {\n      return isBeforeContentEditableFalse(pos) || isBeforeMedia(pos);\n    };\n    var isAfterBoundary = function (pos) {\n      return isAfterContentEditableFalse(pos) || isAfterMedia(pos);\n    };\n    var trimEmptyTextNode = function (dom, node) {\n      if (isText$7(node) && node.data.length === 0) {\n        dom.remove(node);\n      }\n    };\n    var deleteContentAndShowCaret = function (editor, range, node, direction, forward, peekCaretPosition) {\n      showCaret(direction, editor, peekCaretPosition.getNode(!forward), forward, true).each(function (caretRange) {\n        if (range.collapsed) {\n          var deleteRange = range.cloneRange();\n          if (forward) {\n            deleteRange.setEnd(caretRange.startContainer, caretRange.startOffset);\n          } else {\n            deleteRange.setStart(caretRange.endContainer, caretRange.endOffset);\n          }\n          deleteRange.deleteContents();\n        } else {\n          range.deleteContents();\n        }\n        editor.selection.setRng(caretRange);\n      });\n      trimEmptyTextNode(editor.dom, node);\n      return true;\n    };\n    var deleteBoundaryText = function (editor, forward) {\n      var range = editor.selection.getRng();\n      if (!isText$7(range.commonAncestorContainer)) {\n        return false;\n      }\n      var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n      var caretWalker = CaretWalker(editor.getBody());\n      var getNextPosFn = curry(getVisualCaretPosition, forward ? caretWalker.next : caretWalker.prev);\n      var isBeforeFn = forward ? isBeforeBoundary : isAfterBoundary;\n      var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n      var nextCaretPosition = normalizePosition(forward, getNextPosFn(caretPosition));\n      if (!nextCaretPosition || !isMoveInsideSameBlock(caretPosition, nextCaretPosition)) {\n        return false;\n      } else if (isBeforeFn(nextCaretPosition)) {\n        return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, nextCaretPosition);\n      }\n      var peekCaretPosition = getNextPosFn(nextCaretPosition);\n      if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n        if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n          return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, peekCaretPosition);\n        }\n      }\n      return false;\n    };\n    var backspaceDelete$6 = function (editor, forward) {\n      return deleteBoundaryText(editor, forward);\n    };\n\n    var isCompoundElement = function (node) {\n      return isTableCell$4(SugarElement.fromDom(node)) || isListItem(SugarElement.fromDom(node));\n    };\n    var DeleteAction = Adt.generate([\n      { remove: ['element'] },\n      { moveToElement: ['element'] },\n      { moveToPosition: ['position'] }\n    ]);\n    var isAtContentEditableBlockCaret = function (forward, from) {\n      var elm = from.getNode(forward === false);\n      var caretLocation = forward ? 'after' : 'before';\n      return isElement$5(elm) && elm.getAttribute('data-mce-caret') === caretLocation;\n    };\n    var isDeleteFromCefDifferentBlocks = function (root, forward, from, to) {\n      var inSameBlock = function (elm) {\n        return isInline$1(SugarElement.fromDom(elm)) && !isInSameBlock(from, to, root);\n      };\n      return getRelativeCefElm(!forward, from).fold(function () {\n        return getRelativeCefElm(forward, to).fold(never, inSameBlock);\n      }, inSameBlock);\n    };\n    var deleteEmptyBlockOrMoveToCef = function (root, forward, from, to) {\n      var toCefElm = to.getNode(forward === false);\n      return getParentBlock$1(SugarElement.fromDom(root), SugarElement.fromDom(from.getNode())).map(function (blockElm) {\n        return isEmpty$2(blockElm) ? DeleteAction.remove(blockElm.dom) : DeleteAction.moveToElement(toCefElm);\n      }).orThunk(function () {\n        return Optional.some(DeleteAction.moveToElement(toCefElm));\n      });\n    };\n    var findCefPosition = function (root, forward, from) {\n      return fromPosition(forward, root, from).bind(function (to) {\n        if (isCompoundElement(to.getNode())) {\n          return Optional.none();\n        } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to)) {\n          return Optional.none();\n        } else if (forward && isContentEditableFalse$b(to.getNode())) {\n          return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n        } else if (forward === false && isContentEditableFalse$b(to.getNode(true))) {\n          return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n        } else if (forward && isAfterContentEditableFalse(from)) {\n          return Optional.some(DeleteAction.moveToPosition(to));\n        } else if (forward === false && isBeforeContentEditableFalse(from)) {\n          return Optional.some(DeleteAction.moveToPosition(to));\n        } else {\n          return Optional.none();\n        }\n      });\n    };\n    var getContentEditableBlockAction = function (forward, elm) {\n      if (forward && isContentEditableFalse$b(elm.nextSibling)) {\n        return Optional.some(DeleteAction.moveToElement(elm.nextSibling));\n      } else if (forward === false && isContentEditableFalse$b(elm.previousSibling)) {\n        return Optional.some(DeleteAction.moveToElement(elm.previousSibling));\n      } else {\n        return Optional.none();\n      }\n    };\n    var skipMoveToActionFromInlineCefToContent = function (root, from, deleteAction) {\n      return deleteAction.fold(function (elm) {\n        return Optional.some(DeleteAction.remove(elm));\n      }, function (elm) {\n        return Optional.some(DeleteAction.moveToElement(elm));\n      }, function (to) {\n        if (isInSameBlock(from, to, root)) {\n          return Optional.none();\n        } else {\n          return Optional.some(DeleteAction.moveToPosition(to));\n        }\n      });\n    };\n    var getContentEditableAction = function (root, forward, from) {\n      if (isAtContentEditableBlockCaret(forward, from)) {\n        return getContentEditableBlockAction(forward, from.getNode(forward === false)).fold(function () {\n          return findCefPosition(root, forward, from);\n        }, Optional.some);\n      } else {\n        return findCefPosition(root, forward, from).bind(function (deleteAction) {\n          return skipMoveToActionFromInlineCefToContent(root, from, deleteAction);\n        });\n      }\n    };\n    var read = function (root, forward, rng) {\n      var normalizedRange = normalizeRange(forward ? 1 : -1, root, rng);\n      var from = CaretPosition.fromRangeStart(normalizedRange);\n      var rootElement = SugarElement.fromDom(root);\n      if (forward === false && isAfterContentEditableFalse(from)) {\n        return Optional.some(DeleteAction.remove(from.getNode(true)));\n      } else if (forward && isBeforeContentEditableFalse(from)) {\n        return Optional.some(DeleteAction.remove(from.getNode()));\n      } else if (forward === false && isBeforeContentEditableFalse(from) && isAfterBr(rootElement, from)) {\n        return findPreviousBr(rootElement, from).map(function (br) {\n          return DeleteAction.remove(br.getNode());\n        });\n      } else if (forward && isAfterContentEditableFalse(from) && isBeforeBr$1(rootElement, from)) {\n        return findNextBr(rootElement, from).map(function (br) {\n          return DeleteAction.remove(br.getNode());\n        });\n      } else {\n        return getContentEditableAction(root, forward, from);\n      }\n    };\n\n    var deleteElement$1 = function (editor, forward) {\n      return function (element) {\n        editor._selectionOverrides.hideFakeCaret();\n        deleteElement$2(editor, forward, SugarElement.fromDom(element));\n        return true;\n      };\n    };\n    var moveToElement = function (editor, forward) {\n      return function (element) {\n        var pos = forward ? CaretPosition.before(element) : CaretPosition.after(element);\n        editor.selection.setRng(pos.toRange());\n        return true;\n      };\n    };\n    var moveToPosition = function (editor) {\n      return function (pos) {\n        editor.selection.setRng(pos.toRange());\n        return true;\n      };\n    };\n    var getAncestorCe = function (editor, node) {\n      return Optional.from(getContentEditableRoot$1(editor.getBody(), node));\n    };\n    var backspaceDeleteCaret = function (editor, forward) {\n      var selectedNode = editor.selection.getNode();\n      return getAncestorCe(editor, selectedNode).filter(isContentEditableFalse$b).fold(function () {\n        return read(editor.getBody(), forward, editor.selection.getRng()).exists(function (deleteAction) {\n          return deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor));\n        });\n      }, always);\n    };\n    var deleteOffscreenSelection = function (rootElement) {\n      each$k(descendants(rootElement, '.mce-offscreen-selection'), remove$7);\n    };\n    var backspaceDeleteRange = function (editor, forward) {\n      var selectedNode = editor.selection.getNode();\n      if (isContentEditableFalse$b(selectedNode) && !isTableCell$5(selectedNode)) {\n        var hasCefAncestor = getAncestorCe(editor, selectedNode.parentNode).filter(isContentEditableFalse$b);\n        return hasCefAncestor.fold(function () {\n          deleteOffscreenSelection(SugarElement.fromDom(editor.getBody()));\n          deleteElement$2(editor, forward, SugarElement.fromDom(editor.selection.getNode()));\n          paddEmptyBody(editor);\n          return true;\n        }, always);\n      }\n      return false;\n    };\n    var paddEmptyElement = function (editor) {\n      var dom = editor.dom, selection = editor.selection;\n      var ceRoot = getContentEditableRoot$1(editor.getBody(), selection.getNode());\n      if (isContentEditableTrue$4(ceRoot) && dom.isBlock(ceRoot) && dom.isEmpty(ceRoot)) {\n        var br = dom.create('br', { 'data-mce-bogus': '1' });\n        dom.setHTML(ceRoot, '');\n        ceRoot.appendChild(br);\n        selection.setRng(CaretPosition.before(br).toRange());\n      }\n      return true;\n    };\n    var backspaceDelete$5 = function (editor, forward) {\n      if (editor.selection.isCollapsed()) {\n        return backspaceDeleteCaret(editor, forward);\n      } else {\n        return backspaceDeleteRange(editor, forward);\n      }\n    };\n\n    var deleteCaret$2 = function (editor, forward) {\n      var fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n      return fromPosition(forward, editor.getBody(), fromPos).filter(function (pos) {\n        return forward ? isBeforeImageBlock(pos) : isAfterImageBlock(pos);\n      }).bind(function (pos) {\n        return Optional.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, pos));\n      }).exists(function (elm) {\n        editor.selection.select(elm);\n        return true;\n      });\n    };\n    var backspaceDelete$4 = function (editor, forward) {\n      return editor.selection.isCollapsed() ? deleteCaret$2(editor, forward) : false;\n    };\n\n    var isText = isText$7;\n    var startsWithCaretContainer = function (node) {\n      return isText(node) && node.data[0] === ZWSP$1;\n    };\n    var endsWithCaretContainer = function (node) {\n      return isText(node) && node.data[node.data.length - 1] === ZWSP$1;\n    };\n    var createZwsp = function (node) {\n      return node.ownerDocument.createTextNode(ZWSP$1);\n    };\n    var insertBefore = function (node) {\n      if (isText(node.previousSibling)) {\n        if (endsWithCaretContainer(node.previousSibling)) {\n          return node.previousSibling;\n        } else {\n          node.previousSibling.appendData(ZWSP$1);\n          return node.previousSibling;\n        }\n      } else if (isText(node)) {\n        if (startsWithCaretContainer(node)) {\n          return node;\n        } else {\n          node.insertData(0, ZWSP$1);\n          return node;\n        }\n      } else {\n        var newNode = createZwsp(node);\n        node.parentNode.insertBefore(newNode, node);\n        return newNode;\n      }\n    };\n    var insertAfter = function (node) {\n      if (isText(node.nextSibling)) {\n        if (startsWithCaretContainer(node.nextSibling)) {\n          return node.nextSibling;\n        } else {\n          node.nextSibling.insertData(0, ZWSP$1);\n          return node.nextSibling;\n        }\n      } else if (isText(node)) {\n        if (endsWithCaretContainer(node)) {\n          return node;\n        } else {\n          node.appendData(ZWSP$1);\n          return node;\n        }\n      } else {\n        var newNode = createZwsp(node);\n        if (node.nextSibling) {\n          node.parentNode.insertBefore(newNode, node.nextSibling);\n        } else {\n          node.parentNode.appendChild(newNode);\n        }\n        return newNode;\n      }\n    };\n    var insertInline = function (before, node) {\n      return before ? insertBefore(node) : insertAfter(node);\n    };\n    var insertInlineBefore = curry(insertInline, true);\n    var insertInlineAfter = curry(insertInline, false);\n\n    var insertInlinePos = function (pos, before) {\n      if (isText$7(pos.container())) {\n        return insertInline(before, pos.container());\n      } else {\n        return insertInline(before, pos.getNode());\n      }\n    };\n    var isPosCaretContainer = function (pos, caret) {\n      var caretNode = caret.get();\n      return caretNode && pos.container() === caretNode && isCaretContainerInline(caretNode);\n    };\n    var renderCaret = function (caret, location) {\n      return location.fold(function (element) {\n        remove$2(caret.get());\n        var text = insertInlineBefore(element);\n        caret.set(text);\n        return Optional.some(CaretPosition(text, text.length - 1));\n      }, function (element) {\n        return firstPositionIn(element).map(function (pos) {\n          if (!isPosCaretContainer(pos, caret)) {\n            remove$2(caret.get());\n            var text = insertInlinePos(pos, true);\n            caret.set(text);\n            return CaretPosition(text, 1);\n          } else {\n            return CaretPosition(caret.get(), 1);\n          }\n        });\n      }, function (element) {\n        return lastPositionIn(element).map(function (pos) {\n          if (!isPosCaretContainer(pos, caret)) {\n            remove$2(caret.get());\n            var text = insertInlinePos(pos, false);\n            caret.set(text);\n            return CaretPosition(text, text.length - 1);\n          } else {\n            return CaretPosition(caret.get(), caret.get().length - 1);\n          }\n        });\n      }, function (element) {\n        remove$2(caret.get());\n        var text = insertInlineAfter(element);\n        caret.set(text);\n        return Optional.some(CaretPosition(text, 1));\n      });\n    };\n\n    var evaluateUntil = function (fns, args) {\n      for (var i = 0; i < fns.length; i++) {\n        var result = fns[i].apply(null, args);\n        if (result.isSome()) {\n          return result;\n        }\n      }\n      return Optional.none();\n    };\n\n    var Location = Adt.generate([\n      { before: ['element'] },\n      { start: ['element'] },\n      { end: ['element'] },\n      { after: ['element'] }\n    ]);\n    var rescope$1 = function (rootNode, node) {\n      var parentBlock = getParentBlock$2(node, rootNode);\n      return parentBlock ? parentBlock : rootNode;\n    };\n    var before = function (isInlineTarget, rootNode, pos) {\n      var nPos = normalizeForwards(pos);\n      var scope = rescope$1(rootNode, nPos.container());\n      return findRootInline(isInlineTarget, scope, nPos).fold(function () {\n        return nextPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(function (inline) {\n          return Location.before(inline);\n        });\n      }, Optional.none);\n    };\n    var isNotInsideFormatCaretContainer = function (rootNode, elm) {\n      return getParentCaretContainer(rootNode, elm) === null;\n    };\n    var findInsideRootInline = function (isInlineTarget, rootNode, pos) {\n      return findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));\n    };\n    var start$1 = function (isInlineTarget, rootNode, pos) {\n      var nPos = normalizeBackwards(pos);\n      return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n        var prevPos = prevPosition(inline, nPos);\n        return prevPos.isNone() ? Optional.some(Location.start(inline)) : Optional.none();\n      });\n    };\n    var end = function (isInlineTarget, rootNode, pos) {\n      var nPos = normalizeForwards(pos);\n      return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n        var nextPos = nextPosition(inline, nPos);\n        return nextPos.isNone() ? Optional.some(Location.end(inline)) : Optional.none();\n      });\n    };\n    var after = function (isInlineTarget, rootNode, pos) {\n      var nPos = normalizeBackwards(pos);\n      var scope = rescope$1(rootNode, nPos.container());\n      return findRootInline(isInlineTarget, scope, nPos).fold(function () {\n        return prevPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(function (inline) {\n          return Location.after(inline);\n        });\n      }, Optional.none);\n    };\n    var isValidLocation = function (location) {\n      return isRtl(getElement(location)) === false;\n    };\n    var readLocation = function (isInlineTarget, rootNode, pos) {\n      var location = evaluateUntil([\n        before,\n        start$1,\n        end,\n        after\n      ], [\n        isInlineTarget,\n        rootNode,\n        pos\n      ]);\n      return location.filter(isValidLocation);\n    };\n    var getElement = function (location) {\n      return location.fold(identity, identity, identity, identity);\n    };\n    var getName = function (location) {\n      return location.fold(constant('before'), constant('start'), constant('end'), constant('after'));\n    };\n    var outside = function (location) {\n      return location.fold(Location.before, Location.before, Location.after, Location.after);\n    };\n    var inside = function (location) {\n      return location.fold(Location.start, Location.start, Location.end, Location.end);\n    };\n    var isEq = function (location1, location2) {\n      return getName(location1) === getName(location2) && getElement(location1) === getElement(location2);\n    };\n    var betweenInlines = function (forward, isInlineTarget, rootNode, from, to, location) {\n      return lift2(findRootInline(isInlineTarget, rootNode, from), findRootInline(isInlineTarget, rootNode, to), function (fromInline, toInline) {\n        if (fromInline !== toInline && hasSameParentBlock(rootNode, fromInline, toInline)) {\n          return Location.after(forward ? fromInline : toInline);\n        } else {\n          return location;\n        }\n      }).getOr(location);\n    };\n    var skipNoMovement = function (fromLocation, toLocation) {\n      return fromLocation.fold(always, function (fromLocation) {\n        return !isEq(fromLocation, toLocation);\n      });\n    };\n    var findLocationTraverse = function (forward, isInlineTarget, rootNode, fromLocation, pos) {\n      var from = normalizePosition(forward, pos);\n      var to = fromPosition(forward, rootNode, from).map(curry(normalizePosition, forward));\n      var location = to.fold(function () {\n        return fromLocation.map(outside);\n      }, function (to) {\n        return readLocation(isInlineTarget, rootNode, to).map(curry(betweenInlines, forward, isInlineTarget, rootNode, from, to)).filter(curry(skipNoMovement, fromLocation));\n      });\n      return location.filter(isValidLocation);\n    };\n    var findLocationSimple = function (forward, location) {\n      if (forward) {\n        return location.fold(compose(Optional.some, Location.start), Optional.none, compose(Optional.some, Location.after), Optional.none);\n      } else {\n        return location.fold(Optional.none, compose(Optional.some, Location.before), Optional.none, compose(Optional.some, Location.end));\n      }\n    };\n    var findLocation$1 = function (forward, isInlineTarget, rootNode, pos) {\n      var from = normalizePosition(forward, pos);\n      var fromLocation = readLocation(isInlineTarget, rootNode, from);\n      return readLocation(isInlineTarget, rootNode, from).bind(curry(findLocationSimple, forward)).orThunk(function () {\n        return findLocationTraverse(forward, isInlineTarget, rootNode, fromLocation, pos);\n      });\n    };\n    curry(findLocation$1, false);\n    curry(findLocation$1, true);\n\n    var hasSelectionModifyApi = function (editor) {\n      return isFunction(editor.selection.getSel().modify);\n    };\n    var moveRel = function (forward, selection, pos) {\n      var delta = forward ? 1 : -1;\n      selection.setRng(CaretPosition(pos.container(), pos.offset() + delta).toRange());\n      selection.getSel().modify('move', forward ? 'forward' : 'backward', 'word');\n      return true;\n    };\n    var moveByWord = function (forward, editor) {\n      var rng = editor.selection.getRng();\n      var pos = forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n      if (!hasSelectionModifyApi(editor)) {\n        return false;\n      } else if (forward && isBeforeInline(pos)) {\n        return moveRel(true, editor.selection, pos);\n      } else if (!forward && isAfterInline(pos)) {\n        return moveRel(false, editor.selection, pos);\n      } else {\n        return false;\n      }\n    };\n\n    var BreakType;\n    (function (BreakType) {\n      BreakType[BreakType['Br'] = 0] = 'Br';\n      BreakType[BreakType['Block'] = 1] = 'Block';\n      BreakType[BreakType['Wrap'] = 2] = 'Wrap';\n      BreakType[BreakType['Eol'] = 3] = 'Eol';\n    }(BreakType || (BreakType = {})));\n    var flip = function (direction, positions) {\n      return direction === HDirection.Backwards ? reverse(positions) : positions;\n    };\n    var walk = function (direction, caretWalker, pos) {\n      return direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos);\n    };\n    var getBreakType = function (scope, direction, currentPos, nextPos) {\n      if (isBr$5(nextPos.getNode(direction === HDirection.Forwards))) {\n        return BreakType.Br;\n      } else if (isInSameBlock(currentPos, nextPos) === false) {\n        return BreakType.Block;\n      } else {\n        return BreakType.Wrap;\n      }\n    };\n    var getPositionsUntil = function (predicate, direction, scope, start) {\n      var caretWalker = CaretWalker(scope);\n      var currentPos = start;\n      var positions = [];\n      while (currentPos) {\n        var nextPos = walk(direction, caretWalker, currentPos);\n        if (!nextPos) {\n          break;\n        }\n        if (isBr$5(nextPos.getNode(false))) {\n          if (direction === HDirection.Forwards) {\n            return {\n              positions: flip(direction, positions).concat([nextPos]),\n              breakType: BreakType.Br,\n              breakAt: Optional.some(nextPos)\n            };\n          } else {\n            return {\n              positions: flip(direction, positions),\n              breakType: BreakType.Br,\n              breakAt: Optional.some(nextPos)\n            };\n          }\n        }\n        if (!nextPos.isVisible()) {\n          currentPos = nextPos;\n          continue;\n        }\n        if (predicate(currentPos, nextPos)) {\n          var breakType = getBreakType(scope, direction, currentPos, nextPos);\n          return {\n            positions: flip(direction, positions),\n            breakType: breakType,\n            breakAt: Optional.some(nextPos)\n          };\n        }\n        positions.push(nextPos);\n        currentPos = nextPos;\n      }\n      return {\n        positions: flip(direction, positions),\n        breakType: BreakType.Eol,\n        breakAt: Optional.none()\n      };\n    };\n    var getAdjacentLinePositions = function (direction, getPositionsUntilBreak, scope, start) {\n      return getPositionsUntilBreak(scope, start).breakAt.map(function (pos) {\n        var positions = getPositionsUntilBreak(scope, pos).positions;\n        return direction === HDirection.Backwards ? positions.concat(pos) : [pos].concat(positions);\n      }).getOr([]);\n    };\n    var findClosestHorizontalPositionFromPoint = function (positions, x) {\n      return foldl(positions, function (acc, newPos) {\n        return acc.fold(function () {\n          return Optional.some(newPos);\n        }, function (lastPos) {\n          return lift2(head(lastPos.getClientRects()), head(newPos.getClientRects()), function (lastRect, newRect) {\n            var lastDist = Math.abs(x - lastRect.left);\n            var newDist = Math.abs(x - newRect.left);\n            return newDist <= lastDist ? newPos : lastPos;\n          }).or(acc);\n        });\n      }, Optional.none());\n    };\n    var findClosestHorizontalPosition = function (positions, pos) {\n      return head(pos.getClientRects()).bind(function (targetRect) {\n        return findClosestHorizontalPositionFromPoint(positions, targetRect.left);\n      });\n    };\n    var getPositionsUntilPreviousLine = curry(getPositionsUntil, CaretPosition.isAbove, -1);\n    var getPositionsUntilNextLine = curry(getPositionsUntil, CaretPosition.isBelow, 1);\n    var getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine);\n    var getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine);\n    var isAtFirstLine = function (scope, pos) {\n      return getPositionsUntilPreviousLine(scope, pos).breakAt.isNone();\n    };\n    var isAtLastLine = function (scope, pos) {\n      return getPositionsUntilNextLine(scope, pos).breakAt.isNone();\n    };\n    var getFirstLinePositions = function (scope) {\n      return firstPositionIn(scope).map(function (pos) {\n        return [pos].concat(getPositionsUntilNextLine(scope, pos).positions);\n      }).getOr([]);\n    };\n    var getLastLinePositions = function (scope) {\n      return lastPositionIn(scope).map(function (pos) {\n        return getPositionsUntilPreviousLine(scope, pos).positions.concat(pos);\n      }).getOr([]);\n    };\n\n    var getNodeClientRects = function (node) {\n      var toArrayWithNode = function (clientRects) {\n        return map$3(clientRects, function (rect) {\n          var clientRect = clone(rect);\n          clientRect.node = node;\n          return clientRect;\n        });\n      };\n      if (isElement$5(node)) {\n        return toArrayWithNode(node.getClientRects());\n      }\n      if (isText$7(node)) {\n        var rng = node.ownerDocument.createRange();\n        rng.setStart(node, 0);\n        rng.setEnd(node, node.data.length);\n        return toArrayWithNode(rng.getClientRects());\n      }\n    };\n    var getClientRects = function (nodes) {\n      return bind(nodes, getNodeClientRects);\n    };\n\n    var VDirection;\n    (function (VDirection) {\n      VDirection[VDirection['Up'] = -1] = 'Up';\n      VDirection[VDirection['Down'] = 1] = 'Down';\n    }(VDirection || (VDirection = {})));\n    var findUntil = function (direction, root, predicateFn, node) {\n      while (node = findNode$1(node, direction, isEditableCaretCandidate$1, root)) {\n        if (predicateFn(node)) {\n          return;\n        }\n      }\n    };\n    var walkUntil$1 = function (direction, isAboveFn, isBeflowFn, root, predicateFn, caretPosition) {\n      var line = 0;\n      var result = [];\n      var add = function (node) {\n        var clientRects = getClientRects([node]);\n        if (direction === -1) {\n          clientRects = clientRects.reverse();\n        }\n        for (var i = 0; i < clientRects.length; i++) {\n          var clientRect = clientRects[i];\n          if (isBeflowFn(clientRect, targetClientRect)) {\n            continue;\n          }\n          if (result.length > 0 && isAboveFn(clientRect, last$1(result))) {\n            line++;\n          }\n          clientRect.line = line;\n          if (predicateFn(clientRect)) {\n            return true;\n          }\n          result.push(clientRect);\n        }\n      };\n      var targetClientRect = last$1(caretPosition.getClientRects());\n      if (!targetClientRect) {\n        return result;\n      }\n      var node = caretPosition.getNode();\n      add(node);\n      findUntil(direction, root, add, node);\n      return result;\n    };\n    var aboveLineNumber = function (lineNumber, clientRect) {\n      return clientRect.line > lineNumber;\n    };\n    var isLineNumber = function (lineNumber, clientRect) {\n      return clientRect.line === lineNumber;\n    };\n    var upUntil = curry(walkUntil$1, VDirection.Up, isAbove$1, isBelow$1);\n    var downUntil = curry(walkUntil$1, VDirection.Down, isBelow$1, isAbove$1);\n    var positionsUntil = function (direction, root, predicateFn, node) {\n      var caretWalker = CaretWalker(root);\n      var walkFn;\n      var isBelowFn;\n      var isAboveFn;\n      var caretPosition;\n      var result = [];\n      var line = 0;\n      var getClientRect = function (caretPosition) {\n        if (direction === 1) {\n          return last$1(caretPosition.getClientRects());\n        }\n        return last$1(caretPosition.getClientRects());\n      };\n      if (direction === 1) {\n        walkFn = caretWalker.next;\n        isBelowFn = isBelow$1;\n        isAboveFn = isAbove$1;\n        caretPosition = CaretPosition.after(node);\n      } else {\n        walkFn = caretWalker.prev;\n        isBelowFn = isAbove$1;\n        isAboveFn = isBelow$1;\n        caretPosition = CaretPosition.before(node);\n      }\n      var targetClientRect = getClientRect(caretPosition);\n      do {\n        if (!caretPosition.isVisible()) {\n          continue;\n        }\n        var rect = getClientRect(caretPosition);\n        if (isAboveFn(rect, targetClientRect)) {\n          continue;\n        }\n        if (result.length > 0 && isBelowFn(rect, last$1(result))) {\n          line++;\n        }\n        var clientRect = clone(rect);\n        clientRect.position = caretPosition;\n        clientRect.line = line;\n        if (predicateFn(clientRect)) {\n          return result;\n        }\n        result.push(clientRect);\n      } while (caretPosition = walkFn(caretPosition));\n      return result;\n    };\n    var isAboveLine = function (lineNumber) {\n      return function (clientRect) {\n        return aboveLineNumber(lineNumber, clientRect);\n      };\n    };\n    var isLine = function (lineNumber) {\n      return function (clientRect) {\n        return isLineNumber(lineNumber, clientRect);\n      };\n    };\n\n    var isContentEditableFalse$3 = isContentEditableFalse$b;\n    var findNode = findNode$1;\n    var distanceToRectLeft = function (clientRect, clientX) {\n      return Math.abs(clientRect.left - clientX);\n    };\n    var distanceToRectRight = function (clientRect, clientX) {\n      return Math.abs(clientRect.right - clientX);\n    };\n    var isInsideX = function (clientX, clientRect) {\n      return clientX >= clientRect.left && clientX <= clientRect.right;\n    };\n    var isInsideY = function (clientY, clientRect) {\n      return clientY >= clientRect.top && clientY <= clientRect.bottom;\n    };\n    var isNodeClientRect = function (rect) {\n      return hasNonNullableKey(rect, 'node');\n    };\n    var findClosestClientRect = function (clientRects, clientX, allowInside) {\n      if (allowInside === void 0) {\n        allowInside = always;\n      }\n      return reduce(clientRects, function (oldClientRect, clientRect) {\n        if (isInsideX(clientX, clientRect)) {\n          return allowInside(clientRect) ? clientRect : oldClientRect;\n        }\n        if (isInsideX(clientX, oldClientRect)) {\n          return allowInside(oldClientRect) ? oldClientRect : clientRect;\n        }\n        var oldDistance = Math.min(distanceToRectLeft(oldClientRect, clientX), distanceToRectRight(oldClientRect, clientX));\n        var newDistance = Math.min(distanceToRectLeft(clientRect, clientX), distanceToRectRight(clientRect, clientX));\n        if (newDistance === oldDistance && isNodeClientRect(clientRect) && isContentEditableFalse$3(clientRect.node)) {\n          return clientRect;\n        }\n        if (newDistance < oldDistance) {\n          return clientRect;\n        }\n        return oldClientRect;\n      });\n    };\n    var walkUntil = function (direction, root, predicateFn, startNode, includeChildren) {\n      var node = findNode(startNode, direction, isEditableCaretCandidate$1, root, !includeChildren);\n      do {\n        if (!node || predicateFn(node)) {\n          return;\n        }\n      } while (node = findNode(node, direction, isEditableCaretCandidate$1, root));\n    };\n    var findLineNodeRects = function (root, targetNodeRect, includeChildren) {\n      if (includeChildren === void 0) {\n        includeChildren = true;\n      }\n      var clientRects = [];\n      var collect = function (checkPosFn, node) {\n        var lineRects = filter$4(getClientRects([node]), function (clientRect) {\n          return !checkPosFn(clientRect, targetNodeRect);\n        });\n        clientRects = clientRects.concat(lineRects);\n        return lineRects.length === 0;\n      };\n      clientRects.push(targetNodeRect);\n      walkUntil(VDirection.Up, root, curry(collect, isAbove$1), targetNodeRect.node, includeChildren);\n      walkUntil(VDirection.Down, root, curry(collect, isBelow$1), targetNodeRect.node, includeChildren);\n      return clientRects;\n    };\n    var getFakeCaretTargets = function (root) {\n      return filter$4(from(root.getElementsByTagName('*')), isFakeCaretTarget);\n    };\n    var caretInfo = function (clientRect, clientX) {\n      return {\n        node: clientRect.node,\n        before: distanceToRectLeft(clientRect, clientX) < distanceToRectRight(clientRect, clientX)\n      };\n    };\n    var closestFakeCaret = function (root, clientX, clientY) {\n      var fakeTargetNodeRects = getClientRects(getFakeCaretTargets(root));\n      var targetNodeRects = filter$4(fakeTargetNodeRects, curry(isInsideY, clientY));\n      var checkInside = function (clientRect) {\n        return !isTable$3(clientRect.node) && !isMedia$2(clientRect.node);\n      };\n      var closestNodeRect = findClosestClientRect(targetNodeRects, clientX, checkInside);\n      if (closestNodeRect) {\n        var includeChildren = checkInside(closestNodeRect);\n        closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect, includeChildren), clientX, checkInside);\n        if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) {\n          return caretInfo(closestNodeRect, clientX);\n        }\n      }\n      return null;\n    };\n\n    var moveToRange = function (editor, rng) {\n      editor.selection.setRng(rng);\n      scrollRangeIntoView(editor, editor.selection.getRng());\n    };\n    var renderRangeCaretOpt = function (editor, range, scrollIntoView) {\n      return Optional.some(renderRangeCaret(editor, range, scrollIntoView));\n    };\n    var moveHorizontally = function (editor, direction, range, isBefore, isAfter, isElement) {\n      var forwards = direction === HDirection.Forwards;\n      var caretWalker = CaretWalker(editor.getBody());\n      var getNextPosFn = curry(getVisualCaretPosition, forwards ? caretWalker.next : caretWalker.prev);\n      var isBeforeFn = forwards ? isBefore : isAfter;\n      if (!range.collapsed) {\n        var node = getSelectedNode(range);\n        if (isElement(node)) {\n          return showCaret(direction, editor, node, direction === HDirection.Backwards, false);\n        }\n      }\n      var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n      if (isBeforeFn(caretPosition)) {\n        return selectNode(editor, caretPosition.getNode(!forwards));\n      }\n      var nextCaretPosition = normalizePosition(forwards, getNextPosFn(caretPosition));\n      var rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);\n      if (!nextCaretPosition) {\n        return rangeIsInContainerBlock ? Optional.some(range) : Optional.none();\n      }\n      if (isBeforeFn(nextCaretPosition)) {\n        return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, false);\n      }\n      var peekCaretPosition = getNextPosFn(nextCaretPosition);\n      if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n        if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n          return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, false);\n        }\n      }\n      if (rangeIsInContainerBlock) {\n        return renderRangeCaretOpt(editor, nextCaretPosition.toRange(), false);\n      }\n      return Optional.none();\n    };\n    var moveVertically = function (editor, direction, range, isBefore, isAfter, isElement) {\n      var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n      var caretClientRect = last$1(caretPosition.getClientRects());\n      var forwards = direction === VDirection.Down;\n      if (!caretClientRect) {\n        return Optional.none();\n      }\n      var walkerFn = forwards ? downUntil : upUntil;\n      var linePositions = walkerFn(editor.getBody(), isAboveLine(1), caretPosition);\n      var nextLinePositions = filter$4(linePositions, isLine(1));\n      var clientX = caretClientRect.left;\n      var nextLineRect = findClosestClientRect(nextLinePositions, clientX);\n      if (nextLineRect && isElement(nextLineRect.node)) {\n        var dist1 = Math.abs(clientX - nextLineRect.left);\n        var dist2 = Math.abs(clientX - nextLineRect.right);\n        return showCaret(direction, editor, nextLineRect.node, dist1 < dist2, false);\n      }\n      var currentNode;\n      if (isBefore(caretPosition)) {\n        currentNode = caretPosition.getNode();\n      } else if (isAfter(caretPosition)) {\n        currentNode = caretPosition.getNode(true);\n      } else {\n        currentNode = getSelectedNode(range);\n      }\n      if (currentNode) {\n        var caretPositions = positionsUntil(direction, editor.getBody(), isAboveLine(1), currentNode);\n        var closestNextLineRect = findClosestClientRect(filter$4(caretPositions, isLine(1)), clientX);\n        if (closestNextLineRect) {\n          return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false);\n        }\n        closestNextLineRect = last$1(filter$4(caretPositions, isLine(0)));\n        if (closestNextLineRect) {\n          return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false);\n        }\n      }\n      if (nextLinePositions.length === 0) {\n        return getLineEndPoint(editor, forwards).filter(forwards ? isAfter : isBefore).map(function (pos) {\n          return renderRangeCaret(editor, pos.toRange(), false);\n        });\n      }\n      return Optional.none();\n    };\n    var getLineEndPoint = function (editor, forward) {\n      var rng = editor.selection.getRng();\n      var body = editor.getBody();\n      if (forward) {\n        var from = CaretPosition.fromRangeEnd(rng);\n        var result = getPositionsUntilNextLine(body, from);\n        return last$2(result.positions);\n      } else {\n        var from = CaretPosition.fromRangeStart(rng);\n        var result = getPositionsUntilPreviousLine(body, from);\n        return head(result.positions);\n      }\n    };\n    var moveToLineEndPoint$3 = function (editor, forward, isElementPosition) {\n      return getLineEndPoint(editor, forward).filter(isElementPosition).exists(function (pos) {\n        editor.selection.setRng(pos.toRange());\n        return true;\n      });\n    };\n\n    var setCaretPosition = function (editor, pos) {\n      var rng = editor.dom.createRng();\n      rng.setStart(pos.container(), pos.offset());\n      rng.setEnd(pos.container(), pos.offset());\n      editor.selection.setRng(rng);\n    };\n    var setSelected = function (state, elm) {\n      if (state) {\n        elm.setAttribute('data-mce-selected', 'inline-boundary');\n      } else {\n        elm.removeAttribute('data-mce-selected');\n      }\n    };\n    var renderCaretLocation = function (editor, caret, location) {\n      return renderCaret(caret, location).map(function (pos) {\n        setCaretPosition(editor, pos);\n        return location;\n      });\n    };\n    var findLocation = function (editor, caret, forward) {\n      var rootNode = editor.getBody();\n      var from = CaretPosition.fromRangeStart(editor.selection.getRng());\n      var isInlineTarget$1 = curry(isInlineTarget, editor);\n      var location = findLocation$1(forward, isInlineTarget$1, rootNode, from);\n      return location.bind(function (location) {\n        return renderCaretLocation(editor, caret, location);\n      });\n    };\n    var toggleInlines = function (isInlineTarget, dom, elms) {\n      var inlineBoundaries = map$3(descendants(SugarElement.fromDom(dom.getRoot()), '*[data-mce-selected=\"inline-boundary\"]'), function (e) {\n        return e.dom;\n      });\n      var selectedInlines = filter$4(inlineBoundaries, isInlineTarget);\n      var targetInlines = filter$4(elms, isInlineTarget);\n      each$k(difference(selectedInlines, targetInlines), curry(setSelected, false));\n      each$k(difference(targetInlines, selectedInlines), curry(setSelected, true));\n    };\n    var safeRemoveCaretContainer = function (editor, caret) {\n      if (editor.selection.isCollapsed() && editor.composing !== true && caret.get()) {\n        var pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n        if (CaretPosition.isTextPosition(pos) && isAtZwsp(pos) === false) {\n          setCaretPosition(editor, removeAndReposition(caret.get(), pos));\n          caret.set(null);\n        }\n      }\n    };\n    var renderInsideInlineCaret = function (isInlineTarget, editor, caret, elms) {\n      if (editor.selection.isCollapsed()) {\n        var inlines = filter$4(elms, isInlineTarget);\n        each$k(inlines, function (_inline) {\n          var pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n          readLocation(isInlineTarget, editor.getBody(), pos).bind(function (location) {\n            return renderCaretLocation(editor, caret, location);\n          });\n        });\n      }\n    };\n    var move$2 = function (editor, caret, forward) {\n      return isInlineBoundariesEnabled(editor) ? findLocation(editor, caret, forward).isSome() : false;\n    };\n    var moveWord = function (forward, editor, _caret) {\n      return isInlineBoundariesEnabled(editor) ? moveByWord(forward, editor) : false;\n    };\n    var setupSelectedState = function (editor) {\n      var caret = Cell(null);\n      var isInlineTarget$1 = curry(isInlineTarget, editor);\n      editor.on('NodeChange', function (e) {\n        if (isInlineBoundariesEnabled(editor) && !(Env.browser.isIE() && e.initial)) {\n          toggleInlines(isInlineTarget$1, editor.dom, e.parents);\n          safeRemoveCaretContainer(editor, caret);\n          renderInsideInlineCaret(isInlineTarget$1, editor, caret, e.parents);\n        }\n      });\n      return caret;\n    };\n    var moveNextWord = curry(moveWord, true);\n    var movePrevWord = curry(moveWord, false);\n    var moveToLineEndPoint$2 = function (editor, forward, caret) {\n      if (isInlineBoundariesEnabled(editor)) {\n        var linePoint = getLineEndPoint(editor, forward).getOrThunk(function () {\n          var rng = editor.selection.getRng();\n          return forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n        });\n        return readLocation(curry(isInlineTarget, editor), editor.getBody(), linePoint).exists(function (loc) {\n          var outsideLoc = outside(loc);\n          return renderCaret(caret, outsideLoc).exists(function (pos) {\n            setCaretPosition(editor, pos);\n            return true;\n          });\n        });\n      } else {\n        return false;\n      }\n    };\n\n    var rangeFromPositions = function (from, to) {\n      var range = document.createRange();\n      range.setStart(from.container(), from.offset());\n      range.setEnd(to.container(), to.offset());\n      return range;\n    };\n    var hasOnlyTwoOrLessPositionsLeft = function (elm) {\n      return lift2(firstPositionIn(elm), lastPositionIn(elm), function (firstPos, lastPos) {\n        var normalizedFirstPos = normalizePosition(true, firstPos);\n        var normalizedLastPos = normalizePosition(false, lastPos);\n        return nextPosition(elm, normalizedFirstPos).forall(function (pos) {\n          return pos.isEqual(normalizedLastPos);\n        });\n      }).getOr(true);\n    };\n    var setCaretLocation = function (editor, caret) {\n      return function (location) {\n        return renderCaret(caret, location).exists(function (pos) {\n          setCaretPosition(editor, pos);\n          return true;\n        });\n      };\n    };\n    var deleteFromTo = function (editor, caret, from, to) {\n      var rootNode = editor.getBody();\n      var isInlineTarget$1 = curry(isInlineTarget, editor);\n      editor.undoManager.ignore(function () {\n        editor.selection.setRng(rangeFromPositions(from, to));\n        editor.execCommand('Delete');\n        readLocation(isInlineTarget$1, rootNode, CaretPosition.fromRangeStart(editor.selection.getRng())).map(inside).map(setCaretLocation(editor, caret));\n      });\n      editor.nodeChanged();\n    };\n    var rescope = function (rootNode, node) {\n      var parentBlock = getParentBlock$2(node, rootNode);\n      return parentBlock ? parentBlock : rootNode;\n    };\n    var backspaceDeleteCollapsed = function (editor, caret, forward, from) {\n      var rootNode = rescope(editor.getBody(), from.container());\n      var isInlineTarget$1 = curry(isInlineTarget, editor);\n      var fromLocation = readLocation(isInlineTarget$1, rootNode, from);\n      return fromLocation.bind(function (location) {\n        if (forward) {\n          return location.fold(constant(Optional.some(inside(location))), Optional.none, constant(Optional.some(outside(location))), Optional.none);\n        } else {\n          return location.fold(Optional.none, constant(Optional.some(outside(location))), Optional.none, constant(Optional.some(inside(location))));\n        }\n      }).map(setCaretLocation(editor, caret)).getOrThunk(function () {\n        var toPosition = navigate(forward, rootNode, from);\n        var toLocation = toPosition.bind(function (pos) {\n          return readLocation(isInlineTarget$1, rootNode, pos);\n        });\n        return lift2(fromLocation, toLocation, function () {\n          return findRootInline(isInlineTarget$1, rootNode, from).exists(function (elm) {\n            if (hasOnlyTwoOrLessPositionsLeft(elm)) {\n              deleteElement$2(editor, forward, SugarElement.fromDom(elm));\n              return true;\n            } else {\n              return false;\n            }\n          });\n        }).orThunk(function () {\n          return toLocation.bind(function (_) {\n            return toPosition.map(function (to) {\n              if (forward) {\n                deleteFromTo(editor, caret, from, to);\n              } else {\n                deleteFromTo(editor, caret, to, from);\n              }\n              return true;\n            });\n          });\n        }).getOr(false);\n      });\n    };\n    var backspaceDelete$3 = function (editor, caret, forward) {\n      if (editor.selection.isCollapsed() && isInlineBoundariesEnabled(editor)) {\n        var from = CaretPosition.fromRangeStart(editor.selection.getRng());\n        return backspaceDeleteCollapsed(editor, caret, forward, from);\n      }\n      return false;\n    };\n\n    var getParentInlines = function (rootElm, startElm) {\n      var parents = parentsAndSelf(startElm, rootElm);\n      return findIndex$2(parents, isBlock$2).fold(constant(parents), function (index) {\n        return parents.slice(0, index);\n      });\n    };\n    var hasOnlyOneChild = function (elm) {\n      return childNodesCount(elm) === 1;\n    };\n    var deleteLastPosition = function (forward, editor, target, parentInlines) {\n      var isFormatElement$1 = curry(isFormatElement, editor);\n      var formatNodes = map$3(filter$4(parentInlines, isFormatElement$1), function (elm) {\n        return elm.dom;\n      });\n      if (formatNodes.length === 0) {\n        deleteElement$2(editor, forward, target);\n      } else {\n        var pos = replaceWithCaretFormat(target.dom, formatNodes);\n        editor.selection.setRng(pos.toRange());\n      }\n    };\n    var deleteCaret$1 = function (editor, forward) {\n      var rootElm = SugarElement.fromDom(editor.getBody());\n      var startElm = SugarElement.fromDom(editor.selection.getStart());\n      var parentInlines = filter$4(getParentInlines(rootElm, startElm), hasOnlyOneChild);\n      return last$2(parentInlines).exists(function (target) {\n        var fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n        if (willDeleteLastPositionInElement(forward, fromPos, target.dom) && !isEmptyCaretFormatElement(target)) {\n          deleteLastPosition(forward, editor, target, parentInlines);\n          return true;\n        } else {\n          return false;\n        }\n      });\n    };\n    var backspaceDelete$2 = function (editor, forward) {\n      return editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : false;\n    };\n\n    var deleteElement = function (editor, forward, element) {\n      editor._selectionOverrides.hideFakeCaret();\n      deleteElement$2(editor, forward, SugarElement.fromDom(element));\n      return true;\n    };\n    var deleteCaret = function (editor, forward) {\n      var isNearMedia = forward ? isBeforeMedia : isAfterMedia;\n      var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n      var fromPos = getNormalizedRangeEndPoint(direction, editor.getBody(), editor.selection.getRng());\n      if (isNearMedia(fromPos)) {\n        return deleteElement(editor, forward, fromPos.getNode(!forward));\n      } else {\n        return Optional.from(normalizePosition(forward, fromPos)).filter(function (pos) {\n          return isNearMedia(pos) && isMoveInsideSameBlock(fromPos, pos);\n        }).exists(function (pos) {\n          return deleteElement(editor, forward, pos.getNode(!forward));\n        });\n      }\n    };\n    var deleteRange = function (editor, forward) {\n      var selectedNode = editor.selection.getNode();\n      return isMedia$2(selectedNode) ? deleteElement(editor, forward, selectedNode) : false;\n    };\n    var backspaceDelete$1 = function (editor, forward) {\n      return editor.selection.isCollapsed() ? deleteCaret(editor, forward) : deleteRange(editor, forward);\n    };\n\n    var isEditable = function (target) {\n      return closest$3(target, function (elm) {\n        return isContentEditableTrue$4(elm.dom) || isContentEditableFalse$b(elm.dom);\n      }).exists(function (elm) {\n        return isContentEditableTrue$4(elm.dom);\n      });\n    };\n    var parseIndentValue = function (value) {\n      var number = parseInt(value, 10);\n      return isNaN(number) ? 0 : number;\n    };\n    var getIndentStyleName = function (useMargin, element) {\n      var indentStyleName = useMargin || isTable$2(element) ? 'margin' : 'padding';\n      var suffix = get$5(element, 'direction') === 'rtl' ? '-right' : '-left';\n      return indentStyleName + suffix;\n    };\n    var indentElement = function (dom, command, useMargin, value, unit, element) {\n      var indentStyleName = getIndentStyleName(useMargin, SugarElement.fromDom(element));\n      if (command === 'outdent') {\n        var styleValue = Math.max(0, parseIndentValue(element.style[indentStyleName]) - value);\n        dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : '');\n      } else {\n        var styleValue = parseIndentValue(element.style[indentStyleName]) + value + unit;\n        dom.setStyle(element, indentStyleName, styleValue);\n      }\n    };\n    var validateBlocks = function (editor, blocks) {\n      return forall(blocks, function (block) {\n        var indentStyleName = getIndentStyleName(shouldIndentUseMargin(editor), block);\n        var intentValue = getRaw(block, indentStyleName).map(parseIndentValue).getOr(0);\n        var contentEditable = editor.dom.getContentEditable(block.dom);\n        return contentEditable !== 'false' && intentValue > 0;\n      });\n    };\n    var canOutdent = function (editor) {\n      var blocks = getBlocksToIndent(editor);\n      return !editor.mode.isReadOnly() && (blocks.length > 1 || validateBlocks(editor, blocks));\n    };\n    var isListComponent = function (el) {\n      return isList(el) || isListItem(el);\n    };\n    var parentIsListComponent = function (el) {\n      return parent(el).exists(isListComponent);\n    };\n    var getBlocksToIndent = function (editor) {\n      return filter$4(fromDom$1(editor.selection.getSelectedBlocks()), function (el) {\n        return !isListComponent(el) && !parentIsListComponent(el) && isEditable(el);\n      });\n    };\n    var handle = function (editor, command) {\n      var dom = editor.dom, selection = editor.selection, formatter = editor.formatter;\n      var indentation = getIndentation(editor);\n      var indentUnit = /[a-z%]+$/i.exec(indentation)[0];\n      var indentValue = parseInt(indentation, 10);\n      var useMargin = shouldIndentUseMargin(editor);\n      var forcedRootBlock = getForcedRootBlock(editor);\n      if (!editor.queryCommandState('InsertUnorderedList') && !editor.queryCommandState('InsertOrderedList')) {\n        if (forcedRootBlock === '' && !dom.getParent(selection.getNode(), dom.isBlock)) {\n          formatter.apply('div');\n        }\n      }\n      each$k(getBlocksToIndent(editor), function (block) {\n        indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom);\n      });\n    };\n\n    var backspaceDelete = function (editor, _forward) {\n      if (editor.selection.isCollapsed() && canOutdent(editor)) {\n        var dom = editor.dom;\n        var rng = editor.selection.getRng();\n        var pos = CaretPosition.fromRangeStart(rng);\n        var block = dom.getParent(rng.startContainer, dom.isBlock);\n        if (block !== null && isAtStartOfBlock(SugarElement.fromDom(block), pos)) {\n          handle(editor, 'outdent');\n          return true;\n        }\n      }\n      return false;\n    };\n\n    var nativeCommand = function (editor, command) {\n      editor.getDoc().execCommand(command, false, null);\n    };\n    var deleteCommand = function (editor, caret) {\n      if (backspaceDelete(editor)) {\n        return;\n      } else if (backspaceDelete$5(editor, false)) {\n        return;\n      } else if (backspaceDelete$6(editor, false)) {\n        return;\n      } else if (backspaceDelete$3(editor, caret, false)) {\n        return;\n      } else if (backspaceDelete$8(editor, false)) {\n        return;\n      } else if (backspaceDelete$9(editor)) {\n        return;\n      } else if (backspaceDelete$4(editor, false)) {\n        return;\n      } else if (backspaceDelete$1(editor, false)) {\n        return;\n      } else if (backspaceDelete$7(editor)) {\n        return;\n      } else if (backspaceDelete$2(editor, false)) {\n        return;\n      } else {\n        nativeCommand(editor, 'Delete');\n        paddEmptyBody(editor);\n      }\n    };\n    var forwardDeleteCommand = function (editor, caret) {\n      if (backspaceDelete$5(editor, true)) {\n        return;\n      } else if (backspaceDelete$6(editor, true)) {\n        return;\n      } else if (backspaceDelete$3(editor, caret, true)) {\n        return;\n      } else if (backspaceDelete$8(editor, true)) {\n        return;\n      } else if (backspaceDelete$9(editor)) {\n        return;\n      } else if (backspaceDelete$4(editor, true)) {\n        return;\n      } else if (backspaceDelete$1(editor, true)) {\n        return;\n      } else if (backspaceDelete$7(editor)) {\n        return;\n      } else if (backspaceDelete$2(editor, true)) {\n        return;\n      } else {\n        nativeCommand(editor, 'ForwardDelete');\n      }\n    };\n    var setup$f = function (editor, caret) {\n      editor.addCommand('delete', function () {\n        deleteCommand(editor, caret);\n      });\n      editor.addCommand('forwardDelete', function () {\n        forwardDeleteCommand(editor, caret);\n      });\n    };\n\n    var SIGNIFICANT_MOVE = 5;\n    var LONGPRESS_DELAY = 400;\n    var getTouch = function (event) {\n      if (event.touches === undefined || event.touches.length !== 1) {\n        return Optional.none();\n      }\n      return Optional.some(event.touches[0]);\n    };\n    var isFarEnough = function (touch, data) {\n      var distX = Math.abs(touch.clientX - data.x);\n      var distY = Math.abs(touch.clientY - data.y);\n      return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n    };\n    var setup$e = function (editor) {\n      var startData = value();\n      var longpressFired = Cell(false);\n      var debounceLongpress = last(function (e) {\n        editor.fire('longpress', __assign(__assign({}, e), { type: 'longpress' }));\n        longpressFired.set(true);\n      }, LONGPRESS_DELAY);\n      editor.on('touchstart', function (e) {\n        getTouch(e).each(function (touch) {\n          debounceLongpress.cancel();\n          var data = {\n            x: touch.clientX,\n            y: touch.clientY,\n            target: e.target\n          };\n          debounceLongpress.throttle(e);\n          longpressFired.set(false);\n          startData.set(data);\n        });\n      }, true);\n      editor.on('touchmove', function (e) {\n        debounceLongpress.cancel();\n        getTouch(e).each(function (touch) {\n          startData.on(function (data) {\n            if (isFarEnough(touch, data)) {\n              startData.clear();\n              longpressFired.set(false);\n              editor.fire('longpresscancel');\n            }\n          });\n        });\n      }, true);\n      editor.on('touchend touchcancel', function (e) {\n        debounceLongpress.cancel();\n        if (e.type === 'touchcancel') {\n          return;\n        }\n        startData.get().filter(function (data) {\n          return data.target.isEqualNode(e.target);\n        }).each(function () {\n          if (longpressFired.get()) {\n            e.preventDefault();\n          } else {\n            editor.fire('tap', __assign(__assign({}, e), { type: 'tap' }));\n          }\n        });\n      }, true);\n    };\n\n    var isBlockElement = function (blockElements, node) {\n      return has$2(blockElements, node.nodeName);\n    };\n    var isValidTarget = function (blockElements, node) {\n      if (isText$7(node)) {\n        return true;\n      } else if (isElement$5(node)) {\n        return !isBlockElement(blockElements, node) && !isBookmarkNode$1(node);\n      } else {\n        return false;\n      }\n    };\n    var hasBlockParent = function (blockElements, root, node) {\n      return exists(parents(SugarElement.fromDom(node), SugarElement.fromDom(root)), function (elm) {\n        return isBlockElement(blockElements, elm.dom);\n      });\n    };\n    var shouldRemoveTextNode = function (blockElements, node) {\n      if (isText$7(node)) {\n        if (node.nodeValue.length === 0) {\n          return true;\n        } else if (/^\\s+$/.test(node.nodeValue) && (!node.nextSibling || isBlockElement(blockElements, node.nextSibling))) {\n          return true;\n        }\n      }\n      return false;\n    };\n    var addRootBlocks = function (editor) {\n      var dom = editor.dom, selection = editor.selection;\n      var schema = editor.schema, blockElements = schema.getBlockElements();\n      var node = selection.getStart();\n      var rootNode = editor.getBody();\n      var rootBlockNode, tempNode, wrapped;\n      var forcedRootBlock = getForcedRootBlock(editor);\n      if (!node || !isElement$5(node) || !forcedRootBlock) {\n        return;\n      }\n      var rootNodeName = rootNode.nodeName.toLowerCase();\n      if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, node)) {\n        return;\n      }\n      var rng = selection.getRng();\n      var startContainer = rng.startContainer;\n      var startOffset = rng.startOffset;\n      var endContainer = rng.endContainer;\n      var endOffset = rng.endOffset;\n      var restoreSelection = hasFocus(editor);\n      node = rootNode.firstChild;\n      while (node) {\n        if (isValidTarget(blockElements, node)) {\n          if (shouldRemoveTextNode(blockElements, node)) {\n            tempNode = node;\n            node = node.nextSibling;\n            dom.remove(tempNode);\n            continue;\n          }\n          if (!rootBlockNode) {\n            rootBlockNode = dom.create(forcedRootBlock, getForcedRootBlockAttrs(editor));\n            node.parentNode.insertBefore(rootBlockNode, node);\n            wrapped = true;\n          }\n          tempNode = node;\n          node = node.nextSibling;\n          rootBlockNode.appendChild(tempNode);\n        } else {\n          rootBlockNode = null;\n          node = node.nextSibling;\n        }\n      }\n      if (wrapped && restoreSelection) {\n        rng.setStart(startContainer, startOffset);\n        rng.setEnd(endContainer, endOffset);\n        selection.setRng(rng);\n        editor.nodeChanged();\n      }\n    };\n    var setup$d = function (editor) {\n      if (getForcedRootBlock(editor)) {\n        editor.on('NodeChange', curry(addRootBlocks, editor));\n      }\n    };\n\n    var findBlockCaretContainer = function (editor) {\n      return descendant(SugarElement.fromDom(editor.getBody()), '*[data-mce-caret]').map(function (elm) {\n        return elm.dom;\n      }).getOrNull();\n    };\n    var removeIeControlRect = function (editor) {\n      editor.selection.setRng(editor.selection.getRng());\n    };\n    var showBlockCaretContainer = function (editor, blockCaretContainer) {\n      if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n        showCaretContainerBlock(blockCaretContainer);\n        removeIeControlRect(editor);\n        editor.selection.scrollIntoView(blockCaretContainer);\n      }\n    };\n    var handleBlockContainer = function (editor, e) {\n      var blockCaretContainer = findBlockCaretContainer(editor);\n      if (!blockCaretContainer) {\n        return;\n      }\n      if (e.type === 'compositionstart') {\n        e.preventDefault();\n        e.stopPropagation();\n        showBlockCaretContainer(editor, blockCaretContainer);\n        return;\n      }\n      if (hasContent(blockCaretContainer)) {\n        showBlockCaretContainer(editor, blockCaretContainer);\n        editor.undoManager.add();\n      }\n    };\n    var setup$c = function (editor) {\n      editor.on('keyup compositionstart', curry(handleBlockContainer, editor));\n    };\n\n    var isContentEditableFalse$2 = isContentEditableFalse$b;\n    var moveToCeFalseHorizontally = function (direction, editor, range) {\n      return moveHorizontally(editor, direction, range, isBeforeContentEditableFalse, isAfterContentEditableFalse, isContentEditableFalse$2);\n    };\n    var moveToCeFalseVertically = function (direction, editor, range) {\n      var isBefore = function (caretPosition) {\n        return isBeforeContentEditableFalse(caretPosition) || isBeforeTable(caretPosition);\n      };\n      var isAfter = function (caretPosition) {\n        return isAfterContentEditableFalse(caretPosition) || isAfterTable(caretPosition);\n      };\n      return moveVertically(editor, direction, range, isBefore, isAfter, isContentEditableFalse$2);\n    };\n    var createTextBlock = function (editor) {\n      var textBlock = editor.dom.create(getForcedRootBlock(editor));\n      if (!Env.ie || Env.ie >= 11) {\n        textBlock.innerHTML = '<br data-mce-bogus=\"1\">';\n      }\n      return textBlock;\n    };\n    var exitPreBlock = function (editor, direction, range) {\n      var caretWalker = CaretWalker(editor.getBody());\n      var getVisualCaretPosition$1 = curry(getVisualCaretPosition, direction === 1 ? caretWalker.next : caretWalker.prev);\n      if (range.collapsed && hasForcedRootBlock(editor)) {\n        var pre = editor.dom.getParent(range.startContainer, 'PRE');\n        if (!pre) {\n          return;\n        }\n        var caretPos = getVisualCaretPosition$1(CaretPosition.fromRangeStart(range));\n        if (!caretPos) {\n          var newBlock = createTextBlock(editor);\n          if (direction === 1) {\n            editor.$(pre).after(newBlock);\n          } else {\n            editor.$(pre).before(newBlock);\n          }\n          editor.selection.select(newBlock, true);\n          editor.selection.collapse();\n        }\n      }\n    };\n    var getHorizontalRange = function (editor, forward) {\n      var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n      var range = editor.selection.getRng();\n      return moveToCeFalseHorizontally(direction, editor, range).orThunk(function () {\n        exitPreBlock(editor, direction, range);\n        return Optional.none();\n      });\n    };\n    var getVerticalRange = function (editor, down) {\n      var direction = down ? 1 : -1;\n      var range = editor.selection.getRng();\n      return moveToCeFalseVertically(direction, editor, range).orThunk(function () {\n        exitPreBlock(editor, direction, range);\n        return Optional.none();\n      });\n    };\n    var moveH$2 = function (editor, forward) {\n      return getHorizontalRange(editor, forward).exists(function (newRange) {\n        moveToRange(editor, newRange);\n        return true;\n      });\n    };\n    var moveV$3 = function (editor, down) {\n      return getVerticalRange(editor, down).exists(function (newRange) {\n        moveToRange(editor, newRange);\n        return true;\n      });\n    };\n    var moveToLineEndPoint$1 = function (editor, forward) {\n      var isCefPosition = forward ? isAfterContentEditableFalse : isBeforeContentEditableFalse;\n      return moveToLineEndPoint$3(editor, forward, isCefPosition);\n    };\n\n    var isTarget = function (node) {\n      return contains$3(['figcaption'], name(node));\n    };\n    var rangeBefore = function (target) {\n      var rng = document.createRange();\n      rng.setStartBefore(target.dom);\n      rng.setEndBefore(target.dom);\n      return rng;\n    };\n    var insertElement = function (root, elm, forward) {\n      if (forward) {\n        append$1(root, elm);\n      } else {\n        prepend(root, elm);\n      }\n    };\n    var insertBr = function (root, forward) {\n      var br = SugarElement.fromTag('br');\n      insertElement(root, br, forward);\n      return rangeBefore(br);\n    };\n    var insertBlock = function (root, forward, blockName, attrs) {\n      var block = SugarElement.fromTag(blockName);\n      var br = SugarElement.fromTag('br');\n      setAll$1(block, attrs);\n      append$1(block, br);\n      insertElement(root, block, forward);\n      return rangeBefore(br);\n    };\n    var insertEmptyLine = function (root, rootBlockName, attrs, forward) {\n      if (rootBlockName === '') {\n        return insertBr(root, forward);\n      } else {\n        return insertBlock(root, forward, rootBlockName, attrs);\n      }\n    };\n    var getClosestTargetBlock = function (pos, root) {\n      var isRoot = curry(eq, root);\n      return closest$3(SugarElement.fromDom(pos.container()), isBlock$2, isRoot).filter(isTarget);\n    };\n    var isAtFirstOrLastLine = function (root, forward, pos) {\n      return forward ? isAtLastLine(root.dom, pos) : isAtFirstLine(root.dom, pos);\n    };\n    var moveCaretToNewEmptyLine = function (editor, forward) {\n      var root = SugarElement.fromDom(editor.getBody());\n      var pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n      var rootBlock = getForcedRootBlock(editor);\n      var rootBlockAttrs = getForcedRootBlockAttrs(editor);\n      return getClosestTargetBlock(pos, root).exists(function () {\n        if (isAtFirstOrLastLine(root, forward, pos)) {\n          var rng = insertEmptyLine(root, rootBlock, rootBlockAttrs, forward);\n          editor.selection.setRng(rng);\n          return true;\n        } else {\n          return false;\n        }\n      });\n    };\n    var moveV$2 = function (editor, forward) {\n      if (editor.selection.isCollapsed()) {\n        return moveCaretToNewEmptyLine(editor, forward);\n      } else {\n        return false;\n      }\n    };\n\n    var defaultPatterns = function (patterns) {\n      return map$3(patterns, function (pattern) {\n        return __assign({\n          shiftKey: false,\n          altKey: false,\n          ctrlKey: false,\n          metaKey: false,\n          keyCode: 0,\n          action: noop\n        }, pattern);\n      });\n    };\n    var matchesEvent = function (pattern, evt) {\n      return evt.keyCode === pattern.keyCode && evt.shiftKey === pattern.shiftKey && evt.altKey === pattern.altKey && evt.ctrlKey === pattern.ctrlKey && evt.metaKey === pattern.metaKey;\n    };\n    var match$1 = function (patterns, evt) {\n      return bind(defaultPatterns(patterns), function (pattern) {\n        return matchesEvent(pattern, evt) ? [pattern] : [];\n      });\n    };\n    var action = function (f) {\n      var x = [];\n      for (var _i = 1; _i < arguments.length; _i++) {\n        x[_i - 1] = arguments[_i];\n      }\n      return function () {\n        return f.apply(null, x);\n      };\n    };\n    var execute = function (patterns, evt) {\n      return find$3(match$1(patterns, evt), function (pattern) {\n        return pattern.action();\n      });\n    };\n\n    var moveH$1 = function (editor, forward) {\n      var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n      var range = editor.selection.getRng();\n      return moveHorizontally(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia$2).exists(function (newRange) {\n        moveToRange(editor, newRange);\n        return true;\n      });\n    };\n    var moveV$1 = function (editor, down) {\n      var direction = down ? 1 : -1;\n      var range = editor.selection.getRng();\n      return moveVertically(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia$2).exists(function (newRange) {\n        moveToRange(editor, newRange);\n        return true;\n      });\n    };\n    var moveToLineEndPoint = function (editor, forward) {\n      var isNearMedia = forward ? isAfterMedia : isBeforeMedia;\n      return moveToLineEndPoint$3(editor, forward, isNearMedia);\n    };\n\n    var deflate = function (rect, delta) {\n      return {\n        left: rect.left - delta,\n        top: rect.top - delta,\n        right: rect.right + delta * 2,\n        bottom: rect.bottom + delta * 2,\n        width: rect.width + delta,\n        height: rect.height + delta\n      };\n    };\n    var getCorners = function (getYAxisValue, tds) {\n      return bind(tds, function (td) {\n        var rect = deflate(clone(td.getBoundingClientRect()), -1);\n        return [\n          {\n            x: rect.left,\n            y: getYAxisValue(rect),\n            cell: td\n          },\n          {\n            x: rect.right,\n            y: getYAxisValue(rect),\n            cell: td\n          }\n        ];\n      });\n    };\n    var findClosestCorner = function (corners, x, y) {\n      return foldl(corners, function (acc, newCorner) {\n        return acc.fold(function () {\n          return Optional.some(newCorner);\n        }, function (oldCorner) {\n          var oldDist = Math.sqrt(Math.abs(oldCorner.x - x) + Math.abs(oldCorner.y - y));\n          var newDist = Math.sqrt(Math.abs(newCorner.x - x) + Math.abs(newCorner.y - y));\n          return Optional.some(newDist < oldDist ? newCorner : oldCorner);\n        });\n      }, Optional.none());\n    };\n    var getClosestCell = function (getYAxisValue, isTargetCorner, table, x, y) {\n      var cells = descendants(SugarElement.fromDom(table), 'td,th,caption').map(function (e) {\n        return e.dom;\n      });\n      var corners = filter$4(getCorners(getYAxisValue, cells), function (corner) {\n        return isTargetCorner(corner, y);\n      });\n      return findClosestCorner(corners, x, y).map(function (corner) {\n        return corner.cell;\n      });\n    };\n    var getBottomValue = function (rect) {\n      return rect.bottom;\n    };\n    var getTopValue = function (rect) {\n      return rect.top;\n    };\n    var isAbove = function (corner, y) {\n      return corner.y < y;\n    };\n    var isBelow = function (corner, y) {\n      return corner.y > y;\n    };\n    var getClosestCellAbove = curry(getClosestCell, getBottomValue, isAbove);\n    var getClosestCellBelow = curry(getClosestCell, getTopValue, isBelow);\n    var findClosestPositionInAboveCell = function (table, pos) {\n      return head(pos.getClientRects()).bind(function (rect) {\n        return getClosestCellAbove(table, rect.left, rect.top);\n      }).bind(function (cell) {\n        return findClosestHorizontalPosition(getLastLinePositions(cell), pos);\n      });\n    };\n    var findClosestPositionInBelowCell = function (table, pos) {\n      return last$2(pos.getClientRects()).bind(function (rect) {\n        return getClosestCellBelow(table, rect.left, rect.top);\n      }).bind(function (cell) {\n        return findClosestHorizontalPosition(getFirstLinePositions(cell), pos);\n      });\n    };\n\n    var hasNextBreak = function (getPositionsUntil, scope, lineInfo) {\n      return lineInfo.breakAt.exists(function (breakPos) {\n        return getPositionsUntil(scope, breakPos).breakAt.isSome();\n      });\n    };\n    var startsWithWrapBreak = function (lineInfo) {\n      return lineInfo.breakType === BreakType.Wrap && lineInfo.positions.length === 0;\n    };\n    var startsWithBrBreak = function (lineInfo) {\n      return lineInfo.breakType === BreakType.Br && lineInfo.positions.length === 1;\n    };\n    var isAtTableCellLine = function (getPositionsUntil, scope, pos) {\n      var lineInfo = getPositionsUntil(scope, pos);\n      if (startsWithWrapBreak(lineInfo) || !isBr$5(pos.getNode()) && startsWithBrBreak(lineInfo)) {\n        return !hasNextBreak(getPositionsUntil, scope, lineInfo);\n      } else {\n        return lineInfo.breakAt.isNone();\n      }\n    };\n    var isAtFirstTableCellLine = curry(isAtTableCellLine, getPositionsUntilPreviousLine);\n    var isAtLastTableCellLine = curry(isAtTableCellLine, getPositionsUntilNextLine);\n    var isCaretAtStartOrEndOfTable = function (forward, rng, table) {\n      var caretPos = CaretPosition.fromRangeStart(rng);\n      return positionIn(!forward, table).exists(function (pos) {\n        return pos.isEqual(caretPos);\n      });\n    };\n    var navigateHorizontally = function (editor, forward, table, _td) {\n      var rng = editor.selection.getRng();\n      var direction = forward ? 1 : -1;\n      if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) {\n        showCaret(direction, editor, table, !forward, false).each(function (newRng) {\n          moveToRange(editor, newRng);\n        });\n        return true;\n      }\n      return false;\n    };\n    var getClosestAbovePosition = function (root, table, start) {\n      return findClosestPositionInAboveCell(table, start).orThunk(function () {\n        return head(start.getClientRects()).bind(function (rect) {\n          return findClosestHorizontalPositionFromPoint(getPositionsAbove(root, CaretPosition.before(table)), rect.left);\n        });\n      }).getOr(CaretPosition.before(table));\n    };\n    var getClosestBelowPosition = function (root, table, start) {\n      return findClosestPositionInBelowCell(table, start).orThunk(function () {\n        return head(start.getClientRects()).bind(function (rect) {\n          return findClosestHorizontalPositionFromPoint(getPositionsBelow(root, CaretPosition.after(table)), rect.left);\n        });\n      }).getOr(CaretPosition.after(table));\n    };\n    var getTable = function (previous, pos) {\n      var node = pos.getNode(previous);\n      return isElement$5(node) && node.nodeName === 'TABLE' ? Optional.some(node) : Optional.none();\n    };\n    var renderBlock = function (down, editor, table, pos) {\n      var forcedRootBlock = getForcedRootBlock(editor);\n      if (forcedRootBlock) {\n        editor.undoManager.transact(function () {\n          var element = SugarElement.fromTag(forcedRootBlock);\n          setAll$1(element, getForcedRootBlockAttrs(editor));\n          append$1(element, SugarElement.fromTag('br'));\n          if (down) {\n            after$3(SugarElement.fromDom(table), element);\n          } else {\n            before$4(SugarElement.fromDom(table), element);\n          }\n          var rng = editor.dom.createRng();\n          rng.setStart(element.dom, 0);\n          rng.setEnd(element.dom, 0);\n          moveToRange(editor, rng);\n        });\n      } else {\n        moveToRange(editor, pos.toRange());\n      }\n    };\n    var moveCaret = function (editor, down, pos) {\n      var table = down ? getTable(true, pos) : getTable(false, pos);\n      var last = down === false;\n      table.fold(function () {\n        return moveToRange(editor, pos.toRange());\n      }, function (table) {\n        return positionIn(last, editor.getBody()).filter(function (lastPos) {\n          return lastPos.isEqual(pos);\n        }).fold(function () {\n          return moveToRange(editor, pos.toRange());\n        }, function (_) {\n          return renderBlock(down, editor, table, pos);\n        });\n      });\n    };\n    var navigateVertically = function (editor, down, table, td) {\n      var rng = editor.selection.getRng();\n      var pos = CaretPosition.fromRangeStart(rng);\n      var root = editor.getBody();\n      if (!down && isAtFirstTableCellLine(td, pos)) {\n        var newPos = getClosestAbovePosition(root, table, pos);\n        moveCaret(editor, down, newPos);\n        return true;\n      } else if (down && isAtLastTableCellLine(td, pos)) {\n        var newPos = getClosestBelowPosition(root, table, pos);\n        moveCaret(editor, down, newPos);\n        return true;\n      } else {\n        return false;\n      }\n    };\n    var move$1 = function (editor, forward, mover) {\n      return Optional.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {\n        return Optional.from(editor.dom.getParent(td, 'table')).map(function (table) {\n          return mover(editor, forward, table, td);\n        });\n      }).getOr(false);\n    };\n    var moveH = function (editor, forward) {\n      return move$1(editor, forward, navigateHorizontally);\n    };\n    var moveV = function (editor, forward) {\n      return move$1(editor, forward, navigateVertically);\n    };\n\n    var executeKeydownOverride$3 = function (editor, caret, evt) {\n      var os = detect().os;\n      execute([\n        {\n          keyCode: VK.RIGHT,\n          action: action(moveH$2, editor, true)\n        },\n        {\n          keyCode: VK.LEFT,\n          action: action(moveH$2, editor, false)\n        },\n        {\n          keyCode: VK.UP,\n          action: action(moveV$3, editor, false)\n        },\n        {\n          keyCode: VK.DOWN,\n          action: action(moveV$3, editor, true)\n        },\n        {\n          keyCode: VK.RIGHT,\n          action: action(moveH, editor, true)\n        },\n        {\n          keyCode: VK.LEFT,\n          action: action(moveH, editor, false)\n        },\n        {\n          keyCode: VK.UP,\n          action: action(moveV, editor, false)\n        },\n        {\n          keyCode: VK.DOWN,\n          action: action(moveV, editor, true)\n        },\n        {\n          keyCode: VK.RIGHT,\n          action: action(moveH$1, editor, true)\n        },\n        {\n          keyCode: VK.LEFT,\n          action: action(moveH$1, editor, false)\n        },\n        {\n          keyCode: VK.UP,\n          action: action(moveV$1, editor, false)\n        },\n        {\n          keyCode: VK.DOWN,\n          action: action(moveV$1, editor, true)\n        },\n        {\n          keyCode: VK.RIGHT,\n          action: action(move$2, editor, caret, true)\n        },\n        {\n          keyCode: VK.LEFT,\n          action: action(move$2, editor, caret, false)\n        },\n        {\n          keyCode: VK.RIGHT,\n          ctrlKey: !os.isOSX(),\n          altKey: os.isOSX(),\n          action: action(moveNextWord, editor, caret)\n        },\n        {\n          keyCode: VK.LEFT,\n          ctrlKey: !os.isOSX(),\n          altKey: os.isOSX(),\n          action: action(movePrevWord, editor, caret)\n        },\n        {\n          keyCode: VK.UP,\n          action: action(moveV$2, editor, false)\n        },\n        {\n          keyCode: VK.DOWN,\n          action: action(moveV$2, editor, true)\n        }\n      ], evt).each(function (_) {\n        evt.preventDefault();\n      });\n    };\n    var setup$b = function (editor, caret) {\n      editor.on('keydown', function (evt) {\n        if (evt.isDefaultPrevented() === false) {\n          executeKeydownOverride$3(editor, caret, evt);\n        }\n      });\n    };\n\n    var executeKeydownOverride$2 = function (editor, caret, evt) {\n      execute([\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete, editor, false)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$5, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$5, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$6, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$6, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$3, editor, caret, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$3, editor, caret, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$9, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$9, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$4, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$4, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$1, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$1, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$7, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$7, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$8, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$8, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$2, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$2, editor, true)\n        }\n      ], evt).each(function (_) {\n        evt.preventDefault();\n      });\n    };\n    var executeKeyupOverride = function (editor, evt) {\n      execute([\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(paddEmptyElement, editor)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(paddEmptyElement, editor)\n        }\n      ], evt);\n    };\n    var setup$a = function (editor, caret) {\n      editor.on('keydown', function (evt) {\n        if (evt.isDefaultPrevented() === false) {\n          executeKeydownOverride$2(editor, caret, evt);\n        }\n      });\n      editor.on('keyup', function (evt) {\n        if (evt.isDefaultPrevented() === false) {\n          executeKeyupOverride(editor, evt);\n        }\n      });\n    };\n\n    var firstNonWhiteSpaceNodeSibling = function (node) {\n      while (node) {\n        if (node.nodeType === 1 || node.nodeType === 3 && node.data && /[\\r\\n\\s]/.test(node.data)) {\n          return node;\n        }\n        node = node.nextSibling;\n      }\n    };\n    var moveToCaretPosition = function (editor, root) {\n      var node, lastNode = root;\n      var dom = editor.dom;\n      var moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements();\n      if (!root) {\n        return;\n      }\n      if (/^(LI|DT|DD)$/.test(root.nodeName)) {\n        var firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild);\n        if (firstChild && /^(UL|OL|DL)$/.test(firstChild.nodeName)) {\n          root.insertBefore(dom.doc.createTextNode(nbsp), root.firstChild);\n        }\n      }\n      var rng = dom.createRng();\n      root.normalize();\n      if (root.hasChildNodes()) {\n        var walker = new DomTreeWalker(root, root);\n        while (node = walker.current()) {\n          if (isText$7(node)) {\n            rng.setStart(node, 0);\n            rng.setEnd(node, 0);\n            break;\n          }\n          if (moveCaretBeforeOnEnterElementsMap[node.nodeName.toLowerCase()]) {\n            rng.setStartBefore(node);\n            rng.setEndBefore(node);\n            break;\n          }\n          lastNode = node;\n          node = walker.next();\n        }\n        if (!node) {\n          rng.setStart(lastNode, 0);\n          rng.setEnd(lastNode, 0);\n        }\n      } else {\n        if (isBr$5(root)) {\n          if (root.nextSibling && dom.isBlock(root.nextSibling)) {\n            rng.setStartBefore(root);\n            rng.setEndBefore(root);\n          } else {\n            rng.setStartAfter(root);\n            rng.setEndAfter(root);\n          }\n        } else {\n          rng.setStart(root, 0);\n          rng.setEnd(root, 0);\n        }\n      }\n      editor.selection.setRng(rng);\n      scrollRangeIntoView(editor, rng);\n    };\n    var getEditableRoot$1 = function (dom, node) {\n      var root = dom.getRoot();\n      var parent, editableRoot;\n      parent = node;\n      while (parent !== root && dom.getContentEditable(parent) !== 'false') {\n        if (dom.getContentEditable(parent) === 'true') {\n          editableRoot = parent;\n        }\n        parent = parent.parentNode;\n      }\n      return parent !== root ? editableRoot : root;\n    };\n    var getParentBlock = function (editor) {\n      return Optional.from(editor.dom.getParent(editor.selection.getStart(true), editor.dom.isBlock));\n    };\n    var getParentBlockName = function (editor) {\n      return getParentBlock(editor).fold(constant(''), function (parentBlock) {\n        return parentBlock.nodeName.toUpperCase();\n      });\n    };\n    var isListItemParentBlock = function (editor) {\n      return getParentBlock(editor).filter(function (elm) {\n        return isListItem(SugarElement.fromDom(elm));\n      }).isSome();\n    };\n\n    var hasFirstChild = function (elm, name) {\n      return elm.firstChild && elm.firstChild.nodeName === name;\n    };\n    var isFirstChild = function (elm) {\n      var _a;\n      return ((_a = elm.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild) === elm;\n    };\n    var hasParent = function (elm, parentName) {\n      return elm && elm.parentNode && elm.parentNode.nodeName === parentName;\n    };\n    var isListBlock = function (elm) {\n      return elm && /^(OL|UL|LI)$/.test(elm.nodeName);\n    };\n    var isNestedList = function (elm) {\n      return isListBlock(elm) && isListBlock(elm.parentNode);\n    };\n    var getContainerBlock = function (containerBlock) {\n      var containerBlockParent = containerBlock.parentNode;\n      if (/^(LI|DT|DD)$/.test(containerBlockParent.nodeName)) {\n        return containerBlockParent;\n      }\n      return containerBlock;\n    };\n    var isFirstOrLastLi = function (containerBlock, parentBlock, first) {\n      var node = containerBlock[first ? 'firstChild' : 'lastChild'];\n      while (node) {\n        if (isElement$5(node)) {\n          break;\n        }\n        node = node[first ? 'nextSibling' : 'previousSibling'];\n      }\n      return node === parentBlock;\n    };\n    var insert$3 = function (editor, createNewBlock, containerBlock, parentBlock, newBlockName) {\n      var dom = editor.dom;\n      var rng = editor.selection.getRng();\n      if (containerBlock === editor.getBody()) {\n        return;\n      }\n      if (isNestedList(containerBlock)) {\n        newBlockName = 'LI';\n      }\n      var newBlock = newBlockName ? createNewBlock(newBlockName) : dom.create('BR');\n      if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) {\n        if (hasParent(containerBlock, 'LI')) {\n          var containerBlockParent = getContainerBlock(containerBlock);\n          dom.insertAfter(newBlock, containerBlockParent);\n          if (isFirstChild(containerBlock)) {\n            dom.remove(containerBlockParent);\n          } else {\n            dom.remove(containerBlock);\n          }\n        } else {\n          dom.replace(newBlock, containerBlock);\n        }\n      } else if (isFirstOrLastLi(containerBlock, parentBlock, true)) {\n        if (hasParent(containerBlock, 'LI')) {\n          dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n          newBlock.appendChild(dom.doc.createTextNode(' '));\n          newBlock.appendChild(containerBlock);\n        } else {\n          containerBlock.parentNode.insertBefore(newBlock, containerBlock);\n        }\n        dom.remove(parentBlock);\n      } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) {\n        dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n        dom.remove(parentBlock);\n      } else {\n        containerBlock = getContainerBlock(containerBlock);\n        var tmpRng = rng.cloneRange();\n        tmpRng.setStartAfter(parentBlock);\n        tmpRng.setEndAfter(containerBlock);\n        var fragment = tmpRng.extractContents();\n        if (newBlockName === 'LI' && hasFirstChild(fragment, 'LI')) {\n          newBlock = fragment.firstChild;\n          dom.insertAfter(fragment, containerBlock);\n        } else {\n          dom.insertAfter(fragment, containerBlock);\n          dom.insertAfter(newBlock, containerBlock);\n        }\n        dom.remove(parentBlock);\n      }\n      moveToCaretPosition(editor, newBlock);\n    };\n\n    var trimZwsp = function (fragment) {\n      each$k(descendants$1(SugarElement.fromDom(fragment), isText$8), function (text) {\n        var rawNode = text.dom;\n        rawNode.nodeValue = trim$2(rawNode.nodeValue);\n      });\n    };\n    var isEmptyAnchor = function (dom, elm) {\n      return elm && elm.nodeName === 'A' && dom.isEmpty(elm);\n    };\n    var isTableCell = function (node) {\n      return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n    };\n    var emptyBlock = function (elm) {\n      elm.innerHTML = '<br data-mce-bogus=\"1\">';\n    };\n    var containerAndSiblingName = function (container, nodeName) {\n      return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName;\n    };\n    var canSplitBlock = function (dom, node) {\n      return node && dom.isBlock(node) && !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position) && dom.getContentEditable(node) !== 'true';\n    };\n    var trimInlineElementsOnLeftSideOfBlock = function (dom, nonEmptyElementsMap, block) {\n      var node = block;\n      var firstChilds = [];\n      var i;\n      if (!node) {\n        return;\n      }\n      while (node = node.firstChild) {\n        if (dom.isBlock(node)) {\n          return;\n        }\n        if (isElement$5(node) && !nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n          firstChilds.push(node);\n        }\n      }\n      i = firstChilds.length;\n      while (i--) {\n        node = firstChilds[i];\n        if (!node.hasChildNodes() || node.firstChild === node.lastChild && node.firstChild.nodeValue === '') {\n          dom.remove(node);\n        } else {\n          if (isEmptyAnchor(dom, node)) {\n            dom.remove(node);\n          }\n        }\n      }\n    };\n    var normalizeZwspOffset = function (start, container, offset) {\n      if (isText$7(container) === false) {\n        return offset;\n      } else if (start) {\n        return offset === 1 && container.data.charAt(offset - 1) === ZWSP$1 ? 0 : offset;\n      } else {\n        return offset === container.data.length - 1 && container.data.charAt(offset) === ZWSP$1 ? container.data.length : offset;\n      }\n    };\n    var includeZwspInRange = function (rng) {\n      var newRng = rng.cloneRange();\n      newRng.setStart(rng.startContainer, normalizeZwspOffset(true, rng.startContainer, rng.startOffset));\n      newRng.setEnd(rng.endContainer, normalizeZwspOffset(false, rng.endContainer, rng.endOffset));\n      return newRng;\n    };\n    var trimLeadingLineBreaks = function (node) {\n      do {\n        if (isText$7(node)) {\n          node.nodeValue = node.nodeValue.replace(/^[\\r\\n]+/, '');\n        }\n        node = node.firstChild;\n      } while (node);\n    };\n    var getEditableRoot = function (dom, node) {\n      var root = dom.getRoot();\n      var parent, editableRoot;\n      parent = node;\n      while (parent !== root && dom.getContentEditable(parent) !== 'false') {\n        if (dom.getContentEditable(parent) === 'true') {\n          editableRoot = parent;\n        }\n        parent = parent.parentNode;\n      }\n      return parent !== root ? editableRoot : root;\n    };\n    var applyAttributes = function (editor, node, forcedRootBlockAttrs) {\n      var dom = editor.dom;\n      Optional.from(forcedRootBlockAttrs.style).map(dom.parseStyle).each(function (attrStyles) {\n        var currentStyles = getAllRaw(SugarElement.fromDom(node));\n        var newStyles = __assign(__assign({}, currentStyles), attrStyles);\n        dom.setStyles(node, newStyles);\n      });\n      var attrClassesOpt = Optional.from(forcedRootBlockAttrs.class).map(function (attrClasses) {\n        return attrClasses.split(/\\s+/);\n      });\n      var currentClassesOpt = Optional.from(node.className).map(function (currentClasses) {\n        return filter$4(currentClasses.split(/\\s+/), function (clazz) {\n          return clazz !== '';\n        });\n      });\n      lift2(attrClassesOpt, currentClassesOpt, function (attrClasses, currentClasses) {\n        var filteredClasses = filter$4(currentClasses, function (clazz) {\n          return !contains$3(attrClasses, clazz);\n        });\n        var newClasses = __spreadArray(__spreadArray([], attrClasses, true), filteredClasses, true);\n        dom.setAttrib(node, 'class', newClasses.join(' '));\n      });\n      var appliedAttrs = [\n        'style',\n        'class'\n      ];\n      var remainingAttrs = filter$3(forcedRootBlockAttrs, function (_, attrs) {\n        return !contains$3(appliedAttrs, attrs);\n      });\n      dom.setAttribs(node, remainingAttrs);\n    };\n    var setForcedBlockAttrs = function (editor, node) {\n      var forcedRootBlockName = getForcedRootBlock(editor);\n      if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {\n        var forcedRootBlockAttrs = getForcedRootBlockAttrs(editor);\n        applyAttributes(editor, node, forcedRootBlockAttrs);\n      }\n    };\n    var wrapSelfAndSiblingsInDefaultBlock = function (editor, newBlockName, rng, container, offset) {\n      var newBlock, parentBlock, startNode, node, next, rootBlockName;\n      var blockName = newBlockName || 'P';\n      var dom = editor.dom, editableRoot = getEditableRoot(dom, container);\n      parentBlock = dom.getParent(container, dom.isBlock);\n      if (!parentBlock || !canSplitBlock(dom, parentBlock)) {\n        parentBlock = parentBlock || editableRoot;\n        if (parentBlock === editor.getBody() || isTableCell(parentBlock)) {\n          rootBlockName = parentBlock.nodeName.toLowerCase();\n        } else {\n          rootBlockName = parentBlock.parentNode.nodeName.toLowerCase();\n        }\n        if (!parentBlock.hasChildNodes()) {\n          newBlock = dom.create(blockName);\n          setForcedBlockAttrs(editor, newBlock);\n          parentBlock.appendChild(newBlock);\n          rng.setStart(newBlock, 0);\n          rng.setEnd(newBlock, 0);\n          return newBlock;\n        }\n        node = container;\n        while (node.parentNode !== parentBlock) {\n          node = node.parentNode;\n        }\n        while (node && !dom.isBlock(node)) {\n          startNode = node;\n          node = node.previousSibling;\n        }\n        if (startNode && editor.schema.isValidChild(rootBlockName, blockName.toLowerCase())) {\n          newBlock = dom.create(blockName);\n          setForcedBlockAttrs(editor, newBlock);\n          startNode.parentNode.insertBefore(newBlock, startNode);\n          node = startNode;\n          while (node && !dom.isBlock(node)) {\n            next = node.nextSibling;\n            newBlock.appendChild(node);\n            node = next;\n          }\n          rng.setStart(container, offset);\n          rng.setEnd(container, offset);\n        }\n      }\n      return container;\n    };\n    var addBrToBlockIfNeeded = function (dom, block) {\n      block.normalize();\n      var lastChild = block.lastChild;\n      if (!lastChild || /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {\n        dom.add(block, 'br');\n      }\n    };\n    var insert$2 = function (editor, evt) {\n      var tmpRng, container, offset, parentBlock;\n      var newBlock, fragment, containerBlock, parentBlockName, newBlockName, isAfterLastNodeInContainer;\n      var dom = editor.dom;\n      var schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements();\n      var rng = editor.selection.getRng();\n      var createNewBlock = function (name) {\n        var node = container, block, clonedNode, caretNode;\n        var textInlineElements = schema.getTextInlineElements();\n        if (name || parentBlockName === 'TABLE' || parentBlockName === 'HR') {\n          block = dom.create(name || newBlockName);\n        } else {\n          block = parentBlock.cloneNode(false);\n        }\n        caretNode = block;\n        if (shouldKeepStyles(editor) === false) {\n          dom.setAttrib(block, 'style', null);\n          dom.setAttrib(block, 'class', null);\n        } else {\n          do {\n            if (textInlineElements[node.nodeName]) {\n              if (isCaretNode(node) || isBookmarkNode$1(node)) {\n                continue;\n              }\n              clonedNode = node.cloneNode(false);\n              dom.setAttrib(clonedNode, 'id', '');\n              if (block.hasChildNodes()) {\n                clonedNode.appendChild(block.firstChild);\n                block.appendChild(clonedNode);\n              } else {\n                caretNode = clonedNode;\n                block.appendChild(clonedNode);\n              }\n            }\n          } while ((node = node.parentNode) && node !== editableRoot);\n        }\n        setForcedBlockAttrs(editor, block);\n        emptyBlock(caretNode);\n        return block;\n      };\n      var isCaretAtStartOrEndOfBlock = function (start) {\n        var node, name;\n        var normalizedOffset = normalizeZwspOffset(start, container, offset);\n        if (isText$7(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.nodeValue.length)) {\n          return false;\n        }\n        if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) {\n          return true;\n        }\n        if (start && isElement$5(container) && container === parentBlock.firstChild) {\n          return true;\n        }\n        if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) {\n          return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;\n        }\n        var walker = new DomTreeWalker(container, parentBlock);\n        if (isText$7(container)) {\n          if (start && normalizedOffset === 0) {\n            walker.prev();\n          } else if (!start && normalizedOffset === container.nodeValue.length) {\n            walker.next();\n          }\n        }\n        while (node = walker.current()) {\n          if (isElement$5(node)) {\n            if (!node.getAttribute('data-mce-bogus')) {\n              name = node.nodeName.toLowerCase();\n              if (nonEmptyElementsMap[name] && name !== 'br') {\n                return false;\n              }\n            }\n          } else if (isText$7(node) && !isWhitespaceText(node.nodeValue)) {\n            return false;\n          }\n          if (start) {\n            walker.prev();\n          } else {\n            walker.next();\n          }\n        }\n        return true;\n      };\n      var insertNewBlockAfter = function () {\n        if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName !== 'HGROUP') {\n          newBlock = createNewBlock(newBlockName);\n        } else {\n          newBlock = createNewBlock();\n        }\n        if (shouldEndContainerOnEmptyBlock(editor) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock)) {\n          newBlock = dom.split(containerBlock, parentBlock);\n        } else {\n          dom.insertAfter(newBlock, parentBlock);\n        }\n        moveToCaretPosition(editor, newBlock);\n      };\n      normalize$2(dom, rng).each(function (normRng) {\n        rng.setStart(normRng.startContainer, normRng.startOffset);\n        rng.setEnd(normRng.endContainer, normRng.endOffset);\n      });\n      container = rng.startContainer;\n      offset = rng.startOffset;\n      newBlockName = getForcedRootBlock(editor);\n      var shiftKey = !!(evt && evt.shiftKey);\n      var ctrlKey = !!(evt && evt.ctrlKey);\n      if (isElement$5(container) && container.hasChildNodes()) {\n        isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n        container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n        if (isAfterLastNodeInContainer && isText$7(container)) {\n          offset = container.nodeValue.length;\n        } else {\n          offset = 0;\n        }\n      }\n      var editableRoot = getEditableRoot(dom, container);\n      if (!editableRoot) {\n        return;\n      }\n      if (newBlockName && !shiftKey || !newBlockName && shiftKey) {\n        container = wrapSelfAndSiblingsInDefaultBlock(editor, newBlockName, rng, container, offset);\n      }\n      parentBlock = dom.getParent(container, dom.isBlock);\n      containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n      parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\n      var containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n      if (containerBlockName === 'LI' && !ctrlKey) {\n        parentBlock = containerBlock;\n        containerBlock = containerBlock.parentNode;\n        parentBlockName = containerBlockName;\n      }\n      if (/^(LI|DT|DD)$/.test(parentBlockName)) {\n        if (dom.isEmpty(parentBlock)) {\n          insert$3(editor, createNewBlock, containerBlock, parentBlock, newBlockName);\n          return;\n        }\n      }\n      if (newBlockName && parentBlock === editor.getBody()) {\n        return;\n      }\n      newBlockName = newBlockName || 'P';\n      if (isCaretContainerBlock$1(parentBlock)) {\n        newBlock = showCaretContainerBlock(parentBlock);\n        if (dom.isEmpty(parentBlock)) {\n          emptyBlock(parentBlock);\n        }\n        setForcedBlockAttrs(editor, newBlock);\n        moveToCaretPosition(editor, newBlock);\n      } else if (isCaretAtStartOrEndOfBlock()) {\n        insertNewBlockAfter();\n      } else if (isCaretAtStartOrEndOfBlock(true)) {\n        newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);\n        moveToCaretPosition(editor, containerAndSiblingName(parentBlock, 'HR') ? newBlock : parentBlock);\n      } else {\n        tmpRng = includeZwspInRange(rng).cloneRange();\n        tmpRng.setEndAfter(parentBlock);\n        fragment = tmpRng.extractContents();\n        trimZwsp(fragment);\n        trimLeadingLineBreaks(fragment);\n        newBlock = fragment.firstChild;\n        dom.insertAfter(fragment, parentBlock);\n        trimInlineElementsOnLeftSideOfBlock(dom, nonEmptyElementsMap, newBlock);\n        addBrToBlockIfNeeded(dom, parentBlock);\n        if (dom.isEmpty(parentBlock)) {\n          emptyBlock(parentBlock);\n        }\n        newBlock.normalize();\n        if (dom.isEmpty(newBlock)) {\n          dom.remove(newBlock);\n          insertNewBlockAfter();\n        } else {\n          setForcedBlockAttrs(editor, newBlock);\n          moveToCaretPosition(editor, newBlock);\n        }\n      }\n      dom.setAttrib(newBlock, 'id', '');\n      editor.fire('NewBlock', { newBlock: newBlock });\n    };\n\n    var hasRightSideContent = function (schema, container, parentBlock) {\n      var walker = new DomTreeWalker(container, parentBlock);\n      var node;\n      var nonEmptyElementsMap = schema.getNonEmptyElements();\n      while (node = walker.next()) {\n        if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) {\n          return true;\n        }\n      }\n    };\n    var moveSelectionToBr = function (editor, brElm, extraBr) {\n      var rng = editor.dom.createRng();\n      if (!extraBr) {\n        rng.setStartAfter(brElm);\n        rng.setEndAfter(brElm);\n      } else {\n        rng.setStartBefore(brElm);\n        rng.setEndBefore(brElm);\n      }\n      editor.selection.setRng(rng);\n      scrollRangeIntoView(editor, rng);\n    };\n    var insertBrAtCaret = function (editor, evt) {\n      var selection = editor.selection;\n      var dom = editor.dom;\n      var rng = selection.getRng();\n      var brElm;\n      var extraBr;\n      normalize$2(dom, rng).each(function (normRng) {\n        rng.setStart(normRng.startContainer, normRng.startOffset);\n        rng.setEnd(normRng.endContainer, normRng.endOffset);\n      });\n      var offset = rng.startOffset;\n      var container = rng.startContainer;\n      if (container.nodeType === 1 && container.hasChildNodes()) {\n        var isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n        container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n        if (isAfterLastNodeInContainer && container.nodeType === 3) {\n          offset = container.nodeValue.length;\n        } else {\n          offset = 0;\n        }\n      }\n      var parentBlock = dom.getParent(container, dom.isBlock);\n      var containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n      var containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n      var isControlKey = !!(evt && evt.ctrlKey);\n      if (containerBlockName === 'LI' && !isControlKey) {\n        parentBlock = containerBlock;\n      }\n      if (container && container.nodeType === 3 && offset >= container.nodeValue.length) {\n        if (!hasRightSideContent(editor.schema, container, parentBlock)) {\n          brElm = dom.create('br');\n          rng.insertNode(brElm);\n          rng.setStartAfter(brElm);\n          rng.setEndAfter(brElm);\n          extraBr = true;\n        }\n      }\n      brElm = dom.create('br');\n      rangeInsertNode(dom, rng, brElm);\n      moveSelectionToBr(editor, brElm, extraBr);\n      editor.undoManager.add();\n    };\n    var insertBrBefore = function (editor, inline) {\n      var br = SugarElement.fromTag('br');\n      before$4(SugarElement.fromDom(inline), br);\n      editor.undoManager.add();\n    };\n    var insertBrAfter = function (editor, inline) {\n      if (!hasBrAfter(editor.getBody(), inline)) {\n        after$3(SugarElement.fromDom(inline), SugarElement.fromTag('br'));\n      }\n      var br = SugarElement.fromTag('br');\n      after$3(SugarElement.fromDom(inline), br);\n      moveSelectionToBr(editor, br.dom, false);\n      editor.undoManager.add();\n    };\n    var isBeforeBr = function (pos) {\n      return isBr$5(pos.getNode());\n    };\n    var hasBrAfter = function (rootNode, startNode) {\n      if (isBeforeBr(CaretPosition.after(startNode))) {\n        return true;\n      } else {\n        return nextPosition(rootNode, CaretPosition.after(startNode)).map(function (pos) {\n          return isBr$5(pos.getNode());\n        }).getOr(false);\n      }\n    };\n    var isAnchorLink = function (elm) {\n      return elm && elm.nodeName === 'A' && 'href' in elm;\n    };\n    var isInsideAnchor = function (location) {\n      return location.fold(never, isAnchorLink, isAnchorLink, never);\n    };\n    var readInlineAnchorLocation = function (editor) {\n      var isInlineTarget$1 = curry(isInlineTarget, editor);\n      var position = CaretPosition.fromRangeStart(editor.selection.getRng());\n      return readLocation(isInlineTarget$1, editor.getBody(), position).filter(isInsideAnchor);\n    };\n    var insertBrOutsideAnchor = function (editor, location) {\n      location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);\n    };\n    var insert$1 = function (editor, evt) {\n      var anchorLocation = readInlineAnchorLocation(editor);\n      if (anchorLocation.isSome()) {\n        anchorLocation.each(curry(insertBrOutsideAnchor, editor));\n      } else {\n        insertBrAtCaret(editor, evt);\n      }\n    };\n\n    var matchesSelector = function (editor, selector) {\n      return getParentBlock(editor).filter(function (parentBlock) {\n        return selector.length > 0 && is$2(SugarElement.fromDom(parentBlock), selector);\n      }).isSome();\n    };\n    var shouldInsertBr = function (editor) {\n      return matchesSelector(editor, getBrNewLineSelector(editor));\n    };\n    var shouldBlockNewLine$1 = function (editor) {\n      return matchesSelector(editor, getNoNewLineSelector(editor));\n    };\n\n    var newLineAction = Adt.generate([\n      { br: [] },\n      { block: [] },\n      { none: [] }\n    ]);\n    var shouldBlockNewLine = function (editor, _shiftKey) {\n      return shouldBlockNewLine$1(editor);\n    };\n    var isBrMode = function (requiredState) {\n      return function (editor, _shiftKey) {\n        var brMode = getForcedRootBlock(editor) === '';\n        return brMode === requiredState;\n      };\n    };\n    var inListBlock = function (requiredState) {\n      return function (editor, _shiftKey) {\n        return isListItemParentBlock(editor) === requiredState;\n      };\n    };\n    var inBlock = function (blockName, requiredState) {\n      return function (editor, _shiftKey) {\n        var state = getParentBlockName(editor) === blockName.toUpperCase();\n        return state === requiredState;\n      };\n    };\n    var inPreBlock = function (requiredState) {\n      return inBlock('pre', requiredState);\n    };\n    var inSummaryBlock = function () {\n      return inBlock('summary', true);\n    };\n    var shouldPutBrInPre = function (requiredState) {\n      return function (editor, _shiftKey) {\n        return shouldPutBrInPre$1(editor) === requiredState;\n      };\n    };\n    var inBrContext = function (editor, _shiftKey) {\n      return shouldInsertBr(editor);\n    };\n    var hasShiftKey = function (_editor, shiftKey) {\n      return shiftKey;\n    };\n    var canInsertIntoEditableRoot = function (editor) {\n      var forcedRootBlock = getForcedRootBlock(editor);\n      var rootEditable = getEditableRoot$1(editor.dom, editor.selection.getStart());\n      return rootEditable && editor.schema.isValidChild(rootEditable.nodeName, forcedRootBlock ? forcedRootBlock : 'P');\n    };\n    var match = function (predicates, action) {\n      return function (editor, shiftKey) {\n        var isMatch = foldl(predicates, function (res, p) {\n          return res && p(editor, shiftKey);\n        }, true);\n        return isMatch ? Optional.some(action) : Optional.none();\n      };\n    };\n    var getAction = function (editor, evt) {\n      return evaluateUntil([\n        match([shouldBlockNewLine], newLineAction.none()),\n        match([inSummaryBlock()], newLineAction.br()),\n        match([\n          inPreBlock(true),\n          shouldPutBrInPre(false),\n          hasShiftKey\n        ], newLineAction.br()),\n        match([\n          inPreBlock(true),\n          shouldPutBrInPre(false)\n        ], newLineAction.block()),\n        match([\n          inPreBlock(true),\n          shouldPutBrInPre(true),\n          hasShiftKey\n        ], newLineAction.block()),\n        match([\n          inPreBlock(true),\n          shouldPutBrInPre(true)\n        ], newLineAction.br()),\n        match([\n          inListBlock(true),\n          hasShiftKey\n        ], newLineAction.br()),\n        match([inListBlock(true)], newLineAction.block()),\n        match([\n          isBrMode(true),\n          hasShiftKey,\n          canInsertIntoEditableRoot\n        ], newLineAction.block()),\n        match([isBrMode(true)], newLineAction.br()),\n        match([inBrContext], newLineAction.br()),\n        match([\n          isBrMode(false),\n          hasShiftKey\n        ], newLineAction.br()),\n        match([canInsertIntoEditableRoot], newLineAction.block())\n      ], [\n        editor,\n        !!(evt && evt.shiftKey)\n      ]).getOr(newLineAction.none());\n    };\n\n    var insert = function (editor, evt) {\n      getAction(editor, evt).fold(function () {\n        insert$1(editor, evt);\n      }, function () {\n        insert$2(editor, evt);\n      }, noop);\n    };\n\n    var handleEnterKeyEvent = function (editor, event) {\n      if (event.isDefaultPrevented()) {\n        return;\n      }\n      event.preventDefault();\n      endTypingLevelIgnoreLocks(editor.undoManager);\n      editor.undoManager.transact(function () {\n        if (editor.selection.isCollapsed() === false) {\n          editor.execCommand('Delete');\n        }\n        insert(editor, event);\n      });\n    };\n    var setup$9 = function (editor) {\n      editor.on('keydown', function (event) {\n        if (event.keyCode === VK.ENTER) {\n          handleEnterKeyEvent(editor, event);\n        }\n      });\n    };\n\n    var executeKeydownOverride$1 = function (editor, caret, evt) {\n      execute([\n        {\n          keyCode: VK.END,\n          action: action(moveToLineEndPoint$1, editor, true)\n        },\n        {\n          keyCode: VK.HOME,\n          action: action(moveToLineEndPoint$1, editor, false)\n        },\n        {\n          keyCode: VK.END,\n          action: action(moveToLineEndPoint, editor, true)\n        },\n        {\n          keyCode: VK.HOME,\n          action: action(moveToLineEndPoint, editor, false)\n        },\n        {\n          keyCode: VK.END,\n          action: action(moveToLineEndPoint$2, editor, true, caret)\n        },\n        {\n          keyCode: VK.HOME,\n          action: action(moveToLineEndPoint$2, editor, false, caret)\n        }\n      ], evt).each(function (_) {\n        evt.preventDefault();\n      });\n    };\n    var setup$8 = function (editor, caret) {\n      editor.on('keydown', function (evt) {\n        if (evt.isDefaultPrevented() === false) {\n          executeKeydownOverride$1(editor, caret, evt);\n        }\n      });\n    };\n\n    var browser = detect().browser;\n    var setupIeInput = function (editor) {\n      var keypressThrotter = first(function () {\n        if (!editor.composing) {\n          normalizeNbspsInEditor(editor);\n        }\n      }, 0);\n      if (browser.isIE()) {\n        editor.on('keypress', function (_e) {\n          keypressThrotter.throttle();\n        });\n        editor.on('remove', function (_e) {\n          keypressThrotter.cancel();\n        });\n      }\n    };\n    var setup$7 = function (editor) {\n      setupIeInput(editor);\n      editor.on('input', function (e) {\n        if (e.isComposing === false) {\n          normalizeNbspsInEditor(editor);\n        }\n      });\n    };\n\n    var platform = detect();\n    var executeKeyupAction = function (editor, caret, evt) {\n      execute([\n        {\n          keyCode: VK.PAGE_UP,\n          action: action(moveToLineEndPoint$2, editor, false, caret)\n        },\n        {\n          keyCode: VK.PAGE_DOWN,\n          action: action(moveToLineEndPoint$2, editor, true, caret)\n        }\n      ], evt);\n    };\n    var stopImmediatePropagation = function (e) {\n      return e.stopImmediatePropagation();\n    };\n    var isPageUpDown = function (evt) {\n      return evt.keyCode === VK.PAGE_UP || evt.keyCode === VK.PAGE_DOWN;\n    };\n    var setNodeChangeBlocker = function (blocked, editor, block) {\n      if (block && !blocked.get()) {\n        editor.on('NodeChange', stopImmediatePropagation, true);\n      } else if (!block && blocked.get()) {\n        editor.off('NodeChange', stopImmediatePropagation);\n      }\n      blocked.set(block);\n    };\n    var setup$6 = function (editor, caret) {\n      if (platform.os.isOSX()) {\n        return;\n      }\n      var blocked = Cell(false);\n      editor.on('keydown', function (evt) {\n        if (isPageUpDown(evt)) {\n          setNodeChangeBlocker(blocked, editor, true);\n        }\n      });\n      editor.on('keyup', function (evt) {\n        if (evt.isDefaultPrevented() === false) {\n          executeKeyupAction(editor, caret, evt);\n        }\n        if (isPageUpDown(evt) && blocked.get()) {\n          setNodeChangeBlocker(blocked, editor, false);\n          editor.nodeChanged();\n        }\n      });\n    };\n\n    var insertTextAtPosition = function (text, pos) {\n      var container = pos.container();\n      var offset = pos.offset();\n      if (isText$7(container)) {\n        container.insertData(offset, text);\n        return Optional.some(CaretPosition(container, offset + text.length));\n      } else {\n        return getElementFromPosition(pos).map(function (elm) {\n          var textNode = SugarElement.fromText(text);\n          if (pos.isAtEnd()) {\n            after$3(elm, textNode);\n          } else {\n            before$4(elm, textNode);\n          }\n          return CaretPosition(textNode.dom, text.length);\n        });\n      }\n    };\n    var insertNbspAtPosition = curry(insertTextAtPosition, nbsp);\n    var insertSpaceAtPosition = curry(insertTextAtPosition, ' ');\n\n    var locationToCaretPosition = function (root) {\n      return function (location) {\n        return location.fold(function (element) {\n          return prevPosition(root.dom, CaretPosition.before(element));\n        }, function (element) {\n          return firstPositionIn(element);\n        }, function (element) {\n          return lastPositionIn(element);\n        }, function (element) {\n          return nextPosition(root.dom, CaretPosition.after(element));\n        });\n      };\n    };\n    var insertInlineBoundarySpaceOrNbsp = function (root, pos) {\n      return function (checkPos) {\n        return needsToHaveNbsp(root, checkPos) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\n      };\n    };\n    var setSelection = function (editor) {\n      return function (pos) {\n        editor.selection.setRng(pos.toRange());\n        editor.nodeChanged();\n        return true;\n      };\n    };\n    var insertSpaceOrNbspAtSelection = function (editor) {\n      var pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n      var root = SugarElement.fromDom(editor.getBody());\n      if (editor.selection.isCollapsed()) {\n        var isInlineTarget$1 = curry(isInlineTarget, editor);\n        var caretPosition = CaretPosition.fromRangeStart(editor.selection.getRng());\n        return readLocation(isInlineTarget$1, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).bind(insertInlineBoundarySpaceOrNbsp(root, pos)).exists(setSelection(editor));\n      } else {\n        return false;\n      }\n    };\n\n    var executeKeydownOverride = function (editor, evt) {\n      execute([{\n          keyCode: VK.SPACEBAR,\n          action: action(insertSpaceOrNbspAtSelection, editor)\n        }], evt).each(function (_) {\n        evt.preventDefault();\n      });\n    };\n    var setup$5 = function (editor) {\n      editor.on('keydown', function (evt) {\n        if (evt.isDefaultPrevented() === false) {\n          executeKeydownOverride(editor, evt);\n        }\n      });\n    };\n\n    var registerKeyboardOverrides = function (editor) {\n      var caret = setupSelectedState(editor);\n      setup$c(editor);\n      setup$b(editor, caret);\n      setup$a(editor, caret);\n      setup$9(editor);\n      setup$5(editor);\n      setup$7(editor);\n      setup$8(editor, caret);\n      setup$6(editor, caret);\n      return caret;\n    };\n    var setup$4 = function (editor) {\n      if (!isRtc(editor)) {\n        return registerKeyboardOverrides(editor);\n      } else {\n        return Cell(null);\n      }\n    };\n\n    var NodeChange = function () {\n      function NodeChange(editor) {\n        this.lastPath = [];\n        this.editor = editor;\n        var lastRng;\n        var self = this;\n        if (!('onselectionchange' in editor.getDoc())) {\n          editor.on('NodeChange click mouseup keyup focus', function (e) {\n            var nativeRng = editor.selection.getRng();\n            var fakeRng = {\n              startContainer: nativeRng.startContainer,\n              startOffset: nativeRng.startOffset,\n              endContainer: nativeRng.endContainer,\n              endOffset: nativeRng.endOffset\n            };\n            if (e.type === 'nodechange' || !isEq$4(fakeRng, lastRng)) {\n              editor.fire('SelectionChange');\n            }\n            lastRng = fakeRng;\n          });\n        }\n        editor.on('contextmenu', function () {\n          editor.fire('SelectionChange');\n        });\n        editor.on('SelectionChange', function () {\n          var startElm = editor.selection.getStart(true);\n          if (!startElm || !Env.range && editor.selection.isCollapsed()) {\n            return;\n          }\n          if (hasAnyRanges(editor) && !self.isSameElementPath(startElm) && editor.dom.isChildOf(startElm, editor.getBody())) {\n            editor.nodeChanged({ selectionChange: true });\n          }\n        });\n        editor.on('mouseup', function (e) {\n          if (!e.isDefaultPrevented() && hasAnyRanges(editor)) {\n            if (editor.selection.getNode().nodeName === 'IMG') {\n              Delay.setEditorTimeout(editor, function () {\n                editor.nodeChanged();\n              });\n            } else {\n              editor.nodeChanged();\n            }\n          }\n        });\n      }\n      NodeChange.prototype.nodeChanged = function (args) {\n        var selection = this.editor.selection;\n        var node, parents, root;\n        if (this.editor.initialized && selection && !shouldDisableNodeChange(this.editor) && !this.editor.mode.isReadOnly()) {\n          root = this.editor.getBody();\n          node = selection.getStart(true) || root;\n          if (node.ownerDocument !== this.editor.getDoc() || !this.editor.dom.isChildOf(node, root)) {\n            node = root;\n          }\n          parents = [];\n          this.editor.dom.getParent(node, function (node) {\n            if (node === root) {\n              return true;\n            }\n            parents.push(node);\n          });\n          args = args || {};\n          args.element = node;\n          args.parents = parents;\n          this.editor.fire('NodeChange', args);\n        }\n      };\n      NodeChange.prototype.isSameElementPath = function (startElm) {\n        var i;\n        var currentPath = this.editor.$(startElm).parentsUntil(this.editor.getBody()).add(startElm);\n        if (currentPath.length === this.lastPath.length) {\n          for (i = currentPath.length; i >= 0; i--) {\n            if (currentPath[i] !== this.lastPath[i]) {\n              break;\n            }\n          }\n          if (i === -1) {\n            this.lastPath = currentPath;\n            return true;\n          }\n        }\n        this.lastPath = currentPath;\n        return false;\n      };\n      return NodeChange;\n    }();\n\n    var preventSummaryToggle = function (editor) {\n      editor.on('click', function (e) {\n        if (editor.dom.getParent(e.target, 'details')) {\n          e.preventDefault();\n        }\n      });\n    };\n    var filterDetails = function (editor) {\n      editor.parser.addNodeFilter('details', function (elms) {\n        each$k(elms, function (details) {\n          details.attr('data-mce-open', details.attr('open'));\n          details.attr('open', 'open');\n        });\n      });\n      editor.serializer.addNodeFilter('details', function (elms) {\n        each$k(elms, function (details) {\n          var open = details.attr('data-mce-open');\n          details.attr('open', isString$1(open) ? open : null);\n          details.attr('data-mce-open', null);\n        });\n      });\n    };\n    var setup$3 = function (editor) {\n      preventSummaryToggle(editor);\n      filterDetails(editor);\n    };\n\n    var isTextBlockNode = function (node) {\n      return isElement$5(node) && isTextBlock$2(SugarElement.fromDom(node));\n    };\n    var normalizeSelection = function (editor) {\n      var rng = editor.selection.getRng();\n      var startPos = CaretPosition.fromRangeStart(rng);\n      var endPos = CaretPosition.fromRangeEnd(rng);\n      if (CaretPosition.isElementPosition(startPos)) {\n        var container = startPos.container();\n        if (isTextBlockNode(container)) {\n          firstPositionIn(container).each(function (pos) {\n            return rng.setStart(pos.container(), pos.offset());\n          });\n        }\n      }\n      if (CaretPosition.isElementPosition(endPos)) {\n        var container = startPos.container();\n        if (isTextBlockNode(container)) {\n          lastPositionIn(container).each(function (pos) {\n            return rng.setEnd(pos.container(), pos.offset());\n          });\n        }\n      }\n      editor.selection.setRng(normalize(rng));\n    };\n    var setup$2 = function (editor) {\n      editor.on('click', function (e) {\n        if (e.detail >= 3) {\n          normalizeSelection(editor);\n        }\n      });\n    };\n\n    var getAbsolutePosition = function (elm) {\n      var clientRect = elm.getBoundingClientRect();\n      var doc = elm.ownerDocument;\n      var docElem = doc.documentElement;\n      var win = doc.defaultView;\n      return {\n        top: clientRect.top + win.pageYOffset - docElem.clientTop,\n        left: clientRect.left + win.pageXOffset - docElem.clientLeft\n      };\n    };\n    var getBodyPosition = function (editor) {\n      return editor.inline ? getAbsolutePosition(editor.getBody()) : {\n        left: 0,\n        top: 0\n      };\n    };\n    var getScrollPosition = function (editor) {\n      var body = editor.getBody();\n      return editor.inline ? {\n        left: body.scrollLeft,\n        top: body.scrollTop\n      } : {\n        left: 0,\n        top: 0\n      };\n    };\n    var getBodyScroll = function (editor) {\n      var body = editor.getBody(), docElm = editor.getDoc().documentElement;\n      var inlineScroll = {\n        left: body.scrollLeft,\n        top: body.scrollTop\n      };\n      var iframeScroll = {\n        left: body.scrollLeft || docElm.scrollLeft,\n        top: body.scrollTop || docElm.scrollTop\n      };\n      return editor.inline ? inlineScroll : iframeScroll;\n    };\n    var getMousePosition = function (editor, event) {\n      if (event.target.ownerDocument !== editor.getDoc()) {\n        var iframePosition = getAbsolutePosition(editor.getContentAreaContainer());\n        var scrollPosition = getBodyScroll(editor);\n        return {\n          left: event.pageX - iframePosition.left + scrollPosition.left,\n          top: event.pageY - iframePosition.top + scrollPosition.top\n        };\n      }\n      return {\n        left: event.pageX,\n        top: event.pageY\n      };\n    };\n    var calculatePosition = function (bodyPosition, scrollPosition, mousePosition) {\n      return {\n        pageX: mousePosition.left - bodyPosition.left + scrollPosition.left,\n        pageY: mousePosition.top - bodyPosition.top + scrollPosition.top\n      };\n    };\n    var calc = function (editor, event) {\n      return calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event));\n    };\n\n    var isContentEditableFalse$1 = isContentEditableFalse$b, isContentEditableTrue$1 = isContentEditableTrue$4;\n    var isDraggable = function (rootElm, elm) {\n      return isContentEditableFalse$1(elm) && elm !== rootElm;\n    };\n    var isValidDropTarget = function (editor, targetElement, dragElement) {\n      if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {\n        return false;\n      }\n      return !isContentEditableFalse$1(targetElement);\n    };\n    var cloneElement = function (elm) {\n      var cloneElm = elm.cloneNode(true);\n      cloneElm.removeAttribute('data-mce-selected');\n      return cloneElm;\n    };\n    var createGhost = function (editor, elm, width, height) {\n      var dom = editor.dom;\n      var clonedElm = elm.cloneNode(true);\n      dom.setStyles(clonedElm, {\n        width: width,\n        height: height\n      });\n      dom.setAttrib(clonedElm, 'data-mce-selected', null);\n      var ghostElm = dom.create('div', {\n        'class': 'mce-drag-container',\n        'data-mce-bogus': 'all',\n        'unselectable': 'on',\n        'contenteditable': 'false'\n      });\n      dom.setStyles(ghostElm, {\n        position: 'absolute',\n        opacity: 0.5,\n        overflow: 'hidden',\n        border: 0,\n        padding: 0,\n        margin: 0,\n        width: width,\n        height: height\n      });\n      dom.setStyles(clonedElm, {\n        margin: 0,\n        boxSizing: 'border-box'\n      });\n      ghostElm.appendChild(clonedElm);\n      return ghostElm;\n    };\n    var appendGhostToBody = function (ghostElm, bodyElm) {\n      if (ghostElm.parentNode !== bodyElm) {\n        bodyElm.appendChild(ghostElm);\n      }\n    };\n    var moveGhost = function (ghostElm, position, width, height, maxX, maxY) {\n      var overflowX = 0, overflowY = 0;\n      ghostElm.style.left = position.pageX + 'px';\n      ghostElm.style.top = position.pageY + 'px';\n      if (position.pageX + width > maxX) {\n        overflowX = position.pageX + width - maxX;\n      }\n      if (position.pageY + height > maxY) {\n        overflowY = position.pageY + height - maxY;\n      }\n      ghostElm.style.width = width - overflowX + 'px';\n      ghostElm.style.height = height - overflowY + 'px';\n    };\n    var removeElement = function (elm) {\n      if (elm && elm.parentNode) {\n        elm.parentNode.removeChild(elm);\n      }\n    };\n    var isLeftMouseButtonPressed = function (e) {\n      return e.button === 0;\n    };\n    var applyRelPos = function (state, position) {\n      return {\n        pageX: position.pageX - state.relX,\n        pageY: position.pageY + 5\n      };\n    };\n    var start = function (state, editor) {\n      return function (e) {\n        if (isLeftMouseButtonPressed(e)) {\n          var ceElm = find$3(editor.dom.getParents(e.target), or(isContentEditableFalse$1, isContentEditableTrue$1)).getOr(null);\n          if (isDraggable(editor.getBody(), ceElm)) {\n            var elmPos = editor.dom.getPos(ceElm);\n            var bodyElm = editor.getBody();\n            var docElm = editor.getDoc().documentElement;\n            state.set({\n              element: ceElm,\n              dragging: false,\n              screenX: e.screenX,\n              screenY: e.screenY,\n              maxX: (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2,\n              maxY: (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2,\n              relX: e.pageX - elmPos.x,\n              relY: e.pageY - elmPos.y,\n              width: ceElm.offsetWidth,\n              height: ceElm.offsetHeight,\n              ghost: createGhost(editor, ceElm, ceElm.offsetWidth, ceElm.offsetHeight)\n            });\n          }\n        }\n      };\n    };\n    var move = function (state, editor) {\n      var throttledPlaceCaretAt = Delay.throttle(function (clientX, clientY) {\n        editor._selectionOverrides.hideFakeCaret();\n        editor.selection.placeCaretAt(clientX, clientY);\n      }, 0);\n      editor.on('remove', throttledPlaceCaretAt.stop);\n      return function (e) {\n        return state.on(function (state) {\n          var movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));\n          if (!state.dragging && movement > 10) {\n            var args = editor.fire('dragstart', { target: state.element });\n            if (args.isDefaultPrevented()) {\n              return;\n            }\n            state.dragging = true;\n            editor.focus();\n          }\n          if (state.dragging) {\n            var targetPos = applyRelPos(state, calc(editor, e));\n            appendGhostToBody(state.ghost, editor.getBody());\n            moveGhost(state.ghost, targetPos, state.width, state.height, state.maxX, state.maxY);\n            throttledPlaceCaretAt(e.clientX, e.clientY);\n          }\n        });\n      };\n    };\n    var getRawTarget = function (selection) {\n      var rng = selection.getSel().getRangeAt(0);\n      var startContainer = rng.startContainer;\n      return startContainer.nodeType === 3 ? startContainer.parentNode : startContainer;\n    };\n    var drop = function (state, editor) {\n      return function (e) {\n        state.on(function (state) {\n          if (state.dragging) {\n            if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {\n              var targetClone_1 = cloneElement(state.element);\n              var args = editor.fire('drop', {\n                clientX: e.clientX,\n                clientY: e.clientY\n              });\n              if (!args.isDefaultPrevented()) {\n                editor.undoManager.transact(function () {\n                  removeElement(state.element);\n                  editor.insertContent(editor.dom.getOuterHTML(targetClone_1));\n                  editor._selectionOverrides.hideFakeCaret();\n                });\n              }\n            }\n            editor.fire('dragend');\n          }\n        });\n        removeDragState(state);\n      };\n    };\n    var stop = function (state, editor) {\n      return function () {\n        state.on(function (state) {\n          if (state.dragging) {\n            editor.fire('dragend');\n          }\n        });\n        removeDragState(state);\n      };\n    };\n    var removeDragState = function (state) {\n      state.on(function (state) {\n        removeElement(state.ghost);\n      });\n      state.clear();\n    };\n    var bindFakeDragEvents = function (editor) {\n      var state = value();\n      var pageDom = DOMUtils.DOM;\n      var rootDocument = document;\n      var dragStartHandler = start(state, editor);\n      var dragHandler = move(state, editor);\n      var dropHandler = drop(state, editor);\n      var dragEndHandler = stop(state, editor);\n      editor.on('mousedown', dragStartHandler);\n      editor.on('mousemove', dragHandler);\n      editor.on('mouseup', dropHandler);\n      pageDom.bind(rootDocument, 'mousemove', dragHandler);\n      pageDom.bind(rootDocument, 'mouseup', dragEndHandler);\n      editor.on('remove', function () {\n        pageDom.unbind(rootDocument, 'mousemove', dragHandler);\n        pageDom.unbind(rootDocument, 'mouseup', dragEndHandler);\n      });\n      editor.on('keydown', function (e) {\n        if (e.keyCode === VK.ESC) {\n          dragEndHandler();\n        }\n      });\n    };\n    var blockIeDrop = function (editor) {\n      editor.on('drop', function (e) {\n        var realTarget = typeof e.clientX !== 'undefined' ? editor.getDoc().elementFromPoint(e.clientX, e.clientY) : null;\n        if (isContentEditableFalse$1(realTarget) || editor.dom.getContentEditableParent(realTarget) === 'false') {\n          e.preventDefault();\n        }\n      });\n    };\n    var blockUnsupportedFileDrop = function (editor) {\n      var preventFileDrop = function (e) {\n        if (!e.isDefaultPrevented()) {\n          var dataTransfer = e.dataTransfer;\n          if (dataTransfer && (contains$3(dataTransfer.types, 'Files') || dataTransfer.files.length > 0)) {\n            e.preventDefault();\n            if (e.type === 'drop') {\n              displayError(editor, 'Dropped file type is not supported');\n            }\n          }\n        }\n      };\n      var preventFileDropIfUIElement = function (e) {\n        if (isUIElement(editor, e.target)) {\n          preventFileDrop(e);\n        }\n      };\n      var setup = function () {\n        var pageDom = DOMUtils.DOM;\n        var dom = editor.dom;\n        var doc = document;\n        var editorRoot = editor.inline ? editor.getBody() : editor.getDoc();\n        var eventNames = [\n          'drop',\n          'dragover'\n        ];\n        each$k(eventNames, function (name) {\n          pageDom.bind(doc, name, preventFileDropIfUIElement);\n          dom.bind(editorRoot, name, preventFileDrop);\n        });\n        editor.on('remove', function () {\n          each$k(eventNames, function (name) {\n            pageDom.unbind(doc, name, preventFileDropIfUIElement);\n            dom.unbind(editorRoot, name, preventFileDrop);\n          });\n        });\n      };\n      editor.on('init', function () {\n        Delay.setEditorTimeout(editor, setup, 0);\n      });\n    };\n    var init$2 = function (editor) {\n      bindFakeDragEvents(editor);\n      blockIeDrop(editor);\n      if (shouldBlockUnsupportedDrop(editor)) {\n        blockUnsupportedFileDrop(editor);\n      }\n    };\n\n    var setup$1 = function (editor) {\n      var renderFocusCaret = first(function () {\n        if (!editor.removed && editor.getBody().contains(document.activeElement)) {\n          var rng = editor.selection.getRng();\n          if (rng.collapsed) {\n            var caretRange = renderRangeCaret(editor, rng, false);\n            editor.selection.setRng(caretRange);\n          }\n        }\n      }, 0);\n      editor.on('focus', function () {\n        renderFocusCaret.throttle();\n      });\n      editor.on('blur', function () {\n        renderFocusCaret.cancel();\n      });\n    };\n\n    var setup = function (editor) {\n      editor.on('init', function () {\n        editor.on('focusin', function (e) {\n          var target = e.target;\n          if (isMedia$2(target)) {\n            var ceRoot = getContentEditableRoot$1(editor.getBody(), target);\n            var node = isContentEditableFalse$b(ceRoot) ? ceRoot : target;\n            if (editor.selection.getNode() !== node) {\n              selectNode(editor, node).each(function (rng) {\n                return editor.selection.setRng(rng);\n              });\n            }\n          }\n        });\n      });\n    };\n\n    var isContentEditableTrue = isContentEditableTrue$4;\n    var isContentEditableFalse = isContentEditableFalse$b;\n    var getContentEditableRoot = function (editor, node) {\n      return getContentEditableRoot$1(editor.getBody(), node);\n    };\n    var SelectionOverrides = function (editor) {\n      var selection = editor.selection, dom = editor.dom;\n      var isBlock = dom.isBlock;\n      var rootNode = editor.getBody();\n      var fakeCaret = FakeCaret(editor, rootNode, isBlock, function () {\n        return hasFocus(editor);\n      });\n      var realSelectionId = 'sel-' + dom.uniqueId();\n      var elementSelectionAttr = 'data-mce-selected';\n      var selectedElement;\n      var isFakeSelectionElement = function (node) {\n        return dom.hasClass(node, 'mce-offscreen-selection');\n      };\n      var isFakeSelectionTargetElement = function (node) {\n        return node !== rootNode && (isContentEditableFalse(node) || isMedia$2(node)) && dom.isChildOf(node, rootNode);\n      };\n      var isNearFakeSelectionElement = function (pos) {\n        return isBeforeContentEditableFalse(pos) || isAfterContentEditableFalse(pos) || isBeforeMedia(pos) || isAfterMedia(pos);\n      };\n      var getRealSelectionElement = function () {\n        var container = dom.get(realSelectionId);\n        return container ? container.getElementsByTagName('*')[0] : container;\n      };\n      var setRange = function (range) {\n        if (range) {\n          selection.setRng(range);\n        }\n      };\n      var getRange = selection.getRng;\n      var showCaret = function (direction, node, before, scrollIntoView) {\n        if (scrollIntoView === void 0) {\n          scrollIntoView = true;\n        }\n        var e = editor.fire('ShowCaret', {\n          target: node,\n          direction: direction,\n          before: before\n        });\n        if (e.isDefaultPrevented()) {\n          return null;\n        }\n        if (scrollIntoView) {\n          selection.scrollIntoView(node, direction === -1);\n        }\n        return fakeCaret.show(before, node);\n      };\n      var showBlockCaretContainer = function (blockCaretContainer) {\n        if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n          showCaretContainerBlock(blockCaretContainer);\n          setRange(getRange());\n          selection.scrollIntoView(blockCaretContainer);\n        }\n      };\n      var registerEvents = function () {\n        editor.on('mouseup', function (e) {\n          var range = getRange();\n          if (range.collapsed && isXYInContentArea(editor, e.clientX, e.clientY)) {\n            renderCaretAtRange(editor, range, false).each(setRange);\n          }\n        });\n        editor.on('click', function (e) {\n          var contentEditableRoot = getContentEditableRoot(editor, e.target);\n          if (contentEditableRoot) {\n            if (isContentEditableFalse(contentEditableRoot)) {\n              e.preventDefault();\n              editor.focus();\n            }\n            if (isContentEditableTrue(contentEditableRoot)) {\n              if (dom.isChildOf(contentEditableRoot, selection.getNode())) {\n                removeElementSelection();\n              }\n            }\n          }\n        });\n        editor.on('blur NewBlock', removeElementSelection);\n        editor.on('ResizeWindow FullscreenStateChanged', fakeCaret.reposition);\n        var hasNormalCaretPosition = function (elm) {\n          var start = elm.firstChild;\n          if (isNullable(start)) {\n            return false;\n          }\n          var startPos = CaretPosition.before(start);\n          if (isBr$5(startPos.getNode()) && elm.childNodes.length === 1) {\n            return !isNearFakeSelectionElement(startPos);\n          } else {\n            var caretWalker = CaretWalker(elm);\n            var newPos = caretWalker.next(startPos);\n            return newPos && !isNearFakeSelectionElement(newPos);\n          }\n        };\n        var isInSameBlock = function (node1, node2) {\n          var block1 = dom.getParent(node1, isBlock);\n          var block2 = dom.getParent(node2, isBlock);\n          return block1 === block2;\n        };\n        var hasBetterMouseTarget = function (targetNode, caretNode) {\n          var targetBlock = dom.getParent(targetNode, isBlock);\n          var caretBlock = dom.getParent(caretNode, isBlock);\n          if (isNullable(targetBlock)) {\n            return false;\n          }\n          if (targetNode !== caretBlock && dom.isChildOf(targetBlock, caretBlock) && isContentEditableFalse(getContentEditableRoot(editor, targetBlock)) === false) {\n            return true;\n          }\n          return !dom.isChildOf(caretBlock, targetBlock) && !isInSameBlock(targetBlock, caretBlock) && hasNormalCaretPosition(targetBlock);\n        };\n        editor.on('tap', function (e) {\n          var targetElm = e.target;\n          var contentEditableRoot = getContentEditableRoot(editor, targetElm);\n          if (isContentEditableFalse(contentEditableRoot)) {\n            e.preventDefault();\n            selectNode(editor, contentEditableRoot).each(setElementSelection);\n          } else if (isFakeSelectionTargetElement(targetElm)) {\n            selectNode(editor, targetElm).each(setElementSelection);\n          }\n        }, true);\n        editor.on('mousedown', function (e) {\n          var targetElm = e.target;\n          if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !dom.isChildOf(targetElm, rootNode)) {\n            return;\n          }\n          if (isXYInContentArea(editor, e.clientX, e.clientY) === false) {\n            return;\n          }\n          var contentEditableRoot = getContentEditableRoot(editor, targetElm);\n          if (contentEditableRoot) {\n            if (isContentEditableFalse(contentEditableRoot)) {\n              e.preventDefault();\n              selectNode(editor, contentEditableRoot).each(setElementSelection);\n            } else {\n              removeElementSelection();\n              if (!(isContentEditableTrue(contentEditableRoot) && e.shiftKey) && !isXYWithinRange(e.clientX, e.clientY, selection.getRng())) {\n                hideFakeCaret();\n                selection.placeCaretAt(e.clientX, e.clientY);\n              }\n            }\n          } else if (isFakeSelectionTargetElement(targetElm)) {\n            selectNode(editor, targetElm).each(setElementSelection);\n          } else if (isFakeCaretTarget(targetElm) === false) {\n            removeElementSelection();\n            hideFakeCaret();\n            var fakeCaretInfo = closestFakeCaret(rootNode, e.clientX, e.clientY);\n            if (fakeCaretInfo) {\n              if (!hasBetterMouseTarget(targetElm, fakeCaretInfo.node)) {\n                e.preventDefault();\n                var range = showCaret(1, fakeCaretInfo.node, fakeCaretInfo.before, false);\n                setRange(range);\n                editor.getBody().focus();\n              }\n            }\n          }\n        });\n        editor.on('keypress', function (e) {\n          if (VK.modifierPressed(e)) {\n            return;\n          }\n          if (isContentEditableFalse(selection.getNode())) {\n            e.preventDefault();\n          }\n        });\n        editor.on('GetSelectionRange', function (e) {\n          var rng = e.range;\n          if (selectedElement) {\n            if (!selectedElement.parentNode) {\n              selectedElement = null;\n              return;\n            }\n            rng = rng.cloneRange();\n            rng.selectNode(selectedElement);\n            e.range = rng;\n          }\n        });\n        editor.on('SetSelectionRange', function (e) {\n          e.range = normalizeShortEndedElementSelection(e.range);\n          var rng = setElementSelection(e.range, e.forward);\n          if (rng) {\n            e.range = rng;\n          }\n        });\n        var isPasteBin = function (node) {\n          return node.id === 'mcepastebin';\n        };\n        editor.on('AfterSetSelectionRange', function (e) {\n          var rng = e.range;\n          var parentNode = rng.startContainer.parentNode;\n          if (!isRangeInCaretContainer(rng) && !isPasteBin(parentNode)) {\n            hideFakeCaret();\n          }\n          if (!isFakeSelectionElement(parentNode)) {\n            removeElementSelection();\n          }\n        });\n        editor.on('copy', function (e) {\n          var clipboardData = e.clipboardData;\n          if (!e.isDefaultPrevented() && e.clipboardData && !Env.ie) {\n            var realSelectionElement = getRealSelectionElement();\n            if (realSelectionElement) {\n              e.preventDefault();\n              clipboardData.clearData();\n              clipboardData.setData('text/html', realSelectionElement.outerHTML);\n              clipboardData.setData('text/plain', realSelectionElement.outerText || realSelectionElement.innerText);\n            }\n          }\n        });\n        init$2(editor);\n        setup$1(editor);\n        setup(editor);\n      };\n      var isWithinCaretContainer = function (node) {\n        return isCaretContainer$2(node) || startsWithCaretContainer$1(node) || endsWithCaretContainer$1(node);\n      };\n      var isRangeInCaretContainer = function (rng) {\n        return isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);\n      };\n      var normalizeShortEndedElementSelection = function (rng) {\n        var shortEndedElements = editor.schema.getShortEndedElements();\n        var newRng = dom.createRng();\n        var startContainer = rng.startContainer;\n        var startOffset = rng.startOffset;\n        var endContainer = rng.endContainer;\n        var endOffset = rng.endOffset;\n        if (has$2(shortEndedElements, startContainer.nodeName.toLowerCase())) {\n          if (startOffset === 0) {\n            newRng.setStartBefore(startContainer);\n          } else {\n            newRng.setStartAfter(startContainer);\n          }\n        } else {\n          newRng.setStart(startContainer, startOffset);\n        }\n        if (has$2(shortEndedElements, endContainer.nodeName.toLowerCase())) {\n          if (endOffset === 0) {\n            newRng.setEndBefore(endContainer);\n          } else {\n            newRng.setEndAfter(endContainer);\n          }\n        } else {\n          newRng.setEnd(endContainer, endOffset);\n        }\n        return newRng;\n      };\n      var setupOffscreenSelection = function (node, targetClone, origTargetClone) {\n        var $ = editor.$;\n        var $realSelectionContainer = descendant(SugarElement.fromDom(editor.getBody()), '#' + realSelectionId).fold(function () {\n          return $([]);\n        }, function (elm) {\n          return $([elm.dom]);\n        });\n        if ($realSelectionContainer.length === 0) {\n          $realSelectionContainer = $('<div data-mce-bogus=\"all\" class=\"mce-offscreen-selection\"></div>').attr('id', realSelectionId);\n          $realSelectionContainer.appendTo(editor.getBody());\n        }\n        var newRange = dom.createRng();\n        if (targetClone === origTargetClone && Env.ie) {\n          $realSelectionContainer.empty().append('<p style=\"font-size: 0\" data-mce-bogus=\"all\">\\xA0</p>').append(targetClone);\n          newRange.setStartAfter($realSelectionContainer[0].firstChild.firstChild);\n          newRange.setEndAfter(targetClone);\n        } else {\n          $realSelectionContainer.empty().append(nbsp).append(targetClone).append(nbsp);\n          newRange.setStart($realSelectionContainer[0].firstChild, 1);\n          newRange.setEnd($realSelectionContainer[0].lastChild, 0);\n        }\n        $realSelectionContainer.css({ top: dom.getPos(node, editor.getBody()).y });\n        $realSelectionContainer[0].focus();\n        var sel = selection.getSel();\n        sel.removeAllRanges();\n        sel.addRange(newRange);\n        return newRange;\n      };\n      var selectElement = function (elm) {\n        var targetClone = elm.cloneNode(true);\n        var e = editor.fire('ObjectSelected', {\n          target: elm,\n          targetClone: targetClone\n        });\n        if (e.isDefaultPrevented()) {\n          return null;\n        }\n        var range = setupOffscreenSelection(elm, e.targetClone, targetClone);\n        var nodeElm = SugarElement.fromDom(elm);\n        each$k(descendants(SugarElement.fromDom(editor.getBody()), '*[data-mce-selected]'), function (elm) {\n          if (!eq(nodeElm, elm)) {\n            remove$6(elm, elementSelectionAttr);\n          }\n        });\n        if (!dom.getAttrib(elm, elementSelectionAttr)) {\n          elm.setAttribute(elementSelectionAttr, '1');\n        }\n        selectedElement = elm;\n        hideFakeCaret();\n        return range;\n      };\n      var setElementSelection = function (range, forward) {\n        if (!range) {\n          return null;\n        }\n        if (range.collapsed) {\n          if (!isRangeInCaretContainer(range)) {\n            var dir = forward ? 1 : -1;\n            var caretPosition = getNormalizedRangeEndPoint(dir, rootNode, range);\n            var beforeNode = caretPosition.getNode(!forward);\n            if (isFakeCaretTarget(beforeNode)) {\n              return showCaret(dir, beforeNode, forward ? !caretPosition.isAtEnd() : false, false);\n            }\n            var afterNode = caretPosition.getNode(forward);\n            if (isFakeCaretTarget(afterNode)) {\n              return showCaret(dir, afterNode, forward ? false : !caretPosition.isAtEnd(), false);\n            }\n          }\n          return null;\n        }\n        var startContainer = range.startContainer;\n        var startOffset = range.startOffset;\n        var endOffset = range.endOffset;\n        if (startContainer.nodeType === 3 && startOffset === 0 && isContentEditableFalse(startContainer.parentNode)) {\n          startContainer = startContainer.parentNode;\n          startOffset = dom.nodeIndex(startContainer);\n          startContainer = startContainer.parentNode;\n        }\n        if (startContainer.nodeType !== 1) {\n          return null;\n        }\n        if (endOffset === startOffset + 1 && startContainer === range.endContainer) {\n          var node = startContainer.childNodes[startOffset];\n          if (isFakeSelectionTargetElement(node)) {\n            return selectElement(node);\n          }\n        }\n        return null;\n      };\n      var removeElementSelection = function () {\n        if (selectedElement) {\n          selectedElement.removeAttribute(elementSelectionAttr);\n        }\n        descendant(SugarElement.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$7);\n        selectedElement = null;\n      };\n      var destroy = function () {\n        fakeCaret.destroy();\n        selectedElement = null;\n      };\n      var hideFakeCaret = function () {\n        fakeCaret.hide();\n      };\n      if (Env.ceFalse && !isRtc(editor)) {\n        registerEvents();\n      }\n      return {\n        showCaret: showCaret,\n        showBlockCaretContainer: showBlockCaretContainer,\n        hideFakeCaret: hideFakeCaret,\n        destroy: destroy\n      };\n    };\n\n    var Quirks = function (editor) {\n      var each = Tools.each;\n      var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, parser = editor.parser;\n      var isGecko = Env.gecko, isIE = Env.ie, isWebKit = Env.webkit;\n      var mceInternalUrlPrefix = 'data:text/mce-internal,';\n      var mceInternalDataType = isIE ? 'Text' : 'URL';\n      var setEditorCommandState = function (cmd, state) {\n        try {\n          editor.getDoc().execCommand(cmd, false, state);\n        } catch (ex) {\n        }\n      };\n      var isDefaultPrevented = function (e) {\n        return e.isDefaultPrevented();\n      };\n      var setMceInternalContent = function (e) {\n        var selectionHtml, internalContent;\n        if (e.dataTransfer) {\n          if (editor.selection.isCollapsed() && e.target.tagName === 'IMG') {\n            selection.select(e.target);\n          }\n          selectionHtml = editor.selection.getContent();\n          if (selectionHtml.length > 0) {\n            internalContent = mceInternalUrlPrefix + escape(editor.id) + ',' + escape(selectionHtml);\n            e.dataTransfer.setData(mceInternalDataType, internalContent);\n          }\n        }\n      };\n      var getMceInternalContent = function (e) {\n        var internalContent;\n        if (e.dataTransfer) {\n          internalContent = e.dataTransfer.getData(mceInternalDataType);\n          if (internalContent && internalContent.indexOf(mceInternalUrlPrefix) >= 0) {\n            internalContent = internalContent.substr(mceInternalUrlPrefix.length).split(',');\n            return {\n              id: unescape(internalContent[0]),\n              html: unescape(internalContent[1])\n            };\n          }\n        }\n        return null;\n      };\n      var insertClipboardContents = function (content, internal) {\n        if (editor.queryCommandSupported('mceInsertClipboardContent')) {\n          editor.execCommand('mceInsertClipboardContent', false, {\n            content: content,\n            internal: internal\n          });\n        } else {\n          editor.execCommand('mceInsertContent', false, content);\n        }\n      };\n      var emptyEditorWhenDeleting = function () {\n        var serializeRng = function (rng) {\n          var body = dom.create('body');\n          var contents = rng.cloneContents();\n          body.appendChild(contents);\n          return selection.serializer.serialize(body, { format: 'html' });\n        };\n        var allContentsSelected = function (rng) {\n          var selection = serializeRng(rng);\n          var allRng = dom.createRng();\n          allRng.selectNode(editor.getBody());\n          var allSelection = serializeRng(allRng);\n          return selection === allSelection;\n        };\n        editor.on('keydown', function (e) {\n          var keyCode = e.keyCode;\n          var isCollapsed, body;\n          if (!isDefaultPrevented(e) && (keyCode === DELETE || keyCode === BACKSPACE)) {\n            isCollapsed = editor.selection.isCollapsed();\n            body = editor.getBody();\n            if (isCollapsed && !dom.isEmpty(body)) {\n              return;\n            }\n            if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) {\n              return;\n            }\n            e.preventDefault();\n            editor.setContent('');\n            if (body.firstChild && dom.isBlock(body.firstChild)) {\n              editor.selection.setCursorLocation(body.firstChild, 0);\n            } else {\n              editor.selection.setCursorLocation(body, 0);\n            }\n            editor.nodeChanged();\n          }\n        });\n      };\n      var selectAll = function () {\n        editor.shortcuts.add('meta+a', null, 'SelectAll');\n      };\n      var documentElementEditingFocus = function () {\n        if (!editor.inline) {\n          dom.bind(editor.getDoc(), 'mousedown mouseup', function (e) {\n            var rng;\n            if (e.target === editor.getDoc().documentElement) {\n              rng = selection.getRng();\n              editor.getBody().focus();\n              if (e.type === 'mousedown') {\n                if (isCaretContainer$2(rng.startContainer)) {\n                  return;\n                }\n                selection.placeCaretAt(e.clientX, e.clientY);\n              } else {\n                selection.setRng(rng);\n              }\n            }\n          });\n        }\n      };\n      var removeHrOnBackspace = function () {\n        editor.on('keydown', function (e) {\n          if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n            if (!editor.getBody().getElementsByTagName('hr').length) {\n              return;\n            }\n            if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n              var node = selection.getNode();\n              var previousSibling = node.previousSibling;\n              if (node.nodeName === 'HR') {\n                dom.remove(node);\n                e.preventDefault();\n                return;\n              }\n              if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'hr') {\n                dom.remove(previousSibling);\n                e.preventDefault();\n              }\n            }\n          }\n        });\n      };\n      var focusBody = function () {\n        if (!Range.prototype.getClientRects) {\n          editor.on('mousedown', function (e) {\n            if (!isDefaultPrevented(e) && e.target.nodeName === 'HTML') {\n              var body_1 = editor.getBody();\n              body_1.blur();\n              Delay.setEditorTimeout(editor, function () {\n                body_1.focus();\n              });\n            }\n          });\n        }\n      };\n      var selectControlElements = function () {\n        editor.on('click', function (e) {\n          var target = e.target;\n          if (/^(IMG|HR)$/.test(target.nodeName) && dom.getContentEditableParent(target) !== 'false') {\n            e.preventDefault();\n            editor.selection.select(target);\n            editor.nodeChanged();\n          }\n          if (target.nodeName === 'A' && dom.hasClass(target, 'mce-item-anchor')) {\n            e.preventDefault();\n            selection.select(target);\n          }\n        });\n      };\n      var removeStylesWhenDeletingAcrossBlockElements = function () {\n        var getAttributeApplyFunction = function () {\n          var template = dom.getAttribs(selection.getStart().cloneNode(false));\n          return function () {\n            var target = selection.getStart();\n            if (target !== editor.getBody()) {\n              dom.setAttrib(target, 'style', null);\n              each(template, function (attr) {\n                target.setAttributeNode(attr.cloneNode(true));\n              });\n            }\n          };\n        };\n        var isSelectionAcrossElements = function () {\n          return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) !== dom.getParent(selection.getEnd(), dom.isBlock);\n        };\n        editor.on('keypress', function (e) {\n          var applyAttributes;\n          if (!isDefaultPrevented(e) && (e.keyCode === 8 || e.keyCode === 46) && isSelectionAcrossElements()) {\n            applyAttributes = getAttributeApplyFunction();\n            editor.getDoc().execCommand('delete', false, null);\n            applyAttributes();\n            e.preventDefault();\n            return false;\n          }\n        });\n        dom.bind(editor.getDoc(), 'cut', function (e) {\n          var applyAttributes;\n          if (!isDefaultPrevented(e) && isSelectionAcrossElements()) {\n            applyAttributes = getAttributeApplyFunction();\n            Delay.setEditorTimeout(editor, function () {\n              applyAttributes();\n            });\n          }\n        });\n      };\n      var disableBackspaceIntoATable = function () {\n        editor.on('keydown', function (e) {\n          if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n            if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n              var previousSibling = selection.getNode().previousSibling;\n              if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'table') {\n                e.preventDefault();\n                return false;\n              }\n            }\n          }\n        });\n      };\n      var removeBlockQuoteOnBackSpace = function () {\n        editor.on('keydown', function (e) {\n          var rng, parent;\n          if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {\n            return;\n          }\n          rng = selection.getRng();\n          var container = rng.startContainer;\n          var offset = rng.startOffset;\n          var root = dom.getRoot();\n          parent = container;\n          if (!rng.collapsed || offset !== 0) {\n            return;\n          }\n          while (parent && parent.parentNode && parent.parentNode.firstChild === parent && parent.parentNode !== root) {\n            parent = parent.parentNode;\n          }\n          if (parent.tagName === 'BLOCKQUOTE') {\n            editor.formatter.toggle('blockquote', null, parent);\n            rng = dom.createRng();\n            rng.setStart(container, 0);\n            rng.setEnd(container, 0);\n            selection.setRng(rng);\n          }\n        });\n      };\n      var setGeckoEditingOptions = function () {\n        var setOpts = function () {\n          setEditorCommandState('StyleWithCSS', false);\n          setEditorCommandState('enableInlineTableEditing', false);\n          if (!getObjectResizing(editor)) {\n            setEditorCommandState('enableObjectResizing', false);\n          }\n        };\n        if (!isReadOnly$1(editor)) {\n          editor.on('BeforeExecCommand mousedown', setOpts);\n        }\n      };\n      var addBrAfterLastLinks = function () {\n        var fixLinks = function () {\n          each(dom.select('a'), function (node) {\n            var parentNode = node.parentNode;\n            var root = dom.getRoot();\n            if (parentNode.lastChild === node) {\n              while (parentNode && !dom.isBlock(parentNode)) {\n                if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) {\n                  return;\n                }\n                parentNode = parentNode.parentNode;\n              }\n              dom.add(parentNode, 'br', { 'data-mce-bogus': 1 });\n            }\n          });\n        };\n        editor.on('SetContent ExecCommand', function (e) {\n          if (e.type === 'setcontent' || e.command === 'mceInsertLink') {\n            fixLinks();\n          }\n        });\n      };\n      var setDefaultBlockType = function () {\n        if (getForcedRootBlock(editor)) {\n          editor.on('init', function () {\n            setEditorCommandState('DefaultParagraphSeparator', getForcedRootBlock(editor));\n          });\n        }\n      };\n      var normalizeSelection = function () {\n        editor.on('keyup focusin mouseup', function (e) {\n          if (!VK.modifierPressed(e)) {\n            selection.normalize();\n          }\n        }, true);\n      };\n      var showBrokenImageIcon = function () {\n        editor.contentStyles.push('img:-moz-broken {' + '-moz-force-broken-image-icon:1;' + 'min-width:24px;' + 'min-height:24px' + '}');\n      };\n      var restoreFocusOnKeyDown = function () {\n        if (!editor.inline) {\n          editor.on('keydown', function () {\n            if (document.activeElement === document.body) {\n              editor.getWin().focus();\n            }\n          });\n        }\n      };\n      var bodyHeight = function () {\n        if (!editor.inline) {\n          editor.contentStyles.push('body {min-height: 150px}');\n          editor.on('click', function (e) {\n            var rng;\n            if (e.target.nodeName === 'HTML') {\n              if (Env.ie > 11) {\n                editor.getBody().focus();\n                return;\n              }\n              rng = editor.selection.getRng();\n              editor.getBody().focus();\n              editor.selection.setRng(rng);\n              editor.selection.normalize();\n              editor.nodeChanged();\n            }\n          });\n        }\n      };\n      var blockCmdArrowNavigation = function () {\n        if (Env.mac) {\n          editor.on('keydown', function (e) {\n            if (VK.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) {\n              e.preventDefault();\n              var selection_1 = editor.selection.getSel();\n              selection_1.modify('move', e.keyCode === 37 ? 'backward' : 'forward', 'lineboundary');\n            }\n          });\n        }\n      };\n      var disableAutoUrlDetect = function () {\n        setEditorCommandState('AutoUrlDetect', false);\n      };\n      var tapLinksAndImages = function () {\n        editor.on('click', function (e) {\n          var elm = e.target;\n          do {\n            if (elm.tagName === 'A') {\n              e.preventDefault();\n              return;\n            }\n          } while (elm = elm.parentNode);\n        });\n        editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}');\n      };\n      var blockFormSubmitInsideEditor = function () {\n        editor.on('init', function () {\n          editor.dom.bind(editor.getBody(), 'submit', function (e) {\n            e.preventDefault();\n          });\n        });\n      };\n      var removeAppleInterchangeBrs = function () {\n        parser.addNodeFilter('br', function (nodes) {\n          var i = nodes.length;\n          while (i--) {\n            if (nodes[i].attr('class') === 'Apple-interchange-newline') {\n              nodes[i].remove();\n            }\n          }\n        });\n      };\n      var ieInternalDragAndDrop = function () {\n        editor.on('dragstart', function (e) {\n          setMceInternalContent(e);\n        });\n        editor.on('drop', function (e) {\n          if (!isDefaultPrevented(e)) {\n            var internalContent = getMceInternalContent(e);\n            if (internalContent && internalContent.id !== editor.id) {\n              e.preventDefault();\n              var rng = fromPoint(e.x, e.y, editor.getDoc());\n              selection.setRng(rng);\n              insertClipboardContents(internalContent.html, true);\n            }\n          }\n        });\n      };\n      var refreshContentEditable = noop;\n      var isHidden = function () {\n        if (!isGecko || editor.removed) {\n          return false;\n        }\n        var sel = editor.selection.getSel();\n        return !sel || !sel.rangeCount || sel.rangeCount === 0;\n      };\n      var setupRtc = function () {\n        if (isWebKit) {\n          documentElementEditingFocus();\n          selectControlElements();\n          blockFormSubmitInsideEditor();\n          selectAll();\n          if (Env.iOS) {\n            restoreFocusOnKeyDown();\n            bodyHeight();\n            tapLinksAndImages();\n          }\n        }\n        if (isGecko) {\n          focusBody();\n          setGeckoEditingOptions();\n          showBrokenImageIcon();\n          blockCmdArrowNavigation();\n        }\n      };\n      var setup = function () {\n        removeBlockQuoteOnBackSpace();\n        emptyEditorWhenDeleting();\n        if (!Env.windowsPhone) {\n          normalizeSelection();\n        }\n        if (isWebKit) {\n          documentElementEditingFocus();\n          selectControlElements();\n          setDefaultBlockType();\n          blockFormSubmitInsideEditor();\n          disableBackspaceIntoATable();\n          removeAppleInterchangeBrs();\n          if (Env.iOS) {\n            restoreFocusOnKeyDown();\n            bodyHeight();\n            tapLinksAndImages();\n          } else {\n            selectAll();\n          }\n        }\n        if (Env.ie >= 11) {\n          bodyHeight();\n          disableBackspaceIntoATable();\n        }\n        if (Env.ie) {\n          selectAll();\n          disableAutoUrlDetect();\n          ieInternalDragAndDrop();\n        }\n        if (isGecko) {\n          removeHrOnBackspace();\n          focusBody();\n          removeStylesWhenDeletingAcrossBlockElements();\n          setGeckoEditingOptions();\n          addBrAfterLastLinks();\n          showBrokenImageIcon();\n          blockCmdArrowNavigation();\n          disableBackspaceIntoATable();\n        }\n      };\n      if (isRtc(editor)) {\n        setupRtc();\n      } else {\n        setup();\n      }\n      return {\n        refreshContentEditable: refreshContentEditable,\n        isHidden: isHidden\n      };\n    };\n\n    var DOM$6 = DOMUtils.DOM;\n    var appendStyle = function (editor, text) {\n      var body = SugarElement.fromDom(editor.getBody());\n      var container = getStyleContainer(getRootNode(body));\n      var style = SugarElement.fromTag('style');\n      set$1(style, 'type', 'text/css');\n      append$1(style, SugarElement.fromText(text));\n      append$1(container, style);\n      editor.on('remove', function () {\n        remove$7(style);\n      });\n    };\n    var getRootName = function (editor) {\n      return editor.inline ? editor.getElement().nodeName.toLowerCase() : undefined;\n    };\n    var removeUndefined = function (obj) {\n      return filter$3(obj, function (v) {\n        return isUndefined(v) === false;\n      });\n    };\n    var mkSchemaSettings = function (editor) {\n      var settings = editor.settings;\n      return removeUndefined({\n        block_elements: settings.block_elements,\n        boolean_attributes: settings.boolean_attributes,\n        custom_elements: settings.custom_elements,\n        extended_valid_elements: settings.extended_valid_elements,\n        invalid_elements: settings.invalid_elements,\n        invalid_styles: settings.invalid_styles,\n        move_caret_before_on_enter_elements: settings.move_caret_before_on_enter_elements,\n        non_empty_elements: settings.non_empty_elements,\n        schema: settings.schema,\n        self_closing_elements: settings.self_closing_elements,\n        short_ended_elements: settings.short_ended_elements,\n        special: settings.special,\n        text_block_elements: settings.text_block_elements,\n        text_inline_elements: settings.text_inline_elements,\n        valid_children: settings.valid_children,\n        valid_classes: settings.valid_classes,\n        valid_elements: settings.valid_elements,\n        valid_styles: settings.valid_styles,\n        verify_html: settings.verify_html,\n        whitespace_elements: settings.whitespace_elements,\n        padd_empty_block_inline_children: settings.format_empty_lines\n      });\n    };\n    var mkParserSettings = function (editor) {\n      var settings = editor.settings;\n      var blobCache = editor.editorUpload.blobCache;\n      return removeUndefined({\n        allow_conditional_comments: settings.allow_conditional_comments,\n        allow_html_data_urls: settings.allow_html_data_urls,\n        allow_svg_data_urls: settings.allow_svg_data_urls,\n        allow_html_in_named_anchor: settings.allow_html_in_named_anchor,\n        allow_script_urls: settings.allow_script_urls,\n        allow_unsafe_link_target: settings.allow_unsafe_link_target,\n        convert_fonts_to_spans: settings.convert_fonts_to_spans,\n        fix_list_elements: settings.fix_list_elements,\n        font_size_legacy_values: settings.font_size_legacy_values,\n        forced_root_block: settings.forced_root_block,\n        forced_root_block_attrs: settings.forced_root_block_attrs,\n        padd_empty_with_br: settings.padd_empty_with_br,\n        preserve_cdata: settings.preserve_cdata,\n        remove_trailing_brs: settings.remove_trailing_brs,\n        inline_styles: settings.inline_styles,\n        root_name: getRootName(editor),\n        validate: true,\n        blob_cache: blobCache,\n        document: editor.getDoc(),\n        images_dataimg_filter: settings.images_dataimg_filter\n      });\n    };\n    var mkSerializerSettings = function (editor) {\n      var settings = editor.settings;\n      return __assign(__assign(__assign({}, mkParserSettings(editor)), mkSchemaSettings(editor)), removeUndefined({\n        url_converter: settings.url_converter,\n        url_converter_scope: settings.url_converter_scope,\n        element_format: settings.element_format,\n        entities: settings.entities,\n        entity_encoding: settings.entity_encoding,\n        indent: settings.indent,\n        indent_after: settings.indent_after,\n        indent_before: settings.indent_before\n      }));\n    };\n    var createParser = function (editor) {\n      var parser = DomParser(mkParserSettings(editor), editor.schema);\n      parser.addAttributeFilter('src,href,style,tabindex', function (nodes, name) {\n        var i = nodes.length, node, value;\n        var dom = editor.dom;\n        var internalName = 'data-mce-' + name;\n        while (i--) {\n          node = nodes[i];\n          value = node.attr(name);\n          if (value && !node.attr(internalName)) {\n            if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) {\n              continue;\n            }\n            if (name === 'style') {\n              value = dom.serializeStyle(dom.parseStyle(value), node.name);\n              if (!value.length) {\n                value = null;\n              }\n              node.attr(internalName, value);\n              node.attr(name, value);\n            } else if (name === 'tabindex') {\n              node.attr(internalName, value);\n              node.attr(name, null);\n            } else {\n              node.attr(internalName, editor.convertURL(value, name, node.name));\n            }\n          }\n        }\n      });\n      parser.addNodeFilter('script', function (nodes) {\n        var i = nodes.length;\n        while (i--) {\n          var node = nodes[i];\n          var type = node.attr('type') || 'no/type';\n          if (type.indexOf('mce-') !== 0) {\n            node.attr('type', 'mce-' + type);\n          }\n        }\n      });\n      if (editor.settings.preserve_cdata) {\n        parser.addNodeFilter('#cdata', function (nodes) {\n          var i = nodes.length;\n          while (i--) {\n            var node = nodes[i];\n            node.type = 8;\n            node.name = '#comment';\n            node.value = '[CDATA[' + editor.dom.encode(node.value) + ']]';\n          }\n        });\n      }\n      parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function (nodes) {\n        var i = nodes.length;\n        var nonEmptyElements = editor.schema.getNonEmptyElements();\n        while (i--) {\n          var node = nodes[i];\n          if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {\n            node.append(new AstNode('br', 1)).shortEnded = true;\n          }\n        }\n      });\n      return parser;\n    };\n    var autoFocus = function (editor) {\n      if (editor.settings.auto_focus) {\n        Delay.setEditorTimeout(editor, function () {\n          var focusEditor;\n          if (editor.settings.auto_focus === true) {\n            focusEditor = editor;\n          } else {\n            focusEditor = editor.editorManager.get(editor.settings.auto_focus);\n          }\n          if (!focusEditor.destroyed) {\n            focusEditor.focus();\n          }\n        }, 100);\n      }\n    };\n    var moveSelectionToFirstCaretPosition = function (editor) {\n      var root = editor.dom.getRoot();\n      if (!editor.inline && (!hasAnyRanges(editor) || editor.selection.getStart(true) === root)) {\n        firstPositionIn(root).each(function (pos) {\n          var node = pos.getNode();\n          var caretPos = isTable$3(node) ? firstPositionIn(node).getOr(pos) : pos;\n          if (Env.browser.isIE()) {\n            storeNative(editor, caretPos.toRange());\n          } else {\n            editor.selection.setRng(caretPos.toRange());\n          }\n        });\n      }\n    };\n    var initEditor = function (editor) {\n      editor.bindPendingEventDelegates();\n      editor.initialized = true;\n      fireInit(editor);\n      editor.focus(true);\n      moveSelectionToFirstCaretPosition(editor);\n      editor.nodeChanged({ initial: true });\n      editor.execCallback('init_instance_callback', editor);\n      autoFocus(editor);\n    };\n    var getStyleSheetLoader$1 = function (editor) {\n      return editor.inline ? editor.ui.styleSheetLoader : editor.dom.styleSheetLoader;\n    };\n    var makeStylesheetLoadingPromises = function (editor, css, framedFonts) {\n      var promises = [new promiseObj(function (resolve, reject) {\n          return getStyleSheetLoader$1(editor).loadAll(css, resolve, reject);\n        })];\n      if (editor.inline) {\n        return promises;\n      } else {\n        return promises.concat([new promiseObj(function (resolve, reject) {\n            return editor.ui.styleSheetLoader.loadAll(framedFonts, resolve, reject);\n          })]);\n      }\n    };\n    var loadContentCss = function (editor) {\n      var styleSheetLoader = getStyleSheetLoader$1(editor);\n      var fontCss = getFontCss(editor);\n      var css = editor.contentCSS;\n      var removeCss = function () {\n        styleSheetLoader.unloadAll(css);\n        if (!editor.inline) {\n          editor.ui.styleSheetLoader.unloadAll(fontCss);\n        }\n      };\n      var loaded = function () {\n        if (editor.removed) {\n          removeCss();\n        } else {\n          editor.on('remove', removeCss);\n        }\n      };\n      if (editor.contentStyles.length > 0) {\n        var contentCssText_1 = '';\n        Tools.each(editor.contentStyles, function (style) {\n          contentCssText_1 += style + '\\r\\n';\n        });\n        editor.dom.addStyle(contentCssText_1);\n      }\n      var allStylesheets = promiseObj.all(makeStylesheetLoadingPromises(editor, css, fontCss)).then(loaded).catch(loaded);\n      if (editor.settings.content_style) {\n        appendStyle(editor, editor.settings.content_style);\n      }\n      return allStylesheets;\n    };\n    var preInit = function (editor) {\n      var settings = editor.settings, doc = editor.getDoc(), body = editor.getBody();\n      firePreInit(editor);\n      if (!settings.browser_spellcheck && !settings.gecko_spellcheck) {\n        doc.body.spellcheck = false;\n        DOM$6.setAttrib(body, 'spellcheck', 'false');\n      }\n      editor.quirks = Quirks(editor);\n      firePostRender(editor);\n      var directionality = getDirectionality(editor);\n      if (directionality !== undefined) {\n        body.dir = directionality;\n      }\n      if (settings.protect) {\n        editor.on('BeforeSetContent', function (e) {\n          Tools.each(settings.protect, function (pattern) {\n            e.content = e.content.replace(pattern, function (str) {\n              return '<!--mce:protected ' + escape(str) + '-->';\n            });\n          });\n        });\n      }\n      editor.on('SetContent', function () {\n        editor.addVisual(editor.getBody());\n      });\n      editor.on('compositionstart compositionend', function (e) {\n        editor.composing = e.type === 'compositionstart';\n      });\n    };\n    var loadInitialContent = function (editor) {\n      if (!isRtc(editor)) {\n        editor.load({\n          initial: true,\n          format: 'html'\n        });\n      }\n      editor.startContent = editor.getContent({ format: 'raw' });\n    };\n    var initEditorWithInitialContent = function (editor) {\n      if (editor.removed !== true) {\n        loadInitialContent(editor);\n        initEditor(editor);\n      }\n    };\n    var initContentBody = function (editor, skipWrite) {\n      var settings = editor.settings;\n      var targetElm = editor.getElement();\n      var doc = editor.getDoc();\n      if (!settings.inline) {\n        editor.getElement().style.visibility = editor.orgVisibility;\n      }\n      if (!skipWrite && !editor.inline) {\n        doc.open();\n        doc.write(editor.iframeHTML);\n        doc.close();\n      }\n      if (editor.inline) {\n        DOM$6.addClass(targetElm, 'mce-content-body');\n        editor.contentDocument = doc = document;\n        editor.contentWindow = window;\n        editor.bodyElement = targetElm;\n        editor.contentAreaContainer = targetElm;\n      }\n      var body = editor.getBody();\n      body.disabled = true;\n      editor.readonly = !!settings.readonly;\n      if (!editor.readonly) {\n        if (editor.inline && DOM$6.getStyle(body, 'position', true) === 'static') {\n          body.style.position = 'relative';\n        }\n        body.contentEditable = editor.getParam('content_editable_state', true);\n      }\n      body.disabled = false;\n      editor.editorUpload = EditorUpload(editor);\n      editor.schema = Schema(mkSchemaSettings(editor));\n      editor.dom = DOMUtils(doc, {\n        keep_values: true,\n        url_converter: editor.convertURL,\n        url_converter_scope: editor,\n        hex_colors: settings.force_hex_style_colors,\n        update_styles: true,\n        root_element: editor.inline ? editor.getBody() : null,\n        collect: function () {\n          return editor.inline;\n        },\n        schema: editor.schema,\n        contentCssCors: shouldUseContentCssCors(editor),\n        referrerPolicy: getReferrerPolicy(editor),\n        onSetAttrib: function (e) {\n          editor.fire('SetAttrib', e);\n        }\n      });\n      editor.parser = createParser(editor);\n      editor.serializer = DomSerializer(mkSerializerSettings(editor), editor);\n      editor.selection = EditorSelection(editor.dom, editor.getWin(), editor.serializer, editor);\n      editor.annotator = Annotator(editor);\n      editor.formatter = Formatter(editor);\n      editor.undoManager = UndoManager(editor);\n      editor._nodeChangeDispatcher = new NodeChange(editor);\n      editor._selectionOverrides = SelectionOverrides(editor);\n      setup$e(editor);\n      setup$3(editor);\n      if (!isRtc(editor)) {\n        setup$2(editor);\n      }\n      var caret = setup$4(editor);\n      setup$f(editor, caret);\n      setup$d(editor);\n      setup$g(editor);\n      var setupRtcThunk = setup$i(editor);\n      preInit(editor);\n      setupRtcThunk.fold(function () {\n        loadContentCss(editor).then(function () {\n          return initEditorWithInitialContent(editor);\n        });\n      }, function (setupRtc) {\n        editor.setProgressState(true);\n        loadContentCss(editor).then(function () {\n          setupRtc().then(function (_rtcMode) {\n            editor.setProgressState(false);\n            initEditorWithInitialContent(editor);\n          }, function (err) {\n            editor.notificationManager.open({\n              type: 'error',\n              text: String(err)\n            });\n            initEditorWithInitialContent(editor);\n          });\n        });\n      });\n    };\n\n    var DOM$5 = DOMUtils.DOM;\n    var relaxDomain = function (editor, ifr) {\n      if (document.domain !== window.location.hostname && Env.browser.isIE()) {\n        var bodyUuid = uuid('mce');\n        editor[bodyUuid] = function () {\n          initContentBody(editor);\n        };\n        var domainRelaxUrl = 'javascript:(function(){' + 'document.open();document.domain=\"' + document.domain + '\";' + 'var ed = window.parent.tinymce.get(\"' + editor.id + '\");document.write(ed.iframeHTML);' + 'document.close();ed.' + bodyUuid + '(true);})()';\n        DOM$5.setAttrib(ifr, 'src', domainRelaxUrl);\n        return true;\n      }\n      return false;\n    };\n    var createIframeElement = function (id, title, height, customAttrs) {\n      var iframe = SugarElement.fromTag('iframe');\n      setAll$1(iframe, customAttrs);\n      setAll$1(iframe, {\n        id: id + '_ifr',\n        frameBorder: '0',\n        allowTransparency: 'true',\n        title: title\n      });\n      add$1(iframe, 'tox-edit-area__iframe');\n      return iframe;\n    };\n    var getIframeHtml = function (editor) {\n      var iframeHTML = getDocType(editor) + '<html><head>';\n      if (getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n        iframeHTML += '<base href=\"' + editor.documentBaseURI.getURI() + '\" />';\n      }\n      iframeHTML += '<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />';\n      var bodyId = getBodyId(editor);\n      var bodyClass = getBodyClass(editor);\n      var translatedAriaText = editor.translate(getIframeAriaText(editor));\n      if (getContentSecurityPolicy(editor)) {\n        iframeHTML += '<meta http-equiv=\"Content-Security-Policy\" content=\"' + getContentSecurityPolicy(editor) + '\" />';\n      }\n      iframeHTML += '</head>' + ('<body id=\"' + bodyId + '\" class=\"mce-content-body ' + bodyClass + '\" data-id=\"' + editor.id + '\" aria-label=\"' + translatedAriaText + '\">') + '<br>' + '</body></html>';\n      return iframeHTML;\n    };\n    var createIframe = function (editor, o) {\n      var iframeTitle = editor.translate('Rich Text Area');\n      var ifr = createIframeElement(editor.id, iframeTitle, o.height, getIframeAttrs(editor)).dom;\n      ifr.onload = function () {\n        ifr.onload = null;\n        editor.fire('load');\n      };\n      var isDomainRelaxed = relaxDomain(editor, ifr);\n      editor.contentAreaContainer = o.iframeContainer;\n      editor.iframeElement = ifr;\n      editor.iframeHTML = getIframeHtml(editor);\n      DOM$5.add(o.iframeContainer, ifr);\n      return isDomainRelaxed;\n    };\n    var init$1 = function (editor, boxInfo) {\n      var isDomainRelaxed = createIframe(editor, boxInfo);\n      if (boxInfo.editorContainer) {\n        DOM$5.get(boxInfo.editorContainer).style.display = editor.orgDisplay;\n        editor.hidden = DOM$5.isHidden(boxInfo.editorContainer);\n      }\n      editor.getElement().style.display = 'none';\n      DOM$5.setAttrib(editor.id, 'aria-hidden', 'true');\n      if (!isDomainRelaxed) {\n        initContentBody(editor);\n      }\n    };\n\n    var DOM$4 = DOMUtils.DOM;\n    var initPlugin = function (editor, initializedPlugins, plugin) {\n      var Plugin = PluginManager.get(plugin);\n      var pluginUrl = PluginManager.urls[plugin] || editor.documentBaseUrl.replace(/\\/$/, '');\n      plugin = Tools.trim(plugin);\n      if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) {\n        Tools.each(PluginManager.dependencies(plugin), function (dep) {\n          initPlugin(editor, initializedPlugins, dep);\n        });\n        if (editor.plugins[plugin]) {\n          return;\n        }\n        try {\n          var pluginInstance = new Plugin(editor, pluginUrl, editor.$);\n          editor.plugins[plugin] = pluginInstance;\n          if (pluginInstance.init) {\n            pluginInstance.init(editor, pluginUrl);\n            initializedPlugins.push(plugin);\n          }\n        } catch (e) {\n          pluginInitError(editor, plugin, e);\n        }\n      }\n    };\n    var trimLegacyPrefix = function (name) {\n      return name.replace(/^\\-/, '');\n    };\n    var initPlugins = function (editor) {\n      var initializedPlugins = [];\n      Tools.each(getPlugins(editor).split(/[ ,]/), function (name) {\n        initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));\n      });\n    };\n    var initIcons = function (editor) {\n      var iconPackName = Tools.trim(getIconPackName(editor));\n      var currentIcons = editor.ui.registry.getAll().icons;\n      var loadIcons = __assign(__assign({}, IconManager.get('default').icons), IconManager.get(iconPackName).icons);\n      each$j(loadIcons, function (svgData, icon) {\n        if (!has$2(currentIcons, icon)) {\n          editor.ui.registry.addIcon(icon, svgData);\n        }\n      });\n    };\n    var initTheme = function (editor) {\n      var theme = getTheme(editor);\n      if (isString$1(theme)) {\n        editor.settings.theme = trimLegacyPrefix(theme);\n        var Theme = ThemeManager.get(theme);\n        editor.theme = new Theme(editor, ThemeManager.urls[theme]);\n        if (editor.theme.init) {\n          editor.theme.init(editor, ThemeManager.urls[theme] || editor.documentBaseUrl.replace(/\\/$/, ''), editor.$);\n        }\n      } else {\n        editor.theme = {};\n      }\n    };\n    var renderFromLoadedTheme = function (editor) {\n      return editor.theme.renderUI();\n    };\n    var renderFromThemeFunc = function (editor) {\n      var elm = editor.getElement();\n      var theme = getTheme(editor);\n      var info = theme(editor, elm);\n      if (info.editorContainer.nodeType) {\n        info.editorContainer.id = info.editorContainer.id || editor.id + '_parent';\n      }\n      if (info.iframeContainer && info.iframeContainer.nodeType) {\n        info.iframeContainer.id = info.iframeContainer.id || editor.id + '_iframecontainer';\n      }\n      info.height = info.iframeHeight ? info.iframeHeight : elm.offsetHeight;\n      return info;\n    };\n    var createThemeFalseResult = function (element) {\n      return {\n        editorContainer: element,\n        iframeContainer: element,\n        api: {}\n      };\n    };\n    var renderThemeFalseIframe = function (targetElement) {\n      var iframeContainer = DOM$4.create('div');\n      DOM$4.insertAfter(iframeContainer, targetElement);\n      return createThemeFalseResult(iframeContainer);\n    };\n    var renderThemeFalse = function (editor) {\n      var targetElement = editor.getElement();\n      return editor.inline ? createThemeFalseResult(null) : renderThemeFalseIframe(targetElement);\n    };\n    var renderThemeUi = function (editor) {\n      var elm = editor.getElement();\n      editor.orgDisplay = elm.style.display;\n      if (isString$1(getTheme(editor))) {\n        return renderFromLoadedTheme(editor);\n      } else if (isFunction(getTheme(editor))) {\n        return renderFromThemeFunc(editor);\n      } else {\n        return renderThemeFalse(editor);\n      }\n    };\n    var augmentEditorUiApi = function (editor, api) {\n      var uiApiFacade = {\n        show: Optional.from(api.show).getOr(noop),\n        hide: Optional.from(api.hide).getOr(noop),\n        disable: Optional.from(api.disable).getOr(noop),\n        isDisabled: Optional.from(api.isDisabled).getOr(never),\n        enable: function () {\n          if (!editor.mode.isReadOnly()) {\n            Optional.from(api.enable).map(call);\n          }\n        }\n      };\n      editor.ui = __assign(__assign({}, editor.ui), uiApiFacade);\n    };\n    var init = function (editor) {\n      editor.fire('ScriptsLoaded');\n      initIcons(editor);\n      initTheme(editor);\n      initPlugins(editor);\n      var renderInfo = renderThemeUi(editor);\n      augmentEditorUiApi(editor, Optional.from(renderInfo.api).getOr({}));\n      var boxInfo = {\n        editorContainer: renderInfo.editorContainer,\n        iframeContainer: renderInfo.iframeContainer\n      };\n      editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null;\n      appendContentCssFromSettings(editor);\n      if (editor.inline) {\n        return initContentBody(editor);\n      } else {\n        return init$1(editor, boxInfo);\n      }\n    };\n\n    var DOM$3 = DOMUtils.DOM;\n    var hasSkipLoadPrefix = function (name) {\n      return name.charAt(0) === '-';\n    };\n    var loadLanguage = function (scriptLoader, editor) {\n      var languageCode = getLanguageCode(editor);\n      var languageUrl = getLanguageUrl(editor);\n      if (I18n.hasCode(languageCode) === false && languageCode !== 'en') {\n        var url_1 = languageUrl !== '' ? languageUrl : editor.editorManager.baseURL + '/langs/' + languageCode + '.js';\n        scriptLoader.add(url_1, noop, undefined, function () {\n          languageLoadError(editor, url_1, languageCode);\n        });\n      }\n    };\n    var loadTheme = function (scriptLoader, editor, suffix, callback) {\n      var theme = getTheme(editor);\n      if (isString$1(theme)) {\n        if (!hasSkipLoadPrefix(theme) && !has$2(ThemeManager.urls, theme)) {\n          var themeUrl = getThemeUrl(editor);\n          if (themeUrl) {\n            ThemeManager.load(theme, editor.documentBaseURI.toAbsolute(themeUrl));\n          } else {\n            ThemeManager.load(theme, 'themes/' + theme + '/theme' + suffix + '.js');\n          }\n        }\n        scriptLoader.loadQueue(function () {\n          ThemeManager.waitFor(theme, callback);\n        });\n      } else {\n        callback();\n      }\n    };\n    var getIconsUrlMetaFromUrl = function (editor) {\n      return Optional.from(getIconsUrl(editor)).filter(function (url) {\n        return url.length > 0;\n      }).map(function (url) {\n        return {\n          url: url,\n          name: Optional.none()\n        };\n      });\n    };\n    var getIconsUrlMetaFromName = function (editor, name, suffix) {\n      return Optional.from(name).filter(function (name) {\n        return name.length > 0 && !IconManager.has(name);\n      }).map(function (name) {\n        return {\n          url: editor.editorManager.baseURL + '/icons/' + name + '/icons' + suffix + '.js',\n          name: Optional.some(name)\n        };\n      });\n    };\n    var loadIcons = function (scriptLoader, editor, suffix) {\n      var defaultIconsUrl = getIconsUrlMetaFromName(editor, 'default', suffix);\n      var customIconsUrl = getIconsUrlMetaFromUrl(editor).orThunk(function () {\n        return getIconsUrlMetaFromName(editor, getIconPackName(editor), '');\n      });\n      each$k(cat([\n        defaultIconsUrl,\n        customIconsUrl\n      ]), function (urlMeta) {\n        scriptLoader.add(urlMeta.url, noop, undefined, function () {\n          iconsLoadError(editor, urlMeta.url, urlMeta.name.getOrUndefined());\n        });\n      });\n    };\n    var loadPlugins = function (editor, suffix) {\n      Tools.each(getExternalPlugins$1(editor), function (url, name) {\n        PluginManager.load(name, url, noop, undefined, function () {\n          pluginLoadError(editor, url, name);\n        });\n        editor.settings.plugins += ' ' + name;\n      });\n      Tools.each(getPlugins(editor).split(/[ ,]/), function (plugin) {\n        plugin = Tools.trim(plugin);\n        if (plugin && !PluginManager.urls[plugin]) {\n          if (hasSkipLoadPrefix(plugin)) {\n            plugin = plugin.substr(1, plugin.length);\n            var dependencies = PluginManager.dependencies(plugin);\n            Tools.each(dependencies, function (depPlugin) {\n              var defaultSettings = {\n                prefix: 'plugins/',\n                resource: depPlugin,\n                suffix: '/plugin' + suffix + '.js'\n              };\n              var dep = PluginManager.createUrl(defaultSettings, depPlugin);\n              PluginManager.load(dep.resource, dep, noop, undefined, function () {\n                pluginLoadError(editor, dep.prefix + dep.resource + dep.suffix, dep.resource);\n              });\n            });\n          } else {\n            var url_2 = {\n              prefix: 'plugins/',\n              resource: plugin,\n              suffix: '/plugin' + suffix + '.js'\n            };\n            PluginManager.load(plugin, url_2, noop, undefined, function () {\n              pluginLoadError(editor, url_2.prefix + url_2.resource + url_2.suffix, plugin);\n            });\n          }\n        }\n      });\n    };\n    var loadScripts = function (editor, suffix) {\n      var scriptLoader = ScriptLoader.ScriptLoader;\n      loadTheme(scriptLoader, editor, suffix, function () {\n        loadLanguage(scriptLoader, editor);\n        loadIcons(scriptLoader, editor, suffix);\n        loadPlugins(editor, suffix);\n        scriptLoader.loadQueue(function () {\n          if (!editor.removed) {\n            init(editor);\n          }\n        }, editor, function () {\n          if (!editor.removed) {\n            init(editor);\n          }\n        });\n      });\n    };\n    var getStyleSheetLoader = function (element, editor) {\n      return instance.forElement(element, {\n        contentCssCors: hasContentCssCors(editor),\n        referrerPolicy: getReferrerPolicy(editor)\n      });\n    };\n    var render = function (editor) {\n      var id = editor.id;\n      I18n.setCode(getLanguageCode(editor));\n      var readyHandler = function () {\n        DOM$3.unbind(window, 'ready', readyHandler);\n        editor.render();\n      };\n      if (!EventUtils.Event.domLoaded) {\n        DOM$3.bind(window, 'ready', readyHandler);\n        return;\n      }\n      if (!editor.getElement()) {\n        return;\n      }\n      if (!Env.contentEditable) {\n        return;\n      }\n      var element = SugarElement.fromDom(editor.getElement());\n      var snapshot = clone$3(element);\n      editor.on('remove', function () {\n        eachr(element.dom.attributes, function (attr) {\n          return remove$6(element, attr.name);\n        });\n        setAll$1(element, snapshot);\n      });\n      editor.ui.styleSheetLoader = getStyleSheetLoader(element, editor);\n      if (!isInline(editor)) {\n        editor.orgVisibility = editor.getElement().style.visibility;\n        editor.getElement().style.visibility = 'hidden';\n      } else {\n        editor.inline = true;\n      }\n      var form = editor.getElement().form || DOM$3.getParent(id, 'form');\n      if (form) {\n        editor.formElement = form;\n        if (hasHiddenInput(editor) && !isTextareaOrInput(editor.getElement())) {\n          DOM$3.insertAfter(DOM$3.create('input', {\n            type: 'hidden',\n            name: id\n          }), id);\n          editor.hasHiddenInput = true;\n        }\n        editor.formEventDelegate = function (e) {\n          editor.fire(e.type, e);\n        };\n        DOM$3.bind(form, 'submit reset', editor.formEventDelegate);\n        editor.on('reset', function () {\n          editor.resetContent();\n        });\n        if (shouldPatchSubmit(editor) && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) {\n          form._mceOldSubmit = form.submit;\n          form.submit = function () {\n            editor.editorManager.triggerSave();\n            editor.setDirty(false);\n            return form._mceOldSubmit(form);\n          };\n        }\n      }\n      editor.windowManager = WindowManager(editor);\n      editor.notificationManager = NotificationManager(editor);\n      if (isEncodingXml(editor)) {\n        editor.on('GetContent', function (e) {\n          if (e.save) {\n            e.content = DOM$3.encode(e.content);\n          }\n        });\n      }\n      if (shouldAddFormSubmitTrigger(editor)) {\n        editor.on('submit', function () {\n          if (editor.initialized) {\n            editor.save();\n          }\n        });\n      }\n      if (shouldAddUnloadTrigger(editor)) {\n        editor._beforeUnload = function () {\n          if (editor.initialized && !editor.destroyed && !editor.isHidden()) {\n            editor.save({\n              format: 'raw',\n              no_events: true,\n              set_dirty: false\n            });\n          }\n        };\n        editor.editorManager.on('BeforeUnload', editor._beforeUnload);\n      }\n      editor.editorManager.add(editor);\n      loadScripts(editor, editor.suffix);\n    };\n\n    var addVisual = function (editor, elm) {\n      return addVisual$1(editor, elm);\n    };\n\n    var legacyPropNames = {\n      'font-size': 'size',\n      'font-family': 'face'\n    };\n    var getSpecifiedFontProp = function (propName, rootElm, elm) {\n      var getProperty = function (elm) {\n        return getRaw(elm, propName).orThunk(function () {\n          if (name(elm) === 'font') {\n            return get$9(legacyPropNames, propName).bind(function (legacyPropName) {\n              return getOpt(elm, legacyPropName);\n            });\n          } else {\n            return Optional.none();\n          }\n        });\n      };\n      var isRoot = function (elm) {\n        return eq(SugarElement.fromDom(rootElm), elm);\n      };\n      return closest$1(SugarElement.fromDom(elm), function (elm) {\n        return getProperty(elm);\n      }, isRoot);\n    };\n    var normalizeFontFamily = function (fontFamily) {\n      return fontFamily.replace(/[\\'\\\"\\\\]/g, '').replace(/,\\s+/g, ',');\n    };\n    var getComputedFontProp = function (propName, elm) {\n      return Optional.from(DOMUtils.DOM.getStyle(elm, propName, true));\n    };\n    var getFontProp = function (propName) {\n      return function (rootElm, elm) {\n        return Optional.from(elm).map(SugarElement.fromDom).filter(isElement$6).bind(function (element) {\n          return getSpecifiedFontProp(propName, rootElm, element.dom).or(getComputedFontProp(propName, element.dom));\n        }).getOr('');\n      };\n    };\n    var getFontSize = getFontProp('font-size');\n    var getFontFamily = compose(normalizeFontFamily, getFontProp('font-family'));\n\n    var findFirstCaretElement = function (editor) {\n      return firstPositionIn(editor.getBody()).map(function (caret) {\n        var container = caret.container();\n        return isText$7(container) ? container.parentNode : container;\n      });\n    };\n    var getCaretElement = function (editor) {\n      return Optional.from(editor.selection.getRng()).bind(function (rng) {\n        var root = editor.getBody();\n        var atStartOfNode = rng.startContainer === root && rng.startOffset === 0;\n        return atStartOfNode ? Optional.none() : Optional.from(editor.selection.getStart(true));\n      });\n    };\n    var bindRange = function (editor, binder) {\n      return getCaretElement(editor).orThunk(curry(findFirstCaretElement, editor)).map(SugarElement.fromDom).filter(isElement$6).bind(binder);\n    };\n    var mapRange = function (editor, mapper) {\n      return bindRange(editor, compose1(Optional.some, mapper));\n    };\n\n    var fromFontSizeNumber = function (editor, value) {\n      if (/^[0-9.]+$/.test(value)) {\n        var fontSizeNumber = parseInt(value, 10);\n        if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {\n          var fontSizes = getFontStyleValues(editor);\n          var fontClasses = getFontSizeClasses(editor);\n          if (fontClasses) {\n            return fontClasses[fontSizeNumber - 1] || value;\n          } else {\n            return fontSizes[fontSizeNumber - 1] || value;\n          }\n        } else {\n          return value;\n        }\n      } else {\n        return value;\n      }\n    };\n    var normalizeFontNames = function (font) {\n      var fonts = font.split(/\\s*,\\s*/);\n      return map$3(fonts, function (font) {\n        if (font.indexOf(' ') !== -1 && !(startsWith(font, '\"') || startsWith(font, '\\''))) {\n          return '\\'' + font + '\\'';\n        } else {\n          return font;\n        }\n      }).join(',');\n    };\n    var fontNameAction = function (editor, value) {\n      var font = fromFontSizeNumber(editor, value);\n      editor.formatter.toggle('fontname', { value: normalizeFontNames(font) });\n      editor.nodeChanged();\n    };\n    var fontNameQuery = function (editor) {\n      return mapRange(editor, function (elm) {\n        return getFontFamily(editor.getBody(), elm.dom);\n      }).getOr('');\n    };\n    var fontSizeAction = function (editor, value) {\n      editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });\n      editor.nodeChanged();\n    };\n    var fontSizeQuery = function (editor) {\n      return mapRange(editor, function (elm) {\n        return getFontSize(editor.getBody(), elm.dom);\n      }).getOr('');\n    };\n\n    var lineHeightQuery = function (editor) {\n      return mapRange(editor, function (elm) {\n        var root = SugarElement.fromDom(editor.getBody());\n        var specifiedStyle = closest$1(elm, function (elm) {\n          return getRaw(elm, 'line-height');\n        }, curry(eq, root));\n        var computedStyle = function () {\n          var lineHeight = parseFloat(get$5(elm, 'line-height'));\n          var fontSize = parseFloat(get$5(elm, 'font-size'));\n          return String(lineHeight / fontSize);\n        };\n        return specifiedStyle.getOrThunk(computedStyle);\n      }).getOr('');\n    };\n    var lineHeightAction = function (editor, lineHeight) {\n      editor.formatter.toggle('lineheight', { value: String(lineHeight) });\n      editor.nodeChanged();\n    };\n\n    var processValue = function (value) {\n      if (typeof value !== 'string') {\n        var details = Tools.extend({\n          paste: value.paste,\n          data: { paste: value.paste }\n        }, value);\n        return {\n          content: value.content,\n          details: details\n        };\n      }\n      return {\n        content: value,\n        details: {}\n      };\n    };\n    var insertAtCaret = function (editor, value) {\n      var result = processValue(value);\n      insertContent(editor, result.content, result.details);\n    };\n\n    var each$4 = Tools.each;\n    var map = Tools.map, inArray = Tools.inArray;\n    var EditorCommands = function () {\n      function EditorCommands(editor) {\n        this.commands = {\n          state: {},\n          exec: {},\n          value: {}\n        };\n        this.editor = editor;\n        this.setupCommands(editor);\n      }\n      EditorCommands.prototype.execCommand = function (command, ui, value, args) {\n        var func, state = false;\n        var self = this;\n        if (self.editor.removed) {\n          return;\n        }\n        if (command.toLowerCase() !== 'mcefocus') {\n          if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(command) && (!args || !args.skip_focus)) {\n            self.editor.focus();\n          } else {\n            restore(self.editor);\n          }\n        }\n        args = self.editor.fire('BeforeExecCommand', {\n          command: command,\n          ui: ui,\n          value: value\n        });\n        if (args.isDefaultPrevented()) {\n          return false;\n        }\n        var customCommand = command.toLowerCase();\n        if (func = self.commands.exec[customCommand]) {\n          func(customCommand, ui, value);\n          self.editor.fire('ExecCommand', {\n            command: command,\n            ui: ui,\n            value: value\n          });\n          return true;\n        }\n        each$4(this.editor.plugins, function (p) {\n          if (p.execCommand && p.execCommand(command, ui, value)) {\n            self.editor.fire('ExecCommand', {\n              command: command,\n              ui: ui,\n              value: value\n            });\n            state = true;\n            return false;\n          }\n        });\n        if (state) {\n          return state;\n        }\n        if (self.editor.theme && self.editor.theme.execCommand && self.editor.theme.execCommand(command, ui, value)) {\n          self.editor.fire('ExecCommand', {\n            command: command,\n            ui: ui,\n            value: value\n          });\n          return true;\n        }\n        try {\n          state = self.editor.getDoc().execCommand(command, ui, value);\n        } catch (ex) {\n        }\n        if (state) {\n          self.editor.fire('ExecCommand', {\n            command: command,\n            ui: ui,\n            value: value\n          });\n          return true;\n        }\n        return false;\n      };\n      EditorCommands.prototype.queryCommandState = function (command) {\n        var func;\n        if (this.editor.quirks.isHidden() || this.editor.removed) {\n          return;\n        }\n        command = command.toLowerCase();\n        if (func = this.commands.state[command]) {\n          return func(command);\n        }\n        try {\n          return this.editor.getDoc().queryCommandState(command);\n        } catch (ex) {\n        }\n        return false;\n      };\n      EditorCommands.prototype.queryCommandValue = function (command) {\n        var func;\n        if (this.editor.quirks.isHidden() || this.editor.removed) {\n          return;\n        }\n        command = command.toLowerCase();\n        if (func = this.commands.value[command]) {\n          return func(command);\n        }\n        try {\n          return this.editor.getDoc().queryCommandValue(command);\n        } catch (ex) {\n        }\n      };\n      EditorCommands.prototype.addCommands = function (commandList, type) {\n        if (type === void 0) {\n          type = 'exec';\n        }\n        var self = this;\n        each$4(commandList, function (callback, command) {\n          each$4(command.toLowerCase().split(','), function (command) {\n            self.commands[type][command] = callback;\n          });\n        });\n      };\n      EditorCommands.prototype.addCommand = function (command, callback, scope) {\n        var _this = this;\n        command = command.toLowerCase();\n        this.commands.exec[command] = function (command, ui, value, args) {\n          return callback.call(scope || _this.editor, ui, value, args);\n        };\n      };\n      EditorCommands.prototype.queryCommandSupported = function (command) {\n        command = command.toLowerCase();\n        if (this.commands.exec[command]) {\n          return true;\n        }\n        try {\n          return this.editor.getDoc().queryCommandSupported(command);\n        } catch (ex) {\n        }\n        return false;\n      };\n      EditorCommands.prototype.addQueryStateHandler = function (command, callback, scope) {\n        var _this = this;\n        command = command.toLowerCase();\n        this.commands.state[command] = function () {\n          return callback.call(scope || _this.editor);\n        };\n      };\n      EditorCommands.prototype.addQueryValueHandler = function (command, callback, scope) {\n        var _this = this;\n        command = command.toLowerCase();\n        this.commands.value[command] = function () {\n          return callback.call(scope || _this.editor);\n        };\n      };\n      EditorCommands.prototype.hasCustomCommand = function (command) {\n        command = command.toLowerCase();\n        return !!this.commands.exec[command];\n      };\n      EditorCommands.prototype.execNativeCommand = function (command, ui, value) {\n        if (ui === undefined) {\n          ui = false;\n        }\n        if (value === undefined) {\n          value = null;\n        }\n        return this.editor.getDoc().execCommand(command, ui, value);\n      };\n      EditorCommands.prototype.isFormatMatch = function (name) {\n        return this.editor.formatter.match(name);\n      };\n      EditorCommands.prototype.toggleFormat = function (name, value) {\n        this.editor.formatter.toggle(name, value);\n        this.editor.nodeChanged();\n      };\n      EditorCommands.prototype.storeSelection = function (type) {\n        this.selectionBookmark = this.editor.selection.getBookmark(type);\n      };\n      EditorCommands.prototype.restoreSelection = function () {\n        this.editor.selection.moveToBookmark(this.selectionBookmark);\n      };\n      EditorCommands.prototype.setupCommands = function (editor) {\n        var self = this;\n        this.addCommands({\n          'mceResetDesignMode,mceBeginUndoLevel': noop,\n          'mceEndUndoLevel,mceAddUndoLevel': function () {\n            editor.undoManager.add();\n          },\n          'mceFocus': function (_command, _ui, value) {\n            focus(editor, value);\n          },\n          'Cut,Copy,Paste': function (command) {\n            var doc = editor.getDoc();\n            var failed;\n            try {\n              self.execNativeCommand(command);\n            } catch (ex) {\n              failed = true;\n            }\n            if (command === 'paste' && !doc.queryCommandEnabled(command)) {\n              failed = true;\n            }\n            if (failed || !doc.queryCommandSupported(command)) {\n              var msg = editor.translate('Your browser doesn\\'t support direct access to the clipboard. ' + 'Please use the Ctrl+X/C/V keyboard shortcuts instead.');\n              if (Env.mac) {\n                msg = msg.replace(/Ctrl\\+/g, '\\u2318+');\n              }\n              editor.notificationManager.open({\n                text: msg,\n                type: 'error'\n              });\n            }\n          },\n          'unlink': function () {\n            if (editor.selection.isCollapsed()) {\n              var elm = editor.dom.getParent(editor.selection.getStart(), 'a');\n              if (elm) {\n                editor.dom.remove(elm, true);\n              }\n              return;\n            }\n            editor.formatter.remove('link');\n          },\n          'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone': function (command) {\n            var align = command.substring(7);\n            if (align === 'full') {\n              align = 'justify';\n            }\n            each$4('left,center,right,justify'.split(','), function (name) {\n              if (align !== name) {\n                editor.formatter.remove('align' + name);\n              }\n            });\n            if (align !== 'none') {\n              self.toggleFormat('align' + align);\n            }\n          },\n          'InsertUnorderedList,InsertOrderedList': function (command) {\n            var listParent;\n            self.execNativeCommand(command);\n            var listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n            if (listElm) {\n              listParent = listElm.parentNode;\n              if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {\n                self.storeSelection();\n                editor.dom.split(listParent, listElm);\n                self.restoreSelection();\n              }\n            }\n          },\n          'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\n            self.toggleFormat(command);\n          },\n          'ForeColor,HiliteColor': function (command, ui, value) {\n            self.toggleFormat(command, { value: value });\n          },\n          'FontName': function (command, ui, value) {\n            fontNameAction(editor, value);\n          },\n          'FontSize': function (command, ui, value) {\n            fontSizeAction(editor, value);\n          },\n          'LineHeight': function (command, ui, value) {\n            lineHeightAction(editor, value);\n          },\n          'Lang': function (command, ui, lang) {\n            self.toggleFormat(command, {\n              value: lang.code,\n              customValue: lang.customCode\n            });\n          },\n          'RemoveFormat': function (command) {\n            editor.formatter.remove(command);\n          },\n          'mceBlockQuote': function () {\n            self.toggleFormat('blockquote');\n          },\n          'FormatBlock': function (command, ui, value) {\n            return self.toggleFormat(value || 'p');\n          },\n          'mceCleanup': function () {\n            var bookmark = editor.selection.getBookmark();\n            editor.setContent(editor.getContent());\n            editor.selection.moveToBookmark(bookmark);\n          },\n          'mceRemoveNode': function (command, ui, value) {\n            var node = value || editor.selection.getNode();\n            if (node !== editor.getBody()) {\n              self.storeSelection();\n              editor.dom.remove(node, true);\n              self.restoreSelection();\n            }\n          },\n          'mceSelectNodeDepth': function (command, ui, value) {\n            var counter = 0;\n            editor.dom.getParent(editor.selection.getNode(), function (node) {\n              if (node.nodeType === 1 && counter++ === value) {\n                editor.selection.select(node);\n                return false;\n              }\n            }, editor.getBody());\n          },\n          'mceSelectNode': function (command, ui, value) {\n            editor.selection.select(value);\n          },\n          'mceInsertContent': function (command, ui, value) {\n            insertAtCaret(editor, value);\n          },\n          'mceInsertRawHTML': function (command, ui, value) {\n            editor.selection.setContent('tiny_mce_marker');\n            var content = editor.getContent();\n            editor.setContent(content.replace(/tiny_mce_marker/g, function () {\n              return value;\n            }));\n          },\n          'mceInsertNewLine': function (command, ui, value) {\n            insert(editor, value);\n          },\n          'mceToggleFormat': function (command, ui, value) {\n            self.toggleFormat(value);\n          },\n          'mceSetContent': function (command, ui, value) {\n            editor.setContent(value);\n          },\n          'Indent,Outdent': function (command) {\n            handle(editor, command);\n          },\n          'mceRepaint': noop,\n          'InsertHorizontalRule': function () {\n            editor.execCommand('mceInsertContent', false, '<hr />');\n          },\n          'mceToggleVisualAid': function () {\n            editor.hasVisual = !editor.hasVisual;\n            editor.addVisual();\n          },\n          'mceReplaceContent': function (command, ui, value) {\n            editor.execCommand('mceInsertContent', false, value.replace(/\\{\\$selection\\}/g, editor.selection.getContent({ format: 'text' })));\n          },\n          'mceInsertLink': function (command, ui, value) {\n            if (typeof value === 'string') {\n              value = { href: value };\n            }\n            var anchor = editor.dom.getParent(editor.selection.getNode(), 'a');\n            value.href = value.href.replace(/ /g, '%20');\n            if (!anchor || !value.href) {\n              editor.formatter.remove('link');\n            }\n            if (value.href) {\n              editor.formatter.apply('link', value, anchor);\n            }\n          },\n          'selectAll': function () {\n            var editingHost = editor.dom.getParent(editor.selection.getStart(), isContentEditableTrue$4);\n            if (editingHost) {\n              var rng = editor.dom.createRng();\n              rng.selectNodeContents(editingHost);\n              editor.selection.setRng(rng);\n            }\n          },\n          'mceNewDocument': function () {\n            editor.setContent('');\n          },\n          'InsertLineBreak': function (command, ui, value) {\n            insert$1(editor, value);\n            return true;\n          }\n        });\n        var alignStates = function (name) {\n          return function () {\n            var selection = editor.selection;\n            var nodes = selection.isCollapsed() ? [editor.dom.getParent(selection.getNode(), editor.dom.isBlock)] : selection.getSelectedBlocks();\n            var matches = map(nodes, function (node) {\n              return !!editor.formatter.matchNode(node, name);\n            });\n            return inArray(matches, true) !== -1;\n          };\n        };\n        self.addCommands({\n          'JustifyLeft': alignStates('alignleft'),\n          'JustifyCenter': alignStates('aligncenter'),\n          'JustifyRight': alignStates('alignright'),\n          'JustifyFull': alignStates('alignjustify'),\n          'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\n            return self.isFormatMatch(command);\n          },\n          'mceBlockQuote': function () {\n            return self.isFormatMatch('blockquote');\n          },\n          'Outdent': function () {\n            return canOutdent(editor);\n          },\n          'InsertUnorderedList,InsertOrderedList': function (command) {\n            var list = editor.dom.getParent(editor.selection.getNode(), 'ul,ol');\n            return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL');\n          }\n        }, 'state');\n        self.addCommands({\n          Undo: function () {\n            editor.undoManager.undo();\n          },\n          Redo: function () {\n            editor.undoManager.redo();\n          }\n        });\n        self.addQueryValueHandler('FontName', function () {\n          return fontNameQuery(editor);\n        }, this);\n        self.addQueryValueHandler('FontSize', function () {\n          return fontSizeQuery(editor);\n        }, this);\n        self.addQueryValueHandler('LineHeight', function () {\n          return lineHeightQuery(editor);\n        }, this);\n      };\n      return EditorCommands;\n    }();\n\n    var internalContentEditableAttr = 'data-mce-contenteditable';\n    var toggleClass = function (elm, cls, state) {\n      if (has(elm, cls) && state === false) {\n        remove$3(elm, cls);\n      } else if (state) {\n        add$1(elm, cls);\n      }\n    };\n    var setEditorCommandState = function (editor, cmd, state) {\n      try {\n        editor.getDoc().execCommand(cmd, false, String(state));\n      } catch (ex) {\n      }\n    };\n    var setContentEditable = function (elm, state) {\n      elm.dom.contentEditable = state ? 'true' : 'false';\n    };\n    var switchOffContentEditableTrue = function (elm) {\n      each$k(descendants(elm, '*[contenteditable=\"true\"]'), function (elm) {\n        set$1(elm, internalContentEditableAttr, 'true');\n        setContentEditable(elm, false);\n      });\n    };\n    var switchOnContentEditableTrue = function (elm) {\n      each$k(descendants(elm, '*[' + internalContentEditableAttr + '=\"true\"]'), function (elm) {\n        remove$6(elm, internalContentEditableAttr);\n        setContentEditable(elm, true);\n      });\n    };\n    var removeFakeSelection = function (editor) {\n      Optional.from(editor.selection.getNode()).each(function (elm) {\n        elm.removeAttribute('data-mce-selected');\n      });\n    };\n    var restoreFakeSelection = function (editor) {\n      editor.selection.setRng(editor.selection.getRng());\n    };\n    var toggleReadOnly = function (editor, state) {\n      var body = SugarElement.fromDom(editor.getBody());\n      toggleClass(body, 'mce-content-readonly', state);\n      if (state) {\n        editor.selection.controlSelection.hideResizeRect();\n        editor._selectionOverrides.hideFakeCaret();\n        removeFakeSelection(editor);\n        editor.readonly = true;\n        setContentEditable(body, false);\n        switchOffContentEditableTrue(body);\n      } else {\n        editor.readonly = false;\n        setContentEditable(body, true);\n        switchOnContentEditableTrue(body);\n        setEditorCommandState(editor, 'StyleWithCSS', false);\n        setEditorCommandState(editor, 'enableInlineTableEditing', false);\n        setEditorCommandState(editor, 'enableObjectResizing', false);\n        if (hasEditorOrUiFocus(editor)) {\n          editor.focus();\n        }\n        restoreFakeSelection(editor);\n        editor.nodeChanged();\n      }\n    };\n    var isReadOnly = function (editor) {\n      return editor.readonly;\n    };\n    var registerFilters = function (editor) {\n      editor.parser.addAttributeFilter('contenteditable', function (nodes) {\n        if (isReadOnly(editor)) {\n          each$k(nodes, function (node) {\n            node.attr(internalContentEditableAttr, node.attr('contenteditable'));\n            node.attr('contenteditable', 'false');\n          });\n        }\n      });\n      editor.serializer.addAttributeFilter(internalContentEditableAttr, function (nodes) {\n        if (isReadOnly(editor)) {\n          each$k(nodes, function (node) {\n            node.attr('contenteditable', node.attr(internalContentEditableAttr));\n          });\n        }\n      });\n      editor.serializer.addTempAttr(internalContentEditableAttr);\n    };\n    var registerReadOnlyContentFilters = function (editor) {\n      if (editor.serializer) {\n        registerFilters(editor);\n      } else {\n        editor.on('PreInit', function () {\n          registerFilters(editor);\n        });\n      }\n    };\n    var isClickEvent = function (e) {\n      return e.type === 'click';\n    };\n    var getAnchorHrefOpt = function (editor, elm) {\n      var isRoot = function (elm) {\n        return eq(elm, SugarElement.fromDom(editor.getBody()));\n      };\n      return closest$2(elm, 'a', isRoot).bind(function (a) {\n        return getOpt(a, 'href');\n      });\n    };\n    var processReadonlyEvents = function (editor, e) {\n      if (isClickEvent(e) && !VK.metaKeyPressed(e)) {\n        var elm = SugarElement.fromDom(e.target);\n        getAnchorHrefOpt(editor, elm).each(function (href) {\n          e.preventDefault();\n          if (/^#/.test(href)) {\n            var targetEl = editor.dom.select(href + ',[name=\"' + removeLeading(href, '#') + '\"]');\n            if (targetEl.length) {\n              editor.selection.scrollIntoView(targetEl[0], true);\n            }\n          } else {\n            window.open(href, '_blank', 'rel=noopener noreferrer,menubar=yes,toolbar=yes,location=yes,status=yes,resizable=yes,scrollbars=yes');\n          }\n        });\n      }\n    };\n    var registerReadOnlySelectionBlockers = function (editor) {\n      editor.on('ShowCaret', function (e) {\n        if (isReadOnly(editor)) {\n          e.preventDefault();\n        }\n      });\n      editor.on('ObjectSelected', function (e) {\n        if (isReadOnly(editor)) {\n          e.preventDefault();\n        }\n      });\n    };\n\n    var nativeEvents = Tools.makeMap('focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange ' + 'mouseout mouseenter mouseleave wheel keydown keypress keyup input beforeinput contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend touchcancel', ' ');\n    var EventDispatcher = function () {\n      function EventDispatcher(settings) {\n        this.bindings = {};\n        this.settings = settings || {};\n        this.scope = this.settings.scope || this;\n        this.toggleEvent = this.settings.toggleEvent || never;\n      }\n      EventDispatcher.isNative = function (name) {\n        return !!nativeEvents[name.toLowerCase()];\n      };\n      EventDispatcher.prototype.fire = function (name, args) {\n        var lcName = name.toLowerCase();\n        var event = normalize$3(lcName, args || {}, this.scope);\n        if (this.settings.beforeFire) {\n          this.settings.beforeFire(event);\n        }\n        var handlers = this.bindings[lcName];\n        if (handlers) {\n          for (var i = 0, l = handlers.length; i < l; i++) {\n            var callback = handlers[i];\n            if (callback.removed) {\n              continue;\n            }\n            if (callback.once) {\n              this.off(lcName, callback.func);\n            }\n            if (event.isImmediatePropagationStopped()) {\n              return event;\n            }\n            if (callback.func.call(this.scope, event) === false) {\n              event.preventDefault();\n              return event;\n            }\n          }\n        }\n        return event;\n      };\n      EventDispatcher.prototype.on = function (name, callback, prepend, extra) {\n        if (callback === false) {\n          callback = never;\n        }\n        if (callback) {\n          var wrappedCallback = {\n            func: callback,\n            removed: false\n          };\n          if (extra) {\n            Tools.extend(wrappedCallback, extra);\n          }\n          var names = name.toLowerCase().split(' ');\n          var i = names.length;\n          while (i--) {\n            var currentName = names[i];\n            var handlers = this.bindings[currentName];\n            if (!handlers) {\n              handlers = [];\n              this.toggleEvent(currentName, true);\n            }\n            if (prepend) {\n              handlers = __spreadArray([wrappedCallback], handlers, true);\n            } else {\n              handlers = __spreadArray(__spreadArray([], handlers, true), [wrappedCallback], false);\n            }\n            this.bindings[currentName] = handlers;\n          }\n        }\n        return this;\n      };\n      EventDispatcher.prototype.off = function (name, callback) {\n        var _this = this;\n        if (name) {\n          var names = name.toLowerCase().split(' ');\n          var i = names.length;\n          while (i--) {\n            var currentName = names[i];\n            var handlers = this.bindings[currentName];\n            if (!currentName) {\n              each$j(this.bindings, function (_value, bindingName) {\n                _this.toggleEvent(bindingName, false);\n                delete _this.bindings[bindingName];\n              });\n              return this;\n            }\n            if (handlers) {\n              if (!callback) {\n                handlers.length = 0;\n              } else {\n                var filteredHandlers = partition(handlers, function (handler) {\n                  return handler.func === callback;\n                });\n                handlers = filteredHandlers.fail;\n                this.bindings[currentName] = handlers;\n                each$k(filteredHandlers.pass, function (handler) {\n                  handler.removed = true;\n                });\n              }\n              if (!handlers.length) {\n                this.toggleEvent(name, false);\n                delete this.bindings[currentName];\n              }\n            }\n          }\n        } else {\n          each$j(this.bindings, function (_value, name) {\n            _this.toggleEvent(name, false);\n          });\n          this.bindings = {};\n        }\n        return this;\n      };\n      EventDispatcher.prototype.once = function (name, callback, prepend) {\n        return this.on(name, callback, prepend, { once: true });\n      };\n      EventDispatcher.prototype.has = function (name) {\n        name = name.toLowerCase();\n        return !(!this.bindings[name] || this.bindings[name].length === 0);\n      };\n      return EventDispatcher;\n    }();\n\n    var getEventDispatcher = function (obj) {\n      if (!obj._eventDispatcher) {\n        obj._eventDispatcher = new EventDispatcher({\n          scope: obj,\n          toggleEvent: function (name, state) {\n            if (EventDispatcher.isNative(name) && obj.toggleNativeEvent) {\n              obj.toggleNativeEvent(name, state);\n            }\n          }\n        });\n      }\n      return obj._eventDispatcher;\n    };\n    var Observable = {\n      fire: function (name, args, bubble) {\n        var self = this;\n        if (self.removed && name !== 'remove' && name !== 'detach') {\n          return args;\n        }\n        var dispatcherArgs = getEventDispatcher(self).fire(name, args);\n        if (bubble !== false && self.parent) {\n          var parent_1 = self.parent();\n          while (parent_1 && !dispatcherArgs.isPropagationStopped()) {\n            parent_1.fire(name, dispatcherArgs, false);\n            parent_1 = parent_1.parent();\n          }\n        }\n        return dispatcherArgs;\n      },\n      on: function (name, callback, prepend) {\n        return getEventDispatcher(this).on(name, callback, prepend);\n      },\n      off: function (name, callback) {\n        return getEventDispatcher(this).off(name, callback);\n      },\n      once: function (name, callback) {\n        return getEventDispatcher(this).once(name, callback);\n      },\n      hasEventListeners: function (name) {\n        return getEventDispatcher(this).has(name);\n      }\n    };\n\n    var DOM$2 = DOMUtils.DOM;\n    var customEventRootDelegates;\n    var getEventTarget = function (editor, eventName) {\n      if (eventName === 'selectionchange') {\n        return editor.getDoc();\n      }\n      if (!editor.inline && /^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(eventName)) {\n        return editor.getDoc().documentElement;\n      }\n      var eventRoot = getEventRoot(editor);\n      if (eventRoot) {\n        if (!editor.eventRoot) {\n          editor.eventRoot = DOM$2.select(eventRoot)[0];\n        }\n        return editor.eventRoot;\n      }\n      return editor.getBody();\n    };\n    var isListening = function (editor) {\n      return !editor.hidden && !isReadOnly(editor);\n    };\n    var fireEvent = function (editor, eventName, e) {\n      if (isListening(editor)) {\n        editor.fire(eventName, e);\n      } else if (isReadOnly(editor)) {\n        processReadonlyEvents(editor, e);\n      }\n    };\n    var bindEventDelegate = function (editor, eventName) {\n      var delegate;\n      if (!editor.delegates) {\n        editor.delegates = {};\n      }\n      if (editor.delegates[eventName] || editor.removed) {\n        return;\n      }\n      var eventRootElm = getEventTarget(editor, eventName);\n      if (getEventRoot(editor)) {\n        if (!customEventRootDelegates) {\n          customEventRootDelegates = {};\n          editor.editorManager.on('removeEditor', function () {\n            if (!editor.editorManager.activeEditor) {\n              if (customEventRootDelegates) {\n                each$j(customEventRootDelegates, function (_value, name) {\n                  editor.dom.unbind(getEventTarget(editor, name));\n                });\n                customEventRootDelegates = null;\n              }\n            }\n          });\n        }\n        if (customEventRootDelegates[eventName]) {\n          return;\n        }\n        delegate = function (e) {\n          var target = e.target;\n          var editors = editor.editorManager.get();\n          var i = editors.length;\n          while (i--) {\n            var body = editors[i].getBody();\n            if (body === target || DOM$2.isChildOf(target, body)) {\n              fireEvent(editors[i], eventName, e);\n            }\n          }\n        };\n        customEventRootDelegates[eventName] = delegate;\n        DOM$2.bind(eventRootElm, eventName, delegate);\n      } else {\n        delegate = function (e) {\n          fireEvent(editor, eventName, e);\n        };\n        DOM$2.bind(eventRootElm, eventName, delegate);\n        editor.delegates[eventName] = delegate;\n      }\n    };\n    var EditorObservable = __assign(__assign({}, Observable), {\n      bindPendingEventDelegates: function () {\n        var self = this;\n        Tools.each(self._pendingNativeEvents, function (name) {\n          bindEventDelegate(self, name);\n        });\n      },\n      toggleNativeEvent: function (name, state) {\n        var self = this;\n        if (name === 'focus' || name === 'blur') {\n          return;\n        }\n        if (self.removed) {\n          return;\n        }\n        if (state) {\n          if (self.initialized) {\n            bindEventDelegate(self, name);\n          } else {\n            if (!self._pendingNativeEvents) {\n              self._pendingNativeEvents = [name];\n            } else {\n              self._pendingNativeEvents.push(name);\n            }\n          }\n        } else if (self.initialized) {\n          self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\n          delete self.delegates[name];\n        }\n      },\n      unbindAllNativeEvents: function () {\n        var self = this;\n        var body = self.getBody();\n        var dom = self.dom;\n        if (self.delegates) {\n          each$j(self.delegates, function (value, name) {\n            self.dom.unbind(getEventTarget(self, name), name, value);\n          });\n          delete self.delegates;\n        }\n        if (!self.inline && body && dom) {\n          body.onload = null;\n          dom.unbind(self.getWin());\n          dom.unbind(self.getDoc());\n        }\n        if (dom) {\n          dom.unbind(body);\n          dom.unbind(self.getContainer());\n        }\n      }\n    });\n\n    var defaultModes = [\n      'design',\n      'readonly'\n    ];\n    var switchToMode = function (editor, activeMode, availableModes, mode) {\n      var oldMode = availableModes[activeMode.get()];\n      var newMode = availableModes[mode];\n      try {\n        newMode.activate();\n      } catch (e) {\n        console.error('problem while activating editor mode ' + mode + ':', e);\n        return;\n      }\n      oldMode.deactivate();\n      if (oldMode.editorReadOnly !== newMode.editorReadOnly) {\n        toggleReadOnly(editor, newMode.editorReadOnly);\n      }\n      activeMode.set(mode);\n      fireSwitchMode(editor, mode);\n    };\n    var setMode = function (editor, availableModes, activeMode, mode) {\n      if (mode === activeMode.get()) {\n        return;\n      } else if (!has$2(availableModes, mode)) {\n        throw new Error('Editor mode \\'' + mode + '\\' is invalid');\n      }\n      if (editor.initialized) {\n        switchToMode(editor, activeMode, availableModes, mode);\n      } else {\n        editor.on('init', function () {\n          return switchToMode(editor, activeMode, availableModes, mode);\n        });\n      }\n    };\n    var registerMode = function (availableModes, mode, api) {\n      var _a;\n      if (contains$3(defaultModes, mode)) {\n        throw new Error('Cannot override default mode ' + mode);\n      }\n      return __assign(__assign({}, availableModes), (_a = {}, _a[mode] = __assign(__assign({}, api), {\n        deactivate: function () {\n          try {\n            api.deactivate();\n          } catch (e) {\n            console.error('problem while deactivating editor mode ' + mode + ':', e);\n          }\n        }\n      }), _a));\n    };\n\n    var create$4 = function (editor) {\n      var activeMode = Cell('design');\n      var availableModes = Cell({\n        design: {\n          activate: noop,\n          deactivate: noop,\n          editorReadOnly: false\n        },\n        readonly: {\n          activate: noop,\n          deactivate: noop,\n          editorReadOnly: true\n        }\n      });\n      registerReadOnlyContentFilters(editor);\n      registerReadOnlySelectionBlockers(editor);\n      return {\n        isReadOnly: function () {\n          return isReadOnly(editor);\n        },\n        set: function (mode) {\n          return setMode(editor, availableModes.get(), activeMode, mode);\n        },\n        get: function () {\n          return activeMode.get();\n        },\n        register: function (mode, api) {\n          availableModes.set(registerMode(availableModes.get(), mode, api));\n        }\n      };\n    };\n\n    var each$3 = Tools.each, explode$1 = Tools.explode;\n    var keyCodeLookup = {\n      f1: 112,\n      f2: 113,\n      f3: 114,\n      f4: 115,\n      f5: 116,\n      f6: 117,\n      f7: 118,\n      f8: 119,\n      f9: 120,\n      f10: 121,\n      f11: 122,\n      f12: 123\n    };\n    var modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');\n    var parseShortcut = function (pattern) {\n      var key;\n      var shortcut = {};\n      each$3(explode$1(pattern.toLowerCase(), '+'), function (value) {\n        if (value in modifierNames) {\n          shortcut[value] = true;\n        } else {\n          if (/^[0-9]{2,}$/.test(value)) {\n            shortcut.keyCode = parseInt(value, 10);\n          } else {\n            shortcut.charCode = value.charCodeAt(0);\n            shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0);\n          }\n        }\n      });\n      var id = [shortcut.keyCode];\n      for (key in modifierNames) {\n        if (shortcut[key]) {\n          id.push(key);\n        } else {\n          shortcut[key] = false;\n        }\n      }\n      shortcut.id = id.join(',');\n      if (shortcut.access) {\n        shortcut.alt = true;\n        if (Env.mac) {\n          shortcut.ctrl = true;\n        } else {\n          shortcut.shift = true;\n        }\n      }\n      if (shortcut.meta) {\n        if (Env.mac) {\n          shortcut.meta = true;\n        } else {\n          shortcut.ctrl = true;\n          shortcut.meta = false;\n        }\n      }\n      return shortcut;\n    };\n    var Shortcuts = function () {\n      function Shortcuts(editor) {\n        this.shortcuts = {};\n        this.pendingPatterns = [];\n        this.editor = editor;\n        var self = this;\n        editor.on('keyup keypress keydown', function (e) {\n          if ((self.hasModifier(e) || self.isFunctionKey(e)) && !e.isDefaultPrevented()) {\n            each$3(self.shortcuts, function (shortcut) {\n              if (self.matchShortcut(e, shortcut)) {\n                self.pendingPatterns = shortcut.subpatterns.slice(0);\n                if (e.type === 'keydown') {\n                  self.executeShortcutAction(shortcut);\n                }\n                return true;\n              }\n            });\n            if (self.matchShortcut(e, self.pendingPatterns[0])) {\n              if (self.pendingPatterns.length === 1) {\n                if (e.type === 'keydown') {\n                  self.executeShortcutAction(self.pendingPatterns[0]);\n                }\n              }\n              self.pendingPatterns.shift();\n            }\n          }\n        });\n      }\n      Shortcuts.prototype.add = function (pattern, desc, cmdFunc, scope) {\n        var self = this;\n        var func = self.normalizeCommandFunc(cmdFunc);\n        each$3(explode$1(Tools.trim(pattern)), function (pattern) {\n          var shortcut = self.createShortcut(pattern, desc, func, scope);\n          self.shortcuts[shortcut.id] = shortcut;\n        });\n        return true;\n      };\n      Shortcuts.prototype.remove = function (pattern) {\n        var shortcut = this.createShortcut(pattern);\n        if (this.shortcuts[shortcut.id]) {\n          delete this.shortcuts[shortcut.id];\n          return true;\n        }\n        return false;\n      };\n      Shortcuts.prototype.normalizeCommandFunc = function (cmdFunc) {\n        var self = this;\n        var cmd = cmdFunc;\n        if (typeof cmd === 'string') {\n          return function () {\n            self.editor.execCommand(cmd, false, null);\n          };\n        } else if (Tools.isArray(cmd)) {\n          return function () {\n            self.editor.execCommand(cmd[0], cmd[1], cmd[2]);\n          };\n        } else {\n          return cmd;\n        }\n      };\n      Shortcuts.prototype.createShortcut = function (pattern, desc, cmdFunc, scope) {\n        var shortcuts = Tools.map(explode$1(pattern, '>'), parseShortcut);\n        shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], {\n          func: cmdFunc,\n          scope: scope || this.editor\n        });\n        return Tools.extend(shortcuts[0], {\n          desc: this.editor.translate(desc),\n          subpatterns: shortcuts.slice(1)\n        });\n      };\n      Shortcuts.prototype.hasModifier = function (e) {\n        return e.altKey || e.ctrlKey || e.metaKey;\n      };\n      Shortcuts.prototype.isFunctionKey = function (e) {\n        return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;\n      };\n      Shortcuts.prototype.matchShortcut = function (e, shortcut) {\n        if (!shortcut) {\n          return false;\n        }\n        if (shortcut.ctrl !== e.ctrlKey || shortcut.meta !== e.metaKey) {\n          return false;\n        }\n        if (shortcut.alt !== e.altKey || shortcut.shift !== e.shiftKey) {\n          return false;\n        }\n        if (e.keyCode === shortcut.keyCode || e.charCode && e.charCode === shortcut.charCode) {\n          e.preventDefault();\n          return true;\n        }\n        return false;\n      };\n      Shortcuts.prototype.executeShortcutAction = function (shortcut) {\n        return shortcut.func ? shortcut.func.call(shortcut.scope) : null;\n      };\n      return Shortcuts;\n    }();\n\n    var create$3 = function () {\n      var buttons = {};\n      var menuItems = {};\n      var popups = {};\n      var icons = {};\n      var contextMenus = {};\n      var contextToolbars = {};\n      var sidebars = {};\n      var add = function (collection, type) {\n        return function (name, spec) {\n          return collection[name.toLowerCase()] = __assign(__assign({}, spec), { type: type });\n        };\n      };\n      var addIcon = function (name, svgData) {\n        return icons[name.toLowerCase()] = svgData;\n      };\n      return {\n        addButton: add(buttons, 'button'),\n        addGroupToolbarButton: add(buttons, 'grouptoolbarbutton'),\n        addToggleButton: add(buttons, 'togglebutton'),\n        addMenuButton: add(buttons, 'menubutton'),\n        addSplitButton: add(buttons, 'splitbutton'),\n        addMenuItem: add(menuItems, 'menuitem'),\n        addNestedMenuItem: add(menuItems, 'nestedmenuitem'),\n        addToggleMenuItem: add(menuItems, 'togglemenuitem'),\n        addAutocompleter: add(popups, 'autocompleter'),\n        addContextMenu: add(contextMenus, 'contextmenu'),\n        addContextToolbar: add(contextToolbars, 'contexttoolbar'),\n        addContextForm: add(contextToolbars, 'contextform'),\n        addSidebar: add(sidebars, 'sidebar'),\n        addIcon: addIcon,\n        getAll: function () {\n          return {\n            buttons: buttons,\n            menuItems: menuItems,\n            icons: icons,\n            popups: popups,\n            contextMenus: contextMenus,\n            contextToolbars: contextToolbars,\n            sidebars: sidebars\n          };\n        }\n      };\n    };\n\n    var registry = function () {\n      var bridge = create$3();\n      return {\n        addAutocompleter: bridge.addAutocompleter,\n        addButton: bridge.addButton,\n        addContextForm: bridge.addContextForm,\n        addContextMenu: bridge.addContextMenu,\n        addContextToolbar: bridge.addContextToolbar,\n        addIcon: bridge.addIcon,\n        addMenuButton: bridge.addMenuButton,\n        addMenuItem: bridge.addMenuItem,\n        addNestedMenuItem: bridge.addNestedMenuItem,\n        addSidebar: bridge.addSidebar,\n        addSplitButton: bridge.addSplitButton,\n        addToggleButton: bridge.addToggleButton,\n        addGroupToolbarButton: bridge.addGroupToolbarButton,\n        addToggleMenuItem: bridge.addToggleMenuItem,\n        getAll: bridge.getAll\n      };\n    };\n\n    var DOM$1 = DOMUtils.DOM;\n    var extend$3 = Tools.extend, each$2 = Tools.each;\n    var resolve = Tools.resolve;\n    var ie = Env.ie;\n    var Editor = function () {\n      function Editor(id, settings, editorManager) {\n        var _this = this;\n        this.plugins = {};\n        this.contentCSS = [];\n        this.contentStyles = [];\n        this.loadedCSS = {};\n        this.isNotDirty = false;\n        this.editorManager = editorManager;\n        this.documentBaseUrl = editorManager.documentBaseURL;\n        extend$3(this, EditorObservable);\n        this.settings = getEditorSettings(this, id, this.documentBaseUrl, editorManager.defaultSettings, settings);\n        if (this.settings.suffix) {\n          editorManager.suffix = this.settings.suffix;\n        }\n        this.suffix = editorManager.suffix;\n        if (this.settings.base_url) {\n          editorManager._setBaseUrl(this.settings.base_url);\n        }\n        this.baseUri = editorManager.baseURI;\n        if (this.settings.referrer_policy) {\n          ScriptLoader.ScriptLoader._setReferrerPolicy(this.settings.referrer_policy);\n          DOMUtils.DOM.styleSheetLoader._setReferrerPolicy(this.settings.referrer_policy);\n        }\n        AddOnManager.languageLoad = this.settings.language_load;\n        AddOnManager.baseURL = editorManager.baseURL;\n        this.id = id;\n        this.setDirty(false);\n        this.documentBaseURI = new URI(this.settings.document_base_url, { base_uri: this.baseUri });\n        this.baseURI = this.baseUri;\n        this.inline = !!this.settings.inline;\n        this.shortcuts = new Shortcuts(this);\n        this.editorCommands = new EditorCommands(this);\n        if (this.settings.cache_suffix) {\n          Env.cacheSuffix = this.settings.cache_suffix.replace(/^[\\?\\&]+/, '');\n        }\n        this.ui = {\n          registry: registry(),\n          styleSheetLoader: undefined,\n          show: noop,\n          hide: noop,\n          enable: noop,\n          disable: noop,\n          isDisabled: never\n        };\n        var self = this;\n        var modeInstance = create$4(self);\n        this.mode = modeInstance;\n        this.setMode = modeInstance.set;\n        editorManager.fire('SetupEditor', { editor: this });\n        this.execCallback('setup', this);\n        this.$ = DomQuery.overrideDefaults(function () {\n          return {\n            context: _this.inline ? _this.getBody() : _this.getDoc(),\n            element: _this.getBody()\n          };\n        });\n      }\n      Editor.prototype.render = function () {\n        render(this);\n      };\n      Editor.prototype.focus = function (skipFocus) {\n        this.execCommand('mceFocus', false, skipFocus);\n      };\n      Editor.prototype.hasFocus = function () {\n        return hasFocus(this);\n      };\n      Editor.prototype.execCallback = function (name) {\n        var x = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n          x[_i - 1] = arguments[_i];\n        }\n        var self = this;\n        var callback = self.settings[name], scope;\n        if (!callback) {\n          return;\n        }\n        if (self.callbackLookup && (scope = self.callbackLookup[name])) {\n          callback = scope.func;\n          scope = scope.scope;\n        }\n        if (typeof callback === 'string') {\n          scope = callback.replace(/\\.\\w+$/, '');\n          scope = scope ? resolve(scope) : 0;\n          callback = resolve(callback);\n          self.callbackLookup = self.callbackLookup || {};\n          self.callbackLookup[name] = {\n            func: callback,\n            scope: scope\n          };\n        }\n        return callback.apply(scope || self, x);\n      };\n      Editor.prototype.translate = function (text) {\n        return I18n.translate(text);\n      };\n      Editor.prototype.getParam = function (name, defaultVal, type) {\n        return getParam(this, name, defaultVal, type);\n      };\n      Editor.prototype.hasPlugin = function (name, loaded) {\n        var hasPlugin = contains$3(getPlugins(this).split(/[ ,]/), name);\n        if (hasPlugin) {\n          return loaded ? PluginManager.get(name) !== undefined : true;\n        } else {\n          return false;\n        }\n      };\n      Editor.prototype.nodeChanged = function (args) {\n        this._nodeChangeDispatcher.nodeChanged(args);\n      };\n      Editor.prototype.addCommand = function (name, callback, scope) {\n        this.editorCommands.addCommand(name, callback, scope);\n      };\n      Editor.prototype.addQueryStateHandler = function (name, callback, scope) {\n        this.editorCommands.addQueryStateHandler(name, callback, scope);\n      };\n      Editor.prototype.addQueryValueHandler = function (name, callback, scope) {\n        this.editorCommands.addQueryValueHandler(name, callback, scope);\n      };\n      Editor.prototype.addShortcut = function (pattern, desc, cmdFunc, scope) {\n        this.shortcuts.add(pattern, desc, cmdFunc, scope);\n      };\n      Editor.prototype.execCommand = function (cmd, ui, value, args) {\n        return this.editorCommands.execCommand(cmd, ui, value, args);\n      };\n      Editor.prototype.queryCommandState = function (cmd) {\n        return this.editorCommands.queryCommandState(cmd);\n      };\n      Editor.prototype.queryCommandValue = function (cmd) {\n        return this.editorCommands.queryCommandValue(cmd);\n      };\n      Editor.prototype.queryCommandSupported = function (cmd) {\n        return this.editorCommands.queryCommandSupported(cmd);\n      };\n      Editor.prototype.show = function () {\n        var self = this;\n        if (self.hidden) {\n          self.hidden = false;\n          if (self.inline) {\n            self.getBody().contentEditable = 'true';\n          } else {\n            DOM$1.show(self.getContainer());\n            DOM$1.hide(self.id);\n          }\n          self.load();\n          self.fire('show');\n        }\n      };\n      Editor.prototype.hide = function () {\n        var self = this, doc = self.getDoc();\n        if (!self.hidden) {\n          if (ie && doc && !self.inline) {\n            doc.execCommand('SelectAll');\n          }\n          self.save();\n          if (self.inline) {\n            self.getBody().contentEditable = 'false';\n            if (self === self.editorManager.focusedEditor) {\n              self.editorManager.focusedEditor = null;\n            }\n          } else {\n            DOM$1.hide(self.getContainer());\n            DOM$1.setStyle(self.id, 'display', self.orgDisplay);\n          }\n          self.hidden = true;\n          self.fire('hide');\n        }\n      };\n      Editor.prototype.isHidden = function () {\n        return !!this.hidden;\n      };\n      Editor.prototype.setProgressState = function (state, time) {\n        this.fire('ProgressState', {\n          state: state,\n          time: time\n        });\n      };\n      Editor.prototype.load = function (args) {\n        var self = this;\n        var elm = self.getElement(), html;\n        if (self.removed) {\n          return '';\n        }\n        if (elm) {\n          args = args || {};\n          args.load = true;\n          var value = isTextareaOrInput(elm) ? elm.value : elm.innerHTML;\n          html = self.setContent(value, args);\n          args.element = elm;\n          if (!args.no_events) {\n            self.fire('LoadContent', args);\n          }\n          args.element = elm = null;\n          return html;\n        }\n      };\n      Editor.prototype.save = function (args) {\n        var self = this;\n        var elm = self.getElement(), html, form;\n        if (!elm || !self.initialized || self.removed) {\n          return;\n        }\n        args = args || {};\n        args.save = true;\n        args.element = elm;\n        html = args.content = self.getContent(args);\n        if (!args.no_events) {\n          self.fire('SaveContent', args);\n        }\n        if (args.format === 'raw') {\n          self.fire('RawSaveContent', args);\n        }\n        html = args.content;\n        if (!isTextareaOrInput(elm)) {\n          if (args.is_removing || !self.inline) {\n            elm.innerHTML = html;\n          }\n          if (form = DOM$1.getParent(self.id, 'form')) {\n            each$2(form.elements, function (elm) {\n              if (elm.name === self.id) {\n                elm.value = html;\n                return false;\n              }\n            });\n          }\n        } else {\n          elm.value = html;\n        }\n        args.element = elm = null;\n        if (args.set_dirty !== false) {\n          self.setDirty(false);\n        }\n        return html;\n      };\n      Editor.prototype.setContent = function (content, args) {\n        return setContent(this, content, args);\n      };\n      Editor.prototype.getContent = function (args) {\n        return getContent(this, args);\n      };\n      Editor.prototype.insertContent = function (content, args) {\n        if (args) {\n          content = extend$3({ content: content }, args);\n        }\n        this.execCommand('mceInsertContent', false, content);\n      };\n      Editor.prototype.resetContent = function (initialContent) {\n        if (initialContent === undefined) {\n          setContent(this, this.startContent, { format: 'raw' });\n        } else {\n          setContent(this, initialContent);\n        }\n        this.undoManager.reset();\n        this.setDirty(false);\n        this.nodeChanged();\n      };\n      Editor.prototype.isDirty = function () {\n        return !this.isNotDirty;\n      };\n      Editor.prototype.setDirty = function (state) {\n        var oldState = !this.isNotDirty;\n        this.isNotDirty = !state;\n        if (state && state !== oldState) {\n          this.fire('dirty');\n        }\n      };\n      Editor.prototype.getContainer = function () {\n        var self = this;\n        if (!self.container) {\n          self.container = DOM$1.get(self.editorContainer || self.id + '_parent');\n        }\n        return self.container;\n      };\n      Editor.prototype.getContentAreaContainer = function () {\n        return this.contentAreaContainer;\n      };\n      Editor.prototype.getElement = function () {\n        if (!this.targetElm) {\n          this.targetElm = DOM$1.get(this.id);\n        }\n        return this.targetElm;\n      };\n      Editor.prototype.getWin = function () {\n        var self = this;\n        var elm;\n        if (!self.contentWindow) {\n          elm = self.iframeElement;\n          if (elm) {\n            self.contentWindow = elm.contentWindow;\n          }\n        }\n        return self.contentWindow;\n      };\n      Editor.prototype.getDoc = function () {\n        var self = this;\n        var win;\n        if (!self.contentDocument) {\n          win = self.getWin();\n          if (win) {\n            self.contentDocument = win.document;\n          }\n        }\n        return self.contentDocument;\n      };\n      Editor.prototype.getBody = function () {\n        var doc = this.getDoc();\n        return this.bodyElement || (doc ? doc.body : null);\n      };\n      Editor.prototype.convertURL = function (url, name, elm) {\n        var self = this, settings = self.settings;\n        if (settings.urlconverter_callback) {\n          return self.execCallback('urlconverter_callback', url, elm, true, name);\n        }\n        if (!settings.convert_urls || elm && elm.nodeName === 'LINK' || url.indexOf('file:') === 0 || url.length === 0) {\n          return url;\n        }\n        if (settings.relative_urls) {\n          return self.documentBaseURI.toRelative(url);\n        }\n        url = self.documentBaseURI.toAbsolute(url, settings.remove_script_host);\n        return url;\n      };\n      Editor.prototype.addVisual = function (elm) {\n        addVisual(this, elm);\n      };\n      Editor.prototype.remove = function () {\n        remove(this);\n      };\n      Editor.prototype.destroy = function (automatic) {\n        destroy(this, automatic);\n      };\n      Editor.prototype.uploadImages = function (callback) {\n        return this.editorUpload.uploadImages(callback);\n      };\n      Editor.prototype._scanForImages = function () {\n        return this.editorUpload.scanForImages();\n      };\n      Editor.prototype.addButton = function () {\n        throw new Error('editor.addButton has been removed in tinymce 5x, use editor.ui.registry.addButton or editor.ui.registry.addToggleButton or editor.ui.registry.addSplitButton instead');\n      };\n      Editor.prototype.addSidebar = function () {\n        throw new Error('editor.addSidebar has been removed in tinymce 5x, use editor.ui.registry.addSidebar instead');\n      };\n      Editor.prototype.addMenuItem = function () {\n        throw new Error('editor.addMenuItem has been removed in tinymce 5x, use editor.ui.registry.addMenuItem instead');\n      };\n      Editor.prototype.addContextToolbar = function () {\n        throw new Error('editor.addContextToolbar has been removed in tinymce 5x, use editor.ui.registry.addContextToolbar instead');\n      };\n      return Editor;\n    }();\n\n    var DOM = DOMUtils.DOM;\n    var explode = Tools.explode, each$1 = Tools.each, extend$2 = Tools.extend;\n    var instanceCounter = 0, boundGlobalEvents = false;\n    var beforeUnloadDelegate;\n    var legacyEditors = [];\n    var editors = [];\n    var isValidLegacyKey = function (id) {\n      return id !== 'length';\n    };\n    var globalEventDelegate = function (e) {\n      var type = e.type;\n      each$1(EditorManager.get(), function (editor) {\n        switch (type) {\n        case 'scroll':\n          editor.fire('ScrollWindow', e);\n          break;\n        case 'resize':\n          editor.fire('ResizeWindow', e);\n          break;\n        }\n      });\n    };\n    var toggleGlobalEvents = function (state) {\n      if (state !== boundGlobalEvents) {\n        if (state) {\n          DomQuery(window).on('resize scroll', globalEventDelegate);\n        } else {\n          DomQuery(window).off('resize scroll', globalEventDelegate);\n        }\n        boundGlobalEvents = state;\n      }\n    };\n    var removeEditorFromList = function (targetEditor) {\n      var oldEditors = editors;\n      delete legacyEditors[targetEditor.id];\n      for (var i = 0; i < legacyEditors.length; i++) {\n        if (legacyEditors[i] === targetEditor) {\n          legacyEditors.splice(i, 1);\n          break;\n        }\n      }\n      editors = filter$4(editors, function (editor) {\n        return targetEditor !== editor;\n      });\n      if (EditorManager.activeEditor === targetEditor) {\n        EditorManager.activeEditor = editors.length > 0 ? editors[0] : null;\n      }\n      if (EditorManager.focusedEditor === targetEditor) {\n        EditorManager.focusedEditor = null;\n      }\n      return oldEditors.length !== editors.length;\n    };\n    var purgeDestroyedEditor = function (editor) {\n      if (editor && editor.initialized && !(editor.getContainer() || editor.getBody()).parentNode) {\n        removeEditorFromList(editor);\n        editor.unbindAllNativeEvents();\n        editor.destroy(true);\n        editor.removed = true;\n        editor = null;\n      }\n      return editor;\n    };\n    var isQuirksMode = document.compatMode !== 'CSS1Compat';\n    var EditorManager = __assign(__assign({}, Observable), {\n      baseURI: null,\n      baseURL: null,\n      defaultSettings: {},\n      documentBaseURL: null,\n      suffix: null,\n      $: DomQuery,\n      majorVersion: '5',\n      minorVersion: '10.5',\n      releaseDate: '2022-05-25',\n      editors: legacyEditors,\n      i18n: I18n,\n      activeEditor: null,\n      focusedEditor: null,\n      settings: {},\n      setup: function () {\n        var self = this;\n        var baseURL, documentBaseURL, suffix = '';\n        documentBaseURL = URI.getDocumentBaseUrl(document.location);\n        if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(documentBaseURL)) {\n          documentBaseURL = documentBaseURL.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n          if (!/[\\/\\\\]$/.test(documentBaseURL)) {\n            documentBaseURL += '/';\n          }\n        }\n        var preInit = window.tinymce || window.tinyMCEPreInit;\n        if (preInit) {\n          baseURL = preInit.base || preInit.baseURL;\n          suffix = preInit.suffix;\n        } else {\n          var scripts = document.getElementsByTagName('script');\n          for (var i = 0; i < scripts.length; i++) {\n            var src = scripts[i].src || '';\n            if (src === '') {\n              continue;\n            }\n            var srcScript = src.substring(src.lastIndexOf('/'));\n            if (/tinymce(\\.full|\\.jquery|)(\\.min|\\.dev|)\\.js/.test(src)) {\n              if (srcScript.indexOf('.min') !== -1) {\n                suffix = '.min';\n              }\n              baseURL = src.substring(0, src.lastIndexOf('/'));\n              break;\n            }\n          }\n          if (!baseURL && document.currentScript) {\n            var src = document.currentScript.src;\n            if (src.indexOf('.min') !== -1) {\n              suffix = '.min';\n            }\n            baseURL = src.substring(0, src.lastIndexOf('/'));\n          }\n        }\n        self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);\n        self.documentBaseURL = documentBaseURL;\n        self.baseURI = new URI(self.baseURL);\n        self.suffix = suffix;\n        setup$l(self);\n      },\n      overrideDefaults: function (defaultSettings) {\n        var baseUrl = defaultSettings.base_url;\n        if (baseUrl) {\n          this._setBaseUrl(baseUrl);\n        }\n        var suffix = defaultSettings.suffix;\n        if (defaultSettings.suffix) {\n          this.suffix = suffix;\n        }\n        this.defaultSettings = defaultSettings;\n        var pluginBaseUrls = defaultSettings.plugin_base_urls;\n        if (pluginBaseUrls !== undefined) {\n          each$j(pluginBaseUrls, function (pluginBaseUrl, pluginName) {\n            AddOnManager.PluginManager.urls[pluginName] = pluginBaseUrl;\n          });\n        }\n      },\n      init: function (settings) {\n        var self = this;\n        var result;\n        var invalidInlineTargets = Tools.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option table tbody tfoot thead tr th td script noscript style textarea video audio iframe object menu', ' ');\n        var isInvalidInlineTarget = function (settings, elm) {\n          return settings.inline && elm.tagName.toLowerCase() in invalidInlineTargets;\n        };\n        var createId = function (elm) {\n          var id = elm.id;\n          if (!id) {\n            id = get$9(elm, 'name').filter(function (name) {\n              return !DOM.get(name);\n            }).getOrThunk(DOM.uniqueId);\n            elm.setAttribute('id', id);\n          }\n          return id;\n        };\n        var execCallback = function (name) {\n          var callback = settings[name];\n          if (!callback) {\n            return;\n          }\n          return callback.apply(self, []);\n        };\n        var hasClass = function (elm, className) {\n          return className.constructor === RegExp ? className.test(elm.className) : DOM.hasClass(elm, className);\n        };\n        var findTargets = function (settings) {\n          var targets = [];\n          if (Env.browser.isIE() && Env.browser.version.major < 11) {\n            initError('TinyMCE does not support the browser you are using. For a list of supported' + ' browsers please see: https://www.tinymce.com/docs/get-started/system-requirements/');\n            return [];\n          } else if (isQuirksMode) {\n            initError('Failed to initialize the editor as the document is not in standards mode. ' + 'TinyMCE requires standards mode.');\n            return [];\n          }\n          if (settings.types) {\n            each$1(settings.types, function (type) {\n              targets = targets.concat(DOM.select(type.selector));\n            });\n            return targets;\n          } else if (settings.selector) {\n            return DOM.select(settings.selector);\n          } else if (settings.target) {\n            return [settings.target];\n          }\n          switch (settings.mode) {\n          case 'exact':\n            var l = settings.elements || '';\n            if (l.length > 0) {\n              each$1(explode(l), function (id) {\n                var elm = DOM.get(id);\n                if (elm) {\n                  targets.push(elm);\n                } else {\n                  each$1(document.forms, function (f) {\n                    each$1(f.elements, function (e) {\n                      if (e.name === id) {\n                        id = 'mce_editor_' + instanceCounter++;\n                        DOM.setAttrib(e, 'id', id);\n                        targets.push(e);\n                      }\n                    });\n                  });\n                }\n              });\n            }\n            break;\n          case 'textareas':\n          case 'specific_textareas':\n            each$1(DOM.select('textarea'), function (elm) {\n              if (settings.editor_deselector && hasClass(elm, settings.editor_deselector)) {\n                return;\n              }\n              if (!settings.editor_selector || hasClass(elm, settings.editor_selector)) {\n                targets.push(elm);\n              }\n            });\n            break;\n          }\n          return targets;\n        };\n        var provideResults = function (editors) {\n          result = editors;\n        };\n        var initEditors = function () {\n          var initCount = 0;\n          var editors = [];\n          var targets;\n          var createEditor = function (id, settings, targetElm) {\n            var editor = new Editor(id, settings, self);\n            editors.push(editor);\n            editor.on('init', function () {\n              if (++initCount === targets.length) {\n                provideResults(editors);\n              }\n            });\n            editor.targetElm = editor.targetElm || targetElm;\n            editor.render();\n          };\n          DOM.unbind(window, 'ready', initEditors);\n          execCallback('onpageload');\n          targets = DomQuery.unique(findTargets(settings));\n          if (settings.types) {\n            each$1(settings.types, function (type) {\n              Tools.each(targets, function (elm) {\n                if (DOM.is(elm, type.selector)) {\n                  createEditor(createId(elm), extend$2({}, settings, type), elm);\n                  return false;\n                }\n                return true;\n              });\n            });\n            return;\n          }\n          Tools.each(targets, function (elm) {\n            purgeDestroyedEditor(self.get(elm.id));\n          });\n          targets = Tools.grep(targets, function (elm) {\n            return !self.get(elm.id);\n          });\n          if (targets.length === 0) {\n            provideResults([]);\n          } else {\n            each$1(targets, function (elm) {\n              if (isInvalidInlineTarget(settings, elm)) {\n                initError('Could not initialize inline editor on invalid inline target element', elm);\n              } else {\n                createEditor(createId(elm), settings, elm);\n              }\n            });\n          }\n        };\n        self.settings = settings;\n        DOM.bind(window, 'ready', initEditors);\n        return new promiseObj(function (resolve) {\n          if (result) {\n            resolve(result);\n          } else {\n            provideResults = function (editors) {\n              resolve(editors);\n            };\n          }\n        });\n      },\n      get: function (id) {\n        if (arguments.length === 0) {\n          return editors.slice(0);\n        } else if (isString$1(id)) {\n          return find$3(editors, function (editor) {\n            return editor.id === id;\n          }).getOr(null);\n        } else if (isNumber(id)) {\n          return editors[id] ? editors[id] : null;\n        } else {\n          return null;\n        }\n      },\n      add: function (editor) {\n        var self = this;\n        var existingEditor = legacyEditors[editor.id];\n        if (existingEditor === editor) {\n          return editor;\n        }\n        if (self.get(editor.id) === null) {\n          if (isValidLegacyKey(editor.id)) {\n            legacyEditors[editor.id] = editor;\n          }\n          legacyEditors.push(editor);\n          editors.push(editor);\n        }\n        toggleGlobalEvents(true);\n        self.activeEditor = editor;\n        self.fire('AddEditor', { editor: editor });\n        if (!beforeUnloadDelegate) {\n          beforeUnloadDelegate = function (e) {\n            var event = self.fire('BeforeUnload');\n            if (event.returnValue) {\n              e.preventDefault();\n              e.returnValue = event.returnValue;\n              return event.returnValue;\n            }\n          };\n          window.addEventListener('beforeunload', beforeUnloadDelegate);\n        }\n        return editor;\n      },\n      createEditor: function (id, settings) {\n        return this.add(new Editor(id, settings, this));\n      },\n      remove: function (selector) {\n        var self = this;\n        var i, editor;\n        if (!selector) {\n          for (i = editors.length - 1; i >= 0; i--) {\n            self.remove(editors[i]);\n          }\n          return;\n        }\n        if (isString$1(selector)) {\n          each$1(DOM.select(selector), function (elm) {\n            editor = self.get(elm.id);\n            if (editor) {\n              self.remove(editor);\n            }\n          });\n          return;\n        }\n        editor = selector;\n        if (isNull(self.get(editor.id))) {\n          return null;\n        }\n        if (removeEditorFromList(editor)) {\n          self.fire('RemoveEditor', { editor: editor });\n        }\n        if (editors.length === 0) {\n          window.removeEventListener('beforeunload', beforeUnloadDelegate);\n        }\n        editor.remove();\n        toggleGlobalEvents(editors.length > 0);\n        return editor;\n      },\n      execCommand: function (cmd, ui, value) {\n        var self = this, editor = self.get(value);\n        switch (cmd) {\n        case 'mceAddEditor':\n          if (!self.get(value)) {\n            new Editor(value, self.settings, self).render();\n          }\n          return true;\n        case 'mceRemoveEditor':\n          if (editor) {\n            editor.remove();\n          }\n          return true;\n        case 'mceToggleEditor':\n          if (!editor) {\n            self.execCommand('mceAddEditor', false, value);\n            return true;\n          }\n          if (editor.isHidden()) {\n            editor.show();\n          } else {\n            editor.hide();\n          }\n          return true;\n        }\n        if (self.activeEditor) {\n          return self.activeEditor.execCommand(cmd, ui, value);\n        }\n        return false;\n      },\n      triggerSave: function () {\n        each$1(editors, function (editor) {\n          editor.save();\n        });\n      },\n      addI18n: function (code, items) {\n        I18n.add(code, items);\n      },\n      translate: function (text) {\n        return I18n.translate(text);\n      },\n      setActive: function (editor) {\n        var activeEditor = this.activeEditor;\n        if (this.activeEditor !== editor) {\n          if (activeEditor) {\n            activeEditor.fire('deactivate', { relatedTarget: editor });\n          }\n          editor.fire('activate', { relatedTarget: activeEditor });\n        }\n        this.activeEditor = editor;\n      },\n      _setBaseUrl: function (baseUrl) {\n        this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\\/+$/, ''));\n        this.baseURI = new URI(this.baseURL);\n      }\n    });\n    EditorManager.setup();\n\n    var min$1 = Math.min, max$1 = Math.max, round$1 = Math.round;\n    var relativePosition = function (rect, targetRect, rel) {\n      var x = targetRect.x;\n      var y = targetRect.y;\n      var w = rect.w;\n      var h = rect.h;\n      var targetW = targetRect.w;\n      var targetH = targetRect.h;\n      var relChars = (rel || '').split('');\n      if (relChars[0] === 'b') {\n        y += targetH;\n      }\n      if (relChars[1] === 'r') {\n        x += targetW;\n      }\n      if (relChars[0] === 'c') {\n        y += round$1(targetH / 2);\n      }\n      if (relChars[1] === 'c') {\n        x += round$1(targetW / 2);\n      }\n      if (relChars[3] === 'b') {\n        y -= h;\n      }\n      if (relChars[4] === 'r') {\n        x -= w;\n      }\n      if (relChars[3] === 'c') {\n        y -= round$1(h / 2);\n      }\n      if (relChars[4] === 'c') {\n        x -= round$1(w / 2);\n      }\n      return create$2(x, y, w, h);\n    };\n    var findBestRelativePosition = function (rect, targetRect, constrainRect, rels) {\n      var pos, i;\n      for (i = 0; i < rels.length; i++) {\n        pos = relativePosition(rect, targetRect, rels[i]);\n        if (pos.x >= constrainRect.x && pos.x + pos.w <= constrainRect.w + constrainRect.x && pos.y >= constrainRect.y && pos.y + pos.h <= constrainRect.h + constrainRect.y) {\n          return rels[i];\n        }\n      }\n      return null;\n    };\n    var inflate = function (rect, w, h) {\n      return create$2(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);\n    };\n    var intersect = function (rect, cropRect) {\n      var x1 = max$1(rect.x, cropRect.x);\n      var y1 = max$1(rect.y, cropRect.y);\n      var x2 = min$1(rect.x + rect.w, cropRect.x + cropRect.w);\n      var y2 = min$1(rect.y + rect.h, cropRect.y + cropRect.h);\n      if (x2 - x1 < 0 || y2 - y1 < 0) {\n        return null;\n      }\n      return create$2(x1, y1, x2 - x1, y2 - y1);\n    };\n    var clamp = function (rect, clampRect, fixedSize) {\n      var x1 = rect.x;\n      var y1 = rect.y;\n      var x2 = rect.x + rect.w;\n      var y2 = rect.y + rect.h;\n      var cx2 = clampRect.x + clampRect.w;\n      var cy2 = clampRect.y + clampRect.h;\n      var underflowX1 = max$1(0, clampRect.x - x1);\n      var underflowY1 = max$1(0, clampRect.y - y1);\n      var overflowX2 = max$1(0, x2 - cx2);\n      var overflowY2 = max$1(0, y2 - cy2);\n      x1 += underflowX1;\n      y1 += underflowY1;\n      if (fixedSize) {\n        x2 += underflowX1;\n        y2 += underflowY1;\n        x1 -= overflowX2;\n        y1 -= overflowY2;\n      }\n      x2 -= overflowX2;\n      y2 -= overflowY2;\n      return create$2(x1, y1, x2 - x1, y2 - y1);\n    };\n    var create$2 = function (x, y, w, h) {\n      return {\n        x: x,\n        y: y,\n        w: w,\n        h: h\n      };\n    };\n    var fromClientRect = function (clientRect) {\n      return create$2(clientRect.left, clientRect.top, clientRect.width, clientRect.height);\n    };\n    var Rect = {\n      inflate: inflate,\n      relativePosition: relativePosition,\n      findBestRelativePosition: findBestRelativePosition,\n      intersect: intersect,\n      clamp: clamp,\n      create: create$2,\n      fromClientRect: fromClientRect\n    };\n\n    var awaiter = function (resolveCb, rejectCb, timeout) {\n      if (timeout === void 0) {\n        timeout = 1000;\n      }\n      var done = false;\n      var timer = null;\n      var complete = function (completer) {\n        return function () {\n          var args = [];\n          for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n          }\n          if (!done) {\n            done = true;\n            if (timer !== null) {\n              clearTimeout(timer);\n              timer = null;\n            }\n            completer.apply(null, args);\n          }\n        };\n      };\n      var resolve = complete(resolveCb);\n      var reject = complete(rejectCb);\n      var start = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n        if (!done && timer === null) {\n          timer = setTimeout(function () {\n            return reject.apply(null, args);\n          }, timeout);\n        }\n      };\n      return {\n        start: start,\n        resolve: resolve,\n        reject: reject\n      };\n    };\n    var create$1 = function () {\n      var tasks = {};\n      var resultFns = {};\n      var load = function (id, url) {\n        var loadErrMsg = 'Script at URL \"' + url + '\" failed to load';\n        var runErrMsg = 'Script at URL \"' + url + '\" did not call `tinymce.Resource.add(\\'' + id + '\\', data)` within 1 second';\n        if (tasks[id] !== undefined) {\n          return tasks[id];\n        } else {\n          var task = new promiseObj(function (resolve, reject) {\n            var waiter = awaiter(resolve, reject);\n            resultFns[id] = waiter.resolve;\n            ScriptLoader.ScriptLoader.loadScript(url, function () {\n              return waiter.start(runErrMsg);\n            }, function () {\n              return waiter.reject(loadErrMsg);\n            });\n          });\n          tasks[id] = task;\n          return task;\n        }\n      };\n      var add = function (id, data) {\n        if (resultFns[id] !== undefined) {\n          resultFns[id](data);\n          delete resultFns[id];\n        }\n        tasks[id] = promiseObj.resolve(data);\n      };\n      return {\n        load: load,\n        add: add\n      };\n    };\n    var Resource = create$1();\n\n    var each = Tools.each, extend$1 = Tools.extend;\n    var extendClass, initializing;\n    var Class = function () {\n    };\n    Class.extend = extendClass = function (props) {\n      var self = this;\n      var _super = self.prototype;\n      var Class = function () {\n        var i, mixins, mixin;\n        var self = this;\n        if (!initializing) {\n          if (self.init) {\n            self.init.apply(self, arguments);\n          }\n          mixins = self.Mixins;\n          if (mixins) {\n            i = mixins.length;\n            while (i--) {\n              mixin = mixins[i];\n              if (mixin.init) {\n                mixin.init.apply(self, arguments);\n              }\n            }\n          }\n        }\n      };\n      var dummy = function () {\n        return this;\n      };\n      var createMethod = function (name, fn) {\n        return function () {\n          var self = this;\n          var tmp = self._super;\n          self._super = _super[name];\n          var ret = fn.apply(self, arguments);\n          self._super = tmp;\n          return ret;\n        };\n      };\n      initializing = true;\n      var prototype = new self();\n      initializing = false;\n      if (props.Mixins) {\n        each(props.Mixins, function (mixin) {\n          for (var name_1 in mixin) {\n            if (name_1 !== 'init') {\n              props[name_1] = mixin[name_1];\n            }\n          }\n        });\n        if (_super.Mixins) {\n          props.Mixins = _super.Mixins.concat(props.Mixins);\n        }\n      }\n      if (props.Methods) {\n        each(props.Methods.split(','), function (name) {\n          props[name] = dummy;\n        });\n      }\n      if (props.Properties) {\n        each(props.Properties.split(','), function (name) {\n          var fieldName = '_' + name;\n          props[name] = function (value) {\n            var self = this;\n            if (value !== undefined) {\n              self[fieldName] = value;\n              return self;\n            }\n            return self[fieldName];\n          };\n        });\n      }\n      if (props.Statics) {\n        each(props.Statics, function (func, name) {\n          Class[name] = func;\n        });\n      }\n      if (props.Defaults && _super.Defaults) {\n        props.Defaults = extend$1({}, _super.Defaults, props.Defaults);\n      }\n      each$j(props, function (member, name) {\n        if (typeof member === 'function' && _super[name]) {\n          prototype[name] = createMethod(name, member);\n        } else {\n          prototype[name] = member;\n        }\n      });\n      Class.prototype = prototype;\n      Class.constructor = Class;\n      Class.extend = extendClass;\n      return Class;\n    };\n\n    var min = Math.min, max = Math.max, round = Math.round;\n    var Color = function (value) {\n      var self = {};\n      var r = 0, g = 0, b = 0;\n      var rgb2hsv = function (r, g, b) {\n        var h, s, v;\n        h = 0;\n        s = 0;\n        v = 0;\n        r = r / 255;\n        g = g / 255;\n        b = b / 255;\n        var minRGB = min(r, min(g, b));\n        var maxRGB = max(r, max(g, b));\n        if (minRGB === maxRGB) {\n          v = minRGB;\n          return {\n            h: 0,\n            s: 0,\n            v: v * 100\n          };\n        }\n        var d = r === minRGB ? g - b : b === minRGB ? r - g : b - r;\n        h = r === minRGB ? 3 : b === minRGB ? 1 : 5;\n        h = 60 * (h - d / (maxRGB - minRGB));\n        s = (maxRGB - minRGB) / maxRGB;\n        v = maxRGB;\n        return {\n          h: round(h),\n          s: round(s * 100),\n          v: round(v * 100)\n        };\n      };\n      var hsvToRgb = function (hue, saturation, brightness) {\n        hue = (parseInt(hue, 10) || 0) % 360;\n        saturation = parseInt(saturation, 10) / 100;\n        brightness = parseInt(brightness, 10) / 100;\n        saturation = max(0, min(saturation, 1));\n        brightness = max(0, min(brightness, 1));\n        if (saturation === 0) {\n          r = g = b = round(255 * brightness);\n          return;\n        }\n        var side = hue / 60;\n        var chroma = brightness * saturation;\n        var x = chroma * (1 - Math.abs(side % 2 - 1));\n        var match = brightness - chroma;\n        switch (Math.floor(side)) {\n        case 0:\n          r = chroma;\n          g = x;\n          b = 0;\n          break;\n        case 1:\n          r = x;\n          g = chroma;\n          b = 0;\n          break;\n        case 2:\n          r = 0;\n          g = chroma;\n          b = x;\n          break;\n        case 3:\n          r = 0;\n          g = x;\n          b = chroma;\n          break;\n        case 4:\n          r = x;\n          g = 0;\n          b = chroma;\n          break;\n        case 5:\n          r = chroma;\n          g = 0;\n          b = x;\n          break;\n        default:\n          r = g = b = 0;\n        }\n        r = round(255 * (r + match));\n        g = round(255 * (g + match));\n        b = round(255 * (b + match));\n      };\n      var toHex = function () {\n        var hex = function (val) {\n          val = parseInt(val, 10).toString(16);\n          return val.length > 1 ? val : '0' + val;\n        };\n        return '#' + hex(r) + hex(g) + hex(b);\n      };\n      var toRgb = function () {\n        return {\n          r: r,\n          g: g,\n          b: b\n        };\n      };\n      var toHsv = function () {\n        return rgb2hsv(r, g, b);\n      };\n      var parse = function (value) {\n        var matches;\n        if (typeof value === 'object') {\n          if ('r' in value) {\n            r = value.r;\n            g = value.g;\n            b = value.b;\n          } else if ('v' in value) {\n            hsvToRgb(value.h, value.s, value.v);\n          }\n        } else {\n          if (matches = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)[^\\)]*\\)/gi.exec(value)) {\n            r = parseInt(matches[1], 10);\n            g = parseInt(matches[2], 10);\n            b = parseInt(matches[3], 10);\n          } else if (matches = /#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(value)) {\n            r = parseInt(matches[1], 16);\n            g = parseInt(matches[2], 16);\n            b = parseInt(matches[3], 16);\n          } else if (matches = /#([0-F])([0-F])([0-F])/gi.exec(value)) {\n            r = parseInt(matches[1] + matches[1], 16);\n            g = parseInt(matches[2] + matches[2], 16);\n            b = parseInt(matches[3] + matches[3], 16);\n          }\n        }\n        r = r < 0 ? 0 : r > 255 ? 255 : r;\n        g = g < 0 ? 0 : g > 255 ? 255 : g;\n        b = b < 0 ? 0 : b > 255 ? 255 : b;\n        return self;\n      };\n      if (value) {\n        parse(value);\n      }\n      self.toRgb = toRgb;\n      self.toHsv = toHsv;\n      self.toHex = toHex;\n      self.parse = parse;\n      return self;\n    };\n\n    var serialize = function (obj) {\n      var data = JSON.stringify(obj);\n      if (!isString$1(data)) {\n        return data;\n      }\n      return data.replace(/[\\u0080-\\uFFFF]/g, function (match) {\n        var hexCode = match.charCodeAt(0).toString(16);\n        return '\\\\u' + '0000'.substring(hexCode.length) + hexCode;\n      });\n    };\n    var JSONUtils = {\n      serialize: serialize,\n      parse: function (text) {\n        try {\n          return JSON.parse(text);\n        } catch (ex) {\n        }\n      }\n    };\n\n    var JSONP = {\n      callbacks: {},\n      count: 0,\n      send: function (settings) {\n        var self = this, dom = DOMUtils.DOM, count = settings.count !== undefined ? settings.count : self.count;\n        var id = 'tinymce_jsonp_' + count;\n        self.callbacks[count] = function (json) {\n          dom.remove(id);\n          delete self.callbacks[count];\n          settings.callback(json);\n        };\n        dom.add(dom.doc.body, 'script', {\n          id: id,\n          src: settings.url,\n          type: 'text/javascript'\n        });\n        self.count++;\n      }\n    };\n\n    var XHR = __assign(__assign({}, Observable), {\n      send: function (settings) {\n        var xhr, count = 0;\n        var ready = function () {\n          if (!settings.async || xhr.readyState === 4 || count++ > 10000) {\n            if (settings.success && count < 10000 && xhr.status === 200) {\n              settings.success.call(settings.success_scope, '' + xhr.responseText, xhr, settings);\n            } else if (settings.error) {\n              settings.error.call(settings.error_scope, count > 10000 ? 'TIMED_OUT' : 'GENERAL', xhr, settings);\n            }\n            xhr = null;\n          } else {\n            Delay.setTimeout(ready, 10);\n          }\n        };\n        settings.scope = settings.scope || this;\n        settings.success_scope = settings.success_scope || settings.scope;\n        settings.error_scope = settings.error_scope || settings.scope;\n        settings.async = settings.async !== false;\n        settings.data = settings.data || '';\n        XHR.fire('beforeInitialize', { settings: settings });\n        xhr = new XMLHttpRequest();\n        if (xhr.overrideMimeType) {\n          xhr.overrideMimeType(settings.content_type);\n        }\n        xhr.open(settings.type || (settings.data ? 'POST' : 'GET'), settings.url, settings.async);\n        if (settings.crossDomain) {\n          xhr.withCredentials = true;\n        }\n        if (settings.content_type) {\n          xhr.setRequestHeader('Content-Type', settings.content_type);\n        }\n        if (settings.requestheaders) {\n          Tools.each(settings.requestheaders, function (header) {\n            xhr.setRequestHeader(header.key, header.value);\n          });\n        }\n        xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n        xhr = XHR.fire('beforeSend', {\n          xhr: xhr,\n          settings: settings\n        }).xhr;\n        xhr.send(settings.data);\n        if (!settings.async) {\n          return ready();\n        }\n        Delay.setTimeout(ready, 10);\n      }\n    });\n\n    var extend = Tools.extend;\n    var JSONRequest = function () {\n      function JSONRequest(settings) {\n        this.settings = extend({}, settings);\n        this.count = 0;\n      }\n      JSONRequest.sendRPC = function (o) {\n        return new JSONRequest().send(o);\n      };\n      JSONRequest.prototype.send = function (args) {\n        var ecb = args.error, scb = args.success;\n        var xhrArgs = extend(this.settings, args);\n        xhrArgs.success = function (c, x) {\n          c = JSONUtils.parse(c);\n          if (typeof c === 'undefined') {\n            c = { error: 'JSON Parse error.' };\n          }\n          if (c.error) {\n            ecb.call(xhrArgs.error_scope || xhrArgs.scope, c.error, x);\n          } else {\n            scb.call(xhrArgs.success_scope || xhrArgs.scope, c.result);\n          }\n        };\n        xhrArgs.error = function (ty, x) {\n          if (ecb) {\n            ecb.call(xhrArgs.error_scope || xhrArgs.scope, ty, x);\n          }\n        };\n        xhrArgs.data = JSONUtils.serialize({\n          id: args.id || 'c' + this.count++,\n          method: args.method,\n          params: args.params\n        });\n        xhrArgs.content_type = 'application/json';\n        XHR.send(xhrArgs);\n      };\n      return JSONRequest;\n    }();\n\n    var create = function () {\n      return function () {\n        var data = {};\n        var keys = [];\n        var storage = {\n          getItem: function (key) {\n            var item = data[key];\n            return item ? item : null;\n          },\n          setItem: function (key, value) {\n            keys.push(key);\n            data[key] = String(value);\n          },\n          key: function (index) {\n            return keys[index];\n          },\n          removeItem: function (key) {\n            keys = keys.filter(function (k) {\n              return k === key;\n            });\n            delete data[key];\n          },\n          clear: function () {\n            keys = [];\n            data = {};\n          },\n          length: 0\n        };\n        Object.defineProperty(storage, 'length', {\n          get: function () {\n            return keys.length;\n          },\n          configurable: false,\n          enumerable: false\n        });\n        return storage;\n      }();\n    };\n\n    var localStorage;\n    try {\n      var test = '__storage_test__';\n      localStorage = window.localStorage;\n      localStorage.setItem(test, test);\n      localStorage.removeItem(test);\n    } catch (e) {\n      localStorage = create();\n    }\n    var LocalStorage = localStorage;\n\n    var publicApi = {\n      geom: { Rect: Rect },\n      util: {\n        Promise: promiseObj,\n        Delay: Delay,\n        Tools: Tools,\n        VK: VK,\n        URI: URI,\n        Class: Class,\n        EventDispatcher: EventDispatcher,\n        Observable: Observable,\n        I18n: I18n,\n        XHR: XHR,\n        JSON: JSONUtils,\n        JSONRequest: JSONRequest,\n        JSONP: JSONP,\n        LocalStorage: LocalStorage,\n        Color: Color,\n        ImageUploader: ImageUploader\n      },\n      dom: {\n        EventUtils: EventUtils,\n        Sizzle: Sizzle,\n        DomQuery: DomQuery,\n        TreeWalker: DomTreeWalker,\n        TextSeeker: TextSeeker,\n        DOMUtils: DOMUtils,\n        ScriptLoader: ScriptLoader,\n        RangeUtils: RangeUtils,\n        Serializer: DomSerializer,\n        StyleSheetLoader: StyleSheetLoader,\n        ControlSelection: ControlSelection,\n        BookmarkManager: BookmarkManager,\n        Selection: EditorSelection,\n        Event: EventUtils.Event\n      },\n      html: {\n        Styles: Styles,\n        Entities: Entities,\n        Node: AstNode,\n        Schema: Schema,\n        SaxParser: SaxParser,\n        DomParser: DomParser,\n        Writer: Writer,\n        Serializer: HtmlSerializer\n      },\n      Env: Env,\n      AddOnManager: AddOnManager,\n      Annotator: Annotator,\n      Formatter: Formatter,\n      UndoManager: UndoManager,\n      EditorCommands: EditorCommands,\n      WindowManager: WindowManager,\n      NotificationManager: NotificationManager,\n      EditorObservable: EditorObservable,\n      Shortcuts: Shortcuts,\n      Editor: Editor,\n      FocusManager: FocusManager,\n      EditorManager: EditorManager,\n      DOM: DOMUtils.DOM,\n      ScriptLoader: ScriptLoader.ScriptLoader,\n      PluginManager: PluginManager,\n      ThemeManager: ThemeManager,\n      IconManager: IconManager,\n      Resource: Resource,\n      trim: Tools.trim,\n      isArray: Tools.isArray,\n      is: Tools.is,\n      toArray: Tools.toArray,\n      makeMap: Tools.makeMap,\n      each: Tools.each,\n      map: Tools.map,\n      grep: Tools.grep,\n      inArray: Tools.inArray,\n      extend: Tools.extend,\n      create: Tools.create,\n      walk: Tools.walk,\n      createNS: Tools.createNS,\n      resolve: Tools.resolve,\n      explode: Tools.explode,\n      _addCacheSuffix: Tools._addCacheSuffix,\n      isOpera: Env.opera,\n      isWebKit: Env.webkit,\n      isIE: Env.ie,\n      isGecko: Env.gecko,\n      isMac: Env.mac\n    };\n    var tinymce = Tools.extend(EditorManager, publicApi);\n\n    var exportToModuleLoaders = function (tinymce) {\n      if (typeof module === 'object') {\n        try {\n          module.exports = tinymce;\n        } catch (_) {\n        }\n      }\n    };\n    var exportToWindowGlobal = function (tinymce) {\n      window.tinymce = tinymce;\n      window.tinyMCE = tinymce;\n    };\n    exportToWindowGlobal(tinymce);\n    exportToModuleLoaders(tinymce);\n\n}());\n","import NProgress from 'nprogress';\n\nexport default class {\n    constructor() {\n        this.tooltip();\n        this.nprogress();\n        this.btnloading();\n        this.ciAccordion();\n        this.buidSelect2();\n    }\n\n    tooltip() {\n        /* $('[data-toggle=\"tooltip\"]').tooltip({ trigger : 'hover' })\n            .on('click', (e) => {\n                $(e.currentTarget).tooltip('hide');\n            }); */\n        $('[data-toggle=\"tooltip\"]').tooltip()\n        $('[data-toggle=\"popover\"]').popover();\n        $(document).ajaxComplete(() => {\n            $('[data-toggle=\"tooltip\"]').tooltip()\n            $('[data-toggle=\"popover\"]').popover();\n        });\n    }\n    \n    ciAccordion() {\n        $('.ci-accordion .nav.nav-pills a.nav-link').on('click', (e) => {\n            $(\".ci-accordion .nav.nav-pills a.nav-link\").not($(this)).removeClass('active');\n        });\n    }\n\n    nprogress() {\n        let inMobile = /iphone|ipod|android|ie|blackberry|fennec/i.test(window.navigator.userAgent);\n\n        if (inMobile) {\n            return;\n        }\n\n        NProgress.configure({ showSpinner: true });\n\n        $(document).ajaxStart(() => NProgress.start());\n        $(document).ajaxComplete(() => NProgress.done());\n    }\n    \n    btnloading() {\n        $('[data-loading]').on('click', (e) => {\n            let button = $(e.currentTarget);\n\n            if (button.is('i')) {\n                button = button.parent();\n            }\n\n            button.data('loading-text', button.html())\n                .addClass('btn-loading')\n                .button('loading');\n        });\n\n    }\n    \n    buidSelect2() {\n          //$('.select2').select2();\n        let $select2 =$('.select2');\n        $select2.select2();\n    }\n}\n","export default class {\n    appendHiddenInput(form, name, value) {\n        $('<input>').attr({\n            type: 'hidden',\n            name: name ,\n            value: value,\n        }).appendTo(form);\n    }\n\n    appendHiddenInputs(form, name, values) {\n        for (let value of values) {\n            this.appendHiddenInput(form, name + '[]', value);\n        }\n    }\n\n    removeErrors() {\n        $('.has-error > .help-block').remove();\n        $('.has-error').removeClass('has-error');\n    }\n}\n","// Initialize state holders.\nCI.dataTable = { routes: {}, selected: {},customBtn: '' };\n\nexport default class {\n    constructor(selector, options, callback) {\n        this.selector = selector;\n        this.element = $(selector);\n\n        if (CI.dataTable.selected[selector] === undefined) {\n            CI.dataTable.selected[selector] = [];\n        }\n\n        this.initiateDataTable(options, callback);\n\n        this.addErrorHandler();\n        this.registerTableProcessingPlugin();\n    }\n\n    initiateDataTable(options, callback) {\n        let sortColumn = this.element.find('th[data-sort]');\n\n        this.element.dataTable(_.merge({\n            serverSide: true,\n            processing: true,\n            ajax: this.route('index', { table: true }),\n            stateSave: true,\n            sort: true,\n            info: true,\n            filter: true,\n            lengthChange: true,\n            paginate: true,\n            autoWidth: false,\n            pageLength: 10,\n            lengthMenu: [10, 20, 50, 100, 200],\n            language: { processing: '<i class=\"fas fa-spinner fa-spin\"></i>' },\n            order: [\n                sortColumn.index() !== -1 ? sortColumn.index() : 1,\n                sortColumn.data('sort') || 'desc',\n            ],\n            initComplete: () => {\n                if (this.hasRoute('destroy')) {\n                    let deleteButton = this.addTableActions();\n\n                    deleteButton.on('click', () => this.deleteRows());\n                }\n                this.selectAllRowsEventListener();\n                if (CI.dataTable.customBtn != '') {\n                   let customButton = this.addTableCustomActions();\n                }\n\n                if (this.hasRoute('show') || this.hasRoute('edit')) {\n                    this.onRowClick(this.redirectToRowPage);\n                }\n\n                if (callback !== undefined) {\n                    callback.call(this);\n                }\n            },\n            rowCallback: (row, data) => {\n                if (this.hasRoute('show') || this.hasRoute('edit')) {\n                    this.makeRowClickable(row, data.id);\n                }\n            },\n            drawCallback: () => {\n                this.element.find('.select-all').prop('checked', false);\n\n                setTimeout(() => {\n                    this.selectRowEventListener();\n                    this.checkSelectedCheckboxes(this.constructor.getSelectedIds(this.selector));\n                });\n            },\n            stateSaveParams(settings, data) {\n                delete data.start;\n                delete data.search;\n            },\n        }, options));\n    }\n\n    addTableActions() {\n        let button = `\n            <button type=\"button\" class=\"btn btn-primary btn-delete m-2\">\n                ${CI.langs['admin::admin.buttons.delete']}\n            </button>\n        `;\n        \n        \n        \n        return $(button).appendTo(\n            this.element.closest('.dataTables_wrapper').find('.dataTables_length')\n        );\n    }\n    \n    addTableCustomActions() {\n        let button = CI.dataTable.customBtn\n        \n        return $(button).appendTo(\n            this.element.closest('.dataTables_wrapper').find('.dataTables_length')\n        );\n    }\n\n    deleteRows() {\n        let checked = this.element.find('.select-row:checked');\n\n        if (checked.length === 0) {\n            return;\n        }\n\n        let deleted = [];\n        \n        let table = this.element.DataTable();\n        let token = $(\"meta[name='csrf-token']\").attr(\"content\");\n        swal({\n            title: CI.langs['admin::admin.delete.confirmation'],\n            text: CI.langs['admin::admin.delete.confirmation_message'],\n            type: 'warning',\n            buttons:{\n                cancel: {\n                    visible: true,\n                    text : CI.langs['admin::admin.delete.btn_cancel'],\n                    className: 'btn btn-danger'\n                },        \t\t\t\n                confirm: {\n                    text : CI.langs['admin::admin.delete.btn_delete'],\n                    className : 'btn btn-success'\n                }\n            }\n        }).then((willDelete) => {\n            if (willDelete) {\n                \n                table.processing(true);\n        \n                let ids = this.constructor.getRowIds(checked);\n                \n                // Don't make ajax request if an id was previously deleted.\n                if (deleted.length !== 0 && _.difference(deleted, ids).length === 0) {\n                    return;\n                }\n                \n                $.ajax({\n                    type: 'DELETE',\n                    url: this.route('destroy', { ids: ids.join() }),\n                    data: {\n                        \"_token\": token,\n                    },\n                    success: () => {\n                        deleted = _.flatten(deleted.concat(ids));\n\n                        this.constructor.setSelectedIds(this.selector, []);\n\n                        this.constructor.reload(this.element);\n                        \n                        swal(CI.langs['admin::admin.delete.success_message'], {\n                            icon: \"success\",\n                            buttons : {\n                                confirm : {\n                                    className: 'btn btn-success'\n                                }\n                            }\n                        });\n                        \n                    },\n                    error: (xhr) => {\n                        error(`${xhr.statusText}: ${xhr.responseJSON.message}`);\n\n                        deleted = _.flatten(deleted.concat(ids));\n\n                        this.constructor.setSelectedIds(this.selector, []);\n\n                        this.constructor.reload(this.element);\n                    },\n                });\n                \n            }\n        });\n        \n    }\n\n    makeRowClickable(row, id) {\n        let key = this.hasRoute('show') ? 'show' : 'edit';\n        let url = this.route(key, { id });\n\n        $(row).addClass('clickable-row').data('href', url);\n\n        setTimeout(() => {\n            $('.clickable-row td:not(:first-child,.noclickable)').css('cursor', 'pointer');\n        });\n    }\n\n    onRowClick(handler) {\n        let row = 'tbody tr.clickable-row td';\n\n        if (this.element.find('.select-all').length !== 0) {\n            row += ':not(:first-child,.noclickable)';\n        }else{\n             row += ':not(.noclickable)';\n        }            \n        \n        this.element.on('click', row, handler);\n    }\n\n    redirectToRowPage(e) {\n        window.open(\n            $(e.currentTarget).parent().data('href'),\n            e.ctrlKey ? '_blank' : '_self'\n        );\n    }\n\n    selectAllRowsEventListener() {\n        this.element.find('.select-all').on('change', (e) => {\n            if (e.currentTarget.checked) {\n                this.element.find('.select-row').not(\":checked\").prop('checked', e.currentTarget.checked).trigger(\"change\");\n            }else {\n                this.element.find('.select-row:checked').prop('checked', e.currentTarget.checked).trigger(\"change\");\n            }\n        });\n    }\n\n    selectRowEventListener() {\n        this.element.find('.select-row').on('change', (e) => {\n            if (e.currentTarget.checked) {\n                this.appendToSelected(e.currentTarget.value);\n            } else {\n                this.removeFromSelected(e.currentTarget.value);\n            }\n        });\n    }\n\n    appendToSelected(id) {\n        id = parseInt(id);\n\n        if (! CI.dataTable.selected[this.selector].includes(id)) {\n            CI.dataTable.selected[this.selector].push(id);\n        }\n        \n        //console.log(CI.dataTable.selected);\n    }\n\n    removeFromSelected(id) {\n        id = parseInt(id);\n        \n        //CI.dataTable.selected[this.selector].remove(id);\n        _.pull(CI.dataTable.selected[this.selector], id);\n        //console.log(CI.dataTable.selected);\n    }\n\n    checkSelectedCheckboxes(selectedIds) {\n        let rows = this.element.find('.select-row');\n\n        let checkableRows = rows.toArray().filter((row) => {\n            return selectedIds.includes(parseInt(row.value));\n        });\n\n        $(checkableRows).prop('checked', true);\n    }\n\n    route(name, params) {\n        let router = CI.dataTable.routes[this.selector][name];\n\n        if (typeof router === 'string') {\n            router = { name: router, params };\n        }\n\n        router.params = _.merge(params, router.params);\n\n        return window.route(router.name, router.params).url();\n    }\n\n    hasRoute(name) {\n        return CI.dataTable.routes[this.selector][name] !== undefined;\n    }\n\n    static setRoutes(selector, routes) {\n        CI.dataTable.routes[selector] = routes;\n    }\n    \n    static customBtn(btn) {\n        CI.dataTable.customBtn = btn;\n    }\n\n    static setSelectedIds(selector, selected) {\n        CI.dataTable.selected[selector] = selected;\n    }\n\n    static getSelectedIds(selector) {\n        return CI.dataTable.selected[selector];\n    }\n\n    static reload(selector, callback, resetPaging = false) {\n        $(selector).DataTable().ajax.reload(callback, resetPaging);\n    }\n\n    static getRowIds(rows) {\n        return rows.toArray().reduce((ids, row) => {\n            return ids.concat(row.value);\n        }, []);\n    }\n\n    static removeLengthFields() {\n        $('.dataTables_length select').remove();\n    }\n\n    addErrorHandler() {\n        $.fn.dataTable.ext.errMode = (settings, helpPage, message) => {\n            this.element.html(message);\n        };\n    }\n\n    registerTableProcessingPlugin() {\n        $.fn.dataTable.Api.register('processing()', function (show) {\n            return this.iterator('table', function (ctx) {\n                ctx.oApi._fnProcessingDisplay(ctx, show);\n            });\n        });\n    }\n}\n","\nexport function notify(type, message, { duration = 1000, context = document }) {\n    \n    $.notify({\n        icon: 'flaticon-alarm-1',\n        title: message,\n        message: '',\n    },{\n        type: type,\n        placement: {\n            from: \"bottom\",\n            align: \"right\"\n        },\n        time: duration,\n    });\n    \n}\n\nexport function info(message, duration) {\n    notify('info', message, { duration });\n}\n\nexport function success(message, duration) {\n    notify('success', message, { duration });\n}\n\nexport function warning(message, duration) {\n    notify('warning', message, { duration });\n}\n\nexport function error(message, duration) {\n    notify('error', message, { duration });\n}\n\n","window._ = require('lodash');\nwindow.$ = window.jQuery = require('jquery');\n\nrequire('bootstrap');\nrequire(\"./jquery-ui.min\");\nrequire(\"jquery-ui-touch-punch\");\nrequire('jquery.scrollbar');\nrequire(\"./datatables.min\"); \nrequire('sweetalert');\nrequire('bootstrap-notify');\nrequire('select2');\n\nrequire('./main');\nrequire('./wysiwyg');\n\nimport Admin from './admin';\nwindow.admin = new Admin();\n\nimport Form from './form';\nwindow.form = new Form();\n\nimport DataTable from './datatable';\nwindow.DataTable = DataTable;\n\nimport { notify, info, success, warning, error } from './notify';\nwindow.notify = notify;\nwindow.info = info;\nwindow.success = success;\nwindow.warning = warning;\nwindow.error = error;\n\n\n$.ajaxSetup({\n    headers: {\n        'Authorization': CI.apiToken,\n        'X-CSRF-TOKEN': CI.csrfToken,\n    },\n});","/*\n * This combined file was created by the DataTables downloader builder:\n *   https://datatables.net/download\n *\n * To rebuild or modify this file with the latest versions of the included\n * software please visit:\n *   https://datatables.net/download/#bs4/dt-1.10.16\n *\n * Included libraries:\n *   DataTables 1.10.16\n */\n\n/*!\n DataTables 1.10.16\n ©2008-2017 SpryMedia Ltd - datatables.net/license\n*/\n\"use strict\";!function(t){\"function\"==typeof define&&define.amd?define([\"jquery\"],function(e){return t(e,window,document)}):\"object\"==typeof exports?module.exports=function(e,n){return e||(e=window),n||(n=\"undefined\"!=typeof window?require(\"jquery\"):require(\"jquery\")(e)),t(n,e,e.document)}:t(jQuery,window,document)}(function(t,e,n,a){function r(e){var n,a,o={};t.each(e,function(t){(n=t.match(/^([^A-Z]+?)([A-Z])/))&&-1!==\"a aa ai ao as b fn i m o s \".indexOf(n[1]+\" \")&&(a=t.replace(n[0],n[2].toLowerCase()),o[a]=t,\"o\"===n[1]&&r(e[t]))}),e._hungarianMap=o}function o(e,n,i){var l;e._hungarianMap||r(e),t.each(n,function(r){(l=e._hungarianMap[r])===a||!i&&n[l]!==a||(\"o\"===l.charAt(0)?(n[l]||(n[l]={}),t.extend(!0,n[l],n[r]),o(e[l],n[l],i)):n[l]=n[r])})}function i(t){var e=qt.defaults.oLanguage,n=t.sZeroRecords;!t.sEmptyTable&&n&&\"No data available in table\"===e.sEmptyTable&&Rt(t,t,\"sZeroRecords\",\"sEmptyTable\"),!t.sLoadingRecords&&n&&\"Loading...\"===e.sLoadingRecords&&Rt(t,t,\"sZeroRecords\",\"sLoadingRecords\"),t.sInfoThousands&&(t.sThousands=t.sInfoThousands),(t=t.sDecimal)&&Et(t)}function l(t){if(ue(t,\"ordering\",\"bSort\"),ue(t,\"orderMulti\",\"bSortMulti\"),ue(t,\"orderClasses\",\"bSortClasses\"),ue(t,\"orderCellsTop\",\"bSortCellsTop\"),ue(t,\"order\",\"aaSorting\"),ue(t,\"orderFixed\",\"aaSortingFixed\"),ue(t,\"paging\",\"bPaginate\"),ue(t,\"pagingType\",\"sPaginationType\"),ue(t,\"pageLength\",\"iDisplayLength\"),ue(t,\"searching\",\"bFilter\"),\"boolean\"==typeof t.sScrollX&&(t.sScrollX=t.sScrollX?\"100%\":\"\"),\"boolean\"==typeof t.scrollX&&(t.scrollX=t.scrollX?\"100%\":\"\"),t=t.aoSearchCols)for(var e=0,n=t.length;e<n;e++)t[e]&&o(qt.models.oSearch,t[e])}function s(e){ue(e,\"orderable\",\"bSortable\"),ue(e,\"orderData\",\"aDataSort\"),ue(e,\"orderSequence\",\"asSorting\"),ue(e,\"orderDataType\",\"sortDataType\");var n=e.aDataSort;\"number\"==typeof n&&!t.isArray(n)&&(e.aDataSort=[n])}function u(n){if(!qt.__browser){var a={};qt.__browser=a;var r=t(\"<div/>\").css({position:\"fixed\",top:0,left:-1*t(e).scrollLeft(),height:1,width:1,overflow:\"hidden\"}).append(t(\"<div/>\").css({position:\"absolute\",top:1,left:1,width:100,overflow:\"scroll\"}).append(t(\"<div/>\").css({width:\"100%\",height:10}))).appendTo(\"body\"),o=r.children(),i=o.children();a.barWidth=o[0].offsetWidth-o[0].clientWidth,a.bScrollOversize=100===i[0].offsetWidth&&100!==o[0].clientWidth,a.bScrollbarLeft=1!==Math.round(i.offset().left),a.bBounding=!!r[0].getBoundingClientRect().width,r.remove()}t.extend(n.oBrowser,qt.__browser),n.oScroll.iBarWidth=qt.__browser.barWidth}function c(t,e,n,r,o,i){var l,s=!1;for(n!==a&&(l=n,s=!0);r!==o;)t.hasOwnProperty(r)&&(l=s?e(l,t[r],r,t):t[r],s=!0,r+=i);return l}function f(e,a){var r=qt.defaults.column,o=e.aoColumns.length;r=t.extend({},qt.models.oColumn,r,{nTh:a||n.createElement(\"th\"),sTitle:r.sTitle?r.sTitle:a?a.innerHTML:\"\",aDataSort:r.aDataSort?r.aDataSort:[o],mData:r.mData?r.mData:o,idx:o});e.aoColumns.push(r),(r=e.aoPreSearchCols)[o]=t.extend({},qt.models.oSearch,r[o]),d(e,o,t(a).data())}function d(e,n,r){n=e.aoColumns[n];var i=e.oClasses,l=t(n.nTh);if(!n.sWidthOrig){n.sWidthOrig=l.attr(\"width\")||null;var u=(l.attr(\"style\")||\"\").match(/width:\\s*(\\d+[pxem%]+)/);u&&(n.sWidthOrig=u[1])}r!==a&&null!==r&&(s(r),o(qt.defaults.column,r),r.mDataProp!==a&&!r.mData&&(r.mData=r.mDataProp),r.sType&&(n._sManualType=r.sType),r.className&&!r.sClass&&(r.sClass=r.className),r.sClass&&l.addClass(r.sClass),t.extend(n,r),Rt(n,r,\"sWidth\",\"sWidthOrig\"),r.iDataSort!==a&&(n.aDataSort=[r.iDataSort]),Rt(n,r,\"aDataSort\"));var c=n.mData,f=w(c),d=n.mRender?w(n.mRender):null;r=function(t){return\"string\"==typeof t&&-1!==t.indexOf(\"@\")};n._bAttrSrc=t.isPlainObject(c)&&(r(c.sort)||r(c.type)||r(c.filter)),n._setter=null,n.fnGetData=function(t,e,n){var r=f(t,e,a,n);return d&&e?d(r,e,t,n):r},n.fnSetData=function(t,e,n){return x(c)(t,e,n)},\"number\"!=typeof c&&(e._rowReadObject=!0),e.oFeatures.bSort||(n.bSortable=!1,l.addClass(i.sSortableNone)),e=-1!==t.inArray(\"asc\",n.asSorting),r=-1!==t.inArray(\"desc\",n.asSorting),n.bSortable&&(e||r)?e&&!r?(n.sSortingClass=i.sSortableAsc,n.sSortingClassJUI=i.sSortJUIAscAllowed):!e&&r?(n.sSortingClass=i.sSortableDesc,n.sSortingClassJUI=i.sSortJUIDescAllowed):(n.sSortingClass=i.sSortable,n.sSortingClassJUI=i.sSortJUI):(n.sSortingClass=i.sSortableNone,n.sSortingClassJUI=\"\")}function h(t){if(!1!==t.oFeatures.bAutoWidth){var e=t.aoColumns;gt(t);for(var n=0,a=e.length;n<a;n++)e[n].nTh.style.width=e[n].sWidth}(\"\"!==(e=t.oScroll).sY||\"\"!==e.sX)&&ht(t),Nt(t,null,\"column-sizing\",[t])}function p(t,e){var n=S(t,\"bVisible\");return\"number\"==typeof n[e]?n[e]:null}function g(e,n){var a=S(e,\"bVisible\");return-1!==(a=t.inArray(n,a))?a:null}function b(e){var n=0;return t.each(e.aoColumns,function(e,a){a.bVisible&&\"none\"!==t(a.nTh).css(\"display\")&&n++}),n}function S(e,n){var a=[];return t.map(e.aoColumns,function(t,e){t[n]&&a.push(e)}),a}function m(t){var e,n,r,o,i,l,s,u,c,f=t.aoColumns,d=t.aoData,h=qt.ext.type.detect;for(e=0,n=f.length;e<n;e++)if(s=f[e],c=[],!s.sType&&s._sManualType)s.sType=s._sManualType;else if(!s.sType){for(r=0,o=h.length;r<o;r++){for(i=0,l=d.length;i<l&&(c[i]===a&&(c[i]=_(t,i,e,\"type\")),(u=h[r](c[i],t))||r===h.length-1)&&\"html\"!==u;i++);if(u){s.sType=u;break}}s.sType||(s.sType=\"string\")}}function v(e,n,r,o){var i,l,s,u,c,d,h=e.aoColumns;if(n)for(i=n.length-1;0<=i;i--){var p=(d=n[i]).targets!==a?d.targets:d.aTargets;for(t.isArray(p)||(p=[p]),l=0,s=p.length;l<s;l++)if(\"number\"==typeof p[l]&&0<=p[l]){for(;h.length<=p[l];)f(e);o(p[l],d)}else if(\"number\"==typeof p[l]&&0>p[l])o(h.length+p[l],d);else if(\"string\"==typeof p[l])for(u=0,c=h.length;u<c;u++)(\"_all\"==p[l]||t(h[u].nTh).hasClass(p[l]))&&o(u,d)}if(r)for(i=0,e=r.length;i<e;i++)o(i,r[i])}function D(e,n,r,o){var i=e.aoData.length,l=t.extend(!0,{},qt.models.oRow,{src:r?\"dom\":\"data\",idx:i});l._aData=n,e.aoData.push(l);for(var s=e.aoColumns,u=0,c=s.length;u<c;u++)s[u].sType=null;return e.aiDisplayMaster.push(i),(n=e.rowIdFn(n))!==a&&(e.aIds[n]=l),(r||!e.oFeatures.bDeferRender)&&P(e,i,r,o),i}function y(e,n){var a;return n instanceof t||(n=t(n)),n.map(function(t,n){return a=R(e,n),D(e,a.data,n,a.cells)})}function _(t,e,n,r){var o=t.iDraw,i=t.aoColumns[n],l=t.aoData[e]._aData,s=i.sDefaultContent,u=i.fnGetData(l,r,{settings:t,row:e,col:n});if(u===a)return t.iDrawError!=o&&null===s&&(Lt(t,0,\"Requested unknown parameter \"+(\"function\"==typeof i.mData?\"{function}\":\"'\"+i.mData+\"'\")+\" for row \"+e+\", column \"+n,4),t.iDrawError=o),s;if(u!==l&&null!==u||null===s||r===a){if(\"function\"==typeof u)return u.call(l)}else u=s;return null===u&&\"display\"==r?\"\":u}function C(t,e,n,a){t.aoColumns[n].fnSetData(t.aoData[e]._aData,a,{settings:t,row:e,col:n})}function T(e){return t.map(e.match(/(\\\\.|[^\\.])+/g)||[\"\"],function(t){return t.replace(/\\\\\\./g,\".\")})}function w(e){if(t.isPlainObject(e)){var n={};return t.each(e,function(t,e){e&&(n[t]=w(e))}),function(t,e,r,o){var i=n[e]||n._;return i!==a?i(t,e,r,o):t}}if(null===e)return function(t){return t};if(\"function\"==typeof e)return function(t,n,a,r){return e(t,n,a,r)};if(\"string\"==typeof e&&(-1!==e.indexOf(\".\")||-1!==e.indexOf(\"[\")||-1!==e.indexOf(\"(\"))){var r=function(e,n,o){var i,l;if(\"\"!==o)for(var s=0,u=(l=T(o)).length;s<u;s++){if(o=l[s].match(ce),i=l[s].match(fe),o){if(l[s]=l[s].replace(ce,\"\"),\"\"!==l[s]&&(e=e[l[s]]),i=[],l.splice(0,s+1),l=l.join(\".\"),t.isArray(e))for(s=0,u=e.length;s<u;s++)i.push(r(e[s],n,l));e=\"\"===(e=o[0].substring(1,o[0].length-1))?i:i.join(e);break}if(i)l[s]=l[s].replace(fe,\"\"),e=e[l[s]]();else{if(null===e||e[l[s]]===a)return a;e=e[l[s]]}}return e};return function(t,n){return r(t,n,e)}}return function(t){return t[e]}}function x(e){if(t.isPlainObject(e))return x(e._);if(null===e)return function(){};if(\"function\"==typeof e)return function(t,n,a){e(t,\"set\",n,a)};if(\"string\"==typeof e&&(-1!==e.indexOf(\".\")||-1!==e.indexOf(\"[\")||-1!==e.indexOf(\"(\"))){var n=function(e,r,o){var i;i=(o=T(o))[o.length-1];for(var l,s,u=0,c=o.length-1;u<c;u++){if(l=o[u].match(ce),s=o[u].match(fe),l){if(o[u]=o[u].replace(ce,\"\"),e[o[u]]=[],(i=o.slice()).splice(0,u+1),l=i.join(\".\"),t.isArray(r))for(s=0,c=r.length;s<c;s++)i={},n(i,r[s],l),e[o[u]].push(i);else e[o[u]]=r;return}s&&(o[u]=o[u].replace(fe,\"\"),e=e[o[u]](r)),null!==e[o[u]]&&e[o[u]]!==a||(e[o[u]]={}),e=e[o[u]]}i.match(fe)?e[i.replace(fe,\"\")](r):e[i.replace(ce,\"\")]=r};return function(t,a){return n(t,a,e)}}return function(t,n){t[e]=n}}function I(t){return re(t.aoData,\"_aData\")}function A(t){t.aoData.length=0,t.aiDisplayMaster.length=0,t.aiDisplay.length=0,t.aIds={}}function F(t,e,n){for(var r=-1,o=0,i=t.length;o<i;o++)t[o]==e?r=o:t[o]>e&&t[o]--;-1!=r&&n===a&&t.splice(r,1)}function L(t,e,n,r){var o,i=t.aoData[e],l=function(n,a){for(;n.childNodes.length;)n.removeChild(n.firstChild);n.innerHTML=_(t,e,a,\"display\")};if(\"dom\"!==n&&(n&&\"auto\"!==n||\"dom\"!==i.src)){var s=i.anCells;if(s)if(r!==a)l(s[r],r);else for(n=0,o=s.length;n<o;n++)l(s[n],n)}else i._aData=R(t,i,r,r===a?a:i._aData).data;if(i._aSortData=null,i._aFilterData=null,l=t.aoColumns,r!==a)l[r].sType=null;else{for(n=0,o=l.length;n<o;n++)l[n].sType=null;j(t,i)}}function R(e,n,r,o){var i,l,s,u=[],c=n.firstChild,f=0,d=e.aoColumns,h=e._rowReadObject,p=(o=o!==a?o:h?{}:[],function(t,e){if(\"string\"==typeof t){var n=t.indexOf(\"@\");-1!==n&&(n=t.substring(n+1),x(t)(o,e.getAttribute(n)))}}),g=function(e){r!==a&&r!==f||(l=d[f],s=t.trim(e.innerHTML),l&&l._bAttrSrc?(x(l.mData._)(o,s),p(l.mData.sort,e),p(l.mData.type,e),p(l.mData.filter,e)):h?(l._setter||(l._setter=x(l.mData)),l._setter(o,s)):o[f]=s),f++};if(c)for(;c;)\"TD\"!=(i=c.nodeName.toUpperCase())&&\"TH\"!=i||(g(c),u.push(c)),c=c.nextSibling;else for(c=0,i=(u=n.anCells).length;c<i;c++)g(u[c]);return(n=n.firstChild?n:n.nTr)&&(n=n.getAttribute(\"id\"))&&x(e.rowId)(o,n),{data:o,cells:u}}function P(e,a,r,o){var i,l,s,u,c,f=e.aoData[a],d=f._aData,h=[];if(null===f.nTr){for(i=r||n.createElement(\"tr\"),f.nTr=i,f.anCells=h,i._DT_RowIndex=a,j(e,f),u=0,c=e.aoColumns.length;u<c;u++)s=e.aoColumns[u],(l=r?o[u]:n.createElement(s.sCellType))._DT_CellIndex={row:a,column:u},h.push(l),r&&!s.mRender&&s.mData===u||t.isPlainObject(s.mData)&&s.mData._===u+\".display\"||(l.innerHTML=_(e,a,u,\"display\")),s.sClass&&(l.className+=\" \"+s.sClass),s.bVisible&&!r?i.appendChild(l):!s.bVisible&&r&&l.parentNode.removeChild(l),s.fnCreatedCell&&s.fnCreatedCell.call(e.oInstance,l,_(e,a,u),d,a,u);Nt(e,\"aoRowCreatedCallback\",null,[i,d,a])}f.nTr.setAttribute(\"role\",\"row\")}function j(e,n){var a=n.nTr,r=n._aData;if(a){var o=e.rowIdFn(r);o&&(a.id=o),r.DT_RowClass&&(o=r.DT_RowClass.split(\" \"),n.__rowc=n.__rowc?se(n.__rowc.concat(o)):o,t(a).removeClass(n.__rowc.join(\" \")).addClass(r.DT_RowClass)),r.DT_RowAttr&&t(a).attr(r.DT_RowAttr),r.DT_RowData&&t(a).data(r.DT_RowData)}}function H(e){var n,a,r,o,i,l=e.nTHead,s=e.nTFoot,u=0===t(\"th, td\",l).length,c=e.oClasses,f=e.aoColumns;for(u&&(o=t(\"<tr/>\").appendTo(l)),n=0,a=f.length;n<a;n++)i=f[n],r=t(i.nTh).addClass(i.sClass),u&&r.appendTo(o),e.oFeatures.bSort&&(r.addClass(i.sSortingClass),!1!==i.bSortable&&(r.attr(\"tabindex\",e.iTabIndex).attr(\"aria-controls\",e.sTableId),Tt(e,i.nTh,n))),i.sTitle!=r[0].innerHTML&&r.html(i.sTitle),Ot(e,\"header\")(e,r,i,c);if(u&&W(e.aoHeader,l),t(l).find(\">tr\").attr(\"role\",\"row\"),t(l).find(\">tr>th, >tr>td\").addClass(c.sHeaderTH),t(s).find(\">tr>th, >tr>td\").addClass(c.sFooterTH),null!==s)for(n=0,a=(e=e.aoFooter[0]).length;n<a;n++)i=f[n],i.nTf=e[n].cell,i.sClass&&t(i.nTf).addClass(i.sClass)}function N(e,n,r){var o,i,l,s,u=[],c=[],f=e.aoColumns.length;if(n){for(r===a&&(r=!1),o=0,i=n.length;o<i;o++){for(u[o]=n[o].slice(),u[o].nTr=n[o].nTr,l=f-1;0<=l;l--)!e.aoColumns[l].bVisible&&!r&&u[o].splice(l,1);c.push([])}for(o=0,i=u.length;o<i;o++){if(e=u[o].nTr)for(;l=e.firstChild;)e.removeChild(l);for(l=0,n=u[o].length;l<n;l++)if(s=f=1,c[o][l]===a){for(e.appendChild(u[o][l].cell),c[o][l]=1;u[o+f]!==a&&u[o][l].cell==u[o+f][l].cell;)c[o+f][l]=1,f++;for(;u[o][l+s]!==a&&u[o][l].cell==u[o][l+s].cell;){for(r=0;r<f;r++)c[o+r][l+s]=1;s++}t(u[o][l].cell).attr(\"rowspan\",f).attr(\"colspan\",s)}}}}function k(e){var n=Nt(e,\"aoPreDrawCallback\",\"preDraw\",[e]);if(-1!==t.inArray(!1,n))ft(e,!1);else{n=[];var r=0,o=e.asStripeClasses,i=o.length,l=e.oLanguage,s=e.iInitDisplayStart,u=\"ssp\"==Mt(e),c=e.aiDisplay;e.bDrawing=!0,s!==a&&-1!==s&&(e._iDisplayStart=u?s:s>=e.fnRecordsDisplay()?0:s,e.iInitDisplayStart=-1);s=e._iDisplayStart;var f=e.fnDisplayEnd();if(e.bDeferLoading)e.bDeferLoading=!1,e.iDraw++,ft(e,!1);else if(u){if(!e.bDestroying&&!U(e))return}else e.iDraw++;if(0!==c.length)for(l=u?e.aoData.length:f,u=u?0:s;u<l;u++){var d=c[u],h=e.aoData[d];if(null===h.nTr&&P(e,d),d=h.nTr,0!==i){var p=o[r%i];h._sRowStripe!=p&&(t(d).removeClass(h._sRowStripe).addClass(p),h._sRowStripe=p)}Nt(e,\"aoRowCallback\",null,[d,h._aData,r,u]),n.push(d),r++}else r=l.sZeroRecords,1==e.iDraw&&\"ajax\"==Mt(e)?r=l.sLoadingRecords:l.sEmptyTable&&0===e.fnRecordsTotal()&&(r=l.sEmptyTable),n[0]=t(\"<tr/>\",{class:i?o[0]:\"\"}).append(t(\"<td />\",{valign:\"top\",colSpan:b(e),class:e.oClasses.sRowEmpty}).html(r))[0];Nt(e,\"aoHeaderCallback\",\"header\",[t(e.nTHead).children(\"tr\")[0],I(e),s,f,c]),Nt(e,\"aoFooterCallback\",\"footer\",[t(e.nTFoot).children(\"tr\")[0],I(e),s,f,c]),(o=t(e.nTBody)).children().detach(),o.append(t(n)),Nt(e,\"aoDrawCallback\",\"draw\",[e]),e.bSorted=!1,e.bFiltered=!1,e.bDrawing=!1}}function O(t,e){var n=t.oFeatures,a=n.bFilter;n.bSort&&yt(t),a?G(t,t.oPreviousSearch):t.aiDisplay=t.aiDisplayMaster.slice(),!0!==e&&(t._iDisplayStart=0),t._drawHold=e,k(t),t._drawHold=!1}function M(e){var n=e.oClasses,a=t(e.nTable),r=(a=t(\"<div/>\").insertBefore(a),e.oFeatures),o=t(\"<div/>\",{id:e.sTableId+\"_wrapper\",class:n.sWrapper+(e.nTFoot?\"\":\" \"+n.sNoFooter)});e.nHolding=a[0],e.nTableWrapper=o[0],e.nTableReinsertBefore=e.nTable.nextSibling;for(var i,l,s,u,c,f,d=e.sDom.split(\"\"),h=0;h<d.length;h++){if(i=null,\"<\"==(l=d[h])){if(s=t(\"<div/>\")[0],\"'\"==(u=d[h+1])||'\"'==u){for(c=\"\",f=2;d[h+f]!=u;)c+=d[h+f],f++;\"H\"==c?c=n.sJUIHeader:\"F\"==c&&(c=n.sJUIFooter),-1!=c.indexOf(\".\")?(u=c.split(\".\"),s.id=u[0].substr(1,u[0].length-1),s.className=u[1]):\"#\"==c.charAt(0)?s.id=c.substr(1,c.length-1):s.className=c,h+=f}o.append(s),o=t(s)}else if(\">\"==l)o=o.parent();else if(\"l\"==l&&r.bPaginate&&r.bLengthChange)i=lt(e);else if(\"f\"==l&&r.bFilter)i=q(e);else if(\"r\"==l&&r.bProcessing)i=ct(e);else if(\"t\"==l)i=dt(e);else if(\"i\"==l&&r.bInfo)i=et(e);else if(\"p\"==l&&r.bPaginate)i=st(e);else if(0!==qt.ext.feature.length)for(f=0,u=(s=qt.ext.feature).length;f<u;f++)if(l==s[f].cFeature){i=s[f].fnInit(e);break}i&&((s=e.aanFeatures)[l]||(s[l]=[]),s[l].push(i),o.append(i))}a.replaceWith(o),e.nHolding=null}function W(e,n){var a,r,o,i,l,s,u,c,f,d,h=t(n).children(\"tr\");for(e.splice(0,e.length),o=0,s=h.length;o<s;o++)e.push([]);for(o=0,s=h.length;o<s;o++)for(r=(a=h[o]).firstChild;r;){if(\"TD\"==r.nodeName.toUpperCase()||\"TH\"==r.nodeName.toUpperCase()){for(c=1*r.getAttribute(\"colspan\"),f=1*r.getAttribute(\"rowspan\"),c=c&&0!==c&&1!==c?c:1,f=f&&0!==f&&1!==f?f:1,i=0,l=e[o];l[i];)i++;for(u=i,d=1===c,l=0;l<c;l++)for(i=0;i<f;i++)e[o+i][u+l]={cell:r,unique:d},e[o+i].nTr=a}r=r.nextSibling}}function E(t,e,n){var a=[];n||(n=t.aoHeader,e&&W(n=[],e));e=0;for(var r=n.length;e<r;e++)for(var o=0,i=n[e].length;o<i;o++)!n[e][o].unique||a[o]&&t.bSortCellsTop||(a[o]=n[e][o].cell);return a}function B(e,n,a){if(Nt(e,\"aoServerParams\",\"serverParams\",[n]),n&&t.isArray(n)){var r={},o=/(.*?)\\[\\]$/;t.each(n,function(t,e){var n=e.name.match(o);n?(n=n[0],r[n]||(r[n]=[]),r[n].push(e.value)):r[e.name]=e.value}),n=r}var i,l=e.ajax,s=e.oInstance,u=function(t){Nt(e,null,\"xhr\",[e,t,e.jqXHR]),a(t)};if(t.isPlainObject(l)&&l.data){i=l.data;var c=t.isFunction(i)?i(n,e):i;n=t.isFunction(i)&&c?c:t.extend(!0,n,c);delete l.data}c={data:n,success:function(t){var n=t.error||t.sError;n&&Lt(e,0,n),e.json=t,u(t)},dataType:\"json\",cache:!1,type:e.sServerMethod,error:function(n,a){var r=Nt(e,null,\"xhr\",[e,null,e.jqXHR]);-1===t.inArray(!0,r)&&(\"parsererror\"==a?Lt(e,0,\"Invalid JSON response\",1):4===n.readyState&&Lt(e,0,\"Ajax error\",7)),ft(e,!1)}},e.oAjaxData=n,Nt(e,null,\"preXhr\",[e,n]),e.fnServerData?e.fnServerData.call(s,e.sAjaxSource,t.map(n,function(t,e){return{name:e,value:t}}),u,e):e.sAjaxSource||\"string\"==typeof l?e.jqXHR=t.ajax(t.extend(c,{url:l||e.sAjaxSource})):t.isFunction(l)?e.jqXHR=l.call(s,n,u,e):(e.jqXHR=t.ajax(t.extend(c,l)),l.data=i)}function U(t){return!t.bAjaxDataGet||(t.iDraw++,ft(t,!0),B(t,V(t),function(e){X(t,e)}),!1)}function V(e){var n,a,r,o,i=e.aoColumns,l=i.length,s=e.oFeatures,u=e.oPreviousSearch,c=e.aoPreSearchCols,f=[],d=Dt(e);n=e._iDisplayStart,a=!1!==s.bPaginate?e._iDisplayLength:-1;var h=function(t,e){f.push({name:t,value:e})};h(\"sEcho\",e.iDraw),h(\"iColumns\",l),h(\"sColumns\",re(i,\"sName\").join(\",\")),h(\"iDisplayStart\",n),h(\"iDisplayLength\",a);var p={draw:e.iDraw,columns:[],order:[],start:n,length:a,search:{value:u.sSearch,regex:u.bRegex}};for(n=0;n<l;n++)r=i[n],o=c[n],a=\"function\"==typeof r.mData?\"function\":r.mData,p.columns.push({data:a,name:r.sName,searchable:r.bSearchable,orderable:r.bSortable,search:{value:o.sSearch,regex:o.bRegex}}),h(\"mDataProp_\"+n,a),s.bFilter&&(h(\"sSearch_\"+n,o.sSearch),h(\"bRegex_\"+n,o.bRegex),h(\"bSearchable_\"+n,r.bSearchable)),s.bSort&&h(\"bSortable_\"+n,r.bSortable);return s.bFilter&&(h(\"sSearch\",u.sSearch),h(\"bRegex\",u.bRegex)),s.bSort&&(t.each(d,function(t,e){p.order.push({column:e.col,dir:e.dir}),h(\"iSortCol_\"+t,e.col),h(\"sSortDir_\"+t,e.dir)}),h(\"iSortingCols\",d.length)),null===(i=qt.ext.legacy.ajax)?e.sAjaxSource?f:p:i?f:p}function X(t,e){var n=J(t,e),r=e.sEcho!==a?e.sEcho:e.draw,o=e.iTotalRecords!==a?e.iTotalRecords:e.recordsTotal,i=e.iTotalDisplayRecords!==a?e.iTotalDisplayRecords:e.recordsFiltered;if(r){if(1*r<t.iDraw)return;t.iDraw=1*r}for(A(t),t._iRecordsTotal=parseInt(o,10),t._iRecordsDisplay=parseInt(i,10),r=0,o=n.length;r<o;r++)D(t,n[r]);t.aiDisplay=t.aiDisplayMaster.slice(),t.bAjaxDataGet=!1,k(t),t._bInitComplete||ot(t,e),t.bAjaxDataGet=!0,ft(t,!1)}function J(e,n){var r=t.isPlainObject(e.ajax)&&e.ajax.dataSrc!==a?e.ajax.dataSrc:e.sAjaxDataProp;return\"data\"===r?n.aaData||n[r]:\"\"!==r?w(r)(n):n}function q(e){var a=e.oClasses,r=e.sTableId,o=e.oLanguage,i=e.oPreviousSearch,l=e.aanFeatures,s='<input type=\"search\" class=\"'+a.sFilterInput+'\"/>',u=(u=o.sSearch).match(/_INPUT_/)?u.replace(\"_INPUT_\",s):u+s,c=(a=t(\"<div/>\",{id:l.f?null:r+\"_filter\",class:a.sFilter}).append(t(\"<label/>\").append(u)),l=function(){var t=this.value?this.value:\"\";t!=i.sSearch&&(G(e,{sSearch:t,bRegex:i.bRegex,bSmart:i.bSmart,bCaseInsensitive:i.bCaseInsensitive}),e._iDisplayStart=0,k(e))},s=null!==e.searchDelay?e.searchDelay:\"ssp\"===Mt(e)?400:0,t(\"input\",a).val(i.sSearch).attr(\"placeholder\",o.sSearchPlaceholder).on(\"keyup.DT search.DT input.DT paste.DT cut.DT\",s?be(l,s):l).on(\"keypress.DT\",function(t){if(13==t.keyCode)return!1}).attr(\"aria-controls\",r));return t(e.nTable).on(\"search.dt.DT\",function(t,a){if(e===a)try{c[0]!==n.activeElement&&c.val(i.sSearch)}catch(t){}}),a[0]}function G(t,e,n){var r=t.oPreviousSearch,o=t.aoPreSearchCols,i=function(t){r.sSearch=t.sSearch,r.bRegex=t.bRegex,r.bSmart=t.bSmart,r.bCaseInsensitive=t.bCaseInsensitive};if(m(t),\"ssp\"!=Mt(t)){for(Y(t,e.sSearch,n,e.bEscapeRegex!==a?!e.bEscapeRegex:e.bRegex,e.bSmart,e.bCaseInsensitive),i(e),e=0;e<o.length;e++)z(t,o[e].sSearch,e,o[e].bEscapeRegex!==a?!o[e].bEscapeRegex:o[e].bRegex,o[e].bSmart,o[e].bCaseInsensitive);$(t)}else i(e);t.bFiltered=!0,Nt(t,null,\"search\",[t])}function $(e){for(var n,a,r=qt.ext.search,o=e.aiDisplay,i=0,l=r.length;i<l;i++){for(var s=[],u=0,c=o.length;u<c;u++)a=o[u],n=e.aoData[a],r[i](e,n._aFilterData,a,n._aData,u)&&s.push(a);o.length=0,t.merge(o,s)}}function z(t,e,n,a,r,o){if(\"\"!==e){var i=[],l=t.aiDisplay;for(a=Z(e,a,r,o),r=0;r<l.length;r++)e=t.aoData[l[r]]._aFilterData[n],a.test(e)&&i.push(l[r]);t.aiDisplay=i}}function Y(t,e,n,a,r,o){a=Z(e,a,r,o),o=t.oPreviousSearch.sSearch;var i,l=t.aiDisplayMaster;r=[];if(0!==qt.ext.search.length&&(n=!0),i=K(t),0>=e.length)t.aiDisplay=l.slice();else{for((i||n||o.length>e.length||0!==e.indexOf(o)||t.bSorted)&&(t.aiDisplay=l.slice()),e=t.aiDisplay,n=0;n<e.length;n++)a.test(t.aoData[e[n]]._sFilterRow)&&r.push(e[n]);t.aiDisplay=r}}function Z(e,n,a,r){return e=n?e:de(e),a&&(e=\"^(?=.*?\"+t.map(e.match(/\"[^\"]+\"|[^ ]+/g)||[\"\"],function(t){if('\"'===t.charAt(0)){var e=t.match(/^\"(.*)\"$/);t=e?e[1]:t}return t.replace('\"',\"\")}).join(\")(?=.*?\")+\").*$\"),RegExp(e,r?\"i\":\"\")}function K(t){var e,n,a,r,o,i,l,s,u=t.aoColumns,c=qt.ext.type.search;for(e=!1,n=0,r=t.aoData.length;n<r;n++)if(s=t.aoData[n],!s._aFilterData){for(i=[],a=0,o=u.length;a<o;a++)e=u[a],e.bSearchable?(l=_(t,n,a,\"filter\"),c[e.sType]&&(l=c[e.sType](l)),null===l&&(l=\"\"),\"string\"!=typeof l&&l.toString&&(l=l.toString())):l=\"\",l.indexOf&&-1!==l.indexOf(\"&\")&&(he.innerHTML=l,l=pe?he.textContent:he.innerText),l.replace&&(l=l.replace(/[\\r\\n]/g,\"\")),i.push(l);s._aFilterData=i,s._sFilterRow=i.join(\"  \"),e=!0}return e}function Q(t){return{search:t.sSearch,smart:t.bSmart,regex:t.bRegex,caseInsensitive:t.bCaseInsensitive}}function tt(t){return{sSearch:t.search,bSmart:t.smart,bRegex:t.regex,bCaseInsensitive:t.caseInsensitive}}function et(e){var n=e.sTableId,a=e.aanFeatures.i,r=t(\"<div/>\",{class:e.oClasses.sInfo,id:a?null:n+\"_info\"});return a||(e.aoDrawCallback.push({fn:nt,sName:\"information\"}),r.attr(\"role\",\"status\").attr(\"aria-live\",\"polite\"),t(e.nTable).attr(\"aria-describedby\",n+\"_info\")),r[0]}function nt(e){var n=e.aanFeatures.i;if(0!==n.length){var a=e.oLanguage,r=e._iDisplayStart+1,o=e.fnDisplayEnd(),i=e.fnRecordsTotal(),l=e.fnRecordsDisplay(),s=l?a.sInfo:a.sInfoEmpty;l!==i&&(s+=\" \"+a.sInfoFiltered),s=at(e,s+=a.sInfoPostFix),null!==(a=a.fnInfoCallback)&&(s=a.call(e.oInstance,e,r,o,i,l,s)),t(n).html(s)}}function at(t,e){var n=t.fnFormatNumber,a=t._iDisplayStart+1,r=t._iDisplayLength,o=t.fnRecordsDisplay(),i=-1===r;return e.replace(/_START_/g,n.call(t,a)).replace(/_END_/g,n.call(t,t.fnDisplayEnd())).replace(/_MAX_/g,n.call(t,t.fnRecordsTotal())).replace(/_TOTAL_/g,n.call(t,o)).replace(/_PAGE_/g,n.call(t,i?1:Math.ceil(a/r))).replace(/_PAGES_/g,n.call(t,i?1:Math.ceil(o/r)))}function rt(t){var e,n,a,r=t.iInitDisplayStart,o=t.aoColumns;n=t.oFeatures;var i=t.bDeferLoading;if(t.bInitialised){for(M(t),H(t),N(t,t.aoHeader),N(t,t.aoFooter),ft(t,!0),n.bAutoWidth&&gt(t),e=0,n=o.length;e<n;e++)a=o[e],a.sWidth&&(a.nTh.style.width=vt(a.sWidth));Nt(t,null,\"preInit\",[t]),O(t),(\"ssp\"!=(o=Mt(t))||i)&&(\"ajax\"==o?B(t,[],function(n){var a=J(t,n);for(e=0;e<a.length;e++)D(t,a[e]);t.iInitDisplayStart=r,O(t),ft(t,!1),ot(t,n)}):(ft(t,!1),ot(t)))}else setTimeout(function(){rt(t)},200)}function ot(t,e){t._bInitComplete=!0,(e||t.oInit.aaData)&&h(t),Nt(t,null,\"plugin-init\",[t,e]),Nt(t,\"aoInitComplete\",\"init\",[t,e])}function it(t,e){var n=parseInt(e,10);t._iDisplayLength=n,kt(t),Nt(t,null,\"length\",[t,n])}function lt(e){for(var n=e.oClasses,a=e.sTableId,r=e.aLengthMenu,o=(i=t.isArray(r[0]))?r[0]:r,i=(r=i?r[1]:r,t(\"<select/>\",{name:a+\"_length\",\"aria-controls\":a,class:n.sLengthSelect})),l=0,s=o.length;l<s;l++)i[0][l]=new Option(\"number\"==typeof r[l]?e.fnFormatNumber(r[l]):r[l],o[l]);var u=t(\"<div><label/></div>\").addClass(n.sLength);return e.aanFeatures.l||(u[0].id=a+\"_length\"),u.children().append(e.oLanguage.sLengthMenu.replace(\"_MENU_\",i[0].outerHTML)),t(\"select\",u).val(e._iDisplayLength).on(\"change.DT\",function(){it(e,t(this).val()),k(e)}),t(e.nTable).on(\"length.dt.DT\",function(n,a,r){e===a&&t(\"select\",u).val(r)}),u[0]}function st(e){var n=e.sPaginationType,a=qt.ext.pager[n],r=\"function\"==typeof a,o=function(t){k(t)},i=(n=t(\"<div/>\").addClass(e.oClasses.sPaging+n)[0],e.aanFeatures);return r||a.fnInit(e,n,o),i.p||(n.id=e.sTableId+\"_paginate\",e.aoDrawCallback.push({fn:function(t){if(r){var e,n=t._iDisplayStart,l=t._iDisplayLength,s=t.fnRecordsDisplay(),u=(n=(u=-1===l)?0:Math.ceil(n/l),l=u?1:Math.ceil(s/l),s=a(n,l),0);for(e=i.p.length;u<e;u++)Ot(t,\"pageButton\")(t,i.p[u],u,s,n,l)}else a.fnUpdate(t,o)},sName:\"pagination\"})),n}function ut(t,e,n){var a=t._iDisplayStart,r=t._iDisplayLength,o=t.fnRecordsDisplay();return 0===o||-1===r?a=0:\"number\"==typeof e?(a=e*r)>o&&(a=0):\"first\"==e?a=0:\"previous\"==e?0>(a=0<=r?a-r:0)&&(a=0):\"next\"==e?a+r<o&&(a+=r):\"last\"==e?a=Math.floor((o-1)/r)*r:Lt(t,0,\"Unknown paging action: \"+e,5),e=t._iDisplayStart!==a,t._iDisplayStart=a,e&&(Nt(t,null,\"page\",[t]),n&&k(t)),e}function ct(e){return t(\"<div/>\",{id:e.aanFeatures.r?null:e.sTableId+\"_processing\",class:e.oClasses.sProcessing}).html(e.oLanguage.sProcessing).insertBefore(e.nTable)[0]}function ft(e,n){e.oFeatures.bProcessing&&t(e.aanFeatures.r).css(\"display\",n?\"block\":\"none\"),Nt(e,null,\"processing\",[e,n])}function dt(e){(f=t(e.nTable)).attr(\"role\",\"grid\");var n=e.oScroll;if(\"\"===n.sX&&\"\"===n.sY)return e.nTable;var a=n.sX,r=n.sY,o=e.oClasses,i=f.children(\"caption\"),l=i.length?i[0]._captionSide:null,s=t(f[0].cloneNode(!1)),u=t(f[0].cloneNode(!1)),c=f.children(\"tfoot\");c.length||(c=null),s=t(\"<div/>\",{class:o.sScrollWrapper}).append(t(\"<div/>\",{class:o.sScrollHead}).css({overflow:\"hidden\",position:\"relative\",border:0,width:a?a?vt(a):null:\"100%\"}).append(t(\"<div/>\",{class:o.sScrollHeadInner}).css({\"box-sizing\":\"content-box\",width:n.sXInner||\"100%\"}).append(s.removeAttr(\"id\").css(\"margin-left\",0).append(\"top\"===l?i:null).append(f.children(\"thead\"))))).append(t(\"<div/>\",{class:o.sScrollBody}).css({position:\"relative\",overflow:\"auto\",width:a?vt(a):null}).append(f)),c&&s.append(t(\"<div/>\",{class:o.sScrollFoot}).css({overflow:\"hidden\",border:0,width:a?a?vt(a):null:\"100%\"}).append(t(\"<div/>\",{class:o.sScrollFootInner}).append(u.removeAttr(\"id\").css(\"margin-left\",0).append(\"bottom\"===l?i:null).append(f.children(\"tfoot\")))));var f,d=(f=s.children())[0],h=(o=f[1],c?f[2]:null);return a&&t(o).on(\"scroll.DT\",function(){var t=this.scrollLeft;d.scrollLeft=t,c&&(h.scrollLeft=t)}),t(o).css(r&&n.bCollapse?\"max-height\":\"height\",r),e.nScrollHead=d,e.nScrollBody=o,e.nScrollFoot=h,e.aoDrawCallback.push({fn:ht,sName:\"scrolling\"}),s[0]}function ht(e){var n,r,o,i,l,s=(f=e.oScroll).sX,u=f.sXInner,c=f.sY,f=f.iBarWidth,d=t(e.nScrollHead),g=d[0].style,b=(m=d.children(\"div\"))[0].style,S=m.children(\"table\"),m=e.nScrollBody,v=t(m),D=m.style,y=t(e.nScrollFoot).children(\"div\"),_=y.children(\"table\"),C=t(e.nTHead),T=t(e.nTable),w=T[0],x=w.style,I=e.nTFoot?t(e.nTFoot):null,A=e.oBrowser,F=A.bScrollOversize,L=re(e.aoColumns,\"nTh\"),R=[],P=[],j=[],H=[],N=function(t){(t=t.style).paddingTop=\"0\",t.paddingBottom=\"0\",t.borderTopWidth=\"0\",t.borderBottomWidth=\"0\",t.height=0};r=m.scrollHeight>m.clientHeight,e.scrollBarVis!==r&&e.scrollBarVis!==a?(e.scrollBarVis=r,h(e)):(e.scrollBarVis=r,T.children(\"thead, tfoot\").remove(),I&&(o=I.clone().prependTo(T),n=I.find(\"tr\"),o=o.find(\"tr\")),i=C.clone().prependTo(T),C=C.find(\"tr\"),r=i.find(\"tr\"),i.find(\"th, td\").removeAttr(\"tabindex\"),s||(D.width=\"100%\",d[0].style.width=\"100%\"),t.each(E(e,i),function(t,n){l=p(e,t),n.style.width=e.aoColumns[l].sWidth}),I&&pt(function(t){t.style.width=\"\"},o),d=T.outerWidth(),\"\"===s?(x.width=\"100%\",F&&(T.find(\"tbody\").height()>m.offsetHeight||\"scroll\"==v.css(\"overflow-y\"))&&(x.width=vt(T.outerWidth()-f)),d=T.outerWidth()):\"\"!==u&&(x.width=vt(u),d=T.outerWidth()),pt(N,r),pt(function(e){j.push(e.innerHTML),R.push(vt(t(e).css(\"width\")))},r),pt(function(e,n){-1!==t.inArray(e,L)&&(e.style.width=R[n])},C),t(r).height(0),I&&(pt(N,o),pt(function(e){H.push(e.innerHTML),P.push(vt(t(e).css(\"width\")))},o),pt(function(t,e){t.style.width=P[e]},n),t(o).height(0)),pt(function(t,e){t.innerHTML='<div class=\"dataTables_sizing\" style=\"height:0;overflow:hidden;\">'+j[e]+\"</div>\",t.style.width=R[e]},r),I&&pt(function(t,e){t.innerHTML='<div class=\"dataTables_sizing\" style=\"height:0;overflow:hidden;\">'+H[e]+\"</div>\",t.style.width=P[e]},o),T.outerWidth()<d?(n=m.scrollHeight>m.offsetHeight||\"scroll\"==v.css(\"overflow-y\")?d+f:d,F&&(m.scrollHeight>m.offsetHeight||\"scroll\"==v.css(\"overflow-y\"))&&(x.width=vt(n-f)),(\"\"===s||\"\"!==u)&&Lt(e,1,\"Possible column misalignment\",6)):n=\"100%\",D.width=vt(n),g.width=vt(n),I&&(e.nScrollFoot.style.width=vt(n)),!c&&F&&(D.height=vt(w.offsetHeight+f)),s=T.outerWidth(),S[0].style.width=vt(s),b.width=vt(s),u=T.height()>m.clientHeight||\"scroll\"==v.css(\"overflow-y\"),b[c=\"padding\"+(A.bScrollbarLeft?\"Left\":\"Right\")]=u?f+\"px\":\"0px\",I&&(_[0].style.width=vt(s),y[0].style.width=vt(s),y[0].style[c]=u?f+\"px\":\"0px\"),T.children(\"colgroup\").insertBefore(T.children(\"thead\")),v.scroll(),!e.bSorted&&!e.bFiltered||e._drawHold||(m.scrollTop=0))}function pt(t,e,n){for(var a,r,o=0,i=0,l=e.length;i<l;){for(a=e[i].firstChild,r=n?n[i].firstChild:null;a;)1===a.nodeType&&(n?t(a,r,o):t(a,o),o++),a=a.nextSibling,r=n?r.nextSibling:null;i++}}function gt(n){var a,r,o=n.nTable,i=n.aoColumns,l=(y=n.oScroll).sY,s=y.sX,u=y.sXInner,c=i.length,f=S(n,\"bVisible\"),d=t(\"th\",n.nTHead),g=o.getAttribute(\"width\"),m=o.parentNode,v=!1,D=n.oBrowser,y=D.bScrollOversize;for((a=o.style.width)&&-1!==a.indexOf(\"%\")&&(g=a),a=0;a<f.length;a++)r=i[f[a]],null!==r.sWidth&&(r.sWidth=bt(r.sWidthOrig,m),v=!0);if(y||!v&&!s&&!l&&c==b(n)&&c==d.length)for(a=0;a<c;a++)f=p(n,a),null!==f&&(i[f].sWidth=vt(d.eq(a).width()));else{(c=t(o).clone().css(\"visibility\",\"hidden\").removeAttr(\"id\")).find(\"tbody tr\").remove();var _=t(\"<tr/>\").appendTo(c.find(\"tbody\"));for(c.find(\"thead, tfoot\").remove(),c.append(t(n.nTHead).clone()).append(t(n.nTFoot).clone()),c.find(\"tfoot th, tfoot td\").css(\"width\",\"\"),d=E(n,c.find(\"thead\")[0]),a=0;a<f.length;a++)r=i[f[a]],d[a].style.width=null!==r.sWidthOrig&&\"\"!==r.sWidthOrig?vt(r.sWidthOrig):\"\",r.sWidthOrig&&s&&t(d[a]).append(t(\"<div/>\").css({width:r.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(n.aoData.length)for(a=0;a<f.length;a++)v=f[a],r=i[v],t(St(n,v)).clone(!1).append(r.sContentPadding).appendTo(_);for(t(\"[name]\",c).removeAttr(\"name\"),r=t(\"<div/>\").css(s||l?{position:\"absolute\",top:0,left:0,height:1,right:0,overflow:\"hidden\"}:{}).append(c).appendTo(m),s&&u?c.width(u):s?(c.css(\"width\",\"auto\"),c.removeAttr(\"width\"),c.width()<m.clientWidth&&g&&c.width(m.clientWidth)):l?c.width(m.clientWidth):g&&c.width(g),a=l=0;a<f.length;a++)m=t(d[a]),u=m.outerWidth()-m.width(),m=D.bBounding?Math.ceil(d[a].getBoundingClientRect().width):m.outerWidth(),l+=m,i[f[a]].sWidth=vt(m-u);o.style.width=vt(l),r.remove()}g&&(o.style.width=vt(g)),!g&&!s||n._reszEvt||(o=function(){t(e).on(\"resize.DT-\"+n.sInstance,be(function(){h(n)}))},y?setTimeout(o,1e3):o(),n._reszEvt=!0)}function bt(e,a){if(!e)return 0;var r=t(\"<div/>\").css(\"width\",vt(e)).appendTo(a||n.body),o=r[0].offsetWidth;return r.remove(),o}function St(e,n){var a=mt(e,n);if(0>a)return null;var r=e.aoData[a];return r.nTr?r.anCells[n]:t(\"<td/>\").html(_(e,a,n,\"display\"))[0]}function mt(t,e){for(var n,a=-1,r=-1,o=0,i=t.aoData.length;o<i;o++)n=_(t,o,e,\"display\")+\"\",n=n.replace(ge,\"\"),n=n.replace(/&nbsp;/g,\" \"),n.length>a&&(a=n.length,r=o);return r}function vt(t){return null===t?\"0px\":\"number\"==typeof t?0>t?\"0px\":t+\"px\":t.match(/\\d$/)?t+\"px\":t}function Dt(e){var n,r,o,i,l,s,u=[],c=e.aoColumns;n=e.aaSortingFixed,r=t.isPlainObject(n);var f=[];for(o=function(e){e.length&&!t.isArray(e[0])?f.push(e):t.merge(f,e)},t.isArray(n)&&o(n),r&&n.pre&&o(n.pre),o(e.aaSorting),r&&n.post&&o(n.post),e=0;e<f.length;e++)for(n=0,r=(o=c[s=f[e][0]].aDataSort).length;n<r;n++)i=o[n],l=c[i].sType||\"string\",f[e]._idx===a&&(f[e]._idx=t.inArray(f[e][1],c[i].asSorting)),u.push({src:s,col:i,dir:f[e][1],index:f[e]._idx,type:l,formatter:qt.ext.type.order[l+\"-pre\"]});return u}function yt(t){var e,n,a,r,o=[],i=qt.ext.type.order,l=t.aoData,s=0,u=t.aiDisplayMaster;for(m(t),e=0,n=(r=Dt(t)).length;e<n;e++)a=r[e],a.formatter&&s++,xt(t,a.col);if(\"ssp\"!=Mt(t)&&0!==r.length){for(e=0,n=u.length;e<n;e++)o[u[e]]=e;s===r.length?u.sort(function(t,e){var n,a,i,s,u=r.length,c=l[t]._aSortData,f=l[e]._aSortData;for(i=0;i<u;i++)if(s=r[i],n=c[s.col],a=f[s.col],n=n<a?-1:n>a?1:0,0!==n)return\"asc\"===s.dir?n:-n;return(n=o[t])<(a=o[e])?-1:n>a?1:0}):u.sort(function(t,e){var n,a,s,u,c=r.length,f=l[t]._aSortData,d=l[e]._aSortData;for(s=0;s<c;s++)if(u=r[s],n=f[u.col],a=d[u.col],u=i[u.type+\"-\"+u.dir]||i[\"string-\"+u.dir],n=u(n,a),0!==n)return n;return(n=o[t])<(a=o[e])?-1:n>a?1:0})}t.bSorted=!0}function _t(t){for(var e,n,a=t.aoColumns,r=Dt(t),o=(t=t.oLanguage.oAria,0),i=a.length;o<i;o++){var l=(n=a[o]).asSorting;e=n.sTitle.replace(/<.*?>/g,\"\");var s=n.nTh;s.removeAttribute(\"aria-sort\"),n.bSortable&&(0<r.length&&r[0].col==o?(s.setAttribute(\"aria-sort\",\"asc\"==r[0].dir?\"ascending\":\"descending\"),n=l[r[0].index+1]||l[0]):n=l[0],e+=\"asc\"===n?t.sSortAscending:t.sSortDescending),s.setAttribute(\"aria-label\",e)}}function Ct(e,n,r,o){var i=e.aaSorting,l=e.aoColumns[n].asSorting,s=function(e,n){var r=e._idx;return r===a&&(r=t.inArray(e[1],l)),r+1<l.length?r+1:n?null:0};\"number\"==typeof i[0]&&(i=e.aaSorting=[i]),r&&e.oFeatures.bSortMulti?-1!==(r=t.inArray(n,re(i,\"0\")))?(null===(n=s(i[r],!0))&&1===i.length&&(n=0),null===n?i.splice(r,1):(i[r][1]=l[n],i[r]._idx=n)):(i.push([n,l[0],0]),i[i.length-1]._idx=0):i.length&&i[0][0]==n?(n=s(i[0]),i.length=1,i[0][1]=l[n],i[0]._idx=n):(i.length=0,i.push([n,l[0]]),i[0]._idx=0),O(e),\"function\"==typeof o&&o(e)}function Tt(t,e,n,a){var r=t.aoColumns[n];jt(e,{},function(e){!1!==r.bSortable&&(t.oFeatures.bProcessing?(ft(t,!0),setTimeout(function(){Ct(t,n,e.shiftKey,a),\"ssp\"!==Mt(t)&&ft(t,!1)},0)):Ct(t,n,e.shiftKey,a))})}function wt(e){var n,a,r=e.aLastSort,o=e.oClasses.sSortColumn,i=Dt(e),l=e.oFeatures;if(l.bSort&&l.bSortClasses){for(l=0,n=r.length;l<n;l++)a=r[l].src,t(re(e.aoData,\"anCells\",a)).removeClass(o+(2>l?l+1:3));for(l=0,n=i.length;l<n;l++)a=i[l].src,t(re(e.aoData,\"anCells\",a)).addClass(o+(2>l?l+1:3))}e.aLastSort=i}function xt(t,e){var n,a=t.aoColumns[e],r=qt.ext.order[a.sSortDataType];r&&(n=r.call(t.oInstance,t,e,g(t,e)));for(var o,i=qt.ext.type.order[a.sType+\"-pre\"],l=0,s=t.aoData.length;l<s;l++)a=t.aoData[l],a._aSortData||(a._aSortData=[]),(!a._aSortData[e]||r)&&(o=r?n[l]:_(t,l,e,\"sort\"),a._aSortData[e]=i?i(o):o)}function It(e){if(e.oFeatures.bStateSave&&!e.bDestroying){var n={time:+new Date,start:e._iDisplayStart,length:e._iDisplayLength,order:t.extend(!0,[],e.aaSorting),search:Q(e.oPreviousSearch),columns:t.map(e.aoColumns,function(t,n){return{visible:t.bVisible,search:Q(e.aoPreSearchCols[n])}})};Nt(e,\"aoStateSaveParams\",\"stateSaveParams\",[e,n]),e.oSavedState=n,e.fnStateSaveCallback.call(e.oInstance,e,n)}}function At(e,n,r){var o,i,l=e.aoColumns;n=function(n){if(n&&n.time){var s=Nt(e,\"aoStateLoadParams\",\"stateLoadParams\",[e,n]);if(-1===t.inArray(!1,s)&&!(0<(s=e.iStateDuration)&&n.time<+new Date-1e3*s||n.columns&&l.length!==n.columns.length)){if(e.oLoadedState=t.extend(!0,{},n),n.start!==a&&(e._iDisplayStart=n.start,e.iInitDisplayStart=n.start),n.length!==a&&(e._iDisplayLength=n.length),n.order!==a&&(e.aaSorting=[],t.each(n.order,function(t,n){e.aaSorting.push(n[0]>=l.length?[0,n[1]]:n)})),n.search!==a&&t.extend(e.oPreviousSearch,tt(n.search)),n.columns)for(o=0,i=n.columns.length;o<i;o++)s=n.columns[o],s.visible!==a&&(l[o].bVisible=s.visible),s.search!==a&&t.extend(e.aoPreSearchCols[o],tt(s.search));Nt(e,\"aoStateLoaded\",\"stateLoaded\",[e,n])}}r()};if(e.oFeatures.bStateSave){var s=e.fnStateLoadCallback.call(e.oInstance,e,n);s!==a&&n(s)}else r()}function Ft(e){var n=qt.settings;return-1!==(e=t.inArray(e,re(n,\"nTable\")))?n[e]:null}function Lt(t,n,a,r){if(a=\"DataTables warning: \"+(t?\"table id=\"+t.sTableId+\" - \":\"\")+a,r&&(a+=\". For more information about this error, please see http://datatables.net/tn/\"+r),n)e.console&&console.log&&console.log(a);else if(n=qt.ext,n=n.sErrMode||n.errMode,t&&Nt(t,null,\"error\",[t,r,a]),\"alert\"==n)alert(a);else{if(\"throw\"==n)throw Error(a);\"function\"==typeof n&&n(t,r,a)}}function Rt(e,n,r,o){t.isArray(r)?t.each(r,function(a,r){t.isArray(r)?Rt(e,n,r[0],r[1]):Rt(e,n,r)}):(o===a&&(o=r),n[r]!==a&&(e[o]=n[r]))}function Pt(e,n,a){var r,o;for(o in n)n.hasOwnProperty(o)&&(r=n[o],t.isPlainObject(r)?(t.isPlainObject(e[o])||(e[o]={}),t.extend(!0,e[o],r)):e[o]=a&&\"data\"!==o&&\"aaData\"!==o&&t.isArray(r)?r.slice():r);return e}function jt(e,n,a){t(e).on(\"click.DT\",n,function(t){e.blur(),a(t)}).on(\"keypress.DT\",n,function(t){13===t.which&&(t.preventDefault(),a(t))}).on(\"selectstart.DT\",function(){return!1})}function Ht(t,e,n,a){n&&t[e].push({fn:n,sName:a})}function Nt(e,n,a,r){var o=[];return n&&(o=t.map(e[n].slice().reverse(),function(t){return t.fn.apply(e.oInstance,r)})),null!==a&&(n=t.Event(a+\".dt\"),t(e.nTable).trigger(n,r),o.push(n.result)),o}function kt(t){var e=t._iDisplayStart,n=t.fnDisplayEnd(),a=t._iDisplayLength;e>=n&&(e=n-a),e-=e%a,(-1===a||0>e)&&(e=0),t._iDisplayStart=e}function Ot(e,n){var a=e.renderer,r=qt.ext.renderer[n];return t.isPlainObject(a)&&a[n]?r[a[n]]||r._:\"string\"==typeof a&&r[a]||r._}function Mt(t){return t.oFeatures.bServerSide?\"ssp\":t.ajax||t.sAjaxSource?\"ajax\":\"dom\"}function Wt(t,e){var n=[],a=(n=Ae.numbers_length,Math.floor(n/2));return e<=n?n=ie(0,e):t<=a?((n=ie(0,n-2)).push(\"ellipsis\"),n.push(e-1)):(t>=e-1-a?n=ie(e-(n-2),e):((n=ie(t-a+2,t+a-1)).push(\"ellipsis\"),n.push(e-1)),n.splice(0,0,\"ellipsis\"),n.splice(0,0,0)),n.DT_el=\"span\",n}function Et(e){t.each({num:function(t){return Fe(t,e)},\"num-fmt\":function(t){return Fe(t,e,Kt)},\"html-num\":function(t){return Fe(t,e,zt)},\"html-num-fmt\":function(t){return Fe(t,e,zt,Kt)}},function(t,n){Ut.type.order[t+e+\"-pre\"]=n,t.match(/^html\\-/)&&(Ut.type.search[t+e]=Ut.type.search.html)})}function Bt(t){return function(){var e=[Ft(this[qt.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return qt.ext.internal[t].apply(this,e)}}var Ut,Vt,Xt,Jt,qt=function(e){this.$=function(t,e){return this.api(!0).$(t,e)},this._=function(t,e){return this.api(!0).rows(t,e).data()},this.api=function(t){return new Vt(t?Ft(this[Ut.iApiIndex]):this)},this.fnAddData=function(e,n){var r=this.api(!0),o=t.isArray(e)&&(t.isArray(e[0])||t.isPlainObject(e[0]))?r.rows.add(e):r.row.add(e);return(n===a||n)&&r.draw(),o.flatten().toArray()},this.fnAdjustColumnSizing=function(t){var e=this.api(!0).columns.adjust(),n=e.settings()[0],r=n.oScroll;t===a||t?e.draw(!1):(\"\"!==r.sX||\"\"!==r.sY)&&ht(n)},this.fnClearTable=function(t){var e=this.api(!0).clear();(t===a||t)&&e.draw()},this.fnClose=function(t){this.api(!0).row(t).child.hide()},this.fnDeleteRow=function(t,e,n){var r=this.api(!0),o=(t=r.rows(t)).settings()[0],i=o.aoData[t[0][0]];return t.remove(),e&&e.call(this,o,i),(n===a||n)&&r.draw(),i},this.fnDestroy=function(t){this.api(!0).destroy(t)},this.fnDraw=function(t){this.api(!0).draw(t)},this.fnFilter=function(t,e,n,r,o,i){o=this.api(!0),null===e||e===a?o.search(t,n,r,i):o.column(e).search(t,n,r,i),o.draw()},this.fnGetData=function(t,e){var n=this.api(!0);if(t!==a){var r=t.nodeName?t.nodeName.toLowerCase():\"\";return e!==a||\"td\"==r||\"th\"==r?n.cell(t,e).data():n.row(t).data()||null}return n.data().toArray()},this.fnGetNodes=function(t){var e=this.api(!0);return t!==a?e.row(t).node():e.rows().nodes().flatten().toArray()},this.fnGetPosition=function(t){var e=this.api(!0),n=t.nodeName.toUpperCase();return\"TR\"==n?e.row(t).index():\"TD\"==n||\"TH\"==n?[(t=e.cell(t).index()).row,t.columnVisible,t.column]:null},this.fnIsOpen=function(t){return this.api(!0).row(t).child.isShown()},this.fnOpen=function(t,e,n){return this.api(!0).row(t).child(e,n).show().child()[0]},this.fnPageChange=function(t,e){var n=this.api(!0).page(t);(e===a||e)&&n.draw(!1)},this.fnSetColumnVis=function(t,e,n){t=this.api(!0).column(t).visible(e),(n===a||n)&&t.columns.adjust().draw()},this.fnSettings=function(){return Ft(this[Ut.iApiIndex])},this.fnSort=function(t){this.api(!0).order(t).draw()},this.fnSortListener=function(t,e,n){this.api(!0).order.listener(t,e,n)},this.fnUpdate=function(t,e,n,r,o){var i=this.api(!0);return n===a||null===n?i.row(e).data(t):i.cell(e,n).data(t),(o===a||o)&&i.columns.adjust(),(r===a||r)&&i.draw(),0},this.fnVersionCheck=Ut.fnVersionCheck;var n=this,r=e===a,c=this.length;r&&(e={}),this.oApi=this.internal=Ut.internal;for(var h in qt.ext.internal)h&&(this[h]=Bt(h));return this.each(function(){var h,p={},g=1<c?Pt(p,e,!0):e,b=0,S=(p=this.getAttribute(\"id\"),!1),m=qt.defaults,_=t(this);if(\"table\"!=this.nodeName.toLowerCase())Lt(null,0,\"Non-table node initialisation (\"+this.nodeName+\")\",2);else{l(m),s(m.column),o(m,m,!0),o(m.column,m.column,!0),o(m,t.extend(g,_.data()));var C=qt.settings;b=0;for(h=C.length;b<h;b++){var T=C[b];if(T.nTable==this||T.nTHead.parentNode==this||T.nTFoot&&T.nTFoot.parentNode==this){var x=g.bRetrieve!==a?g.bRetrieve:m.bRetrieve;if(r||x)return T.oInstance;if(g.bDestroy!==a?g.bDestroy:m.bDestroy){T.oInstance.fnDestroy();break}return void Lt(T,0,\"Cannot reinitialise DataTable\",3)}if(T.sTableId==this.id){C.splice(b,1);break}}null!==p&&\"\"!==p||(this.id=p=\"DataTables_Table_\"+qt.ext._unique++);var I=t.extend(!0,{},qt.models.oSettings,{sDestroyWidth:_[0].style.width,sInstance:p,sTableId:p});I.nTable=this,I.oApi=n.internal,I.oInit=g,C.push(I),I.oInstance=1===n.length?n:_.dataTable(),l(g),g.oLanguage&&i(g.oLanguage),g.aLengthMenu&&!g.iDisplayLength&&(g.iDisplayLength=t.isArray(g.aLengthMenu[0])?g.aLengthMenu[0][0]:g.aLengthMenu[0]),g=Pt(t.extend(!0,{},m),g),Rt(I.oFeatures,g,\"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender\".split(\" \")),Rt(I,g,[\"asStripeClasses\",\"ajax\",\"fnServerData\",\"fnFormatNumber\",\"sServerMethod\",\"aaSorting\",\"aaSortingFixed\",\"aLengthMenu\",\"sPaginationType\",\"sAjaxSource\",\"sAjaxDataProp\",\"iStateDuration\",\"sDom\",\"bSortCellsTop\",\"iTabIndex\",\"fnStateLoadCallback\",\"fnStateSaveCallback\",\"renderer\",\"searchDelay\",\"rowId\",[\"iCookieDuration\",\"iStateDuration\"],[\"oSearch\",\"oPreviousSearch\"],[\"aoSearchCols\",\"aoPreSearchCols\"],[\"iDisplayLength\",\"_iDisplayLength\"]]),Rt(I.oScroll,g,[[\"sScrollX\",\"sX\"],[\"sScrollXInner\",\"sXInner\"],[\"sScrollY\",\"sY\"],[\"bScrollCollapse\",\"bCollapse\"]]),Rt(I.oLanguage,g,\"fnInfoCallback\"),Ht(I,\"aoDrawCallback\",g.fnDrawCallback,\"user\"),Ht(I,\"aoServerParams\",g.fnServerParams,\"user\"),Ht(I,\"aoStateSaveParams\",g.fnStateSaveParams,\"user\"),Ht(I,\"aoStateLoadParams\",g.fnStateLoadParams,\"user\"),Ht(I,\"aoStateLoaded\",g.fnStateLoaded,\"user\"),Ht(I,\"aoRowCallback\",g.fnRowCallback,\"user\"),Ht(I,\"aoRowCreatedCallback\",g.fnCreatedRow,\"user\"),Ht(I,\"aoHeaderCallback\",g.fnHeaderCallback,\"user\"),Ht(I,\"aoFooterCallback\",g.fnFooterCallback,\"user\"),Ht(I,\"aoInitComplete\",g.fnInitComplete,\"user\"),Ht(I,\"aoPreDrawCallback\",g.fnPreDrawCallback,\"user\"),I.rowIdFn=w(g.rowId),u(I);var A=I.oClasses;t.extend(A,qt.ext.classes,g.oClasses),_.addClass(A.sTable),I.iInitDisplayStart===a&&(I.iInitDisplayStart=g.iDisplayStart,I._iDisplayStart=g.iDisplayStart),null!==g.iDeferLoading&&(I.bDeferLoading=!0,p=t.isArray(g.iDeferLoading),I._iRecordsDisplay=p?g.iDeferLoading[0]:g.iDeferLoading,I._iRecordsTotal=p?g.iDeferLoading[1]:g.iDeferLoading);var F=I.oLanguage;t.extend(!0,F,g.oLanguage),F.sUrl&&(t.ajax({dataType:\"json\",url:F.sUrl,success:function(e){i(e),o(m.oLanguage,e),t.extend(!0,F,e),rt(I)},error:function(){rt(I)}}),S=!0),null===g.asStripeClasses&&(I.asStripeClasses=[A.sStripeOdd,A.sStripeEven]);p=I.asStripeClasses;var L=_.children(\"tbody\").find(\"tr\").eq(0);if(-1!==t.inArray(!0,t.map(p,function(t){return L.hasClass(t)}))&&(t(\"tbody tr\",this).removeClass(p.join(\" \")),I.asDestroyStripes=p.slice()),p=[],0!==(C=this.getElementsByTagName(\"thead\")).length&&(W(I.aoHeader,C[0]),p=E(I)),null===g.aoColumns)for(C=[],b=0,h=p.length;b<h;b++)C.push(null);else C=g.aoColumns;for(b=0,h=C.length;b<h;b++)f(I,p?p[b]:null);if(v(I,g.aoColumnDefs,C,function(t,e){d(I,t,e)}),L.length){var R=function(t,e){return null!==t.getAttribute(\"data-\"+e)?e:null};t(L[0]).children(\"th, td\").each(function(t,e){var n=I.aoColumns[t];if(n.mData===t){var r=R(e,\"sort\")||R(e,\"order\"),o=R(e,\"filter\")||R(e,\"search\");null===r&&null===o||(n.mData={_:t+\".display\",sort:null!==r?t+\".@data-\"+r:a,type:null!==r?t+\".@data-\"+r:a,filter:null!==o?t+\".@data-\"+o:a},d(I,t))}})}var P=I.oFeatures;p=function(){if(g.aaSorting===a){var e=I.aaSorting;for(b=0,h=e.length;b<h;b++)e[b][1]=I.aoColumns[b].asSorting[0]}wt(I),P.bSort&&Ht(I,\"aoDrawCallback\",function(){if(I.bSorted){var e=Dt(I),n={};t.each(e,function(t,e){n[e.src]=e.dir}),Nt(I,null,\"order\",[I,e,n]),_t(I)}}),Ht(I,\"aoDrawCallback\",function(){(I.bSorted||\"ssp\"===Mt(I)||P.bDeferRender)&&wt(I)},\"sc\");e=_.children(\"caption\").each(function(){this._captionSide=t(this).css(\"caption-side\")});var n=_.children(\"thead\");if(0===n.length&&(n=t(\"<thead/>\").appendTo(_)),I.nTHead=n[0],0===(n=_.children(\"tbody\")).length&&(n=t(\"<tbody/>\").appendTo(_)),I.nTBody=n[0],0===(n=_.children(\"tfoot\")).length&&e.length>0&&(\"\"!==I.oScroll.sX||\"\"!==I.oScroll.sY)&&(n=t(\"<tfoot/>\").appendTo(_)),0===n.length||0===n.children().length?_.addClass(A.sNoFooter):n.length>0&&(I.nTFoot=n[0],W(I.aoFooter,I.nTFoot)),g.aaData)for(b=0;b<g.aaData.length;b++)D(I,g.aaData[b]);else(I.bDeferLoading||\"dom\"==Mt(I))&&y(I,t(I.nTBody).children(\"tr\"));I.aiDisplay=I.aiDisplayMaster.slice(),I.bInitialised=!0,!1===S&&rt(I)};g.bStateSave?(P.bStateSave=!0,Ht(I,\"aoDrawCallback\",It,\"state_save\"),At(I,g,p)):p()}}),n=null,this},Gt={},$t=/[\\r\\n]/g,zt=/<.*?>/g,Yt=/^\\d{2,4}[\\.\\/\\-]\\d{1,2}[\\.\\/\\-]\\d{1,2}([T ]{1}\\d{1,2}[:\\.]\\d{2}([\\.:]\\d{2})?)?$/,Zt=RegExp(\"(\\\\/|\\\\.|\\\\*|\\\\+|\\\\?|\\\\||\\\\(|\\\\)|\\\\[|\\\\]|\\\\{|\\\\}|\\\\\\\\|\\\\$|\\\\^|\\\\-)\",\"g\"),Kt=/[',$£€¥%\\u2009\\u202F\\u20BD\\u20a9\\u20BArfk]/gi,Qt=function(t){return!t||!0===t||\"-\"===t},te=function(t){var e=parseInt(t,10);return!isNaN(e)&&isFinite(t)?e:null},ee=function(t,e){return Gt[e]||(Gt[e]=RegExp(de(e),\"g\")),\"string\"==typeof t&&\".\"!==e?t.replace(/\\./g,\"\").replace(Gt[e],\".\"):t},ne=function(t,e,n){var a=\"string\"==typeof t;return!!Qt(t)||(e&&a&&(t=ee(t,e)),n&&a&&(t=t.replace(Kt,\"\")),!isNaN(parseFloat(t))&&isFinite(t))},ae=function(t,e,n){return!!Qt(t)||((Qt(t)||\"string\"==typeof t)&&!!ne(t.replace(zt,\"\"),e,n)||null)},re=function(t,e,n){var r=[],o=0,i=t.length;if(n!==a)for(;o<i;o++)t[o]&&t[o][e]&&r.push(t[o][e][n]);else for(;o<i;o++)t[o]&&r.push(t[o][e]);return r},oe=function(t,e,n,r){var o=[],i=0,l=e.length;if(r!==a)for(;i<l;i++)t[e[i]][n]&&o.push(t[e[i]][n][r]);else for(;i<l;i++)o.push(t[e[i]][n]);return o},ie=function(t,e){var n,r=[];e===a?(e=0,n=t):(n=e,e=t);for(var o=e;o<n;o++)r.push(o);return r},le=function(t){for(var e=[],n=0,a=t.length;n<a;n++)t[n]&&e.push(t[n]);return e},se=function(t){var e;t:{if(!(2>t.length))for(var n=(e=t.slice().sort())[0],a=1,r=e.length;a<r;a++){if(e[a]===n){e=!1;break t}n=e[a]}e=!0}if(e)return t.slice();e=[];r=t.length;var o,i=0;a=0;t:for(;a<r;a++){for(n=t[a],o=0;o<i;o++)if(e[o]===n)continue t;e.push(n),i++}return e};qt.util={throttle:function(t,e){var n,r,o=e!==a?e:200;return function(){var e=this,i=+new Date,l=arguments;n&&i<n+o?(clearTimeout(r),r=setTimeout(function(){n=a,t.apply(e,l)},o)):(n=i,t.apply(e,l))}},escapeRegex:function(t){return t.replace(Zt,\"\\\\$1\")}};var ue=function(t,e,n){t[e]!==a&&(t[n]=t[e])},ce=/\\[.*?\\]$/,fe=/\\(\\)$/,de=qt.util.escapeRegex,he=t(\"<div>\")[0],pe=he.textContent!==a,ge=/<.*?>/g,be=qt.util.throttle,Se=[],me=Array.prototype;Vt=function(e,n){if(!(this instanceof Vt))return new Vt(e,n);var a=[],r=function(e){var n,r,o,i,l;n=e,i=qt.settings,l=t.map(i,function(t){return t.nTable}),(e=n?n.nTable&&n.oApi?[n]:n.nodeName&&\"table\"===n.nodeName.toLowerCase()?-1!==(r=t.inArray(n,l))?[i[r]]:null:n&&\"function\"==typeof n.settings?n.settings().toArray():(\"string\"==typeof n?o=t(n):n instanceof t&&(o=n),o?o.map(function(){return-1!==(r=t.inArray(this,l))?i[r]:null}).toArray():void 0):[])&&(a=a.concat(e))};if(t.isArray(e))for(var o=0,i=e.length;o<i;o++)r(e[o]);else r(e);this.context=se(a),n&&t.merge(this,n),this.selector={rows:null,cols:null,opts:null},Vt.extend(this,this,Se)},qt.Api=Vt,t.extend(Vt.prototype,{any:function(){return 0!==this.count()},concat:me.concat,context:[],count:function(){return this.flatten().length},each:function(t){for(var e=0,n=this.length;e<n;e++)t.call(this,this[e],e,this);return this},eq:function(t){var e=this.context;return e.length>t?new Vt(e[t],this[t]):null},filter:function(t){var e=[];if(me.filter)e=me.filter.call(this,t,this);else for(var n=0,a=this.length;n<a;n++)t.call(this,this[n],n,this)&&e.push(this[n]);return new Vt(this.context,e)},flatten:function(){var t=[];return new Vt(this.context,t.concat.apply(t,this.toArray()))},join:me.join,indexOf:me.indexOf||function(t,e){for(var n=e||0,a=this.length;n<a;n++)if(this[n]===t)return n;return-1},iterator:function(t,e,n,r){var o,i,l,s,u,c,f,d=[],h=this.context,p=this.selector;for(\"string\"==typeof t&&(r=n,n=e,e=t,t=!1),i=0,l=h.length;i<l;i++){var g=new Vt(h[i]);if(\"table\"===e)o=n.call(g,h[i],i),o!==a&&d.push(o);else if(\"columns\"===e||\"rows\"===e)o=n.call(g,h[i],this[i],i),o!==a&&d.push(o);else if(\"column\"===e||\"column-rows\"===e||\"row\"===e||\"cell\"===e)for(f=this[i],\"column-rows\"===e&&(c=Ce(h[i],p.opts)),s=0,u=f.length;s<u;s++)o=f[s],o=\"cell\"===e?n.call(g,h[i],o.row,o.column,i,s):n.call(g,h[i],o,i,s,c),o!==a&&d.push(o)}return d.length||r?((e=(t=new Vt(h,t?d.concat.apply([],d):d)).selector).rows=p.rows,e.cols=p.cols,e.opts=p.opts,t):this},lastIndexOf:me.lastIndexOf||function(t,e){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(t){var e=[];if(me.map)e=me.map.call(this,t,this);else for(var n=0,a=this.length;n<a;n++)e.push(t.call(this,this[n],n));return new Vt(this.context,e)},pluck:function(t){return this.map(function(e){return e[t]})},pop:me.pop,push:me.push,reduce:me.reduce||function(t,e){return c(this,t,e,0,this.length,1)},reduceRight:me.reduceRight||function(t,e){return c(this,t,e,this.length-1,-1,-1)},reverse:me.reverse,selector:null,shift:me.shift,slice:function(){return new Vt(this.context,this)},sort:me.sort,splice:me.splice,toArray:function(){return me.slice.call(this)},to$:function(){return t(this)},toJQuery:function(){return t(this)},unique:function(){return new Vt(this.context,se(this))},unshift:me.unshift}),Vt.extend=function(e,n,a){if(a.length&&n&&(n instanceof Vt||n.__dt_wrapper)){var r,o,i,l=function(t,e,n){return function(){var a=e.apply(t,arguments);return Vt.extend(a,a,n.methodExt),a}};for(r=0,o=a.length;r<o;r++)i=a[r],n[i.name]=\"function\"==typeof i.val?l(e,i.val,i):t.isPlainObject(i.val)?{}:i.val,n[i.name].__dt_wrapper=!0,Vt.extend(e,n[i.name],i.propExt)}},Vt.register=Xt=function(e,n){if(t.isArray(e))for(var a=0,r=e.length;a<r;a++)Vt.register(e[a],n);else{var o,i,l=e.split(\".\"),s=Se;for(a=0,r=l.length;a<r;a++){var u;o=(i=-1!==l[a].indexOf(\"()\"))?l[a].replace(\"()\",\"\"):l[a];t:{u=0;for(var c=s.length;u<c;u++)if(s[u].name===o){u=s[u];break t}u=null}u||(u={name:o,val:{},methodExt:[],propExt:[]},s.push(u)),a===r-1?u.val=n:s=i?u.methodExt:u.propExt}}},Vt.registerPlural=Jt=function(e,n,r){Vt.register(e,r),Vt.register(n,function(){var e=r.apply(this,arguments);return e===this?this:e instanceof Vt?e.length?t.isArray(e[0])?new Vt(e.context,e[0]):e[0]:a:e})},Xt(\"tables()\",function(e){var n;if(e){n=Vt;var a=this.context;if(\"number\"==typeof e)e=[a[e]];else{var r=t.map(a,function(t){return t.nTable});e=t(r).filter(e).map(function(){var e=t.inArray(this,r);return a[e]}).toArray()}n=new n(e)}else n=this;return n}),Xt(\"table()\",function(t){var e=(t=this.tables(t)).context;return e.length?new Vt(e[0]):t}),Jt(\"tables().nodes()\",\"table().node()\",function(){return this.iterator(\"table\",function(t){return t.nTable},1)}),Jt(\"tables().body()\",\"table().body()\",function(){return this.iterator(\"table\",function(t){return t.nTBody},1)}),Jt(\"tables().header()\",\"table().header()\",function(){return this.iterator(\"table\",function(t){return t.nTHead},1)}),Jt(\"tables().footer()\",\"table().footer()\",function(){return this.iterator(\"table\",function(t){return t.nTFoot},1)}),Jt(\"tables().containers()\",\"table().container()\",function(){return this.iterator(\"table\",function(t){return t.nTableWrapper},1)}),Xt(\"draw()\",function(t){return this.iterator(\"table\",function(e){\"page\"===t?k(e):(\"string\"==typeof t&&(t=\"full-hold\"!==t),O(e,!1===t))})}),Xt(\"page()\",function(t){return t===a?this.page.info().page:this.iterator(\"table\",function(e){ut(e,t)})}),Xt(\"page.info()\",function(){if(0===this.context.length)return a;var t=this.context[0],e=t._iDisplayStart,n=t.oFeatures.bPaginate?t._iDisplayLength:-1,r=t.fnRecordsDisplay(),o=-1===n;return{page:o?0:Math.floor(e/n),pages:o?1:Math.ceil(r/n),start:e,end:t.fnDisplayEnd(),length:n,recordsTotal:t.fnRecordsTotal(),recordsDisplay:r,serverSide:\"ssp\"===Mt(t)}}),Xt(\"page.len()\",function(t){return t===a?0!==this.context.length?this.context[0]._iDisplayLength:a:this.iterator(\"table\",function(e){it(e,t)})});var ve=function(t,e,n){if(n){var a=new Vt(t);a.one(\"draw\",function(){n(a.ajax.json())})}if(\"ssp\"==Mt(t))O(t,e);else{ft(t,!0);var r=t.jqXHR;r&&4!==r.readyState&&r.abort(),B(t,[],function(n){A(t);for(var a=0,r=(n=J(t,n)).length;a<r;a++)D(t,n[a]);O(t,e),ft(t,!1)})}};Xt(\"ajax.json()\",function(){var t=this.context;if(0<t.length)return t[0].json}),Xt(\"ajax.params()\",function(){var t=this.context;if(0<t.length)return t[0].oAjaxData}),Xt(\"ajax.reload()\",function(t,e){return this.iterator(\"table\",function(n){ve(n,!1===e,t)})}),Xt(\"ajax.url()\",function(e){var n=this.context;return e===a?0===n.length?a:(n=n[0]).ajax?t.isPlainObject(n.ajax)?n.ajax.url:n.ajax:n.sAjaxSource:this.iterator(\"table\",function(n){t.isPlainObject(n.ajax)?n.ajax.url=e:n.ajax=e})}),Xt(\"ajax.url().load()\",function(t,e){return this.iterator(\"table\",function(n){ve(n,!1===e,t)})});var De=function(e,n,r,o,i){var l,s,u,c,f,d,h=[];for(u=typeof n,n&&\"string\"!==u&&\"function\"!==u&&n.length!==a||(n=[n]),u=0,c=n.length;u<c;u++)for(f=0,d=(s=n[u]&&n[u].split&&!n[u].match(/[\\[\\(:]/)?n[u].split(\",\"):[n[u]]).length;f<d;f++)(l=r(\"string\"==typeof s[f]?t.trim(s[f]):s[f]))&&l.length&&(h=h.concat(l));if((e=Ut.selector[e]).length)for(u=0,c=e.length;u<c;u++)h=e[u](o,i,h);return se(h)},ye=function(e){return e||(e={}),e.filter&&e.search===a&&(e.search=e.filter),t.extend({search:\"none\",order:\"current\",page:\"all\"},e)},_e=function(t){for(var e=0,n=t.length;e<n;e++)if(0<t[e].length)return t[0]=t[e],t[0].length=1,t.length=1,t.context=[t.context[e]],t;return t.length=0,t},Ce=function(e,n){var a,r,o,i=[],l=e.aiDisplay;a=e.aiDisplayMaster;var s=n.search;if(r=n.order,o=n.page,\"ssp\"==Mt(e))return\"removed\"===s?[]:ie(0,a.length);if(\"current\"==o)for(a=e._iDisplayStart,r=e.fnDisplayEnd();a<r;a++)i.push(l[a]);else if(\"current\"==r||\"applied\"==r)i=\"none\"==s?a.slice():\"applied\"==s?l.slice():t.map(a,function(e){return-1===t.inArray(e,l)?e:null});else if(\"index\"==r||\"original\"==r)for(a=0,r=e.aoData.length;a<r;a++)\"none\"==s?i.push(a):(o=t.inArray(a,l),(-1===o&&\"removed\"==s||0<=o&&\"applied\"==s)&&i.push(a));return i};Xt(\"rows()\",function(e,n){e===a?e=\"\":t.isPlainObject(e)&&(n=e,e=\"\");n=ye(n);var r=this.iterator(\"table\",function(r){var o,i=n;return De(\"row\",e,function(e){var n=te(e);if(null!==n&&!i)return[n];if(o||(o=Ce(r,i)),null!==n&&-1!==t.inArray(n,o))return[n];if(null===e||e===a||\"\"===e)return o;if(\"function\"==typeof e)return t.map(o,function(t){var n=r.aoData[t];return e(t,n._aData,n.nTr)?t:null});if(n=le(oe(r.aoData,o,\"nTr\")),e.nodeName)return e._DT_RowIndex!==a?[e._DT_RowIndex]:e._DT_CellIndex?[e._DT_CellIndex.row]:(n=t(e).closest(\"*[data-dt-row]\")).length?[n.data(\"dt-row\")]:[];if(\"string\"==typeof e&&\"#\"===e.charAt(0)){var l=r.aIds[e.replace(/^#/,\"\")];if(l!==a)return[l.idx]}return t(n).filter(e).map(function(){return this._DT_RowIndex}).toArray()},r,i)},1);return r.selector.rows=e,r.selector.opts=n,r}),Xt(\"rows().nodes()\",function(){return this.iterator(\"row\",function(t,e){return t.aoData[e].nTr||a},1)}),Xt(\"rows().data()\",function(){return this.iterator(!0,\"rows\",function(t,e){return oe(t.aoData,e,\"_aData\")},1)}),Jt(\"rows().cache()\",\"row().cache()\",function(t){return this.iterator(\"row\",function(e,n){var a=e.aoData[n];return\"search\"===t?a._aFilterData:a._aSortData},1)}),Jt(\"rows().invalidate()\",\"row().invalidate()\",function(t){return this.iterator(\"row\",function(e,n){L(e,n,t)})}),Jt(\"rows().indexes()\",\"row().index()\",function(){return this.iterator(\"row\",function(t,e){return e},1)}),Jt(\"rows().ids()\",\"row().id()\",function(t){for(var e=[],n=this.context,a=0,r=n.length;a<r;a++)for(var o=0,i=this[a].length;o<i;o++){var l=n[a].rowIdFn(n[a].aoData[this[a][o]]._aData);e.push((!0===t?\"#\":\"\")+l)}return new Vt(n,e)}),Jt(\"rows().remove()\",\"row().remove()\",function(){var t=this;return this.iterator(\"row\",function(e,n,r){var o,i,l,s,u,c=e.aoData,f=c[n];for(c.splice(n,1),o=0,i=c.length;o<i;o++)if(l=c[o],u=l.anCells,null!==l.nTr&&(l.nTr._DT_RowIndex=o),null!==u)for(l=0,s=u.length;l<s;l++)u[l]._DT_CellIndex.row=o;F(e.aiDisplayMaster,n),F(e.aiDisplay,n),F(t[r],n,!1),0<e._iRecordsDisplay&&e._iRecordsDisplay--,kt(e),(n=e.rowIdFn(f._aData))!==a&&delete e.aIds[n]}),this.iterator(\"table\",function(t){for(var e=0,n=t.aoData.length;e<n;e++)t.aoData[e].idx=e}),this}),Xt(\"rows.add()\",function(e){var n=this.iterator(\"table\",function(t){var n,a,r,o=[];for(a=0,r=e.length;a<r;a++)n=e[a],n.nodeName&&\"TR\"===n.nodeName.toUpperCase()?o.push(y(t,n)[0]):o.push(D(t,n));return o},1),a=this.rows(-1);return a.pop(),t.merge(a,n),a}),Xt(\"row()\",function(t,e){return _e(this.rows(t,e))}),Xt(\"row().data()\",function(t){var e=this.context;return t===a?e.length&&this.length?e[0].aoData[this[0]]._aData:a:(e[0].aoData[this[0]]._aData=t,L(e[0],this[0],\"data\"),this)}),Xt(\"row().node()\",function(){var t=this.context;return t.length&&this.length&&t[0].aoData[this[0]].nTr||null}),Xt(\"row.add()\",function(e){e instanceof t&&e.length&&(e=e[0]);var n=this.iterator(\"table\",function(t){return e.nodeName&&\"TR\"===e.nodeName.toUpperCase()?y(t,e)[0]:D(t,e)});return this.row(n[0])});var Te=function(t,e){var n=t.context;n.length&&(n=n[0].aoData[e!==a?e:t[0]])&&n._details&&(n._details.remove(),n._detailsShow=a,n._details=a)},we=function(t,e){var n=t.context;if(n.length&&t.length){var a=n[0].aoData[t[0]];if(a._details){(a._detailsShow=e)?a._details.insertAfter(a.nTr):a._details.detach();var r=n[0],o=new Vt(r),i=r.aoData;o.off(\"draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details\"),0<re(i,\"_details\").length&&(o.on(\"draw.dt.DT_details\",function(t,e){r===e&&o.rows({page:\"current\"}).eq(0).each(function(t){(t=i[t])._detailsShow&&t._details.insertAfter(t.nTr)})}),o.on(\"column-visibility.dt.DT_details\",function(t,e){if(r===e)for(var n,a=b(e),o=0,l=i.length;o<l;o++)n=i[o],n._details&&n._details.children(\"td[colspan]\").attr(\"colspan\",a)}),o.on(\"destroy.dt.DT_details\",function(t,e){if(r===e)for(var n=0,a=i.length;n<a;n++)i[n]._details&&Te(o,n)}))}}};Xt(\"row().child()\",function(e,n){var r=this.context;if(e===a)return r.length&&this.length?r[0].aoData[this[0]]._details:a;if(!0===e)this.child.show();else if(!1===e)Te(this);else if(r.length&&this.length){var o=r[0],i=(r=r[0].aoData[this[0]],[]),l=function(e,n){if(t.isArray(e)||e instanceof t)for(var a=0,r=e.length;a<r;a++)l(e[a],n);else e.nodeName&&\"tr\"===e.nodeName.toLowerCase()?i.push(e):(a=t(\"<tr><td/></tr>\").addClass(n),t(\"td\",a).addClass(n).html(e)[0].colSpan=b(o),i.push(a[0]))};l(e,n),r._details&&r._details.detach(),r._details=t(i),r._detailsShow&&r._details.insertAfter(r.nTr)}return this}),Xt([\"row().child.show()\",\"row().child().show()\"],function(){return we(this,!0),this}),Xt([\"row().child.hide()\",\"row().child().hide()\"],function(){return we(this,!1),this}),Xt([\"row().child.remove()\",\"row().child().remove()\"],function(){return Te(this),this}),Xt(\"row().child.isShown()\",function(){var t=this.context;return t.length&&this.length&&t[0].aoData[this[0]]._detailsShow||!1});var xe=/^([^:]+):(name|visIdx|visible)$/,Ie=function(t,e,n,a,r){n=[],a=0;for(var o=r.length;a<o;a++)n.push(_(t,r[a],e));return n};Xt(\"columns()\",function(e,n){e===a?e=\"\":t.isPlainObject(e)&&(n=e,e=\"\");n=ye(n);var r=this.iterator(\"table\",function(a){var r=e,o=n,i=a.aoColumns,l=re(i,\"sName\"),s=re(i,\"nTh\");return De(\"column\",r,function(e){var n=te(e);if(\"\"===e)return ie(i.length);if(null!==n)return[n>=0?n:i.length+n];if(\"function\"==typeof e){var r=Ce(a,o);return t.map(i,function(t,n){return e(n,Ie(a,n,0,0,r),s[n])?n:null})}var u=\"string\"==typeof e?e.match(xe):\"\";if(u)switch(u[2]){case\"visIdx\":case\"visible\":if((n=parseInt(u[1],10))<0){var c=t.map(i,function(t,e){return t.bVisible?e:null});return[c[c.length+n]]}return[p(a,n)];case\"name\":return t.map(l,function(t,e){return t===u[1]?e:null});default:return[]}return e.nodeName&&e._DT_CellIndex?[e._DT_CellIndex.column]:(n=t(s).filter(e).map(function(){return t.inArray(this,s)}).toArray()).length||!e.nodeName?n:(n=t(e).closest(\"*[data-dt-column]\")).length?[n.data(\"dt-column\")]:[]},a,o)},1);return r.selector.cols=e,r.selector.opts=n,r}),Jt(\"columns().header()\",\"column().header()\",function(){return this.iterator(\"column\",function(t,e){return t.aoColumns[e].nTh},1)}),Jt(\"columns().footer()\",\"column().footer()\",function(){return this.iterator(\"column\",function(t,e){return t.aoColumns[e].nTf},1)}),Jt(\"columns().data()\",\"column().data()\",function(){return this.iterator(\"column-rows\",Ie,1)}),Jt(\"columns().dataSrc()\",\"column().dataSrc()\",function(){return this.iterator(\"column\",function(t,e){return t.aoColumns[e].mData},1)}),Jt(\"columns().cache()\",\"column().cache()\",function(t){return this.iterator(\"column-rows\",function(e,n,a,r,o){return oe(e.aoData,o,\"search\"===t?\"_aFilterData\":\"_aSortData\",n)},1)}),Jt(\"columns().nodes()\",\"column().nodes()\",function(){return this.iterator(\"column-rows\",function(t,e,n,a,r){return oe(t.aoData,r,\"anCells\",e)},1)}),Jt(\"columns().visible()\",\"column().visible()\",function(e,n){var r=this.iterator(\"column\",function(n,r){if(e===a)return n.aoColumns[r].bVisible;var o,i,l,s=n.aoColumns,u=s[r],c=n.aoData;if(e!==a&&u.bVisible!==e){if(e){var f=t.inArray(!0,re(s,\"bVisible\"),r+1);for(o=0,i=c.length;o<i;o++)l=c[o].nTr,s=c[o].anCells,l&&l.insertBefore(s[r],s[f]||null)}else t(re(n.aoData,\"anCells\",r)).detach();u.bVisible=e,N(n,n.aoHeader),N(n,n.aoFooter),It(n)}});return e!==a&&(this.iterator(\"column\",function(t,a){Nt(t,null,\"column-visibility\",[t,a,e,n])}),(n===a||n)&&this.columns.adjust()),r}),Jt(\"columns().indexes()\",\"column().index()\",function(t){return this.iterator(\"column\",function(e,n){return\"visible\"===t?g(e,n):n},1)}),Xt(\"columns.adjust()\",function(){return this.iterator(\"table\",function(t){h(t)},1)}),Xt(\"column.index()\",function(t,e){if(0!==this.context.length){var n=this.context[0];if(\"fromVisible\"===t||\"toData\"===t)return p(n,e);if(\"fromData\"===t||\"toVisible\"===t)return g(n,e)}}),Xt(\"column()\",function(t,e){return _e(this.columns(t,e))}),Xt(\"cells()\",function(e,n,r){if(t.isPlainObject(e)&&(e.row===a?(r=e,e=null):(r=n,n=null)),t.isPlainObject(n)&&(r=n,n=null),null===n||n===a)return this.iterator(\"table\",function(n){var o,i,l,s,u,c,f,d=e,h=ye(r),p=n.aoData,g=Ce(n,h),b=le(oe(p,g,\"anCells\")),S=t([].concat.apply([],b)),m=n.aoColumns.length;return De(\"cell\",d,function(e){var r=\"function\"==typeof e;if(null===e||e===a||r){for(i=[],l=0,s=g.length;l<s;l++)for(o=g[l],u=0;u<m;u++)c={row:o,column:u},r?(f=p[o],e(c,_(n,o,u),f.anCells?f.anCells[u]:null)&&i.push(c)):i.push(c);return i}return t.isPlainObject(e)?[e]:(r=S.filter(e).map(function(t,e){return{row:e._DT_CellIndex.row,column:e._DT_CellIndex.column}}).toArray()).length||!e.nodeName?r:(f=t(e).closest(\"*[data-dt-row]\")).length?[{row:f.data(\"dt-row\"),column:f.data(\"dt-column\")}]:[]},n,h)});var o,i,l,s,u,c=this.columns(n,r),f=this.rows(e,r),d=this.iterator(\"table\",function(t,e){for(o=[],i=0,l=f[e].length;i<l;i++)for(s=0,u=c[e].length;s<u;s++)o.push({row:f[e][i],column:c[e][s]});return o},1);return t.extend(d.selector,{cols:n,rows:e,opts:r}),d}),Jt(\"cells().nodes()\",\"cell().node()\",function(){return this.iterator(\"cell\",function(t,e,n){return(t=t.aoData[e])&&t.anCells?t.anCells[n]:a},1)}),Xt(\"cells().data()\",function(){return this.iterator(\"cell\",function(t,e,n){return _(t,e,n)},1)}),Jt(\"cells().cache()\",\"cell().cache()\",function(t){return t=\"search\"===t?\"_aFilterData\":\"_aSortData\",this.iterator(\"cell\",function(e,n,a){return e.aoData[n][t][a]},1)}),Jt(\"cells().render()\",\"cell().render()\",function(t){return this.iterator(\"cell\",function(e,n,a){return _(e,n,a,t)},1)}),Jt(\"cells().indexes()\",\"cell().index()\",function(){return this.iterator(\"cell\",function(t,e,n){return{row:e,column:n,columnVisible:g(t,n)}},1)}),Jt(\"cells().invalidate()\",\"cell().invalidate()\",function(t){return this.iterator(\"cell\",function(e,n,a){L(e,n,t,a)})}),Xt(\"cell()\",function(t,e,n){return _e(this.cells(t,e,n))}),Xt(\"cell().data()\",function(t){var e=this.context,n=this[0];return t===a?e.length&&n.length?_(e[0],n[0].row,n[0].column):a:(C(e[0],n[0].row,n[0].column,t),L(e[0],n[0].row,\"data\",n[0].column),this)}),Xt(\"order()\",function(e,n){var r=this.context;return e===a?0!==r.length?r[0].aaSorting:a:(\"number\"==typeof e?e=[[e,n]]:e.length&&!t.isArray(e[0])&&(e=Array.prototype.slice.call(arguments)),this.iterator(\"table\",function(t){t.aaSorting=e.slice()}))}),Xt(\"order.listener()\",function(t,e,n){return this.iterator(\"table\",function(a){Tt(a,t,e,n)})}),Xt(\"order.fixed()\",function(e){if(!e){var n=(n=this.context).length?n[0].aaSortingFixed:a;return t.isArray(n)?{pre:n}:n}return this.iterator(\"table\",function(n){n.aaSortingFixed=t.extend(!0,{},e)})}),Xt([\"columns().order()\",\"column().order()\"],function(e){var n=this;return this.iterator(\"table\",function(a,r){var o=[];t.each(n[r],function(t,n){o.push([n,e])}),a.aaSorting=o})}),Xt(\"search()\",function(e,n,r,o){var i=this.context;return e===a?0!==i.length?i[0].oPreviousSearch.sSearch:a:this.iterator(\"table\",function(a){a.oFeatures.bFilter&&G(a,t.extend({},a.oPreviousSearch,{sSearch:e+\"\",bRegex:null!==n&&n,bSmart:null===r||r,bCaseInsensitive:null===o||o}),1)})}),Jt(\"columns().search()\",\"column().search()\",function(e,n,r,o){return this.iterator(\"column\",function(i,l){var s=i.aoPreSearchCols;if(e===a)return s[l].sSearch;i.oFeatures.bFilter&&(t.extend(s[l],{sSearch:e+\"\",bRegex:null!==n&&n,bSmart:null===r||r,bCaseInsensitive:null===o||o}),G(i,i.oPreviousSearch,1))})}),Xt(\"state()\",function(){return this.context.length?this.context[0].oSavedState:null}),Xt(\"state.clear()\",function(){return this.iterator(\"table\",function(t){t.fnStateSaveCallback.call(t.oInstance,t,{})})}),Xt(\"state.loaded()\",function(){return this.context.length?this.context[0].oLoadedState:null}),Xt(\"state.save()\",function(){return this.iterator(\"table\",function(t){It(t)})}),qt.versionCheck=qt.fnVersionCheck=function(t){for(var e,n,a=qt.version.split(\".\"),r=0,o=(t=t.split(\".\")).length;r<o;r++)if(e=parseInt(a[r],10)||0,n=parseInt(t[r],10)||0,e!==n)return e>n;return!0},qt.isDataTable=qt.fnIsDataTable=function(e){var n=t(e).get(0),a=!1;return e instanceof qt.Api||(t.each(qt.settings,function(e,r){var o=r.nScrollHead?t(\"table\",r.nScrollHead)[0]:null,i=r.nScrollFoot?t(\"table\",r.nScrollFoot)[0]:null;r.nTable!==n&&o!==n&&i!==n||(a=!0)}),a)},qt.tables=qt.fnTables=function(e){var n=!1;t.isPlainObject(e)&&(n=e.api,e=e.visible);var a=t.map(qt.settings,function(n){if(!e||e&&t(n.nTable).is(\":visible\"))return n.nTable});return n?new Vt(a):a},qt.camelToHungarian=o,Xt(\"$()\",function(e,n){var a=this.rows(n).nodes();a=t(a);return t([].concat(a.filter(e).toArray(),a.find(e).toArray()))}),t.each([\"on\",\"one\",\"off\"],function(e,n){Xt(n+\"()\",function(){var e=Array.prototype.slice.call(arguments);e[0]=t.map(e[0].split(/\\s/),function(t){return t.match(/\\.dt\\b/)?t:t+\".dt\"}).join(\" \");var a=t(this.tables().nodes());return a[n].apply(a,e),this})}),Xt(\"clear()\",function(){return this.iterator(\"table\",function(t){A(t)})}),Xt(\"settings()\",function(){return new Vt(this.context,this.context)}),Xt(\"init()\",function(){var t=this.context;return t.length?t[0].oInit:null}),Xt(\"data()\",function(){return this.iterator(\"table\",function(t){return re(t.aoData,\"_aData\")}).flatten()}),Xt(\"destroy()\",function(n){return n=n||!1,this.iterator(\"table\",function(a){var r,o=a.nTableWrapper.parentNode,i=a.oClasses,l=a.nTable,s=a.nTBody,u=a.nTHead,c=a.nTFoot,f=t(l),d=(s=t(s),t(a.nTableWrapper)),h=t.map(a.aoData,function(t){return t.nTr});a.bDestroying=!0,Nt(a,\"aoDestroyCallback\",\"destroy\",[a]),n||new Vt(a).columns().visible(!0),d.off(\".DT\").find(\":not(tbody *)\").off(\".DT\"),t(e).off(\".DT-\"+a.sInstance),l!=u.parentNode&&(f.children(\"thead\").detach(),f.append(u)),c&&l!=c.parentNode&&(f.children(\"tfoot\").detach(),f.append(c)),a.aaSorting=[],a.aaSortingFixed=[],wt(a),t(h).removeClass(a.asStripeClasses.join(\" \")),t(\"th, td\",u).removeClass(i.sSortable+\" \"+i.sSortableAsc+\" \"+i.sSortableDesc+\" \"+i.sSortableNone),s.children().detach(),s.append(h),f[u=n?\"remove\":\"detach\"](),d[u](),!n&&o&&(o.insertBefore(l,a.nTableReinsertBefore),f.css(\"width\",a.sDestroyWidth).removeClass(i.sTable),(r=a.asDestroyStripes.length)&&s.children().each(function(e){t(this).addClass(a.asDestroyStripes[e%r])})),-1!==(o=t.inArray(a,qt.settings))&&qt.settings.splice(o,1)})}),t.each([\"column\",\"row\",\"cell\"],function(t,e){Xt(e+\"s().every()\",function(t){var n=this.selector.opts,r=this;return this.iterator(e,function(o,i,l,s,u){t.call(r[e](i,\"cell\"===e?l:n,\"cell\"===e?n:a),i,l,s,u)})})}),Xt(\"i18n()\",function(e,n,r){var o=this.context[0];return(e=w(e)(o.oLanguage))===a&&(e=n),r!==a&&t.isPlainObject(e)&&(e=e[r]!==a?e[r]:e._),e.replace(\"%d\",r)}),qt.version=\"1.10.16\",qt.settings=[],qt.models={},qt.models.oSearch={bCaseInsensitive:!0,sSearch:\"\",bRegex:!1,bSmart:!0},qt.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:\"\",src:null,idx:-1},qt.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:\"std\",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null},qt.defaults={aaData:null,aaSorting:[[0,\"asc\"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(t){return t.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(t){try{return JSON.parse((-1===t.iStateDuration?sessionStorage:localStorage).getItem(\"DataTables_\"+t.sInstance+\"_\"+location.pathname))}catch(t){}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(t,e){try{(-1===t.iStateDuration?sessionStorage:localStorage).setItem(\"DataTables_\"+t.sInstance+\"_\"+location.pathname,JSON.stringify(e))}catch(t){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:\": activate to sort column ascending\",sSortDescending:\": activate to sort column descending\"},oPaginate:{sFirst:\"First\",sLast:\"Last\",sNext:\"Next\",sPrevious:\"Previous\"},sEmptyTable:\"No data available in table\",sInfo:\"Showing _START_ to _END_ of _TOTAL_ entries\",sInfoEmpty:\"Showing 0 to 0 of 0 entries\",sInfoFiltered:\"(filtered from _MAX_ total entries)\",sInfoPostFix:\"\",sDecimal:\"\",sThousands:\",\",sLengthMenu:\"Show _MENU_ entries\",sLoadingRecords:\"Loading...\",sProcessing:\"Processing...\",sSearch:\"Search:\",sSearchPlaceholder:\"\",sUrl:\"\",sZeroRecords:\"No matching records found\"},oSearch:t.extend({},qt.models.oSearch),sAjaxDataProp:\"data\",sAjaxSource:null,sDom:\"lfrtip\",searchDelay:null,sPaginationType:\"simple_numbers\",sScrollX:\"\",sScrollXInner:\"\",sScrollY:\"\",sServerMethod:\"GET\",renderer:null,rowId:\"DT_RowId\"},r(qt.defaults),qt.defaults.column={aDataSort:null,iDataSort:-1,asSorting:[\"asc\",\"desc\"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:\"td\",sClass:\"\",sContentPadding:\"\",sDefaultContent:null,sName:\"\",sSortDataType:\"std\",sTitle:null,sType:null,sWidth:null},r(qt.defaults.column),qt.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:\"\",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:\"two_button\",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:a,oAjaxData:a,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return\"ssp\"==Mt(this)?1*this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return\"ssp\"==Mt(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var t=this._iDisplayLength,e=this._iDisplayStart,n=e+t,a=this.aiDisplay.length,r=this.oFeatures,o=r.bPaginate;return r.bServerSide?!1===o||-1===t?e+a:Math.min(e+t,this._iRecordsDisplay):!o||n>a||-1===t?a:n},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null},qt.ext=Ut={buttons:{},classes:{},build:\"bs4/dt-1.10.16\",errMode:\"alert\",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:qt.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:qt.version},t.extend(Ut,{afnFiltering:Ut.search,aTypes:Ut.type.detect,ofnSearch:Ut.type.search,oSort:Ut.type.order,afnSortData:Ut.order,aoFeatures:Ut.feature,oApi:Ut.internal,oStdClasses:Ut.classes,oPagination:Ut.pager}),t.extend(qt.ext.classes,{sTable:\"dataTable\",sNoFooter:\"no-footer\",sPageButton:\"paginate_button\",sPageButtonActive:\"current\",sPageButtonDisabled:\"disabled\",sStripeOdd:\"odd\",sStripeEven:\"even\",sRowEmpty:\"dataTables_empty\",sWrapper:\"dataTables_wrapper\",sFilter:\"dataTables_filter\",sInfo:\"dataTables_info\",sPaging:\"dataTables_paginate paging_\",sLength:\"dataTables_length\",sProcessing:\"dataTables_processing\",sSortAsc:\"sorting_asc\",sSortDesc:\"sorting_desc\",sSortable:\"sorting\",sSortableAsc:\"sorting_asc_disabled\",sSortableDesc:\"sorting_desc_disabled\",sSortableNone:\"sorting_disabled\",sSortColumn:\"sorting_\",sFilterInput:\"\",sLengthSelect:\"\",sScrollWrapper:\"dataTables_scroll\",sScrollHead:\"dataTables_scrollHead\",sScrollHeadInner:\"dataTables_scrollHeadInner\",sScrollBody:\"dataTables_scrollBody\",sScrollFoot:\"dataTables_scrollFoot\",sScrollFootInner:\"dataTables_scrollFootInner\",sHeaderTH:\"\",sFooterTH:\"\",sSortJUIAsc:\"\",sSortJUIDesc:\"\",sSortJUI:\"\",sSortJUIAscAllowed:\"\",sSortJUIDescAllowed:\"\",sSortJUIWrapper:\"\",sSortIcon:\"\",sJUIHeader:\"\",sJUIFooter:\"\"});var Ae=qt.ext.pager;t.extend(Ae,{simple:function(){return[\"previous\",\"next\"]},full:function(){return[\"first\",\"previous\",\"next\",\"last\"]},numbers:function(t,e){return[Wt(t,e)]},simple_numbers:function(t,e){return[\"previous\",Wt(t,e),\"next\"]},full_numbers:function(t,e){return[\"first\",\"previous\",Wt(t,e),\"next\",\"last\"]},first_last_numbers:function(t,e){return[\"first\",Wt(t,e),\"last\"]},_numbers:Wt,numbers_length:7}),t.extend(!0,qt.ext.renderer,{pageButton:{_:function(e,r,o,i,l,s){var u,c,f,d=e.oClasses,h=e.oLanguage.oPaginate,p=e.oLanguage.oAria.paginate||{},g=0,b=function(n,a){var r,i,f,S,m=function(t){ut(e,t.data.action,!0)};for(r=0,i=a.length;r<i;r++)if(S=a[r],t.isArray(S))f=t(\"<\"+(S.DT_el||\"div\")+\"/>\").appendTo(n),b(f,S);else{switch(u=null,c=\"\",S){case\"ellipsis\":n.append('<span class=\"ellipsis\">&#x2026;</span>');break;case\"first\":u=h.sFirst,c=S+(l>0?\"\":\" \"+d.sPageButtonDisabled);break;case\"previous\":u=h.sPrevious,c=S+(l>0?\"\":\" \"+d.sPageButtonDisabled);break;case\"next\":u=h.sNext,c=S+(l<s-1?\"\":\" \"+d.sPageButtonDisabled);break;case\"last\":u=h.sLast,c=S+(l<s-1?\"\":\" \"+d.sPageButtonDisabled);break;default:u=S+1,c=l===S?d.sPageButtonActive:\"\"}null!==u&&(jt(f=t(\"<a>\",{class:d.sPageButton+\" \"+c,\"aria-controls\":e.sTableId,\"aria-label\":p[S],\"data-dt-idx\":g,tabindex:e.iTabIndex,id:0===o&&\"string\"==typeof S?e.sTableId+\"_\"+S:null}).html(u).appendTo(n),{action:S},m),g++)}};try{f=t(r).find(n.activeElement).data(\"dt-idx\")}catch(t){}b(t(r).empty(),i),f!==a&&t(r).find(\"[data-dt-idx=\"+f+\"]\").focus()}}}),t.extend(qt.ext.type.detect,[function(t,e){var n=e.oLanguage.sDecimal;return ne(t,n)?\"num\"+n:null},function(t){if(t&&!(t instanceof Date)&&!Yt.test(t))return null;var e=Date.parse(t);return null!==e&&!isNaN(e)||Qt(t)?\"date\":null},function(t,e){var n=e.oLanguage.sDecimal;return ne(t,n,!0)?\"num-fmt\"+n:null},function(t,e){var n=e.oLanguage.sDecimal;return ae(t,n)?\"html-num\"+n:null},function(t,e){var n=e.oLanguage.sDecimal;return ae(t,n,!0)?\"html-num-fmt\"+n:null},function(t){return Qt(t)||\"string\"==typeof t&&-1!==t.indexOf(\"<\")?\"html\":null}]),t.extend(qt.ext.type.search,{html:function(t){return Qt(t)?t:\"string\"==typeof t?t.replace($t,\" \").replace(zt,\"\"):\"\"},string:function(t){return Qt(t)?t:\"string\"==typeof t?t.replace($t,\" \"):t}});var Fe=function(t,e,n,a){return 0===t||t&&\"-\"!==t?(e&&(t=ee(t,e)),t.replace&&(n&&(t=t.replace(n,\"\")),a&&(t=t.replace(a,\"\"))),1*t):-1/0};t.extend(Ut.type.order,{\"date-pre\":function(t){return Date.parse(t)||-1/0},\"html-pre\":function(t){return Qt(t)?\"\":t.replace?t.replace(/<.*?>/g,\"\").toLowerCase():t+\"\"},\"string-pre\":function(t){return Qt(t)?\"\":\"string\"==typeof t?t.toLowerCase():t.toString?t.toString():\"\"},\"string-asc\":function(t,e){return t<e?-1:t>e?1:0},\"string-desc\":function(t,e){return t<e?1:t>e?-1:0}}),Et(\"\"),t.extend(!0,qt.ext.renderer,{header:{_:function(e,n,a,r){t(e.nTable).on(\"order.dt.DT\",function(t,o,i,l){e===o&&(t=a.idx,n.removeClass(a.sSortingClass+\" \"+r.sSortAsc+\" \"+r.sSortDesc).addClass(\"asc\"==l[t]?r.sSortAsc:\"desc\"==l[t]?r.sSortDesc:a.sSortingClass))})},jqueryui:function(e,n,a,r){t(\"<div/>\").addClass(r.sSortJUIWrapper).append(n.contents()).append(t(\"<span/>\").addClass(r.sSortIcon+\" \"+a.sSortingClassJUI)).appendTo(n),t(e.nTable).on(\"order.dt.DT\",function(t,o,i,l){e===o&&(t=a.idx,n.removeClass(r.sSortAsc+\" \"+r.sSortDesc).addClass(\"asc\"==l[t]?r.sSortAsc:\"desc\"==l[t]?r.sSortDesc:a.sSortingClass),n.find(\"span.\"+r.sSortIcon).removeClass(r.sSortJUIAsc+\" \"+r.sSortJUIDesc+\" \"+r.sSortJUI+\" \"+r.sSortJUIAscAllowed+\" \"+r.sSortJUIDescAllowed).addClass(\"asc\"==l[t]?r.sSortJUIAsc:\"desc\"==l[t]?r.sSortJUIDesc:a.sSortingClassJUI))})}}});var Le=function(t){return\"string\"==typeof t?t.replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\"):t};return qt.render={number:function(t,e,n,a,r){return{display:function(o){if(\"number\"!=typeof o&&\"string\"!=typeof o)return o;var i=0>o?\"-\":\"\",l=parseFloat(o);return isNaN(l)?Le(o):(l=l.toFixed(n),o=Math.abs(l),l=parseInt(o,10),o=n?e+(o-l).toFixed(n).substring(2):\"\",i+(a||\"\")+l.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g,t)+o+(r||\"\"))}}},text:function(){return{display:Le}}},t.extend(qt.ext.internal,{_fnExternApiFunc:Bt,_fnBuildAjax:B,_fnAjaxUpdate:U,_fnAjaxParameters:V,_fnAjaxUpdateDraw:X,_fnAjaxDataSrc:J,_fnAddColumn:f,_fnColumnOptions:d,_fnAdjustColumnSizing:h,_fnVisibleToColumnIndex:p,_fnColumnIndexToVisible:g,_fnVisbleColumns:b,_fnGetColumns:S,_fnColumnTypes:m,_fnApplyColumnDefs:v,_fnHungarianMap:r,_fnCamelToHungarian:o,_fnLanguageCompat:i,_fnBrowserDetect:u,_fnAddData:D,_fnAddTr:y,_fnNodeToDataIndex:function(t,e){return e._DT_RowIndex!==a?e._DT_RowIndex:null},_fnNodeToColumnIndex:function(e,n,a){return t.inArray(a,e.aoData[n].anCells)},_fnGetCellData:_,_fnSetCellData:C,_fnSplitObjNotation:T,_fnGetObjectDataFn:w,_fnSetObjectDataFn:x,_fnGetDataMaster:I,_fnClearTable:A,_fnDeleteIndex:F,_fnInvalidate:L,_fnGetRowElements:R,_fnCreateTr:P,_fnBuildHead:H,_fnDrawHead:N,_fnDraw:k,_fnReDraw:O,_fnAddOptionsHtml:M,_fnDetectHeader:W,_fnGetUniqueThs:E,_fnFeatureHtmlFilter:q,_fnFilterComplete:G,_fnFilterCustom:$,_fnFilterColumn:z,_fnFilter:Y,_fnFilterCreateSearch:Z,_fnEscapeRegex:de,_fnFilterData:K,_fnFeatureHtmlInfo:et,_fnUpdateInfo:nt,_fnInfoMacros:at,_fnInitialise:rt,_fnInitComplete:ot,_fnLengthChange:it,_fnFeatureHtmlLength:lt,_fnFeatureHtmlPaginate:st,_fnPageChange:ut,_fnFeatureHtmlProcessing:ct,_fnProcessingDisplay:ft,_fnFeatureHtmlTable:dt,_fnScrollDraw:ht,_fnApplyToChildren:pt,_fnCalculateColumnWidths:gt,_fnThrottle:be,_fnConvertToWidth:bt,_fnGetWidestNode:St,_fnGetMaxLenString:mt,_fnStringToCss:vt,_fnSortFlatten:Dt,_fnSort:yt,_fnSortAria:_t,_fnSortListener:Ct,_fnSortAttachListener:Tt,_fnSortingClasses:wt,_fnSortData:xt,_fnSaveState:It,_fnLoadState:At,_fnSettingsFromNode:Ft,_fnLog:Lt,_fnMap:Rt,_fnBindAction:jt,_fnCallbackReg:Ht,_fnCallbackFire:Nt,_fnLengthOverflow:kt,_fnRenderer:Ot,_fnDataSource:Mt,_fnRowAttributes:j,_fnCalculateEnd:function(){}}),t.fn.dataTable=qt,qt.$=t,t.fn.dataTableSettings=qt.settings,t.fn.dataTableExt=qt.ext,t.fn.DataTable=function(e){return t(this).dataTable(e).api()},t.each(qt,function(e,n){t.fn.DataTable[e]=n}),t.fn.dataTable});\n\n/*!\n DataTables Bootstrap 3 integration\n ©2011-2015 SpryMedia Ltd - datatables.net/license\n*/\n!function(e){\"function\"==typeof define&&define.amd?define([\"jquery\",\"datatables.net\"],function(a){return e(a,window,document)}):\"object\"==typeof exports?module.exports=function(a,t){return a||(a=window),t&&t.fn.dataTable||(t=require(\"datatables.net\")(a,t).$),e(t,a,a.document)}:e(jQuery,window,document)}(function(e,a,t,n){var o=e.fn.dataTable;return e.extend(!0,o.defaults,{dom:\"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>\",renderer:\"bootstrap\"}),e.extend(o.ext.classes,{sWrapper:\"dataTables_wrapper container-fluid dt-bootstrap4\",sFilterInput:\"form-control form-control-sm\",sLengthSelect:\"form-control form-control-sm\",sProcessing:\"dataTables_processing card\",sPageButton:\"paginate_button page-item\"}),o.ext.renderer.pageButton.bootstrap=function(a,s,r,d,i,l){var c,u,p,f=new o.Api(a),b=a.oClasses,m=a.oLanguage.oPaginate,g=a.oLanguage.oAria.paginate||{},x=0,w=function(t,n){var o,s,d,p,h=function(a){a.preventDefault(),!e(a.currentTarget).hasClass(\"disabled\")&&f.page()!=a.data.action&&f.page(a.data.action).draw(\"page\")};for(o=0,s=n.length;o<s;o++)if(p=n[o],e.isArray(p))w(t,p);else{switch(u=c=\"\",p){case\"ellipsis\":c=\"&#x2026;\",u=\"disabled\";break;case\"first\":c=m.sFirst,u=p+(0<i?\"\":\" disabled\");break;case\"previous\":c=m.sPrevious,u=p+(0<i?\"\":\" disabled\");break;case\"next\":c=m.sNext,u=p+(i<l-1?\"\":\" disabled\");break;case\"last\":c=m.sLast,u=p+(i<l-1?\"\":\" disabled\");break;default:c=p+1,u=i===p?\"active\":\"\"}c&&(d=e(\"<li>\",{class:b.sPageButton+\" \"+u,id:0===r&&\"string\"==typeof p?a.sTableId+\"_\"+p:null}).append(e(\"<a>\",{href:\"#\",\"aria-controls\":a.sTableId,\"aria-label\":g[p],\"data-dt-idx\":x,tabindex:a.iTabIndex,class:\"page-link\"}).html(c)).appendTo(t),a.oApi._fnBindAction(d,{action:p},h),x++)}};try{p=e(s).find(t.activeElement).data(\"dt-idx\")}catch(e){}w(e(s).empty().html('<ul class=\"pagination\"/>').children(\"ul\"),d),p!==n&&e(s).find(\"[data-dt-idx=\"+p+\"]\").focus()},o});\n\n","/*! jQuery UI - v1.12.1 - 2018-02-05\n* http://jqueryui.com\n* Includes: widget.js, data.js, disable-selection.js, keycode.js, scroll-parent.js, widgets/draggable.js, widgets/droppable.js, widgets/resizable.js, widgets/selectable.js, widgets/sortable.js, widgets/mouse.js, widgets/slider.js\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n\"use strict\";(function(t){\"function\"==typeof define&&define.amd?define([\"jquery\"],t):t(jQuery)})(function(t){t.ui=t.ui||{},t.ui.version=\"1.12.1\";var e=0,i=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,\"events\"),s&&s.remove&&t(n).triggerHandler(\"remove\")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},l=e.split(\".\")[0];e=e.split(\".\")[1];var h=l+\"-\"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[\":\"][h.toLowerCase()]=function(e){return!!t.data(e,h)},t[l]=t[l]||{},n=t[l][e],o=t[l][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:l,widgetName:e,widgetFullName:h}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+\".\"+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var s,n,o=i.call(arguments,1),a=0,r=o.length;r>a;a++)for(s in o[a])n=o[a][s],o[a].hasOwnProperty(s)&&void 0!==n&&(e[s]=t.isPlainObject(n)?t.isPlainObject(e[s])?t.widget.extend({},e[s],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,s){var n=s.prototype.widgetFullName||e;t.fn[e]=function(o){var a=\"string\"==typeof o,r=i.call(arguments,1),l=this;return a?this.length||\"instance\"!==o?this.each(function(){var i,s=t.data(this,n);return\"instance\"===o?(l=s,!1):s?t.isFunction(s[o])&&\"_\"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(l=i&&i.jquery?l.pushStack(i.get()):i,!1):void 0):t.error(\"no such method '\"+o+\"' for \"+e+\" widget instance\"):t.error(\"cannot call methods on \"+e+\" prior to initialization; \"+\"attempted to call method '\"+o+\"'\")}):l=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new s(o,this))})),l}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:\"widget\",widgetEventPrefix:\"\",defaultElement:\"<div>\",options:{classes:{},disabled:!1,create:null},_createWidget:function(i,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=e++,this.eventNamespace=\".\"+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),i),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger(\"create\",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr(\"aria-disabled\"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if(\"string\"==typeof e)if(a={},s=e.split(\".\"),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return\"classes\"===t&&this._setOptionClasses(e),this.options[t]=e,\"disabled\"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+\"-disabled\",null,!!t),t&&(this._removeClass(this.hoverable,null,\"ui-state-hover\"),this._removeClass(this.focusable,null,\"ui-state-focus\"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:\"_untrackClassesElement\"}),e.keys&&i(e.keys.match(/\\S+/g)||[],!0),e.extra&&i(e.extra.match(/\\S+/g)||[]),s.join(\" \")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s=\"boolean\"==typeof s?s:i;var n=\"string\"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;\"boolean\"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass(\"ui-state-disabled\")?(\"string\"==typeof a?o[a]:a).apply(o,arguments):void 0}\"string\"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var l=s.match(/^([\\w:-]*)\\s*(.*)$/),h=l[1]+o.eventNamespace,c=l[2];c?n.on(h,c,r):i.on(h,r)})},_off:function(e,i){i=(i||\"\").split(\" \").join(this.eventNamespace+\" \")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return(\"string\"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,\"ui-state-hover\")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,\"ui-state-hover\")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,\"ui-state-focus\")},focusout:function(e){this._removeClass(t(e.currentTarget),null,\"ui-state-focus\")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:\"fadeIn\",hide:\"fadeOut\"},function(e,i){t.Widget.prototype[\"_\"+e]=function(s,n,o){\"string\"==typeof n&&(n={effect:n});var a,r=n?n===!0||\"number\"==typeof n?i:n.effect||i:e;n=n||{},\"number\"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,t.extend(t.expr[\":\"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t=\"onselectstart\"in document.createElement(\"div\")?\"selectstart\":\"mousedown\";return function(){return this.on(t+\".ui-disableSelection\",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(\".ui-disableSelection\")}}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.fn.scrollParent=function(e){var i=this.css(\"position\"),s=\"absolute\"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&\"static\"===e.css(\"position\")?!1:n.test(e.css(\"overflow\")+e.css(\"overflow-y\")+e.css(\"overflow-x\"))}).eq(0);return\"fixed\"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.ui.ie=!!/msie [\\w.]+/.exec(navigator.userAgent.toLowerCase());var s=!1;t(document).on(\"mouseup\",function(){s=!1}),t.widget(\"ui.mouse\",{version:\"1.12.1\",options:{cancel:\"input, textarea, button, select, option\",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on(\"mousedown.\"+this.widgetName,function(t){return e._mouseDown(t)}).on(\"click.\"+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+\".preventClickEvent\")?(t.removeData(i.target,e.widgetName+\".preventClickEvent\"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off(\".\"+this.widgetName),this._mouseMoveDelegate&&this.document.off(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).off(\"mouseup.\"+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!s){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,n=1===e.which,o=\"string\"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return n&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+\".preventClickEvent\")&&t.removeData(e.target,this.widgetName+\".preventClickEvent\"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).on(\"mouseup.\"+this.widgetName,this._mouseUpDelegate),e.preventDefault(),s=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).off(\"mouseup.\"+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+\".preventClickEvent\",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,s=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.ui.safeBlur=function(e){e&&\"body\"!==e.nodeName.toLowerCase()&&t(e).trigger(\"blur\")},t.widget(\"ui.draggable\",t.ui.mouse,{version:\"1.12.1\",widgetEventPrefix:\"drag\",options:{addClasses:!0,appendTo:\"parent\",axis:!1,connectToSortable:!1,containment:!1,cursor:\"auto\",cursorAt:!1,grid:!1,handle:!1,helper:\"original\",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:\"default\",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:\"both\",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){\"original\"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass(\"ui-draggable\"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),\"handle\"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(\".ui-draggable-dragging\")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(\".ui-resizable-handle\").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?\"iframe\":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t(\"<div>\").css(\"position\",\"absolute\").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,\"ui-draggable-dragging\"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css(\"position\"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return\"fixed\"===t(this).css(\"position\")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger(\"start\",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo(\"absolute\"),!i){var s=this._uiHash();if(this._trigger(\"drag\",e,s)===!1)return this._mouseUp(new t.Event(\"mouseup\",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+\"px\",this.helper[0].style.top=this.position.top+\"px\",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),\"invalid\"===this.options.revert&&!s||\"valid\"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger(\"stop\",e)!==!1&&i._clear()}):this._trigger(\"stop\",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger(\"focus\"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(\".ui-draggable-dragging\")?this._mouseUp(new t.Event(\"mouseup\",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,\"ui-draggable-handle\")},_removeHandleClassName:function(){this._removeClass(this.handleElement,\"ui-draggable-handle\")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):\"clone\"===i.helper?this.element.clone().removeAttr(\"id\"):this.element;return n.parents(\"body\").length||n.appendTo(\"parent\"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css(\"position\"))||n.css(\"position\",\"absolute\"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css(\"position\"))||(this.element[0].style.position=\"relative\")},_adjustOffsetFromHelper:function(e){\"string\"==typeof e&&(e=e.split(\" \")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),\"left\"in e&&(this.offset.click.left=e.left+this.margins.left),\"right\"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),\"top\"in e&&(this.offset.click.top=e.top+this.margins.top),\"bottom\"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return\"absolute\"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css(\"borderTopWidth\"),10)||0),left:e.left+(parseInt(this.offsetParent.css(\"borderLeftWidth\"),10)||0)}},_getRelativeOffset:function(){if(\"relative\"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css(\"top\"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css(\"left\"),10)||0)+(e?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css(\"marginLeft\"),10)||0,top:parseInt(this.element.css(\"marginTop\"),10)||0,right:parseInt(this.element.css(\"marginRight\"),10)||0,bottom:parseInt(this.element.css(\"marginBottom\"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?\"window\"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):\"document\"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):(\"parent\"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css(\"overflow\")),this.containment=[(parseInt(i.css(\"borderLeftWidth\"),10)||0)+(parseInt(i.css(\"paddingLeft\"),10)||0),(parseInt(i.css(\"borderTopWidth\"),10)||0)+(parseInt(i.css(\"paddingTop\"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css(\"borderRightWidth\"),10)||0)-(parseInt(i.css(\"paddingRight\"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css(\"borderBottomWidth\"),10)||0)-(parseInt(i.css(\"paddingBottom\"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(t,e){e||(e=this.position);var i=\"absolute\"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-(\"fixed\"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-(\"fixed\"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),l=t.pageX,h=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(l=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(h=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(l=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(h=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,h=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((l-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,l=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),\"y\"===a.axis&&(l=this.originalPageX),\"x\"===a.axis&&(h=this.originalPageY)),{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(\"fixed\"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:l-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(\"fixed\"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,\"ui-draggable-dragging\"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo(\"absolute\"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add(\"draggable\",\"connectToSortable\",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable(\"instance\");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger(\"activate\",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css(\"position\"),top:t.placeholder.css(\"top\"),left:t.placeholder.css(\"left\")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger(\"deactivate\",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data(\"ui-sortable-item\",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger(\"toSortable\",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger(\"out\",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger(\"fromSortable\",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add(\"draggable\",\"cursor\",{start:function(e,i,s){var n=t(\"body\"),o=s.options;n.css(\"cursor\")&&(o._cursor=n.css(\"cursor\")),n.css(\"cursor\",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t(\"body\").css(\"cursor\",n._cursor)}}),t.ui.plugin.add(\"draggable\",\"opacity\",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css(\"opacity\")&&(o._opacity=n.css(\"opacity\")),n.css(\"opacity\",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css(\"opacity\",n._opacity)}}),t.ui.plugin.add(\"draggable\",\"scroll\",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&\"HTML\"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&\"HTML\"!==a.tagName?(n.axis&&\"x\"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY<n.scrollSensitivity?a.scrollTop=o=a.scrollTop+n.scrollSpeed:e.pageY-s.overflowOffset.top<n.scrollSensitivity&&(a.scrollTop=o=a.scrollTop-n.scrollSpeed)),n.axis&&\"y\"===n.axis||(s.overflowOffset.left+a.offsetWidth-e.pageX<n.scrollSensitivity?a.scrollLeft=o=a.scrollLeft+n.scrollSpeed:e.pageX-s.overflowOffset.left<n.scrollSensitivity&&(a.scrollLeft=o=a.scrollLeft-n.scrollSpeed))):(n.axis&&\"x\"===n.axis||(e.pageY-t(r).scrollTop()<n.scrollSensitivity?o=t(r).scrollTop(t(r).scrollTop()-n.scrollSpeed):t(window).height()-(e.pageY-t(r).scrollTop())<n.scrollSensitivity&&(o=t(r).scrollTop(t(r).scrollTop()+n.scrollSpeed))),n.axis&&\"y\"===n.axis||(e.pageX-t(r).scrollLeft()<n.scrollSensitivity?o=t(r).scrollLeft(t(r).scrollLeft()-n.scrollSpeed):t(window).width()-(e.pageX-t(r).scrollLeft())<n.scrollSensitivity&&(o=t(r).scrollLeft(t(r).scrollLeft()+n.scrollSpeed)))),o!==!1&&t.ui.ddmanager&&!n.dropBehaviour&&t.ui.ddmanager.prepareOffsets(s,e)}}),t.ui.plugin.add(\"draggable\",\"snap\",{start:function(e,i,s){var n=s.options;s.snapElements=[],t(n.snap.constructor!==String?n.snap.items||\":data(ui-draggable)\":n.snap).each(function(){var e=t(this),i=e.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:e.outerWidth(),height:e.outerHeight(),top:i.top,left:i.left})})},drag:function(e,i,s){var n,o,a,r,l,h,c,u,d,p,f=s.options,g=f.snapTolerance,m=i.offset.left,_=m+s.helperProportions.width,v=i.offset.top,b=v+s.helperProportions.height;for(d=s.snapElements.length-1;d>=0;d--)l=s.snapElements[d].left-s.margins.left,h=l+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,l-g>_||m>h+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):(\"inner\"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(l-_),r=g>=Math.abs(h-m),n&&(i.position.top=s._convertPositionTo(\"relative\",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo(\"relative\",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo(\"relative\",{top:0,left:l-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo(\"relative\",{top:0,left:h}).left)),p=n||o||a||r,\"outer\"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(l-m),r=g>=Math.abs(h-_),n&&(i.position.top=s._convertPositionTo(\"relative\",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo(\"relative\",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo(\"relative\",{top:0,left:l}).left),r&&(i.position.left=s._convertPositionTo(\"relative\",{top:0,left:h-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add(\"draggable\",\"stack\",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css(\"zIndex\"),10)||0)-(parseInt(t(i).css(\"zIndex\"),10)||0)});a.length&&(n=parseInt(t(a[0]).css(\"zIndex\"),10)||0,t(a).each(function(e){t(this).css(\"zIndex\",n+e)}),this.css(\"zIndex\",n+a.length))}}),t.ui.plugin.add(\"draggable\",\"zIndex\",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css(\"zIndex\")&&(o._zIndex=n.css(\"zIndex\")),n.css(\"zIndex\",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css(\"zIndex\",n._zIndex)}}),t.ui.draggable,t.widget(\"ui.droppable\",{version:\"1.12.1\",widgetEventPrefix:\"drop\",options:{accept:\"*\",addClasses:!0,greedy:!1,scope:\"default\",tolerance:\"intersect\",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass(\"ui-droppable\")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if(\"accept\"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if(\"scope\"===e){var s=t.ui.ddmanager.droppables[this.options.scope];\nthis._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger(\"activate\",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger(\"deactivate\",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger(\"over\",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger(\"out\",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,o=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(\":data(ui-droppable)\").not(\".ui-draggable-dragging\").each(function(){var i=t(this).droppable(\"instance\");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&n(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(o=!0,!1):void 0}),o?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger(\"drop\",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass(\"ui-droppable-hover\")},_removeHoverClass:function(){this._removeClass(\"ui-droppable-hover\")},_addActiveClass:function(){this._addClass(\"ui-droppable-active\")},_removeActiveClass:function(){this._removeClass(\"ui-droppable-active\")}});var n=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,l=a+e.helperProportions.height,h=i.offset.left,c=i.offset.top,u=h+i.proportions().width,d=c+i.proportions().height;switch(s){case\"fit\":return o>=h&&u>=r&&a>=c&&d>=l;case\"intersect\":return o+e.helperProportions.width/2>h&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>l-e.helperProportions.height/2;case\"pointer\":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,h,i.proportions().width);case\"touch\":return(a>=c&&d>=a||l>=c&&d>=l||c>a&&l>d)&&(o>=h&&u>=o||r>=h&&u>=r||h>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{\"default\":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(\":data(ui-droppable)\").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible=\"none\"!==o[s].element.css(\"display\"),o[s].visible&&(\"mousedown\"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&n(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil(\"body\").on(\"scroll.droppable\",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,o,a,r=n(e,this,this.options.tolerance,i),l=!r&&this.isover?\"isout\":r&&!this.isover?\"isover\":null;l&&(this.options.greedy&&(o=this.options.scope,a=this.element.parents(\":data(ui-droppable)\").filter(function(){return t(this).droppable(\"instance\").options.scope===o}),a.length&&(s=t(a[0]).droppable(\"instance\"),s.greedyChild=\"isover\"===l)),s&&\"isover\"===l&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[l]=!0,this[\"isout\"===l?\"isover\":\"isout\"]=!1,this[\"isover\"===l?\"_over\":\"_out\"].call(this,i),s&&\"isout\"===l&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil(\"body\").off(\"scroll.droppable\"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget(\"ui.droppable\",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget(\"ui.resizable\",t.ui.mouse,{version:\"1.12.1\",widgetEventPrefix:\"resize\",options:{alsoResize:!1,animate:!1,animateDuration:\"slow\",animateEasing:\"swing\",aspectRatio:!1,autoHide:!1,classes:{\"ui-resizable-se\":\"ui-icon ui-icon-gripsmall-diagonal-se\"},containment:!1,ghost:!1,grid:!1,handles:\"e,s,se\",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if(\"hidden\"===t(e).css(\"overflow\"))return!1;var s=i&&\"left\"===i?\"scrollLeft\":\"scrollTop\",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass(\"ui-resizable\"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||\"ui-resizable-helper\":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t(\"<div class='ui-wrapper' style='overflow: hidden;'></div>\").css({position:this.element.css(\"position\"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css(\"top\"),left:this.element.css(\"left\")})),this.element=this.element.parent().data(\"ui-resizable\",this.element.resizable(\"instance\")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css(\"marginTop\"),marginRight:this.originalElement.css(\"marginRight\"),marginBottom:this.originalElement.css(\"marginBottom\"),marginLeft:this.originalElement.css(\"marginLeft\")},this.element.css(e),this.originalElement.css(\"margin\",0),this.originalResizeStyle=this.originalElement.css(\"resize\"),this.originalElement.css(\"resize\",\"none\"),this._proportionallyResizeElements.push(this.originalElement.css({position:\"static\",zoom:1,display:\"block\"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on(\"mouseenter\",function(){i.disabled||(s._removeClass(\"ui-resizable-autohide\"),s._handles.show())}).on(\"mouseleave\",function(){i.disabled||s.resizing||(s._addClass(\"ui-resizable-autohide\"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData(\"resizable\").removeData(\"ui-resizable\").off(\".resizable\").find(\".ui-resizable-handle\").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css(\"position\"),width:e.outerWidth(),height:e.outerHeight(),top:e.css(\"top\"),left:e.css(\"left\")}).insertAfter(e),e.remove()),this.originalElement.css(\"resize\",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case\"handles\":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(\".ui-resizable-handle\",this.element).length?{n:\".ui-resizable-n\",e:\".ui-resizable-e\",s:\".ui-resizable-s\",w:\".ui-resizable-w\",se:\".ui-resizable-se\",sw:\".ui-resizable-sw\",ne:\".ui-resizable-ne\",nw:\".ui-resizable-nw\"}:\"e,s,se\"),this._handles=t(),this.handles.constructor===String)for(\"all\"===this.handles&&(this.handles=\"n,e,s,w,se,sw,ne,nw\"),s=this.handles.split(\",\"),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n=\"ui-resizable-\"+e,o=t(\"<div>\"),this._addClass(o,\"ui-resizable-handle \"+n),o.css({zIndex:a.zIndex}),this.handles[e]=\".ui-resizable-\"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=[\"padding\",/ne|nw|n/.test(i)?\"Top\":/se|sw|s/.test(i)?\"Bottom\":/^e$/.test(i)?\"Right\":\"Left\"].join(\"\"),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(\".ui-resizable-handle\")),this._handles.disableSelection(),this._handles.on(\"mouseover\",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:\"se\")}),a.autoHide&&(this._handles.hide(),this._addClass(\"ui-resizable-autohide\"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css(\"left\")),s=this._num(this.helper.css(\"top\")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio=\"number\"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(\".ui-resizable-\"+this.axis).css(\"cursor\"),t(\"body\").css(\"cursor\",\"auto\"===n?this.axis+\"-resize\":n),this._addClass(\"ui-resizable-resizing\"),this._propagate(\"start\",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,l=this._change[o];return this._updatePrevProperties(),l?(i=l.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate(\"resize\",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger(\"resize\",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,l,h=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],\"left\")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css(\"left\"))+(c.position.left-c.originalPosition.left)||null,l=parseFloat(c.element.css(\"top\"))+(c.position.top-c.originalPosition.top)||null,h.animate||this.element.css(t.extend(a,{top:l,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!h.animate&&this._proportionallyResize()),t(\"body\").css(\"cursor\",\"auto\"),this._removeClass(\"ui-resizable-resizing\"),this._propagate(\"stop\",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+\"px\"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+\"px\"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+\"px\"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+\"px\"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),\"sw\"===s&&(t.left=e.left+(i.width-t.width),t.top=null),\"nw\"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,l=this.originalPosition.top+this.originalSize.height,h=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&h&&(t.left=r-e.minWidth),s&&h&&(t.left=r-e.maxWidth),a&&c&&(t.top=l-e.minHeight),n&&c&&(t.top=l-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css(\"borderTopWidth\"),t.css(\"borderRightWidth\"),t.css(\"borderBottomWidth\"),t.css(\"borderLeftWidth\")],n=[t.css(\"paddingTop\"),t.css(\"paddingRight\"),t.css(\"paddingBottom\"),t.css(\"paddingLeft\")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t(\"<div style='overflow:hidden;'></div>\"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:\"absolute\",left:this.elementOffset.left+\"px\",top:this.elementOffset.top+\"px\",zIndex:++i.zIndex}),this.helper.appendTo(\"body\").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),\"resize\"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add(\"resizable\",\"animate\",{stop:function(e){var i=t(this).resizable(\"instance\"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],\"left\")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,l={width:i.size.width-r,height:i.size.height-a},h=parseFloat(i.element.css(\"left\"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css(\"top\"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(l,c&&h?{top:c,left:h}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css(\"width\")),height:parseFloat(i.element.css(\"height\")),top:parseFloat(i.element.css(\"top\")),left:parseFloat(i.element.css(\"left\"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate(\"resize\",e)}})}}),t.ui.plugin.add(\"resizable\",\"containment\",{start:function(){var e,i,s,n,o,a,r,l=t(this).resizable(\"instance\"),h=l.options,c=l.element,u=h.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(l.containerElement=t(d),/document/.test(u)||u===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t([\"Top\",\"Right\",\"Left\",\"Bottom\"]).each(function(t,s){i[t]=l._num(e.css(\"padding\"+s))}),l.containerOffset=e.offset(),l.containerPosition=e.position(),l.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=l.containerOffset,n=l.containerSize.height,o=l.containerSize.width,a=l._hasScroll(d,\"left\")?d.scrollWidth:o,r=l._hasScroll(d)?d.scrollHeight:n,l.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable(\"instance\"),r=a.options,l=a.containerOffset,h=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css(\"position\"))&&(u=l),h.left<(a._helper?l.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-l.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?l.left:0),h.top<(a._helper?l.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-l.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?l.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css(\"position\")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-l.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-l.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable(\"instance\"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),l=a.outerWidth()-e.sizeDiff.width,h=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css(\"position\"))&&t(this).css({left:r.left-n.left-s.left,width:l,height:h}),e._helper&&!i.animate&&/static/.test(o.css(\"position\"))&&t(this).css({left:r.left-n.left-s.left,width:l,height:h})}}),t.ui.plugin.add(\"resizable\",\"alsoResize\",{start:function(){var e=t(this).resizable(\"instance\"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data(\"ui-resizable-alsoresize\",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css(\"left\")),top:parseFloat(e.css(\"top\"))})})},resize:function(e,i){var s=t(this).resizable(\"instance\"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data(\"ui-resizable-alsoresize\"),n={},o=e.parents(i.originalElement[0]).length?[\"width\",\"height\"]:[\"width\",\"height\",\"top\",\"left\"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData(\"ui-resizable-alsoresize\")}}),t.ui.plugin.add(\"resizable\",\"ghost\",{start:function(){var e=t(this).resizable(\"instance\"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:\"block\",position:\"relative\",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,\"ui-resizable-ghost\"),t.uiBackCompat!==!1&&\"string\"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable(\"instance\");e.ghost&&e.ghost.css({position:\"relative\",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable(\"instance\");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add(\"resizable\",\"grid\",{resize:function(){var e,i=t(this).resizable(\"instance\"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,l=\"number\"==typeof s.grid?[s.grid,s.grid]:s.grid,h=l[0]||1,c=l[1]||1,u=Math.round((n.width-o.width)/h)*h,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=l,_&&(p+=h),v&&(f+=c),g&&(p-=h),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-h)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-h>0?(i.size.width=p,i.position.left=a.left-u):(p=h-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget(\"ui.selectable\",t.ui.mouse,{version:\"1.12.1\",options:{appendTo:\"body\",autoRefresh:!0,distance:0,filter:\"*\",tolerance:\"touch\",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass(\"ui-selectable\"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,\"ui-selectee\"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,\"selectable-item\",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass(\"ui-selected\"),selecting:i.hasClass(\"ui-selecting\"),unselecting:i.hasClass(\"ui-unselecting\")})})},this.refresh(),this._mouseInit(),this.helper=t(\"<div>\"),this._addClass(this.helper,\"ui-selectable-helper\")},_destroy:function(){this.selectees.removeData(\"selectable-item\"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger(\"start\",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(\".ui-selected\").each(function(){var s=t.data(this,\"selectable-item\");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,\"ui-selected\"),s.selected=!1,i._addClass(s.$element,\"ui-unselecting\"),s.unselecting=!0,i._trigger(\"unselecting\",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,\"selectable-item\");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass(\"ui-selected\"),i._removeClass(n.$element,s?\"ui-unselecting\":\"ui-selected\")._addClass(n.$element,s?\"ui-selecting\":\"ui-unselecting\"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger(\"selecting\",e,{selecting:n.element}):i._trigger(\"unselecting\",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,l=e.pageY;return o>r&&(i=r,r=o,o=i),a>l&&(i=l,l=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:l-a}),this.selectees.each(function(){var i=t.data(this,\"selectable-item\"),h=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,\"touch\"===n.tolerance?h=!(c.left>r||o>c.right||c.top>l||a>c.bottom):\"fit\"===n.tolerance&&(h=c.left>o&&r>c.right&&c.top>a&&l>c.bottom),h?(i.selected&&(s._removeClass(i.$element,\"ui-selected\"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,\"ui-unselecting\"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,\"ui-selecting\"),i.selecting=!0,s._trigger(\"selecting\",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,\"ui-selecting\"),i.selecting=!1,s._addClass(i.$element,\"ui-selected\"),i.selected=!0):(s._removeClass(i.$element,\"ui-selecting\"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,\"ui-unselecting\"),i.unselecting=!0),s._trigger(\"unselecting\",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,\"ui-selected\"),i.selected=!1,s._addClass(i.$element,\"ui-unselecting\"),i.unselecting=!0,s._trigger(\"unselecting\",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(\".ui-unselecting\",this.element[0]).each(function(){var s=t.data(this,\"selectable-item\");i._removeClass(s.$element,\"ui-unselecting\"),s.unselecting=!1,s.startselected=!1,i._trigger(\"unselected\",e,{unselected:s.element})}),t(\".ui-selecting\",this.element[0]).each(function(){var s=t.data(this,\"selectable-item\");i._removeClass(s.$element,\"ui-selecting\")._addClass(s.$element,\"ui-selected\"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger(\"selected\",e,{selected:s.element})}),this._trigger(\"stop\",e),this.helper.remove(),!1}}),t.widget(\"ui.sortable\",t.ui.mouse,{version:\"1.12.1\",widgetEventPrefix:\"sort\",ready:!1,options:{appendTo:\"parent\",axis:!1,connectWith:!1,containment:!1,cursor:\"auto\",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:\"original\",items:\"> *\",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:\"default\",tolerance:\"intersect\",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return t>=e&&e+i>t},_isFloating:function(t){return/left|right/.test(t.css(\"float\"))||/inline|table-cell/.test(t.css(\"display\"))},_create:function(){this.containerCache={},this._addClass(\"ui-sortable\"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),\"handle\"===t&&this._setHandleClassName()},_setHandleClassName:function(){var e=this;this._removeClass(this.element.find(\".ui-sortable-handle\"),\"ui-sortable-handle\"),t.each(this.items,function(){e._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,\"ui-sortable-handle\")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+\"-item\");return this},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return this.reverting?!1:this.options.disabled||\"static\"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,o.widgetName+\"-item\")===o?(s=t(this),!1):void 0}),t.data(e.target,o.widgetName+\"-item\")===o&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find(\"*\").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css(\"position\",\"absolute\"),this.cssPosition=this.helper.css(\"position\"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&\"auto\"!==a.cursor&&(o=this.document.find(\"body\"),this.storedCursor=o.css(\"cursor\"),o.css(\"cursor\",a.cursor),this.storedStylesheet=t(\"<style>*{ cursor: \"+a.cursor+\" !important; }</style>\").appendTo(o)),a.opacity&&(this.helper.css(\"opacity\")&&(this._storedOpacity=this.helper.css(\"opacity\")),this.helper.css(\"opacity\",a.opacity)),a.zIndex&&(this.helper.css(\"zIndex\")&&(this._storedZIndex=this.helper.css(\"zIndex\")),this.helper.css(\"zIndex\",a.zIndex)),this.scrollParent[0]!==this.document[0]&&\"HTML\"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger(\"start\",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger(\"activate\",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,\"ui-sortable-helper\"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo(\"absolute\"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&\"HTML\"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<a.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+a.scrollSpeed:e.pageY-this.overflowOffset.top<a.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-a.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<a.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+a.scrollSpeed:e.pageX-this.overflowOffset.left<a.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-a.scrollSpeed)):(e.pageY-this.document.scrollTop()<a.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-a.scrollSpeed):this.window.height()-(e.pageY-this.document.scrollTop())<a.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+a.scrollSpeed)),e.pageX-this.document.scrollLeft()<a.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-a.scrollSpeed):this.window.width()-(e.pageX-this.document.scrollLeft())<a.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+a.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo(\"absolute\"),this.options.axis&&\"y\"===this.options.axis||(this.helper[0].style.left=this.position.left+\"px\"),this.options.axis&&\"x\"===this.options.axis||(this.helper[0].style.top=this.position.top+\"px\"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],o=this._intersectsWithPointer(s),o&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===o?\"next\":\"prev\"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&(\"semi-dynamic\"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===o?\"down\":\"up\",\"pointer\"!==this.options.tolerance&&!this._intersectsWithSides(s))break;\nthis._rearrange(e,s),this._trigger(\"change\",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger(\"sort\",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&\"x\"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&\"y\"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp(new t.Event(\"mouseup\",{target:null})),\"original\"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,\"ui-sortable-helper\")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger(\"deactivate\",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger(\"out\",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),\"original\"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||\"id\")||\"\").match(e.expression||/(.+)[\\-=_](.+)/);i&&s.push((e.key||i[1]+\"[]\")+\"=\"+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+\"=\"),s.join(\"&\")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||\"id\")||\"\")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,l=r+t.height,h=this.offset.click.top,c=this.offset.click.left,u=\"x\"===this.options.axis||s+h>r&&l>s+h,d=\"y\"===this.options.axis||e+c>o&&a>e+c,p=u&&d;return\"pointer\"===this.options.tolerance||this.options.forcePointerForContainers||\"pointer\"!==this.options.tolerance&&this.helperProportions[this.floating?\"width\":\"height\"]>t[this.floating?\"width\":\"height\"]?p:e+this.helperProportions.width/2>o&&a>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&l>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var e,i,s=\"x\"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),n=\"y\"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width),o=s&&n;return o?(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?\"right\"===i||\"down\"===e?2:1:e&&(\"down\"===e?2:1)):!1},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?\"right\"===n&&i||\"left\"===n&&!i:s&&(\"down\"===s&&e||\"up\"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?\"down\":\"up\")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?\"right\":\"left\")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){function i(){r.push(this)}var s,n,o,a,r=[],l=[],h=this._connectWith();if(h&&e)for(s=h.length-1;s>=0;s--)for(o=t(h[s],this.document[0]),n=o.length-1;n>=0;n--)a=t.data(o[n],this.widgetFullName),a&&a!==this&&!a.options.disabled&&l.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"),a]);for(l.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"),this]),s=l.length-1;s>=0;s--)l[s][0].each(i);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(\":data(\"+this.widgetName+\"-item)\");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,l,h,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i],this.document[0]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],r=u[i][0],s=0,h=r.length;h>s;s++)l=t(r[s]),l.data(this.widgetName+\"-item\",a),c.push({item:l,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.floating=this.items.length?\"x\"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t(\"<\"+s+\">\",e.document[0]);return e._addClass(n,\"ui-sortable-placeholder\",i||e.currentItem[0].className)._removeClass(n,\"ui-sortable-helper\"),\"tbody\"===s?e._createTrPlaceholder(e.currentItem.find(\"tr\").eq(0),t(\"<tr>\",e.document[0]).appendTo(n)):\"tr\"===s?e._createTrPlaceholder(e.currentItem,n):\"img\"===s&&n.attr(\"src\",e.currentItem.attr(\"src\")),i||n.css(\"visibility\",\"hidden\"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css(\"paddingTop\")||0,10)-parseInt(e.currentItem.css(\"paddingBottom\")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css(\"paddingLeft\")||0,10)-parseInt(e.currentItem.css(\"paddingRight\")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t(\"<td>&#160;</td>\",s.document[0]).attr(\"colspan\",t(this).attr(\"colspan\")||1).appendTo(i)})},_contactContainers:function(e){var i,s,n,o,a,r,l,h,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger(\"out\",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger(\"over\",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,o=null,c=d.floating||this._isFloating(this.currentItem),a=c?\"left\":\"top\",r=c?\"width\":\"height\",u=c?\"pageX\":\"pageY\",s=this.items.length-1;s>=0;s--)t.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(l=this.items[s].item.offset()[a],h=!1,e[u]-l>this.items[s][r]/2&&(h=!0),n>Math.abs(e[u]-l)&&(n=Math.abs(e[u]-l),o=this.items[s],this.direction=h?\"up\":\"down\"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger(\"over\",e,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger(\"change\",e,this._uiHash()),this.containers[p]._trigger(\"change\",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger(\"over\",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):\"clone\"===i.helper?this.currentItem.clone():this.currentItem;return s.parents(\"body\").length||t(\"parent\"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css(\"position\"),top:this.currentItem.css(\"top\"),left:this.currentItem.css(\"left\")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){\"string\"==typeof e&&(e=e.split(\" \")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),\"left\"in e&&(this.offset.click.left=e.left+this.margins.left),\"right\"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),\"top\"in e&&(this.offset.click.top=e.top+this.margins.top),\"bottom\"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return\"absolute\"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&\"html\"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css(\"borderTopWidth\"),10)||0),left:e.left+(parseInt(this.offsetParent.css(\"borderLeftWidth\"),10)||0)}},_getRelativeOffset:function(){if(\"relative\"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css(\"top\"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css(\"left\"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css(\"marginLeft\"),10)||0,top:parseInt(this.currentItem.css(\"marginTop\"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;\"parent\"===n.containment&&(n.containment=this.helper[0].parentNode),(\"document\"===n.containment||\"window\"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,\"document\"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,(\"document\"===n.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s=\"hidden\"!==t(e).css(\"overflow\"),this.containment=[i.left+(parseInt(t(e).css(\"borderLeftWidth\"),10)||0)+(parseInt(t(e).css(\"paddingLeft\"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css(\"borderTopWidth\"),10)||0)+(parseInt(t(e).css(\"paddingTop\"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css(\"borderLeftWidth\"),10)||0)-(parseInt(t(e).css(\"paddingRight\"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css(\"borderTopWidth\"),10)||0)-(parseInt(t(e).css(\"paddingBottom\"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s=\"absolute\"===e?1:-1,n=\"absolute\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-(\"fixed\"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-(\"fixed\"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r=\"absolute\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,l=/(html|body)/i.test(r[0].tagName);return\"relative\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(o=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(a=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(\"fixed\"===this.cssPosition?-this.scrollParent.scrollTop():l?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(\"fixed\"===this.cssPosition?-this.scrollParent.scrollLeft():l?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],\"down\"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){function i(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)(\"auto\"===this._storedCSS[s]||\"static\"===this._storedCSS[s])&&(this._storedCSS[s]=\"\");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,\"ui-sortable-helper\")}else this.currentItem.show();for(this.fromOutside&&!e&&n.push(function(t){this._trigger(\"receive\",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(\".ui-sortable-helper\")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger(\"update\",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger(\"remove\",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger(\"receive\",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger(\"update\",e,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)e||n.push(i(\"deactivate\",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i(\"out\",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find(\"body\").css(\"cursor\",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css(\"opacity\",this._storedOpacity),this._storedZIndex&&this.helper.css(\"zIndex\",\"auto\"===this._storedZIndex?\"\":this._storedZIndex),this.dragging=!1,e||this._trigger(\"beforeStop\",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(s=0;n.length>s;s++)n[s].call(this,t);this._trigger(\"stop\",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget(\"ui.slider\",t.ui.mouse,{version:\"1.12.1\",widgetEventPrefix:\"slide\",options:{animate:!1,classes:{\"ui-slider\":\"ui-corner-all\",\"ui-slider-handle\":\"ui-corner-all\",\"ui-slider-range\":\"ui-corner-all ui-widget-header\"},distance:0,max:100,min:0,orientation:\"horizontal\",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass(\"ui-slider ui-slider-\"+this.orientation,\"ui-widget ui-widget-content\"),this._refresh(),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(\".ui-slider-handle\"),o=\"<span tabindex='0'></span>\",a=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)a.push(o);this.handles=n.add(t(a.join(\"\")).appendTo(this.element)),this._addClass(this.handles,\"ui-slider-handle\",\"ui-state-default\"),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data(\"ui-slider-handle-index\",e).attr(\"tabIndex\",0)})},_createRange:function(){var e=this.options;e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,\"ui-slider-range-min ui-slider-range-max\"),this.range.css({left:\"\",bottom:\"\"})):(this.range=t(\"<div>\").appendTo(this.element),this._addClass(this.range,\"ui-slider-range\")),(\"min\"===e.range||\"max\"===e.range)&&this._addClass(this.range,\"ui-slider-range-\"+e.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,o,a,r,l,h,c=this,u=this.options;return u.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-c.values(e));(n>i||n===i&&(e===c._lastChangedValue||c.values(e)===u.min))&&(n=i,o=t(this),a=e)}),r=this._start(e,a),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=a,this._addClass(o,null,\"ui-state-active\"),o.trigger(\"focus\"),l=o.offset(),h=!t(e.target).parents().addBack().is(\".ui-slider-handle\"),this._clickOffset=h?{left:0,top:0}:{left:e.pageX-l.left-o.width()/2,top:e.pageY-l.top-o.height()/2-(parseInt(o.css(\"borderTopWidth\"),10)||0)-(parseInt(o.css(\"borderBottomWidth\"),10)||0)+(parseInt(o.css(\"marginTop\"),10)||0)},this.handles.hasClass(\"ui-state-hover\")||this._slide(e,a,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,\"ui-state-active\"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation=\"vertical\"===this.options.orientation?\"vertical\":\"horizontal\"},_normValueFromMouse:function(t){var e,i,s,n,o;return\"horizontal\"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),\"vertical\"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),o=this._valueMin()+s*n,this._trimAlignValue(o)},_uiHash:function(t,e,i){var s={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(s.value=void 0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger(\"start\",t,this._uiHash(e))},_slide:function(t,e,i){var s,n,o=this.value(),a=this.values();this._hasMultipleValues()&&(n=this.values(e?0:1),o=this.values(e),2===this.options.values.length&&this.options.range===!0&&(i=0===e?Math.min(n,i):Math.max(n,i)),a[e]=i),i!==o&&(s=this._trigger(\"slide\",t,this._uiHash(e,i,a)),s!==!1&&(this._hasMultipleValues()?this.values(e,i):this.value(i)))},_stop:function(t,e){this._trigger(\"stop\",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger(\"change\",t,this._uiHash(e)))},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(e,i){var s,n,o;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),void 0;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this._hasMultipleValues()?this._values(e):this.value();for(s=this.options.values,n=arguments[0],o=0;s.length>o;o+=1)s[o]=this._trimAlignValue(n[o]),this._change(null,o);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch(\"range\"===e&&this.options.range===!0&&(\"min\"===i?(this.options.value=this._values(0),this.options.values=null):\"max\"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),this._super(e,i),e){case\"orientation\":this._detectOrientation(),this._removeClass(\"ui-slider-horizontal ui-slider-vertical\")._addClass(\"ui-slider-\"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(i),this.handles.css(\"horizontal\"===i?\"bottom\":\"left\",\"\");break;case\"value\":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case\"values\":for(this._animateOff=!0,this._refreshValue(),s=n-1;s>=0;s--)this._change(null,s);this._animateOff=!1;break;case\"step\":case\"min\":case\"max\":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case\"range\":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,\"ui-state-disabled\",!!t)},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this._hasMultipleValues()){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step,s=Math.round((t-e)/i)*i;t=s+e,t>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=\"\"+t,i=e.indexOf(\".\");return-1===i?0:e.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){\"vertical\"===t&&this.range.css({width:\"\",left:\"\"}),\"horizontal\"===t&&this.range.css({height:\"\",bottom:\"\"})},_refreshValue:function(){var e,i,s,n,o,a=this.options.range,r=this.options,l=this,h=this._animateOff?!1:r.animate,c={};this._hasMultipleValues()?this.handles.each(function(s){i=100*((l.values(s)-l._valueMin())/(l._valueMax()-l._valueMin())),c[\"horizontal\"===l.orientation?\"left\":\"bottom\"]=i+\"%\",t(this).stop(1,1)[h?\"animate\":\"css\"](c,r.animate),l.options.range===!0&&(\"horizontal\"===l.orientation?(0===s&&l.range.stop(1,1)[h?\"animate\":\"css\"]({left:i+\"%\"},r.animate),1===s&&l.range[h?\"animate\":\"css\"]({width:i-e+\"%\"},{queue:!1,duration:r.animate})):(0===s&&l.range.stop(1,1)[h?\"animate\":\"css\"]({bottom:i+\"%\"},r.animate),1===s&&l.range[h?\"animate\":\"css\"]({height:i-e+\"%\"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),o=this._valueMax(),i=o!==n?100*((s-n)/(o-n)):0,c[\"horizontal\"===this.orientation?\"left\":\"bottom\"]=i+\"%\",this.handle.stop(1,1)[h?\"animate\":\"css\"](c,r.animate),\"min\"===a&&\"horizontal\"===this.orientation&&this.range.stop(1,1)[h?\"animate\":\"css\"]({width:i+\"%\"},r.animate),\"max\"===a&&\"horizontal\"===this.orientation&&this.range.stop(1,1)[h?\"animate\":\"css\"]({width:100-i+\"%\"},r.animate),\"min\"===a&&\"vertical\"===this.orientation&&this.range.stop(1,1)[h?\"animate\":\"css\"]({height:i+\"%\"},r.animate),\"max\"===a&&\"vertical\"===this.orientation&&this.range.stop(1,1)[h?\"animate\":\"css\"]({height:100-i+\"%\"},r.animate))},_handleEvents:{keydown:function(e){var i,s,n,o,a=t(e.target).data(\"ui-slider-handle-index\");switch(e.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(e.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(t(e.target),null,\"ui-state-active\"),i=this._start(e,a),i===!1))return}switch(o=this.options.step,s=n=this._hasMultipleValues()?this.values(a):this.value(),e.keyCode){case t.ui.keyCode.HOME:n=this._valueMin();break;case t.ui.keyCode.END:n=this._valueMax();break;case t.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-o)}this._slide(e,a,n)},keyup:function(e){var i=t(e.target).data(\"ui-slider-handle-index\");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),this._removeClass(t(e.target),null,\"ui-state-active\"))}}})});","$(function () {\n    \n    if($('.sidebar').is('[data-background-color]')) { \n\t\t$('html').addClass('sidebar-color');\n\t} else {\n\t\t$('html').removeClass('sidebar-color');\n\t}\n\n\tif($('body').is('[data-image]')) {\n\t\t$('body').css('background-image', 'url(\"' + $('body').attr('data-image') + '\")');\n\t} else {\n\t\t$('body').css('background-image', '');\n\t}\n    \n    var scrollbarDashboard = $('.sidebar .scrollbar');\n\tif (scrollbarDashboard.length > 0) {\n\t\tscrollbarDashboard.scrollbar();\n\t}\n    \n    var contentScrollbar = $('.main-panel .content-scroll');\n\tif (contentScrollbar.length > 0) {\n\t\tcontentScrollbar.scrollbar();\n\t}\n    \n    var userScrollbar = $('.dropdown-user-scroll');\n\tif (userScrollbar.length > 0) {\n\t\tuserScrollbar.scrollbar();\n\t}\n    \n    var toggle_sidebar = false,\n\ttoggle_quick_sidebar = false,\n\ttoggle_topbar = false,\n\tminimize_sidebar = false,\n\ttoggle_page_sidebar = false,\n\ttoggle_overlay_sidebar = false,\n\tnav_open = 0,\n\tquick_sidebar_open = 0,\n\ttopbar_open = 0,\n\tmini_sidebar = 0,\n\tpage_sidebar_open = 0,\n\toverlay_sidebar_open = 0;\n\n\n\tif(!toggle_sidebar) {\n\t\tvar toggle = $('.sidenav-toggler');\n\n\t\ttoggle.on('click', function(){\n\t\t\tif (nav_open == 1){\n\t\t\t\t$('html').removeClass('nav_open');\n\t\t\t\ttoggle.removeClass('toggled');\n\t\t\t\tnav_open = 0;\n\t\t\t}  else {\n\t\t\t\t$('html').addClass('nav_open');\n\t\t\t\ttoggle.addClass('toggled');\n\t\t\t\tnav_open = 1;\n\t\t\t}\n\t\t});\n\t\ttoggle_sidebar = true;\n\t}\n\n\tif(!quick_sidebar_open) {\n\t\tvar toggle = $('.quick-sidebar-toggler');\n\n\t\ttoggle.on('click', function(){\n\t\t\tif (nav_open == 1){\n\t\t\t\t$('html').removeClass('quick_sidebar_open');\n\t\t\t\t$('.quick-sidebar-overlay').remove();\n\t\t\t\ttoggle.removeClass('toggled');\n\t\t\t\tquick_sidebar_open = 0;\n\t\t\t}  else {\n\t\t\t\t$('html').addClass('quick_sidebar_open');\n\t\t\t\ttoggle.addClass('toggled');\n\t\t\t\t$('<div class=\"quick-sidebar-overlay\"></div>').insertAfter('.quick-sidebar');\n\t\t\t\tquick_sidebar_open = 1;\n\t\t\t}\n\t\t});\n\n\t\t$('.wrapper').mouseup(function(e)\n\t\t{\n\t\t\tvar subject = $('.quick-sidebar'); \n\n\t\t\tif(e.target.className != subject.attr('class') && !subject.has(e.target).length)\n\t\t\t{\n\t\t\t\t$('html').removeClass('quick_sidebar_open');\n\t\t\t\t$('.quick-sidebar-toggler').removeClass('toggled');\n\t\t\t\t$('.quick-sidebar-overlay').remove();\n\t\t\t\tquick_sidebar_open = 0;\n\t\t\t}\n\t\t});\n\n\t\t$(\".close-quick-sidebar\").on('click', function(){\n\t\t\t$('html').removeClass('quick_sidebar_open');\n\t\t\t$('.quick-sidebar-toggler').removeClass('toggled');\n\t\t\t$('.quick-sidebar-overlay').remove();\n\t\t\tquick_sidebar_open = 0;\n\t\t});\n\n\t\tquick_sidebar_open = true;\n\t}\n\n\tif(!toggle_topbar) {\n\t\tvar topbar = $('.topbar-toggler');\n\n\t\ttopbar.on('click', function() {\n\t\t\tif (topbar_open == 1) {\n\t\t\t\t$('html').removeClass('topbar_open');\n\t\t\t\ttopbar.removeClass('toggled');\n\t\t\t\ttopbar_open = 0;\n\t\t\t} else {\n\t\t\t\t$('html').addClass('topbar_open');\n\t\t\t\ttopbar.addClass('toggled');\n\t\t\t\ttopbar_open = 1;\n\t\t\t}\n\t\t});\n\t\ttoggle_topbar = true;\n\t}\n\n\tif(!minimize_sidebar){\n\t\tvar minibutton = $('.toggle-sidebar');\n\t\tif($('.wrapper').hasClass('sidebar_minimize')){\n\t\t\tmini_sidebar = 1;\n\t\t\tminibutton.addClass('toggled');\n\t\t\tminibutton.html('<i class=\"icon-options-vertical\"></i>');\n\t\t}\n\n\t\tminibutton.on('click', function() {\n\t\t\tif (mini_sidebar == 1) {\n\t\t\t\t$('.wrapper').removeClass('sidebar_minimize');\n\t\t\t\tminibutton.removeClass('toggled');\n\t\t\t\tminibutton.html('<i class=\"icon-menu\"></i>');\n\t\t\t\tmini_sidebar = 0;\n\t\t\t} else {\n\t\t\t\t$('.wrapper').addClass('sidebar_minimize');\n\t\t\t\tminibutton.addClass('toggled');\n\t\t\t\tminibutton.html('<i class=\"icon-options-vertical\"></i>');\n\t\t\t\tmini_sidebar = 1;\n\t\t\t}\n\t\t\t$(window).resize();\n\t\t});\n\t\tminimize_sidebar = true;\n\t}\n\n\tif(!toggle_page_sidebar) {\n\t\tvar pageSidebarToggler = $('.page-sidebar-toggler');\n\n\t\tpageSidebarToggler.on('click', function() {\n\t\t\tif (page_sidebar_open == 1) {\n\t\t\t\t$('html').removeClass('pagesidebar_open');\n\t\t\t\tpageSidebarToggler.removeClass('toggled');\n\t\t\t\tpage_sidebar_open = 0;\n\t\t\t} else {\n\t\t\t\t$('html').addClass('pagesidebar_open');\n\t\t\t\tpageSidebarToggler.addClass('toggled');\n\t\t\t\tpage_sidebar_open = 1;\n\t\t\t}\n\t\t});\n\n\t\tvar pageSidebarClose = $('.page-sidebar .back');\n\n\t\tpageSidebarClose.on('click', function() {\n\t\t\t$('html').removeClass('pagesidebar_open');\n\t\t\tpageSidebarToggler.removeClass('toggled');\n\t\t\tpage_sidebar_open = 0;\n\t\t});\n\t\t\n\t\ttoggle_page_sidebar = true;\n\t}\n\n\tif(!toggle_overlay_sidebar){\n\t\tvar overlaybutton = $('.sidenav-overlay-toggler');\n\t\tif($('.wrapper').hasClass('is-show')){\n\t\t\toverlay_sidebar_open = 1;\n\t\t\toverlaybutton.addClass('toggled');\n\t\t\toverlaybutton.html('<i class=\"icon-options-vertical\"></i>');\n\t\t}\n\n\t\toverlaybutton.on('click', function() {\n\t\t\tif (overlay_sidebar_open == 1) {\n\t\t\t\t$('.wrapper').removeClass('is-show');\n\t\t\t\toverlaybutton.removeClass('toggled');\n\t\t\t\toverlaybutton.html('<i class=\"icon-menu\"></i>');\n\t\t\t\toverlay_sidebar_open = 0;\n\t\t\t} else {\n\t\t\t\t$('.wrapper').addClass('is-show');\n\t\t\t\toverlaybutton.addClass('toggled');\n\t\t\t\toverlaybutton.html('<i class=\"icon-options-vertical\"></i>');\n\t\t\t\toverlay_sidebar_open = 1;\n\t\t\t}\n\t\t\t$(window).resize();\n\t\t});\n\t\tminimize_sidebar = true;\n\t}\n\n\t$('.sidebar').hover(function() {\n\t\tif ($('.wrapper').hasClass('sidebar_minimize')){\n\t\t\t$('.wrapper').addClass('sidebar_minimize_hover');\n\t\t}\n\t}, function(){\n\t\tif ($('.wrapper').hasClass('sidebar_minimize')){\n\t\t\t$('.wrapper').removeClass('sidebar_minimize_hover');\n\t\t}\n\t});\n    \n    $(\".nav-item a\").on('click', (function(){\n\t\tif ( $(this).parent().find('.collapse').hasClass(\"show\") ) {\n\t\t\t$(this).parent().removeClass('submenu');\n\t\t} else {\n\t\t\t$(this).parent().addClass('submenu');\n\t\t}\n\t}));\n    \n    //select all\n\t$('[data-select=\"checkbox\"]').change(function(){\n\t\tvar target = $(this).attr('data-target');\n\t\t$(target).prop('checked', $(this).prop(\"checked\"));\n\t})\n    \n    $(\".form-group-default .form-control\").focus(function(){\n\t\t$(this).parent().addClass(\"active\");\n\t}).blur(function(){\n\t\t$(this).parent().removeClass(\"active\");\n\t})\n    \n    // Input File Image\n    \n    $('.input-file-image input[type=\"file\"').change(function () {\n        var input=this;\n        if (input.files && input.files[0]) {\n            var reader = new FileReader();\n\n            reader.onload = function (e) {\n                $(input).parent('.input-file-image').find('.img-upload-preview').attr('src', e.target.result);\n            }\n\n            reader.readAsDataURL(input.files[0]);\n        }\n        \n    });\n    \n    // Show Password\n\n    $('.show-password').on('click', function(){\n        button=this;\n        var inputPassword = $(button).parent().find('input');\n        if (inputPassword.attr('type') === \"password\") {\n            inputPassword.attr('type', 'text');\n        } else {\n            inputPassword.attr('type','password');\n        }\n    })\n    \n    $('.form-floating-label .form-control').keyup(function(){\n        if($(this).val() !== '') {\n            $(this).addClass('filled');\n        } else {\n            $(this).removeClass('filled');\n        }\n    })\n    \n});","import tinyMCE from 'tinymce';\n\ntinyMCE.baseURL = `${CI.baseUrl}/modules/admin/js/wysiwyg`;\n\ntinyMCE.init({\n    selector: '.wysiwyg',\n    theme: 'modern',\n    mobile: { theme: 'mobile' },\n    height: 300,\n    branding: false,\n    image_advtab: true,\n    image_title: true,\n    menubar: false,\n    relative_urls: false,\n    directionality: 'ltr',\n    cache_suffix: `?v=${CI.version}`,\n    plugins: 'lists, link, table, paste, autosave, autolink, wordcount, code',\n    toolbar: 'styleselect bold italic underline | bullist numlist | alignleft aligncenter alignright | outdent indent | link table code',\n});\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// 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\t476: 0,\n\t833: 0,\n\t807: 0,\n\t784: 0,\n\t23: 0,\n\t460: 0,\n\t664: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\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\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk\"] = self[\"webpackChunk\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\n__webpack_require__.O(undefined, [833,807,784,23,460,664], () => (__webpack_require__(795)))\n__webpack_require__.O(undefined, [833,807,784,23,460,664], () => (__webpack_require__(225)))\n__webpack_require__.O(undefined, [833,807,784,23,460,664], () => (__webpack_require__(935)))\n__webpack_require__.O(undefined, [833,807,784,23,460,664], () => (__webpack_require__(303)))\n__webpack_require__.O(undefined, [833,807,784,23,460,664], () => (__webpack_require__(990)))\n__webpack_require__.O(undefined, [833,807,784,23,460,664], () => (__webpack_require__(83)))\nvar __webpack_exports__ = __webpack_require__.O(undefined, [833,807,784,23,460,664], () => (__webpack_require__(246)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","$","defaults","element","position","type","allow_dismiss","newest_on_top","showProgressbar","placement","from","align","offset","spacing","z_index","delay","timer","url_target","mouse_over","animate","enter","exit","onShow","onShown","onClose","onClosed","icon_type","template","Notify","content","options","message","title","icon","url","target","extend","this","settings","_defaults","animations","start","end","x","y","init","String","format","str","arguments","i","length","replace","RegExp","prototype","self","buildNotify","setIcon","styleURL","styleDismiss","bind","notify","$ele","update","command","commands","removeClass","find","addClass","$icon","toLowerCase","is","attr","newDelay","data","css","html","posX","outerHeight","parseInt","reposition","close","remove","append","right","top","zIndex","backgroundImage","height","left","width","offsetAmt","display","margin","transition","hasAnimation","each","Math","max","Array","index","prefix","style","isFunction","call","one","event","setTimeout","on","mouseover","e","mouseout","setInterval","percent","clearInterval","notifies","$elements","nextAll","prevAll","notifyDefaults","notifyClose","trigger","exports","Popper","_interopDefaultLegacy","$__default","Popper__default","_defineProperties","props","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","Constructor","protoProps","staticProps","_extends","assign","source","hasOwnProperty","apply","_inheritsLoose","subClass","superClass","create","constructor","_setPrototypeOf","o","p","setPrototypeOf","__proto__","TRANSITION_END","MAX_UID","MILLISECONDS_MULTIPLIER","toType","obj","toString","match","getSpecialTransitionEndEvent","bindType","delegateType","handle","handleObj","handler","transitionEndEmulator","duration","_this","called","Util","triggerTransitionEnd","setTransitionEndSupport","fn","emulateTransitionEnd","special","getUID","random","document","getElementById","getSelectorFromElement","selector","getAttribute","hrefAttr","trim","querySelector","_","getTransitionDurationFromElement","transitionDuration","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","split","reflow","offsetHeight","supportsTransitionEnd","Boolean","isElement","nodeType","typeCheckConfig","componentName","config","configTypes","property","expectedTypes","value","valueType","test","Error","toUpperCase","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","jQueryDetection","TypeError","version","jquery","minMajor","ltMajor","minMinor","minPatch","maxMajor","NAME$a","VERSION$a","DATA_KEY$a","EVENT_KEY$a","DATA_API_KEY$7","JQUERY_NO_CONFLICT$a","CLASS_NAME_ALERT","CLASS_NAME_FADE$5","CLASS_NAME_SHOW$7","EVENT_CLOSE","EVENT_CLOSED","EVENT_CLICK_DATA_API$6","SELECTOR_DISMISS","Alert","_element","_proto","rootElement","_getRootElement","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","parent","closest","closeEvent","Event","hasClass","_destroyElement","detach","_jQueryInterface","$element","_handleDismiss","alertInstance","preventDefault","get","noConflict","NAME$9","VERSION$9","DATA_KEY$9","EVENT_KEY$9","DATA_API_KEY$6","JQUERY_NO_CONFLICT$9","CLASS_NAME_ACTIVE$3","CLASS_NAME_BUTTON","CLASS_NAME_FOCUS","EVENT_CLICK_DATA_API$5","EVENT_FOCUS_BLUR_DATA_API","EVENT_LOAD_DATA_API$2","SELECTOR_DATA_TOGGLE_CARROT","SELECTOR_DATA_TOGGLES","SELECTOR_DATA_TOGGLE$4","SELECTOR_DATA_TOGGLES_BUTTONS","SELECTOR_INPUT","SELECTOR_ACTIVE$2","SELECTOR_BUTTON","Button","shouldAvoidTriggerChange","toggle","triggerChangeEvent","addAriaPressed","input","checked","classList","contains","activeElement","focus","hasAttribute","setAttribute","toggleClass","avoidTriggerChange","button","initialButton","inputBtn","tagName","window","buttons","slice","querySelectorAll","len","add","_i","_len","_button","NAME$8","VERSION$8","DATA_KEY$8","EVENT_KEY$8","DATA_API_KEY$5","JQUERY_NO_CONFLICT$8","ARROW_LEFT_KEYCODE","ARROW_RIGHT_KEYCODE","TOUCHEVENT_COMPAT_WAIT","SWIPE_THRESHOLD","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE$2","CLASS_NAME_SLIDE","CLASS_NAME_RIGHT","CLASS_NAME_LEFT","CLASS_NAME_NEXT","CLASS_NAME_PREV","CLASS_NAME_POINTER_EVENT","DIRECTION_NEXT","DIRECTION_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","EVENT_DRAG_START","EVENT_LOAD_DATA_API$1","EVENT_CLICK_DATA_API$4","SELECTOR_ACTIVE$1","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM","SELECTOR_ITEM_IMG","SELECTOR_NEXT_PREV","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","Default$7","interval","keyboard","slide","pause","wrap","touch","DefaultType$7","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","cycle","_updateInterval","visibilityState","to","activeIndex","_getItemIndex","direction","off","_handleSwipe","absDeltax","abs","_this2","_keydown","_addTouchEventListeners","_this3","originalEvent","pointerType","clientX","touches","move","clearTimeout","which","indexOf","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","_setActiveIndicatorElement","indicators","nextIndicator","children","elementInterval","defaultInterval","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","action","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","NAME$7","VERSION$7","DATA_KEY$7","EVENT_KEY$7","DATA_API_KEY$4","JQUERY_NO_CONFLICT$7","CLASS_NAME_SHOW$6","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","DIMENSION_WIDTH","DIMENSION_HEIGHT","EVENT_SHOW$4","EVENT_SHOWN$4","EVENT_HIDE$4","EVENT_HIDDEN$4","EVENT_CLICK_DATA_API$3","SELECTOR_ACTIVES","SELECTOR_DATA_TOGGLE$3","Default$6","DefaultType$6","Collapse","_isTransitioning","_triggerArray","id","toggleList","elem","filterElement","filter","foundElem","_selector","push","_parent","_getParent","_addAriaAndCollapsedClass","hide","show","actives","activesData","not","startEvent","dimension","_getDimension","setTransitioning","complete","scrollSize","getBoundingClientRect","triggerArrayLength","isTransitioning","_getTargetFromElement","triggerArray","isOpen","currentTarget","$trigger","selectors","$target","NAME$6","VERSION$6","DATA_KEY$6","EVENT_KEY$6","DATA_API_KEY$3","JQUERY_NO_CONFLICT$6","ESCAPE_KEYCODE$1","SPACE_KEYCODE","TAB_KEYCODE","ARROW_UP_KEYCODE","ARROW_DOWN_KEYCODE","RIGHT_MOUSE_BUTTON_WHICH","REGEXP_KEYDOWN","CLASS_NAME_DISABLED$1","CLASS_NAME_SHOW$5","CLASS_NAME_DROPUP","CLASS_NAME_DROPRIGHT","CLASS_NAME_DROPLEFT","CLASS_NAME_MENURIGHT","CLASS_NAME_POSITION_STATIC","EVENT_HIDE$3","EVENT_HIDDEN$3","EVENT_SHOW$3","EVENT_SHOWN$3","EVENT_CLICK","EVENT_CLICK_DATA_API$2","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","SELECTOR_DATA_TOGGLE$2","SELECTOR_FORM_CHILD","SELECTOR_MENU","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","Default$5","flip","boundary","reference","popperConfig","DefaultType$5","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","disabled","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","referenceElement","_getPopperConfig","body","noop","hideEvent","destroy","scheduleUpdate","stopPropagation","Default","DefaultType","_getPlacement","$parentDropdown","_getOffset","offsets","modifiers","enabled","preventOverflow","boundariesElement","applyStyle","toggles","context","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","item","NAME$5","VERSION$5","DATA_KEY$5","EVENT_KEY$5","DATA_API_KEY$2","JQUERY_NO_CONFLICT$5","ESCAPE_KEYCODE","CLASS_NAME_SCROLLABLE","CLASS_NAME_SCROLLBAR_MEASURER","CLASS_NAME_BACKDROP","CLASS_NAME_OPEN","CLASS_NAME_FADE$4","CLASS_NAME_SHOW$4","CLASS_NAME_STATIC","EVENT_HIDE$2","EVENT_HIDE_PREVENTED","EVENT_HIDDEN$2","EVENT_SHOW$2","EVENT_SHOWN$2","EVENT_FOCUSIN","EVENT_RESIZE","EVENT_CLICK_DISMISS$1","EVENT_KEYDOWN_DISMISS","EVENT_MOUSEUP_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_CLICK_DATA_API$1","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","SELECTOR_DATA_TOGGLE$1","SELECTOR_DATA_DISMISS$1","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","Default$4","backdrop","DefaultType$4","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","_hideModal","forEach","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","clientHeight","overflowY","modalTransitionDuration","modalBody","Node","ELEMENT_NODE","appendChild","removeAttribute","scrollTop","_enforceFocus","shownEvent","transitionComplete","_this5","has","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","callback","_this9","createElement","className","appendTo","backdropTransitionDuration","callbackRemove","_backdropTransitionDuration","paddingLeft","paddingRight","rect","round","innerWidth","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","marginRight","calculatedMargin","padding","elements","scrollDiv","scrollbarWidth","clientWidth","removeChild","_this11","uriAttrs","DefaultWhitelist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","allowedAttributeList","attrName","nodeName","nodeValue","regExp","attrRegex","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","DOMParser","parseFromString","whitelistKeys","keys","_loop","el","elName","attributeList","attributes","whitelistedAttributes","concat","innerHTML","NAME$4","VERSION$4","DATA_KEY$4","EVENT_KEY$4","JQUERY_NO_CONFLICT$4","CLASS_PREFIX$1","BSCLS_PREFIX_REGEX$1","DISALLOWED_ATTRIBUTES","CLASS_NAME_FADE$3","CLASS_NAME_SHOW$3","HOVER_STATE_SHOW","HOVER_STATE_OUT","SELECTOR_TOOLTIP_INNER","SELECTOR_ARROW","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default$3","animation","container","fallbackPlacement","customClass","sanitize","DefaultType$3","Event$1","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","dataKey","DATA_KEY","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","EVENT_KEY","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","ownerDocument","tipId","NAME","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","_fixTransition","prevHoverState","_cleanTipClass","getTitle","setElementContent","text","empty","behavior","arrow","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","eventIn","eventOut","_fixTitle","titleType","dataAttributes","dataAttr","$tip","tabClass","join","popperData","instance","popper","initConfigAnimation","NAME$3","VERSION$3","DATA_KEY$3","EVENT_KEY$3","JQUERY_NO_CONFLICT$3","CLASS_PREFIX","BSCLS_PREFIX_REGEX","CLASS_NAME_FADE$2","CLASS_NAME_SHOW$2","SELECTOR_TITLE","SELECTOR_CONTENT","Default$2","DefaultType$2","Popover","_Tooltip","_getContent","NAME$2","VERSION$2","DATA_KEY$2","EVENT_KEY$2","DATA_API_KEY$1","JQUERY_NO_CONFLICT$2","CLASS_NAME_DROPDOWN_ITEM","CLASS_NAME_ACTIVE$1","EVENT_ACTIVATE","EVENT_SCROLL","EVENT_LOAD_DATA_API","METHOD_OFFSET","METHOD_POSITION","SELECTOR_DATA_SPY","SELECTOR_NAV_LIST_GROUP$1","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_DROPDOWN$1","SELECTOR_DROPDOWN_ITEMS","SELECTOR_DROPDOWN_TOGGLE$1","Default$1","method","DefaultType$1","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","map","targetSelector","targetBCR","sort","pageYOffset","_getOffsetHeight","innerHeight","maxScroll","_activate","_clear","queries","$link","parents","node","scrollSpys","$spy","NAME$1","VERSION$1","DATA_KEY$1","EVENT_KEY$1","DATA_API_KEY","JQUERY_NO_CONFLICT$1","CLASS_NAME_DROPDOWN_MENU","CLASS_NAME_ACTIVE","CLASS_NAME_DISABLED","CLASS_NAME_FADE$1","CLASS_NAME_SHOW$1","EVENT_HIDE$1","EVENT_HIDDEN$1","EVENT_SHOW$1","EVENT_SHOWN$1","EVENT_CLICK_DATA_API","SELECTOR_DROPDOWN","SELECTOR_NAV_LIST_GROUP","SELECTOR_ACTIVE","SELECTOR_ACTIVE_UL","SELECTOR_DATA_TOGGLE","SELECTOR_DROPDOWN_TOGGLE","SELECTOR_DROPDOWN_ACTIVE_CHILD","Tab","previous","listElement","itemSelector","makeArray","hiddenEvent","active","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","$this","VERSION","JQUERY_NO_CONFLICT","CLASS_NAME_FADE","CLASS_NAME_HIDE","CLASS_NAME_SHOW","CLASS_NAME_SHOWING","EVENT_CLICK_DISMISS","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","SELECTOR_DATA_DISMISS","autohide","Toast","_clearTimeout","_close","Scrollspy","factory","undefined","_ext","_Api","_api_register","_api_registerPlural","DataTable","sSelector","oOpts","api","rows","traditional","_fnSettingsFromNode","iApiIndex","fnAddData","redraw","isArray","isPlainObject","row","draw","flatten","toArray","fnAdjustColumnSizing","bRedraw","columns","adjust","scroll","oScroll","sX","sY","_fnScrollDraw","fnClearTable","clear","fnClose","nTr","child","fnDeleteRow","aoData","fnDestroy","fnDraw","fnFilter","sInput","iColumn","bRegex","bSmart","bShowGlobal","bCaseInsensitive","search","column","fnGetData","src","cell","fnGetNodes","iRow","nodes","fnGetPosition","columnVisible","fnIsOpen","isShown","fnOpen","mHtml","sClass","fnPageChange","mAction","page","fnSetColumnVis","iCol","bShow","visible","fnSettings","fnSort","aaSort","order","fnSortListener","nNode","fnCallback","listener","fnUpdate","mData","mRow","bAction","fnVersionCheck","_that","emptyInit","oApi","internal","ext","_fnExternApiFunc","iLen","oInit","_fnExtend","sId","bInitHandedOff","_fnCompatOpts","_fnCompatCols","_fnCamelToHungarian","allSettings","nTable","nTHead","nTFoot","bRetrieve","bDestroy","oInstance","_fnLog","sTableId","splice","_unique","oSettings","models","dataTable","_fnLanguageCompat","oLanguage","aLengthMenu","iDisplayLength","_fnMap","oFeatures","_fnCallbackReg","fnDrawCallback","fnServerParams","fnStateSaveParams","fnStateLoadParams","fnStateLoaded","fnRowCallback","fnCreatedRow","fnHeaderCallback","fnFooterCallback","fnInitComplete","fnPreDrawCallback","rowIdFn","_fnGetObjectDataFn","rowId","_fnBrowserDetect","oClasses","classes","sTable","iInitDisplayStart","iDisplayStart","_iDisplayStart","iDeferLoading","bDeferLoading","tmp","_iRecordsDisplay","_iRecordsTotal","sUrl","ajax","dataType","success","json","_fnCallbackFire","_fnInitialise","error","asStripeClasses","sStripeOdd","sStripeEven","stripeClasses","rowOne","eq","inArray","asDestroyStripes","aoColumnsInit","anThs","nThead","getElementsByTagName","_fnDetectHeader","aoHeader","_fnGetUniqueThs","aoColumns","_fnAddColumn","_fnApplyColumnDefs","aoColumnDefs","oDef","_fnColumnOptions","name","features","loadedInit","aaSorting","sorting","asSorting","_fnSortingClasses","bSort","bSorted","aSort","_fnSortFlatten","sortedColumns","val","dir","_fnSortAria","_fnDataSource","bDeferRender","captions","_captionSide","thead","tbody","insertAfter","nTBody","tfoot","sNoFooter","aoFooter","aaData","_fnAddData","_fnAddTr","aiDisplay","aiDisplayMaster","bInitialised","_fnSaveState","bStateSave","_fnLoadState","_re_dic","_re_new_lines","_re_html","_re_date","_re_escape_regex","_re_formatted_numeric","_empty","d","_intVal","integer","isNaN","isFinite","_numToDecimal","num","decimalPoint","_fnEscapeRegex","_isNumber","formatted","strType","_isHtml","_htmlNumeric","_stripHtml","_pluck","prop","prop2","out","ien","_pluck_order","_range","_removeEmpty","_areAllUnique","sorted","last","j","k","again","_flatten","_includes","arg","includes","_fnHungarianMap","newKey","hungarian","_hungarianMap","user","force","hungarianKey","charAt","lang","defaultDecimal","sDecimal","_addNumericSort","zeroRecords","sZeroRecords","sEmptyTable","sLoadingRecords","sInfoThousands","sThousands","decimal","util","throttle","freq","frequency","that","now","Date","args","escapeRegex","set","meta","setData","arrayNotation","funcNotation","innerSrc","_fnSplitObjNotation","aLast","__reArray","__reFn","jLen","t","fetchData","substring","_fnCompatMap","knew","old","sScrollX","scrollX","searchCols","aoSearchCols","oSearch","dataSort","aDataSort","__browser","browser","n","scrollLeft","overflow","outer","inner","barWidth","offsetWidth","bScrollOversize","bScrollbarLeft","bBounding","oBrowser","iBarWidth","_fnReduce","inc","isSet","nTh","oDefaults","oCol","oColumn","sTitle","idx","aoPreSearchCols","oOptions","th","sWidthOrig","mDataProp","sType","_sManualType","origClass","iDataSort","mDataSrc","mRender","attrTest","_bAttrSrc","_setter","rowData","innerData","fnSetData","_fnSetObjectDataFn","_rowReadObject","bSortable","sSortableNone","bAsc","bDesc","sSortingClass","sSortableAsc","sSortingClassJUI","sSortJUIAscAllowed","sSortableDesc","sSortJUIDescAllowed","sSortable","sSortJUI","_fnAdjustColumnSizing","bAutoWidth","_fnCalculateColumnWidths","sWidth","_fnVisibleToColumnIndex","iMatch","aiVis","_fnGetColumns","_fnColumnIndexToVisible","iPos","_fnVisbleColumns","vis","bVisible","sParam","_fnColumnTypes","jen","ken","detectedType","cache","types","detect","_fnGetCellData","aoColDefs","aoCols","kLen","def","aTargets","targets","aDataIn","anTds","oData","oRow","_aData","aIds","_fnCreateTr","trs","_fnGetRowElements","cells","_fnNodeToDataIndex","_DT_RowIndex","_fnNodeToColumnIndex","anCells","rowIdx","colIdx","iDraw","defaultContent","sDefaultContent","cellData","iDrawError","fomatters","_fnSetCellData","_fnGetDataMaster","_fnClearTable","_fnDeleteIndex","iTarget","iTargetIndex","_fnInvalidate","cellWrite","childNodes","firstChild","_aSortData","_aFilterData","cols","_fnRowAttributes","contents","tds","td","objectRead","setter","cellProcess","nextSibling","rowNode","nTrIn","nTd","sCellType","_DT_CellIndex","fnCreatedCell","tr","DT_RowClass","__rowc","DT_RowAttr","DT_RowData","_fnBuildHead","createHeader","iTabIndex","_fnSortAttachListener","_fnRenderer","sHeaderTH","sFooterTH","nTf","_fnDrawHead","aoSource","bIncludeHidden","nLocalTr","iRowspan","iColspan","aoLocal","aApplied","iColumns","_fnDraw","ajaxComplete","_fnStart","aPreDraw","anRows","iRowCount","iStripes","oLang","bServerSide","iDisplayEnd","fnDisplayEnd","bDrawing","_fnProcessingDisplay","bDestroying","_fnAjaxUpdate","iStart","iEnd","iDataIndex","nRow","sStripe","_sRowStripe","sZero","fnRecordsTotal","sRowEmpty","bFiltered","_fnReDraw","holdPosition","bFilter","_fnSort","_fnFilterComplete","oPreviousSearch","_drawHold","_fnAddOptionsHtml","table","holding","insertBefore","insert","sWrapper","nHolding","nTableWrapper","nTableReinsertBefore","featureNode","cOption","nNewNode","cNext","sAttr","aDom","sDom","sJUIHeader","sJUIFooter","aSplit","substr","bPaginate","bLengthChange","_fnFeatureHtmlLength","_fnFeatureHtmlFilter","bProcessing","_fnFeatureHtmlProcessing","_fnFeatureHtmlTable","bInfo","_fnFeatureHtmlInfo","_fnFeatureHtmlPaginate","feature","aoFeatures","cFeature","fnInit","aanFeatures","replaceWith","aLayout","nCell","l","iColShifted","bUnique","nTrs","fnShiftCol","nHeader","aReturn","unique","bSortCellsTop","fnRecordsDisplay","_fnBuildAjax","rbracket","ajaxData","status","jqXHR","_fnAjaxDataSrc","sError","newData","baseAjax","sServerMethod","xhr","thrown","ret","readyState","oAjaxData","fnServerData","sAjaxSource","_fnAjaxParameters","_fnAjaxUpdateDraw","dataProp","columnSearch","columnCount","preSearch","preColSearch","displayStart","displayLength","_iDisplayLength","param","sSearch","regex","sName","searchable","bSearchable","orderable","legacy","compat","modern","recordsTotal","recordsFiltered","_bInitComplete","_fnInitComplete","write","dataSrc","sAjaxDataProp","tableId","language","previousSearch","sFilterInput","f","sFilter","searchFn","return","searchDelay","jqFilter","sSearchPlaceholder","_fnThrottle","keyCode","ev","oInput","iForce","oPrevSearch","aoPrevSearch","fnSaveFilter","oFilter","fnRegex","bEscapeRegex","_fnFilter","_fnFilterColumn","_fnFilterCustom","filters","displayRows","merge","searchStr","smart","caseInsensitive","rpSearch","_fnFilterCreateSearch","invalidated","prevSearch","displayMaster","filtered","_fnFilterData","_sFilterRow","word","m","__filter_div","__filter_div_textContent","textContent","filterData","wasInvalidated","innerText","_fnSearchToCamel","_fnSearchToHung","tid","sInfo","aoDrawCallback","_fnUpdateInfo","total","sInfoEmpty","sInfoFiltered","_fnInfoMacros","sInfoPostFix","fnInfoCallback","formatter","fnFormatNumber","all","ceil","iAjaxStart","deferLoading","_fnStringToCss","aData","_fnLengthChange","_fnLengthOverflow","menu","d2","lengths","select","sLengthSelect","Option","sLength","sLengthMenu","outerHTML","sPaginationType","plugin","pager","sPaging","visRecords","pages","_fnPageChange","records","floor","changed","r","sProcessing","scrollY","caption","captionSide","headerClone","cloneNode","footerClone","footer","_div","size","scroller","sScrollWrapper","sScrollHead","border","sScrollHeadInner","sXInner","removeAttr","sScrollBody","sScrollFoot","sScrollFootInner","scrollHead","scrollBody","scrollFoot","bCollapse","nScrollHead","nScrollBody","nScrollFoot","headerTrgEls","footerTrgEls","headerSrcEls","footerSrcEls","headerCopy","footerCopy","correction","sanityWidth","scrollXInner","divHeader","divHeaderStyle","divHeaderInner","divHeaderInnerStyle","divHeaderTable","divBodyEl","divBody","divBodyStyle","divFooterInner","divFooterTable","header","tableEl","tableStyle","ie67","headerWidths","footerWidths","headerContent","footerContent","zeroOut","nSizer","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","scrollBarVis","clone","prependTo","_fnApplyToChildren","outerWidth","getComputedStyle","nToSize","iOuterWidth","bScrolling","an1","an2","nNode1","nNode2","__re_html_remove","columnIdx","visibleColumns","headerCells","tableWidthAttr","tableContainer","userInputs","styleWidth","_fnConvertToWidth","tmpTable","_fnGetWidestNode","sContentPadding","holder","bounding","_reszEvt","bindResize","sInstance","_fnGetMaxLenString","maxIdx","srcCol","fixed","aaSortingFixed","fixedObj","nestedSort","post","_idx","sortCol","aiOrig","oExtSort","formatters","_fnSortData","dataA","dataB","label","nextSort","oAria","ariaTitle","sSortAscending","sSortDescending","_fnSortListener","nextSortIdx","bSortMulti","sortIdx","attachTo","_fnBindAction","shiftKey","oldSort","aLastSort","sortClass","sSortColumn","bSortClasses","customData","customSort","sSortDataType","_bLoadingState","state","time","oSavedState","fnStateSaveCallback","loaded","_fnImplementState","fnStateLoadCallback","Api","abStateLoad","iStateDuration","oLoadedState","level","msg","tn","console","log","sErrMode","errMode","alert","mappedName","extender","breakRefs","sStore","callbackArr","eventName","reverse","result","renderer","host","__apiStruct","__arrayProto","_toSettings","mixed","jq","tables","ctxSettings","opts","any","count","ctx","iterator","alwaysNew","apiInst","_selector_row_indexes","apiSelector","lastIndexOf","pluck","pop","reduce","reduceRight","shift","to$","toJQuery","unshift","scope","__dt_wrapper","struct","methodScoping","struc","methodExt","propExt","register","heir","registerPlural","pluralName","singularName","__table_selector","paging","info","__reload","abort","resetPaging","_selector_run","selectFn","res","selectorType","_selector_opts","_selector_first","inst","displayFiltered","displayFilteredMap","__row_selector","sel","selInt","cellIdx","rowObj","hash","thatIdx","loopRow","loopCells","newRows","modRows","idFn","ids","_detailsShow","childRows","every","__details_add","klass","addRow","created","colSpan","_details","__details_state","__details_remove","__details_display","__details_events","namespace","drawEvent","colvisEvent","destroyEvent","_child_obj","_child_mth","__re_column_selector","__columnData","r1","r2","__column_selector","names","run","visColumns","jqResult","__setColumnVis","calc","__cell_selector","allCells","fnSelector","rowSelector","columnSelector","internalOpts","cellsNoOpts","selected","caseInsen","versionCheck","iThis","iThat","aThis","aThat","isDataTable","fnIsDataTable","head","foot","fnTables","camelToHungarian","jqRows","jqTable","jqTbody","jqWrapper","orig","removedMethod","sDestroyWidth","arg1","arg2","arg3","arg4","token","plural","resolved","toFormat","JSON","parse","sessionStorage","localStorage","getItem","location","pathname","setItem","stringify","paginate","min","builder","pageButton","oJUIClasses","sVersion","afnFiltering","aTypes","ofnSearch","oSort","afnSortData","oStdClasses","oPagination","extPagination","_numbers","numbers","numbers_length","half","DT_el","simple","full","simple_numbers","full_numbers","first_last_numbers","btnDisplay","btnClass","activeEl","oPaginate","aria","counter","attach","tabIndex","disabledClass","sPageButtonDisabled","clickHandler","sFirst","sPrevious","sNext","sLast","sPageButtonActive","sPageButton","parsed","string","__numericReplace","decimalPlace","re1","re2","Infinity","ts","sSortAsc","sSortDesc","jqueryui","sSortJUIWrapper","sSortIcon","sSortJUIAsc","sSortJUIDesc","__htmlEscapeEntities","__mld","dt","momentFn","luxonFn","dateFn","moment","luxon","__mlWarning","__mldObj","locale","utc","isValid","DateTime","fromFormat","fromISO","setLocale","__mlHelper","localeString","typeName","valueOf","local","UTC","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","__thousands","__decimal","Intl","NumberFormat","formatToParts","datetime","render","date","number","thousands","precision","postfix","negative","flo","toFixed","intPart","floatPart","_fnCalculateEnd","dataTableSettings","dataTableExt","support","touchHandled","mouseProto","ui","mouse","_mouseInit","_mouseDestroy","_touchStart","_mouseCapture","changedTouches","_touchMoved","simulateMouseEvent","_touchMove","_touchEnd","touchstart","proxy","touchmove","touchend","unbind","simulatedType","simulatedEvent","createEvent","initMouseEvent","screenX","screenY","clientY","dispatchEvent","jQuery","module","debug","firefox","userAgent","macosx","platform","msedge","msie","mobile","overlay","scrolls","webkit","autoScrollSize","autoUpdate","disableBodyScroll","ignoreMobile","ignoreOverlay","isRtl","scrollStep","showArrows","stepScrolling","scrollx","scrolly","onDestroy","onFallback","onInit","onScroll","BaseScrollbar","isScrollOverlaysContent","getBrowserScrollSize","updateScrollbars","resize","forceUpdate","jQueryScrollbarOptions","scrollTo","wrapper","addBack","S","c","cw","containerWrapper","w","cssOptions","initScroll","scrollWidth","maxScrollOffset","isVisible","bar","kx","handleMouseScroll","isVerticalScroll","mousewheel","originalTouch","pageX","pageY","originalScroll","targetTouches","scrollCallback","scrollForward","scrollOffset","currentOffset","scrollToValue","_getScroll","delta","wheelDelta","detail","maxScrollValue","deltaX","deltaY","stop","eventOffset","scrollbarOffset","scrollbarSize","timeout","_handleMouseDown","eventPosition","initOffset","diff","scrollClass","_updateScroll","cssOffset","cssFullSize","cssSize","AreaSize","AreaVisible","advanced","track","CustomScrollbar","scrollbar","timerCounter","angular","visibleHeight","visibleWidth","actualSize","axis","HORIZONTAL_AXIS","wheelDeltaX","provider","defaultOptions","setOptions","$get","copy","directive","jQueryScrollbar","$parse","restrict","link","attrs","jqueryScrollbar","model","global","noGlobal","arr","getProto","getPrototypeOf","flat","array","class2type","hasOwn","fnToString","ObjectFunctionString","isWindow","preservedScriptAttributes","nonce","noModule","DOMEval","doc","script","isArrayLike","pushStack","elems","prevObject","first","even","grep","_elem","odd","copyIsArray","deep","expando","isReady","proto","Ctor","isEmptyObject","globalEval","results","second","invert","matches","callbackExpect","guid","Symbol","Sizzle","Expr","getText","isXML","tokenize","compile","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","pushNative","list","booleans","whitespace","identifier","pseudos","rwhitespace","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","els","seed","nid","groups","newSelector","newContext","exec","getElementsByClassName","qsa","testContext","toSelector","qsaError","cacheLength","markFunction","assert","addHandle","attrHandle","siblingCheck","cur","sourceIndex","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespaceURI","hasCompare","subWindow","defaultView","addEventListener","attachEvent","createComment","getById","getElementsByName","attrId","getAttributeNode","tag","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","specified","uniqueSort","duplicates","detectDuplicates","sortStable","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","what","_argument","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","useCache","lastChild","uniqueID","pseudo","setFilters","matched","matcher","unmatched","elemLang","hasFocus","href","selectedIndex","_matchIndexes","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","_name","defaultValue","isXMLDoc","escapeSelector","until","truncate","siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","sibling","parentsUntil","nextUntil","prevUntil","contentDocument","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","promise","fail","then","Callbacks","object","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","lock","fireWith","Deferred","func","tuples","always","pipe","fns","newDefer","tuple","returned","progress","onFulfilled","onRejected","onProgress","maxDepth","depth","mightThrow","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","when","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","stack","warn","readyException","readyList","completed","removeEventListener","catch","readyWait","wait","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","camelCase","acceptData","owner","Data","uid","hasData","dataPriv","dataUser","rbrace","rmultiDash","getData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","clearQueue","defer","pnum","rcssNum","cssExpand","isAttached","composed","isHiddenWithinTree","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","values","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","noCloneChecked","option","wrapMap","_default","getAll","setGlobalEval","refElements","colgroup","optgroup","buildFragment","scripts","selection","ignored","attached","fragment","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","origFn","leverageNative","notAsync","saved","isTrigger","stopImmediatePropagation","handleObjIn","eventHandle","events","handlers","namespaces","origType","elemData","triggered","dispatch","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","load","noBubble","beforeunload","returnValue","defaultPrevented","timeStamp","isSimulated","altKey","bubbles","cancelable","ctrlKey","eventPhase","metaKey","view","charCode","offsetX","offsetY","pointerId","toElement","blur","mouseenter","mouseleave","pointerenter","pointerleave","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","prepend","before","after","replaceChild","replaceAll","original","rnumnonpx","getStyles","opener","swap","rboxStyle","curCSS","computed","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","measure","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","trChild","trStyle","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","boxModelAdjustment","box","isBorderBox","styles","computedVal","extra","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","origName","isCustomProp","setProperty","scrollboxSizeBuggy","suffix","expand","expanded","parts","propHooks","eased","pos","step","fx","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","requestAnimationFrame","tick","createFxNow","genFx","includeWidth","createTween","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflowX","prefilter","speed","opt","speeds","fadeTo","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","checkOn","optSelected","radioValue","boolHook","nType","attrHooks","bool","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","curValue","clazz","finalValue","stateVal","isValidValue","classNames","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","parserErrorElem","rCRLF","rsubmitterTypes","rsubmittable","buildParams","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataTypes","inspectPrefiltersOrTransports","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","lastModified","etag","isLocal","protocol","processData","async","contentType","accepts","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","statusText","finalText","crossDomain","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","XMLHttpRequest","xhrSuccessStatus","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","params","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","win","pageXOffset","offsetParent","parentOffset","Height","Width","defaultExtra","funcName","delegate","undelegate","hover","fnOver","fnOut","holdReady","hold","parseJSON","isNumeric","_jQuery","_$","FUNC_ERROR_TEXT","HASH_UNDEFINED","PLACEHOLDER","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","INFINITY","MAX_SAFE_INTEGER","NAN","MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","g","freeSelf","Function","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","require","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","nodeIsTypedArray","isTypedArray","thisArg","arrayAggregator","iteratee","accumulator","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","eachFunc","baseFindIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseTrim","trimmedEndIndex","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","overArg","transform","replaceHolders","setToArray","setToPairs","stringSize","lastIndex","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","runInContext","pick","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","Uint8Array","allocUnsafe","getPrototype","objectCreate","propertyIsEnumerable","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","toStringTag","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","DataView","Map","Promise","Set","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","isObject","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","entries","entry","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","cloneArrayBuffer","dataView","buffer","byteOffset","byteLength","cloneDataView","cloneTypedArray","regexp","cloneRegExp","symbol","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","baseDifference","isCommon","valuesLength","valuesIndex","templateSettings","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","path","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","seen","baseInvoke","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","criteria","comparer","baseSortBy","objCriteria","othCriteria","ordersLength","compareAscending","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","methodName","trailing","createCompounder","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","getFuncName","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","newHolders","createRecurry","reorder","createInverter","toIteratee","baseInverter","createMathOperation","createOver","arrayFunc","createPadding","chars","charsLength","createRange","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","setWrapToString","createRound","toInteger","pair","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrLength","arrStacked","arrValue","otherFunc","getValue","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","ctorString","isMaskable","stubFalse","otherArgs","oldArray","shortOut","details","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","rand","memoize","memoizeCapped","quote","subString","difference","differenceBy","differenceWith","findIndex","findLastIndex","intersection","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","bindKey","WRAP_BIND_FLAG","debounce","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","cancel","flush","resolver","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isError","isInteger","isNumber","isString","lt","lte","iteratorToArray","remainder","toLength","isBinary","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invertBy","invoke","omit","CLONE_DEEP_FLAG","basePick","pickBy","toPairs","toPairsIn","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","minuend","subtrahend","castArray","chunk","compact","cond","conforms","baseConforms","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","fill","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","fromPairs","functions","functionsIn","mapKeys","mapValues","matchesProperty","nthArg","omitBy","orderBy","propertyOf","pullAllBy","pullAllWith","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","separator","limit","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","updateWith","valuesIn","zipObject","zipObjectDeep","entriesIn","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","escapeRegExp","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","pad","strLength","padEnd","padStart","radix","floating","repeat","sample","some","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","isEscaping","isEvaluating","imports","importsKeys","importsValues","interpolate","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","times","toLower","toSafeInteger","toUpper","trimEnd","trimStart","omission","newEnd","unescape","uniqueId","eachRight","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","isRight","getView","iterLength","takeCount","iterIndex","commit","wrapped","toJSON","NProgress","Settings","minimum","positionUsing","trickle","trickleRate","trickleSpeed","showSpinner","barSelector","spinnerSelector","toBarPerc","barPositionCSS","ease","barCSS","configure","started","isStarted","getPositioningCSS","work","amount","$promise","fromStart","isRendered","spinner","perc","removeElement","bodyStyle","vendorPrefix","pending","getVendorProp","vendorName","getStyleProp","applyCss","oldList","newList","isBrowser","timeoutDuration","longerTimeoutBrowsers","scheduled","functionToCheck","getStyleComputedProperty","getParentNode","getScrollParent","_getStyleComputedProp","getReferenceNode","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","noOffsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","DOCUMENT_POSITION_FOLLOWING","setStart","setEnd","commonAncestorContainer","element1root","getScroll","side","upperSide","scrollingElement","includeScroll","modifier","bottom","getBordersSize","sideA","sideB","getSize","computedStyle","getWindowSizes","classCallCheck","createClass","defineProperties","getClientRect","sizes","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderLeftWidth","marginTop","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","isFixed","getFixedPositionOffsetParent","parentElement","getBoundaries","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","getArea","_ref","computeAutoPlacement","refRect","rects","sortedAreas","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","commonOffsetParent","getOuterSizes","marginBottom","getOppositePlacement","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","runModifiers","ends","isDestroyed","arrowStyles","flipped","positionFixed","isCreated","isModifierEnabled","modifierName","getSupportedPropertyName","prefixes","upperProp","toCheck","willChange","disableEventListeners","removeOnDestroy","getWindow","attachToScrollParents","scrollParents","isBody","passive","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","cancelAnimationFrame","setStyles","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","divider","splitRegex","ops","op","mergeWithPrevious","toValue","index2","shiftvariation","_data$offsets","isVertical","shiftOffsets","transformProp","popperStyles","priority","escapeWithReference","secondary","keepTogether","opSide","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","onLoad","modifierOptions","Defaults","Utils","PopperUtils","S2","select2","amd","requirejs","define","undef","main","req","makeMap","defined","waiting","defining","aps","jsSuffixRegExp","hasProp","normalize","baseName","nameParts","nameSegment","mapValue","foundMap","foundI","foundStarMap","starI","part","baseParts","starMap","nodeIdCompat","makeRequire","relName","forceSync","makeNormalize","makeLoad","depName","callDep","splitPrefix","makeRelParts","makeConfig","relParts","relResourceName","pr","uri","deps","cjsModule","usingExports","callbackType","alt","cfg","_defined","getMethods","theClass","methods","Extend","ChildClass","SuperClass","__hasProp","BaseConstructor","__super__","Decorate","DecoratorClass","decoratedMethods","superMethods","DecoratedClass","argCount","calledConstructor","ctr","displayName","superMethod","calledMethod","originalMethod","decoratedMethod","Observable","listeners","_type","generateChars","_convertData","originalKey","dataLevel","hasScroll","$el","escapeMarkup","markup","replaceMap","appendMany","$nodes","$jqNodes","__cache","GetUniqueElementId","select2Id","StoreData","GetData","RemoveData","Results","dataAdapter","$results","displayMessage","hideLoading","$message","hideMessages","$options","$option","$dropdown","sorter","highlightFirstItem","$selected","ensureHighlightVisible","setClasses","selectedIds","showLoading","loading","loadingMore","$loading","Element","_resultId","role","$children","$child","$childrenContainer","$container","$highlighted","getHighlightedResults","currentIndex","nextIndex","$next","nextTop","nextOffset","nextBottom","isAtTop","isAtBottom","offsetDelta","BACKSPACE","TAB","ENTER","SHIFT","CTRL","ALT","ESC","SPACE","PAGE_UP","PAGE_DOWN","END","HOME","UP","DOWN","DELETE","KEYS","BaseSelection","$selection","_tabindex","resultsId","_handleBlur","_attachCloseHandler","_detachCloseHandler","$select","isEnabled","SingleSelection","$rendered","selectionContainer","MultipleSelection","$selections","Placeholder","decorated","normalizePlaceholder","createPlaceholder","$placeholder","singlePlaceholder","AllowClear","_handleClear","_handleKeyboardClear","$clear","previousVal","unselectData","prevented","removeAll","$remove","Search","$search","$searchContainer","_transferTabIndex","_keyUpPrevented","$previousChoice","searchRemoveChoice","disableInputEvents","handleSearch","searchHadFocus","resizeSearch","term","EventRelay","relayEvents","preventableEvents","Translation","dict","translation","_cache","loadPath","translations","BaseAdapter","query","generateResultId","SelectAdapter","currentData","unselect","addOptions","normalizedData","_normalizeItem","ArrayAdapter","_dataToConvert","convertToOptions","elm","$existing","existingIds","onlyItem","$existingOption","existingData","$newOption","AjaxAdapter","ajaxOptions","_applyDefaults","processResults","q","failure","$request","_request","request","_queryTimeout","Tags","tags","createTag","insertTag","checkChildren","_removeOldTags","Tokenizer","tokenizer","dropdown","createAndSelect","tokenData","separators","termChar","MinimumInputLength","$e","minimumInputLength","MaximumInputLength","maximumInputLength","maximum","MaximumSelectionLength","maximumSelectionLength","_checkIfMaximumSelected","successCallback","showSearch","HidePlaceholder","removePlaceholder","modifiedData","InfiniteScroll","lastParams","$loadingMore","createLoadingMore","showLoadingMore","loadMoreIfNeeded","isLoadMoreVisible","loadMore","pagination","more","AttachBody","$dropdownParent","_showDropdown","_attachPositioningHandler","_bindContainerResultHandlers","_hideDropdown","_detachPositioningHandler","$dropdownContainer","_containerResultsHandlersBound","_positionDropdown","_resizeDropdown","scrollEvent","resizeEvent","orientationEvent","$watchers","$window","isCurrentlyAbove","isCurrentlyBelow","newDirection","viewport","enoughRoomAbove","enoughRoomBelow","$offsetParent","isConnected","countResults","MinimumResultsForSearch","minimumResultsForSearch","SelectOnClose","_handleSelectOnClose","originalSelect2Event","$highlightedResults","CloseOnSelect","_selectTriggered","errorLoading","inputTooLong","overChars","inputTooShort","maximumSelected","noResults","searching","removeAllItems","ResultsList","SelectionSearch","DIACRITICS","SelectData","ArrayData","AjaxData","DropdownSearch","EnglishTranslation","tokenSeparators","Query","amdBase","initSelection","InitSelection","resultsAdapter","selectOnClose","dropdownAdapter","multiple","SearchableDropdown","closeOnSelect","dropdownCssClass","dropdownCss","adaptDropdownCssClass","DropdownCSS","selectionAdapter","allowClear","containerCssClass","containerCss","adaptContainerCssClass","ContainerCSS","_resolveLanguage","uniqueLanguages","_processTranslations","stripDiacritics","amdLanguageBase","dropdownAutoWidth","scrollAfterSelect","templateResult","templateSelection","theme","applyFromElement","optionLanguage","defaultLanguage","elementLanguage","parentLanguage","languages","resolvedLanguages","baseLanguage","languageData","convertedData","Options","fromElement","InputCompat","excludedData","dataset","upperCaseLetter","attributeName","dataName","dataValue","Select2","_generateId","DataAdapter","_placeContainer","SelectionAdapter","DropdownAdapter","ResultsAdapter","_bindAdapters","_registerDomEvents","_registerDataEvents","_registerSelectionEvents","_registerDropdownEvents","_registerResultsEvents","_registerEvents","initialData","_syncAttributes","_resolveWidth","WIDTH","elementWidth","_syncA","_syncS","_syncSubtree","observer","MutationObserver","WebKitMutationObserver","MozMutationObserver","_observer","mutations","observe","childList","subtree","nonRelayEvents","toggleDropdown","_isChangeMutation","addedNodes","removedNodes","mutation","actualTrigger","preTriggerMap","preTriggerName","preTriggerArgs","newVal","detachEvent","disconnect","thisMethods","instanceOptions","__esModule","default","CLASS_NAMES","MODAL","OVERLAY","SHOW_MODAL","MODAL_TITLE","MODAL_TEXT","ICON","ICON_CUSTOM","CONTENT","FOOTER","BUTTON_CONTAINER","BUTTON","CONFIRM_BUTTON","CANCEL_BUTTON","DANGER_BUTTON","BUTTON_LOADING","BUTTON_LOADER","getNode","stringToNode","removeNode","throwErr","ordinalSuffixOf","overlayMarkup","iconMarkup","titleMarkup","textMarkup","footerMarkup","CONFIRM_KEY","CANCEL_KEY","closeModal","defaultButtonList","confirm","getButtonListOpts","injectElIntoModal","initModalContent","initTitle","initText","dangerMode","modalMarkup","resetState","setActionValue","setActionOptionsFor","openModal","onAction","getState","stopLoading","eval","sweetAlert","swal","insertAt","locals","btoa","sourceRoot","refs","media","sourceMap","insertInto","rel","singleton","h","URL","createObjectURL","revokeObjectURL","Blob","styleSheet","convertToAbsoluteUrls","atob","DEBUG","CharacterData","DocumentType","_state","_handled","_value","_deferreds","_immediateFn","_unhandledRejectionFn","race","_setImmediateFn","_setUnhandledRejectionFn","setImmediate","_id","_clearFn","unref","ref","enroll","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","clearImmediate","nextTick","postMessage","importScripts","onmessage","MessageChannel","port1","port2","fun","env","argv","versions","addListener","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","cwd","chdir","umask","polyfill","getOwnPropertyDescriptor","getOpts","setDefaults","errorIconMarkup","warningIconMarkup","successIconMarkup","contentMarkup","buttonMarkup","warning","O","closeOnEsc","closeOnClickOutside","getContentOpts","DEPRECATED_OPTS","logDeprecation","onlyRename","replacement","subOption","imageUrl","imageSize","showCancelButton","showConfirmButton","confirmButtonText","confirmButtonColor","cancelButtonText","closeOnConfirm","closeOnCancel","showLoaderOnConfirm","inputType","inputValue","inputPlaceholder","allowEscapeKey","allowClickOutside","typeOf$1","isPrototypeOf","eq$2","eqString","eqArray","eqa","eqSortedArray","compareFn","contramap","xs","sort$1","eqRecord","ky","eqAny","tx","isEquatableType","isType$1","isSimpleType","eq$1","isString$1","isArray$1","isNullable","isNonNullable","compose","fa","fb","compose1","fbc","fab","tripleEquals","initialArgs","restArgs","never","none","NONE","thunk","fold","_s","isSome","isNone","getOr","getOrThunk","getOrDie","getOrNull","getOrUndefined","or","orThunk","exists","forall","constant_a","me","Optional","nativeSlice","nativeIndexOf","nativePush","rawIndexOf","contains$3","pred","map$3","each$k","eachr","pass","filter$4","foldr","acc","foldl","findUntil$1","find$3","findIndex$2","a1","a2","get$a","last$2","findMap","hasOwnProperty$1","each$j","map$2","tupleMap","objAcc","internalFilter","onTrue","onFalse","filter$3","get$9","has$2","hasNonNullableKey","each$i","cb","map$1","filter$2","indexOf$1","findIndex$1","last$1","__assign","__spreadArray","pack","ar","unknown$2","nu$4","major","minor","Version","nu","versionRegexes","agent","cleanedAgent","regexes","firstMatch","Number","find$2","unknown","detect$2","candidates","candidate","contains$2","checkRange","blank","trim$4","lTrim","rTrim","isNotEmpty","isEmpty$3","normalVersionRegex","checkContains","uastring","browsers","brand","oses","PlatformInfo","edge","chrome","opera","safari","nu$3","isEdge","isChrome","isOpera","isSafari","Browser","ie","windows","android","linux","solaris","freebsd","chromeos","nu$2","isOS","isWindows","isiOS","isAndroid","isOSX","isLinux","isSolaris","isFreeBSD","isChromeOS","OperatingSystem","ios","osx","PlatformDetection","userAgentDataOpt","mediaMatch","userAgentData","brands","uaBrand","lcBrand","_a","detectBrowser$1","detectBrowser","os","detectOs","deviceType","isiPad","isiPhone","isMobile","isTouch","isTablet","isPhone","iOSwebview","isDesktop","isWebView","DeviceType","matchMedia","platform$2","platform$1","browser$4","fileApi","windowsPhone","Env","gecko","mac","iOS","contentEditable","transparentSrc","caretAfter","getSelection","ceFalse","cacheSuffix","experimentalShadowDom","canHaveCSP","desktop","whiteSpaceRegExp$2","trim$3","is$3","walk$3","Tools","delim","exts","name_1","sp","scn","de","cn","ns","createNS","static","walk","explode","_addCacheSuffix","fromDom$2","dom","SugarElement","fromHtml","hasChildNodes","fromTag","fromText","fromDom","fromPoint","docElm","elementFromPoint","recurse","is$2","bypassSelector","childElementCount","e1","e2","ieContains","DOCUMENT_POSITION_CONTAINED_BY","contains$1","d1","regularContains","isElement$6","isText$8","isDocument$2","isDocumentFragment$1","owner$1","documentOrOwner","dos","prevSibling","previousSibling","prevSiblings","nextSiblings","child$1","cs","childNodesCount","isShadowRoot","supported","isSupported$1","getStyleContainer","getHead","getShadowHost","isOpenShadowHost","before$4","marker","after$3","append$1","rogue","remove$7","children$1","inBody","getShadowRoot","translate","SugarPosition","firstDefinedOrZero","offsetLeft","offsetTop","boxPosition","get$8","_DOC","intoView","alignToTop","scrollIntoViewIfNeeded","scrollIntoView","bounds","getBounds","_win","get$7","visualViewport","pageLeft","pageTop","isNodeType","isRestrictedNode","isElement$5","matchNodeNames","lowercasedNames","matchStyleValues","isBogus$2","isTable$3","hasContentEditableState","isTextareaOrInput","isText$7","isComment","isDocument$1","isDocumentFragment","isBr$5","isImg","isContentEditableTrue$4","isContentEditableFalse$b","isTableCell$5","isMedia$2","is$1","lhs","rhs","lift2","oa","ob","isSupported","rawSet","set$1","setAll$1","get$6","getOpt","remove$6","setAll","internalSet","get$5","getUnsafeProperty","getRaw","getAllRaw","ruleName","browser$3","firstElement","hasChild","getPos","rootElm","clientLeft","clientTop","castOffsetParent","bodyTop","captionTop","captionHeight","getTableCaptionDeltaY","exports$1","module$1","commonjsGlobal","globalThis","setTimeoutFunc","doResolve","finale","Handler","reason","prom","promisePolyfill","boltExport","EphoxContactWrapper","Promise$1","nu$1","baseFn","callbacks","nCallback","cbs","LazyValue","pure","errorReporter","make","aFutureB","toPromise","anonBind","futureB","toLazy","toCached","Future","par$1","asyncValues","asyncValue","value$1","isValue","_opt","_f","onValue","mapError","toOptional","onError","Result","fromOption","Adt","cases","constructors","adt","acase","keys$1","argLength","branches","branchKeys","reqKey","foldArgs","bothErrors","firstError","secondError","bothValues","unite","ClosestOrAncestor","ancestor","isRoot","requestAnimationFramePromise","attrValue","select$1","document$1","ancestor$3","closest$3","ancestor$2","descendant","closest$2","promiseObj","wrappedSetTimeout","wrappedSetInterval","Delay","requestAnimationFrameFunc","vendors","setEditorTimeout","editor","removed","setEditorInterval","StyleSheetLoader","documentOrShadowRoot","idCount","loadedStates","edos","maxLoadTime","urlWithSuffix","passed","failed","getOrCreateState","waitForWebKitLinkLoaded","testCallback","waitCallback","styleSheets","ownerNode","linkElem","contentCssCors","referrerPolicy","loadF","unload","styleContainer","loadAll","urls","futures","unloadAll","_setReferrerPolicy","forElement","rootDom","sl","create$8","DomTreeWalker","startNode","rootNode","prev2","shallow","findSibling","findPreviousNode","startName","siblingName","lazyLookup","lookup","mapToObject","isHeading","isBlock$2","isInline$1","isBr$4","isTextBlock$2","isList","isListItem","isTableSection","isTableCell$4","isWsPreserveElement","nbsp","ZWSP$1","isZwsp","char","trim$2","isElement$4","isText$6","isCaretContainerBlock$1","isCaretContainerInline","isCaretContainer$2","isBeforeInline","isAtStart","isAfterInline","isAtEnd","insertBlock$1","blockName","blockNode","startsWithCaretContainer$1","endsWithCaretContainer$1","showCaretContainerBlock","caretContainer","brs","lastBr","isRangeInCaretContainerBlock","startContainer","isContentEditableTrue$3","isContentEditableFalse$a","isBr$3","isText$5","isInvalidTextElement","isAtomicInline","isTable$1","isCaretContainer$1","isCaretCandidate$3","isNonUiContentEditableFalse","isUnselectable","isEditableCaretCandidate$1","isInEditable","whiteSpaceRegExp$1","isWhitespaceText","hasWhitespacePreserveParent","isContent$1","isWhitespace","isNamedAnchor","isBookmark","isBogus$1","isBogusAll","isEmpty$2","skipBogus","targetNode","brCount","walker","isEmptyNode","isInlineContent","isBookmarkNode$2","isSpan","isKeepTextNode","prevIsInline","nextIsInline","surroundedByInlineContent","trimNode","currentChildren","isDocument","isKeepElement","makeMap$3","attrsCharsRegExp","textCharsRegExp","rawCharsRegExp","entityRegExp","asciiMap","baseEntities","reverseEntities","buildEntitiesLookup","entity","namedEntities","encodeRaw","encodeNumeric","encodeNamed","entities","Entities","encodeAllRaw","getEncodeFunc","entitiesMap","nameMap","named","numeric","decode","nativeDecode","mapCache","dummyObj","makeMap$2","each$h","extend$5","explode$3","inArray$2","split$1","createMap","getTextRootBlockElements","schema","getTextBlockElements","compileElementMap","mode","Schema","patternElements","customElementsMap","specialElements","createLookupTable","schemaItems","globalAttributes","blockContent","phrasingContent","flowContent","html4BlockContent","html4PhrasingContent","ni","attributesOrder","arrayToMap","addAttrs","schemaItem","compileSchema","verify_html","valid_elements","validStyles","valid_styles","invalidStyles","invalid_styles","validClasses","valid_classes","whiteSpaceElementsMap","selfClosingElementsMap","shortEndedElementsMap","boolAttrMap","nonEmptyOrMoveCaretBeforeOnEnter","nonEmptyElementsMap","moveCaretBeforeOnEnterElementsMap","textBlockElementsMap","blockElementsMap","textInlineElementsMap","patternToRegExp","addValidElements","validElements","ei","ai","al","attrData","elementName","attrType","outputName","globalAttributesOrder","elementRuleRegExp","attrRuleRegExp","hasPatternsRegExp","validElementsArr","paddEmpty","removeEmpty","removeEmptyAttrs","attributesRequired","required","attributesDefault","attributesForced","forcedValue","validValues","attributePatterns","setValidElements","addCustomElements","customElements","customElementRegExp","text_block_elements","block_elements","rule","inline","cloneName","customRule","elmName","addValidChildren","validChildren","childRuleRegExp","getElementRule","_val","padd_empty_block_inline_children","paddInEmptyBlock","custom_elements","valid_children","extended_valid_elements","dd","legend","parentsRequired","invalid_elements","getValidStyles","getInvalidStyles","getValidClasses","getBoolAttrs","getBlockElements","getTextInlineElements","getShortEndedElements","getSelfClosingElements","getNonEmptyElements","getMoveCaretBeforeOnEnterElements","getWhiteSpaceElements","getSpecialElements","getCustomElements","isValidChild","attrPatterns","toHex","hex","Styles","rgbRegExp","urlOrStrRegExp","styleRegExp","trimRightRegExp","encodingLookup","invisibleChar","encodingItems","color","isEncoded","urlConverter","url_converter","urlConverterScope","url_converter_scope","compress","noJoin","canCompress","encode","keepSlashes","decodeSingleHexSequence","escSeq","decodeHexSequences","processUrl","url2","url3","str2","allow_script_urls","scriptUrl","allow_svg_data_urls","serializeStyles","styleList","i_1","styleMap","deprecated","keyLocation","layerX","layerY","webkitMovementX","webkitMovementY","keyIdentifier","mozPressure","isNativeEvent","initEvent","normalize$3","fallbackTarget","composedPath","clone$2","srcElement","needsNormalizing","cancelBubble","hasIsDefaultPrevented","mouseEventRe","addEvent","capture","isMouseEvent","eventDoc","mouseEvent","bindOnReady","eventUtils","domLoaded","readyHandler","EventUtils","hasMouseEnterLeave","hasFocusIn","callbackList","fakeName","nativeHandler","defaultNativeHandler","executeHandlers","namesList","mouseEnterLeave","ci","eventMap","clean","strundefined","MAX_NEGATIVE","push_native","push$1","slice$1","rattributeQuotes","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","rquickExpr$1","rescape","escaped","escapedWhitespace","getTop","skipUniques","isDefined","createFragment$1","fragDoc","domManipulate","targetNodes","sourceItem","getElementDocument","DomQuery","wrap$2","lastParent","newWrapper","numericCssMap","booleanMap","for","class","readonly","cssFix","float","DomQueryConstructor","whiteSpaceRegExp","trim$1","each$g","grep$2","camel","dashed","removeProperty","currentStyle","classState","existingClassName","sibling$1","firstSibling","contentWindow","wrappedResult","overrideDefaults","each$f","grep$1","simpleSelectorRe","updateInternalStyleAttr","$elm","rawValue","findNodeIndex","normalized","lastNodeType","DOMUtils","addedStyles","files","styleSheetLoader","boundEvents","ownEvents","$$","getAttrib","defaultVal","getAttribs","setAttrib","originalValue","onSetAttrib","attrElm","root_element","getPos$1","getStyle","elms","getParents","collect","selectorVal","_findSib","setAttribs","setHTML","canHaveHTML","parentElm","newElm","keepChildren","$node","cls","oldElm","isNonEmptyElement","createRng","rv","getContentEditable","stdMode","boxModel","isBlock","clone_1","getViewPort","argWin","vp","getRect","getParent","getNext","getPrev","createHTML","outHtml","createFragment","setStyle","update_styles","stylesArg","removeAllAttribs","removeAttributeNode","parseStyle","serializeStyle","addStyle","styleElm","DOM","loadCSS","isHidden","getOuterHTML","setOuterHTML","rename","attrNode","findCommonAncestor","pe","ps","rgbVal","bogusVal","splitElm","replacementElm","beforeFragment","afterFragment","extractContents","getContentEditableParent","isChildOf","dumpRng","startOffset","endContainer","endOffset","getContext","keepValues","keep_values","keepUrlHook","setupAttrHooks","DOM$a","each$e","ScriptLoader","states","scriptLoadedCallbacks","queueLoadedCallbacks","loadScript","cleanup","isDone","markDone","loadQueue","loadScripts","failures","execCallbacks","loadingScripts","notifyCallbacks","Cell","currentCode","getLanguageData","I18n","setCode","newCode","getCode","langData","getLangData","textstr","removeContext","isTokenised","values_1","$1","$2","hasCode","AddOnManager","_listeners","runListeners","matchedListeners","dependencies","createUrl","baseUrl","dep","resource","addOnUrl","urlString","baseURL","newUrl","loadDependencies","waitFor","requireLangPack","languageLoad","addOn","addOnConstructor","addComponents","pluginName","pluginUrl","PluginManager","ThemeManager","subject","doRevoke","revoke","rate","read$4","supports","add$2","add$3","remove$4","remove$5","add$1","cleanClass","get$4","descendants$1","descendants","annotation","dataAnnotation","dataAnnotationId","identify","annotationName","rng","getRng","getBody","an","newStart","getAttr","has$1","findMarkers","setup$n","_registry","changeCallbacks","initData","withCallbacks","updateCallbacks","callbackMap","outputData","onNodeChange","annotations","fireNoAnnotation","fireCallbacks","setup$m","registry","serializer","addNodeFilter","spans","identifyParserNode","persistent","generate","getTime","docDom","contentElements","clone$1","deep$1","TextWalker","isBoundary","TextSeeker","isBlockBoundary","newOffset","backwards","forwards","round$2","collapse","toStart","isValidOverflow","rect1","rect2","isAbove$1","halfHeight","isBelow$1","containsXY","getSelectedNode","getNode$1","safeOffset","clamp$2","extendingChars","isExtendingChar","isElement$3","isCaretCandidate$2","isBlock$1","isFloated","isValidElementCaretCandidate","and","isNotPre","isText$4","isBr$2","nodeIndex$1","resolveIndex$1","createRange$1","isWhiteSpace$1","isRange","isHiddenWhiteSpaceRange","isZeroRect","getBoundingClientRect$1","clientRect","clientRects","brNode","nbsp$1","getBrClientRect","sc","ec","so","eo","newRng","cloneRange","setEndAfter","getBoundingClientRectWebKitText","collapseAndInflateWidth","newClientRect","getCaretPositionClientRects","caretPosition","addUniqueAndValidRect","addCharacterOffset","beforeNode","CaretPosition","toRange","fromRangeStart","fromRangeEnd","isAbove","pos1","pos2","isBelow","isTextPosition","isElementPosition","HDirection","trimEmptyTextNode$1","rangeInsertNode","insertNode","insertFragment","isText$3","isBogus","normalizedParent","getChildNodes","equal","createPathItem","numTextFragments","normalizedNodeIndex","create$6","outputOffset","normalizedTextOffset","parentsUntil$1","resolve$2","resolvePathItem","dataLen","targetOffset","findTextPosition","isContentEditableFalse$9","getPoint","point","trimmedOffset","getNormalizedTextOffset","moveEndPoint$1","normalizeTableCellSelection","getOffsetBookmark","findAdjacentContentEditableFalseElm","bookmark","isCollapsed","isFakeCaret","getLocation","createBookmarkSpan","filled","getPersistentBookmark","collapsed","rng2","endBookmarkNode","startBookmarkNode","moveToBookmark","keep","getBookmark$2","getCaretBookmark","getRangeBookmark","getUndoBookmark","DOM$9","getBodySetting","getParam","bodyObj","getContentSecurityPolicy","getForcedRootBlock","block","getForcedRootBlockAttrs","isAutomaticUploadsEnabled","shouldReuseFileName","getIconPackName","getImageUploadUrl","getImageUploadBasePath","getImagesUploadCredentials","getImagesUploadHandler","shouldUseContentCssCors","getReferrerPolicy","getLanguageCode","shouldIndentUseMargin","getFontCss","fontCss","getObjectResizing","getEventRoot","getTheme","shouldValidate","isInlineBoundariesEnabled","hasContentCssCors","getPlugins","isElement$2","isText$2","removeNode$1","trimCount","trimmedText","deleteZwspChars","deleteData","removeUnchanged","remove$2","removeElementAndReposition","newPosition","indexOf$2","removeTextCaretContainer","removeTextAndReposition","removeAndReposition","removeElementCaretContainer","caretContainerNode","browser$2","isContentEditableFalse$8","isMedia$1","isTableCell$3","getAbsoluteClientRect","rootRect","FakeCaret","cursorInterval","lastVisualCaret","rootBlock","caretBlock","fakeCaretTargetNodes","trimInlineCaretContainers","caretState","caret","startBlink","textNode","splitText","insertInline$1","isInlineFakeCaretTarget","getCss","isFakeCaretTableBrowser","isFakeCaretTarget","isContentEditableFalse$7","isMedia","isBlockLike","isCaretContainer","isCaretContainerBlock","isElement$1","isCaretCandidate$1","isForwards","isBackwards","skipCaretContainers","findNode$1","predicateFn","isCefOrCaretContainer","getParentBlock$2","isInSameBlock","caretPosition1","caretPosition2","getChildNodeAtRelativeOffset","beforeAfter","setStartBefore","setEndBefore","setStartAfter","isNodesInSameBlock","node1","node2","lean","before$2","after$2","normalizeRange","leanLeft","leanRight","location_1","getRelativeCefElm","getNormalizedRangeEndPoint","normalizedRange","getElementFromPosition","getVisualCaretPosition","walkFn","isMoveInsideSameBlock","inSameBlock","expected","isContentEditableFalse$6","isText$1","isBr$1","isCaretCandidate","isAtomic","isAtomicContentEditableFalse","isEditableCaretCandidate","nodeAtIndex","getCaretCandidatePosition","findCaretPosition$1","startPos","nextNode","innerNode","Forwards","moveForwardFromBr","rootContentEditableFalseElm","getParents$3","CaretWalker","Backwards","isBeforeOrStart","isAfterOrEnd","isBeforeAfterSameElement","shouldSkipPosition","fromPosition","navigate","navigateIgnore","ignoreFilter","positionIn","walkToPositionIn","nextPosition","prevPosition","firstPositionIn","lastPositionIn","CARET_ID$1","isCaretNode","getParentCaretContainer","isPathBookmark","addBogus","tryFindRangePosition","padEmptyCaretContainer","isEmpty$1","insertZwsp","setEndPoint","isValidTextNode","restoreEndPoint","appendData","resolve$1","resolvePaths","isStringPathBookmark","resolveCaretPositionBookmark","isIdBookmark","endPos","spos","epos","resolveId","isIndexBookmark","selectNode","resolveIndex","isRangeBookmark","getBookmark$1","setRng","isBookmarkNode$1","isNbsp","actual","isWhiteSpace","isContent","isNode","moveStart","isInlineBlock","isWhiteSpaceNode$1","getNonWhiteSpaceSibling","nextName","isTextBlock$1","ed","allowSpaces","replaceVars","vars","isEq$5","str1","normalizeStyleValue","getTextDecoration","decoration","getParents$2","areSimilarFormats","formatName","otherFormatName","validKeys","filterObj","validKey","fmt1","filteredFmt1","fmt2","filteredFmt2","equal$1","isBlockFormat","isSelectorFormat","isInlineFormat","shouldExpandToSelector","isBookmarkNode","getParents$1","isWhiteSpaceNode","isTextBlock","findParentContentEditable","walkText","findSpace","findContent","findWordEndPoint","includeTrailingSpaces","lastTextNode","textSeeker","textOffset","findSelectorEndPoint","formatList","curFormat","findBlockEndPoint","scopeRoot","isAtBlockBoundary$1","findParentContainer","block_expand","isSelfOrParentBookmark","expandRng","includeTrailingSpace","walk$2","exclude","firstNode","lastNode","collectSiblings","endNode","findEndPoint","walkBoundary","parent_1","siblings_1","startPoint","endPoint","getRanges","ranges","rangeCount","getRangeAt","getCellsFromRanges","getSelectedNodes","getCellsFromElementOrRanges","selectedCells","getCellsFromEditor","getSel","getClosestTable","getFirstChildren","getLastChildren$1","hasAllContentsSelected","getStartNode","getEndNode","moveEndPoint","hasAnyRanges","runOnRanges","executor","fakeSelectionNodes","fakeNodeRng","preserve","fillBookmark","api$1","getOption","NodeValue","get$2","wrapName","isZeroWidth","isAnnotation","makeAnnotation","eDoc","decorate","_b","__rest","master","_c","_d","_e","annotate","newWrappers","getDoc","finishWrapper","processElements","processElement","wrap$3","processNodes","annotateWithBookmark","undoManager","transact","initialRng","hasFakeSelection","applyWordGrab","selectionRng","Annotator","changes","annotationChanged","directory","markers","nodesAlready","findAll","BookmarkManager","getBookmark","getContentEditableRoot$1","isXYWithinRange","fireError","errorType","fireFormatApply","fireFormatRemove","VK","SPACEBAR","modifierPressed","metaKeyPressed","isContentEditableFalse$5","ControlSelection","selectedElm","selectedElmGhost","resizeHelper","selectedHandle","resizeBackdrop","startX","startY","startW","startH","ratio","resizeStarted","startScrollWidth","startScrollHeight","elementSelectionAttr","editableDoc","rootDocument","resizeHandles","nw","ne","se","sw","isImage","contextMenuSelectImage","isEventOnImageOutsideRange","getResizeTargets","isResizable","setSizeProp","setGhostElmSize","ghostElm","resizeGhostElement","proportional","resizeHelperX","resizeHelperY","getResizeImgProportional","selectedElmX","selectedElmY","origin","fireObjectResizeStart","endGhostResize","wasResizeStarted","showResizeRect","fireObjectResized","nodeChanged","targetElm","unbindResizeHandleEvents","targetWidth","targetHeight","hideResizeRect","selectedValue","handleElm","startDrag","updateResizeRect","controlElm","isChildOrEqual","disableGeckoResize","getStart","getEnd","isWithinContentEditableFalse","execCommand","handleMSControlSelect_1","delayedSelect","throttledUpdateResizeRect","composing","hasCeProperty","pointDoc","caretPositionFromPoint","offsetNode","caretRangeFromPoint","createTextRange","moveToPoint","moveToElementText","findClosestIeRange","findParent$1","moveOutOfContentEditableFalse","isEq$4","rng1","hasParent$1","findParent","hasParentWithName","isTable","isTableCell$2","isCeFalseCaretContainer","hasBrBeforeAfter","findTextNodeRelative","isAfterNode","lastInlineElement","parentBlockContainer","normalizeEndPoint","directionLeft","hasContentEditableFalseParent","isPrevNode","normalize$2","normRng","RangeUtils","normalizedRng","compareRanges","getCaretRangeFromPoint","documentFocusInHandler","getOffset","aggregate","getOuter","cumulativeInclusions","Dimension","walkUp","navigation","Navigation","freeze","frameElement","find$1","frames","pathTo","loc","excludeFromDescend","markerInfo","cleanupFun","absolute","get$1","createMarker","descend","withMarker","preserveWith","applyWithMarker","withScrollEvents","fireScrollIntoViewEvent","fireAfterScrollIntoViewEvent","withElement","elementMarker","startElement","endElement","scrollToMarker","viewHeight","intoWindowIfNeeded","viewportBottom","markerTop","markerBottom","largerThanViewport","intoWindow","intoFrame","frameViewHeight","viewportBounds","rangeIntoWindow","elementIntoWindow","rangeIntoFrame","elementIntoFrame","scrollRangeIntoView","hasFocus$1","SimRange","soffset","foffset","adt$1","Situ","situ","domRange","exact","SimSelection","exactFromRange","simRange","getWin","startSitu","_finishSitu","_soffset","_finish","_foffset","getStart$1","browser$1","clamp$1","normalizeRng","isOrContains","isRngInRoot","shouldStore","nativeRangeToSelectionRange","readRange","bookmarkToNativeRng","store","newBookmark","validate","FocusManager","isEditorUIElement","registerEditorEvents","throttledStore","registerFocusOut","registerMouseUp","selectionChange","isManualNodeChange","register$3","mouseUpPage","registerPageMouseUp","DOM$8","isUIElement","customSelector","getCustomUiSelector","registerEvents$1","editorManager","focusedEditor","setActive","blurredEditor","getElement","getActiveElement","activeEditor","getOriginalEventTarget","unregisterDocumentEvents","getFocusInElement","getCollapsedNode","normalizeSelection$1","caretPos","focusBody","hasElementFocus","rawBody","hasInlineFocus","iframeElement","hasIframeFocus","hasEditorOrUiFocus","hasUiFocus","activateEditor","skipFocus","quirks","refreshContentEditable","bookmarkRng","contentEditableHost","getContentEditableHost","focusEditor","getEndpointElement","real","skipEmptyTextNodes","processRanges","typeLookup","walk$1","isEmptyTextNode","AstNode","selfAttrs","cloneAttrs","selfAttr","shortEnded","refNode","restoreDataUris","re","imageId","uris","each$d","queryParts","DEFAULT_PORTS","ftp","http","https","mailto","safeSvgDataUrlElements","isInvalidUri","allow_html_data_urls","allowSvgDataUrls","blockSvgDataUris","URI","baseUri","base_uri","isProtocolRelative","toAbsPath","urlMatch","userInfo","port","parseDataUri","uriComponents","decodeURIComponent","isDomSafe","decodedUri","getDocumentBaseUrl","setPath","pathMatch","getURI","toRelative","output","relativeUri","tu","uu","toRelPath","anchor","toAbsolute","noHost","absoluteUri","isSameOrigin","defaultPort","breakPoint","normalizedBase","outPath","nb","normalizedPath","noProtoHost","filteredClobberElements","findMatchingEndTagIndex","startIndex","startTagRegExp","endTagRegExp","shortEndedElements","startMatch","findCommentEndIndex","endMatch","lcHtml","isConditionalComment","endIfIndex","endIndex","endCommentRegexp","checkBogusAttribute","attrString","SaxParser","form","fix_self_closing","comment","cdata","pi","doctype","parseInternal","base64Extract","endRegExp","attrList","textData","isInternalElement","isShortEnded","elementRule","isValidElement","attribsValue","validAttributesMap","validAttributePatterns","filteredUrlAttrs","parsingMode","processEndTag","valid","processText","processComment","allow_conditional_comments","processMalformedComment","startTag","parseAttribute","val2","val3","processAttr","fillAttrsMap","isValidPrefixAttrName","attrRule","tokenRegExp","attrRegExp","selfClosing","self_closing_elements","removeInternalElements","remove_internals","fixSelfClosing","processHtml","matchText","bogusValue","preserve_cdata","dataImageUri","chunks","extractBase64DataUris","findEndTag","trimInternal","bogusAllRegExp","tempAttrs","trimContentRegExp","trimHtml","getTempAttrs","matchLength","endTagIndex","trimExternal","getContentFromBody","defaultedArgs","getInner","setupArgs$3","updatedArgs","no_events","emptyRegExp","trimEmptyContents","each$c","ElementUtils","attribs","compareObjects","obj1","obj2","makeMap$1","Writer","indent","indentBefore","indent_before","indentAfter","indent_after","entity_encoding","htmlOutput","element_format","getContent","HtmlSerializer","writer","sortedAttrs","nonInheritableStyles","shorthandStyleProps","getStyleProps","hasInheritableStyles","isNonInheritableStyle","hasStyleConflict","nodeStyleProps","parentNodeStyleProps","valueMismatch","parentValue","nodeStyleProp","propExists","longhandProps","isChar","isBeforeSpace","isAfterSpace","isEmptyText","matchesElementPosition","isImageBlock","isCefNode","isBogusAll$1","isBeforeImageBlock","isAfterImageBlock","isBeforeMedia","isAfterMedia","isBeforeTable","isAfterTable","isBeforeContentEditableFalse","isAfterContentEditableFalse","removeTrailingBr","allBrs","rawNode","getLastChildren","fillWithPaddingBr","trimBlockTrailingBr","lastChildPrevSibling","rawParent","parents$1","parentsAndSelf","navigateIgnoreEmptyTextNodes","getClosestBlock$1","isAtBeforeAfterBlockBoundary","newPos","fromBlock","isAtBlockBoundary","isAtStartOfBlock","isAtEndOfBlock","isBeforeBlock","isAfterBlock","isBr","findBr","parentBlocks","isBeforeBr$1","isAfterBr","getElementFromPrevPosition","findPreviousBr","findNextBr","isInMiddleOfText","getClosestBlock","hasSpaceBefore","hasSpaceAfter","isInPre","isPreValue","isAtLineBoundary","isAtBeginningOfBody","isAtEndOfBody","needsToBeNbspLeft","needsToBeNbspRight","needsToBeNbsp","isNbspAt","hasNbsp","normalizeNbspInMiddleOfTextNode","newText","normalizeNbspMiddle","normalizeNbsps","firstPos","normalizeNbspAtStart","lastPos","normalizeNbspAtEnd","normalizeNbspsInEditor","normalize$1","isEndOfContent","isStartOfContent","replaceData","previousCharIsSpace","normalizeContent","normalizeWhitespaceAfter","whitespaceCount","normalizeWhitespaceBefore","mergeTextNodes","prevNode","normalizeWhitespace","mergeToPrev","whitespaceOffset","newNode","insertData","needsReposition","getPreviousSiblingCaretPosition","getNextSiblingCaretPosition","findCaretPositionBackwards","startPosition","findCaretPositionBackwardsFromElm","findCaretPositionForward","findCaretPositionForwardsFromElm","findCaretPosOutsideElmAfterDelete","findCaretPosition","setSelection$1","paddEmptyBlock","deleteNormalized","afterDeletePosOpt","oc","prevTextOpt","nextTextOpt","deleteElement$2","moveCaret","afterDeletePos","parentBlock","normalizedAfterDeletePos","isInlineElement","setCursorLocation","paddPos","getTableCells","tableCellRng","deleteAction","singleCellTable","fullTable","partialTable","multiTable","getClosestCell$1","isExpandedCellRng","cellRng","getTableFromCellRng","startParentTable","endParentTable","getTableSelectionFromCellRng","tableSelection","getTableSelections","selectionDetails","isSameTable","sameTableSelection","startCell","endCell","startTableSelection","getCellRangeFromStartTable","endTableSelection","getCellRangeFromEndTable","getCellIndex","getSelectedCells","isSingleCellTableContentSelected","optCellRng","isSingleCellTable","unselectCells","startTable","endTable","otherContentRng","getActionFromRange","isRootFromElement","getCellRng","getTable","isStartInTable","isEndInTable","isMultiTable","getTableDetailsFromRange","startTableSelectedCells","endTableSelectedCells","handleMultiTable","handleSingleTable","freefallRtl","cleanCells","deleteContentInsideCell","isFirstCellInSelection","insideTableRng","deleteCellContents","collapseAndRestoreCellSelection","selectedNode","emptySingleTableCells","outsideDetails","editorRng","cellsToClean","outsideBlock","getOutsideBlock","deleteContents","startInTable","emptyBlock","handleEmptyBlock","endPointCell","emptyMultiTableCells","startTableCells","endTableCells","betweenRng","startTableCellsToClean","endTableCellsToClean","moveSelection","lastBlock","additionalCleanupNodes","deleteTableElement","deleteTableRange","startElm","getParentCaption","deleteCellRange","emptyElement","deleteCaptionRange","getParentCell","deleteCaretInsideCaption","fromCaption","isDeleteOfLastCharPos","emptyCaretCaption","toCaption","validateCaretCaption","deleteCaretCells","fromCell","toCell","deleteBetweenCells","isNearTable","deleteCaret$3","fromPos","isBeforeOrAfterTable","deleteCaretCaption","backspaceDelete$9","deleteRange$2","normalizeBlockSelectionRange","newEndPos","isPaddedEmptyBlock","hasOnlyOneChild$1","isPaddingNode","isListFragment","nonEmptyElements","isEmptyFragmentElement","isListItemPadded","isPadding","trimListItems","getParentLi","findLastOf","newCaretPos","insertBefore$1","findFirstIn","insertAtCaret$1","domFragment","cleanupDomFragment","toDomFragment","liTarget","liElms","isAt","caretWalker","insertAfter$1","beforeRng","afterRng","cloneContents","getSplit","insertMiddle","isTableCell$1","deleteSelectedContent","isTableCellContentSelected","insertHtmlAtCaret","trimOrPadLeftRight","parser","bookmarkHtml","paste","caretElement","canHaveChildren","parserArgs","isParentBlockLi","markFragmentElements","_selectionOverrides","showBlockCaretContainer","invalid","validInsertion","textInlineElements","root_1","elementUtils_1","reduceInlineTextElements","nextRng","parentEditableElm","isPartOfFragment","findNextCaretRng","moveSelectionToMarker","trimBrsFromTableCell","addVisual","traverse","filter$1","nodeFilters","attributeFilters","nodeMatches","attrMatches","name_2","findMatchingNodes","isTreeNode","setEditorHtml","noSelection","setContentInternal","setupArgs$2","getNodeFilters","getAttributeFilters","no_selection","setContentTree","padd","forcedRootBlockName","isRootContent","setContentString","sibling$2","ensureIsRoot","closest$1","transformed","isEq$3","matchesUnInheritedFormatSelector","inherit","matchParents","similar","matchNode","matchName$1","matchItems","itemName","onmatch","expectedValue","isEmptyValue","match$2","rawElm","matchAllOnNode","formatNames","matchSimilar","isVariableValue","field","fieldValues","isVariableFormatName","ZWSP","CARET_ID","isCaretContainerEmpty","getEmptyCaretContainers","findFirstTextNode","createCaretContainer","removeCaretContainerNode","trimZwspFromCaretContainer","removeCaretContainer","appendNode","insertFormatNodesIntoCaretContainer","formatNodes","innerMostFormatNode","formatNode","removeCaretFormat","hasContentAfter","expandedRng","newCaretContainer","insertCaretContainerNode","cleanedFormatNode","validFormats","matchedFormats","fmtName","clonedFormatNode","cleanFormatNode","caretTextNode","setup$k","disableCaretContainer","isFormatElement","inlineElements","postProcessHooks","each$b","addPostProcessHook","blocks","isPre","getSelectedBlocks","pre1","pre2","each$a","isElementNode$1","findElementSibling","mergeSiblingsNodes","elementUtils","tmpSibling","mergeSiblings","merge_siblings","processChildElements","hasStyle","unwrapEmptySpan","removeResult","MCE_ATTR_RE","each$9","isEq$2","isChildOfInlineParent","getContainer","lastIdx","normalizeTableSelection","isTableCellOrRow","childNode","wrap$1","wrapWithSiblings","rootBlockElm","forcedRootBlock","list_block","forced_root_block_attrs","isMixedFormat","removeFormatInternal","compareNode","stylesModified","matchName","links","isColorFormatAndAnchor","preserve_attributes","attrsToPreserve","remove_similar","valueOut","removeFormat$1","newName","removeFormatFromClone","remove$1","splitToFormatRoot","formatRoot","findFormatRoot","lastClone","firstClone","formatRootParent","wrapAndSplit","removeNodeFormat","fmt","lastContentEditable","currentNodeMatches","textDecoration","isRemoveBookmarkNode","removeRngStyle","ceFalseOverride","each$8","mergeWithChildren","clear_child_styles","clearChildStyles","each$7","isElementNode","applyFormat$1","setElementFormat","onformat","styleVal","applyNodeStyle","found","createWrapElement","wrapElm","applyRngStyle","nodeSpecific","currentWrapElm","parentName","canFormatEmptyLines","validBRParentElements","hasCaretNodeSibling","canFormatBR","childCount","isEmptyTextNode$1","getChildCount","childElement","mergeStyles","merge_with_parents","mergeWithParents","backgroundColor","mergeBackgroundColorAndFontSize","processTextDecorationsAndColor","mergeTextDecorationsAndColor","mergeSubSup","wordcharRegex","importNode","applyCaretFormat","curSelNode","firstFormat","forced_root_block","defaultBlock","fake","postProcess$1","formatItem","hasVars","fallbackElement","matchingNode","matchingFormat","updateAndFireChangeCallbacks","registeredCallbacks","runIfChanged","spec","node_1","withSimilar","withoutSimilar","withVars","formatChangedInternal","registeredFormatListeners","formats","nodeOrRange","setup$j","formatChangeItems","getCurrent","toAppendTo","addListeners","removeListeners","fromElements","tableModel","tableRow","cellPosition","getSpan","cellExists","getWidth","findElementPos","extractRows","sx","sy","ey","tableElm","rowspan","colspan","y2","x2","fillout","skipCellsX","toDom","tableElement","tableBody","createDomTable","modelRowsToDomRows","subsection","subTable","getFullySelectedListWrappers","_li","findParentListContainer","listCont","listElm","listStyles","_style","getWrapElements","commonAnchorContainer","wrapElements","listWrappers","allWrappers","directListWrappers","emptyFragment","getFragmentFromRange","innerElm","getTableFragment","selectedTableCells","firstCell","lastCell","fullTableModel","sectionedTableModel","read$3","getSelectionFragment","isCollapsibleWhitespace","getInnerText","bin","shouldTrim","trimLeadingCollapsibleText","getSelectedContentInternal","setupArgs$1","parentBlockOpt","contextNodeName","getContextNodeName","shouldTrimSpaces","nonRenderedText","parentBlockText","textIndex","getTextContent","tmpElm","contextual","getSerializedContent","getOuterHtml","vDown","vUp","buildScript","buildSnake","getMiddleSnake","currentFragments","removeAt","applyDiff","start1","end1","start2","end2","middle","diag","i2","snake","lazyTempDocument","createFromEditor","trimmedFragments","trimmed","beforeBookmark","createFragmentedLevel","createCompleteLevel","applyToEditor","getLevelContent","getCleanLevelContent","isEq$1","level1","level2","hasEqualContent","hasEqualCleanedContent","isUnlocked","locks","setTyping","typing","endTyping","makePlainAdaptor","beforeChange","beforeChange$1","currentLevel","lastLevel","bm","customUndoRedoLevels","getCustomUndoRedoLevels","setDirty","addUndoLevel$1","undo","undo$1","redo","redo$1","clear$1","reset$1","hasUndo","hasUndo$1","hasRedo","hasRedo$1","ignore","transact$1","ignore$1","callback1","callback2","extra$1","matchAll","matchedFormatNames","checkedMap","canApply","formatChanged","getContentInternal","insertContent","hasVisual","isVisualAidsEnabled","matchedElm","getVisualAidsTableClass","value_1","cls_1","getVisualAidsAnchorClass","addVisualInternal","getModel","isRtc","plugins","setup$i","editorCast","rtcPlugin","getRtcSetup","rtcInstance","nul","makeNoopAdaptor","rtcEditor","defaultVars","_undoManager","_locks","_index","_node","_similar","_rfl","_format","getRawModel","makeRtcAdaptor","rtc","isRemote","getRtcInstanceWithFallback","getRtcInstanceWithError","getContent$1","getSelectedContent","mergeAndNormalizeText","outerNode","outerElm","oldLength","innerTextNode","walkPastBookmark","normalizeTextIfRequired","setContent$1","setupArgs","eventArgs","contextBlock","contextArgs","cleanContent","prevText","nextText","rngSetContent","createContextualFragment","deleteFromCallbackMap","newCallbacks","merger","isNativeIeSelection","isAttachedToDom","EditorSelection","selectedRange","explicitRange","selectorChangedWithUnbind","selectorChangedData","currentSelectors","findMatchingNode","SelectorChanged","getRng$1","tryCompareBoundaryPoints","how","sourceRange","destinationRange","compareBoundaryPoints","anchorNode","START_TO_START","END_TO_END","isValidRange","ieRange","removeAllRanges","addRange","setBaseAndExtent","focusNode","isForward","anchorRange","anchorOffset","focusRange","focusOffset","bookmarkManager","controlSelection","compareEndPoints","setNode","endElm","selectedBlocks","selectorChanged","getScrollContainer","scrollContainer","scrollElementIntoView","placeCaretAt","addFontToSpansFilter","domParser","fontSizes","face","removeAttrs","addFilters","convert_fonts_to_spans","font_size_legacy_values","addStrikeToSpanFilter","uriParts","buildBlob","uriToBlob","rejectWithError","xhr_1","blobUriToBlob","count$1","imageToBlobInfo","blobCache","base64","blobInfo","getByData","blob","getByUri","reader","FileReader","onloadend","readAsDataURL","blobToDataUri","dataUri","ImageScanner","uploadStatus","cachedPromises","images","getAllImages","isUploaded","promises","imageInfo","newPromise","paddEmptyNode","blockElements","padd_empty_with_br","hasOnlyChild","whitespaceElements","isPadded","registerBase64ImageFilter","blob_cache","processImage","inputSrc","isInternalImageSource","isBogusImage","parseDataUri$1","images_dataimg_filter","imgElem_1","Image","isValidDataImg","blobUri","addAttributeFilter","each$6","explode$2","extend$4","DomParser","matchedNodes","matchedAttributes","root_name","filterNode","fi","fl","invalidChildren","textRootBlockElements","rootBlockName","getRootBlockName","whiteSpaceElements","startWhiteSpaceRegExp","endWhiteSpaceRegExp","allWhiteSpaceRegExp","isAllWhiteSpaceRegExp","isInWhiteSpacePreservedElement","createNode","removeWhitespaceBefore","textVal","textNodeNext","cloneAndExcludeBlocks","isLineBreakNode","parent_2","attrFiltersLen","isNodeEmpty","tempNode","isTextRootBlockEmpty","isPaddedWithNbsp","nonSplitableElements","textBlockElements","removeOrUnwrapInvalidNode","originalNodeParent","children_1","newParent","currentNode","fixInvalidChildren","rootBlockNode","addRootBlocks","remove_trailing_brs","prevName","newRel","allow_unsafe_link_target","appendRel","allow_html_in_named_anchor","fix_list_elements","classValue","validClassesMap","register$1","inline_styles","register$2","hasEventListeners","shouldFireEvent","oldDoc","clonedNode","impl","doc_1","firePreProcess","preProcess","addTempAttr","htmlParser","toHtml","serializeNode","outArgs","firePostProcess","postProcess","DomSerializerImpl","internalName","hasChildren","getHtmlFromNode","brNode1","brNode2","trimTrailingBr","parseHtml","addRules","setRules","DomSerializer","domSerializer","getContent$2","setContent$2","DOM$7","safeDestroy","editorUpload","save","is_removing","unbindAllNativeEvents","hasHiddenInput","fireRemove","orgDisplay","restoreOriginalStyles","fireDetach","automatic","destroyed","_beforeUnload","formElement","_mceOldSubmit","formEventDelegate","restoreForm","contentAreaContainer","editorContainer","bodyElement","clearDomReferences","deepMerge","objects","curObject","deprecatedSettings","deprecatedPlugins","movedToPremiumPlugins","getDeprecatedSettings","settingNames","setting","getDeprecatedPlugins","hasPlugin","pluginNames","deviceDetection","legacyMobilePlugins","defaultTouchSettings","table_grid","object_resizing","normalizePlugins","trimmedPlugins","extractSections","sections","sectionResult","hasSection","getToolbarMode","getDefaultMobileSettings","mobileSettings","defaultMobileSettings","toolbar_mode","toolbar_sticky","menubar","getExternalPlugins","overrideSettings","userDefinedExternalPlugins","external_plugins","getPlatformPlugins","isMobileDevice","desktopPlugins","mobilePlugins","section","isSectionTheme","processPlugins","defaultOverrideSettings","forcedPlugins","forced_plugins","mobileConfig","getSectionConfig","combinedPlugins","combinePlugins","combineSettings","defaultSettings","defaultDeviceSettings","extendedSettings","isOnMobile","sectionSettings","getSection","getEditorSettings","documentBaseUrl","baseDefaults","document_base_url","add_form_submit_trigger","submit_patch","add_unload_trigger","convert_urls","relative_urls","remove_script_host","visual","hidden_input","convertURL","getDefaultSettings","finalSettings","deprecation_warnings","rawSettings","hasDeprecatedPlugins","hasDeprecatedSettings","isLegacyMobileTheme","listJoiner","themesMessage","pluginsMessage","settingsMessage","logDeprecationsWarning","getFiltered","getParamObject","IconManager","iconPack","icons","getProp","propName","getComputedSizeProp","getClientWidth","getClientHeight","getMarginTop","getMarginLeft","isXYInContentArea","bodyElm","transposedPoint","transpose","isInsideElementContentArea","isEditorAttachedToDom","rawContainer","getContentAreaContainer","NotificationManager","notifications","getImplementation","unimplemented","getNotificationManagerImpl","getArgs","getTopNotification","closeNotification","notification","otherNotification","fireEvent","progressBar","getEl","addNotification","getNotifications","serviceMessage","getServiceMessage","registerEvents","WindowManager","dialogs","getWindowManagerImpl","openUrl","getParams","setParams","funcBind","addDialog","dialog","fireOpenEvent","closeDialog","fireCloseEvent","otherDialog","storeSelectionAndOpenDialog","openDialog","windowManagerImpl","displayNotification","notificationManager","displayError","_skinLoaded","logError","createLoadError","pluginLoadError","initError","getContentCssUrls","transformToUrls","contentCss","getContentCss","cssLinks","skinUrl","contentCssFile","isContentCssSkinName","documentBaseURI","appendContentCssFromSettings","contentCSS","getFontCssUrls","UploadStatus","blobUriStatuses","createStatus","resultUri","hasBlobUri","getResultUri","isPending","markPending","markUploaded","removeFailed","uuid","rnd","Uploader","pendingPromises","defaultHandler","withCredentials","credentials","upload","onprogress","path1","path2","basePath","formData","FormData","filename","handlerSuccess","handlerFailure","resolvePending","uploadBlobs","blobInfos","openNotification","pendingUploadBlobInfo","closeNotification_1","failureOptions","uploadBlobInfo","createUploader","EditorUpload","uploader","imageScanner","toBlobInfo","mime","findFirst","cachedBlobInfo","removeByUri","BlobCache","urlFilters","changeHandler","lastChangedLevel","fireIfChanged","UploadChangeHandler","aliveGuard","replaceString","replaceImageUrl","targetUrl","replacementUrl","replacementString","replaceUrlInUndoStack","uploadImages","scanForImages","imageInfos","imagesToRemove","filteredResult","uploadInfo","shouldReplaceBlobUris","replaceImageUriInView","uploadError","uploadUri","uploadImagesAuto","isValidDataUriImage","imgElm","dataImgFilter","getImagesDataImgFilter","resultItem","replaceBlobUris","source_view","addFilter","FormatRegistry","valigntop","verticalAlign","valignmiddle","valignbottom","alignleft","preview","textAlign","aligncenter","alignright","alignjustify","bold","italic","fontStyle","underline","strikethrough","forecolor","hilitecolor","fontname","fontFamily","fontsize","fontSize","lineheight","lineHeight","fontsize_class","blockquote","subscript","superscript","_fmt","_itemName","customValue","removeformat","getFormats","unregister","each$5","parsedSelectorToHtml","ancestry","sItem","wrapInHtml","parentCandidate","ancestorName","parentRequired","elmRule","getRequiredParent","siblingElm","parseSelectorItem","$0","$3","$4","getCssText","previewFrag","parentFontSize","previewCss","previewStyles","getPreviewStyles","removeVars","previewOpt","previewElm","Formatter","formatChangeState","addShortcut","setup$h","applyFormat","removeFormat","toggleFormat","matchFormat","closestFormat","matchAllFormats","matchNodeFormat","canApplyFormat","shouldIgnoreCommand","cmd","UndoManager","addUndoLevel","isFirstTypedCharacter","addNonTypingUndoLevel","isDirty","modKey","isInsertFromPasteOrDrop","addKeyboardShortcuts","nonTypingKeycodes","placeholderAttr","isKeyboardEvent","isDeleteEvent","setup$g","getPlaceholder","updatePlaceholder","isNonTypingKeyboardEvent","showPlaceholder","isTypingKeyboardEvent","isForcedRootBlockFalse","isVisuallyEmpty","firePlaceholderToggle","strongRtl","isInlineTarget","getInlineBoundarySelector","findRootInline","findInlineParents","normalizePosition","normalizeForwards","normalizeBackwards","isTextBlockOrListItem","getParentBlock$1","isBeforeRoot","paddEmptyBody","placeCaretInEmptyBody","blockBoundary","getBlockPosition","containerElm","blockPosition","readFromRange","fromBlockPos","toBlockPos","blockPos","lastPositionInBlock","skipLastBr","isDifferentBlocks","parent1","parent2","hasSameParent","isEditable$1","getChildrenUntilBlockBoundary","extractChildren","removeEmptyRoot","nestedBlockMerge","toBlock","insertionPoint","sidelongBlockMerge","getInsertionPoint","parentsAndSelf$1","findInsertionPoint","trimBr","mergeBlockInto","mergeBlocks","block1","block2","backspaceDelete$8","read$1","isRawNodeInTable","isEverythingSelected","noPrevious","noNext","isSelectionInTable","deleteRange$1","emptyEditor","deleteRangeMergeBlocks","backspaceDelete$7","_forward","isContentEditableTrue$2","isContentEditableFalse$4","showCaret","getNodeRange","renderCaretAtRange","caretPositionNode","caretPositionBeforeNode","ceRoot","renderRangeCaret","isBeforeBoundary","isAfterBoundary","deleteContentAndShowCaret","peekCaretPosition","caretRange","deleteRange","trimEmptyTextNode","backspaceDelete$6","getNextPosFn","isBeforeFn","nextCaretPosition","deleteBoundaryText","DeleteAction","moveToElement","moveToPosition","deleteEmptyBlockOrMoveToCef","toCefElm","blockElm","findCefPosition","isDeleteFromCefDifferentBlocks","getContentEditableAction","caretLocation","isAtContentEditableBlockCaret","getContentEditableBlockAction","skipMoveToActionFromInlineCefToContent","getAncestorCe","backspaceDeleteCaret","read","hideFakeCaret","deleteElement$1","backspaceDeleteRange","paddEmptyElement","backspaceDelete$5","backspaceDelete$4","deleteCaret$2","isText","startsWithCaretContainer","endsWithCaretContainer","createZwsp","insertInline","insertInlineBefore","insertInlineAfter","insertInlinePos","isPosCaretContainer","caretNode","renderCaret","evaluateUntil","Location","rescope$1","nPos","isNotInsideFormatCaretContainer","findInsideRootInline","start$1","isValidLocation","readLocation","getName","outside","inside","betweenInlines","fromInline","toInline","hasSameParentBlock","skipNoMovement","fromLocation","toLocation","location2","location1","findLocationSimple","findLocation$1","findLocationTraverse","BreakType","moveRel","modify","moveByWord","hasSelectionModifyApi","VDirection","positions","getBreakType","currentPos","nextPos","Br","Block","Wrap","getPositionsUntil","breakType","breakAt","Eol","getAdjacentLinePositions","getPositionsUntilBreak","findClosestHorizontalPositionFromPoint","lastRect","newRect","lastDist","findClosestHorizontalPosition","targetRect","getPositionsUntilPreviousLine","getPositionsUntilNextLine","getPositionsAbove","getPositionsBelow","getNodeClientRects","toArrayWithNode","customEventRootDelegates","beforeUnloadDelegate","walkUntil$1","isAboveFn","isBeflowFn","line","targetClientRect","findUntil","upUntil","Up","downUntil","Down","isAboveLine","lineNumber","aboveLineNumber","isLine","isLineNumber","isContentEditableFalse$3","findNode","distanceToRectLeft","distanceToRectRight","isInsideX","isInsideY","findClosestClientRect","allowInside","oldClientRect","oldDistance","newDistance","walkUntil","includeChildren","closestFakeCaret","fakeTargetNodeRects","getFakeCaretTargets","targetNodeRects","checkInside","closestNodeRect","targetNodeRect","checkPosFn","lineRects","findLineNodeRects","caretInfo","moveToRange","renderRangeCaretOpt","moveHorizontally","isBefore","isAfter","rangeIsInContainerBlock","moveVertically","caretClientRect","linePositions","nextLinePositions","nextLineRect","dist1","dist2","caretPositions","isBelowFn","positionsUntil","closestNextLineRect","getLineEndPoint","moveToLineEndPoint$3","setCaretPosition","setSelected","renderCaretLocation","safeRemoveCaretContainer","isAtZwsp","move$2","isInlineTarget$1","findLocation","moveWord","_caret","setupSelectedState","inlineBoundaries","selectedInlines","targetInlines","toggleInlines","inlines","_inline","renderInsideInlineCaret","moveNextWord","movePrevWord","moveToLineEndPoint$2","linePoint","outsideLoc","setCaretLocation","deleteFromTo","rangeFromPositions","backspaceDeleteCollapsed","rescope","toPosition","normalizedFirstPos","normalizedLastPos","hasOnlyTwoOrLessPositionsLeft","backspaceDelete$3","hasOnlyOneChild","deleteLastPosition","parentInlines","isFormatElement$1","innerMost","replaceWithCaretFormat","deleteCaret$1","getParentInlines","normalizedFromPos","prevPos","willDeleteLastPositionInElement","backspaceDelete$2","deleteElement","backspaceDelete$1","isNearMedia","deleteCaret","parseIndentValue","getIndentStyleName","useMargin","canOutdent","getBlocksToIndent","isReadOnly","indentStyleName","intentValue","validateBlocks","isListComponent","parentIsListComponent","indentation","getIndentation","indentUnit","indentValue","queryCommandState","styleValue","indentElement","backspaceDelete","nativeCommand","setup$f","addCommand","deleteCommand","forwardDeleteCommand","getTouch","setup$e","startData","longpressFired","debounceLongpress","distX","distY","isFarEnough","isEqualNode","isBlockElement","isValidTarget","shouldRemoveTextNode","rootNodeName","hasBlockParent","restoreSelection","blockCaretContainer","removeIeControlRect","handleBlockContainer","findBlockCaretContainer","isContentEditableFalse$2","exitPreBlock","getVisualCaretPosition$1","hasForcedRootBlock","newBlock","textBlock","createTextBlock","getHorizontalRange","moveToCeFalseHorizontally","getVerticalRange","down","moveToCeFalseVertically","moveH$2","newRange","moveV$3","moveToLineEndPoint$1","isTarget","rangeBefore","insertElement","insertEmptyLine","insertBr","insertBlock","isAtFirstOrLastLine","isAtLastLine","isAtFirstLine","moveCaretToNewEmptyLine","rootBlockAttrs","getClosestTargetBlock","moveV$2","match$1","patterns","defaultPatterns","matchesEvent","execute","moveH$1","moveV$1","moveToLineEndPoint","getClosestCell","getYAxisValue","isTargetCorner","corners","deflate","getCorners","corner","newCorner","oldCorner","oldDist","sqrt","newDist","findClosestCorner","getClosestCellAbove","getClosestCellBelow","findClosestPositionInAboveCell","findClosestPositionInBelowCell","isAtTableCellLine","lineInfo","startsWithWrapBreak","startsWithBrBreak","breakPos","hasNextBreak","isAtFirstTableCellLine","isAtLastTableCellLine","navigateHorizontally","_td","isCaretAtStartOrEndOfTable","renderBlock","navigateVertically","getClosestAbovePosition","getClosestBelowPosition","move$1","mover","moveH","moveV","setup$b","executeKeydownOverride$3","setup$a","executeKeydownOverride$2","executeKeyupOverride","moveToCaretPosition","firstNonWhiteSpaceNodeSibling","getParentBlock","hasParent","isListBlock","getContainerBlock","containerBlock","containerBlockParent","isFirstOrLastLi","insert$3","createNewBlock","newBlockName","isFirstChild","tmpRng","hasFirstChild","isEmptyAnchor","containerAndSiblingName","canSplitBlock","normalizeZwspOffset","getEditableRoot","editableRoot","setForcedBlockAttrs","forcedRootBlockAttrs","attrStyles","currentStyles","newStyles","attrClassesOpt","attrClasses","currentClassesOpt","currentClasses","filteredClasses","newClasses","appliedAttrs","remainingAttrs","applyAttributes","insert$2","parentBlockName","isAfterLastNodeInContainer","shouldKeepStyles","isCaretAtStartOrEndOfBlock","normalizedOffset","insertNewBlockAfter","containerBlockName","shouldEndContainerOnEmptyBlock","isTableCell","wrapSelfAndSiblingsInDefaultBlock","includeZwspInRange","trimZwsp","trimLeadingLineBreaks","firstChilds","trimInlineElementsOnLeftSideOfBlock","addBrToBlockIfNeeded","moveSelectionToBr","brElm","extraBr","insertBrAtCaret","isControlKey","hasRightSideContent","insertBrBefore","insertBrAfter","hasBrAfter","isAnchorLink","isInsideAnchor","insertBrOutsideAnchor","insert$1","anchorLocation","readInlineAnchorLocation","newLineAction","shouldBlockNewLine","_shiftKey","getNoNewLineSelector","shouldBlockNewLine$1","isBrMode","requiredState","inListBlock","isListItemParentBlock","inBlock","getParentBlockName","inPreBlock","shouldPutBrInPre","shouldPutBrInPre$1","inBrContext","getBrNewLineSelector","shouldInsertBr","hasShiftKey","_editor","canInsertIntoEditableRoot","rootEditable","getEditableRoot$1","predicates","getAction","setup$9","handleEnterKeyEvent","setup$8","executeKeydownOverride$1","setup$7","keypressThrotter","setupIeInput","isComposing","isPageUpDown","setNodeChangeBlocker","blocked","setup$6","executeKeyupAction","insertTextAtPosition","insertNbspAtPosition","insertSpaceAtPosition","insertInlineBoundarySpaceOrNbsp","checkPos","needsToHaveNbsp","insertSpaceOrNbspAtSelection","locationToCaretPosition","setSelection","setup$5","executeKeydownOverride","registerKeyboardOverrides","setup$c","NodeChange","lastRng","lastPath","nativeRng","fakeRng","isSameElementPath","initialized","currentPath","setup$3","preventSummaryToggle","filterDetails","isTextBlockNode","setup$2","normalizeSelection","getAbsolutePosition","bodyPosition","getBodyPosition","scrollPosition","getScrollPosition","mousePosition","iframePosition","inlineScroll","iframeScroll","getBodyScroll","getMousePosition","isContentEditableFalse$1","isContentEditableTrue$1","createGhost","clonedElm","boxSizing","isLeftMouseButtonPressed","ceElm","elmPos","dragging","maxX","maxY","relX","relY","ghost","targetElement","dragElement","isValidDropTarget","targetClone_1","cloneElm","removeDragState","bindFakeDragEvents","pageDom","dragStartHandler","dragHandler","throttledPlaceCaretAt","movement","targetPos","applyRelPos","moveGhost","dropHandler","dragEndHandler","init$2","realTarget","blockIeDrop","shouldBlockUnsupportedDrop","preventFileDrop","dataTransfer","preventFileDropIfUIElement","editorRoot","eventNames","blockUnsupportedFileDrop","isContentEditableTrue","isContentEditableFalse","getContentEditableRoot","SelectionOverrides","selectedElement","fakeCaret","realSelectionId","isFakeSelectionTargetElement","isNearFakeSelectionElement","setRange","getRange","isWithinCaretContainer","isRangeInCaretContainer","normalizeShortEndedElementSelection","selectElement","targetClone","origTargetClone","$realSelectionContainer","setupOffscreenSelection","nodeElm","setElementSelection","afterNode","removeElementSelection","contentEditableRoot","hasBetterMouseTarget","targetBlock","hasNormalCaretPosition","fakeCaretInfo","clipboardData","realSelectionElement","clearData","outerText","renderFocusCaret","setup$1","Quirks","getAttributeApplyFunction","isSelectionAcrossElements","isGecko","isWebKit","mceInternalUrlPrefix","mceInternalDataType","setEditorCommandState","emptyEditorWhenDeleting","serializeRng","allRng","allContentsSelected","selectAll","shortcuts","documentElementEditingFocus","Range","body_1","selectControlElements","disableBackspaceIntoATable","setGeckoEditingOptions","isReadOnly$1","addBrAfterLastLinks","showBrokenImageIcon","contentStyles","restoreFocusOnKeyDown","bodyHeight","blockCmdArrowNavigation","tapLinksAndImages","blockFormSubmitInsideEditor","ieInternalDragAndDrop","selectionHtml","internalContent","setMceInternalContent","getMceInternalContent","queryCommandSupported","setAttributeNode","DOM$6","getRootName","removeUndefined","mkSchemaSettings","boolean_attributes","move_caret_before_on_enter_elements","non_empty_elements","short_ended_elements","text_inline_elements","whitespace_elements","format_empty_lines","mkParserSettings","moveSelectionToFirstCaretPosition","storeNative","initEditor","bindPendingEventDelegates","fireInit","execCallback","auto_focus","autoFocus","getStyleSheetLoader$1","loadContentCss","removeCss","contentCssText_1","allStylesheets","framedFonts","makeStylesheetLoadingPromises","content_style","appendStyle","preInit","firePreInit","browser_spellcheck","gecko_spellcheck","spellcheck","firePostRender","directionality","getDirectionality","protect","initEditorWithInitialContent","startContent","loadInitialContent","initContentBody","skipWrite","orgVisibility","iframeHTML","hex_colors","force_hex_style_colors","createParser","mkSerializerSettings","annotator","_nodeChangeDispatcher","setup$4","setup$d","setupRtcThunk","setupRtc","setProgressState","_rtcMode","DOM$5","getIframeHtml","getDocType","bodyId","getBodyId","bodyClass","getBodyClass","translatedAriaText","getIframeAriaText","createIframe","customAttrs","iframe","iframeTitle","ifr","getIframeAttrs","frameBorder","allowTransparency","isDomainRelaxed","domain","hostname","bodyUuid","domainRelaxUrl","relaxDomain","iframeContainer","DOM$4","initPlugin","initializedPlugins","Plugin","pluginInstance","pluginInitError","trimLegacyPrefix","createThemeFalseResult","renderThemeFalse","renderThemeFalseIframe","renderThemeUi","renderUI","renderFromLoadedTheme","iframeHeight","renderFromThemeFunc","iconPackName","currentIcons","loadIcons","svgData","addIcon","initIcons","Theme","initTheme","initPlugins","renderInfo","uiApiFacade","augmentEditorUiApi","boxInfo","init$1","DOM$3","hasSkipLoadPrefix","loadLanguage","scriptLoader","languageCode","languageUrl","getLanguageUrl","url_1","languageLoadError","getIconsUrlMetaFromName","defaultIconsUrl","customIconsUrl","getIconsUrl","getIconsUrlMetaFromUrl","cat","urlMeta","iconsLoadError","themeUrl","getThemeUrl","loadTheme","getExternalPlugins$1","depPlugin","url_2","loadPlugins","snapshot","clone$3","getStyleSheetLoader","isInline","resetContent","shouldPatchSubmit","triggerSave","windowManager","isEncodingXml","shouldAddFormSubmitTrigger","shouldAddUnloadTrigger","set_dirty","addVisual$1","legacyPropNames","getSpecifiedFontProp","legacyPropName","getProperty","getFontProp","getComputedFontProp","getFontSize","getFontFamily","findFirstCaretElement","bindRange","binder","getCaretElement","mapRange","mapper","fromFontSizeNumber","fontSizeNumber","getFontStyleValues","fontClasses","getFontSizeClasses","normalizeFontNames","font","fonts","insertAtCaret","processValue","each$4","EditorCommands","setupCommands","skip_focus","customCommand","queryCommandValue","addCommands","commandList","addQueryStateHandler","addQueryValueHandler","hasCustomCommand","execNativeCommand","isFormatMatch","storeSelection","selectionBookmark","_command","_ui","queryCommandEnabled","listParent","fontNameAction","fontSizeAction","lineHeightAction","customCode","editingHost","selectNodeContents","alignStates","Undo","Redo","fontNameQuery","fontSizeQuery","specifiedStyle","lineHeightQuery","internalContentEditableAttr","setContentEditable","toggleReadOnly","removeFakeSelection","switchOnContentEditableTrue","restoreFakeSelection","registerFilters","processReadonlyEvents","isClickEvent","getAnchorHrefOpt","targetEl","numChars","removeFromStart","nativeEvents","EventDispatcher","bindings","toggleEvent","lcName","beforeFire","wrappedCallback","currentName","bindingName","filteredHandlers","getEventDispatcher","_eventDispatcher","toggleNativeEvent","bubble","dispatcherArgs","DOM$2","getEventTarget","eventRoot","isListening","bindEventDelegate","delegates","eventRootElm","editors","EditorObservable","_pendingNativeEvents","defaultModes","switchToMode","activeMode","availableModes","oldMode","newMode","activate","deactivate","editorReadOnly","fireSwitchMode","create$4","design","registerReadOnlyContentFilters","registerReadOnlySelectionBlockers","setMode","registerMode","each$3","explode$1","keyCodeLookup","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","modifierNames","parseShortcut","shortcut","ctrl","Shortcuts","pendingPatterns","hasModifier","isFunctionKey","matchShortcut","subpatterns","executeShortcutAction","desc","cmdFunc","normalizeCommandFunc","createShortcut","bridge","menuItems","popups","contextMenus","contextToolbars","sidebars","addButton","addGroupToolbarButton","addToggleButton","addMenuButton","addSplitButton","addMenuItem","addNestedMenuItem","addToggleMenuItem","addAutocompleter","addContextMenu","addContextToolbar","addContextForm","addSidebar","create$3","DOM$1","extend$3","each$2","Editor","loadedCSS","isNotDirty","documentBaseURL","base_url","_setBaseUrl","baseURI","referrer_policy","language_load","editorCommands","cache_suffix","modeInstance","callbackLookup","initialContent","oldState","urlconverter_callback","_scanForImages","each$1","extend$2","instanceCounter","boundGlobalEvents","legacyEditors","globalEventDelegate","EditorManager","toggleGlobalEvents","removeEditorFromList","targetEditor","oldEditors","isQuirksMode","compatMode","majorVersion","minorVersion","releaseDate","i18n","tinymce","tinyMCEPreInit","srcScript","currentScript","pluginBaseUrls","plugin_base_urls","pluginBaseUrl","invalidInlineTargets","createId","provideResults","initEditors","initCount","createEditor","forms","editor_deselector","editor_selector","findTargets","isInvalidInlineTarget","addI18n","tasks","resultFns","extendClass","initializing","min$1","max$1","round$1","relativePosition","targetW","targetH","relChars","create$2","Rect","inflate","findBestRelativePosition","constrainRect","rels","intersect","cropRect","x1","y1","clampRect","fixedSize","cx2","cy2","underflowX1","underflowY1","overflowX2","overflowY2","fromClientRect","Resource","loadErrMsg","runErrMsg","task","waiter","resolveCb","rejectCb","completer","awaiter","extend$1","Class","_super","mixins","Mixins","dummy","Methods","Properties","fieldName","Statics","member","createMethod","JSONUtils","hexCode","JSONP","XHR","success_scope","error_scope","content_type","requestheaders","JSONRequest","sendRPC","ecb","scb","xhrArgs","ty","removeItem","storage","publicApi","geom","LocalStorage","Color","hue","saturation","brightness","chroma","hsvToRgb","toRgb","toHsv","minRGB","maxRGB","rgb2hsv","ImageUploader","showNotification","TreeWalker","Serializer","Selection","isMac","tinyMCE","exportToWindowGlobal","exportToModuleLoaders","tooltip","nprogress","btnloading","ciAccordion","buidSelect2","popover","ajaxStart","appendHiddenInput","CI","routes","customBtn","initiateDataTable","addErrorHandler","registerTableProcessingPlugin","sortColumn","serverSide","processing","route","stateSave","lengthChange","autoWidth","pageLength","lengthMenu","initComplete","hasRoute","addTableActions","deleteRows","selectAllRowsEventListener","addTableCustomActions","onRowClick","redirectToRowPage","rowCallback","makeRowClickable","drawCallback","selectRowEventListener","checkSelectedCheckboxes","getSelectedIds","stateSaveParams","langs","deleted","willDelete","getRowIds","setSelectedIds","reload","responseJSON","appendToSelected","removeFromSelected","checkableRows","router","helpPage","btn","admin","Admin","Form","apiToken","csrfToken","qt","Rt","Et","ue","ht","Nt","D","P","R","Lt","C","T","ce","fe","I","A","F","L","H","Tt","Ot","W","N","ft","Mt","U","valign","yt","G","M","et","st","E","B","bAjaxDataGet","V","X","Dt","J","sEcho","iTotalRecords","iTotalDisplayRecords","ot","be","Y","z","Z","K","he","Q","tt","nt","rt","vt","it","kt","ut","pt","bt","St","mt","ge","xt","_t","Ct","jt","wt","It","At","Ft","Pt","Ht","Wt","Ae","Fe","Kt","zt","Ut","Bt","Vt","Xt","Jt","Gt","$t","Yt","Zt","Qt","te","ee","ae","oe","le","Se","Ce","recordsDisplay","ve","De","ye","Te","we","xe","Ie","bScrollCollapse","sScrollXInner","sScrollY","aoRowCallback","aoHeaderCallback","aoFooterCallback","aoRowCreatedCallback","aoPreDrawCallback","aoInitComplete","aoStateSaveParams","aoStateLoadParams","aoStateLoaded","aoOpenRows","aoStateSave","aoStateLoad","aoServerParams","aoDestroyCallback","oPlugins","build","Le","bootstrap","widget","Widget","_createWidget","_childConstructors","_superApply","widgetEventPrefix","widgetName","widgetFullName","_init","defaultElement","eventNamespace","hoverable","focusable","classesElementLookup","_on","_getCreateOptions","_create","_setOptionDisabled","_trigger","_getCreateEventData","_destroy","_removeClass","_setOptions","_setOption","_setOptionClasses","_classes","_toggleClass","_untrackClassesElement","_addClass","_off","_delay","_hoverable","_focusable","focusout","effect","effects","disableSelection","enableSelection","COMMA","ESCAPE","PERIOD","distance","_mouseDown","_mouseMoveDelegate","_mouseUpDelegate","_mouseMoved","_mouseStarted","_mouseUp","_mouseDownEvent","mouseDelayMet","_mouseDelayTimer","_mouseDistanceMet","_mouseDelayMet","_mouseStart","_mouseMove","ignoreMissingWhich","_mouseDrag","_mouseStop","safeBlur","addClasses","connectToSortable","containment","cursor","cursorAt","grid","helper","iframeFix","refreshPositions","revert","revertDuration","scrollSensitivity","scrollSpeed","snap","snapMode","snapTolerance","drag","_setPositionRelative","_setHandleClassName","_removeHandleClassName","destroyOnClear","_getHandle","_blurActiveElement","_blockFrames","iframeBlocks","_unblockFrames","_createHelper","_cacheHelperProportions","ddmanager","_cacheMargins","cssPosition","hasFixedAncestor","positionAbs","_refreshOffsets","originalPosition","_generatePosition","originalPageX","originalPageY","_adjustOffsetFromHelper","_setContainment","dropBehaviour","prepareOffsets","dragStart","margins","_getParentOffset","_getRelativeOffset","_convertPositionTo","_uiHash","dropped","dragStop","handleElement","helperProportions","_isRootNode","relativeContainer","cancelHelperRemoval","sortables","sortable","isOver","_storedCSS","_helper","_intersectsWith","containerCache","currentItem","fromOutside","_revert","_cursor","_opacity","scrollParentNotHidden","overflowOffset","snapElements","snapping","release","snapItem","_zIndex","draggable","accept","greedy","tolerance","isover","isout","proportions","_addToManager","droppables","_splice","_addActiveClass","_deactivate","_removeActiveClass","_over","_addHoverClass","_out","_removeHoverClass","_drop","droppable","greedyChild","uiBackCompat","hoverClass","activeClass","alsoResize","animateDuration","animateEasing","aspectRatio","autoHide","handles","maxHeight","minHeight","_num","_hasScroll","_aspectRatio","originalElement","_proportionallyResizeElements","resizable","elementIsWrapper","originalResizeStyle","zoom","_proportionallyResize","_setupHandles","_handles","resizing","_removeHandles","_renderAxis","mousedown","_renderProxy","originalSize","sizeDiff","originalMousePosition","_propagate","_change","_updatePrevProperties","_updateVirtualBoundaries","_updateRatio","_respectSize","_updateCache","_applyChanges","prevSize","_vBoundaries","_getPaddingPlusBorderDimensions","outerDimensions","elementOffset","containerElement","containerOffset","containerPosition","parentData","containerSize","autoRefresh","selecting","unselected","unselecting","dragged","elementPos","selectees","startselected","opos","connectWith","dropOnEmpty","forcePlaceholderSize","forceHelperSize","beforeStop","change","receive","_isOverAxis","_isFloating","reverting","_refreshItems","_removeCurrentsFromItems","currentContainer","domPosition","_createPlaceholder","storedCursor","storedStylesheet","_storedOpacity","_storedZIndex","_preserveHelperProportions","containers","lastPositionAbs","_intersectsWithPointer","_intersectsWithSides","_rearrange","_contactContainers","_noFinalSort","_getItemsAsjQuery","connected","attribute","expression","forcePointerForContainers","_getDragVerticalDirection","_getDragHorizontalDirection","_connectWith","toleranceElement","custom","refreshContainers","_createTrPlaceholder","sender","orientation","numPages","_keySliding","_mouseSliding","_animateOff","_handleIndex","_detectOrientation","_calculateNewMax","_refresh","_createRange","_createHandles","_setupEvents","_refreshValue","_valueMin","_handleEvents","elementSize","_normValueFromMouse","_valueMax","_lastChangedValue","_start","_clickOffset","_stop","_trimAlignValue","handleIndex","_hasMultipleValues","_values","_refreshRange","_precision","_precisionOf","keydown","keyup","scrollbarDashboard","contentScrollbar","userScrollbar","toggle_sidebar","toggle_topbar","minimize_sidebar","toggle_page_sidebar","nav_open","quick_sidebar_open","topbar_open","mini_sidebar","page_sidebar_open","overlay_sidebar_open","mouseup","topbar","minibutton","pageSidebarToggler","overlaybutton","inputPassword","branding","image_advtab","image_title","toolbar","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","chunkIds","notFulfilled","fulfilled","definition","nmd","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}