{"version":3,"file":"js/scripts.bundle.js","mappings":";;;;;;;;;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,EAAE;AACF,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;ACzCa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,uDAAuD;AACvD,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,aAAa;AACb;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,uDAAuD;AACvD,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,kDAAkD;AAClD,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA,aAAa;;AAEb;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;;AAEA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,cAAc;AACd;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,gBAAgB;AACpF;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;;AAEA,4BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;AC3qBa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;AChLa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6BAA6B,qCAAqC;AAC1F;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC;AACtC;AACA,aAAa;;AAEb;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,oCAAoC;AACpC;;AAEA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC;;AAED;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;AC7Da;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA,0CAA0C;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA,SAAS;;AAET;AACA;;AAEA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,4CAA4C;;AAE5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;AChSa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+FAA+F;;AAE/F;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA4C,SAAS;AACrD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA4C,SAAS;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,uDAAuD,SAAS;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;AC9ca;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;ACxHa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;AClKa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;AChNa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,iCAAiC;;AAEjC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,oDAAoD,SAAS;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iCAAiC;AACjC,UAAU;AACV;AACA;;AAEA;AACA,+DAA+D;AAC/D;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,2GAA2G;AAC3G;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;;AAEA;AACA,gDAAgD,SAAS;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,cAAc;AACd;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;;AAEV;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;;AAEV;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,kDAAkD;AAClD,0DAA0D;;AAE1D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,+CAA+C;;AAE/C;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA,sDAAsD,SAAS;AAC/D;;AAEA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,sDAAsD,SAAS;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA4C,SAAS;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA4C,SAAS;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iDAAiD,SAAS;AAC1D;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,uDAAuD,SAAS;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C,SAAS;AACxD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;AClnCa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,wEAAwE;AACxE;;AAEA;AACA,sDAAsD;AACtD;;AAEA;AACA,sDAAsD;AACtD;;AAEA;AACA,sDAAsD;AACtD;;AAEA;AACA,wCAAwC,IAAI,4CAA4C;AACxF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;AC5Pa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,0CAA0C;;AAE1C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,wDAAwD,SAAS;AACjE;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wDAAwD,SAAS;AACjE;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,SAAS;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;ACrWa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;;AAEA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA,yCAAyC;;AAEzC;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,yBAAyB,2BAA2B;AACpD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;ACnKa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;ACtba;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA,0CAA0C;AAC1C;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,wDAAwD,SAAS;AACjE;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,mDAAmD,SAAS;AAC5D;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;AC1Va;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU,OAAO;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kEAAkE,SAAS;AAC3E;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kEAAkE,SAAS;AAC3E;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,SAAS;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;ACzZa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,0CAA0C;;AAE1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,SAAS;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;ACnLa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;ACvNa;;AAEb;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAqD;AACzE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA,SAAS;AACT,KAAK;AACL,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA;AACA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,UAAU;AAC7B;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,UAAU;AAC7B;AACA;AACA,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B,mBAAmB,QAAQ;AAC3B,qBAAqB;AACrB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA,cAAc;;AAEd;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD,yBAAyB;AACzE;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,4BAA4B,SAAS;AACrC;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B,mBAAmB,QAAQ;AAC3B,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;;AAET,0CAA0C;AAC1C;AACA;;AAEA,4BAA4B,sBAAsB;AAClD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;;AAET,+BAA+B;AAC/B;AACA;;AAEA,4BAA4B,sBAAsB;AAClD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B,mBAAmB,QAAQ;AAC3B,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA;;AAEA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gCAAgC,uBAAuB;AACvD;AACA;AACA;AACA;AACA,cAAc;AACd,gCAAgC,uBAAuB;AACvD;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gCAAgC,uBAAuB;AACvD;AACA;AACA,cAAc;AACd,gCAAgC,uBAAuB;AACvD;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,cAAc;AACd;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2DAA2D;;AAE3D,wCAAwC;AACxC;AACA;AACA,cAAc;AACd;AACA;AACA,wCAAwC;AACxC;AACA;AACA,SAAS;;AAET;AACA;AACA,kBAAkB,cAAc;AAChC;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAc;AACd;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wDAAwD,oBAAoB,eAAe;;AAE3F;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;AACA;AACA,qBAAqB;;AAErB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+BAA+B;AAC/B,oDAAoD,iBAAiB;;AAErE;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;;;AAGjB,cAAc,0BAA0B;AACxC,oDAAoD,iBAAiB;;AAErE;AACA,8EAA8E;AAC9E;AACA,qBAAqB;AACrB;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,yDAAyD,OAAO;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;;AAEA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA,2BAA2B;AAC3B;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA,SAAS;;AAET;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,GAAG;AAChB,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,gCAAgC,EAAE;AAClC;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA,oDAAoD,2BAA2B;AAC/E,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,wEAAwE,eAAe;AACvF;AACA;;AAEA;AACA;AACA;AACA,+BAA+B,uCAAuC,EAAE,uCAAuC,EAAE,uCAAuC;AACxJ,SAAS;;AAET;AACA;AACA;AACA;AACA,wEAAwE,eAAe;;AAEvF;AACA;AACA;AACA;AACA;;AAEA,+BAA+B,4CAA4C,EAAE,4CAA4C,EAAE,4CAA4C;AACvK,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA,+BAA+B,EAAE;AACjC;AACA;AACA,CAAC;;AAED;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;ACjkDa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;;;;;;;;;;;ACvKY;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;AClCa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,UAAU;AACV;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;AACJ,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,GAAG;;AAEH;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;AC1Ka;;AAEb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;;;;;;UCxCD;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;;;;;ACtBA;AACA,sBAAsB,mBAAO,CAAC,mEAA8B;AAC5D,gBAAgB,mBAAO,CAAC,iEAA6B;AACrD,eAAe,mBAAO,CAAC,+DAA4B;AACnD,wBAAwB,mBAAO,CAAC,mFAAsC;AACtE,mBAAmB,mBAAO,CAAC,uEAAgC;AAC3D,kBAAkB,mBAAO,CAAC,qEAA+B;AACzD,kBAAkB,mBAAO,CAAC,qEAA+B;AACzD,kBAAkB,mBAAO,CAAC,qEAA+B;AACzD,oBAAoB,mBAAO,CAAC,yEAAiC;AAC7D,sBAAsB,mBAAO,CAAC,+EAAoC;AAClE,gBAAgB,mBAAO,CAAC,iEAA6B;AACrD,yBAAyB,mBAAO,CAAC,qFAAuC;AACxE,kBAAkB,mBAAO,CAAC,qEAA+B;AACzD,qBAAqB,mBAAO,CAAC,2EAAkC;AAC/D,kBAAkB,mBAAO,CAAC,qEAA+B;AACzD,mBAAmB,mBAAO,CAAC,uEAAgC;AAC3D,kBAAkB,mBAAO,CAAC,qEAA+B;AACzD,mBAAmB,mBAAO,CAAC,uEAAgC;AAC3D,kBAAkB,mBAAO,CAAC,qEAA+B;;AAEzD;AACA,qBAAqB,mBAAO,CAAC,qEAA+B;AAC5D,yBAAyB,mBAAO,CAAC,+EAAoC;AACrE,wBAAwB,mBAAO,CAAC,6DAA2B;AAC3D,wBAAwB,mBAAO,CAAC,wFAA4B,E","sources":["webpack://keenthemes/../src/js/components/_init.js","webpack://keenthemes/../src/js/components/app.js","webpack://keenthemes/../src/js/components/blockui.js","webpack://keenthemes/../src/js/components/cookie.js","webpack://keenthemes/../src/js/components/dialer.js","webpack://keenthemes/../src/js/components/drawer.js","webpack://keenthemes/../src/js/components/event-handler.js","webpack://keenthemes/../src/js/components/feedback.js","webpack://keenthemes/../src/js/components/image-input.js","webpack://keenthemes/../src/js/components/menu.js","webpack://keenthemes/../src/js/components/password-meter.js","webpack://keenthemes/../src/js/components/scroll.js","webpack://keenthemes/../src/js/components/scrolltop.js","webpack://keenthemes/../src/js/components/search.js","webpack://keenthemes/../src/js/components/stepper.js","webpack://keenthemes/../src/js/components/sticky.js","webpack://keenthemes/../src/js/components/swapper.js","webpack://keenthemes/../src/js/components/toggle.js","webpack://keenthemes/../src/js/components/util.js","webpack://keenthemes/../src/js/layout/search.js","webpack://keenthemes/../src/js/layout/theme-mode-user.js","webpack://keenthemes/../src/js/layout/theme-mode.js","webpack://keenthemes/../../../themes/oswald/html/src/js/layout/sidebar.js","webpack://keenthemes/webpack/bootstrap","webpack://keenthemes/../../../themes/oswald/html/tools/webpack/scripts.js"],"sourcesContent":["//\n// Global init of core components\n//\n\n// Init components\nvar KTComponents = function () {\n    // Public methods\n    return {\n        init: function () {\n            KTApp.init();\n\t\t\tKTDrawer.init();\n\t\t\tKTMenu.init();\n\t\t\tKTScroll.init();\n\t\t\tKTSticky.init();\n\t\t\tKTSwapper.init();\n\t\t\tKTToggle.init();\n\t\t\tKTScrolltop.init();\n\t\t\tKTDialer.init();\t\n\t\t\tKTImageInput.init();\n\t\t\tKTPasswordMeter.init();\t\n        }\n    }\t\n}();\n\n// On document ready\nif (document.readyState === \"loading\") {\n\tdocument.addEventListener(\"DOMContentLoaded\", function() {\n\t\tKTComponents.init();\n\t});\n } else {\n\tKTComponents.init();\n }\n\n // Init page loader\nwindow.addEventListener(\"load\", function() {\n    KTApp.hidePageLoading();\n});\n\n// Declare KTApp for Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n\twindow.KTComponents = module.exports = KTComponents;\n}","\"use strict\";\n\n// Class definition\nvar KTApp = function () {\n    var initialized = false;\n    var select2FocusFixInitialized = false;\n    var countUpInitialized = false;\n\n    var createBootstrapTooltip = function (el, options) {\n        if (el.getAttribute(\"data-kt-initialized\") === \"1\") {\n            return;\n        }\n\n        var delay = {};\n\n        // Handle delay options\n        if (el.hasAttribute('data-bs-delay-hide')) {\n            delay['hide'] = el.getAttribute('data-bs-delay-hide');\n        }\n\n        if (el.hasAttribute('data-bs-delay-show')) {\n            delay['show'] = el.getAttribute('data-bs-delay-show');\n        }\n\n        if (delay) {\n            options['delay'] = delay;\n        }\n\n        // Check dismiss options\n        if (el.hasAttribute('data-bs-dismiss') && el.getAttribute('data-bs-dismiss') == 'click') {\n            options['dismiss'] = 'click';\n        }\n\n        // Initialize popover\n        var tp = new bootstrap.Tooltip(el, options);        \n\n        // Handle dismiss\n        if (options['dismiss'] && options['dismiss'] === 'click') {\n            // Hide popover on element click\n            el.addEventListener(\"click\", function (e) {\n                tp.hide();\n            });\n        }\n\n        el.setAttribute(\"data-kt-initialized\", \"1\");\n\n        return tp;\n    }\n\n    var createBootstrapTooltips = function () {\n        var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"tooltip\"]'));\n\n        var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {\n            createBootstrapTooltip(tooltipTriggerEl, {});\n        });\n    }\n\n    var createBootstrapPopover = function (el, options) {\n        if (el.getAttribute(\"data-kt-initialized\") === \"1\") {\n            return;\n        }\n\n        var delay = {};\n\n        // Handle delay options\n        if (el.hasAttribute('data-bs-delay-hide')) {\n            delay['hide'] = el.getAttribute('data-bs-delay-hide');\n        }\n\n        if (el.hasAttribute('data-bs-delay-show')) {\n            delay['show'] = el.getAttribute('data-bs-delay-show');\n        }\n\n        if (delay) {\n            options['delay'] = delay;\n        }\n\n        // Handle dismiss option\n        if (el.getAttribute('data-bs-dismiss') == 'true') {\n            options['dismiss'] = true;\n        }\n\n        if (options['dismiss'] === true) {\n            options['template'] = '<div class=\"popover\" role=\"tooltip\"><div class=\"popover-arrow\"></div><span class=\"popover-dismiss btn btn-icon\"></span><h3 class=\"popover-header\"></h3><div class=\"popover-body\"></div></div>'\n        }\n\n        // Initialize popover\n        var popover = new bootstrap.Popover(el, options);\n\n        // Handle dismiss click\n        if (options['dismiss'] === true) {\n            var dismissHandler = function (e) {\n                popover.hide();\n            }\n\n            el.addEventListener('shown.bs.popover', function () {\n                var dismissEl = document.getElementById(el.getAttribute('aria-describedby'));\n                dismissEl.addEventListener('click', dismissHandler);\n            });\n\n            el.addEventListener('hide.bs.popover', function () {\n                var dismissEl = document.getElementById(el.getAttribute('aria-describedby'));\n                dismissEl.removeEventListener('click', dismissHandler);\n            });\n        }\n\n        el.setAttribute(\"data-kt-initialized\", \"1\");\n\n        return popover;\n    }\n\n    var createBootstrapPopovers = function () {\n        var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"popover\"]'));\n\n        var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {\n            createBootstrapPopover(popoverTriggerEl, {});\n        });\n    }\n\n    var createBootstrapToasts = function () {\n        var toastElList = [].slice.call(document.querySelectorAll('.toast'));\n        var toastList = toastElList.map(function (toastEl) {\n            if (toastEl.getAttribute(\"data-kt-initialized\") === \"1\") {\n                return;\n            }\n\n            toastEl.setAttribute(\"data-kt-initialized\", \"1\");\n\n            return new bootstrap.Toast(toastEl, {})\n        });\n    }\n\n    var createButtons = function () {\n        var buttonsGroup = [].slice.call(document.querySelectorAll('[data-kt-buttons=\"true\"]'));\n\n        buttonsGroup.map(function (group) {\n            if (group.getAttribute(\"data-kt-initialized\") === \"1\") {\n                return;\n            }\n\n            var selector = group.hasAttribute('data-kt-buttons-target') ? group.getAttribute('data-kt-buttons-target') : '.btn';\n            var activeButtons = [].slice.call(group.querySelectorAll(selector));\n\n            // Toggle Handler\n            KTUtil.on(group, selector, 'click', function (e) {\n                activeButtons.map(function (button) {\n                    button.classList.remove('active');\n                });\n\n                this.classList.add('active');\n            });       \n\n            group.setAttribute(\"data-kt-initialized\", \"1\");\n        });\n    }\n\n    var createDateRangePickers = function() {\n        // Check if jQuery included\n        if (typeof jQuery == 'undefined') {\n            return;\n        }\n\n        // Check if daterangepicker included\n        if (typeof $.fn.daterangepicker === 'undefined') {\n            return;\n        }\n\n        var elements = [].slice.call(document.querySelectorAll('[data-kt-daterangepicker=\"true\"]'));\n        var start = moment().subtract(29, 'days');\n        var end = moment();\n        \n        elements.map(function (element) {\n            if (element.getAttribute(\"data-kt-initialized\") === \"1\") {\n                return;\n            }\n\n            var display = element.querySelector('div');\n            var attrOpens  = element.hasAttribute('data-kt-daterangepicker-opens') ? element.getAttribute('data-kt-daterangepicker-opens') : 'left';\n            var range = element.getAttribute('data-kt-daterangepicker-range');\n\n            var cb = function(start, end) {\n                var current = moment();\n\n                if (display) {\n                    if ( current.isSame(start, \"day\") && current.isSame(end, \"day\") ) {\n                        display.innerHTML = start.format('D MMM YYYY');\n                    } else {\n                        display.innerHTML = start.format('D MMM YYYY') + ' - ' + end.format('D MMM YYYY');\n                    }                    \n                }\n            }\n\n            if ( range === \"today\" ) {\n                start = moment();\n                end = moment();\n            }\n\n            $(element).daterangepicker({\n                startDate: start,\n                endDate: end,\n                opens: attrOpens,\n                ranges: {\n                'Today': [moment(), moment()],\n                'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n                'Last 7 Days': [moment().subtract(6, 'days'), moment()],\n                'Last 30 Days': [moment().subtract(29, 'days'), moment()],\n                'This Month': [moment().startOf('month'), moment().endOf('month')],\n                'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]\n                }\n            }, cb);\n\n            cb(start, end);\n\n            element.setAttribute(\"data-kt-initialized\", \"1\");\n        });\n    }\n\n    var createSelect2 = function () {\n        // Check if jQuery included\n        if (typeof jQuery == 'undefined') {\n            return;\n        }\n\n        // Check if select2 included\n        if (typeof $.fn.select2 === 'undefined') {\n            return;\n        }\n\n        var elements = [].slice.call(document.querySelectorAll('[data-control=\"select2\"], [data-kt-select2=\"true\"]'));\n\n        elements.map(function (element) {\n            if (element.getAttribute(\"data-kt-initialized\") === \"1\") {\n                return;\n            }\n\n            var options = {\n                dir: document.body.getAttribute('direction')\n            };\n\n            if (element.getAttribute('data-hide-search') == 'true') {\n                options.minimumResultsForSearch = Infinity;\n            }\n\n            $(element).select2(options);\n\n            element.setAttribute(\"data-kt-initialized\", \"1\");\n        });\n\n        /*\n        * Hacky fix for a bug in select2 with jQuery 3.6.0's new nested-focus \"protection\"\n        * see: https://github.com/select2/select2/issues/5993\n        * see: https://github.com/jquery/jquery/issues/4382\n        *\n        * TODO: Recheck with the select2 GH issue and remove once this is fixed on their side\n        */\n\n        if (select2FocusFixInitialized === false) {\n            select2FocusFixInitialized = true;\n            \n            $(document).on('select2:open', function(e) {\n                var elements = document.querySelectorAll('.select2-container--open .select2-search__field');\n                if (elements.length > 0) {\n                    elements[elements.length - 1].focus();\n                }                \n            });\n        }        \n    }\n\n    var createAutosize = function () {\n        if (typeof autosize === 'undefined') {\n            return;\n        }\n\n        var inputs = [].slice.call(document.querySelectorAll('[data-kt-autosize=\"true\"]'));\n\n        inputs.map(function (input) {\n            if (input.getAttribute(\"data-kt-initialized\") === \"1\") {\n                return;\n            }\n\n            autosize(input);\n\n            input.setAttribute(\"data-kt-initialized\", \"1\");\n        });\n    }\n\n    var createCountUp = function () {\n        if (typeof countUp === 'undefined') {\n            return;\n        }\n\n        var elements = [].slice.call(document.querySelectorAll('[data-kt-countup=\"true\"]:not(.counted)'));\n\n        elements.map(function (element) {\n            if (KTUtil.isInViewport(element) && KTUtil.visible(element)) {\n                if (element.getAttribute(\"data-kt-initialized\") === \"1\") {\n                    return;\n                }\n\n                var options = {};\n\n                var value = element.getAttribute('data-kt-countup-value');\n                value = parseFloat(value.replace(/,/g, \"\"));\n\n                if (element.hasAttribute('data-kt-countup-start-val')) {\n                    options.startVal = parseFloat(element.getAttribute('data-kt-countup-start-val'));\n                }\n\n                if (element.hasAttribute('data-kt-countup-duration')) {\n                    options.duration = parseInt(element.getAttribute('data-kt-countup-duration'));\n                }\n\n                if (element.hasAttribute('data-kt-countup-decimal-places')) {\n                    options.decimalPlaces = parseInt(element.getAttribute('data-kt-countup-decimal-places'));\n                }\n\n                if (element.hasAttribute('data-kt-countup-prefix')) {\n                    options.prefix = element.getAttribute('data-kt-countup-prefix');\n                }\n\n                if (element.hasAttribute('data-kt-countup-separator')) {\n                    options.separator = element.getAttribute('data-kt-countup-separator');\n                }\n\n                if (element.hasAttribute('data-kt-countup-suffix')) {\n                    options.suffix = element.getAttribute('data-kt-countup-suffix');\n                }\n\n                var count = new countUp.CountUp(element, value, options);\n\n                count.start();\n\n                element.classList.add('counted');\n\n                element.setAttribute(\"data-kt-initialized\", \"1\");\n            }\n        });\n    }\n\n    var createCountUpTabs = function () {\n        if (typeof countUp === 'undefined') {\n            return;\n        }\n\n        if (countUpInitialized === false) {\n            // Initial call\n            createCountUp();\n\n            // Window scroll event handler\n            window.addEventListener('scroll', createCountUp);\n        }      \n\n        // Tabs shown event handler\n        var tabs = [].slice.call(document.querySelectorAll('[data-kt-countup-tabs=\"true\"][data-bs-toggle=\"tab\"]'));\n        tabs.map(function (tab) {\n            if (tab.getAttribute(\"data-kt-initialized\") === \"1\") {\n                return;\n            }\n\n            tab.addEventListener('shown.bs.tab', createCountUp);\n\n            tab.setAttribute(\"data-kt-initialized\", \"1\");\n        });\n\n        countUpInitialized = true;\n    }\n\n    var createTinySliders = function () {\n        if (typeof tns === 'undefined') {\n            return;\n        }\n\n        // Sliders\n        const elements = Array.prototype.slice.call(document.querySelectorAll('[data-tns=\"true\"]'), 0);\n\n        if (!elements && elements.length === 0) {\n            return;\n        }\n\n        elements.forEach(function (el) {\n            if (el.getAttribute(\"data-kt-initialized\") === \"1\") {\n                return;\n            }\n\n            initTinySlider(el);\n\n            el.setAttribute(\"data-kt-initialized\", \"1\");\n        });\n    }\n\n    var initTinySlider = function (el) {\n        if (!el) {\n            return;\n        }\n\n        const tnsOptions = {};\n\n        // Convert string boolean\n        const checkBool = function (val) {\n            if (val === 'true') {\n                return true;\n            }\n            if (val === 'false') {\n                return false;\n            }\n            return val;\n        };\n\n        // get extra options via data attributes\n        el.getAttributeNames().forEach(function (attrName) {\n            // more options; https://github.com/ganlanyuan/tiny-slider#options\n            if ((/^data-tns-.*/g).test(attrName)) {\n                let optionName = attrName.replace('data-tns-', '').toLowerCase().replace(/(?:[\\s-])\\w/g, function (match) {\n                    return match.replace('-', '').toUpperCase();\n                });\n\n                if (attrName === 'data-tns-responsive') {\n                    // fix string with a valid json\n                    const jsonStr = el.getAttribute(attrName).replace(/(\\w+:)|(\\w+ :)/g, function (matched) {\n                        return '\"' + matched.substring(0, matched.length - 1) + '\":';\n                    });\n                    try {\n                        // convert json string to object\n                        tnsOptions[optionName] = JSON.parse(jsonStr);\n                    }\n                    catch (e) {\n                    }\n                }\n                else {\n                    tnsOptions[optionName] = checkBool(el.getAttribute(attrName));\n                }\n            }\n        });\n\n        const opt = Object.assign({}, {\n            container: el,\n            slideBy: 'page',\n            autoplay: true,\n            center: true,\n            autoplayButtonOutput: false,\n        }, tnsOptions);\n\n        if (el.closest('.tns')) {\n            KTUtil.addClass(el.closest('.tns'), 'tns-initiazlied');\n        }\n\n        return tns(opt);\n    }\n\n    var initSmoothScroll = function () {\n        if (initialized === true) {\n            return;\n        }\n\n        if (typeof SmoothScroll === 'undefined') {\n            return;\n        }\n\n        new SmoothScroll('a[data-kt-scroll-toggle][href*=\"#\"]', {\n            speed: 1000,\n            speedAsDuration: true,\n            offset: function (anchor, toggle) {\n                // Integer or Function returning an integer. How far to offset the scrolling anchor location in pixels\n                // This example is a function, but you could do something as simple as `offset: 25`\n\n                // An example returning different values based on whether the clicked link was in the header nav or not\n                if (anchor.hasAttribute('data-kt-scroll-offset')) {\n                    var val = KTUtil.getResponsiveValue(anchor.getAttribute('data-kt-scroll-offset'));\n                    \n                    return val;\n                } else {\n                    return 0;\n                }\n            }\n        });\n    }\n\n    var initCard = function() {\n        // Toggle Handler\n        KTUtil.on(document.body, '[data-kt-card-action=\"remove\"]', 'click', function (e) {\n            e.preventDefault();\n            \n            const card = this.closest('.card');\n\n            if (!card) {\n                return;\n            }\n\n            const confirmMessage = this.getAttribute(\"data-kt-card-confirm-message\");\n            const confirm = this.getAttribute(\"data-kt-card-confirm\") === \"true\";\n\n            if (confirm) {\n                // Show message popup. For more info check the plugin's official documentation: https://sweetalert2.github.io/\n                Swal.fire({\n                    text: confirmMessage ? confirmMessage : \"Are you sure to remove ?\",\n                    icon: \"warning\",\n                    buttonsStyling: false,\n                    confirmButtonText: \"Confirm\",\n                    denyButtonText: \"Cancel\",\n                    customClass: {\n                        confirmButton: \"btn btn-primary\",\n                        denyButton: \"btn btn-danger\"\n                    }\n                }).then(function (result) {\n                    if (result.isConfirmed) { \n                        card.remove();\n                    }\n                });\n            } else {\n                card.remove();\n            }            \n        });        \n    }\n\n    var initModal = function() {\n        var elements = Array.prototype.slice.call(document.querySelectorAll(\"[data-bs-stacked-modal]\"));\n\n        if (elements && elements.length > 0) {\n            elements.forEach((element) => {\n                if (element.getAttribute(\"data-kt-initialized\") === \"1\") {\n                    return;\n                }\n    \n                element.setAttribute(\"data-kt-initialized\", \"1\");\n    \n                element.addEventListener(\"click\", function(e) {\n                    e.preventDefault();\n    \n                    const modalEl = document.querySelector(this.getAttribute(\"data-bs-stacked-modal\"));\n    \n                    if (modalEl) {\n                        const modal = new bootstrap.Modal(modalEl, {backdrop: false});\n                        modal.show();\n                    }                \n                }); \n            });\n        }        \n    }\n\n    var initCheck = function () {\n        if (initialized === true) {\n            return;\n        }\n\n        // Toggle Handler\n        KTUtil.on(document.body, '[data-kt-check=\"true\"]', 'change', function (e) {\n            var check = this;\n            var targets = document.querySelectorAll(check.getAttribute('data-kt-check-target'));\n\n            KTUtil.each(targets, function (target) {\n                if (target.type == 'checkbox') {\n                    target.checked = check.checked;\n                } else {\n                    target.classList.toggle('active');\n                }\n            });\n        });\n    }\n\n    var initBootstrapCollapse = function() {\n        if (initialized === true) {\n            return;\n        }\n\n        KTUtil.on(document.body,  '.collapsible[data-bs-toggle=\"collapse\"]', 'click', function(e) {\n            if (this.classList.contains('collapsed')) {\n                this.classList.remove('active');\n                this.blur();\n            } else {\n                this.classList.add('active');\n            }\n\n            if (this.hasAttribute('data-kt-toggle-text')) {\n                var text = this.getAttribute('data-kt-toggle-text');\n                var target = this.querySelector('[data-kt-toggle-text-target=\"true\"]');\n                var target = target ? target : this;\n\n                this.setAttribute('data-kt-toggle-text', target.innerText);\n                target.innerText = text;\n            }\n        });\n    }\n\n    var initBootstrapRotate = function() {\n        if (initialized === true) {\n            return;\n        }\n        \n        KTUtil.on(document.body,  '[data-kt-rotate=\"true\"]', 'click', function(e) {\n            if (this.classList.contains('active')) {\n                this.classList.remove('active');\n                this.blur();\n            } else {\n                this.classList.add('active');\n            }\n        });\n    }\n\n    var initLozad = function() {\n        // Check if lozad included\n        if (typeof lozad === 'undefined') {\n            return;\n        }\n\n\t\tconst observer = lozad(); // lazy loads elements with default selector as '.lozad'\n        observer.observe();\n\t}\n\n    var showPageLoading = function() {\n        document.body.classList.add('page-loading');\n        document.body.setAttribute('data-kt-app-page-loading', \"on\");\n    }\n\n    var hidePageLoading = function() {\n        // CSS3 Transitions only after page load(.page-loading or .app-page-loading class added to body tag and remove with JS on page load)\n        document.body.classList.remove('page-loading');\n        document.body.removeAttribute('data-kt-app-page-loading');\n    }\n\n    return {\n        init: function () {\n            initLozad();\n\n            initSmoothScroll();\n\n            initCard();\n\n            initModal();\n\n            initCheck();\n\n            initBootstrapCollapse();\n\n            initBootstrapRotate();            \n\n            createBootstrapTooltips();\n\n            createBootstrapPopovers();\n\n            createBootstrapToasts();\n\n            createDateRangePickers();\n\n            createButtons();\n\n            createSelect2();\n\n            createCountUp();\n\n            createCountUpTabs();\n\n            createAutosize();\n\n            createTinySliders();\n\n            initialized = true;\n        },\n\n        initTinySlider: function(el) {\n            initTinySlider(el);\n        },\n\n        showPageLoading: function () {\n            showPageLoading();\n        },\n\n        hidePageLoading: function () {\n            hidePageLoading();\n        },\n\n        createBootstrapPopover: function(el, options) {\n            return createBootstrapPopover(el, options);\n        },\n\n        createBootstrapTooltip: function(el, options) {\n            return createBootstrapTooltip(el, options);\n        }\n    };\n}();\n\n// Declare KTApp for Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTApp;\n}","\"use strict\";\n\n// Class definition\nvar KTBlockUI = function(element, options) {\n    //////////////////////////////\n    // ** Private variables  ** //\n    //////////////////////////////\n    var the = this;\n\n    if ( typeof element === \"undefined\" || element === null ) {\n        return;\n    }\n\n    // Default options\n    var defaultOptions = {\n        zIndex: false,\n        overlayClass: '',\n        overflow: 'hidden',\n        message: '<span class=\"spinner-border text-primary\"></span>'\n    };\n\n    ////////////////////////////\n    // ** Private methods  ** //\n    ////////////////////////////\n\n    var _construct = function() {\n        if ( KTUtil.data(element).has('blockui') ) {\n            the = KTUtil.data(element).get('blockui');\n        } else {\n            _init();\n        }\n    }\n\n    var _init = function() {\n        // Variables\n        the.options = KTUtil.deepExtend({}, defaultOptions, options);\n        the.element = element;\n        the.overlayElement = null;\n        the.blocked = false;\n        the.positionChanged = false;\n        the.overflowChanged = false;\n\n        // Bind Instance\n        KTUtil.data(the.element).set('blockui', the);\n    }\n\n    var _block = function() {\n        if ( KTEventHandler.trigger(the.element, 'kt.blockui.block', the) === false ) {\n            return;\n        }\n\n        var isPage = (the.element.tagName === 'BODY');\n       \n        var position = KTUtil.css(the.element, 'position');\n        var overflow = KTUtil.css(the.element, 'overflow');\n        var zIndex = isPage ? 10000 : 1;\n\n        if (the.options.zIndex > 0) {\n            zIndex = the.options.zIndex;\n        } else {\n            if (KTUtil.css(the.element, 'z-index') != 'auto') {\n                zIndex = KTUtil.css(the.element, 'z-index');\n            }\n        }\n\n        the.element.classList.add('blockui');\n\n        if (position === \"absolute\" || position === \"relative\" || position === \"fixed\") {\n            KTUtil.css(the.element, 'position', 'relative');\n            the.positionChanged = true;\n        }\n\n        if (the.options.overflow === 'hidden' && overflow === 'visible') {           \n            KTUtil.css(the.element, 'overflow', 'hidden');\n            the.overflowChanged = true;\n        }\n\n        the.overlayElement = document.createElement('DIV');    \n        the.overlayElement.setAttribute('class', 'blockui-overlay ' + the.options.overlayClass);\n        \n        the.overlayElement.innerHTML = the.options.message;\n\n        KTUtil.css(the.overlayElement, 'z-index', zIndex);\n\n        the.element.append(the.overlayElement);\n        the.blocked = true;\n\n        KTEventHandler.trigger(the.element, 'kt.blockui.after.blocked', the)\n    }\n\n    var _release = function() {\n        if ( KTEventHandler.trigger(the.element, 'kt.blockui.release', the) === false ) {\n            return;\n        }\n\n        the.element.classList.add('blockui');\n        \n        if (the.positionChanged) {\n            KTUtil.css(the.element, 'position', '');\n        }\n\n        if (the.overflowChanged) {\n            KTUtil.css(the.element, 'overflow', '');\n        }\n\n        if (the.overlayElement) {\n            KTUtil.remove(the.overlayElement);\n        }        \n\n        the.blocked = false;\n\n        KTEventHandler.trigger(the.element, 'kt.blockui.released', the);\n    }\n\n    var _isBlocked = function() {\n        return the.blocked;\n    }\n\n    var _destroy = function() {\n        KTUtil.data(the.element).remove('blockui');\n    }\n\n    // Construct class\n    _construct();\n\n    ///////////////////////\n    // ** Public API  ** //\n    ///////////////////////\n\n    // Plugin API\n    the.block = function() {\n        _block();\n    }\n\n    the.release = function() {\n        _release();\n    }\n\n    the.isBlocked = function() {\n        return _isBlocked();\n    }\n\n    the.destroy = function() {\n        return _destroy();\n    }\n\n    // Event API\n    the.on = function(name, handler) {\n        return KTEventHandler.on(the.element, name, handler);\n    }\n\n    the.one = function(name, handler) {\n        return KTEventHandler.one(the.element, name, handler);\n    }\n\n    the.off = function(name, handlerId) {\n        return KTEventHandler.off(the.element, name, handlerId);\n    }\n\n    the.trigger = function(name, event) {\n        return KTEventHandler.trigger(the.element, name, event, the, event);\n    }\n};\n\n// Static methods\nKTBlockUI.getInstance = function(element) {\n    if (element !== null && KTUtil.data(element).has('blockui')) {\n        return KTUtil.data(element).get('blockui');\n    } else {\n        return null;\n    }\n}\n\n// Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTBlockUI;\n}","\"use strict\";\n// DOCS: https://javascript.info/cookie\n\n// Class definition\nvar KTCookie = function() {\n    return {\n        // returns the cookie with the given name,\n        // or undefined if not found\n        get: function(name) {\n            var matches = document.cookie.match(new RegExp(\n                \"(?:^|; )\" + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + \"=([^;]*)\"\n            ));\n\n            return matches ? decodeURIComponent(matches[1]) : null;\n        },\n\n        // Please note that a cookie value is encoded,\n        // so getCookie uses a built-in decodeURIComponent function to decode it.\n        set: function(name, value, options) {\n            if ( typeof options === \"undefined\" || options === null ) {\n                options = {};\n            }\n\n            options = Object.assign({}, {\n                path: '/'\n            }, options);\n\n            if ( options.expires instanceof Date ) {\n                options.expires = options.expires.toUTCString();\n            }\n\n            var updatedCookie = encodeURIComponent(name) + \"=\" + encodeURIComponent(value);\n\n            for ( var optionKey in options ) {\n                if ( options.hasOwnProperty(optionKey) === false ) {\n                    continue;\n                }\n\n                updatedCookie += \"; \" + optionKey;\n                var optionValue = options[optionKey];\n\n                if ( optionValue !== true ) {\n                    updatedCookie += \"=\" + optionValue;\n                }\n            }\n\n            document.cookie = updatedCookie;\n        },\n\n        // To remove a cookie, we can call it with a negative expiration date:\n        remove: function(name) {\n            this.set(name, \"\", {\n                'max-age': -1\n            });\n        }\n    }\n}();\n\n// Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTCookie;\n}\n","\"use strict\";\n\n// Class definition\nvar KTDialer = function(element, options) {\n    ////////////////////////////\n    // ** Private variables  ** //\n    ////////////////////////////\n    var the = this;\n\n    if (!element) {\n        return;\n    }\n\n    // Default options\n    var defaultOptions = {\n        min: null,\n        max: null,\n        step: 1,\n        decimals: 0,\n        prefix: \"\",\n        suffix: \"\"\n    };\n\n    ////////////////////////////\n    // ** Private methods  ** //\n    ////////////////////////////\n\n    // Constructor\n    var _construct = function() {\n        if ( KTUtil.data(element).has('dialer') === true ) {\n            the = KTUtil.data(element).get('dialer');\n        } else {\n            _init();\n        }\n    }\n\n    // Initialize\n    var _init = function() {\n        // Variables\n        the.options = KTUtil.deepExtend({}, defaultOptions, options);\n\n        // Elements\n        the.element = element;\n        the.incElement = the.element.querySelector('[data-kt-dialer-control=\"increase\"]');\n        the.decElement = the.element.querySelector('[data-kt-dialer-control=\"decrease\"]');\n        the.inputElement = the.element.querySelector('input[type]'); \n        \n        // Set Values\n        if (_getOption('decimals')) {\n            the.options.decimals = parseInt(_getOption('decimals'));\n        }\n        \n        if (_getOption('prefix')) {\n            the.options.prefix = _getOption('prefix');\n        }\n        \n        if (_getOption('suffix')) {\n            the.options.suffix = _getOption('suffix');\n        }\n        \n        if (_getOption('step')) {\n            the.options.step = parseFloat(_getOption('step'));\n        }\n\n        if (_getOption('min')) {\n            the.options.min = parseFloat(_getOption('min'));\n        }\n\n        if (_getOption('max')) {\n            the.options.max = parseFloat(_getOption('max'));\n        }\n\n        the.value = parseFloat(the.inputElement.value.replace(/[^\\d.]/g, ''));  \n\n        _setValue();\n\n        // Event Handlers\n        _handlers();\n\n        // Bind Instance\n        KTUtil.data(the.element).set('dialer', the);\n    }\n\n    // Handlers\n    var _handlers = function() {\n        KTUtil.addEvent(the.incElement, 'click', function(e) {\n            e.preventDefault();\n        \n            _increase();\n        });\n\n        KTUtil.addEvent(the.decElement, 'click', function(e) {\n            e.preventDefault();\n\n            _decrease();\n        });\n\n        KTUtil.addEvent(the.inputElement, 'input', function(e) {\n            e.preventDefault();\n\n            _setValue();\n        });\n    }\n\n    // Event handlers\n    var _increase = function() {\n        // Trigger \"after.dialer\" event\n        KTEventHandler.trigger(the.element, 'kt.dialer.increase', the);\n\n        the.inputElement.value = the.value + the.options.step;\n        _setValue();\n\n        // Trigger \"before.dialer\" event\n        KTEventHandler.trigger(the.element, 'kt.dialer.increased', the);\n\n        return the;\n    }\n\n    var _decrease = function() {\n        // Trigger \"after.dialer\" event\n        KTEventHandler.trigger(the.element, 'kt.dialer.decrease', the);\n\n        the.inputElement.value = the.value - the.options.step;      \n\n        _setValue();\n\n        // Trigger \"before.dialer\" event\n        KTEventHandler.trigger(the.element, 'kt.dialer.decreased', the);\n\n        return the;\n    }\n\n    // Set Input Value\n    var _setValue = function(value) {\n        // Trigger \"after.dialer\" event\n        KTEventHandler.trigger(the.element, 'kt.dialer.change', the);\n\n        if (value !== undefined) {\n            the.value = value;\n        } else {\n            the.value = _parse(the.inputElement.value); \n        }        \n        \n        if (the.options.min !== null && the.value < the.options.min) {\n            the.value = the.options.min;\n        }\n\n        if (the.options.max !== null && the.value > the.options.max) {\n            the.value = the.options.max;\n        }\n\n        the.inputElement.value = _format(the.value);\n\n        // Trigger input change event\n        the.inputElement.dispatchEvent(new Event('change'));\n\n        // Trigger \"after.dialer\" event\n        KTEventHandler.trigger(the.element, 'kt.dialer.changed', the);\n    }\n\n    var _parse = function(val) {\n        val = val\n            .replace(/[^0-9.-]/g, '')       // remove chars except number, hyphen, point. \n            .replace(/(\\..*)\\./g, '$1')     // remove multiple points.\n            .replace(/(?!^)-/g, '')         // remove middle hyphen.\n            .replace(/^0+(\\d)/gm, '$1');    // remove multiple leading zeros. <-- I added this.\n\n        val = parseFloat(val);\n\n        if (isNaN(val)) {\n            val = 0;\n        } \n\n        return val;\n    }\n\n    // Format\n    var _format = function(val){\n        return the.options.prefix + parseFloat(val).toFixed(the.options.decimals) + the.options.suffix;              \n    }\n\n    // Get option\n    var _getOption = function(name) {\n        if ( the.element.hasAttribute('data-kt-dialer-' + name) === true ) {\n            var attr = the.element.getAttribute('data-kt-dialer-' + name);\n            var value = attr;            \n\n            return value;\n        } else {\n            return null;\n        }\n    }\n\n    var _destroy = function() {\n        KTUtil.data(the.element).remove('dialer');\n    }\n\n    // Construct class\n    _construct();\n\n    ///////////////////////\n    // ** Public API  ** //\n    ///////////////////////\n\n    // Plugin API\n    the.setMinValue = function(value) {\n        the.options.min = value;\n    }\n\n    the.setMaxValue = function(value) {\n        the.options.max = value;\n    }\n\n    the.setValue = function(value) {\n        _setValue(value);\n    }\n\n    the.getValue = function() {\n        return the.inputElement.value;\n    }    \n\n    the.update = function() {\n        _setValue();\n    }\n\n    the.increase = function() {\n        return _increase();\n    }\n\n    the.decrease = function() {\n        return _decrease();\n    }\n\n    the.getElement = function() {\n        return the.element;\n    }\n\n    the.destroy = function() {\n        return _destroy();\n    }\n\n    // Event API\n    the.on = function(name, handler) {\n        return KTEventHandler.on(the.element, name, handler);\n    }\n\n    the.one = function(name, handler) {\n        return KTEventHandler.one(the.element, name, handler);\n    }\n\n    the.off = function(name, handlerId) {\n        return KTEventHandler.off(the.element, name, handlerId);\n    }\n\n    the.trigger = function(name, event) {\n        return KTEventHandler.trigger(the.element, name, event, the, event);\n    }\n};\n\n// Static methods\nKTDialer.getInstance = function(element) {\n    if ( element !== null && KTUtil.data(element).has('dialer') ) {\n        return KTUtil.data(element).get('dialer');\n    } else {\n        return null;\n    }\n}\n\n// Create instances\nKTDialer.createInstances = function(selector = '[data-kt-dialer=\"true\"]') {\n    // Get instances\n    var elements = document.querySelectorAll(selector);\n\n    if ( elements && elements.length > 0 ) {\n        for (var i = 0, len = elements.length; i < len; i++) {\n            new KTDialer(elements[i]);\n        }\n    }\n}\n\n// Global initialization\nKTDialer.init = function() {\n    KTDialer.createInstances();\n};\n\n// Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTDialer;\n}","\"use strict\";\n\nvar KTDrawerHandlersInitialized = false; \n\n// Class definition\nvar KTDrawer = function(element, options) {\n    //////////////////////////////\n    // ** Private variables  ** //\n    //////////////////////////////\n    var the = this;\n\n    if ( typeof element === \"undefined\" || element === null ) {\n        return;\n    }\n\n    // Default options\n    var defaultOptions = {\n        overlay: true,\n        direction: 'end',\n        baseClass: 'drawer',\n        overlayClass: 'drawer-overlay'\n    };\n\n    ////////////////////////////\n    // ** Private methods  ** //\n    ////////////////////////////\n\n    var _construct = function() {\n        if ( KTUtil.data(element).has('drawer') ) {\n            the = KTUtil.data(element).get('drawer');\n        } else {\n            _init();\n        }\n    }\n\n    var _init = function() {\n        // Variables\n        the.options = KTUtil.deepExtend({}, defaultOptions, options);\n        the.uid = KTUtil.getUniqueId('drawer');\n        the.element = element;\n        the.overlayElement = null;\n        the.name = the.element.getAttribute('data-kt-drawer-name');\n        the.shown = false;\n        the.lastWidth;\n        the.toggleElement = null;\n\n        // Set initialized\n        the.element.setAttribute('data-kt-drawer', 'true');\n\n        // Event Handlers\n        _handlers();\n\n        // Update Instance\n        _update();\n\n        // Bind Instance\n        KTUtil.data(the.element).set('drawer', the);\n    }\n\n    var _handlers = function() {\n        var togglers = _getOption('toggle');\n        var closers = _getOption('close');\n\n        if ( togglers !== null && togglers.length > 0 ) {\n            KTUtil.on(document.body, togglers, 'click', function(e) {\n                e.preventDefault();\n\n                the.toggleElement = this;\n                _toggle();\n            });\n        }\n\n        if ( closers !== null && closers.length > 0 ) {\n            KTUtil.on(document.body, closers, 'click', function(e) {\n                e.preventDefault();\n\n                the.closeElement = this;\n                _hide();\n            });\n        }\n    }\n\n    var _toggle = function() {\n        if ( KTEventHandler.trigger(the.element, 'kt.drawer.toggle', the) === false ) {\n            return;\n        }\n\n        if ( the.shown === true ) {\n            _hide();\n        } else {\n            _show();\n        }\n\n        KTEventHandler.trigger(the.element, 'kt.drawer.toggled', the);\n    }\n\n    var _hide = function() {\n        if ( KTEventHandler.trigger(the.element, 'kt.drawer.hide', the) === false ) {\n            return;\n        }\n\n        the.shown = false;\n\n        _deleteOverlay();\n\n        document.body.removeAttribute('data-kt-drawer-' + the.name, 'on');\n        document.body.removeAttribute('data-kt-drawer');\n\n        KTUtil.removeClass(the.element, the.options.baseClass + '-on');\n\n        if ( the.toggleElement !== null ) {\n            KTUtil.removeClass(the.toggleElement, 'active');\n        }\n\n        KTEventHandler.trigger(the.element, 'kt.drawer.after.hidden', the) === false\n    }\n\n    var _show = function() {\n        if ( KTEventHandler.trigger(the.element, 'kt.drawer.show', the) === false ) {\n            return;\n        }\n\n        the.shown = true;\n\n        _createOverlay();\n        document.body.setAttribute('data-kt-drawer-' + the.name, 'on');\n        document.body.setAttribute('data-kt-drawer', 'on');\n\n        KTUtil.addClass(the.element, the.options.baseClass + '-on');\n\n        if ( the.toggleElement !== null ) {\n            KTUtil.addClass(the.toggleElement, 'active');\n        }\n\n        KTEventHandler.trigger(the.element, 'kt.drawer.shown', the);\n    }\n\n    var _update = function() {\n        var width = _getWidth();\n        var direction = _getOption('direction');\n\n        var top = _getOption('top');\n        var bottom = _getOption('bottom');\n        var start = _getOption('start');\n        var end = _getOption('end');\n\n        // Reset state\n        if ( KTUtil.hasClass(the.element, the.options.baseClass + '-on') === true && String(document.body.getAttribute('data-kt-drawer-' + the.name + '-')) === 'on' ) {\n            the.shown = true;\n        } else {\n            the.shown = false;\n        }       \n\n        // Activate/deactivate\n        if ( _getOption('activate') === true ) {\n            KTUtil.addClass(the.element, the.options.baseClass);\n            KTUtil.addClass(the.element, the.options.baseClass + '-' + direction);\n            \n            KTUtil.css(the.element, 'width', width, true);\n            the.lastWidth = width;\n\n            if (top) {\n                KTUtil.css(the.element, 'top', top);\n            }\n\n            if (bottom) {\n                KTUtil.css(the.element, 'bottom', bottom);\n            }\n\n            if (start) {\n                if (KTUtil.isRTL()) {\n                    KTUtil.css(the.element, 'right', start);\n                } else {\n                    KTUtil.css(the.element, 'left', start);\n                }\n            }\n\n            if (end) {\n                if (KTUtil.isRTL()) {\n                    KTUtil.css(the.element, 'left', end);\n                } else {\n                    KTUtil.css(the.element, 'right', end);\n                }\n            }\n        } else {\n            KTUtil.removeClass(the.element, the.options.baseClass);\n            KTUtil.removeClass(the.element, the.options.baseClass + '-' + direction);\n\n            KTUtil.css(the.element, 'width', '');\n\n            if (top) {\n                KTUtil.css(the.element, 'top', '');\n            }\n\n            if (bottom) {\n                KTUtil.css(the.element, 'bottom', '');\n            }\n\n            if (start) {\n                if (KTUtil.isRTL()) {\n                    KTUtil.css(the.element, 'right', '');\n                } else {\n                    KTUtil.css(the.element, 'left', '');\n                }\n            }\n\n            if (end) {\n                if (KTUtil.isRTL()) {\n                    KTUtil.css(the.element, 'left', '');\n                } else {\n                    KTUtil.css(the.element, 'right', '');\n                }\n            }\n\n            _hide();\n        }\n    }\n\n    var _createOverlay = function() {\n        if ( _getOption('overlay') === true ) {\n            the.overlayElement = document.createElement('DIV');\n\n            KTUtil.css(the.overlayElement, 'z-index', KTUtil.css(the.element, 'z-index') - 1); // update\n\n            document.body.append(the.overlayElement);\n\n            KTUtil.addClass(the.overlayElement, _getOption('overlay-class'));\n\n            KTUtil.addEvent(the.overlayElement, 'click', function(e) {\n                e.preventDefault();\n\n                if ( _getOption('permanent') !== true ) {\n                    _hide();\n                }\n            });\n        }\n    }\n\n    var _deleteOverlay = function() {\n        if ( the.overlayElement !== null ) {\n            KTUtil.remove(the.overlayElement);\n        }\n    }\n\n    var _getOption = function(name) {\n        if ( the.element.hasAttribute('data-kt-drawer-' + name) === true ) {\n            var attr = the.element.getAttribute('data-kt-drawer-' + name);\n            var value = KTUtil.getResponsiveValue(attr);\n\n            if ( value !== null && String(value) === 'true' ) {\n                value = true;\n            } else if ( value !== null && String(value) === 'false' ) {\n                value = false;\n            }\n\n            return value;\n        } else {\n            var optionName = KTUtil.snakeToCamel(name);\n\n            if ( the.options[optionName] ) {\n                return KTUtil.getResponsiveValue(the.options[optionName]);\n            } else {\n                return null;\n            }\n        }\n    }\n\n    var _getWidth = function() {\n        var width = _getOption('width');\n\n        if ( width === 'auto') {\n            width = KTUtil.css(the.element, 'width');\n        }\n\n        return width;\n    }\n\n    var _destroy = function() {\n        KTUtil.data(the.element).remove('drawer');\n    }\n\n    // Construct class\n    _construct();\n\n    ///////////////////////\n    // ** Public API  ** //\n    ///////////////////////\n\n    // Plugin API\n    the.toggle = function() {\n        return _toggle();\n    }\n\n    the.show = function() {\n        return _show();\n    }\n\n    the.hide = function() {\n        return _hide();\n    }\n\n    the.isShown = function() {\n        return the.shown;\n    }\n\n    the.update = function() {\n        _update();\n    }\n\n    the.goElement = function() {\n        return the.element;\n    }\n\n    the.destroy = function() {\n        return _destroy();\n    }\n\n    // Event API\n    the.on = function(name, handler) {\n        return KTEventHandler.on(the.element, name, handler);\n    }\n\n    the.one = function(name, handler) {\n        return KTEventHandler.one(the.element, name, handler);\n    }\n\n    the.off = function(name, handlerId) {\n        return KTEventHandler.off(the.element, name, handlerId);\n    }\n\n    the.trigger = function(name, event) {\n        return KTEventHandler.trigger(the.element, name, event, the, event);\n    }\n};\n\n// Static methods\nKTDrawer.getInstance = function(element) {\n    if (element !== null && KTUtil.data(element).has('drawer')) {\n        return KTUtil.data(element).get('drawer');\n    } else {\n        return null;\n    }\n}\n\n// Hide all drawers and skip one if provided\nKTDrawer.hideAll = function(skip = null, selector = '[data-kt-drawer=\"true\"]') {\n    var items = document.querySelectorAll(selector);\n\n    if (items && items.length > 0) {\n        for (var i = 0, len = items.length; i < len; i++) {\n            var item = items[i];\n            var drawer = KTDrawer.getInstance(item);\n\n            if (!drawer) {\n                continue;\n            }\n\n            if ( skip ) {\n                if ( item !== skip ) {\n                    drawer.hide();\n                }\n            } else {\n                drawer.hide();\n            }\n        }\n    }\n}\n\n// Update all drawers\nKTDrawer.updateAll = function(selector = '[data-kt-drawer=\"true\"]') {\n    var items = document.querySelectorAll(selector);\n\n    if (items && items.length > 0) {\n        for (var i = 0, len = items.length; i < len; i++) {\n            var drawer = KTDrawer.getInstance(items[i]);\n\n            if (drawer) {\n                drawer.update();\n            }\n        }\n    }\n}\n\n// Create instances\nKTDrawer.createInstances = function(selector = '[data-kt-drawer=\"true\"]') {\n    // Initialize Menus\n    var elements = document.querySelectorAll(selector);\n\n    if ( elements && elements.length > 0 ) {\n        for (var i = 0, len = elements.length; i < len; i++) {\n            new KTDrawer(elements[i]);\n        }\n    }\n}\n\n// Toggle instances\nKTDrawer.handleShow = function() {\n    // External drawer toggle handler\n    KTUtil.on(document.body,  '[data-kt-drawer-show=\"true\"][data-kt-drawer-target]', 'click', function(e) {\n        e.preventDefault();\n        \n        var element = document.querySelector(this.getAttribute('data-kt-drawer-target'));\n\n        if (element) {\n            KTDrawer.getInstance(element).show();\n        } \n    });\n}\n\n// Dismiss instances\nKTDrawer.handleDismiss = function() {\n    // External drawer toggle handler\n    KTUtil.on(document.body,  '[data-kt-drawer-dismiss=\"true\"]', 'click', function(e) {\n        var element = this.closest('[data-kt-drawer=\"true\"]');\n\n        if (element) {\n            var drawer = KTDrawer.getInstance(element);\n            if (drawer.isShown()) {\n                drawer.hide();\n            }\n        } \n    });\n}\n\n// Handle resize\nKTDrawer.handleResize = function() {\n    // Window resize Handling\n    window.addEventListener('resize', function() {\n        var timer;\n\n        KTUtil.throttle(timer, function() {\n            // Locate and update drawer instances on window resize\n            var elements = document.querySelectorAll('[data-kt-drawer=\"true\"]');\n\n            if ( elements && elements.length > 0 ) {\n                for (var i = 0, len = elements.length; i < len; i++) {\n                    var drawer = KTDrawer.getInstance(elements[i]);\n                    if (drawer) {\n                        drawer.update();\n                    }\n                }\n            }\n        }, 200);\n    });\n}\n\n// Global initialization\nKTDrawer.init = function() {\n    KTDrawer.createInstances();\n\n    if (KTDrawerHandlersInitialized === false) {\n        KTDrawer.handleResize();\n        KTDrawer.handleShow();\n        KTDrawer.handleDismiss();\n\n        KTDrawerHandlersInitialized = true;\n    }\n};\n\n// Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTDrawer;\n}","\"use strict\";\n\n// Class definition\nvar KTEventHandler = function() {\n    ////////////////////////////\n    // ** Private Variables  ** //\n    ////////////////////////////\n    var _handlers = {};\n\n    ////////////////////////////\n    // ** Private Methods  ** //\n    ////////////////////////////\n    var _triggerEvent = function(element, name, target) {\n        var returnValue = true;\n        var eventValue;\n\n        if ( KTUtil.data(element).has(name) === true ) {\n            var handlerIds = KTUtil.data(element).get(name);\n            var handlerId;\n\n            for (var i = 0; i < handlerIds.length; i++) {\n                handlerId = handlerIds[i];\n                \n                if ( _handlers[name] && _handlers[name][handlerId] ) {\n                    var handler = _handlers[name][handlerId];\n                    var value;\n    \n                    if ( handler.name === name ) {\n                        if ( handler.one == true ) {\n                            if ( handler.fired == false ) {\n                                _handlers[name][handlerId].fired = true;\n    \n                                eventValue = handler.callback.call(this, target);\n                            }\n                        } else {\n                            eventValue = handler.callback.call(this, target);\n                        }\n\n                        if ( eventValue === false ) {\n                            returnValue = false;\n                        }\n                    }\n                }\n            }            \n        }\n\n        return returnValue;\n    }\n\n    var _addEvent = function(element, name, callback, one) {\n        var handlerId = KTUtil.getUniqueId('event');\n        var handlerIds = KTUtil.data(element).get(name);\n\n        if ( !handlerIds ) {\n            handlerIds = [];\n        } \n\n        handlerIds.push(handlerId);\n\n        KTUtil.data(element).set(name, handlerIds);\n\n        if ( !_handlers[name] ) {\n            _handlers[name] = {};\n        }\n\n        _handlers[name][handlerId] = {\n            name: name,\n            callback: callback,\n            one: one,\n            fired: false\n        };\n\n        return handlerId;\n    }\n\n    var _removeEvent = function(element, name, handlerId) {\n        var handlerIds = KTUtil.data(element).get(name);\n        var index = handlerIds && handlerIds.indexOf(handlerId);\n        \n        if (index !== -1) {\n            handlerIds.splice(index, 1);\n            KTUtil.data(element).set(name, handlerIds);\n        }\n\n        if (_handlers[name] && _handlers[name][handlerId]) {\n            delete _handlers[name][handlerId];\n        }\n    }\n\n    ////////////////////////////\n    // ** Public Methods  ** //\n    ////////////////////////////\n    return {\n        trigger: function(element, name, target) {\n            return _triggerEvent(element, name, target);\n        },\n\n        on: function(element, name, handler) {\n            return _addEvent(element, name, handler);\n        },\n\n        one: function(element, name, handler) {\n            return _addEvent(element, name, handler, true);\n        },\n\n        off: function(element, name, handlerId) {\n            return _removeEvent(element, name, handlerId);\n        },\n\n        debug: function() {\n            for (var b in _handlers) {\n                if ( _handlers.hasOwnProperty(b) ) console.log(b);\n            }\n        }\n    }\n}();\n\n// Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTEventHandler;\n}\n","\"use strict\";\n\n// Class definition\nvar KTFeedback = function(options) {\n    ////////////////////////////\n    // ** Private Variables  ** //\n    ////////////////////////////\n    var the = this;\n\n    // Default options\n    var defaultOptions = {\n        'width' : 100,\n        'placement' : 'top-center',\n        'content' : '',\n        'type': 'popup'\n    };\n\n    ////////////////////////////\n    // ** Private methods  ** //\n    ////////////////////////////\n\n    var _construct = function() {\n        _init();\n    }\n\n    var _init = function() {\n        // Variables\n        the.options = KTUtil.deepExtend({}, defaultOptions, options);\n        the.uid = KTUtil.getUniqueId('feedback');\n        the.element;\n        the.shown = false;\n\n        // Event Handlers\n        _handlers();\n\n        // Bind Instance\n        KTUtil.data(the.element).set('feedback', the);\n    }\n\n    var _handlers = function() {\n        KTUtil.addEvent(the.element, 'click', function(e) {\n            e.preventDefault();\n\n            _go();\n        });\n    }\n\n    var _show = function() {\n        if ( KTEventHandler.trigger(the.element, 'kt.feedback.show', the) === false ) {\n            return;\n        }\n\n        if ( the.options.type === 'popup') {\n            _showPopup();\n        }\n\n        KTEventHandler.trigger(the.element, 'kt.feedback.shown', the);\n\n        return the;\n    }\n\n    var _hide = function() {\n        if ( KTEventHandler.trigger(the.element, 'kt.feedback.hide', the) === false ) {\n            return;\n        }\n\n        if ( the.options.type === 'popup') {\n            _hidePopup();\n        }\n\n        the.shown = false;\n\n        KTEventHandler.trigger(the.element, 'kt.feedback.hidden', the);\n\n        return the;\n    }\n\n    var _showPopup = function() {\n        the.element = document.createElement(\"DIV\");\n\n        KTUtil.addClass(the.element, 'feedback feedback-popup');\n        KTUtil.setHTML(the.element, the.options.content);\n\n        if (the.options.placement == 'top-center') {\n            _setPopupTopCenterPosition();\n        }\n\n        document.body.appendChild(the.element);\n\n        KTUtil.addClass(the.element, 'feedback-shown');\n\n        the.shown = true;\n    }\n\n    var _setPopupTopCenterPosition = function() {\n        var width = KTUtil.getResponsiveValue(the.options.width);\n        var height = KTUtil.css(the.element, 'height');\n\n        KTUtil.addClass(the.element, 'feedback-top-center');\n\n        KTUtil.css(the.element, 'width', width);\n        KTUtil.css(the.element, 'left', '50%');\n        KTUtil.css(the.element, 'top', '-' + height);\n    }\n\n    var _hidePopup = function() {\n        the.element.remove();\n    }\n\n    var _destroy = function() {\n        KTUtil.data(the.element).remove('feedback');\n    }\n\n    // Construct class\n    _construct();\n\n    ///////////////////////\n    // ** Public API  ** //\n    ///////////////////////\n\n    // Plugin API\n    the.show = function() {\n        return _show();\n    }\n\n    the.hide = function() {\n        return _hide();\n    }\n\n    the.isShown = function() {\n        return the.shown;\n    }\n\n    the.getElement = function() {\n        return the.element;\n    }\n\n    the.destroy = function() {\n        return _destroy();\n    }\n\n    // Event API\n    the.on = function(name, handler) {\n        return KTEventHandler.on(the.element, name, handler);\n    }\n\n    the.one = function(name, handler) {\n        return KTEventHandler.one(the.element, name, handler);\n    }\n\n    the.off = function(name, handlerId) {\n        return KTEventHandler.off(the.element, name, handlerId);\n    }\n\n    the.trigger = function(name, event) {\n        return KTEventHandler.trigger(the.element, name, event, the, event);\n    }\n};\n\n// Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTFeedback;\n}\n","\"use strict\";\n\n// Class definition\nvar KTImageInput = function(element, options) {\n    ////////////////////////////\n    // ** Private Variables  ** //\n    ////////////////////////////\n    var the = this;\n\n    if ( typeof element === \"undefined\" || element === null ) {\n        return;\n    }\n\n    // Default Options\n    var defaultOptions = {\n        \n    };\n\n    ////////////////////////////\n    // ** Private Methods  ** //\n    ////////////////////////////\n\n    var _construct = function() {\n        if ( KTUtil.data(element).has('image-input') === true ) {\n            the = KTUtil.data(element).get('image-input');\n        } else {\n            _init();\n        }\n    }\n\n    var _init = function() {\n        // Variables\n        the.options = KTUtil.deepExtend({}, defaultOptions, options);\n        the.uid = KTUtil.getUniqueId('image-input');\n\n        // Elements\n        the.element = element;\n        the.inputElement = KTUtil.find(element, 'input[type=\"file\"]');\n        the.wrapperElement = KTUtil.find(element, '.image-input-wrapper');\n        the.cancelElement = KTUtil.find(element, '[data-kt-image-input-action=\"cancel\"]');\n        the.removeElement = KTUtil.find(element, '[data-kt-image-input-action=\"remove\"]');\n        the.hiddenElement = KTUtil.find(element, 'input[type=\"hidden\"]');\n        the.src = KTUtil.css(the.wrapperElement, 'backgroundImage');\n\n        // Set initialized\n        the.element.setAttribute('data-kt-image-input', 'true');\n\n        // Event Handlers\n        _handlers();\n\n        // Bind Instance\n        KTUtil.data(the.element).set('image-input', the);\n    }\n\n    // Init Event Handlers\n    var _handlers = function() {\n        KTUtil.addEvent(the.inputElement, 'change', _change);\n        KTUtil.addEvent(the.cancelElement, 'click', _cancel);\n        KTUtil.addEvent(the.removeElement, 'click', _remove);\n    }\n\n    // Event Handlers\n    var _change = function(e) {\n        e.preventDefault();\n\n        if ( the.inputElement !== null && the.inputElement.files && the.inputElement.files[0] ) {\n            // Fire change event\n            if ( KTEventHandler.trigger(the.element, 'kt.imageinput.change', the) === false ) {\n                return;\n            }\n\n            var reader = new FileReader();\n\n            reader.onload = function(e) {\n                KTUtil.css(the.wrapperElement, 'background-image', 'url('+ e.target.result +')');\n            }\n\n            reader.readAsDataURL(the.inputElement.files[0]);\n\n            the.element.classList.add('image-input-changed');\n            the.element.classList.remove('image-input-empty');\n\n            // Fire removed event\n            KTEventHandler.trigger(the.element, 'kt.imageinput.changed', the);\n        }\n    }\n\n    var _cancel = function(e) {\n        e.preventDefault();\n\n        // Fire cancel event\n        if ( KTEventHandler.trigger(the.element, 'kt.imageinput.cancel', the) === false ) {\n            return;\n        }\n\n        the.element.classList.remove('image-input-changed');\n        the.element.classList.remove('image-input-empty');\n\n        if (the.src === 'none') {   \n            KTUtil.css(the.wrapperElement, 'background-image', '');\n            the.element.classList.add('image-input-empty');\n        } else {\n            KTUtil.css(the.wrapperElement, 'background-image', the.src);\n        }\n        \n        the.inputElement.value = \"\";\n\n        if ( the.hiddenElement !== null ) {\n            the.hiddenElement.value = \"0\";\n        }\n\n        // Fire canceled event\n        KTEventHandler.trigger(the.element, 'kt.imageinput.canceled', the);\n    }\n\n    var _remove = function(e) {\n        e.preventDefault();\n\n        // Fire remove event\n        if ( KTEventHandler.trigger(the.element, 'kt.imageinput.remove', the) === false ) {\n            return;\n        }\n\n        the.element.classList.remove('image-input-changed');\n        the.element.classList.add('image-input-empty');\n\n        KTUtil.css(the.wrapperElement, 'background-image', \"none\");\n        the.inputElement.value = \"\";\n\n        if ( the.hiddenElement !== null ) {\n            the.hiddenElement.value = \"1\";\n        }\n\n        // Fire removed event\n        KTEventHandler.trigger(the.element, 'kt.imageinput.removed', the);\n    }\n\n    var _destroy = function() {\n        KTUtil.data(the.element).remove('image-input');\n    }\n\n    // Construct Class\n    _construct();\n\n    ///////////////////////\n    // ** Public API  ** //\n    ///////////////////////\n\n    // Plugin API\n    the.getInputElement = function() {\n        return the.inputElement;\n    }\n\n    the.getElement = function() {\n        return the.element;\n    }\n    \n    the.destroy = function() {\n        return _destroy();\n    }\n\n    // Event API\n    the.on = function(name, handler) {\n        return KTEventHandler.on(the.element, name, handler);\n    }\n\n    the.one = function(name, handler) {\n        return KTEventHandler.one(the.element, name, handler);\n    }\n\n    the.off = function(name, handlerId) {\n        return KTEventHandler.off(the.element, name, handlerId);\n    }\n\n    the.trigger = function(name, event) {\n        return KTEventHandler.trigger(the.element, name, event, the, event);\n    }\n};\n\n// Static methods\nKTImageInput.getInstance = function(element) {\n    if ( element !== null && KTUtil.data(element).has('image-input') ) {\n        return KTUtil.data(element).get('image-input');\n    } else {\n        return null;\n    }\n}\n\n// Create instances\nKTImageInput.createInstances = function(selector = '[data-kt-image-input]') {\n    // Initialize Menus\n    var elements = document.querySelectorAll(selector);\n\n    if ( elements && elements.length > 0 ) {\n        for (var i = 0, len = elements.length; i < len; i++) {\n            new KTImageInput(elements[i]);\n        }\n    }\n}\n\n// Global initialization\nKTImageInput.init = function() {\n    KTImageInput.createInstances();\n};\n\n// Webpack Support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTImageInput;\n}\n","\"use strict\";\n\nvar KTMenuHandlersInitialized = false;\n\n// Class definition\nvar KTMenu = function(element, options) {\n    ////////////////////////////\n    // ** Private Variables  ** //\n    ////////////////////////////\n    var the = this;\n\n    if ( typeof element === \"undefined\" || element === null ) {\n        return;\n    }\n\n    // Default Options\n    var defaultOptions = {\n        dropdown: {\n            hoverTimeout: 200,\n            zindex: 107\n        },\n\n        accordion: {\n            slideSpeed: 250,\n            expand: false\n        }\n    };\n\n    ////////////////////////////\n    // ** Private Methods  ** //\n    ////////////////////////////\n\n    var _construct = function() {\n        if ( KTUtil.data(element).has('menu') === true ) {\n            the = KTUtil.data(element).get('menu');\n        } else {\n            _init();\n        }\n    }\n\n    var _init = function() {\n        the.options = KTUtil.deepExtend({}, defaultOptions, options);\n        the.uid = KTUtil.getUniqueId('menu');\n        the.element = element;\n        the.triggerElement;\n        the.disabled = false;\n\n        // Set initialized\n        the.element.setAttribute('data-kt-menu', 'true');\n\n        _setTriggerElement();\n        _update();\n\n        KTUtil.data(the.element).set('menu', the);\n    }\n\n    var _destroy = function() {  // todo\n\n    }\n\n    // Event Handlers\n    // Toggle handler\n    var _click = function(element, e) {\n        e.preventDefault();\n\n        if (the.disabled === true) {\n            return;\n        }\n\n        var item = _getItemElement(element);\n\n        if ( _getOptionFromElementAttribute(item, 'trigger') !== 'click' ) {\n            return;\n        }\n\n        if ( _getOptionFromElementAttribute(item, 'toggle') === false ) {\n            _show(item);\n        } else {\n            _toggle(item);\n        }\n    }\n\n    // Link handler\n    var _link = function(element, e) {\n        if (the.disabled === true) {\n            return;\n        }\n        \n        if ( KTEventHandler.trigger(the.element, 'kt.menu.link.click', element) === false )  {\n            return;\n        }\n\n        // Dismiss all shown dropdowns\n        KTMenu.hideDropdowns();\n\n        KTEventHandler.trigger(the.element, 'kt.menu.link.clicked', element);\n    }\n\n    // Dismiss handler\n    var _dismiss = function(element, e) {\n        var item = _getItemElement(element);\n        var items = _getItemChildElements(item);\n\n        if ( item !== null && _getItemSubType(item) === 'dropdown') {\n            _hide(item); // hide items dropdown\n            // Hide all child elements as well\n            \n            if ( items.length > 0 ) {\n                for (var i = 0, len = items.length; i < len; i++) {\n                    if ( items[i] !== null &&  _getItemSubType(items[i]) === 'dropdown') {\n                        _hide(tems[i]);\n                    }\n                }\n            }\n        }\n    }\n\n    // Mouseover handle\n    var _mouseover = function(element, e) {\n        var item = _getItemElement(element);\n\n        if (the.disabled === true) {\n            return;\n        }\n\n        if ( item === null ) {\n            return;\n        }\n\n        if ( _getOptionFromElementAttribute(item, 'trigger') !== 'hover' ) {\n            return;\n        }\n\n        if ( KTUtil.data(item).get('hover') === '1' ) {\n            clearTimeout(KTUtil.data(item).get('timeout'));\n            KTUtil.data(item).remove('hover');\n            KTUtil.data(item).remove('timeout');\n        }\n\n        _show(item);\n    }\n\n    // Mouseout handle\n    var _mouseout = function(element, e) {\n        var item = _getItemElement(element);\n\n        if (the.disabled === true) {\n            return;\n        }\n\n        if ( item === null ) {\n            return;\n        }\n\n        if ( _getOptionFromElementAttribute(item, 'trigger') !== 'hover' ) {\n            return;\n        }\n\n        var timeout = setTimeout(function() {\n            if ( KTUtil.data(item).get('hover') === '1' ) {\n                _hide(item);\n            }\n        }, the.options.dropdown.hoverTimeout);\n\n        KTUtil.data(item).set('hover', '1');\n        KTUtil.data(item).set('timeout', timeout);\n    }\n\n    // Toggle item sub\n    var _toggle = function(item) {\n        if ( !item ) {\n            item = the.triggerElement;\n        }\n\n        if ( _isItemSubShown(item) === true ) {\n            _hide(item);\n        } else {\n            _show(item);\n        }\n    }\n\n    // Show item sub\n    var _show = function(item) {\n        if ( !item ) {\n            item = the.triggerElement;\n        }\n\n        if ( _isItemSubShown(item) === true ) {\n            return;\n        }\n\n        if ( _getItemSubType(item) === 'dropdown' ) {\n            _showDropdown(item); // // show current dropdown\n        } else if ( _getItemSubType(item) === 'accordion' ) {\n            _showAccordion(item);\n        }\n\n        // Remember last submenu type\n        KTUtil.data(item).set('type', _getItemSubType(item));  // updated\n    }\n\n    // Hide item sub\n    var _hide = function(item) {\n        if ( !item ) {\n            item = the.triggerElement;\n        }\n\n        if ( _isItemSubShown(item) === false ) {\n            return;\n        }\n        \n        if ( _getItemSubType(item) === 'dropdown' ) {\n            _hideDropdown(item);\n        } else if ( _getItemSubType(item) === 'accordion' ) {\n            _hideAccordion(item);\n        }\n    }\n\n    // Reset item state classes if item sub type changed\n    var _reset = function(item) {        \n        if ( _hasItemSub(item) === false ) {\n            return;\n        }\n\n        var sub = _getItemSubElement(item);\n\n        // Reset sub state if sub type is changed during the window resize\n        if ( KTUtil.data(item).has('type') && KTUtil.data(item).get('type') !== _getItemSubType(item) ) {  // updated\n            KTUtil.removeClass(item, 'hover'); \n            KTUtil.removeClass(item, 'show'); \n            KTUtil.removeClass(sub, 'show'); \n        }  // updated\n    }\n\n    // Update all item state classes if item sub type changed\n    var _update = function() {\n        var items = the.element.querySelectorAll('.menu-item[data-kt-menu-trigger]');\n\n        if ( items && items.length > 0 ) {\n            for (var i = 0, len = items.length; i < len; i++) {\n                _reset(items[i]);\n            }\n        }\n    }\n\n    // Set external trigger element\n    var _setTriggerElement = function() {\n        var target = document.querySelector('[data-kt-menu-target=\"#' + the.element.getAttribute('id')  + '\"]');\n\n        if ( target !== null ) {\n            the.triggerElement = target;\n        } else if ( the.element.closest('[data-kt-menu-trigger]') ) {\n            the.triggerElement = the.element.closest('[data-kt-menu-trigger]');\n        } else if ( the.element.parentNode && KTUtil.child(the.element.parentNode, '[data-kt-menu-trigger]')) {\n            the.triggerElement = KTUtil.child(the.element.parentNode, '[data-kt-menu-trigger]');\n        }\n\n        if ( the.triggerElement ) {\n            KTUtil.data(the.triggerElement).set('menu', the);\n        }\n    }\n\n    // Test if menu has external trigger element\n    var _isTriggerElement = function(item) {\n        return ( the.triggerElement === item ) ? true : false;\n    }\n\n    // Test if item's sub is shown\n    var _isItemSubShown = function(item) {\n        var sub = _getItemSubElement(item);\n\n        if ( sub !== null ) {\n            if ( _getItemSubType(item) === 'dropdown' ) {\n                if ( KTUtil.hasClass(sub, 'show') === true && sub.hasAttribute('data-popper-placement') === true ) {\n                    return true;\n                } else {\n                    return false;\n                }\n            } else {\n                return KTUtil.hasClass(item, 'show');\n            }\n        } else {\n            return false;\n        }\n    }\n\n    // Test if item dropdown is permanent\n    var _isItemDropdownPermanent = function(item) {\n        return _getOptionFromElementAttribute(item, 'permanent') === true ? true : false;\n    }\n\n    // Test if item's parent is shown\n    var _isItemParentShown = function(item) {\n        return KTUtil.parents(item, '.menu-item.show').length > 0;\n    }\n\n    // Test of it is item sub element\n    var _isItemSubElement = function(item) {\n        return KTUtil.hasClass(item, 'menu-sub');\n    }\n\n    // Test if item has sub\n    var _hasItemSub = function(item) {\n        return (KTUtil.hasClass(item, 'menu-item') && item.hasAttribute('data-kt-menu-trigger'));\n    }\n\n    // Get link element\n    var _getItemLinkElement = function(item) {\n        return KTUtil.child(item, '.menu-link');\n    }\n\n    // Get toggle element\n    var _getItemToggleElement = function(item) {\n        if ( the.triggerElement ) {\n            return the.triggerElement;\n        } else {\n            return _getItemLinkElement(item);\n        }\n    }\n\n    // Get item sub element\n    var _getItemSubElement = function(item) {\n        if ( _isTriggerElement(item) === true ) {\n            return the.element;\n        } if ( item.classList.contains('menu-sub') === true ) {\n            return item;\n        } else if ( KTUtil.data(item).has('sub') ) {\n            return KTUtil.data(item).get('sub');\n        } else {\n            return KTUtil.child(item, '.menu-sub');\n        }\n    }\n\n    // Get item sub type\n    var _getItemSubType = function(element) {\n        var sub = _getItemSubElement(element);\n\n        if ( sub && parseInt(KTUtil.css(sub, 'z-index')) > 0 ) {\n            return \"dropdown\";\n        } else {\n            return \"accordion\";\n        }\n    }\n\n    // Get item element\n    var _getItemElement = function(element) {\n        var item, sub;\n\n        // Element is the external trigger element\n        if (_isTriggerElement(element) ) {\n            return element;\n        }   \n\n        // Element has item toggler attribute\n        if ( element.hasAttribute('data-kt-menu-trigger') ) {\n            return element;\n        }\n\n        // Element has item DOM reference in it's data storage\n        if ( KTUtil.data(element).has('item') ) {\n            return KTUtil.data(element).get('item');\n        }\n\n        // Item is parent of element\n        if ( (item = element.closest('.menu-item')) ) {\n            return item;\n        }\n\n        // Element's parent has item DOM reference in it's data storage\n        if ( (sub = element.closest('.menu-sub')) ) {\n            if ( KTUtil.data(sub).has('item') === true ) {\n                return KTUtil.data(sub).get('item')\n            } \n        }\n    }\n\n    // Get item parent element\n    var _getItemParentElement = function(item) {  \n        var sub = item.closest('.menu-sub');\n        var parentItem;\n\n        if ( sub && KTUtil.data(sub).has('item') ) {\n            return KTUtil.data(sub).get('item');\n        }\n\n        if ( sub && (parentItem = sub.closest('.menu-item[data-kt-menu-trigger]')) ) {\n            return parentItem;\n        }\n\n        return null;\n    }\n\n    // Get item parent elements\n    var _getItemParentElements = function(item) {\n        var parents = [];\n        var parent;\n        var i = 0;\n\n        do {\n            parent = _getItemParentElement(item);\n            \n            if ( parent ) {\n                parents.push(parent);\n                item = parent;\n            }           \n\n            i++;\n        } while (parent !== null && i < 20);\n\n        if ( the.triggerElement ) {\n            parents.unshift(the.triggerElement);\n        }\n\n        return parents;\n    }\n\n    // Get item child element\n    var _getItemChildElement = function(item) {\n        var selector = item;\n        var element;\n\n        if ( KTUtil.data(item).get('sub') ) {\n            selector = KTUtil.data(item).get('sub');\n        }\n\n        if ( selector !== null ) {\n            //element = selector.querySelector('.show.menu-item[data-kt-menu-trigger]');\n            element = selector.querySelector('.menu-item[data-kt-menu-trigger]');\n\n            if ( element ) {\n                return element;\n            } else {\n                return null;\n            }\n        } else {\n            return null;\n        }\n    }   \n    \n    // Get item child elements\n    var _getItemChildElements = function(item) {\n        var children = [];\n        var child;\n        var i = 0;\n\n        do {\n            child = _getItemChildElement(item);\n            \n            if ( child ) {\n                children.push(child);\n                item = child;\n            }           \n\n            i++;\n        } while (child !== null && i < 20);\n\n        return children;\n    }\n\n    // Show item dropdown\n    var _showDropdown = function(item) {\n        // Handle dropdown show event\n        if ( KTEventHandler.trigger(the.element, 'kt.menu.dropdown.show', item) === false )  {\n            return;\n        }\n\n        // Hide all currently shown dropdowns except current one\n        KTMenu.hideDropdowns(item); \n\n        var toggle = _isTriggerElement(item) ? item : _getItemLinkElement(item);\n        var sub = _getItemSubElement(item);\n\n        var width = _getOptionFromElementAttribute(item, 'width');\n        var height = _getOptionFromElementAttribute(item, 'height');\n\n        var zindex = the.options.dropdown.zindex; // update\n        var parentZindex = KTUtil.getHighestZindex(item); // update\n\n        // Apply a new z-index if dropdown's toggle element or it's parent has greater z-index // update\n        if ( parentZindex !== null && parentZindex >= zindex ) {\n            zindex = parentZindex + 1;\n        }\n\n        if ( zindex > 0 ) {\n            KTUtil.css(sub, 'z-index', zindex);\n        }\n\n        if ( width !== null ) {\n            KTUtil.css(sub, 'width', width);\n        }\n\n        if ( height !== null ) {\n            KTUtil.css(sub, 'height', height);\n        }\n\n        KTUtil.css(sub, 'display', '');\n        KTUtil.css(sub, 'overflow', '');\n\n        // Init popper(new)\n        _initDropdownPopper(item, sub); \n\n        KTUtil.addClass(item, 'show');\n        KTUtil.addClass(item, 'menu-dropdown');\n        KTUtil.addClass(sub, 'show');\n\n        // Append the sub the the root of the menu\n        if ( _getOptionFromElementAttribute(item, 'overflow') === true ) {\n            document.body.appendChild(sub);\n            KTUtil.data(item).set('sub', sub);\n            KTUtil.data(sub).set('item', item);\n            KTUtil.data(sub).set('menu', the);\n        } else {\n            KTUtil.data(sub).set('item', item);\n        }\n\n        // Handle dropdown shown event\n        KTEventHandler.trigger(the.element, 'kt.menu.dropdown.shown', item);\n    }\n\n    // Hide item dropdown\n    var _hideDropdown = function(item) {\n        // Handle dropdown hide event\n        if ( KTEventHandler.trigger(the.element, 'kt.menu.dropdown.hide', item) === false )  {\n            return;\n        }\n\n        var sub = _getItemSubElement(item);\n\n        KTUtil.css(sub, 'z-index', '');\n        KTUtil.css(sub, 'width', '');\n        KTUtil.css(sub, 'height', '');\n\n        KTUtil.removeClass(item, 'show');\n        KTUtil.removeClass(item, 'menu-dropdown');\n        KTUtil.removeClass(sub, 'show');\n\n        // Append the sub back to it's parent\n        if ( _getOptionFromElementAttribute(item, 'overflow') === true ) {\n            if (item.classList.contains('menu-item')) {\n                item.appendChild(sub);\n            } else {\n                KTUtil.insertAfter(the.element, item);\n            }\n            \n            KTUtil.data(item).remove('sub');\n            KTUtil.data(sub).remove('item');\n            KTUtil.data(sub).remove('menu');\n        } \n\n        // Destroy popper(new)\n        _destroyDropdownPopper(item);\n        \n        // Handle dropdown hidden event \n        KTEventHandler.trigger(the.element, 'kt.menu.dropdown.hidden', item);\n    }\n\n    // Init dropdown popper(new)\n    var _initDropdownPopper = function(item, sub) {\n        // Setup popper instance\n        var reference;\n        var attach = _getOptionFromElementAttribute(item, 'attach');\n\n        if ( attach ) {\n            if ( attach === 'parent') {\n                reference = item.parentNode;\n            } else {\n                reference = document.querySelector(attach);\n            }\n        } else {\n            reference = item;\n        }\n\n        var popper = Popper.createPopper(reference, sub, _getDropdownPopperConfig(item)); \n        KTUtil.data(item).set('popper', popper);\n    }\n\n    // Destroy dropdown popper(new)\n    var _destroyDropdownPopper = function(item) {\n        if ( KTUtil.data(item).has('popper') === true ) {\n            KTUtil.data(item).get('popper').destroy();\n            KTUtil.data(item).remove('popper');\n        }\n    }\n\n    // Prepare popper config for dropdown(see: https://popper.js.org/docs/v2/)\n    var _getDropdownPopperConfig = function(item) {\n        // Placement\n        var placement = _getOptionFromElementAttribute(item, 'placement');\n        if (!placement) {\n            placement = 'right';\n        }\n\n        // Offset\n        var offsetValue = _getOptionFromElementAttribute(item, 'offset');\n        var offset = offsetValue ? offsetValue.split(\",\") : [];\n        \n        if (offset.length === 2) {\n            offset[0] = parseInt(offset[0]);\n            offset[1] = parseInt(offset[1]);\n        }\n\n        // Strategy\n        var strategy = _getOptionFromElementAttribute(item, 'overflow') === true ? 'absolute' : 'fixed';\n\n        var altAxis = _getOptionFromElementAttribute(item, 'flip') !== false ? true : false;\n\n        var popperConfig = {\n            placement: placement,\n            strategy: strategy,\n            modifiers: [{\n                name: 'offset',\n                options: {\n                    offset: offset\n                }\n            }, {\n                name: 'preventOverflow',\n                options: {\n                    altAxis: altAxis\n                }\n            }, {\n                name: 'flip', \n                options: {\n                    flipVariations: false\n                }\n            }]\n        };\n\n        return popperConfig;\n    }\n\n    // Show item accordion\n    var _showAccordion = function(item) {\n        if ( KTEventHandler.trigger(the.element, 'kt.menu.accordion.show', item) === false )  {\n            return;\n        }\n\n        var sub = _getItemSubElement(item);\n        var expand = the.options.accordion.expand;\n        \n        if (_getOptionFromElementAttribute(item, 'expand') === true) {\n            expand = true;\n        } else if (_getOptionFromElementAttribute(item, 'expand') === false) {\n            expand = false;\n        } else if (_getOptionFromElementAttribute(the.element, 'expand') === true) {\n            expand = true;\n        }\n\n        if ( expand === false ) {\n            _hideAccordions(item);\n        }\n\n        if ( KTUtil.data(item).has('popper') === true ) {\n            _hideDropdown(item);\n        }\n\n        KTUtil.addClass(item, 'hover');\n\n        KTUtil.addClass(item, 'showing');\n\n        KTUtil.slideDown(sub, the.options.accordion.slideSpeed, function() {\n            KTUtil.removeClass(item, 'showing');\n            KTUtil.addClass(item, 'show');\n            KTUtil.addClass(sub, 'show');\n\n            KTEventHandler.trigger(the.element, 'kt.menu.accordion.shown', item);\n        });        \n    }\n\n    // Hide item accordion\n    var _hideAccordion = function(item) {\n        if ( KTEventHandler.trigger(the.element, 'kt.menu.accordion.hide', item) === false )  {\n            return;\n        }\n        \n        var sub = _getItemSubElement(item);\n\n        KTUtil.addClass(item, 'hiding');\n\n        KTUtil.slideUp(sub, the.options.accordion.slideSpeed, function() {\n            KTUtil.removeClass(item, 'hiding');\n            KTUtil.removeClass(item, 'show');\n            KTUtil.removeClass(sub, 'show');\n\n            KTUtil.removeClass(item, 'hover'); // update\n\n            KTEventHandler.trigger(the.element, 'kt.menu.accordion.hidden', item);\n        });\n    }\n\n    var _setActiveLink = function(link) {\n        var item = _getItemElement(link);\n\n        if (!item) {\n            return;\n        }\n\n        var parentItems = _getItemParentElements(item);\n        var parentTabPane = link.closest('.tab-pane');\n\n        var activeLinks = [].slice.call(the.element.querySelectorAll('.menu-link.active'));\n        var activeParentItems = [].slice.call(the.element.querySelectorAll('.menu-item.here, .menu-item.show'));\n        \n        if (_getItemSubType(item) === \"accordion\") {\n            _showAccordion(item);\n        } else {\n            item.classList.add(\"here\");\n        }\n\n        if ( parentItems && parentItems.length > 0 ) {\n            for (var i = 0, len = parentItems.length; i < len; i++) {\n                var parentItem = parentItems[i];\n\n                if (_getItemSubType(parentItem) === \"accordion\") {\n                    _showAccordion(parentItem);\n                } else {\n                    parentItem.classList.add(\"here\");\n                }\n            }\n        }       \n        \n        activeLinks.map(function (activeLink) {\n            activeLink.classList.remove(\"active\");\n        });\n\n        activeParentItems.map(function (activeParentItem) {\n            if (activeParentItem.contains(item) === false) {\n                activeParentItem.classList.remove(\"here\");\n                activeParentItem.classList.remove(\"show\");\n            }\n        });\n\n        // Handle tab\n        if (parentTabPane && bootstrap.Tab) {\n            var tabEl = the.element.querySelector('[data-bs-target=\"#' + parentTabPane.getAttribute(\"id\") + '\"]');\n            var tab = new bootstrap.Tab(tabEl);\n\n            if (tab) {\n                tab.show();\n            }\n        }\n\n        link.classList.add(\"active\");\n    }\n\n    var _getLinkByAttribute = function(value, name = \"href\") {\n        var link = the.element.querySelector('.menu-link[' + name + '=\"' + value + '\"]');\n\n        if (link) {\n            return link;\n        } else {\n            null;\n        }\n    }\n\n    // Hide all shown accordions of item\n    var _hideAccordions = function(item) {\n        var itemsToHide = KTUtil.findAll(the.element, '.show[data-kt-menu-trigger]');\n        var itemToHide;\n\n        if (itemsToHide && itemsToHide.length > 0) {\n            for (var i = 0, len = itemsToHide.length; i < len; i++) {\n                itemToHide = itemsToHide[i];\n\n                if ( _getItemSubType(itemToHide) === 'accordion' && itemToHide !== item && item.contains(itemToHide) === false && itemToHide.contains(item) === false ) {\n                    _hideAccordion(itemToHide);\n                }\n            }\n        }\n    }\n\n    // Get item option(through html attributes)\n    var _getOptionFromElementAttribute = function(item, name) {\n        var attr;\n        var value = null;\n\n        if ( item && item.hasAttribute('data-kt-menu-' + name) ) {\n            attr = item.getAttribute('data-kt-menu-' + name);\n            value = KTUtil.getResponsiveValue(attr);\n\n            if ( value !== null && String(value) === 'true' ) {\n                value = true;\n            } else if ( value !== null && String(value) === 'false' ) {\n                value = false;\n            }\n        }\n\n        return value;\n    }\n\n    var _destroy = function() {\n        KTUtil.data(the.element).remove('menu');\n    }\n\n    // Construct Class\n    _construct();\n\n    ///////////////////////\n    // ** Public API  ** //\n    ///////////////////////\n\n    // Event Handlers\n    the.click = function(element, e) {\n        return _click(element, e);\n    }\n\n    the.link = function(element, e) {\n        return _link(element, e);\n    }\n\n    the.dismiss = function(element, e) {\n        return _dismiss(element, e);\n    }\n\n    the.mouseover = function(element, e) {\n        return _mouseover(element, e);\n    }\n\n    the.mouseout = function(element, e) {\n        return _mouseout(element, e);\n    }\n\n    // General Methods\n    the.getItemTriggerType = function(item) {\n        return _getOptionFromElementAttribute(item, 'trigger');\n    }\n\n    the.getItemSubType = function(element) {\n       return _getItemSubType(element);\n    }\n\n    the.show = function(item) {\n        return _show(item);\n    }\n\n    the.hide = function(item) {\n        return _hide(item);\n    }\n\n    the.toggle = function(item) {\n        return _toggle(item);\n    }\n\n    the.reset = function(item) {\n        return _reset(item);\n    }\n\n    the.update = function() {\n        return _update();\n    }\n\n    the.getElement = function() {\n        return the.element;\n    }\n\n    the.setActiveLink = function(link) {\n        return _setActiveLink(link);\n    }   \n\n    the.getLinkByAttribute = function(value, name = \"href\") {\n        return _getLinkByAttribute(value, name);\n    }\n\n    the.getItemLinkElement = function(item) {\n        return _getItemLinkElement(item);\n    }\n\n    the.getItemToggleElement = function(item) {\n        return _getItemToggleElement(item);\n    }\n\n    the.getItemSubElement = function(item) {\n        return _getItemSubElement(item);\n    }\n\n    the.getItemParentElements = function(item) {\n        return _getItemParentElements(item);\n    }\n\n    the.isItemSubShown = function(item) {\n        return _isItemSubShown(item);\n    }\n\n    the.isItemParentShown = function(item) {\n        return _isItemParentShown(item);\n    }\n\n    the.getTriggerElement = function() {\n        return the.triggerElement;\n    }\n\n    the.isItemDropdownPermanent = function(item) {\n        return _isItemDropdownPermanent(item);\n    }\n\n    the.destroy = function() {\n        return _destroy();\n    }\n\n    the.disable = function() {\n        the.disabled = true;\n    }\n\n    the.enable = function() {\n        the.disabled = false;\n    }\n\n    // Accordion Mode Methods\n    the.hideAccordions = function(item) {\n        return _hideAccordions(item);\n    }\n\n    // Event API\n    the.on = function(name, handler) {\n        return KTEventHandler.on(the.element, name, handler);\n    }\n\n    the.one = function(name, handler) {\n        return KTEventHandler.one(the.element, name, handler);\n    }\n\n    the.off = function(name, handlerId) {\n        return KTEventHandler.off(the.element, name, handlerId);\n    }\n};\n\n// Get KTMenu instance by element\nKTMenu.getInstance = function(element) {\n    var menu;\n    var item;\n\n    if (!element) {\n        return null;\n    }\n\n    // Element has menu DOM reference in it's DATA storage\n    if ( KTUtil.data(element).has('menu') ) {\n        return KTUtil.data(element).get('menu');\n    }\n\n    // Element has .menu parent \n    if ( menu = element.closest('.menu') ) {\n        if ( KTUtil.data(menu).has('menu') ) {\n            return KTUtil.data(menu).get('menu');\n        }\n    }\n    \n    // Element has a parent with DOM reference to .menu in it's DATA storage\n    if ( KTUtil.hasClass(element, 'menu-link') ) {\n        var sub = element.closest('.menu-sub');\n\n        if ( KTUtil.data(sub).has('menu') ) {\n            return KTUtil.data(sub).get('menu');\n        }\n    } \n\n    return null;\n}\n\n// Hide all dropdowns and skip one if provided\nKTMenu.hideDropdowns = function(skip) {\n    var items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]');\n\n    if (items && items.length > 0) {\n        for (var i = 0, len = items.length; i < len; i++) {\n            var item = items[i];\n            var menu = KTMenu.getInstance(item);\n\n            if ( menu && menu.getItemSubType(item) === 'dropdown' ) {\n                if ( skip ) {\n                    if ( menu.getItemSubElement(item).contains(skip) === false && item.contains(skip) === false &&  item !== skip ) {\n                        menu.hide(item);\n                    }\n                } else {\n                    menu.hide(item);\n                }\n            }\n        }\n    }\n}\n\n// Update all dropdowns popover instances\nKTMenu.updateDropdowns = function() {\n    var items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]');\n\n    if (items && items.length > 0) {\n        for (var i = 0, len = items.length; i < len; i++) {\n            var item = items[i];\n\n            if ( KTUtil.data(item).has('popper') ) {\n                KTUtil.data(item).get('popper').forceUpdate();\n            }\n        }\n    }\n}\n\n// Global handlers\nKTMenu.initHandlers = function() {\n    // Dropdown handler\n    document.addEventListener(\"click\", function(e) {\n        var items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]:not([data-kt-menu-static=\"true\"])');\n        var menu;\n        var item;\n        var sub;\n        var menuObj;\n\n        if ( items && items.length > 0 ) {\n            for ( var i = 0, len = items.length; i < len; i++ ) {\n                item = items[i];\n                menuObj = KTMenu.getInstance(item);\n\n                if (menuObj && menuObj.getItemSubType(item) === 'dropdown') {\n                    menu = menuObj.getElement();\n                    sub = menuObj.getItemSubElement(item);\n\n                    if ( item === e.target || item.contains(e.target) ) {\n                        continue;\n                    }\n                    \n                    if ( sub === e.target || sub.contains(e.target) ) {\n                        continue;\n                    }\n                        \n                    menuObj.hide(item);\n                }\n            }\n        }\n    });\n\n    // Sub toggle handler(updated)\n    KTUtil.on(document.body,  '.menu-item[data-kt-menu-trigger] > .menu-link, [data-kt-menu-trigger]:not(.menu-item):not([data-kt-menu-trigger=\"auto\"])', 'click', function(e) {\n        var menu = KTMenu.getInstance(this);\n\n        if ( menu !== null ) {\n            return menu.click(this, e);\n        }\n    });\n\n    // Link handler\n    KTUtil.on(document.body,  '.menu-item:not([data-kt-menu-trigger]) > .menu-link', 'click', function(e) {\n        var menu = KTMenu.getInstance(this);\n\n        if ( menu !== null ) {\n            return menu.link(this, e);\n        }\n    });\n\n    // Dismiss handler\n    KTUtil.on(document.body,  '[data-kt-menu-dismiss=\"true\"]', 'click', function(e) {\n        var menu = KTMenu.getInstance(this);\n\n        if ( menu !== null ) {\n            return menu.dismiss(this, e);\n        }\n    });\n\n    // Mouseover handler\n    KTUtil.on(document.body,  '[data-kt-menu-trigger], .menu-sub', 'mouseover', function(e) {\n        var menu = KTMenu.getInstance(this);\n\n        if ( menu !== null && menu.getItemSubType(this) === 'dropdown' ) {\n            return menu.mouseover(this, e);\n        }\n    });\n\n    // Mouseout handler\n    KTUtil.on(document.body,  '[data-kt-menu-trigger], .menu-sub', 'mouseout', function(e) {\n        var menu = KTMenu.getInstance(this);\n\n        if ( menu !== null && menu.getItemSubType(this) === 'dropdown' ) {\n            return menu.mouseout(this, e);\n        }\n    });\n\n    // Resize handler\n    window.addEventListener('resize', function() {\n        var menu;\n        var timer;\n\n        KTUtil.throttle(timer, function() {\n            // Locate and update Offcanvas instances on window resize\n            var elements = document.querySelectorAll('[data-kt-menu=\"true\"]');\n\n            if ( elements && elements.length > 0 ) {\n                for (var i = 0, len = elements.length; i < len; i++) {\n                    menu = KTMenu.getInstance(elements[i]);\n                    if (menu) {\n                        menu.update();\n                    }\n                }\n            }\n        }, 200);\n    });\n}\n\n// Render menus by url\nKTMenu.updateByLinkAttribute = function(value, name = \"href\") {\n    // Set menu link active state by attribute value\n    var elements = document.querySelectorAll('[data-kt-menu=\"true\"]');\n\n    if ( elements && elements.length > 0 ) {\n        for (var i = 0, len = elements.length; i < len; i++) {\n            var menu = KTMenu.getInstance(elements[i]);\n\n            if (menu) {\n                var link = menu.getLinkByAttribute(value, name);                \n                if (link) {\n                    menu.setActiveLink(link);\n                }\n            }\n        }\n    }\n}\n\n// Global instances\nKTMenu.createInstances = function(selector = '[data-kt-menu=\"true\"]') {\n    // Initialize menus\n    var elements = document.querySelectorAll(selector);\n    if ( elements && elements.length > 0 ) {\n        for (var i = 0, len = elements.length; i < len; i++) {\n            new KTMenu(elements[i]);\n        }\n    }\n}\n\n// Global initialization\nKTMenu.init = function() {\n    KTMenu.createInstances();\n\n    if (KTMenuHandlersInitialized === false) {\n        KTMenu.initHandlers();\n\n        KTMenuHandlersInitialized = true;\n    }    \n};\n\n// Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTMenu;\n}\n","\"use strict\";\n\n// Class definition\nvar KTPasswordMeter = function(element, options) {\n    ////////////////////////////\n    // ** Private variables  ** //\n    ////////////////////////////\n    var the = this;\n\n    if (!element) {\n        return;\n    }\n\n    // Default Options\n    var defaultOptions = {\n        minLength: 8,\n        checkUppercase: true,        \n        checkLowercase: true,\n        checkDigit: true,\n        checkChar: true,\n        scoreHighlightClass: 'active'\n    };\n\n    ////////////////////////////\n    // ** Private methods  ** //\n    ////////////////////////////\n\n    // Constructor\n    var _construct = function() {\n        if ( KTUtil.data(element).has('password-meter') === true ) {\n            the = KTUtil.data(element).get('password-meter');\n        } else {\n            _init();\n        }\n    }\n\n    // Initialize\n    var _init = function() {\n        // Variables\n        the.options = KTUtil.deepExtend({}, defaultOptions, options);\n        the.score = 0;\n        the.checkSteps = 5;\n\n        // Elements\n        the.element = element;\n        the.inputElement = the.element.querySelector('input[type]');\n        the.visibilityElement = the.element.querySelector('[data-kt-password-meter-control=\"visibility\"]');\n        the.highlightElement = the.element.querySelector('[data-kt-password-meter-control=\"highlight\"]'); \n\n        // Set initialized\n        the.element.setAttribute('data-kt-password-meter', 'true');\n        \n        // Event Handlers\n        _handlers();\n\n        // Bind Instance\n        KTUtil.data(the.element).set('password-meter', the);\n    }\n\n    // Handlers\n    var _handlers = function() {\n        if (the.highlightElement) {\n            the.inputElement.addEventListener('input', function() {\n                _check();\n            });\n        }\n\n        if (the.visibilityElement) {\n            the.visibilityElement.addEventListener('click', function() {\n                _visibility();\n            });\n        }\n    }   \n\n    // Event handlers\n    var _check = function() {\n        var score = 0;\n        var checkScore = _getCheckScore();\n        \n        if (_checkLength() === true) {\n            score = score + checkScore;\n        }\n\n        if (the.options.checkUppercase === true && _checkLowercase() === true) {\n            score = score + checkScore;\n        }\n\n        if (the.options.checkLowercase === true && _checkUppercase() === true ) {\n            score = score + checkScore;\n        }\n\n        if (the.options.checkDigit === true && _checkDigit() === true ) {\n            score = score + checkScore;\n        }\n\n        if (the.options.checkChar === true && _checkChar() === true ) {\n            score = score + checkScore;\n        }\n\n        the.score = score;\n\n        _highlight();\n    }\n\n    var _checkLength = function() {\n        return the.inputElement.value.length >= the.options.minLength;  // 20 score\n    }\n\n    var _checkLowercase = function() {\n        return /[a-z]/.test(the.inputElement.value);  // 20 score\n    }\n\n    var _checkUppercase = function() {\n        return /[A-Z]/.test(the.inputElement.value);  // 20 score\n    }\n\n    var _checkDigit = function() {\n        return /[0-9]/.test(the.inputElement.value);  // 20 score\n    }\n\n    var _checkChar = function() {\n        return /[~`!#@$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g.test(the.inputElement.value);  // 20 score\n    }    \n\n    var _getCheckScore = function() {\n        var count = 1;\n        \n        if (the.options.checkUppercase === true) {\n            count++;\n        }\n\n        if (the.options.checkLowercase === true) {\n            count++;\n        }\n\n        if (the.options.checkDigit === true) {\n            count++;\n        }\n\n        if (the.options.checkChar === true) {\n            count++;\n        }\n\n        the.checkSteps = count;\n\n        return 100 / the.checkSteps;\n    }\n    \n    var _highlight = function() {\n        var items = [].slice.call(the.highlightElement.querySelectorAll('div'));\n        var total = items.length;\n        var index = 0;\n        var checkScore = _getCheckScore();\n        var score = _getScore();\n\n        items.map(function (item) {\n            index++;\n\n            if ( (checkScore * index * (the.checkSteps / total)) <= score ) {\n                item.classList.add('active');\n            } else {\n                item.classList.remove('active');\n            }            \n        });\n    }\n\n    var _visibility = function() {\n        var visibleIcon = the.visibilityElement.querySelector(':scope > i:not(.d-none)');\n        var hiddenIcon = the.visibilityElement.querySelector(':scope > i.d-none');\n        \n        if (the.inputElement.getAttribute('type').toLowerCase() === 'password' ) {\n            the.inputElement.setAttribute('type', 'text');\n        }  else {\n            the.inputElement.setAttribute('type', 'password');\n        }        \n\n        visibleIcon.classList.add('d-none');\n        hiddenIcon.classList.remove('d-none');\n\n        the.inputElement.focus();\n    }\n\n    var _reset = function() {\n        the.score = 0;\n\n        _highlight();\n    }\n\n    // Gets current password score\n    var _getScore = function() {\n       return the.score;\n    }\n\n    var _destroy = function() {\n        KTUtil.data(the.element).remove('password-meter');\n    }\n\n    // Construct class\n    _construct();\n\n    ///////////////////////\n    // ** Public API  ** //\n    ///////////////////////\n\n    // Plugin API\n    the.check = function() {\n        return _check();\n    }\n\n    the.getScore = function() {\n        return _getScore();\n    }\n\n    the.reset = function() {\n        return _reset();\n    }\n\n    the.destroy = function() {\n        return _destroy();\n    }\n};\n\n// Static methods\nKTPasswordMeter.getInstance = function(element) {\n    if ( element !== null && KTUtil.data(element).has('password-meter') ) {\n        return KTUtil.data(element).get('password-meter');\n    } else {\n        return null;\n    }\n}\n\n// Create instances\nKTPasswordMeter.createInstances = function(selector = '[data-kt-password-meter]') {\n    // Get instances\n    var elements = document.body.querySelectorAll(selector);\n\n    if ( elements && elements.length > 0 ) {\n        for (var i = 0, len = elements.length; i < len; i++) {\n            // Initialize instances\n            new KTPasswordMeter(elements[i]);\n        }\n    }\n}\n\n// Global initialization\nKTPasswordMeter.init = function() {\n    KTPasswordMeter.createInstances();\n};\n\n// Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTPasswordMeter;\n}","\"use strict\";\n\nvar KTScrollHandlersInitialized = false;\n\n// Class definition\nvar KTScroll = function(element, options) {\n    ////////////////////////////\n    // ** Private Variables  ** //\n    ////////////////////////////\n    var the = this;\n\n    if (!element) {\n        return;\n    }\n\n    // Default options\n    var defaultOptions = {\n        saveState: true\n    };\n\n    ////////////////////////////\n    // ** Private Methods  ** //\n    ////////////////////////////\n\n    var _construct = function() {\n        if ( KTUtil.data(element).has('scroll') ) {\n            the = KTUtil.data(element).get('scroll');\n        } else {\n            _init();\n        }\n    }\n\n    var _init = function() {\n        // Variables\n        the.options = KTUtil.deepExtend({}, defaultOptions, options);\n\n        // Elements\n        the.element = element;        \n        the.id = the.element.getAttribute('id');\n\n        // Set initialized\n        the.element.setAttribute('data-kt-scroll', 'true');\n\n        // Update\n        _update();\n\n        // Bind Instance\n        KTUtil.data(the.element).set('scroll', the);\n    }\n\n    var _setupHeight = function() {\n        var heightType = _getHeightType();\n        var height = _getHeight();\n\n        // Set height\n        if ( height !== null && height.length > 0 ) {\n            KTUtil.css(the.element, heightType, height);\n        } else {\n            KTUtil.css(the.element, heightType, '');\n        }\n    }\n\n    var _setupState = function () {\n        var namespace = _getStorageNamespace();\n\n        if ( _getOption('save-state') === true && the.id ) {\n            if ( localStorage.getItem(namespace + the.id + 'st') ) {\n                var pos = parseInt(localStorage.getItem(namespace + the.id + 'st'));\n\n                if ( pos > 0 ) {\n                    the.element.scroll({\n                        top: pos,\n                        behavior: 'instant'\n                    });\n                }\n            }\n        }\n    }\n\n    var _getStorageNamespace = function(postfix) {\n        return document.body.hasAttribute(\"data-kt-name\") ? document.body.getAttribute(\"data-kt-name\") + \"_\" : \"\";\n    }\n\n    var _setupScrollHandler = function() {\n        if ( _getOption('save-state') === true && the.id ) {\n            the.element.addEventListener('scroll', _scrollHandler);\n        } else {\n            the.element.removeEventListener('scroll', _scrollHandler);\n        }\n    }\n\n    var _destroyScrollHandler = function() {\n        the.element.removeEventListener('scroll', _scrollHandler);\n    }\n\n    var _resetHeight = function() {\n        KTUtil.css(the.element, _getHeightType(), '');\n    }\n\n    var _scrollHandler = function () {\n        var namespace = _getStorageNamespace();\n        localStorage.setItem(namespace + the.id + 'st', the.element.scrollTop);\n    }\n\n    var _update = function() {\n        // Activate/deactivate\n        if ( _getOption('activate') === true || the.element.hasAttribute('data-kt-scroll-activate') === false ) {\n            _setupHeight();\n            _setupStretchHeight();\n            _setupScrollHandler();\n            _setupState();\n        } else {\n            _resetHeight()\n            _destroyScrollHandler();\n        }        \n    }\n\n    var _setupStretchHeight = function() {\n        var stretch = _getOption('stretch');\n\n        // Stretch\n        if ( stretch !== null ) {\n            var elements = document.querySelectorAll(stretch);\n\n            if ( elements && elements.length == 2 ) {\n                var element1 = elements[0];\n                var element2 = elements[1];\n                var diff = _getElementHeight(element2) - _getElementHeight(element1);\n\n                if (diff > 0) {\n                    var height = parseInt(KTUtil.css(the.element, _getHeightType())) + diff;\n\n                    KTUtil.css(the.element, _getHeightType(), String(height) + 'px');\n                }\n            }\n        }\n    }\n\n    var _getHeight = function() {\n        var height = _getOption(_getHeightType());\n\n        if ( height instanceof Function ) {\n            return height.call();\n        } else if ( height !== null && typeof height === 'string' && height.toLowerCase() === 'auto' ) {\n            return _getAutoHeight();\n        } else {\n            return height;\n        }\n    }\n\n    var _getAutoHeight = function() {\n        var height = KTUtil.getViewPort().height;\n        var dependencies = _getOption('dependencies');\n        var wrappers = _getOption('wrappers');\n        var offset = _getOption('offset');\n\n        // Spacings\n        height = height - _getElementSpacing(the.element); \n\n        // Height dependencies\n        //console.log('Q:' + JSON.stringify(dependencies));\n\n        if ( dependencies !== null ) {\n            var elements = document.querySelectorAll(dependencies);\n\n            if ( elements && elements.length > 0 ) {\n                for ( var i = 0, len = elements.length; i < len; i++ ) {\n                    if ( KTUtil.visible(elements[i]) === false ) {\n                        continue;\n                    }\n\n                    height = height - _getElementHeight(elements[i]);\n                }\n            }\n        }\n\n        // Wrappers\n        if ( wrappers !== null ) {\n            var elements = document.querySelectorAll(wrappers);\n            if ( elements && elements.length > 0 ) {\n                for ( var i = 0, len = elements.length; i < len; i++ ) {\n                    if ( KTUtil.visible(elements[i]) === false ) {\n                        continue;\n                    }\n\n                    height = height - _getElementSpacing(elements[i]);\n                }\n            }\n        }\n\n        // Custom offset\n        if ( offset !== null && typeof offset !== 'object') {\n            height = height - parseInt(offset);\n        }\n\n        return String(height) + 'px';\n    }\n\n    var _getElementHeight = function(element) {\n        var height = 0;\n\n        if (element !== null) {\n            height = height + parseInt(KTUtil.css(element, 'height'));\n            height = height + parseInt(KTUtil.css(element, 'margin-top'));\n            height = height + parseInt(KTUtil.css(element, 'margin-bottom'));\n\n            if (KTUtil.css(element, 'border-top')) {\n                height = height + parseInt(KTUtil.css(element, 'border-top'));\n            }\n\n            if (KTUtil.css(element, 'border-bottom')) {\n                height = height + parseInt(KTUtil.css(element, 'border-bottom'));\n            }\n        } \n\n        return height;\n    }\n\n    var _getElementSpacing = function(element) {\n        var spacing = 0;\n\n        if (element !== null) {\n            spacing = spacing + parseInt(KTUtil.css(element, 'margin-top'));\n            spacing = spacing + parseInt(KTUtil.css(element, 'margin-bottom'));\n            spacing = spacing + parseInt(KTUtil.css(element, 'padding-top'));\n            spacing = spacing + parseInt(KTUtil.css(element, 'padding-bottom'));\n\n            if (KTUtil.css(element, 'border-top')) {\n                spacing = spacing + parseInt(KTUtil.css(element, 'border-top'));\n            }\n\n            if (KTUtil.css(element, 'border-bottom')) {\n                spacing = spacing + parseInt(KTUtil.css(element, 'border-bottom'));\n            }\n        } \n\n        return spacing;\n    }\n\n    var _getOption = function(name) {\n        if ( the.element.hasAttribute('data-kt-scroll-' + name) === true ) {\n            var attr = the.element.getAttribute('data-kt-scroll-' + name);\n\n            var value = KTUtil.getResponsiveValue(attr);\n\n            if ( value !== null && String(value) === 'true' ) {\n                value = true;\n            } else if ( value !== null && String(value) === 'false' ) {\n                value = false;\n            }\n\n            return value;\n        } else {\n            var optionName = KTUtil.snakeToCamel(name);\n\n            if ( the.options[optionName] ) {\n                return KTUtil.getResponsiveValue(the.options[optionName]);\n            } else {\n                return null;\n            }\n        }\n    }\n\n    var _getHeightType = function() {\n        if (_getOption('height')) {\n            return 'height';\n        } if (_getOption('min-height')) {\n            return 'min-height';\n        } if (_getOption('max-height')) {\n            return 'max-height';\n        }\n    }\n\n    var _destroy = function() {\n        KTUtil.data(the.element).remove('scroll');\n    }\n\n    // Construct Class\n    _construct();\n\n    ///////////////////////\n    // ** Public API  ** //\n    ///////////////////////\n\n    the.update = function() {\n        return _update();\n    }\n\n    the.getHeight = function() {\n        return _getHeight();\n    }\n\n    the.getElement = function() {\n        return the.element;\n    }\n\n    the.destroy = function() {\n        return _destroy();\n    }\n};\n\n// Static methods\nKTScroll.getInstance = function(element) {\n    if ( element !== null && KTUtil.data(element).has('scroll') ) {\n        return KTUtil.data(element).get('scroll');\n    } else {\n        return null;\n    }\n}\n\n// Create instances\nKTScroll.createInstances = function(selector = '[data-kt-scroll=\"true\"]') {\n    // Initialize Menus\n    var elements = document.body.querySelectorAll(selector);\n\n    if ( elements && elements.length > 0 ) {\n        for (var i = 0, len = elements.length; i < len; i++) {\n            new KTScroll(elements[i]);\n        }\n    }\n}\n\n// Window resize handling\nKTScroll.handleResize = function() {\n    window.addEventListener('resize', function() {\n        var timer;\n    \n        KTUtil.throttle(timer, function() {\n            // Locate and update Offcanvas instances on window resize\n            var elements = document.body.querySelectorAll('[data-kt-scroll=\"true\"]');\n    \n            if ( elements && elements.length > 0 ) {\n                for (var i = 0, len = elements.length; i < len; i++) {\n                    var scroll = KTScroll.getInstance(elements[i]);\n                    if (scroll) {\n                        scroll.update();\n                    }\n                }\n            }\n        }, 200);\n    });\n}\n\n// Global initialization\nKTScroll.init = function() {\n    KTScroll.createInstances();\n\n    if (KTScrollHandlersInitialized === false) {\n        KTScroll.handleResize();\n\n        KTScrollHandlersInitialized = true;\n    }    \n};\n\n// Webpack Support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTScroll;\n}\n","\"use strict\";\n\n// Class definition\nvar KTScrolltop = function(element, options) {\n    ////////////////////////////\n    // ** Private variables  ** //\n    ////////////////////////////\n    var the = this;\n\n    if ( typeof element === \"undefined\" || element === null ) {\n        return;\n    }\n\n    // Default options\n    var defaultOptions = {\n        offset: 300,\n        speed: 600\n    };\n\n    ////////////////////////////\n    // ** Private methods  ** //\n    ////////////////////////////\n\n    var _construct = function() {\n        if (KTUtil.data(element).has('scrolltop')) {\n            the = KTUtil.data(element).get('scrolltop');\n        } else {\n            _init();\n        }\n    }\n\n    var _init = function() {\n        // Variables\n        the.options = KTUtil.deepExtend({}, defaultOptions, options);\n        the.uid = KTUtil.getUniqueId('scrolltop');\n        the.element = element;\n\n        // Set initialized\n        the.element.setAttribute('data-kt-scrolltop', 'true');\n\n        // Event Handlers\n        _handlers();\n\n        // Bind Instance\n        KTUtil.data(the.element).set('scrolltop', the);\n    }\n\n    var _handlers = function() {\n        var timer;\n\n        window.addEventListener('scroll', function() {\n            KTUtil.throttle(timer, function() {\n                _scroll();\n            }, 200);\n        });\n\n        KTUtil.addEvent(the.element, 'click', function(e) {\n            e.preventDefault();\n\n            _go();\n        });\n    }\n\n    var _scroll = function() {\n        var offset = parseInt(_getOption('offset'));\n\n        var pos = KTUtil.getScrollTop(); // current vertical position\n\n        if ( pos > offset ) {\n            if ( document.body.hasAttribute('data-kt-scrolltop') === false ) {\n                document.body.setAttribute('data-kt-scrolltop', 'on');\n            }\n        } else {\n            if ( document.body.hasAttribute('data-kt-scrolltop') === true ) {\n                document.body.removeAttribute('data-kt-scrolltop');\n            }\n        }\n    }\n\n    var _go = function() {\n        var speed = parseInt(_getOption('speed'));\n\n        window.scrollTo({top: 0, behavior: 'smooth'});\n        //KTUtil.scrollTop(0, speed);\n    }\n\n    var _getOption = function(name) {\n        if ( the.element.hasAttribute('data-kt-scrolltop-' + name) === true ) {\n            var attr = the.element.getAttribute('data-kt-scrolltop-' + name);\n            var value = KTUtil.getResponsiveValue(attr);\n\n            if ( value !== null && String(value) === 'true' ) {\n                value = true;\n            } else if ( value !== null && String(value) === 'false' ) {\n                value = false;\n            }\n\n            return value;\n        } else {\n            var optionName = KTUtil.snakeToCamel(name);\n\n            if ( the.options[optionName] ) {\n                return KTUtil.getResponsiveValue(the.options[optionName]);\n            } else {\n                return null;\n            }\n        }\n    }\n\n    var _destroy = function() {\n        KTUtil.data(the.element).remove('scrolltop');\n    }\n\n    // Construct class\n    _construct();\n\n    ///////////////////////\n    // ** Public API  ** //\n    ///////////////////////\n\n    // Plugin API\n    the.go = function() {\n        return _go();\n    }\n\n    the.getElement = function() {\n        return the.element;\n    }\n\n    the.destroy = function() {\n        return _destroy();\n    }\n};\n\n// Static methods\nKTScrolltop.getInstance = function(element) {\n    if (element && KTUtil.data(element).has('scrolltop')) {\n        return KTUtil.data(element).get('scrolltop');\n    } else {\n        return null;\n    }\n}\n\n// Create instances\nKTScrolltop.createInstances = function(selector = '[data-kt-scrolltop=\"true\"]') {\n    // Initialize Menus\n    var elements = document.body.querySelectorAll(selector);\n\n    if ( elements && elements.length > 0 ) {\n        for (var i = 0, len = elements.length; i < len; i++) {\n            new KTScrolltop(elements[i]);\n        }\n    }\n}\n\n// Global initialization\nKTScrolltop.init = function() {\n    KTScrolltop.createInstances();\n};\n\n// Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTScrolltop;\n}\n","\"use strict\";\n\n// Class definition\nvar KTSearch = function(element, options) {\n    ////////////////////////////\n    // ** Private variables  ** //\n    ////////////////////////////\n    var the = this;\n\n    if (!element) {\n        return;\n    }\n\n    // Default Options\n    var defaultOptions = {\n        minLength: 2,  // Miniam text lenght to query search\n        keypress: true,  // Enable search on keypress \n        enter: true,  // Enable search on enter key press\n        layout: 'menu',  // Use 'menu' or 'inline' layout options to display search results\n        responsive: null, // Pass integer value or bootstrap compatible breakpoint key(sm,md,lg,xl,xxl) to enable reponsive form mode for device width below the breakpoint value\n        showOnFocus: true // Always show menu on input focus\n    };\n\n    ////////////////////////////\n    // ** Private methods  ** //\n    ////////////////////////////\n\n    // Construct\n    var _construct = function() {\n        if ( KTUtil.data(element).has('search') === true ) {\n            the = KTUtil.data(element).get('search');\n        } else {\n            _init();\n        }\n    }\n\n    // Init\n    var _init = function() {\n        // Variables\n        the.options = KTUtil.deepExtend({}, defaultOptions, options);\n        the.processing = false;\n\n        // Elements\n        the.element = element;               \n        the.contentElement = _getElement('content');     \n        the.formElement = _getElement('form');         \n        the.inputElement = _getElement('input');\n        the.spinnerElement = _getElement('spinner');\n        the.clearElement = _getElement('clear');\n        the.toggleElement = _getElement('toggle');   \n        the.submitElement = _getElement('submit');\n        the.toolbarElement = _getElement('toolbar');   \n\n        the.resultsElement = _getElement('results');\n        the.suggestionElement = _getElement('suggestion'); \n        the.emptyElement = _getElement('empty'); \n\n        // Set initialized\n        the.element.setAttribute('data-kt-search', 'true');\n        \n        // Layout\n        the.layout = _getOption('layout');\n        \n        // Menu\n        if ( the.layout === 'menu' ) {\n            the.menuObject = new KTMenu(the.contentElement);\n        } else {\n            the.menuObject = null;\n        }\n\n        // Update\n        _update();\n\n        // Event Handlers\n        _handlers();\n\n        // Bind Instance\n        KTUtil.data(the.element).set('search', the);\n    }\n\n    // Handlera\n    var _handlers = function() {\n        // Focus\n        the.inputElement.addEventListener('focus', _focus);\n\n        // Blur\n        the.inputElement.addEventListener('blur', _blur);\n\n        // Keypress\n        if ( _getOption('keypress') === true ) {\n            the.inputElement.addEventListener('input', _input);\n        }\n\n        // Submit\n        if ( the.submitElement ) {\n            the.submitElement.addEventListener('click', _search);\n        }\n\n        // Enter\n        if ( _getOption('enter') === true ) {\n            the.inputElement.addEventListener('keypress', _enter);\n        }\n\n        // Clear \n        if ( the.clearElement ) {\n            the.clearElement.addEventListener('click', _clear);\n        }\n\n        // Menu\n        if ( the.menuObject ) {\n            // Toggle menu\n            if ( the.toggleElement ) {\n                the.toggleElement.addEventListener('click', _show);\n\n                the.menuObject.on('kt.menu.dropdown.show', function(item) {\n                    if (KTUtil.visible(the.toggleElement)) {\n                        the.toggleElement.classList.add('active');\n                        the.toggleElement.classList.add('show');\n                    } \n                });\n    \n                the.menuObject.on('kt.menu.dropdown.hide', function(item) {\n                    if (KTUtil.visible(the.toggleElement)) {\n                        the.toggleElement.classList.remove('active');\n                        the.toggleElement.classList.remove('show');\n                    }\n                });\n            }            \n\n            the.menuObject.on('kt.menu.dropdown.shown', function() {\n                the.inputElement.focus();\n            });\n        } \n\n        // Window resize handling\n        window.addEventListener('resize', function() {\n            var timer;\n\n            KTUtil.throttle(timer, function() {\n                _update();\n            }, 200);\n        });\n    }\n\n    // Focus\n    var _focus = function() {\n        the.element.classList.add('focus');\n\n        if ( _getOption('show-on-focus') === true || the.inputElement.value.length >= minLength ) {\n            _show();\n        }        \n    }\n\n    // Blur\n    var _blur = function() {        \n        the.element.classList.remove('focus');\n    }\n\n    // Enter \n    var _enter = function(e) {\n        var key = e.charCode || e.keyCode || 0;\n\n        if (key == 13) {\n            e.preventDefault();\n\n            _search();\n        }\n    }\n\n    // Input\n    var _input = function() {\n        if ( _getOption('min-length') )  {\n            var minLength = parseInt(_getOption('min-length'));\n\n            if ( the.inputElement.value.length >= minLength ) {\n                _search();\n            } else if ( the.inputElement.value.length === 0 ) {\n                _clear();\n            }\n        }\n    }\n\n    // Search\n    var _search = function() {\n        if (the.processing === false) {\n            // Show search spinner\n            if (the.spinnerElement) {\n                the.spinnerElement.classList.remove(\"d-none\");\n            }\n            \n            // Hide search clear button\n            if (the.clearElement) {\n                the.clearElement.classList.add(\"d-none\");\n            }\n\n            // Hide search toolbar\n            if (the.toolbarElement && the.formElement.contains(the.toolbarElement)) {\n                the.toolbarElement.classList.add(\"d-none\");\n            }\n\n            // Focus input\n            the.inputElement.focus();\n\n            the.processing = true;\n            KTEventHandler.trigger(the.element, 'kt.search.process', the);\n        }\n    }\n\n    // Complete\n    var _complete = function() {\n        if (the.spinnerElement) {\n            the.spinnerElement.classList.add(\"d-none\");\n        }\n\n        // Show search toolbar\n        if (the.clearElement) {\n            the.clearElement.classList.remove(\"d-none\");\n        }\n\n        if ( the.inputElement.value.length === 0 ) {\n            _clear();\n        }\n\n        // Focus input\n        the.inputElement.focus();\n\n        _show();\n\n        the.processing = false;\n    }\n\n    // Clear\n    var _clear = function() {\n        if ( KTEventHandler.trigger(the.element, 'kt.search.clear', the) === false )  {\n            return;\n        }\n\n        // Clear and focus input\n        the.inputElement.value = \"\";\n        the.inputElement.focus();\n\n        // Hide clear icon\n        if (the.clearElement) {\n            the.clearElement.classList.add(\"d-none\");\n        }\n\n        // Show search toolbar\n        if (the.toolbarElement && the.formElement.contains(the.toolbarElement)) {\n            the.toolbarElement.classList.remove(\"d-none\");\n        }\n\n        // Hide menu\n        if ( _getOption('show-on-focus') === false ) {\n            _hide();\n        }\n\n        KTEventHandler.trigger(the.element, 'kt.search.cleared', the);\n    }\n\n    // Update\n    var _update = function() {\n        // Handle responsive form\n        if (the.layout === 'menu') {\n            var responsiveFormMode = _getResponsiveFormMode();\n\n            if ( responsiveFormMode === 'on' && the.contentElement.contains(the.formElement) === false ) {\n                the.contentElement.prepend(the.formElement);\n                the.formElement.classList.remove('d-none');                \n            } else if ( responsiveFormMode === 'off' && the.contentElement.contains(the.formElement) === true ) {\n                the.element.prepend(the.formElement);\n                the.formElement.classList.add('d-none');\n            }\n        }\n    }\n\n    // Show menu\n    var _show = function() {\n        if ( the.menuObject ) {\n            _update();\n\n            the.menuObject.show(the.element);\n        }\n    }\n\n    // Hide menu\n    var _hide = function() {\n        if ( the.menuObject ) {\n            _update();\n\n            the.menuObject.hide(the.element);\n        }\n    }\n\n    // Get option\n    var _getOption = function(name) {\n        if ( the.element.hasAttribute('data-kt-search-' + name) === true ) {\n            var attr = the.element.getAttribute('data-kt-search-' + name);\n            var value = KTUtil.getResponsiveValue(attr);\n\n            if ( value !== null && String(value) === 'true' ) {\n                value = true;\n            } else if ( value !== null && String(value) === 'false' ) {\n                value = false;\n            }\n\n            return value;\n        } else {\n            var optionName = KTUtil.snakeToCamel(name);\n\n            if ( the.options[optionName] ) {\n                return KTUtil.getResponsiveValue(the.options[optionName]);\n            } else {\n                return null;\n            }\n        }\n    }\n\n    // Get element\n    var _getElement = function(name) {\n        return the.element.querySelector('[data-kt-search-element=\"' + name + '\"]');\n    }\n\n    // Check if responsive form mode is enabled\n    var _getResponsiveFormMode = function() {\n        var responsive = _getOption('responsive');\n        var width = KTUtil.getViewPort().width;\n\n        if (!responsive) {\n            return null;\n        }\n\n        var breakpoint = KTUtil.getBreakpoint(responsive);\n\n        if (!breakpoint ) {\n            breakpoint = parseInt(responsive);\n        }\n\n        if (width < breakpoint) {\n            return \"on\";\n        } else {\n            return \"off\";\n        }\n    }\n\n    var _destroy = function() {\n        KTUtil.data(the.element).remove('search');\n    }    \n\n    // Construct class\n    _construct();\n\n    ///////////////////////\n    // ** Public API  ** //\n    ///////////////////////\n\n    // Plugin API\n    the.show = function() {\n        return _show();\n    }\n\n    the.hide = function() {\n        return _hide();\n    }\n\n    the.update = function() {\n        return _update();\n    }\n\n    the.search = function() {\n        return _search();\n    }\n\n    the.complete = function() {\n        return _complete();\n    }\n\n    the.clear = function() {\n        return _clear();\n    }\n\n    the.isProcessing = function() {\n        return the.processing;\n    }\n\n    the.getQuery = function() {\n        return the.inputElement.value;\n    }    \n\n    the.getMenu = function() {\n        return the.menuObject;\n    }\n\n    the.getFormElement = function() {\n        return the.formElement;\n    }\n\n    the.getInputElement = function() {\n        return the.inputElement;\n    }\n\n    the.getContentElement = function() {\n        return the.contentElement;\n    }\n\n    the.getElement = function() {\n        return the.element;\n    }\n\n    the.destroy = function() {\n        return _destroy();\n    }\n\n    // Event API\n    the.on = function(name, handler) {\n        return KTEventHandler.on(the.element, name, handler);\n    }\n\n    the.one = function(name, handler) {\n        return KTEventHandler.one(the.element, name, handler);\n    }\n\n    the.off = function(name, handlerId) {\n        return KTEventHandler.off(the.element, name, handlerId);\n    }\n};\n\n// Static methods\nKTSearch.getInstance = function(element) {\n    if ( element !== null && KTUtil.data(element).has('search') ) {\n        return KTUtil.data(element).get('search');\n    } else {\n        return null;\n    }\n}\n\n// Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTSearch;\n}\n","\"use strict\";\n\n// Class definition\nvar KTStepper = function(element, options) {\n    //////////////////////////////\n    // ** Private variables  ** //\n    //////////////////////////////\n    var the = this;\n\n    if ( typeof element === \"undefined\" || element === null ) {\n        return;\n    }\n\n    // Default Options\n    var defaultOptions = {\n        startIndex: 1,\n        animation: false,\n        animationSpeed: '0.3s',\n        animationNextClass: 'animate__animated animate__slideInRight animate__fast',\n        animationPreviousClass: 'animate__animated animate__slideInLeft animate__fast'\n    };\n\n    ////////////////////////////\n    // ** Private methods  ** //\n    ////////////////////////////\n\n    var _construct = function() {\n        if ( KTUtil.data(element).has('stepper') === true ) {\n            the = KTUtil.data(element).get('stepper');\n        } else {\n            _init();\n        }\n    }\n\n    var _init = function() {\n        the.options = KTUtil.deepExtend({}, defaultOptions, options);\n        the.uid = KTUtil.getUniqueId('stepper');\n\n        the.element = element;\n\n        // Set initialized\n        the.element.setAttribute('data-kt-stepper', 'true');\n\n        // Elements\n        the.steps = KTUtil.findAll(the.element, '[data-kt-stepper-element=\"nav\"]');\n        the.btnNext = KTUtil.find(the.element, '[data-kt-stepper-action=\"next\"]');\n        the.btnPrevious = KTUtil.find(the.element, '[data-kt-stepper-action=\"previous\"]');\n        the.btnSubmit = KTUtil.find(the.element, '[data-kt-stepper-action=\"submit\"]');\n\n        // Variables\n        the.totalStepsNumber = the.steps.length;\n        the.passedStepIndex = 0;\n        the.currentStepIndex = 1;\n        the.clickedStepIndex = 0;\n\n        // Set Current Step\n        if ( the.options.startIndex > 1 ) {\n            _goTo(the.options.startIndex);\n        }\n\n        // Event listeners\n        the.nextListener = function(e) {\n            e.preventDefault();\n\n            KTEventHandler.trigger(the.element, 'kt.stepper.next', the);\n        };\n\n        the.previousListener = function(e) {\n            e.preventDefault();\n\n            KTEventHandler.trigger(the.element, 'kt.stepper.previous', the);\n        };\n\n        the.stepListener = function(e) {\n            e.preventDefault();\n\n            if ( the.steps && the.steps.length > 0 ) {\n                for (var i = 0, len = the.steps.length; i < len; i++) {\n                    if ( the.steps[i] === this ) {\n                        the.clickedStepIndex = i + 1;\n\n                        KTEventHandler.trigger(the.element, 'kt.stepper.click', the);\n\n                        return;\n                    }\n                }\n            }\n        };\n\n        // Event Handlers\n        KTUtil.addEvent(the.btnNext, 'click', the.nextListener);\n\n        KTUtil.addEvent(the.btnPrevious, 'click', the.previousListener);\n\n        the.stepListenerId = KTUtil.on(the.element, '[data-kt-stepper-action=\"step\"]', 'click', the.stepListener);\n\n        // Bind Instance\n        KTUtil.data(the.element).set('stepper', the);\n    }\n\n    var _goTo = function(index) {\n        // Trigger \"change\" event\n        KTEventHandler.trigger(the.element, 'kt.stepper.change', the);\n\n        // Skip if this step is already shown\n        if ( index === the.currentStepIndex || index > the.totalStepsNumber || index < 0 ) {\n            return;\n        }\n\n        // Validate step number\n        index = parseInt(index);\n\n        // Set current step\n        the.passedStepIndex = the.currentStepIndex;\n        the.currentStepIndex = index;\n\n        // Refresh elements\n        _refreshUI();\n\n        // Trigger \"changed\" event\n        KTEventHandler.trigger(the.element, 'kt.stepper.changed', the);\n\n        return the;\n    }\n\n    var _goNext = function() {\n        return _goTo( _getNextStepIndex() );\n    }\n\n    var _goPrevious = function() {\n        return _goTo( _getPreviousStepIndex() );\n    }\n\n    var _goLast = function() {\n        return _goTo( _getLastStepIndex() );\n    }\n\n    var _goFirst = function() {\n        return _goTo( _getFirstStepIndex() );\n    }\n\n    var _refreshUI = function() {\n        var state = '';\n\n        if ( _isLastStep() ) {\n            state = 'last';\n        } else if ( _isFirstStep() ) {\n            state = 'first';\n        } else {\n            state = 'between';\n        }\n\n        // Set state class\n        KTUtil.removeClass(the.element, 'last');\n        KTUtil.removeClass(the.element, 'first');\n        KTUtil.removeClass(the.element, 'between');\n\n        KTUtil.addClass(the.element, state);\n\n        // Step Items\n        var elements = KTUtil.findAll(the.element, '[data-kt-stepper-element=\"nav\"], [data-kt-stepper-element=\"content\"], [data-kt-stepper-element=\"info\"]');\n\n        if ( elements && elements.length > 0 ) {\n            for (var i = 0, len = elements.length; i < len; i++) {\n                var element = elements[i];\n                var index = KTUtil.index(element) + 1;\n\n                KTUtil.removeClass(element, 'current');\n                KTUtil.removeClass(element, 'completed');\n                KTUtil.removeClass(element, 'pending');\n\n                if ( index == the.currentStepIndex ) {\n                    KTUtil.addClass(element, 'current');\n\n                    if ( the.options.animation !== false && element.getAttribute('data-kt-stepper-element') == 'content' ) {\n                        KTUtil.css(element, 'animationDuration', the.options.animationSpeed);\n\n                        var animation = _getStepDirection(the.passedStepIndex) === 'previous' ?  the.options.animationPreviousClass : the.options.animationNextClass;\n                        KTUtil.animateClass(element, animation);\n                    }\n                } else {\n                    if ( index < the.currentStepIndex ) {\n                        KTUtil.addClass(element, 'completed');\n                    } else {\n                        KTUtil.addClass(element, 'pending');\n                    }\n                }\n            }\n        }\n    }\n\n    var _isLastStep = function() {\n        return the.currentStepIndex === the.totalStepsNumber;\n    }\n\n    var _isFirstStep = function() {\n        return the.currentStepIndex === 1;\n    }\n\n    var _isBetweenStep = function() {\n        return _isLastStep() === false && _isFirstStep() === false;\n    }\n\n    var _getNextStepIndex = function() {\n        if ( the.totalStepsNumber >= ( the.currentStepIndex + 1 ) ) {\n            return the.currentStepIndex + 1;\n        } else {\n            return the.totalStepsNumber;\n        }\n    }\n\n    var _getPreviousStepIndex = function() {\n        if ( ( the.currentStepIndex - 1 ) > 1 ) {\n            return the.currentStepIndex - 1;\n        } else {\n            return 1;\n        }\n    }\n\n    var _getFirstStepIndex = function(){\n        return 1;\n    }\n\n    var _getLastStepIndex = function() {\n        return the.totalStepsNumber;\n    }\n\n    var _getTotalStepsNumber = function() {\n        return the.totalStepsNumber;\n    }\n\n    var _getStepDirection = function(index) {\n        if ( index > the.currentStepIndex ) {\n            return 'next';\n        } else {\n            return 'previous';\n        }\n    }\n\n    var _getStepContent = function(index) {\n        var content = KTUtil.findAll(the.element, '[data-kt-stepper-element=\"content\"]');\n\n        if ( content[index-1] ) {\n            return content[index-1];\n        } else {\n            return false;\n        }\n    }\n\n    var _destroy = function() {\n        // Event Handlers\n        KTUtil.removeEvent(the.btnNext, 'click', the.nextListener);\n\n        KTUtil.removeEvent(the.btnPrevious, 'click', the.previousListener);\n\n        KTUtil.off(the.element, 'click', the.stepListenerId);\n\n        KTUtil.data(the.element).remove('stepper');\n    }\n\n    // Construct Class\n    _construct();\n\n    ///////////////////////\n    // ** Public API  ** //\n    ///////////////////////\n\n    // Plugin API\n    the.getElement = function(index) {\n        return the.element;\n    }\n\n    the.goTo = function(index) {\n        return _goTo(index);\n    }\n\n    the.goPrevious = function() {\n        return _goPrevious();\n    }\n\n    the.goNext = function() {\n        return _goNext();\n    }\n\n    the.goFirst = function() {\n        return _goFirst();\n    }\n\n    the.goLast = function() {\n        return _goLast();\n    }\n\n    the.getCurrentStepIndex = function() {\n        return the.currentStepIndex;\n    }\n\n    the.getNextStepIndex = function() {\n        return _getNextStepIndex();\n    }\n\n    the.getPassedStepIndex = function() {\n        return the.passedStepIndex;\n    }\n\n    the.getClickedStepIndex = function() {\n        return the.clickedStepIndex;\n    }\n\n    the.getPreviousStepIndex = function() {\n        return _getPreviousStepIndex();\n    }\n\n    the.destroy = function() {\n        return _destroy();\n    }\n\n    // Event API\n    the.on = function(name, handler) {\n        return KTEventHandler.on(the.element, name, handler);\n    }\n\n    the.one = function(name, handler) {\n        return KTEventHandler.one(the.element, name, handler);\n    }\n\n    the.off = function(name, handlerId) {\n        return KTEventHandler.off(the.element, name, handlerId);\n    }\n\n    the.trigger = function(name, event) {\n        return KTEventHandler.trigger(the.element, name, event, the, event);\n    }\n};\n\n// Static methods\nKTStepper.getInstance = function(element) {\n    if ( element !== null && KTUtil.data(element).has('stepper') ) {\n        return KTUtil.data(element).get('stepper');\n    } else {\n        return null;\n    }\n}\n\n// Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTStepper;\n}\n","\"use strict\";\n\nvar KTStickyHandlersInitialized = false;\n\n// Class definition\nvar KTSticky = function(element, options) {\n    ////////////////////////////\n    // ** Private Variables  ** //\n    ////////////////////////////\n    var the = this;\n\n    if ( typeof element === \"undefined\" || element === null ) {\n        return;\n    }\n\n    // Default Options\n    var defaultOptions = {\n        offset: 200,\n        reverse: false,\n        release: null,\n        animation: true,\n        animationSpeed: '0.3s',\n        animationClass: 'animation-slide-in-down'\n    };\n    ////////////////////////////\n    // ** Private Methods  ** //\n    ////////////////////////////\n\n    var _construct = function() {\n        if ( KTUtil.data(element).has('sticky') === true ) {\n            the = KTUtil.data(element).get('sticky');\n        } else {\n            _init();\n        }\n    }\n\n    var _init = function() {\n        the.element = element;\n        the.options = KTUtil.deepExtend({}, defaultOptions, options);\n        the.uid = KTUtil.getUniqueId('sticky');\n        the.name = the.element.getAttribute('data-kt-sticky-name');\n        the.attributeName = 'data-kt-sticky-' + the.name;\n        the.attributeName2 = 'data-kt-' + the.name;\n        the.eventTriggerState = true;\n        the.lastScrollTop = 0;\n        the.scrollHandler;\n\n        // Set initialized\n        the.element.setAttribute('data-kt-sticky', 'true');\n\n        // Event Handlers\n        window.addEventListener('scroll', _scroll);\n\n        // Initial Launch\n        _scroll();\n\n        // Bind Instance\n        KTUtil.data(the.element).set('sticky', the);\n    }\n\n    var _scroll = function(e) {\n        var offset = _getOption('offset');\n        var release = _getOption('release');\n        var reverse = _getOption('reverse');\n        var st;\n        var attrName;\n        var diff;\n\n        // Exit if false\n        if ( offset === false ) {\n            _disable();\n            return;\n        }\n\n        offset = parseInt(offset);\n        release = release ? document.querySelector(release) : null;\n\n        st = KTUtil.getScrollTop();\n        diff = document.documentElement.scrollHeight - window.innerHeight - KTUtil.getScrollTop();\n        \n        var proceed = (!release || (release.offsetTop - release.clientHeight) > st);\n\n        if ( reverse === true ) {  // Release on reverse scroll mode\n            if ( st > offset && proceed ) {\n                if ( document.body.hasAttribute(the.attributeName) === false) {\n                    \n                    if (_enable() === false) {\n                        return;\n                    }\n\n                    document.body.setAttribute(the.attributeName, 'on');\n                    document.body.setAttribute(the.attributeName2, 'on');\n                    the.element.setAttribute(\"data-kt-sticky-enabled\", \"true\");\n                }\n\n                if ( the.eventTriggerState === true ) {\n                    KTEventHandler.trigger(the.element, 'kt.sticky.on', the);\n                    KTEventHandler.trigger(the.element, 'kt.sticky.change', the);\n\n                    the.eventTriggerState = false;\n                }\n            } else { // Back scroll mode\n                if ( document.body.hasAttribute(the.attributeName) === true) {\n                    _disable();\n                    document.body.removeAttribute(the.attributeName);\n                    document.body.removeAttribute(the.attributeName2);\n                    the.element.removeAttribute(\"data-kt-sticky-enabled\");\n                }\n\n                if ( the.eventTriggerState === false ) {\n                    KTEventHandler.trigger(the.element, 'kt.sticky.off', the);\n                    KTEventHandler.trigger(the.element, 'kt.sticky.change', the);\n                    the.eventTriggerState = true;\n                }\n            }\n\n            the.lastScrollTop = st;\n        } else { // Classic scroll mode\n            if ( st > offset && proceed ) {\n                if ( document.body.hasAttribute(the.attributeName) === false) {\n                    \n                    if (_enable() === false) {\n                        return;\n                    } \n                    \n                    document.body.setAttribute(the.attributeName, 'on');\n                    document.body.setAttribute(the.attributeName2, 'on');\n                    the.element.setAttribute(\"data-kt-sticky-enabled\", \"true\");\n                }\n\n                if ( the.eventTriggerState === true ) {\n                    KTEventHandler.trigger(the.element, 'kt.sticky.on', the);\n                    KTEventHandler.trigger(the.element, 'kt.sticky.change', the);\n                    the.eventTriggerState = false;\n                }\n            } else { // back scroll mode\n                if ( document.body.hasAttribute(the.attributeName) === true ) {\n                    _disable();\n                    document.body.removeAttribute(the.attributeName);\n                    document.body.removeAttribute(the.attributeName2);\n                    the.element.removeAttribute(\"data-kt-sticky-enabled\");\n                }\n\n                if ( the.eventTriggerState === false ) {\n                    KTEventHandler.trigger(the.element, 'kt.sticky.off', the);\n                    KTEventHandler.trigger(the.element, 'kt.sticky.change', the);\n                    the.eventTriggerState = true;\n                }\n            }\n        }      \n\n        if (release) {\n            if ( release.offsetTop - release.clientHeight > st ) {\n                the.element.setAttribute('data-kt-sticky-released', 'true');\n            } else {\n                the.element.removeAttribute('data-kt-sticky-released');\n            }\n        } \n    }\n\n    var _enable = function(update) {\n        var top = _getOption('top');\n        top = top ? parseInt(top) : 0;\n\n        var left = _getOption('left');\n        var right = _getOption('right');\n        var width = _getOption('width');\n        var zindex = _getOption('zindex');\n        var dependencies = _getOption('dependencies');\n        var classes = _getOption('class');\n\n        var height = _calculateHeight();\n        var heightOffset = _getOption('height-offset');\n        heightOffset = heightOffset ? parseInt(heightOffset) : 0;\n\n        if (height + heightOffset + top > KTUtil.getViewPort().height) {\n            return false;\n        }\n        \n        if ( update !== true && _getOption('animation') === true ) {\n            KTUtil.css(the.element, 'animationDuration', _getOption('animationSpeed'));\n            KTUtil.animateClass(the.element, 'animation ' + _getOption('animationClass'));\n        }\n\n        if ( classes !== null ) {\n            KTUtil.addClass(the.element, classes);\n        }\n\n        if ( zindex !== null ) {\n            KTUtil.css(the.element, 'z-index', zindex);\n            KTUtil.css(the.element, 'position', 'fixed');\n        }\n\n        if ( top >= 0 ) {\n            KTUtil.css(the.element, 'top', String(top) + 'px');\n        }\n\n        if ( width !== null ) {\n            if (width['target']) {\n                var targetElement = document.querySelector(width['target']);\n                if (targetElement) {\n                    width = KTUtil.css(targetElement, 'width');\n                }\n            }\n\n            KTUtil.css(the.element, 'width', width);\n        }\n\n        if ( left !== null ) {\n            if ( String(left).toLowerCase() === 'auto' ) {\n                var offsetLeft = KTUtil.offset(the.element).left;\n\n                if ( offsetLeft >= 0 ) {\n                    KTUtil.css(the.element, 'left', String(offsetLeft) + 'px');\n                }\n            } else {\n                KTUtil.css(the.element, 'left', left);\n            }\n        }\n\n        if ( right !== null ) {\n            KTUtil.css(the.element, 'right', right);\n        }        \n\n        // Height dependencies\n        if ( dependencies !== null ) {\n            var dependencyElements = document.querySelectorAll(dependencies);\n            \n            if ( dependencyElements && dependencyElements.length > 0 ) {\n                for ( var i = 0, len = dependencyElements.length; i < len; i++ ) {\n                    KTUtil.css(dependencyElements[i], 'padding-top', String(height) + 'px');\n                }\n            }\n        }\n    }\n\n    var _disable = function() {\n        KTUtil.css(the.element, 'top', '');\n        KTUtil.css(the.element, 'width', '');\n        KTUtil.css(the.element, 'left', '');\n        KTUtil.css(the.element, 'right', '');\n        KTUtil.css(the.element, 'z-index', '');\n        KTUtil.css(the.element, 'position', '');\n\n        var dependencies = _getOption('dependencies');\n        var classes = _getOption('class');\n\n        if ( classes !== null ) {\n            KTUtil.removeClass(the.element, classes);\n        }\n\n        // Height dependencies\n        if ( dependencies !== null ) {\n            var dependencyElements = document.querySelectorAll(dependencies);\n\n            if ( dependencyElements && dependencyElements.length > 0 ) {\n                for ( var i = 0, len = dependencyElements.length; i < len; i++ ) {\n                    KTUtil.css(dependencyElements[i], 'padding-top', '');\n                }\n            }\n        }\n    }\n\n    var _check = function() {\n\n    }\n\n    var _calculateHeight = function() {\n        var height = parseFloat(KTUtil.css(the.element, 'height'));\n\n        height = height + parseFloat(KTUtil.css(the.element, 'margin-top'));\n        height = height + parseFloat(KTUtil.css(the.element, 'margin-bottom'));\n        \n        if (KTUtil.css(element, 'border-top')) {\n            height = height + parseFloat(KTUtil.css(the.element, 'border-top'));\n        }\n\n        if (KTUtil.css(element, 'border-bottom')) {\n            height = height + parseFloat(KTUtil.css(the.element, 'border-bottom'));\n        }\n\n        return height;\n    }\n\n    var _getOption = function(name) {\n        if ( the.element.hasAttribute('data-kt-sticky-' + name) === true ) {\n            var attr = the.element.getAttribute('data-kt-sticky-' + name);\n            var value = KTUtil.getResponsiveValue(attr);\n\n            if ( value !== null && String(value) === 'true' ) {\n                value = true;\n            } else if ( value !== null && String(value) === 'false' ) {\n                value = false;\n            }\n\n            return value;\n        } else {\n            var optionName = KTUtil.snakeToCamel(name);\n\n            if ( the.options[optionName] ) {\n                return KTUtil.getResponsiveValue(the.options[optionName]);\n            } else {\n                return null;\n            }\n        }\n    }\n\n    var _destroy = function() {\n        window.removeEventListener('scroll', _scroll);\n        KTUtil.data(the.element).remove('sticky');\n    }\n\n    // Construct Class\n    _construct();\n\n    ///////////////////////\n    // ** Public API  ** //\n    ///////////////////////\n\n    // Methods\n    the.update = function() {\n        if ( document.body.hasAttribute(the.attributeName) === true ) {\n            _disable();\n            document.body.removeAttribute(the.attributeName);\n            document.body.removeAttribute(the.attributeName2);\n            _enable(true);\n            document.body.setAttribute(the.attributeName, 'on');\n            document.body.setAttribute(the.attributeName2, 'on');\n        }\n    }\n\n    the.destroy = function() {\n        return _destroy();\n    }\n\n    // Event API\n    the.on = function(name, handler) {\n        return KTEventHandler.on(the.element, name, handler);\n    }\n\n    the.one = function(name, handler) {\n        return KTEventHandler.one(the.element, name, handler);\n    }\n\n    the.off = function(name, handlerId) {\n        return KTEventHandler.off(the.element, name, handlerId);\n    }\n\n    the.trigger = function(name, event) {\n        return KTEventHandler.trigger(the.element, name, event, the, event);\n    }\n};\n\n// Static methods\nKTSticky.getInstance = function(element) {\n    if ( element !== null && KTUtil.data(element).has('sticky') ) {\n        return KTUtil.data(element).get('sticky');\n    } else {\n        return null;\n    }\n}\n\n// Create instances\nKTSticky.createInstances = function(selector = '[data-kt-sticky=\"true\"]') {\n    // Initialize Menus\n    var elements = document.body.querySelectorAll(selector);\n    var sticky;\n\n    if ( elements && elements.length > 0 ) {\n        for (var i = 0, len = elements.length; i < len; i++) {\n            sticky = new KTSticky(elements[i]);\n        }\n    }\n}\n\n// Window resize handler\nKTSticky.handleResize = function() {\n    window.addEventListener('resize', function() {\n        var timer;\n    \n        KTUtil.throttle(timer, function() {\n            // Locate and update Offcanvas instances on window resize\n            var elements = document.body.querySelectorAll('[data-kt-sticky=\"true\"]');\n    \n            if ( elements && elements.length > 0 ) {\n                for (var i = 0, len = elements.length; i < len; i++) {\n                    var sticky = KTSticky.getInstance(elements[i]);\n                    if (sticky) {\n                        sticky.update();\n                    }\n                }\n            }\n        }, 200);\n    });\n}\n\n// Global initialization\nKTSticky.init = function() {\n    KTSticky.createInstances();\n\n    if (KTStickyHandlersInitialized === false) {\n        KTSticky.handleResize();\n        KTStickyHandlersInitialized = true;\n    }    \n};\n\n// Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTSticky;\n}\n","\"use strict\";\n\nvar KTSwapperHandlersInitialized = false;\n\n// Class definition\nvar KTSwapper = function(element, options) {\n    ////////////////////////////\n    // ** Private Variables  ** //\n    ////////////////////////////\n    var the = this;\n\n    if ( typeof element === \"undefined\" || element === null ) {\n        return;\n    }\n\n    // Default Options\n    var defaultOptions = {\n        mode: 'append'\n    };\n\n    ////////////////////////////\n    // ** Private Methods  ** //\n    ////////////////////////////\n\n    var _construct = function() {\n        if ( KTUtil.data(element).has('swapper') === true ) {\n            the = KTUtil.data(element).get('swapper');\n        } else {\n            _init();\n        }\n    }\n\n    var _init = function() {\n        the.element = element;\n        the.options = KTUtil.deepExtend({}, defaultOptions, options);\n\n        // Set initialized\n        the.element.setAttribute('data-kt-swapper', 'true');\n\n        // Initial update\n        _update();\n\n        // Bind Instance\n        KTUtil.data(the.element).set('swapper', the);\n    }\n\n    var _update = function(e) {\n        var parentSelector = _getOption('parent');\n\n        var mode = _getOption('mode');\n        var parentElement = parentSelector ? document.querySelector(parentSelector) : null;\n       \n\n        if (parentElement && element.parentNode !== parentElement) {\n            if (mode === 'prepend') {\n                parentElement.prepend(element);\n            } else if (mode === 'append') {\n                parentElement.append(element);\n            }\n        }\n    }\n\n    var _getOption = function(name) {\n        if ( the.element.hasAttribute('data-kt-swapper-' + name) === true ) {\n            var attr = the.element.getAttribute('data-kt-swapper-' + name);\n            var value = KTUtil.getResponsiveValue(attr);\n\n            if ( value !== null && String(value) === 'true' ) {\n                value = true;\n            } else if ( value !== null && String(value) === 'false' ) {\n                value = false;\n            }\n\n            return value;\n        } else {\n            var optionName = KTUtil.snakeToCamel(name);\n\n            if ( the.options[optionName] ) {\n                return KTUtil.getResponsiveValue(the.options[optionName]);\n            } else {\n                return null;\n            }\n        }\n    }\n\n    var _destroy = function() {\n        KTUtil.data(the.element).remove('swapper');\n    }\n\n    // Construct Class\n    _construct();\n\n    ///////////////////////\n    // ** Public API  ** //\n    ///////////////////////\n\n    // Methods\n    the.update = function() {\n        _update();\n    }\n\n    the.destroy = function() {\n        return _destroy();\n    }\n\n    // Event API\n    the.on = function(name, handler) {\n        return KTEventHandler.on(the.element, name, handler);\n    }\n\n    the.one = function(name, handler) {\n        return KTEventHandler.one(the.element, name, handler);\n    }\n\n    the.off = function(name, handlerId) {\n        return KTEventHandler.off(the.element, name, handlerId);\n    }\n\n    the.trigger = function(name, event) {\n        return KTEventHandler.trigger(the.element, name, event, the, event);\n    }\n};\n\n// Static methods\nKTSwapper.getInstance = function(element) {\n    if ( element !== null && KTUtil.data(element).has('swapper') ) {\n        return KTUtil.data(element).get('swapper');\n    } else {\n        return null;\n    }\n}\n\n// Create instances\nKTSwapper.createInstances = function(selector = '[data-kt-swapper=\"true\"]') {\n    // Initialize Menus\n    var elements = document.querySelectorAll(selector);\n    var swapper;\n\n    if ( elements && elements.length > 0 ) {\n        for (var i = 0, len = elements.length; i < len; i++) {\n            swapper = new KTSwapper(elements[i]);\n        }\n    }\n}\n\n// Window resize handler\nKTSwapper.handleResize = function() {\n    window.addEventListener('resize', function() {\n        var timer;\n    \n        KTUtil.throttle(timer, function() {\n            // Locate and update Offcanvas instances on window resize\n            var elements = document.querySelectorAll('[data-kt-swapper=\"true\"]');\n    \n            if ( elements && elements.length > 0 ) {\n                for (var i = 0, len = elements.length; i < len; i++) {\n                    var swapper = KTSwapper.getInstance(elements[i]);\n                    if (swapper) {\n                        swapper.update();\n                    }                \n                }\n            }\n        }, 200);\n    });\n};\n\n// Global initialization\nKTSwapper.init = function() {\n    KTSwapper.createInstances();\n\n    if (KTSwapperHandlersInitialized === false) {\n        KTSwapper.handleResize();\n        KTSwapperHandlersInitialized = true;\n    }\n};\n\n// Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTSwapper;\n}\n","\"use strict\";\n\n// Class definition\nvar KTToggle = function(element, options) {\n    ////////////////////////////\n    // ** Private variables  ** //\n    ////////////////////////////\n    var the = this;\n\n    if (!element) {\n        return;\n    }\n\n    // Default Options\n    var defaultOptions = {\n        saveState: true\n    };\n\n    ////////////////////////////\n    // ** Private methods  ** //\n    ////////////////////////////\n\n    var _construct = function() {\n        if ( KTUtil.data(element).has('toggle') === true ) {\n            the = KTUtil.data(element).get('toggle');\n        } else {\n            _init();\n        }\n    }\n\n    var _init = function() {\n        // Variables\n        the.options = KTUtil.deepExtend({}, defaultOptions, options);\n        the.uid = KTUtil.getUniqueId('toggle');\n\n        // Elements\n        the.element = element;\n\n        the.target = document.querySelector(the.element.getAttribute('data-kt-toggle-target')) ? document.querySelector(the.element.getAttribute('data-kt-toggle-target')) : the.element;\n        the.state = the.element.hasAttribute('data-kt-toggle-state') ? the.element.getAttribute('data-kt-toggle-state') : '';\n        the.mode = the.element.hasAttribute('data-kt-toggle-mode') ? the.element.getAttribute('data-kt-toggle-mode') : '';\n        the.attribute = 'data-kt-' + the.element.getAttribute('data-kt-toggle-name');\n\n        // Event Handlers\n        _handlers();\n\n        // Bind Instance\n        KTUtil.data(the.element).set('toggle', the);\n    }\n\n    var _handlers = function() {\n        KTUtil.addEvent(the.element, 'click', function(e) {\n            e.preventDefault();\n\n            if ( the.mode !== '' ) {\n                if ( the.mode === 'off' && _isEnabled() === false ) {\n                    _toggle();\n                } else if ( the.mode === 'on' && _isEnabled() === true ) {\n                    _toggle();\n                }\n            } else {\n                _toggle();\n            }\n        });\n    }\n\n    // Event handlers\n    var _toggle = function() {\n        // Trigger \"after.toggle\" event\n        KTEventHandler.trigger(the.element, 'kt.toggle.change', the);\n\n        if ( _isEnabled() ) {\n            _disable();\n        } else {\n            _enable();\n        }       \n\n        // Trigger \"before.toggle\" event\n        KTEventHandler.trigger(the.element, 'kt.toggle.changed', the);\n\n        return the;\n    }\n\n    var _enable = function() {\n        if ( _isEnabled() === true ) {\n            return;\n        }\n\n        KTEventHandler.trigger(the.element, 'kt.toggle.enable', the);\n\n        the.target.setAttribute(the.attribute, 'on');\n\n        if (the.state.length > 0) {\n            the.element.classList.add(the.state);\n        }        \n\n        if ( typeof KTCookie !== 'undefined' && the.options.saveState === true ) {\n            KTCookie.set(the.attribute, 'on');\n        }\n\n        KTEventHandler.trigger(the.element, 'kt.toggle.enabled', the);\n\n        return the;\n    }\n\n    var _disable = function() {\n        if ( _isEnabled() === false ) {\n            return;\n        }\n\n        KTEventHandler.trigger(the.element, 'kt.toggle.disable', the);\n\n        the.target.removeAttribute(the.attribute);\n\n        if (the.state.length > 0) {\n            the.element.classList.remove(the.state);\n        } \n\n        if ( typeof KTCookie !== 'undefined' && the.options.saveState === true ) {\n            KTCookie.remove(the.attribute);\n        }\n\n        KTEventHandler.trigger(the.element, 'kt.toggle.disabled', the);\n\n        return the;\n    }\n\n    var _isEnabled = function() {\n        return (String(the.target.getAttribute(the.attribute)).toLowerCase() === 'on');\n    }\n\n    var _destroy = function() {\n        KTUtil.data(the.element).remove('toggle');\n    }\n\n    // Construct class\n    _construct();\n\n    ///////////////////////\n    // ** Public API  ** //\n    ///////////////////////\n\n    // Plugin API\n    the.toggle = function() {\n        return _toggle();\n    }\n\n    the.enable = function() {\n        return _enable();\n    }\n\n    the.disable = function() {\n        return _disable();\n    }\n\n    the.isEnabled = function() {\n        return _isEnabled();\n    }\n\n    the.goElement = function() {\n        return the.element;\n    }\n\n    the.destroy = function() {\n        return _destroy();\n    }\n\n    // Event API\n    the.on = function(name, handler) {\n        return KTEventHandler.on(the.element, name, handler);\n    }\n\n    the.one = function(name, handler) {\n        return KTEventHandler.one(the.element, name, handler);\n    }\n\n    the.off = function(name, handlerId) {\n        return KTEventHandler.off(the.element, name, handlerId);\n    }\n\n    the.trigger = function(name, event) {\n        return KTEventHandler.trigger(the.element, name, event, the, event);\n    }\n};\n\n// Static methods\nKTToggle.getInstance = function(element) {\n    if ( element !== null && KTUtil.data(element).has('toggle') ) {\n        return KTUtil.data(element).get('toggle');\n    } else {\n        return null;\n    }\n}\n\n// Create instances\nKTToggle.createInstances = function(selector = '[data-kt-toggle]') {\n    // Get instances\n    var elements = document.body.querySelectorAll(selector);\n\n    if ( elements && elements.length > 0 ) {\n        for (var i = 0, len = elements.length; i < len; i++) {\n            // Initialize instances\n            new KTToggle(elements[i]);\n        }\n    }\n}\n\n// Global initialization\nKTToggle.init = function() {\n    KTToggle.createInstances();\n};\n\n// Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTToggle;\n}","\"use strict\";\n\n/**\n * @class KTUtil  base utilize class that privides helper functions\n */\n\n// Polyfills\n\n// Element.matches() polyfill\nif (!Element.prototype.matches) {\n    Element.prototype.matches = function(s) {\n        var matches = (this.document || this.ownerDocument).querySelectorAll(s),\n            i = matches.length;\n        while (--i >= 0 && matches.item(i) !== this) {}\n        return i > -1;\n    };\n}\n\n/**\n * Element.closest() polyfill\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\n */\nif (!Element.prototype.closest) {\n\tElement.prototype.closest = function (s) {\n\t\tvar el = this;\n\t\tvar ancestor = this;\n\t\tif (!document.documentElement.contains(el)) return null;\n\t\tdo {\n\t\t\tif (ancestor.matches(s)) return ancestor;\n\t\t\tancestor = ancestor.parentElement;\n\t\t} while (ancestor !== null);\n\t\treturn null;\n\t};\n}\n\n/**\n * ChildNode.remove() polyfill\n * https://gomakethings.com/removing-an-element-from-the-dom-the-es6-way/\n * @author Chris Ferdinandi\n * @license MIT\n */\n(function (elem) {\n\tfor (var i = 0; i < elem.length; i++) {\n\t\tif (!window[elem[i]] || 'remove' in window[elem[i]].prototype) continue;\n\t\twindow[elem[i]].prototype.remove = function () {\n\t\t\tthis.parentNode.removeChild(this);\n\t\t};\n\t}\n})(['Element', 'CharacterData', 'DocumentType']);\n\n\n//\n// requestAnimationFrame polyfill by Erik Möller.\n//  With fixes from Paul Irish and Tino Zijdel\n//\n//  http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n//  http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n//\n//  MIT license\n//\n(function() {\n    var lastTime = 0;\n    var vendors = ['webkit', 'moz'];\n    for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n        window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n        window.cancelAnimationFrame =\n            window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n    }\n\n    if (!window.requestAnimationFrame)\n        window.requestAnimationFrame = function(callback) {\n            var currTime = new Date().getTime();\n            var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n            var id = window.setTimeout(function() {\n                callback(currTime + timeToCall);\n            }, timeToCall);\n            lastTime = currTime + timeToCall;\n            return id;\n        };\n\n    if (!window.cancelAnimationFrame)\n        window.cancelAnimationFrame = function(id) {\n            clearTimeout(id);\n        };\n}());\n\n// Source: https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/prepend()/prepend().md\n(function(arr) {\n    arr.forEach(function(item) {\n        if (item.hasOwnProperty('prepend')) {\n            return;\n        }\n        Object.defineProperty(item, 'prepend', {\n            configurable: true,\n            enumerable: true,\n            writable: true,\n            value: function prepend() {\n                var argArr = Array.prototype.slice.call(arguments),\n                    docFrag = document.createDocumentFragment();\n\n                argArr.forEach(function(argItem) {\n                    var isNode = argItem instanceof Node;\n                    docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem)));\n                });\n\n                this.insertBefore(docFrag, this.firstChild);\n            }\n        });\n    });\n})([Element.prototype, Document.prototype, DocumentFragment.prototype]);\n\n// getAttributeNames\nif (Element.prototype.getAttributeNames == undefined) {\n  Element.prototype.getAttributeNames = function () {\n    var attributes = this.attributes;\n    var length = attributes.length;\n    var result = new Array(length);\n    for (var i = 0; i < length; i++) {\n      result[i] = attributes[i].name;\n    }\n    return result;\n  };\n}\n\n// Global variables\nwindow.KTUtilElementDataStore = {};\nwindow.KTUtilElementDataStoreID = 0;\nwindow.KTUtilDelegatedEventHandlers = {};\n\nvar KTUtil = function() {\n    var resizeHandlers = [];\n\n    /**\n     * Handle window resize event with some\n     * delay to attach event handlers upon resize complete\n     */\n    var _windowResizeHandler = function() {\n        var _runResizeHandlers = function() {\n            // reinitialize other subscribed elements\n            for (var i = 0; i < resizeHandlers.length; i++) {\n                var each = resizeHandlers[i];\n                each.call();\n            }\n        };\n\n        var timer;\n\n        window.addEventListener('resize', function() {\n            KTUtil.throttle(timer, function() {\n                _runResizeHandlers();\n            }, 200);\n        });\n    };\n\n    return {\n        /**\n         * Class main initializer.\n         * @param {object} settings.\n         * @returns null\n         */\n        //main function to initiate the theme\n        init: function(settings) {\n            _windowResizeHandler();\n        },\n\n        /**\n         * Adds window resize event handler.\n         * @param {function} callback function.\n         */\n        addResizeHandler: function(callback) {\n            resizeHandlers.push(callback);\n        },\n\n        /**\n         * Removes window resize event handler.\n         * @param {function} callback function.\n         */\n        removeResizeHandler: function(callback) {\n            for (var i = 0; i < resizeHandlers.length; i++) {\n                if (callback === resizeHandlers[i]) {\n                    delete resizeHandlers[i];\n                }\n            }\n        },\n\n        /**\n         * Trigger window resize handlers.\n         */\n        runResizeHandlers: function() {\n            _runResizeHandlers();\n        },\n\n        resize: function() {\n            if (typeof(Event) === 'function') {\n                // modern browsers\n                window.dispatchEvent(new Event('resize'));\n            } else {\n                // for IE and other old browsers\n                // causes deprecation warning on modern browsers\n                var evt = window.document.createEvent('UIEvents');\n                evt.initUIEvent('resize', true, false, window, 0);\n                window.dispatchEvent(evt);\n            }\n        },\n\n        /**\n         * Get GET parameter value from URL.\n         * @param {string} paramName Parameter name.\n         * @returns {string}\n         */\n        getURLParam: function(paramName) {\n            var searchString = window.location.search.substring(1),\n                i, val, params = searchString.split(\"&\");\n\n            for (i = 0; i < params.length; i++) {\n                val = params[i].split(\"=\");\n                if (val[0] == paramName) {\n                    return unescape(val[1]);\n                }\n            }\n\n            return null;\n        },\n\n        /**\n         * Checks whether current device is mobile touch.\n         * @returns {boolean}\n         */\n        isMobileDevice: function() {\n            var test = (this.getViewPort().width < this.getBreakpoint('lg') ? true : false);\n\n            if (test === false) {\n                // For use within normal web clients\n                test = navigator.userAgent.match(/iPad/i) != null;\n            }\n\n            return test;\n        },\n\n        /**\n         * Checks whether current device is desktop.\n         * @returns {boolean}\n         */\n        isDesktopDevice: function() {\n            return KTUtil.isMobileDevice() ? false : true;\n        },\n\n        /**\n         * Gets browser window viewport size. Ref:\n         * http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/\n         * @returns {object}\n         */\n        getViewPort: function() {\n            var e = window,\n                a = 'inner';\n            if (!('innerWidth' in window)) {\n                a = 'client';\n                e = document.documentElement || document.body;\n            }\n\n            return {\n                width: e[a + 'Width'],\n                height: e[a + 'Height']\n            };\n        },\n\n\t\t/**\n         * Checks whether given device mode is currently activated.\n         * @param {string} mode Responsive mode name(e.g: desktop,\n         *     desktop-and-tablet, tablet, tablet-and-mobile, mobile)\n         * @returns {boolean}\n         */\n        isBreakpointUp: function(mode) {\n            var width = this.getViewPort().width;\n\t\t\tvar breakpoint = this.getBreakpoint(mode);\n\n\t\t\treturn (width >= breakpoint);\n        },\n\n\t\tisBreakpointDown: function(mode) {\n            var width = this.getViewPort().width;\n\t\t\tvar breakpoint = this.getBreakpoint(mode);\n\n\t\t\treturn (width < breakpoint);\n        },\n\n        getViewportWidth: function() {\n            return this.getViewPort().width;\n        },\n\n        /**\n         * Generates unique ID for give prefix.\n         * @param {string} prefix Prefix for generated ID\n         * @returns {boolean}\n         */\n        getUniqueId: function(prefix) {\n            return prefix + Math.floor(Math.random() * (new Date()).getTime());\n        },\n\n        /**\n         * Gets window width for give breakpoint mode.\n         * @param {string} mode Responsive mode name(e.g: xl, lg, md, sm)\n         * @returns {number}\n         */\n        getBreakpoint: function(breakpoint) {\n            var value = this.getCssVariableValue('--bs-' + breakpoint);\n\n            if ( value ) {\n                value = parseInt(value.trim());\n            } \n\n            return value;\n        },\n\n        /**\n         * Checks whether object has property matchs given key path.\n         * @param {object} obj Object contains values paired with given key path\n         * @param {string} keys Keys path seperated with dots\n         * @returns {object}\n         */\n        isset: function(obj, keys) {\n            var stone;\n\n            keys = keys || '';\n\n            if (keys.indexOf('[') !== -1) {\n                throw new Error('Unsupported object path notation.');\n            }\n\n            keys = keys.split('.');\n\n            do {\n                if (obj === undefined) {\n                    return false;\n                }\n\n                stone = keys.shift();\n\n                if (!obj.hasOwnProperty(stone)) {\n                    return false;\n                }\n\n                obj = obj[stone];\n\n            } while (keys.length);\n\n            return true;\n        },\n\n        /**\n         * Gets highest z-index of the given element parents\n         * @param {object} el jQuery element object\n         * @returns {number}\n         */\n        getHighestZindex: function(el) {\n            var position, value;\n\n            while (el && el !== document) {\n                // Ignore z-index if position is set to a value where z-index is ignored by the browser\n                // This makes behavior of this function consistent across browsers\n                // WebKit always returns auto if the element is positioned\n                position = KTUtil.css(el, 'position');\n\n                if (position === \"absolute\" || position === \"relative\" || position === \"fixed\") {\n                    // IE returns 0 when zIndex is not specified\n                    // other browsers return a string\n                    // we ignore the case of nested elements with an explicit value of 0\n                    // <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n                    value = parseInt(KTUtil.css(el, 'z-index'));\n\n                    if (!isNaN(value) && value !== 0) {\n                        return value;\n                    }\n                }\n\n                el = el.parentNode;\n            }\n\n            return 1;\n        },\n\n        /**\n         * Checks whether the element has any parent with fixed positionfreg\n         * @param {object} el jQuery element object\n         * @returns {boolean}\n         */\n        hasFixedPositionedParent: function(el) {\n            var position;\n\n            while (el && el !== document) {\n                position = KTUtil.css(el, 'position');\n\n                if (position === \"fixed\") {\n                    return true;\n                }\n\n                el = el.parentNode;\n            }\n\n            return false;\n        },\n\n        /**\n         * Simulates delay\n         */\n        sleep: function(milliseconds) {\n            var start = new Date().getTime();\n            for (var i = 0; i < 1e7; i++) {\n                if ((new Date().getTime() - start) > milliseconds) {\n                    break;\n                }\n            }\n        },\n\n        /**\n         * Gets randomly generated integer value within given min and max range\n         * @param {number} min Range start value\n         * @param {number} max Range end value\n         * @returns {number}\n         */\n        getRandomInt: function(min, max) {\n            return Math.floor(Math.random() * (max - min + 1)) + min;\n        },\n\n        /**\n         * Checks whether Angular library is included\n         * @returns {boolean}\n         */\n        isAngularVersion: function() {\n            return window.Zone !== undefined ? true : false;\n        },\n\n        // Deep extend:  $.extend(true, {}, objA, objB);\n        deepExtend: function(out) {\n            out = out || {};\n\n            for (var i = 1; i < arguments.length; i++) {\n                var obj = arguments[i];\n                if (!obj) continue;\n\n                for (var key in obj) {\n                    if (!obj.hasOwnProperty(key)) {\n                        continue;\n                    }\n\n                    // based on https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n                    if ( Object.prototype.toString.call(obj[key]) === '[object Object]' ) {\n                        out[key] = KTUtil.deepExtend(out[key], obj[key]);\n                        continue;\n                    }\n\n                    out[key] = obj[key];\n                }\n            }\n\n            return out;\n        },\n\n        // extend:  $.extend({}, objA, objB);\n        extend: function(out) {\n            out = out || {};\n\n            for (var i = 1; i < arguments.length; i++) {\n                if (!arguments[i])\n                    continue;\n\n                for (var key in arguments[i]) {\n                    if (arguments[i].hasOwnProperty(key))\n                        out[key] = arguments[i][key];\n                }\n            }\n\n            return out;\n        },\n\n        getBody: function() {\n            return document.getElementsByTagName('body')[0];\n        },\n\n        /**\n         * Checks whether the element has given classes\n         * @param {object} el jQuery element object\n         * @param {string} Classes string\n         * @returns {boolean}\n         */\n        hasClasses: function(el, classes) {\n            if (!el) {\n                return;\n            }\n\n            var classesArr = classes.split(\" \");\n\n            for (var i = 0; i < classesArr.length; i++) {\n                if (KTUtil.hasClass(el, KTUtil.trim(classesArr[i])) == false) {\n                    return false;\n                }\n            }\n\n            return true;\n        },\n\n        hasClass: function(el, className) {\n            if (!el) {\n                return;\n            }\n\n            return el.classList ? el.classList.contains(className) : new RegExp('\\\\b' + className + '\\\\b').test(el.className);\n        },\n\n        addClass: function(el, className) {\n            if (!el || typeof className === 'undefined') {\n                return;\n            }\n\n            var classNames = className.split(' ');\n\n            if (el.classList) {\n                for (var i = 0; i < classNames.length; i++) {\n                    if (classNames[i] && classNames[i].length > 0) {\n                        el.classList.add(KTUtil.trim(classNames[i]));\n                    }\n                }\n            } else if (!KTUtil.hasClass(el, className)) {\n                for (var x = 0; x < classNames.length; x++) {\n                    el.className += ' ' + KTUtil.trim(classNames[x]);\n                }\n            }\n        },\n\n        removeClass: function(el, className) {\n          if (!el || typeof className === 'undefined') {\n                return;\n            }\n\n            var classNames = className.split(' ');\n\n            if (el.classList) {\n                for (var i = 0; i < classNames.length; i++) {\n                    el.classList.remove(KTUtil.trim(classNames[i]));\n                }\n            } else if (KTUtil.hasClass(el, className)) {\n                for (var x = 0; x < classNames.length; x++) {\n                    el.className = el.className.replace(new RegExp('\\\\b' + KTUtil.trim(classNames[x]) + '\\\\b', 'g'), '');\n                }\n            }\n        },\n\n        triggerCustomEvent: function(el, eventName, data) {\n            var event;\n            if (window.CustomEvent) {\n                event = new CustomEvent(eventName, {\n                    detail: data\n                });\n            } else {\n                event = document.createEvent('CustomEvent');\n                event.initCustomEvent(eventName, true, true, data);\n            }\n\n            el.dispatchEvent(event);\n        },\n\n        triggerEvent: function(node, eventName) {\n            // Make sure we use the ownerDocument from the provided node to avoid cross-window problems\n            var doc;\n\n            if (node.ownerDocument) {\n                doc = node.ownerDocument;\n            } else if (node.nodeType == 9) {\n                // the node may be the document itself, nodeType 9 = DOCUMENT_NODE\n                doc = node;\n            } else {\n                throw new Error(\"Invalid node passed to fireEvent: \" + node.id);\n            }\n\n            if (node.dispatchEvent) {\n                // Gecko-style approach (now the standard) takes more work\n                var eventClass = \"\";\n\n                // Different events have different event classes.\n                // If this switch statement can't map an eventName to an eventClass,\n                // the event firing is going to fail.\n                switch (eventName) {\n                case \"click\": // Dispatching of 'click' appears to not work correctly in Safari. Use 'mousedown' or 'mouseup' instead.\n                case \"mouseenter\":\n                case \"mouseleave\":\n                case \"mousedown\":\n                case \"mouseup\":\n                    eventClass = \"MouseEvents\";\n                    break;\n\n                case \"focus\":\n                case \"change\":\n                case \"blur\":\n                case \"select\":\n                    eventClass = \"HTMLEvents\";\n                    break;\n\n                default:\n                    throw \"fireEvent: Couldn't find an event class for event '\" + eventName + \"'.\";\n                    break;\n                }\n                var event = doc.createEvent(eventClass);\n\n                var bubbles = eventName == \"change\" ? false : true;\n                event.initEvent(eventName, bubbles, true); // All events created as bubbling and cancelable.\n\n                event.synthetic = true; // allow detection of synthetic events\n                // The second parameter says go ahead with the default action\n                node.dispatchEvent(event, true);\n            } else if (node.fireEvent) {\n                // IE-old school style\n                var event = doc.createEventObject();\n                event.synthetic = true; // allow detection of synthetic events\n                node.fireEvent(\"on\" + eventName, event);\n            }\n        },\n\n        index: function( el ){\n            var c = el.parentNode.children, i = 0;\n            for(; i < c.length; i++ )\n                if( c[i] == el ) return i;\n        },\n\n        trim: function(string) {\n            return string.trim();\n        },\n\n        eventTriggered: function(e) {\n            if (e.currentTarget.dataset.triggered) {\n                return true;\n            } else {\n                e.currentTarget.dataset.triggered = true;\n\n                return false;\n            }\n        },\n\n        remove: function(el) {\n            if (el && el.parentNode) {\n                el.parentNode.removeChild(el);\n            }\n        },\n\n        find: function(parent, query) {\n            if ( parent !== null) {\n                return parent.querySelector(query);\n            } else {\n                return null;\n            }\n        },\n\n        findAll: function(parent, query) {\n            if ( parent !== null ) {\n                return parent.querySelectorAll(query);\n            } else {\n                return null;\n            }\n        },\n\n        insertAfter: function(el, referenceNode) {\n            return referenceNode.parentNode.insertBefore(el, referenceNode.nextSibling);\n        },\n\n        parents: function(elem, selector) {\n            // Set up a parent array\n            var parents = [];\n\n            // Push each parent element to the array\n            for ( ; elem && elem !== document; elem = elem.parentNode ) {\n                if (selector) {\n                    if (elem.matches(selector)) {\n                        parents.push(elem);\n                    }\n                    continue;\n                }\n                parents.push(elem);\n            }\n\n            // Return our parent array\n            return parents;\n        },\n\n        children: function(el, selector, log) {\n            if (!el || !el.childNodes) {\n                return null;\n            }\n\n            var result = [],\n                i = 0,\n                l = el.childNodes.length;\n\n            for (var i; i < l; ++i) {\n                if (el.childNodes[i].nodeType == 1 && KTUtil.matches(el.childNodes[i], selector, log)) {\n                    result.push(el.childNodes[i]);\n                }\n            }\n\n            return result;\n        },\n\n        child: function(el, selector, log) {\n            var children = KTUtil.children(el, selector, log);\n\n            return children ? children[0] : null;\n        },\n\n        matches: function(el, selector, log) {\n            var p = Element.prototype;\n            var f = p.matches || p.webkitMatchesSelector || p.mozMatchesSelector || p.msMatchesSelector || function(s) {\n                return [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n            };\n\n            if (el && el.tagName) {\n                return f.call(el, selector);\n            } else {\n                return false;\n            }\n        },\n\n        data: function(el) {\n            return {\n                set: function(name, data) {\n                    if (!el) {\n                        return;\n                    }\n\n                    if (el.customDataTag === undefined) {\n                        window.KTUtilElementDataStoreID++;\n                        el.customDataTag = window.KTUtilElementDataStoreID;\n                    }\n\n                    if (window.KTUtilElementDataStore[el.customDataTag] === undefined) {\n                        window.KTUtilElementDataStore[el.customDataTag] = {};\n                    }\n\n                    window.KTUtilElementDataStore[el.customDataTag][name] = data;\n                },\n\n                get: function(name) {\n                    if (!el) {\n                        return;\n                    }\n\n                    if (el.customDataTag === undefined) {\n                        return null;\n                    }\n\n                    return this.has(name) ? window.KTUtilElementDataStore[el.customDataTag][name] : null;\n                },\n\n                has: function(name) {\n                    if (!el) {\n                        return false;\n                    }\n\n                    if (el.customDataTag === undefined) {\n                        return false;\n                    }\n\n                    return (window.KTUtilElementDataStore[el.customDataTag] && window.KTUtilElementDataStore[el.customDataTag][name]) ? true : false;\n                },\n\n                remove: function(name) {\n                    if (el && this.has(name)) {\n                        delete window.KTUtilElementDataStore[el.customDataTag][name];\n                    }\n                }\n            };\n        },\n\n        outerWidth: function(el, margin) {\n            var width;\n\n            if (margin === true) {\n                width = parseFloat(el.offsetWidth);\n                width += parseFloat(KTUtil.css(el, 'margin-left')) + parseFloat(KTUtil.css(el, 'margin-right'));\n\n                return parseFloat(width);\n            } else {\n                width = parseFloat(el.offsetWidth);\n\n                return width;\n            }\n        },\n\n        offset: function(el) {\n            var rect, win;\n\n            if ( !el ) {\n                return;\n            }\n\n            // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n            // Support: IE <=11 only\n            // Running getBoundingClientRect on a\n            // disconnected node in IE throws an error\n\n            if ( !el.getClientRects().length ) {\n                return { top: 0, left: 0 };\n            }\n\n            // Get document-relative position by adding viewport scroll to viewport-relative gBCR\n            rect = el.getBoundingClientRect();\n            win = el.ownerDocument.defaultView;\n\n            return {\n                top: rect.top + win.pageYOffset,\n                left: rect.left + win.pageXOffset,\n                right: window.innerWidth - (el.offsetLeft + el.offsetWidth)\n            };\n        },\n\n        height: function(el) {\n            return KTUtil.css(el, 'height');\n        },\n\n        outerHeight: function(el, withMargin) {\n            var height = el.offsetHeight;\n            var style;\n\n            if (typeof withMargin !== 'undefined' && withMargin === true) {\n                style = getComputedStyle(el);\n                height += parseInt(style.marginTop) + parseInt(style.marginBottom);\n\n                return height;\n            } else {\n                return height;\n            }\n        },\n\n        visible: function(el) {\n            return !(el.offsetWidth === 0 && el.offsetHeight === 0);\n        },\n\n        isVisibleInContainer: function (el, container, offset = 0) {\n            const eleTop = el.offsetTop;\n            const eleBottom = eleTop + el.clientHeight + offset;\n            const containerTop = container.scrollTop;\n            const containerBottom = containerTop + container.clientHeight;\n        \n            // The element is fully visible in the container\n            return (\n                (eleTop >= containerTop && eleBottom <= containerBottom)\n            );\n        },\n\n        getRelativeTopPosition: function (el, container) {\n            return el.offsetTop - container.offsetTop;\n        },\n\n        attr: function(el, name, value) {\n            if (el == undefined) {\n                return;\n            }\n\n            if (value !== undefined) {\n                el.setAttribute(name, value);\n            } else {\n                return el.getAttribute(name);\n            }\n        },\n\n        hasAttr: function(el, name) {\n            if (el == undefined) {\n                return;\n            }\n\n            return el.getAttribute(name) ? true : false;\n        },\n\n        removeAttr: function(el, name) {\n            if (el == undefined) {\n                return;\n            }\n\n            el.removeAttribute(name);\n        },\n\n        animate: function(from, to, duration, update, easing, done) {\n            /**\n             * TinyAnimate.easings\n             *  Adapted from jQuery Easing\n             */\n            var easings = {};\n            var easing;\n\n            easings.linear = function(t, b, c, d) {\n                return c * t / d + b;\n            };\n\n            easing = easings.linear;\n\n            // Early bail out if called incorrectly\n            if (typeof from !== 'number' ||\n                typeof to !== 'number' ||\n                typeof duration !== 'number' ||\n                typeof update !== 'function') {\n                return;\n            }\n\n            // Create mock done() function if necessary\n            if (typeof done !== 'function') {\n                done = function() {};\n            }\n\n            // Pick implementation (requestAnimationFrame | setTimeout)\n            var rAF = window.requestAnimationFrame || function(callback) {\n                window.setTimeout(callback, 1000 / 50);\n            };\n\n            // Animation loop\n            var canceled = false;\n            var change = to - from;\n\n            function loop(timestamp) {\n                var time = (timestamp || +new Date()) - start;\n\n                if (time >= 0) {\n                    update(easing(time, from, change, duration));\n                }\n                if (time >= 0 && time >= duration) {\n                    update(to);\n                    done();\n                } else {\n                    rAF(loop);\n                }\n            }\n\n            update(from);\n\n            // Start animation loop\n            var start = window.performance && window.performance.now ? window.performance.now() : +new Date();\n\n            rAF(loop);\n        },\n\n        actualCss: function(el, prop, cache) {\n            var css = '';\n\n            if (el instanceof HTMLElement === false) {\n                return;\n            }\n\n            if (!el.getAttribute('kt-hidden-' + prop) || cache === false) {\n                var value;\n\n                // the element is hidden so:\n                // making the el block so we can meassure its height but still be hidden\n                css = el.style.cssText;\n                el.style.cssText = 'position: absolute; visibility: hidden; display: block;';\n\n                if (prop == 'width') {\n                    value = el.offsetWidth;\n                } else if (prop == 'height') {\n                    value = el.offsetHeight;\n                }\n\n                el.style.cssText = css;\n\n                // store it in cache\n                el.setAttribute('kt-hidden-' + prop, value);\n\n                return parseFloat(value);\n            } else {\n                // store it in cache\n                return parseFloat(el.getAttribute('kt-hidden-' + prop));\n            }\n        },\n\n        actualHeight: function(el, cache) {\n            return KTUtil.actualCss(el, 'height', cache);\n        },\n\n        actualWidth: function(el, cache) {\n            return KTUtil.actualCss(el, 'width', cache);\n        },\n\n        getScroll: function(element, method) {\n            // The passed in `method` value should be 'Top' or 'Left'\n            method = 'scroll' + method;\n            return (element == window || element == document) ? (\n                self[(method == 'scrollTop') ? 'pageYOffset' : 'pageXOffset'] ||\n                (browserSupportsBoxModel && document.documentElement[method]) ||\n                document.body[method]\n            ) : element[method];\n        },\n\n        css: function(el, styleProp, value, important) {\n            if (!el) {\n                return;\n            }\n\n            if (value !== undefined) {\n                if ( important === true ) {\n                    el.style.setProperty(styleProp, value, 'important');\n                } else {\n                    el.style[styleProp] = value;\n                }\n            } else {\n                var defaultView = (el.ownerDocument || document).defaultView;\n\n                // W3C standard way:\n                if (defaultView && defaultView.getComputedStyle) {\n                    // sanitize property name to css notation\n                    // (hyphen separated words eg. font-Size)\n                    styleProp = styleProp.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n\n                    return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);\n                } else if (el.currentStyle) { // IE\n                    // sanitize property name to camelCase\n                    styleProp = styleProp.replace(/\\-(\\w)/g, function(str, letter) {\n                        return letter.toUpperCase();\n                    });\n\n                    value = el.currentStyle[styleProp];\n\n                    // convert other units to pixels on IE\n                    if (/^\\d+(em|pt|%|ex)?$/i.test(value)) {\n                        return (function(value) {\n                            var oldLeft = el.style.left, oldRsLeft = el.runtimeStyle.left;\n\n                            el.runtimeStyle.left = el.currentStyle.left;\n                            el.style.left = value || 0;\n                            value = el.style.pixelLeft + \"px\";\n                            el.style.left = oldLeft;\n                            el.runtimeStyle.left = oldRsLeft;\n\n                            return value;\n                        })(value);\n                    }\n\n                    return value;\n                }\n            }\n        },\n\n        slide: function(el, dir, speed, callback, recalcMaxHeight) {\n            if (!el || (dir == 'up' && KTUtil.visible(el) === false) || (dir == 'down' && KTUtil.visible(el) === true)) {\n                return;\n            }\n\n            speed = (speed ? speed : 600);\n            var calcHeight = KTUtil.actualHeight(el);\n            var calcPaddingTop = false;\n            var calcPaddingBottom = false;\n\n            if (KTUtil.css(el, 'padding-top') && KTUtil.data(el).has('slide-padding-top') !== true) {\n                KTUtil.data(el).set('slide-padding-top', KTUtil.css(el, 'padding-top'));\n            }\n\n            if (KTUtil.css(el, 'padding-bottom') && KTUtil.data(el).has('slide-padding-bottom') !== true) {\n                KTUtil.data(el).set('slide-padding-bottom', KTUtil.css(el, 'padding-bottom'));\n            }\n\n            if (KTUtil.data(el).has('slide-padding-top')) {\n                calcPaddingTop = parseInt(KTUtil.data(el).get('slide-padding-top'));\n            }\n\n            if (KTUtil.data(el).has('slide-padding-bottom')) {\n                calcPaddingBottom = parseInt(KTUtil.data(el).get('slide-padding-bottom'));\n            }\n\n            if (dir == 'up') { // up\n                el.style.cssText = 'display: block; overflow: hidden;';\n\n                if (calcPaddingTop) {\n                    KTUtil.animate(0, calcPaddingTop, speed, function(value) {\n                        el.style.paddingTop = (calcPaddingTop - value) + 'px';\n                    }, 'linear');\n                }\n\n                if (calcPaddingBottom) {\n                    KTUtil.animate(0, calcPaddingBottom, speed, function(value) {\n                        el.style.paddingBottom = (calcPaddingBottom - value) + 'px';\n                    }, 'linear');\n                }\n\n                KTUtil.animate(0, calcHeight, speed, function(value) {\n                    el.style.height = (calcHeight - value) + 'px';\n                }, 'linear', function() {\n                    el.style.height = '';\n                    el.style.display = 'none';\n\n                    if (typeof callback === 'function') {\n                        callback();\n                    }\n                });\n\n\n            } else if (dir == 'down') { // down\n                el.style.cssText = 'display: block; overflow: hidden;';\n\n                if (calcPaddingTop) {\n                    KTUtil.animate(0, calcPaddingTop, speed, function(value) {//\n                        el.style.paddingTop = value + 'px';\n                    }, 'linear', function() {\n                        el.style.paddingTop = '';\n                    });\n                }\n\n                if (calcPaddingBottom) {\n                    KTUtil.animate(0, calcPaddingBottom, speed, function(value) {\n                        el.style.paddingBottom = value + 'px';\n                    }, 'linear', function() {\n                        el.style.paddingBottom = '';\n                    });\n                }\n\n                KTUtil.animate(0, calcHeight, speed, function(value) {\n                    el.style.height = value + 'px';\n                }, 'linear', function() {\n                    el.style.height = '';\n                    el.style.display = '';\n                    el.style.overflow = '';\n\n                    if (typeof callback === 'function') {\n                        callback();\n                    }\n                });\n            }\n        },\n\n        slideUp: function(el, speed, callback) {\n            KTUtil.slide(el, 'up', speed, callback);\n        },\n\n        slideDown: function(el, speed, callback) {\n            KTUtil.slide(el, 'down', speed, callback);\n        },\n\n        show: function(el, display) {\n            if (typeof el !== 'undefined') {\n                el.style.display = (display ? display : 'block');\n            }\n        },\n\n        hide: function(el) {\n            if (typeof el !== 'undefined') {\n                el.style.display = 'none';\n            }\n        },\n\n        addEvent: function(el, type, handler, one) {\n            if (typeof el !== 'undefined' && el !== null) {\n                el.addEventListener(type, handler);\n            }\n        },\n\n        removeEvent: function(el, type, handler) {\n            if (el !== null) {\n                el.removeEventListener(type, handler);\n            }\n        },\n\n        on: function(element, selector, event, handler) {\n            if ( element === null ) {\n                return;\n            }\n\n            var eventId = KTUtil.getUniqueId('event');\n\n            window.KTUtilDelegatedEventHandlers[eventId] = function(e) {\n                var targets = element.querySelectorAll(selector);\n                var target = e.target;\n\n                while ( target && target !== element ) {\n                    for ( var i = 0, j = targets.length; i < j; i++ ) {\n                        if ( target === targets[i] ) {\n                            handler.call(target, e);\n                        }\n                    }\n\n                    target = target.parentNode;\n                }\n            }\n\n            KTUtil.addEvent(element, event, window.KTUtilDelegatedEventHandlers[eventId]);\n\n            return eventId;\n        },\n\n        off: function(element, event, eventId) {\n            if (!element || !window.KTUtilDelegatedEventHandlers[eventId]) {\n                return;\n            }\n\n            KTUtil.removeEvent(element, event, window.KTUtilDelegatedEventHandlers[eventId]);\n\n            delete window.KTUtilDelegatedEventHandlers[eventId];\n        },\n\n        one: function onetime(el, type, callback) {\n            el.addEventListener(type, function callee(e) {\n                // remove event\n                if (e.target && e.target.removeEventListener) {\n                    e.target.removeEventListener(e.type, callee);\n                }\n\n                // need to verify from https://themeforest.net/author_dashboard#comment_23615588\n                if (el && el.removeEventListener) {\n\t\t\t\t    e.currentTarget.removeEventListener(e.type, callee);\n\t\t\t    }\n\n                // call handler\n                return callback(e);\n            });\n        },\n\n        hash: function(str) {\n            var hash = 0,\n                i, chr;\n\n            if (str.length === 0) return hash;\n            for (i = 0; i < str.length; i++) {\n                chr = str.charCodeAt(i);\n                hash = ((hash << 5) - hash) + chr;\n                hash |= 0; // Convert to 32bit integer\n            }\n\n            return hash;\n        },\n\n        animateClass: function(el, animationName, callback) {\n            var animation;\n            var animations = {\n                animation: 'animationend',\n                OAnimation: 'oAnimationEnd',\n                MozAnimation: 'mozAnimationEnd',\n                WebkitAnimation: 'webkitAnimationEnd',\n                msAnimation: 'msAnimationEnd',\n            };\n\n            for (var t in animations) {\n                if (el.style[t] !== undefined) {\n                    animation = animations[t];\n                }\n            }\n            \n            KTUtil.addClass(el, animationName);\n\n            KTUtil.one(el, animation, function() {\n                KTUtil.removeClass(el, animationName);\n            });\n\n            if (callback) {\n                KTUtil.one(el, animation, callback);\n            }\n        },\n\n        transitionEnd: function(el, callback) {\n            var transition;\n            var transitions = {\n                transition: 'transitionend',\n                OTransition: 'oTransitionEnd',\n                MozTransition: 'mozTransitionEnd',\n                WebkitTransition: 'webkitTransitionEnd',\n                msTransition: 'msTransitionEnd'\n            };\n\n            for (var t in transitions) {\n                if (el.style[t] !== undefined) {\n                    transition = transitions[t];\n                }\n            }\n\n            KTUtil.one(el, transition, callback);\n        },\n\n        animationEnd: function(el, callback) {\n            var animation;\n            var animations = {\n                animation: 'animationend',\n                OAnimation: 'oAnimationEnd',\n                MozAnimation: 'mozAnimationEnd',\n                WebkitAnimation: 'webkitAnimationEnd',\n                msAnimation: 'msAnimationEnd'\n            };\n\n            for (var t in animations) {\n                if (el.style[t] !== undefined) {\n                    animation = animations[t];\n                }\n            }\n\n            KTUtil.one(el, animation, callback);\n        },\n\n        animateDelay: function(el, value) {\n            var vendors = ['webkit-', 'moz-', 'ms-', 'o-', ''];\n            for (var i = 0; i < vendors.length; i++) {\n                KTUtil.css(el, vendors[i] + 'animation-delay', value);\n            }\n        },\n\n        animateDuration: function(el, value) {\n            var vendors = ['webkit-', 'moz-', 'ms-', 'o-', ''];\n            for (var i = 0; i < vendors.length; i++) {\n                KTUtil.css(el, vendors[i] + 'animation-duration', value);\n            }\n        },\n\n        scrollTo: function(target, offset, duration) {\n            var duration = duration ? duration : 500;\n            var targetPos = target ? KTUtil.offset(target).top : 0;\n            var scrollPos = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n            var from, to;\n\n            if (offset) {\n                targetPos = targetPos - offset;\n            }\n\n            from = scrollPos;\n            to = targetPos;\n\n            KTUtil.animate(from, to, duration, function(value) {\n                document.documentElement.scrollTop = value;\n                document.body.parentNode.scrollTop = value;\n                document.body.scrollTop = value;\n            }); //, easing, done\n        },\n\n        scrollTop: function(offset, duration) {\n            KTUtil.scrollTo(null, offset, duration);\n        },\n\n        isArray: function(obj) {\n            return obj && Array.isArray(obj);\n        },\n\n        isEmpty: function(obj) {\n            for (var prop in obj) {\n                if (obj.hasOwnProperty(prop)) {\n                    return false;\n                }\n            }\n\n            return true;\n        },\n\n        numberString: function(nStr) {\n            nStr += '';\n            var x = nStr.split('.');\n            var x1 = x[0];\n            var x2 = x.length > 1 ? '.' + x[1] : '';\n            var rgx = /(\\d+)(\\d{3})/;\n            while (rgx.test(x1)) {\n                x1 = x1.replace(rgx, '$1' + ',' + '$2');\n            }\n            return x1 + x2;\n        },\n\n        isRTL: function() {\n            return (document.querySelector('html').getAttribute(\"direction\") === 'rtl');\n        },\n\n        snakeToCamel: function(s){\n            return s.replace(/(\\-\\w)/g, function(m){return m[1].toUpperCase();});\n        },\n\n        filterBoolean: function(val) {\n            // Convert string boolean\n\t\t\tif (val === true || val === 'true') {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (val === false || val === 'false') {\n\t\t\t\treturn false;\n\t\t\t}\n\n            return val;\n        },\n\n        setHTML: function(el, html) {\n            el.innerHTML = html;\n        },\n\n        getHTML: function(el) {\n            if (el) {\n                return el.innerHTML;\n            }\n        },\n\n        getDocumentHeight: function() {\n            var body = document.body;\n            var html = document.documentElement;\n\n            return Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight );\n        },\n\n        getScrollTop: function() {\n            return  (document.scrollingElement || document.documentElement).scrollTop;\n        },\n\n        colorLighten: function(color, amount) {\n            const addLight = function(color, amount){\n                let cc = parseInt(color,16) + amount;\n                let c = (cc > 255) ? 255 : (cc);\n                c = (c.toString(16).length > 1 ) ? c.toString(16) : `0${c.toString(16)}`;\n                return c;\n            }\n\n            color = (color.indexOf(\"#\")>=0) ? color.substring(1,color.length) : color;\n            amount = parseInt((255*amount)/100);\n            \n            return color = `#${addLight(color.substring(0,2), amount)}${addLight(color.substring(2,4), amount)}${addLight(color.substring(4,6), amount)}`;\n        },\n\n        colorDarken: function(color, amount) {\n            const subtractLight = function(color, amount){\n                let cc = parseInt(color,16) - amount;\n                let c = (cc < 0) ? 0 : (cc);\n                c = (c.toString(16).length > 1 ) ? c.toString(16) : `0${c.toString(16)}`;\n\n                return c;\n            }\n              \n            color = (color.indexOf(\"#\")>=0) ? color.substring(1,color.length) : color;\n            amount = parseInt((255*amount)/100);\n\n            return color = `#${subtractLight(color.substring(0,2), amount)}${subtractLight(color.substring(2,4), amount)}${subtractLight(color.substring(4,6), amount)}`;\n        },\n\n        // Throttle function: Input as function which needs to be throttled and delay is the time interval in milliseconds\n        throttle:  function (timer, func, delay) {\n        \t// If setTimeout is already scheduled, no need to do anything\n        \tif (timer) {\n        \t\treturn;\n        \t}\n\n        \t// Schedule a setTimeout after delay seconds\n        \ttimer  =  setTimeout(function () {\n        \t\tfunc();\n\n        \t\t// Once setTimeout function execution is finished, timerId = undefined so that in <br>\n        \t\t// the next scroll event function execution can be scheduled by the setTimeout\n        \t\ttimer  =  undefined;\n        \t}, delay);\n        },\n\n        // Debounce function: Input as function which needs to be debounced and delay is the debounced time in milliseconds\n        debounce: function (timer, func, delay) {\n        \t// Cancels the setTimeout method execution\n        \tclearTimeout(timer)\n\n        \t// Executes the func after delay time.\n        \ttimer  =  setTimeout(func, delay);\n        },\n\n        parseJson: function(value) {\n            if (typeof value === 'string') {\n                value = value.replace(/'/g, \"\\\"\");\n\n                var jsonStr = value.replace(/(\\w+:)|(\\w+ :)/g, function(matched) {\n                    return '\"' + matched.substring(0, matched.length - 1) + '\":';\n                });\n\n                try {\n                    value = JSON.parse(jsonStr);\n                } catch(e) { }\n            }\n\n            return value;\n        },\n\n        getResponsiveValue: function(value, defaultValue) {\n            var width = this.getViewPort().width;\n            var result = null;\n\n            value = KTUtil.parseJson(value);\n\n            if (typeof value === 'object') {\n                var resultKey;\n                var resultBreakpoint = -1;\n                var breakpoint;\n\n                for (var key in value) {\n                    if (key === 'default') {\n                        breakpoint = 0;\n                    } else {\n                        breakpoint = this.getBreakpoint(key) ? this.getBreakpoint(key) : parseInt(key);\n                    }\n\n                    if (breakpoint <= width && breakpoint > resultBreakpoint) {\n                        resultKey = key;\n                        resultBreakpoint = breakpoint;\n                    }\n                }\n\n                if (resultKey) {\n                    result = value[resultKey];\n                } else {\n                    result = value;\n                }\n            } else {\n                result = value;\n            }\n\n            return result;\n        },\n\n        each: function(array, callback) {\n            return [].slice.call(array).map(callback);\n        },\n\n        getSelectorMatchValue: function(value) {\n            var result = null;\n            value = KTUtil.parseJson(value);\n\n            if ( typeof value === 'object' ) {\n                // Match condition\n                if ( value['match'] !== undefined ) {\n                    var selector = Object.keys(value['match'])[0];\n                    value = Object.values(value['match'])[0];\n\n                    if ( document.querySelector(selector) !== null ) {\n                        result = value;\n                    }\n                }\n            } else {\n                result = value;\n            }\n\n            return result;\n        },\n\n        getConditionalValue: function(value) {\n            var value = KTUtil.parseJson(value);\n            var result = KTUtil.getResponsiveValue(value);\n\n            if ( result !== null && result['match'] !== undefined ) {\n                result = KTUtil.getSelectorMatchValue(result);\n            }\n\n            if ( result === null && value !== null && value['default'] !== undefined ) {\n                result = value['default'];\n            }\n\n            return result;\n        },\n\n        getCssVariableValue: function(variableName) {\n            var hex = getComputedStyle(document.documentElement).getPropertyValue(variableName);\n            if ( hex && hex.length > 0 ) {\n                hex = hex.trim();\n            }\n\n            return hex;\n        },\n\n        isInViewport: function(element) {        \n            var rect = element.getBoundingClientRect();\n\n            return (\n                rect.top >= 0 &&\n                rect.left >= 0 &&\n                rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n                rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n            );\n        },\n\n        isPartiallyInViewport: function(element) {        \n            let x = element.getBoundingClientRect().left;\n            let y = element.getBoundingClientRect().top;\n            let ww = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n            let hw = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n            let w = element.clientWidth;\n            let h = element.clientHeight;\n\n            return (\n                (y < hw &&\n                y + h > 0) &&\n                (x < ww &&\n                x + w > 0)\n            );\n        },\n\n        onDOMContentLoaded: function(callback) {\n            if (document.readyState === 'loading') {\n                document.addEventListener('DOMContentLoaded', callback);\n            } else {\n                callback();\n            }\n        },\n\n        inIframe: function() {\n            try {\n                return window.self !== window.top;\n            } catch (e) {\n                return true;\n            }\n        },\n\n        isHexColor(code) {\n            return /^#[0-9A-F]{6}$/i.test(code);\n        }\n    }\n}();\n\n// Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTUtil;\n}","\"use strict\";\n\n// Class definition\nvar KTLayoutSearch = function() {\n    // Private variables\n    var element;\n    var formElement;\n    var mainElement;\n    var resultsElement;\n    var wrapperElement;\n    var emptyElement;\n\n    var preferencesElement;\n    var preferencesShowElement;\n    var preferencesDismissElement;\n    \n    var advancedOptionsFormElement;\n    var advancedOptionsFormShowElement;\n    var advancedOptionsFormCancelElement;\n    var advancedOptionsFormSearchElement;\n    \n    var searchObject;\n\n    // Private functions\n    var processs = function(search) {\n        var timeout = setTimeout(function() {\n            var number = KTUtil.getRandomInt(1, 3);\n\n            // Hide recently viewed\n            mainElement.classList.add('d-none');\n\n            if (number === 3) {\n                // Hide results\n                resultsElement.classList.add('d-none');\n                // Show empty message \n                emptyElement.classList.remove('d-none');\n            } else {\n                // Show results\n                resultsElement.classList.remove('d-none');\n                // Hide empty message \n                emptyElement.classList.add('d-none');\n            }                  \n\n            // Complete search\n            search.complete();\n        }, 1500);\n    }\n\n    var processsAjax = function(search) {\n        // Hide recently viewed\n        mainElement.classList.add('d-none');\n\n        // Learn more: https://axios-http.com/docs/intro\n        axios.post('/search.php', {\n            query: searchObject.getQuery()\n        })\n        .then(function (response) {\n            // Populate results\n            resultsElement.innerHTML = response;\n            // Show results\n            resultsElement.classList.remove('d-none');\n            // Hide empty message \n            emptyElement.classList.add('d-none');\n\n            // Complete search\n            search.complete();\n        })\n        .catch(function (error) {\n            // Hide results\n            resultsElement.classList.add('d-none');\n            // Show empty message \n            emptyElement.classList.remove('d-none');\n\n            // Complete search\n            search.complete();\n        });\n    }\n\n    var clear = function(search) {\n        // Show recently viewed\n        mainElement.classList.remove('d-none');\n        // Hide results\n        resultsElement.classList.add('d-none');\n        // Hide empty message \n        emptyElement.classList.add('d-none');\n    }    \n\n    var handlePreferences = function() {\n        // Preference show handler\n        preferencesShowElement.addEventListener('click', function() {\n            wrapperElement.classList.add('d-none');\n            preferencesElement.classList.remove('d-none');\n        });\n\n        // Preference dismiss handler\n        preferencesDismissElement.addEventListener('click', function() {\n            wrapperElement.classList.remove('d-none');\n            preferencesElement.classList.add('d-none');\n        });\n    }\n\n    var handleAdvancedOptionsForm = function() {\n        // Show\n        advancedOptionsFormShowElement.addEventListener('click', function() {\n            wrapperElement.classList.add('d-none');\n            advancedOptionsFormElement.classList.remove('d-none');\n        });\n\n        // Cancel\n        advancedOptionsFormCancelElement.addEventListener('click', function() {\n            wrapperElement.classList.remove('d-none');\n            advancedOptionsFormElement.classList.add('d-none');\n        });\n\n        // Search\n        advancedOptionsFormSearchElement.addEventListener('click', function() {\n            \n        });\n    }\n\n    // Public methods\n\treturn {\n\t\tinit: function() {\n            // Elements\n            element = document.querySelector('#kt_header_search');\n\n            if (!element) {\n                return;\n            }\n\n            wrapperElement = element.querySelector('[data-kt-search-element=\"wrapper\"]');\n            formElement = element.querySelector('[data-kt-search-element=\"form\"]');\n            mainElement = element.querySelector('[data-kt-search-element=\"main\"]');\n            resultsElement = element.querySelector('[data-kt-search-element=\"results\"]');\n            emptyElement = element.querySelector('[data-kt-search-element=\"empty\"]');\n\n            preferencesElement = element.querySelector('[data-kt-search-element=\"preferences\"]');\n            preferencesShowElement = element.querySelector('[data-kt-search-element=\"preferences-show\"]');\n            preferencesDismissElement = element.querySelector('[data-kt-search-element=\"preferences-dismiss\"]');\n\n            advancedOptionsFormElement = element.querySelector('[data-kt-search-element=\"advanced-options-form\"]');\n            advancedOptionsFormShowElement = element.querySelector('[data-kt-search-element=\"advanced-options-form-show\"]');\n            advancedOptionsFormCancelElement = element.querySelector('[data-kt-search-element=\"advanced-options-form-cancel\"]');\n            advancedOptionsFormSearchElement = element.querySelector('[data-kt-search-element=\"advanced-options-form-search\"]');\n            \n            // Initialize search handler\n            searchObject = new KTSearch(element);\n\n            // Demo search handler\n            searchObject.on('kt.search.process', processs);\n\n            // Ajax search handler\n            //searchObject.on('kt.search.process', processsAjax);\n\n            // Clear handler\n            searchObject.on('kt.search.clear', clear);\n\n            // Custom handlers\n            handlePreferences();\n            handleAdvancedOptionsForm();            \n\t\t}\n\t};\n}();\n\n// On document ready\nKTUtil.onDOMContentLoaded(function() {\n    KTLayoutSearch.init();\n});","\"use strict\";\n\n// Class definition\nvar KTThemeModeUser = function () {\n    \n    var handleSubmit = function() {\n\t\t// Update chart on theme mode change\n        KTThemeMode.on(\"kt.thememode.change\", function() {                \n            var menuMode = KTThemeMode.getMenuMode();\n            var mode = KTThemeMode.getMode();\n            console.log(\"user selected theme mode:\" + menuMode);\n            console.log(\"theme mode:\" + mode);\n\n            // Submit selected theme mode menu option via ajax and \n            // store it in user profile and set the user opted theme mode via HTML attribute\n            // <html data-theme-mode=\"light\"> .... </html>\n        });\n    }\n\n    return {\n        init: function () {\n\t\t\thandleSubmit();\n        }\n    };\n}();\n\n// Initialize app on document ready\nKTUtil.onDOMContentLoaded(function () {\n    KTThemeModeUser.init();\n});\n\n// Declare KTThemeModeUser for Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTThemeModeUser;\n}","\"use strict\";\n\n// Class definition\nvar KTThemeMode = function () {\n\tvar menu;\n\tvar callbacks = [];\n\tvar the = this;\n\n    var getMode = function() {\n\t\tvar mode;\n\n\t\tif ( document.documentElement.hasAttribute(\"data-bs-theme\") ) {\n            return document.documentElement.getAttribute(\"data-bs-theme\");\n        } else if ( localStorage.getItem(\"data-bs-theme\") !== null ) {\n\t\t\treturn localStorage.getItem(\"data-bs-theme\");\n\t\t} else if ( getMenuMode() === \"system\" ) {\n\t\t\treturn getSystemMode();\n\t\t}\n\n        return \"light\";\n    }\n\n    var setMode = function(mode, menuMode) {\t\t\n\t\tvar currentMode = getMode();\n\n\t\t// Reset mode if system mode was changed\n\t\tif ( menuMode === 'system') {\n\t\t\tif ( getSystemMode() !==  mode ) {\n\t\t\t\tmode = getSystemMode();\n\t\t\t}\n\t\t} else if (mode !== menuMode) {\n\t\t\tmenuMode = mode;\n\t\t}\n\n\t\t// Read active menu mode value\n\t\tvar activeMenuItem = menu ? menu.querySelector('[data-kt-element=\"mode\"][data-kt-value=\"' + menuMode + '\"]') : null;\n\n\t\t// Enable switching state\n\t\tdocument.documentElement.setAttribute(\"data-kt-theme-mode-switching\", \"true\");\n\t\t\n\t\t// Set mode to the target document.documentElement\n\t\tdocument.documentElement.setAttribute(\"data-bs-theme\", mode);\n\n\t\t// Disable switching state\n\t\tsetTimeout(function() {\n\t\t\tdocument.documentElement.removeAttribute(\"data-kt-theme-mode-switching\");\n\t\t}, 300);\n\t\t\n\t\t// Store mode value in storage\n        localStorage.setItem(\"data-bs-theme\", mode);\t\t\t\n\t\t\n\t\t// Set active menu item\n\t\tif ( activeMenuItem ) {\n\t\t\tlocalStorage.setItem(\"data-bs-theme-mode\", menuMode);\n\t\t\tsetActiveMenuItem(activeMenuItem);\n\t\t}\t\t\t\n\n\t\tif (mode !== currentMode) {\n\t\t\tKTEventHandler.trigger(document.documentElement, 'kt.thememode.change', the);\n\t\t}\t\t\n    }\n\n\tvar getMenuMode = function() {\n\t\tif (!menu) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar menuItem = menu ? menu.querySelector('.active[data-kt-element=\"mode\"]') : null;\n\n\t\tif ( menuItem && menuItem.getAttribute('data-kt-value') ) {\n            return menuItem.getAttribute('data-kt-value');\n        } else if ( document.documentElement.hasAttribute(\"data-bs-theme-mode\") ) {\n\t\t\treturn document.documentElement.getAttribute(\"data-bs-theme-mode\")\n\t\t} else if ( localStorage.getItem(\"data-bs-theme-mode\") !== null ) {\n\t\t\treturn localStorage.getItem(\"data-bs-theme-mode\");\n\t\t} else {\n\t\t\treturn typeof defaultThemeMode !== \"undefined\" ? defaultThemeMode : \"light\";\n\t\t}\n\t}\n\n\tvar getSystemMode = function() {\n        return window.matchMedia('(prefers-color-scheme: dark)').matches ? \"dark\" : \"light\";\n    }\n\n\tvar initMode = function() {\n\t\tsetMode(getMode(), getMenuMode());\n\t\tKTEventHandler.trigger(document.documentElement, 'kt.thememode.init', the);\n\t}\n\n\tvar getActiveMenuItem = function() {\n\t\treturn menu.querySelector('[data-kt-element=\"mode\"][data-kt-value=\"' + getMenuMode() + '\"]');\n\t}\n\n\tvar setActiveMenuItem = function(item) {\n\t\tvar menuMode = item.getAttribute(\"data-kt-value\");\n\t\t\n\t\tvar activeItem = menu.querySelector('.active[data-kt-element=\"mode\"]');\n\n\t\tif ( activeItem ) {\n\t\t\tactiveItem.classList.remove(\"active\");\n\t\t}\n\n\t\titem.classList.add(\"active\");\n\t\tlocalStorage.setItem(\"data-bs-theme-mode\", menuMode);\n\t}\n\n\tvar handleMenu = function() {\n\t\tvar items = [].slice.call(menu.querySelectorAll('[data-kt-element=\"mode\"]'));\n\n        items.map(function (item) {\n            item.addEventListener(\"click\", function(e) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tvar menuMode = item.getAttribute(\"data-kt-value\");\n\t\t\t\tvar mode = menuMode;\n\n\t\t\t\tif ( menuMode === \"system\") {\n\t\t\t\t\tmode = getSystemMode();\n\t\t\t\t} \t\t\n\n\t\t\t\tsetMode(mode, menuMode);\n\t\t\t});\t\t\t     \n        });\n\t}\n\n    return {\n        init: function () {\n\t\t\tmenu = document.querySelector('[data-kt-element=\"theme-mode-menu\"]');\n\n            initMode();\n\n\t\t\tif (menu) {\n\t\t\t\thandleMenu();\n\t\t\t}\t\t\t\n        },\n\n        getMode: function () {\n            return getMode();\n        },\n\n\t\tgetMenuMode: function() {\n\t\t\treturn getMenuMode();\n\t\t},\n\n\t\tgetSystemMode: function () {\n            return getSystemMode();\n        },\n\n        setMode: function(mode) {\n            return setMode(mode)\n        },\n\n\t\ton: function(name, handler) {\n\t\t\treturn KTEventHandler.on(document.documentElement, name, handler);\n\t\t},\n\n\t\toff: function(name, handlerId) {\n\t\t\treturn KTEventHandler.off(document.documentElement, name, handlerId);\n\t\t}\n    };\n}();\n\n// Initialize app on document ready\nKTUtil.onDOMContentLoaded(function () {\n    KTThemeMode.init();\n});\n\n// Declare KTThemeMode for Webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = KTThemeMode;\n}","\"use strict\";\n\n// Class definition\nvar KTAppSidebar = function () {\n\t// Private variables\n\tvar menuWrapper;\n\n\tvar handleMenuScroll = function() {\n\t\tvar menuActiveItem = menuWrapper.querySelector(\".menu-link.active\");\n\n\t\tif ( !menuActiveItem ) {\n\t\t\treturn;\n\t\t} \n\n\t\tif ( KTUtil.isVisibleInContainer(menuActiveItem, menuWrapper) === true) {\n\t\t\treturn;\n\t\t}\n\n\t\tmenuWrapper.scroll({\n\t\t\ttop: KTUtil.getRelativeTopPosition(menuActiveItem, menuWrapper),\n\t\t\tbehavior: 'smooth'\n\t\t});\n\t}\n\n\t// Public methods\n\treturn {\n\t\tinit: function () {\n\t\t\t// Elements\n\t\t\tmenuWrapper = document.querySelector('#kt_app_sidebar_menu_wrapper');\n\t\t\t\n\t\t\tif ( menuWrapper ) {\n\t\t\t\thandleMenuScroll();\t\t\t\n\t\t\t}\n\t\t}\n\t};\n}();\n\n// On document ready\nKTUtil.onDOMContentLoaded(function () {\n\tKTAppSidebar.init();\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\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// Keenthemes' plugins\nwindow.KTComponents = require('@/src/js/components/_init.js');\nwindow.KTUtil = require('@/src/js/components/util.js');\nwindow.KTApp = require('@/src/js/components/app.js');\nwindow.KTEventHandler = require('@/src/js/components/event-handler.js');\nwindow.KTBlockUI = require('@/src/js/components/blockui.js');\nwindow.KTCookie = require('@/src/js/components/cookie.js');\nwindow.KTDialer = require('@/src/js/components/dialer.js');\nwindow.KTDrawer = require('@/src/js/components/drawer.js');\nwindow.KTFeedback = require('@/src/js/components/feedback.js');\nwindow.KTImageInput = require('@/src/js/components/image-input.js');\nwindow.KTMenu = require('@/src/js/components/menu.js');\nwindow.KTPasswordMeter = require('@/src/js/components/password-meter.js');\nwindow.KTScroll = require('@/src/js/components/scroll.js');\nwindow.KTScrolltop = require('@/src/js/components/scrolltop.js');\nwindow.KTSearch = require('@/src/js/components/search.js');\nwindow.KTStepper = require('@/src/js/components/stepper.js');\nwindow.KTSticky = require('@/src/js/components/sticky.js');\nwindow.KTSwapper = require('@/src/js/components/swapper.js');\nwindow.KTToggle = require('@/src/js/components/toggle.js');\n\n// Layout base js\nwindow.KTThemeMode = require('@/src/js/layout/theme-mode.js');\nwindow.KTThemeModeUser = require('@/src/js/layout/theme-mode-user.js');\nwindow.KTLayoutSearch = require('@/src/js/layout/search.js');\nwindow.KTLayoutHeader = require('@/src/js/layout/sidebar.js');"],"names":[],"sourceRoot":""}