���� JFIF  XX �� �� �     $.' ",#(7),01444'9=82<.342  2!!22222222222222222222222222222222222222222222222222�� ��" �� 4     ��   �� �,�PG"Z_�4�˷����kjز�Z�,F+��_z�,�© �����zh6�٨�ic�fu��� #ډb���_�N� ?� �wQ���5-�~�I���8��� �TK<5o�Iv-� ����k�_U_����� ~b�M��d��� �Ӝ�U�Hh��?]��E�w��Q���k�{��_}qFW7HTՑ��Y��F� ?_�'ϔ��_�Ջt� �=||I �� 6�έ"�����D���/[�k�9�� �Y�8 ds|\���Ҿp6�Ҵ���]��.����6� z<�v��@]�i% �� $j��~ �g��J>��no����pM[me�i$[�� �� s�o�ᘨ�˸ nɜG-�ĨU�ycP� 3.DB�li�;� �hj���x 7Z^�N�h��� ���N3u{�:j �x�힞��#M &��jL P@ _���� P�� &��o8 ������9 �����@Sz 6�t7#O�ߋ � s}Yf�T� ��lmr����Z)'N��k�۞p ����w\�T ȯ?�8` �O��i{wﭹW�[�r�� ��Q4F�׊�� �3m&L�=��h3� ���z~��#� \�l :�F,j@�� ʱ�wQT����8�"kJO��� 6�֚l���� }��� R�>ډK���]��y����&����p�}b�� ;N�1�m�r$� |��7�>e�@ B�TM*-i H��g�D�)� E�m�|�ؘbҗ�a ��Ҿ���� t4��� o���G��*oCN�rP���Q��@z,|?W[0 �����:�n,j WiE��W� �$~/�hp\��?��{(�0���+�Y8rΟ�+����>S-S�� ��VN;� }�s?.����� w �9��˟<���Mq4�Wv' ��{)0�1mB ��V����W[� ����8�/<� �%���wT^�5���b��)iM� p g�N�&ݝ� �VO~� q���u���9� ����!��J27��� �$ O-���! �: �%H��� ـ ����y�ΠM=t{!S�� oK8������ t<����è :a�� ����[���� �ա�H���~��w��Qz`�p o�^ �� ��Q��n�  �,uu�C� $ ^���,� �����8�#��:�6��e�|~� ��!�3� 3.�\0�� q��o�4`.|� ����y�Q�`~;�d�ׯ,��O�Zw�������`73�v�܋�< ���Ȏ�� ـ4k��5�K�a�u�=9Yd��$>x�A�&�� j0� ���vF��� Y� |�y��� ~�6�@c��1vOp �Ig�� ��4��l�OD� ��L����� R���c���j�_�uX 6��3?nk��Wy�f;^*B� ��@ �~a�`��Eu������ +� �� 6�L��.ü>��}y���}_�O�6�͐�:�Yr G�X��kG�� ���l^w�� �~㒶sy� �Iu�!� W ��X��N�7BV��O��!X�2����wvG�R�f�T#�����t�/?���%8�^�W�aT ��G�cL�M���I��(J����1~�8�?aT ���]����AS�E��(��*E}� 2�� #I/�׍qz��^t�̔��� b�Yz4x ���t�){ OH� �+(E��A&�N�������XT��o��"�XC�� '���)}�J�z�p� ��~5�}�^����+�6����w��c��Q�| Lp�d�H��}�(�.|����k��c4^� "�����Z?ȕ ��a< �L�!0 39C� �Eu� C�F�Ew�ç ;�n?�*o���B�8�bʝ���'#Rqf�� �M}7����]��� �s2tcS{�\icTx;�\��7K���P ���ʇ Z O-��~�� c>"��?�� �����P ��E��O�8��@�8��G��Q�g�a�Վ���󁶠 �䧘��_%#r�>� 1�z�a�� eb��qcP ѵ��n���#L��� =��׀t� L�7�` ��V��� A{�C:�g���e@ �w1 Xp 3�c3�ġ���� p��M"'-�@n4���fG� �B3�DJ�8[Jo�ߐ���gK)ƛ��$���� � ��8�3�����+���� �����6�ʻ���� ���S�kI�*KZlT _`�� �?��K� ���QK�d ����B`�s}�>���` ��*�>��,*@J�d�oF*� ���弝��O}�k��s��]��y�ߘ ��c1G�V���<=�7��7����6 �q�PT��tXԀ�!9*4�4Tހ 3XΛex�46�� �Y��D ����� �BdemDa����\�_l,� �G�/���֌7���Y�](�xTt^%�GE�����4�}bT ���ڹ�����; Y)���B�Q��u��>J/J � ⮶.�XԄ��j�ݳ� +E��d ��r�5�_D �1 �� o�� �B�x�΢�#� ��<��W�����8���R6�@ g�M�.��� dr�D��>(otU��@ x=��~v���2� ӣ�d�oBd ��3�eO�6�㣷�� ���ݜ 6��6Y��Qz`�� S��{���\P �~z m5{J/L��1������<�e�ͅPu� b�]�ϔ ���'�� ����f�b� Zpw��c`"��i���BD@:)ִ�:�]��h v�E� w���T�l ��P� ��"Ju�}��وV J��G6��. J/�Qgl߭�e�����@�z�Zev2u� )]կ��� ��7x�� �s�M�-<ɯ�c��r� v�����@��$�ޮ}lk���a�� �'����>x��O\�Z Fu>��� ��ck#��&:��`�$ �ai�>2Δ����l���oF[h� �lE�ܺ�Π k:)���` �� $[6�����9�����kOw�\|��� 8}������ބ:��񶐕� �I�A1/� =�2[�,�!��.}gN#�u����b ��� ~� �݊��}34q��� �d�E��L c��$ ��"�[q�U�硬g^��%B � z���r�p J�ru%v\h 1Y�ne` ǥ:g�� �pQM~�^� Xi� ��`S�:V2 9.�P���V� ?B�k�� AEvw%�_�9C�Q����wKekP ؠ�\� ;Io d�{ ߞo�c1eP��� �\� `����E=���@K<�Y�� �eڼ�J ���w����{av�F�'�M�@ /J��+9p ���|]���� �Iw &` ��8���& M�hg ��[�{ ��Xj�� %��Ӓ� $��(��� �ʹN��� <>�I���RY� ��K2�NPlL�ɀ )��&e� ���B+ь����( � �JTx ���_?EZ� }@ 6�U���뙢ط�z��dWI� n` D����噥�[��uV��"�G& Ú����2 g�}&m� �?ċ �"����Om#� ������� � ��{� ON��"S�X ��Ne��ysQ���@ Fn��Vg��� dX�~nj� ]J�<�K]: ��FW�� b�������62 �=��5f����JKw� �bf�X� 55��~J �%^� ���:�-�QIE��P��v�nZum� z � ~ə ���� ���ة����;�f��\v��� g�8�1��f2 4;�V���ǔ�)��� �9���1\�� c��v�/'Ƞ�w����� ��$�4�R-��t�� �� e�6�/�ġ �̕Ecy�J���u�B���<�W�ַ~�w[B1L۲�-JS΂�{���΃���� ��A��20�c# �� @    0!1@AP"#2Q`$3V�%45a6�FRUq���   � ���^7ׅ,$n� ������+��F�`��2X'��0vM��p�L=������ 5��8������u�p~���.�`r�����\��� O��,ư�0oS ��_�M�����l���4�kv\JSd���x���SW�<��Ae�IX����������$I���w�:S���y���›R��9�Q[���,�5�;�@]�%���u�@ *ro�lbI �� ��+���%m:�͇ZV�����u�̉����θau<�fc�.����{�4Ա� �Q����*�Sm��8\ujqs]{kN���)qO�y�_*dJ�b�7���yQqI&9�ԌK!�M}�R�;�� ����S�T���1���i[U�ɵz�]��U)V�S6���3$K{� ߊ<�(� E]Զ[ǼENg�����'�\?#)Dkf��J���o��v���'�%ƞ�&K�u� !��b�35LX�Ϸ��63$K�a�;�9>,R��W��3�3� d�JeTYE.Mϧ��-�o�j3+y��y^�c�������VO�9NV\nd�1 ��!͕_)a�v;����թ�M�lWR1��)El��P;��yوÏ�u 3�k�5Pr6<�⒲l�!˞*��u־�n�!�l:����UNW ��%��Chx8vL'��X�@��*��)���̮��ˍ��� � ��D-M�+J�U�kvK����+�x8��cY������?�Ԡ��~3mo��|�u@[XeY�C�\Kp�x8�oC�C�&����N�~3-H���� ��MX�s�u<`���~"WL��$8ξ��3���a�)|:@�m�\���^�`�@ҷ)�5p+��6���p�%i)P M���ngc�����#0Aruz���RL+xSS?���ʮ}()#�t��mˇ!��0}}y����<�e� �-ή�Ԩ��X������ MF���ԙ~l L.3���}�V뽺�v��� ��멬��Nl�)�2����^�Iq��a��M��qG��T�����c3#������3U�Ǎ���}��לS�|qa��ڃ�+���-��2�f����/��bz��ڐ�� �ݼ[2�ç����k�X�2�* �Z�d���J�G����M*9W���s{��w���T��x��y,�in�O�v��]���n����P�$� JB@=4�OTI�n��e�22a\����q�d���%�$��(���:���: /*�K[PR�fr\nڙdN���F�n�$�4� [�� U�zƶ����� �mʋ���,�ao�u 3�z� �x��Kn����\[��VFmbE;�_U��&V�Gg�]L�۪&#n%�$ɯ� dG���D�TI=�%+AB�Ru#��b4�1�»x�cs�YzڙJG��f��Il� �d�eF'T� iA��T���uC�$����Y��H?����[!G`}���ͪ� �纤Hv\������j�Ex�K���!���OiƸ�Yj�+u-<���'q����uN�*�r\��+�]���<�wOZ.fp�ێ��,-*)V?j-kÊ#�`�r��dV����(�ݽBk�����G�ƛk�QmUڗe��Z���f}|����8�8��a���i��3'J�����~G_�^���d�8w������ R�`(�~�.��u���l�s+g�bv���W���lGc}��u���afE~1�Ue������Z�0�8�=e�� f@/�jqEKQQ�J� �oN��J���W5~M>$6�Lt�;$ʳ{���^��6�{����v6���ķܰg�V�cnn �~z�x�«�,2�u�?cE+Ș�H؎�%�Za�)���X>uW�Tz�Nyo����s���FQƤ��$��*�&�LLXL)�1�" L��eO��ɟ�9=���:t��Z���c��Ž���Y?�ӭV�wv�~,Y��r�ۗ�|�y��GaF�����C�����.�+� ���v1���fήJ�����]�S��T��B��n5sW}y�$��~z�'�c ��8 ��� ,! �p��VN�S��N�N�q��y8z˱�A��4��*��'������2n<�s���^ǧ˭P�Jޮɏ�U�G�L�J�*#��<�V��t7�8����TĜ>��i}K%,���)[��z�21z ?�N�i�n1?T�I�R#��m-�����������������1����lA�`��fT5+��ܐ�c�q՝��ʐ��,���3�f2U�եmab��#ŠdQ�y>\��)�SLY����w#��.���ʑ�f��� ,"+�w�~�N�'�c�O�3F�������N<���)j��&��,-� �љ���֊�_�zS���TǦ����w�>��?�������n��U仆�V���e�����0���$�C�d���rP �m�׈e�Xm�Vu� �L��.�bֹ��� �[Դaզ���*��\y�8�Է:�Ez\�0�Kq�C b��̘��cө���Q��=0Y��s�N��S.��� 3.���O�o:���#���v7�[#߫ ��5�܎�L���Er4���9n��COWlG�^��0k�%<���ZB���aB_���������'=��{i�v�l�$�uC���mƎҝ{�c㱼�y]���W�i ��ߧc��m�H� m�"�"�����;Y�ߝ�Z�Ǔ�����:S#��|}�y�,/k�Ld� TA�(�AI$+I3��;Y*���Z��}|��ӧO��d�v��..#:n��f>�>���ȶI�TX��� 8��y����"d�R�|�)0���=���n4��6ⲑ�+��r<�O�܂~zh�z����7ܓ�HH�Ga롏���nCo�>������a ���~]���R���̲c?�6(�q�;5%� |�uj�~z8R =X��I�V=�|{v�Gj\gc��q����z�؋%M�ߍ����1y��#��@f^���^�>N��� ��#x#۹��6�Y~�?�dfPO��{��P�4��V��u1E1J �*|���%�� �JN��`eWu�zk M6���q t[�� ��g�G���v��WIG��u_ft����5�j�"�Y�:T��ɐ���*�;� e5���4����q$C��2d�}���� _S�L#m�Yp��O�.�C�;��c����Hi#֩%+) �Ӎ��ƲV���SYź��g |���tj��3�8���r|���V��1#;.SQ�A[���S������#���`n�+���$��$ I �P\[�@�s��(�ED�z���P��])8�G#��0B��[ى��X�II�q<��9�~[Z멜�Z�⊔IWU&A>�P~�#��dp<�?����7���c��'~���5 ��+$���lx@�M�dm��n<=e�dyX��?{�|Aef ,|n3�<~z�ƃ�uۧ�����P��Y,�ӥQ�*g�#먙R�\���;T��i,��[9Qi歉����c>]9�� ��"�c��P�� �Md?٥��If�ت�u��k��/����F��9�c*9��Ǎ:�ØF���z�n*�@|I�ށ9����N3{'��[�'ͬ�Ҳ4��#}��!�V� Fu��,�,mTIk���v C�7v���B�6k�T9��1�*l� '~��ƞF��lU��'�M ����][ΩũJ_�{�i�I�n��$�� �L�� j��O�dx�����kza۪��#�E��Cl����x˘�o�����V���ɞ�ljr��)�/,�߬h�L��#��^��L�ф�,íMƁe�̩�NB�L�����iL����q�}��(��q��6IçJ$�W�E$��:������=#����(�K�B����zђ <��K(�N�۫K�w��^O{!����) �H���>x�������lx�?>Պ�+�>�W���,Ly!_�D���Ō�l���Q�!�[ �S����J��1��Ɛ�Y}��b,+�Lo�x�ɓ)����=�y�oh�@�꥟/��I��ѭ=��P�y9��� �ۍYӘ�e+�p�Jnϱ?V\SO%�(�t� ���=?MR�[Ș�����d�/ ��n�l��B�7j� ��!�;ӥ�/�[-���A�>� dN�sLj ��,ɪv��=1c�.SQ�O3�U���ƀ�ܽ�E����������̻��9G�ϷD�7(�}��Ävӌ\� y�_0[w ���<΍>����a_��[0+�L��F.�޺��f�>oN�T����q;���y\��bՃ��y�jH�<|q-eɏ�_?_9+P���Hp$�����[ux�K w�Mw��N�ی'$Y2�=��q���KB��P��~�� ����Yul:�[<����F1�2�O���5=d����]Y�sw:���Ϯ���E��j,_Q��X��z`H1,#II ��d�wr��P˂@�ZJV����y$�\y�{}��^~���[:N����ߌ�U�������O��d�����ؾe��${p>G��3c���Ė�lʌ�� ת��[��`ϱ�-W����dg�I��ig2��� ��}s ��ؤ(%#sS@���~���3�X�nRG�~\jc3�v��ӍL��M[JB�T��s3}��j�Nʖ��W����;7� �ç?=X�F=-�=����q�ߚ���#���='�c��7���ڑW�I(O+=:uxq�������������e2�zi+�kuG�R��������0�&e�n���iT^J����~\jy���p'dtG��s����O��3����9* �b#Ɋ�� p������[Bws�T�>d4�ۧs���nv�n���U���_�~,�v����ƜJ1��s�� �QIz�� )�(lv8M���U=�;����56��G���s#�K���MP�=��LvyGd��}�VwWBF�'�à �?MH�U�g2�� ����!�p�7Q��j��ڴ����=��j�u��� Jn�A s���uM������e��Ɔ�Ҕ�!) '��8Ϣ�ٔ� �ޝ(��Vp���צ֖d=�IC�J�Ǡ{q������kԭ�߸���i��@K����u�|�p=..�*+����x�����z[Aqġ#s2a�Ɗ���RR�)*HRsi�~�a &f��M��P����-K�L@��Z��Xy�'x�{}��Zm+���:�)�) IJ�-i�u���� ���ܒH��'� L(7�y�GӜq���� j��� 6ߌg1�g�o���,kر���tY�?W,���p���e���f�OQS��!K�۟cҒA�|ս�j�>��=⬒��˧L[�� �߿2JaB~R��u�:��Q�] �0H~���]�7��Ƽ�I���( }��cq '�ήET���q�?f�ab���ӥvr� �)o��-Q��_'����ᴎo��K������;��V���o��%���~OK ����*��b�f:���-ťIR��`B�5!RB@���ï�� �u �̯e\�_U�_������� g�ES��3������� QT��a�� ��x����U<~�c?�*�#]�MW,[8O�a�x��]�1bC|踤�P��lw5V%�)�{t�<��d��5���0i�XSU��m:��Z�┵�i�"��1�^B�-��P�hJ��&)O��*�D��c�W��vM��)����}���P��ܗ-q����\mmζZ-l@�}��a��E�6��F�@��&Sg@���ݚ�M����� ȹ 4����#p�\H����dYDo�H���"��\��..R�B�H�z_�/5˘����6��KhJR��P�mƶi�m���3� ,#c�co��q�a)*P t����R�m�k�7x�D�E�\Y�閣_X�<���~�)���c[[�BP����6�Yq���S��0����%_����;��Àv�~�| VS؇ ��'O0��F0��\���U�-�d@�����7�SJ*z��3n��y��P����O��������� m�~�P�3|Y��ʉr#�C�<�G~�.,! ���bqx���h~0=��!ǫ�jy����l� O,�[B��~��|9��ٱ����Xly�#�i�B��g%�S��������tˋ���e���ې��\[d�t)��.+u�|1 ������#�~Oj����hS�%��i.�~X���I�H�m��0n���c�1uE�q��cF�RF�o���7� �O�ꮧ� ���ۛ{��ʛi5�rw?׌#Qn�TW��~?y$��m\�\o����%W� ?=>S�N@�� �Ʈ���R����N�)�r"C�:��:����� �����#��qb��Y�. �6[��2K����2u�Ǧ�HYR��Q�MV��� �G�$��Q+.>�����nNH��q�^��� ����q��mM��V��D�+�-�#*�U�̒ ���p욳��u:�������IB���m� ��PV@O���r[b= �� ��1U�E��_Nm�yKbN�O���U�}�the�`�|6֮P>�\2�P�V���I�D�i�P�O;�9�r�mAHG�W�S]��J*�_�G��+kP�2����Ka�Z���H�'K�x�W�MZ%�O�YD�Rc+o��?�q��Ghm��d�S�oh�\�D�|:W������UA�Qc yT�q� �����~^�H��/��#p�CZ���T�I�1�ӏT����4��"�ČZ�����}��`w�#�*,ʹ�� ��0�i��課�Om�*�da��^gJ݅{���l�e9uF#T�ֲ��̲�ٞC"�q���ߍ ոޑ�o#�XZTp����@ o�8��(jd��xw�]�,f���`~� |,s��^����f�1���t��|��m�򸄭/ctr��5s��7�9Q�4�H1꠲BB@ l9@���C�����+�wp�xu�£Yc�9��?`@#�o�mH�s2��)�=��2�.�l����jg�9$�Y�S�%*L������R�Y������7Z���,*=�䷘$�������arm�o�ϰ���UW.|�r�uf����IGw�t����Zwo��~5 ��YյhO+=8fF�)�W�7�L9lM�̘·Y���֘YLf�큹�pRF���99.A �"wz��=E\Z���'a� 2��Ǚ�#;�'}�G���*��l��^"q��+2FQ� hj��kŦ��${���ޮ-�T�٭cf�|�3#~�RJ����t��$b�(R��(����r���dx� >U b�&9,>���%E\� Ά�e�$��'�q't��*�א���ެ�b��-|d���SB�O�O��$�R+�H�)�܎�K��1m`;�J�2�Y~9��O�g8=vqD`K[�F)k�[���1m޼c��n���]s�k�z$@��)!I �x՝"v��9=�ZA=`Ɠi �:�E��)` 7��vI��}d�YI�_ �o�:ob���o ���3Q��&D&�2=�� �Ά��;>�h����y.*ⅥS������Ӭ�+q&����j|UƧ��� �}���J0��WW< ۋS�)jQR�j���Ư��rN)�Gű�4Ѷ(�S)Ǣ�8��i��W52���No˓� ۍ%�5brOn�L�;�n��\G����=�^U�dI���8$�&���h��'���+�(������cȁ߫k�l��S^���cƗjԌE�ꭔ��gF���Ȓ��@���}O���*;e�v�WV���YJ\�]X'5��ղ�k�F��b 6R�o՜m��i N�i���� >J����?��lPm�U��}>_Z&�KK��q�r��I�D�Չ~�q�3fL�:S�e>���E���-G���{L�6p�e,8��������QI��h��a�Xa��U�A'���ʂ���s�+טIjP�-��y�8ۈZ?J$��W�P� ��R�s�]��|�l(�ԓ��sƊi��o(��S0 ��Y� 8�T97.�����WiL��c�~�dxc�E|�2!�X�K�Ƙਫ਼�$((�6�~|d9u+�qd�^3�89��Y�6L�.I�����?���iI�q���9�)O/뚅����O���X��X�V��ZF[�یgQ�L��K1���RҖr@v�#��X�l��F���Нy�S�8�7�kF!A��sM���^rkp�jP�DyS$N���q�� nxҍ!U�f�!eh�i�2�m ���`�Y�I�9r�6� �TF���C}/�y�^���Η���5d�'��9A-��J��>{�_l+�`��A���[�'��յ�ϛ#w:݅�%��X�}�&�PSt�Q�"�-��\縵�/����$Ɨh�Xb�*�y��BS����;W�ջ_mc�����vt?2}1�;qS�d�d~u:2k5�2�R�~�z+|HE!)�Ǟl��7`��0�<�,�2*���Hl-��x�^����'_TV�gZA�'j� ^�2Ϊ��N7t�����?w�� �x1��f��Iz�C-Ȗ��K�^q�;���-W�DvT�7��8�Z�������� hK�(P:��Q- �8�n�Z���܃e貾�<�1�YT<�,�����"�6{ / �?�͟��|1�:�#g��W�>$����d��J��d�B�� =��jf[��%rE^��il:��B���x���Sּ�1հ��,�=��*�7 fcG��#q� �eh?��2�7�����,�!7x��6�n�LC�4x��},Geǝ�tC.��vS �F�43��zz\��;QYC,6����~;RYS/6���|2���5���v��T��i����������mlv��������&� �nRh^ejR�LG�f���? �ۉҬܦƩ��|��Ȱ����>3����!v��i�ʯ�>�v��オ�X3e���_1z�Kȗ\<������!�8���V��]��?b�k41�Re��T�q��mz��TiOʦ�Z��Xq���L������q"+���2ۨ��8}�&N7XU7Ap�d�X��~�׿��&4e�o�F��� �H�� ��O���č�c�� 懴�6���͉��+)��v;j��ݷ�� �UV�� i��� j���Y9GdÒJ1��詞�����V?h��l�� ��l�cGs�ځ�������y�Ac���� �\V3�? �� ܙg�>qH�S,�E�W�[�㺨�uch�⍸�O�}���a��>�q�6�n6� ���N6�q�� ���� N    ! 1AQaq�0@����"2BRb�#Pr���3C`��Scst���$4D���%Td��  ? � ��N����a��3��m���C���w��������xA�m�q�m��� m������$����4n淿t'��C"w��zU=D�\R+w�p+Y�T�&�պ@��ƃ��3ޯ?�Aﶂ��aŘ���@-�����Q�=���9D��ռ�ѻ@��M�V��P��܅�G5�f�Y<�u=,EC)�<�Fy'�"�&�չ�X~f��l�KԆV��?�� �W�N����=(� �;���{�r����ٌ�Y���h{�١������jW����P���Tc�����X�K�r��}���w�R��%��?���E��m�� �Y�q|����\lEE4� ��r���}�lsI�Y������f�$�=�d�yO����p�����yBj8jU�o�/�S��?�U��*������ˍ�0����� �u�q�m [�?f����a�� )Q�>����6#������� ?����0UQ����,IX���(6ڵ[�DI�MNލ�c&���υ�j\��X�R|,4��� j������T�hA�e��^���d���b<����n�� �즇�=!���3�^�`j�h�ȓr��jẕ�c�,ٞX����-����a�ﶔ���#�$��]w�O��Ӫ�1y%��L�Y<�wg#�ǝ�̗`�x�xa�t�w��»1���o7o5��>�m뭛C���Uƃߜ}�C���y1Xνm�F8�jI���]����H���ۺиE@I�i;r�8ӭ���� V�F�Շ| ��&?�3|x�B�MuS�Ge�=Ӕ�#BE5G�� ���Y!z��_e��q�р/W>|-�Ci߇�t�1ޯќd�R3�u��g�=0 5��[?�#͏��q�cf���H��{ ?u�=?�?ǯ���}Z��z���hmΔ�BFTW�����<�q� (v� ��!��z���iW]*�J�V�z��gX֧A�q�&��/w���u�gYӘa���; �i=����g:��?2�dž6�ى�k�4�>�Pxs����}������G�9� �3 ���)gG�R<>r h�$��'nc�h�P��Bj��J�ҧH� -��N1���N��?��~��}-q!=��_2hc�M��l�vY%UE�@|�v����M2�.Y[|y�"Eï��K�ZF,�ɯ?,q�?v�M 80jx�"�;�9vk�����+ ֧�� �ȺU��?�%�vcV��mA�6��Qg^M��� �A}�3�nl� QRN�l8�kkn�'�����(��M�7m9و�q���%ޟ���*h$Zk"��$�9��: �?U8�Sl��,,|ɒ��xH(ѷ����Gn�/Q�4�P��G�%��Ա8�N��!� �&�7�;���eKM7�4��9R/%����l�c>�x;������>��C�:�����t��h?aKX�bhe�ᜋ^�$�Iհ �hr7%F$�E��Fd���t��5���+�(M6�t����Ü�UU|zW�=a�Ts�Tg������dqP�Q����b'�m���1{|Y����X�N��b �P~��F^F:����k6�"�j!�� �I�r�`��1&�-$�Bevk:y���#y w��I0��x��=D�4��tU���P�ZH��ڠ底taP��6����b>�xa� ���Q�#� WeF��ŮNj�p�J* mQ�N��� �*I�-*�ȩ�F�g�3 �5��V�ʊ�ɮ�a��5F���O@{���NX��?����H�]3��1�Ri_u��������ѕ�� ����0��� F��~��:60�p�͈�S��qX#a�5>���`�o&+�<2�D����: �������ڝ�$�nP���*)�N�|y�Ej�F�5ټ�e���ihy�Z �>���k�bH�a�v��h�-#���!�Po=@k̆IEN��@��}Ll?j�O������߭�ʞ���Q|A07x���wt!xf���I2?Z��<ץ�T���cU�j��]�� 陎Ltl �}5�ϓ��$�,��O�mˊ�;�@O��jE��j(�ا,��LX���LO���Ц�90�O �.����a��nA���7������j4 ��W��_ٓ���zW�jcB������y՗+EM�)d���N�g6�y1_x��p�$Lv :��9�"z��p���ʙ$��^��JԼ*�ϭ����o���=x�Lj�6�J��u82�A�H�3$�ٕ@�=Vv�]�'�qEz�;I˼��)��=��ɯ���x �/�W(V���p�����$ �m�������u�����񶤑Oqˎ�T����r��㠚x�sr�GC��byp�G��1ߠ�w e�8�$⿄����/�M{*}��W�]˷.�CK\�ުx���/$�WP w���r� |i���&�}�{�X� �>��$-��l���?-z���g����lΆ���(F���h�vS*���b���߲ڡn,|)mrH[���a�3�ר�[1��3o_�U�3�TC�$��(�=�)0�kgP���� ��u�^=��4 �WYCҸ:��vQ�ר�X�à��tk�m,�t*��^�,�}D*� �"(�I��9R����>`�`��[~Q]�#af��i6l��8���6�:,s�s�N6�j"�A4���IuQ��6E,�GnH��zS�HO�uk�5$�I�4��ؤ�Q9�@��C����wp �BGv[]�u�Ov��� 0I4���\��y�����Q�Ѹ��~>Z��8�T��a��q�ޣ;z��a���/��S��I:�ܫ_�|������>=Z����8:�S��U�I�J��"IY���8%b8���H��:�QO�6�;7�I�S��J��ҌAά3��>c���E+&jf$eC+�z�;��V����� �r���ʺ������my�e���aQ�f&��6�ND ��.:��NT�vm�<- u���ǝ\MvZY�N�NT��-A�>jr!S��n�O 1�3�Ns�%�3D@���`������ܟ 1�^c<���� �a�ɽ�̲�Xë#�w�|y�cW�=�9I*H8�p�^(4���՗�k��arOcW�tO�\�ƍR��8����'�K���I�Q�����?5�>[�}��yU�ײ -h��=��% q�ThG�2�)���"ו3]�!kB��*p�FDl�A���,�eEi�H�f�Ps�����5�H:�Փ~�H�0Dت�D�I����h�F3�������c��2���E��9�H��5�zԑ�ʚ�i�X�=:m�xg�hd(�v����׊�9iS��O��d@0ڽ���:�p�5�h-��t�&���X�q�ӕ,��ie�|���7A�2���O%P��E��htj��Y1��w�Ѓ!����  ���� ࢽ��My�7�\�a�@�ţ�J �4�Ȼ�F�@o�̒?4�wx��)��]�P��~�����u�����5�����7X ��9��^ܩ�U;Iꭆ 5 �������eK2�7(�{|��Y׎ �V��\"���Z�1� Z�����}��(�Ǝ"�1S���_�vE30>���p;� ΝD��%x�W�?W?v����o�^V�i�d��r[��/&>�~`�9Wh��y�;���R�� � ;;ɮT��?����r$�g1�K����A��C��c��K��l:�'��3 c�ﳯ*"t8�~l��)���m��+U,z��`( �>yJ�?����h>��]��v��ЍG*�{`��;y]��I�T� ;c��NU�fo¾h���/$���|NS���1�S�"�H��V���T���4��uhǜ�]�v;���5�͠x��'C\�SBpl���h}�N����� A�Bx���%��ޭ�l��/����T��w�ʽ]D�=����K���ž�r㻠l4�S�O?=�k �M:� ��c�C�a�#ha���)�ѐxc�s���gP�iG�� {+���x���Q���I= �� z��ԫ+ �8"�k�ñ�j=|����c ��y��CF��/ ��*9ж�h{ �?4�o� ��k�m�Q�N�x��;�Y��4膚�a�w?�6�> e]�����Q�r�:����g�,i"�����ԩA� *M�<�G��b�if��l^M��5� �Ҩ�{����6J��ZJ�����P�*�����Y���ݛu�_4�9�I8�7���������,^ToR���m4�H��?�N�S�ѕw��/S��甍�@�9H�S�T��t�ƻ���ʒU��*{Xs�@����f��� ��֒Li�K{H�w^���������Ϥm�tq���s� ���ք��f:��o~s��g�r��ט� �S�ѱC�e]�x���a��) ���(b-$(�j>�7q�B?ӕ�F��hV25r[7 Y� }L�R��}����*sg+��x�r�2�U=�*'WS��ZDW]�WǞ�<��叓���{�$�9Ou4��y�90-�1�'*D`�c�^o?(�9��u���ݐ��'PI&� f�Jݮ�������:wS����jfP1F:X �H�9dԯ�� �˝[�_54 �}*;@�ܨ�� ð�yn�T���?�ןd�#���4rG�ͨ��H�1�|-#���Mr�S3��G�3�����)�.᧏3v�z֑��r����$G"�`j �1t��x0<Ɔ�Wh6�y�6��,œ�Ga��gA����y��b��)� �h�D��ß�_�m��ü �gG;��e�v��ݝ�nQ� ��C����-�*��o���y�a��M��I�>�<���]obD��"�:���G�A��-\%LT�8���c�)��+y76���o�Q�#*{�(F�⽕�y����=���rW�\p���۩�c���A���^e6��K������ʐ�cVf5$�'->���ՉN"���F�"�UQ@�f��Gb~��#�&�M=��8�ט�JNu9��D��[̤�s�o�~��� ��� G��9T�tW^g5y$b��Y'��س�Ǵ�=��U-2 #�MC�t(�i� �lj�@Q 5�̣i�*�O����s�x�K�f��}\��M{E�V�{�υ��Ƈ�����);�H����I��fe�Lȣr�2��>��W� I�Ȃ6������i��k�� �5�YOxȺ����>��Y�f5'��|��H+��98pj�n�.O�y�������jY��~��i�w'������l�;�s�2��Y��:'lg�ꥴ)o#'Sa�a�K��Z� �m��}�`169�n���"���x��I ��*+� }F<��cГ���F�P�������ֹ*�PqX�x۩��,� ��N�� �4<-����%����:��7����W���u�`����� $�?�I��&����o��o��`v�>��P��"��l���4��5'�Z�gE���8���?��[�X�7(��.Q�-��*���ތL@̲����v��.5���[��=�t\+�CNܛ��,g�SQnH����}*F�G16���&:�t��4ُ"A��̣��$�b �|����#rs��a�����T�� ]�<�j��B S�('$�ɻ� �wP;�/�n��?�ݜ��x�F��yUn�~mL*-�������Xf�wd^�a�}��f�,=t�׵i�.2/wpN�Ep8�OР���•��R�FJ� 55TZ��T �ɭ�<��]��/�0�r�@�f��V��V����Nz�G��^���7hZi����k��3�,kN�e|�vg�1{9]_i��X5y7� 8e]�U����'�-2,���e"����]ot�I��Y_��n�(JҼ��1�O ]bXc���Nu�No��pS���Q_���_�?i�~�x h5d'�(qw52] ��'ޤ�q��o1�R!���`ywy�A4u���h<קy���\[~�4�\ X�Wt/� 6�����n�F�a8��f���z �3$�t(���q��q�x��^�XWeN'p<-v�!�{�(>ӽDP7��ո0�y)�e$ٕv�Ih'Q�EA�m*�H��RI��=:��� ���4牢) �%_iN�ݧ�l]� �Nt���G��H�L��� ɱ�g<���1V�,�J~�ٹ�"K��Q�� 9�HS�9�?@��k����r�;we݁�]I�!{ �@�G�[�"��`���J:�n]�{�cA�E����V��ʆ���#��U9�6����j�#Y�m\��q�e4h�B�7��C�������d<�?J����1g:ٳ���=Y���D�p�ц� ׈ǔ��1�]26؜oS�'��9�V�FVu�P�h�9�xc�oq�X��p�o�5��Ա5$�9W�V(�[Ak�aY錎qf;�'�[�|���b�6�Ck��)��#a#a˙��8���=äh�4��2��C��4tm^ �n'c� ��]GQ$[Wҿ��i���vN�{Fu ��1�gx��1┷���N�m��{j-,��x�� Ūm�ЧS�[�s���Gna���䑴�� x�p 8<������97�Q���ϴ�v�aϚG��Rt�Һ׈�f^\r��WH�JU�7Z���y)�vg=����n��4�_)y��D'y�6�]�c�5̪ �\� �PF�k����&�c;��cq�$~T�7j ���nç]�<�g ":�to�t}�159�<�/�8������m�b�K#g'I'.W����� 6��I/��>v��\�MN��g���m�A�yQL�4u�Lj�j9��#44�t��l^�}L����n��R��!��t��±]��r��h6ٍ>�yҏ�N��fU�� ���� Fm@�8}�/u��jb9������he:A�y�ծw��GpΧh�5����l}�3p468��)U��d��c����;Us/�֔�YX�1�O2��uq�s��`hwg�r~�{ R��mhN��؎*q 42�*th��>�#���E����#��Hv�O����q�}����� 6�e��\�,Wk�#���X��b>��p}�դ��3���T5��†��6��[��@ �P�y*n��|'f�֧>�lư΂�̺����SU�'*�q�p�_S�����M�� '��c�6��� ��m�� ySʨ;M��r���Ƌ�m�Kxo,���Gm�P��A�G�:��i��w�9�}M(�^�V��$ǒ�ѽ�9���|���� �a����J�SQ�a���r�B;����}���ٻ֢�2�%U���c�#�g���N�a�ݕ�'�v�[�OY'��3L�3�;,p�]@�S��{ls��X�'���c�jw� k'a�.��}�}&�� �dP�*�bK=ɍ!����;3n�gΊU�ߴmt�'*{,=SzfD� A��ko~�G�aoq�_mi}#�m�������P�Xhύ��� �mxǍ�΂���巿zf��Q���c���|kc�����?���W��Y�$���_Lv����l߶��c���`?����l�j�ݲˏ!V��6����U�Ђ(A���4y)H���p�Z_�x��>���e�� R��$�/�`^'3qˏ�-&Q�=?��CFVR �D�fV�9��{�8g�������n�h�(P"��6�[�D���< E�����~0<@�`�G�6����Hг�cc�� �c�K.5��D��d�B���`?�XQ��2��ٿyqo&+�1^� DW�0�ꊩ���G�#��Q�nL3��c���������/��x ��1�1 [y�x�პCW��C�c�UĨ80�m�e�4.{�m��u���I=��f�����0QRls9���f���������9���~f�����Ǩ��a�"@�8���ȁ�Q����#c�ic������G��$���G���r/$W�(��W���V�"��m�7�[m�A�m����bo��D� j����۳� l���^�k�h׽����� ��#� iXn�v��eT�k�a�^Y�4�BN�� ĕ�� 0    !01@Q"2AaPq3BR������ ? � ��@4�Q�����T3,���㺠�W�[=JK�Ϟ���2�r^7��vc�:�9 �E�ߴ�w�S#d���Ix��u��:��Hp��9E!�� V 2;73|F��9Y���*ʬ�F��D����u&���y؟��^EA��A��(ɩ���^��GV:ݜDy�`��Jr29ܾ�㝉��[���E;Fzx��YG��U�e�Y�C���� ����v-tx����I�sם�Ę�q��Eb�+P\ :>�i�C'�;�����k|z�رn�y]�#ǿb��Q��������w�����(�r|ӹs��[�D��2v-%��@;�8<a���[\o[ϧw��I!��*0�krs)�[�J9^��ʜ��p1)� "��/_>��o��<1����A�E�y^�C��`�x1'ܣn�p��s`l���fQ��):�l����b>�Me�jH^?�kl3(�z:���1ŠK&?Q�~�{�ٺ�h�y���/�[��V�|6��}�KbX����mn[-��7�5q�94�������dm���c^���h� X��5��<�eޘ>G���-�}�دB�ޟ� ��|�rt�M��V+�]�c?�-#ڛ��^ǂ}���Lkr���O��u�>�-D�ry� D?:ޞ�U��ǜ�7�V��?瓮�"�#���r��չģVR;�n���/_� ؉v�ݶe5d�b9��/O��009�G���5n�W����JpA�*�r9�>�1��.[t���s�F���nQ� V 77R�]�ɫ8����_0<՜�IF�u(v��4��F�k�3��E)��N:��yڮe��P�`�1}�$WS��J�SQ�N�j �ٺ��޵�#l���ј(�5=��5�lǏmoW�v-�1����v,W�mn��߀$x�<����v�j(����c]��@#��1������Ǔ���o'��u+����;G�#�޸��v-lη��/(`i⣍Pm^� ��ԯ̾9Z��F��������n��1��� ��]�[��)�'������ :�֪�W��FC����� �B9،!?���]��V��A�Վ�M��b�w��G F>_DȬ0¤�#�QR�[V��kz���m�w�"��9ZG�7'[��=�Q����j8R?�zf�\a�=��O�U����*oB�A�|G���2�54 �p��.w7� �� ��&������ξxGHp� B%��$g�����t�Џ򤵍z���HN�u�Я�-�'4��0�� ;_�� 3     !01"@AQa2Pq#3BR������ ? � �ʩca��en��^��8���<�u#��m*08r��y�N"�<�Ѳ0��@\�p��� �����Kv�D��J8�Fҽ� �f�Y��-m�ybX�NP����}�!*8t(�OqѢ��Q�wW�K��ZD��Δ^e��!� ��B�K��p~�����e*l}z#9ң�k���q#�Ft�o��S�R����-�w�!�S���Ӥß|M�l޶V��!eˈ�8Y���c�ЮM2��tk���� ������J�fS����Ö*i/2�����n]�k�\���|4yX�8��U�P.���Ы[���l��@"�t�<������5�lF���vU�����W��W��;�b�cД^6[#7@vU�xgZv��F�6��Q,K�v��� �+Ъ��n��Ǣ��Ft���8��0��c�@�!�Zq s�v�t�;#](B��-�nῃ~���3g������5�J�%���O������n�kB�ĺ�.r��+���#�N$?�q�/�s�6��p��a����a��J/��M�8��6�ܰ"�*������ɗud"\w���aT(����[��F��U՛����RT�b���n�*��6���O��SJ�.�ij<�v�MT��R\c��5l�sZB>F��<7�;EA��{��E���Ö��1U/�#��d1�a�n.1ě����0�ʾR�h��|�R��Ao�3�m3 ��%�� ���28Q� ��y��φ���H�To�7�lW>����#i`�q���c����a��� �m,B�-j����݋�'mR1Ήt�>��V��p���s�0IbI�C.���1R�ea�����]H�6�������� ��4B>��o��](��$B���m�����a�!=� �?�B� K�Ǿ+�Ծ"�n���K��*��+��[T#�{ E�J�S����Q�����s�5�:�U�\wĐ�f�3����܆&�)��� �I���Ԇw��E T�lrTf6Q|R�h:��[K�� �z��c֧�G�C��%\��_�a �84��HcO�bi��ؖV��7H �)*ģK~Xhչ0��4?�0��� �E<���}3���#���u�?�� ��|g�S�6ꊤ�|�I#Hڛ� �ա��w�X��9��7���Ŀ%�SL��y6č��|�F�a 8���b� �$�sק�h���b9RAu7�˨p�Č�_\*w��묦��F ����4D~�f����|(�"m���NK��i�S�>�$d7SlA��/�²����SL��|6N�}���S�˯���g��]6��; �#�.��<���q'Q�1|KQ$�����񛩶"�$r�b:���N8�w@��8$�� �AjfG|~�9F ���Y��ʺ��Bwؒ������M:I岎�G��`s�YV5����6��A �b:�W���G�q%l�����F��H���7�������Fsv7� �k�� 403WebShell
403Webshell
Server IP : 216.10.251.64  /  Your IP : 216.73.216.105
Web Server : Apache
System : Linux server.webkartdigital.com 4.18.0-477.27.2.el8_8.x86_64 #1 SMP Fri Sep 29 08:21:01 EDT 2023 x86_64
User : digit2pk ( 1003)
PHP Version : 8.1.33
Disable Function : exec,passthru,shell_exec,system
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/digit2pk/public_html/footwearmoulds.in/assets/js/vendors/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/digit2pk/public_html/footwearmoulds.in/assets/js/vendors/bootstrap-slider.js
/*! =========================================================
 * bootstrap-slider.js
 *
 * Maintainers:
 *		Kyle Kemp
 *			- Twitter: @seiyria
 *			- Github:  seiyria
 *		Rohit Kalkur
 *			- Twitter: @Rovolutionary
 *			- Github:  rovolution
 *
 * =========================================================
 *
 * bootstrap-slider is released under the MIT License
 * Copyright (c) 2019 Kyle Kemp, Rohit Kalkur, and contributors
 *
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use,
 * copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following
 * conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 *
 * ========================================================= */


/**
 * Bridget makes jQuery widgets
 * v1.0.1
 * MIT license
 */
 const windowIsDefined = (typeof window === "object");


 (function(factory) {
     if(typeof define === "function" && define.amd) {
         define(["jquery"], factory);
     }
     else if(typeof module === "object" && module.exports) {
         var jQuery;
         try {
             jQuery = require("jquery");
         }
         catch (err) {
             jQuery = null;
         }
         module.exports = factory(jQuery);
     }
     else if(window) {
         window.Slider = factory(window.jQuery);
     }
 }(function($) {
     // Constants
     const NAMESPACE_MAIN = 'slider';
     const NAMESPACE_ALTERNATE = 'bootstrapSlider';
 
     // Polyfill console methods
     if (windowIsDefined && !window.console) {
         window.console = {};
     }
     if (windowIsDefined && !window.console.log) {
         window.console.log = function () { };
     }
     if (windowIsDefined && !window.console.warn) {
         window.console.warn = function () { };
     }
 
     // Reference to Slider constructor
     var Slider;
 
 
     (function( $ ) {
 
         'use strict';
 
         // -------------------------- utils -------------------------- //
 
         var slice = Array.prototype.slice;
 
         function noop() {}
 
         // -------------------------- definition -------------------------- //
 
         function defineBridget( $ ) {
 
             // bail if no jQuery
             if ( !$ ) {
                 return;
             }
 
             // -------------------------- addOptionMethod -------------------------- //
 
             /**
              * adds option method -> $().plugin('option', {...})
              * @param {Function} PluginClass - constructor class
              */
             function addOptionMethod( PluginClass ) {
                 // don't overwrite original option method
                 if ( PluginClass.prototype.option ) {
                     return;
                 }
 
               // option setter
               PluginClass.prototype.option = function( opts ) {
                 // bail out if not an object
                 if ( !$.isPlainObject( opts ) ){
                   return;
                 }
                 this.options = $.extend( true, this.options, opts );
               };
             }
 
 
             // -------------------------- plugin bridge -------------------------- //
 
             // helper function for logging errors
             // $.error breaks jQuery chaining
             var logError = typeof console === 'undefined' ? noop :
               function( message ) {
                 console.error( message );
               };
 
             /**
              * jQuery plugin bridge, access methods like $elem.plugin('method')
              * @param {String} namespace - plugin name
              * @param {Function} PluginClass - constructor class
              */
             function bridge( namespace, PluginClass ) {
               // add to jQuery fn namespace
               $.fn[ namespace ] = function( options ) {
                 if ( typeof options === 'string' ) {
                   // call plugin method when first argument is a string
                   // get arguments for method
                   var args = slice.call( arguments, 1 );
 
                   for ( var i=0, len = this.length; i < len; i++ ) {
                     var elem = this[i];
                     var instance = $.data( elem, namespace );
                     if ( !instance ) {
                       logError( "cannot call methods on " + namespace + " prior to initialization; " +
                         "attempted to call '" + options + "'" );
                       continue;
                     }
                     if ( !$.isFunction( instance[options] ) || options.charAt(0) === '_' ) {
                       logError( "no such method '" + options + "' for " + namespace + " instance" );
                       continue;
                     }
 
                     // trigger method with arguments
                     var returnValue = instance[ options ].apply( instance, args);
 
                     // break look and return first value if provided
                     if ( returnValue !== undefined && returnValue !== instance) {
                       return returnValue;
                     }
                   }
                   // return this if no return value
                   return this;
                 } else {
                   var objects = this.map( function() {
                     var instance = $.data( this, namespace );
                     if ( instance ) {
                       // apply options & init
                       instance.option( options );
                       instance._init();
                     } else {
                       // initialize new instance
                       instance = new PluginClass( this, options );
                       $.data( this, namespace, instance );
                     }
                     return $(this);
                   });
 
                   if(objects.length === 1) {
                       return objects[0];
                   }
                   return objects;
                 }
               };
 
             }
 
             // -------------------------- bridget -------------------------- //
 
             /**
              * converts a Prototypical class into a proper jQuery plugin
              *   the class must have a ._init method
              * @param {String} namespace - plugin name, used in $().pluginName
              * @param {Function} PluginClass - constructor class
              */
             $.bridget = function( namespace, PluginClass ) {
               addOptionMethod( PluginClass );
               bridge( namespace, PluginClass );
             };
 
             return $.bridget;
 
         }
 
           // get jquery from browser global
           defineBridget( $ );
 
     })( $ );
 
 
     /*************************************************
 
             BOOTSTRAP-SLIDER SOURCE CODE
 
     **************************************************/
 
     (function($) {
         let autoRegisterNamespace;
 
         var ErrorMsgs = {
             formatInvalidInputErrorMsg : function(input) {
                 return "Invalid input value '" + input + "' passed in";
             },
             callingContextNotSliderInstance : "Calling context element does not have instance of Slider bound to it. Check your code to make sure the JQuery object returned from the call to the slider() initializer is calling the method"
         };
 
         var SliderScale = {
             linear: {
                 getValue: function(value, options) {
                     if (value < options.min) {
                         return options.min;
                     } else if (value > options.max) {
                         return options.max;
                     } else {
                         return value;
                     }
                 },
                 toValue: function(percentage) {
                     var rawValue = percentage/100 * (this.options.max - this.options.min);
                     var shouldAdjustWithBase = true;
                     if (this.options.ticks_positions.length > 0) {
                         var minv, maxv, minp, maxp = 0;
                         for (var i = 1; i < this.options.ticks_positions.length; i++) {
                             if (percentage <= this.options.ticks_positions[i]) {
                                 minv = this.options.ticks[i-1];
                                 minp = this.options.ticks_positions[i-1];
                                 maxv = this.options.ticks[i];
                                 maxp = this.options.ticks_positions[i];
 
                                 break;
                             }
                         }
                         var partialPercentage = (percentage - minp) / (maxp - minp);
                         rawValue = minv + partialPercentage * (maxv - minv);
                         shouldAdjustWithBase = false;
                     }
 
                     var adjustment = shouldAdjustWithBase ? this.options.min : 0;
                     var value = adjustment + Math.round(rawValue / this.options.step) * this.options.step;
                     return SliderScale.linear.getValue(value, this.options);
                 },
                 toPercentage: function(value) {
                     if (this.options.max === this.options.min) {
                         return 0;
                     }
 
                     if (this.options.ticks_positions.length > 0) {
                         var minv, maxv, minp, maxp = 0;
                         for (var i = 0; i < this.options.ticks.length; i++) {
                             if (value  <= this.options.ticks[i]) {
                                 minv = (i > 0) ? this.options.ticks[i-1] : 0;
                                 minp = (i > 0) ? this.options.ticks_positions[i-1] : 0;
                                 maxv = this.options.ticks[i];
                                 maxp = this.options.ticks_positions[i];
 
                                 break;
                             }
                         }
                         if (i > 0) {
                             var partialPercentage = (value - minv) / (maxv - minv);
                             return minp + partialPercentage * (maxp - minp);
                         }
                     }
 
                     return 100 * (value - this.options.min) / (this.options.max - this.options.min);
                 }
             },
 
             logarithmic: {
                 /* Based on http://stackoverflow.com/questions/846221/logarithmic-slider */
                 toValue: function(percentage) {
                     var offset = 1 - this.options.min;
                     var min = Math.log(this.options.min + offset);
                     var max = Math.log(this.options.max + offset);
                     var value = Math.exp(min + (max - min) * percentage / 100) - offset;
                     if(Math.round(value) === max) {
                         return max;
                     }
                     value = this.options.min + Math.round((value - this.options.min) / this.options.step) * this.options.step;
                     /* Rounding to the nearest step could exceed the min or
                      * max, so clip to those values. */
                     return SliderScale.linear.getValue(value, this.options);
                 },
                 toPercentage: function(value) {
                     if (this.options.max === this.options.min) {
                         return 0;
                     } else {
                         var offset = 1 - this.options.min;
                         var max = Math.log(this.options.max + offset);
                         var min = Math.log(this.options.min + offset);
                         var v = Math.log(value + offset);
                         return 100 * (v - min) / (max - min);
                     }
                 }
             }
         };
 
 
         /*************************************************
 
                             CONSTRUCTOR
 
         **************************************************/
         Slider = function(element, options) {
             createNewSlider.call(this, element, options);
             return this;
         };
 
         function createNewSlider(element, options) {
 
             /*
                 The internal state object is used to store data about the current 'state' of slider.
                 This includes values such as the `value`, `enabled`, etc...
             */
             this._state = {
                 value: null,
                 enabled: null,
                 offset: null,
                 size: null,
                 percentage: null,
                 inDrag: false,
                 over: false,
                 tickIndex: null
             };
 
             // The objects used to store the reference to the tick methods if ticks_tooltip is on
             this.ticksCallbackMap = {};
             this.handleCallbackMap = {};
 
             if(typeof element === "string") {
                 this.element = document.querySelector(element);
             } else if(element instanceof HTMLElement) {
                 this.element = element;
             }
 
             /*************************************************
 
                             Process Options
 
             **************************************************/
             options = options ? options : {};
             var optionTypes = Object.keys(this.defaultOptions);
 
             const isMinSet = options.hasOwnProperty('min');
             const isMaxSet = options.hasOwnProperty('max');
 
             for(var i = 0; i < optionTypes.length; i++) {
                 var optName = optionTypes[i];
 
                 // First check if an option was passed in via the constructor
                 var val = options[optName];
                 // If no data attrib, then check data atrributes
                 val = (typeof val !== 'undefined') ? val : getDataAttrib(this.element, optName);
                 // Finally, if nothing was specified, use the defaults
                 val = (val !== null) ? val : this.defaultOptions[optName];
 
                 // Set all options on the instance of the Slider
                 if(!this.options) {
                     this.options = {};
                 }
                 this.options[optName] = val;
             }
 
             this.ticksAreValid = Array.isArray(this.options.ticks) && this.options.ticks.length > 0;
 
             // Lock to ticks only when ticks[] is defined and set
             if (!this.ticksAreValid) {
                 this.options.lock_to_ticks = false;
             }
 
             // Check options.rtl
             if(this.options.rtl==='auto'){
                 var computedStyle = window.getComputedStyle(this.element);
                 if (computedStyle != null) {
                     this.options.rtl = computedStyle.direction === 'rtl';
                 } else {
                     // Fix for Firefox bug in versions less than 62:
                     // https://bugzilla.mozilla.org/show_bug.cgi?id=548397
                     // https://bugzilla.mozilla.org/show_bug.cgi?id=1467722
                     this.options.rtl = this.element.style.direction === 'rtl';
                 }
             }
 
             /*
                 Validate `tooltip_position` against 'orientation`
                 - if `tooltip_position` is incompatible with orientation, switch it to a default compatible with specified `orientation`
                     -- default for "vertical" -> "right", "left" if rtl
                     -- default for "horizontal" -> "top"
             */
             if(this.options.orientation === "vertical" && (this.options.tooltip_position === "top" || this.options.tooltip_position === "bottom")) {
                 if(this.options.rtl) {
                     this.options.tooltip_position = "left";
                 }else{
                     this.options.tooltip_position = "right";
                 }
             }
             else if(this.options.orientation === "horizontal" && (this.options.tooltip_position === "left" || this.options.tooltip_position === "right")) {
 
                 this.options.tooltip_position = "top";
 
             }
 
             function getDataAttrib(element, optName) {
                 var dataName = "data-slider-" + optName.replace(/_/g, '-');
                 var dataValString = element.getAttribute(dataName);
 
                 try {
                     return JSON.parse(dataValString);
                 }
                 catch(err) {
                     return dataValString;
                 }
             }
 
             /*************************************************
 
                             Create Markup
 
             **************************************************/
 
             var origWidth = this.element.style.width;
             var updateSlider = false;
             var parent = this.element.parentNode;
             var sliderTrackSelection;
             var sliderTrackLow, sliderTrackHigh;
             var sliderMinHandle;
             var sliderMaxHandle;
 
             if (this.sliderElem) {
                 updateSlider = true;
             } else {
                 /* Create elements needed for slider */
                 this.sliderElem = document.createElement("div");
                 this.sliderElem.className = "slider";
 
                 /* Create slider track elements */
                 var sliderTrack = document.createElement("div");
                 sliderTrack.className = "slider-track";
 
                 sliderTrackLow = document.createElement("div");
                 sliderTrackLow.className = "slider-track-low";
 
                 sliderTrackSelection = document.createElement("div");
                 sliderTrackSelection.className = "slider-selection";
 
                 sliderTrackHigh = document.createElement("div");
                 sliderTrackHigh.className = "slider-track-high";
 
                 sliderMinHandle = document.createElement("div");
                 sliderMinHandle.className = "slider-handle min-slider-handle";
                 sliderMinHandle.setAttribute('role', 'slider');
                 sliderMinHandle.setAttribute('aria-valuemin', this.options.min);
                 sliderMinHandle.setAttribute('aria-valuemax', this.options.max);
 
                 sliderMaxHandle = document.createElement("div");
                 sliderMaxHandle.className = "slider-handle max-slider-handle";
                 sliderMaxHandle.setAttribute('role', 'slider');
                 sliderMaxHandle.setAttribute('aria-valuemin', this.options.min);
                 sliderMaxHandle.setAttribute('aria-valuemax', this.options.max);
 
                 sliderTrack.appendChild(sliderTrackLow);
                 sliderTrack.appendChild(sliderTrackSelection);
                 sliderTrack.appendChild(sliderTrackHigh);
 
                 /* Create highlight range elements */
                 this.rangeHighlightElements = [];
                 const rangeHighlightsOpts = this.options.rangeHighlights;
                 if (Array.isArray(rangeHighlightsOpts) && rangeHighlightsOpts.length > 0) {
                     for (let j = 0; j < rangeHighlightsOpts.length; j++) {
                         var rangeHighlightElement = document.createElement("div");
                         const customClassString = rangeHighlightsOpts[j].class || "";
                         rangeHighlightElement.className = `slider-rangeHighlight slider-selection ${customClassString}`;
                         this.rangeHighlightElements.push(rangeHighlightElement);
                         sliderTrack.appendChild(rangeHighlightElement);
                     }
                 }
 
                 /* Add aria-labelledby to handle's */
                 var isLabelledbyArray = Array.isArray(this.options.labelledby);
                 if (isLabelledbyArray && this.options.labelledby[0]) {
                     sliderMinHandle.setAttribute('aria-labelledby', this.options.labelledby[0]);
                 }
                 if (isLabelledbyArray && this.options.labelledby[1]) {
                     sliderMaxHandle.setAttribute('aria-labelledby', this.options.labelledby[1]);
                 }
                 if (!isLabelledbyArray && this.options.labelledby) {
                     sliderMinHandle.setAttribute('aria-labelledby', this.options.labelledby);
                     sliderMaxHandle.setAttribute('aria-labelledby', this.options.labelledby);
                 }
 
                 /* Create ticks */
                 this.ticks = [];
                 if (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {
                     this.ticksContainer = document.createElement('div');
                     this.ticksContainer.className = 'slider-tick-container';
 
                     for (i = 0; i < this.options.ticks.length; i++) {
                         var tick = document.createElement('div');
                         tick.className = 'slider-tick';
                         if (this.options.ticks_tooltip) {
                             var tickListenerReference = this._addTickListener();
                             var enterCallback = tickListenerReference.addMouseEnter(this, tick, i);
                             var leaveCallback = tickListenerReference.addMouseLeave(this, tick);
 
                             this.ticksCallbackMap[i] = {
                                 mouseEnter: enterCallback,
                                 mouseLeave: leaveCallback
                             };
                         }
                         this.ticks.push(tick);
                         this.ticksContainer.appendChild(tick);
                     }
 
                     sliderTrackSelection.className += " tick-slider-selection";
                 }
 
                 this.tickLabels = [];
                 if (Array.isArray(this.options.ticks_labels) && this.options.ticks_labels.length > 0) {
                     this.tickLabelContainer = document.createElement('div');
                     this.tickLabelContainer.className = 'slider-tick-label-container';
 
                     for (i = 0; i < this.options.ticks_labels.length; i++) {
                         var label = document.createElement('div');
                         var noTickPositionsSpecified = this.options.ticks_positions.length === 0;
                         var tickLabelsIndex = (this.options.reversed && noTickPositionsSpecified) ? (this.options.ticks_labels.length - (i + 1)) : i;
                         label.className = 'slider-tick-label';
                         label.innerHTML = this.options.ticks_labels[tickLabelsIndex];
 
                         this.tickLabels.push(label);
                         this.tickLabelContainer.appendChild(label);
                     }
                 }
 
                 const createAndAppendTooltipSubElements = function(tooltipElem) {
                     var arrow = document.createElement("div");
                     arrow.className = "arrow";
 
                     var inner = document.createElement("div");
                     inner.className = "tooltip-inner";
 
                     tooltipElem.appendChild(arrow);
                     tooltipElem.appendChild(inner);
                 };
 
                 /* Create tooltip elements */
                 const sliderTooltip = document.createElement("div");
                 sliderTooltip.className = "tooltip tooltip-main";
                 sliderTooltip.setAttribute('role', 'presentation');
                 createAndAppendTooltipSubElements(sliderTooltip);
 
                 const sliderTooltipMin = document.createElement("div");
                 sliderTooltipMin.className = "tooltip tooltip-min";
                 sliderTooltipMin.setAttribute('role', 'presentation');
                 createAndAppendTooltipSubElements(sliderTooltipMin);
 
                 const sliderTooltipMax = document.createElement("div");
                 sliderTooltipMax.className = "tooltip tooltip-max";
                 sliderTooltipMax.setAttribute('role', 'presentation');
                 createAndAppendTooltipSubElements(sliderTooltipMax);
 
                 /* Append components to sliderElem */
                 this.sliderElem.appendChild(sliderTrack);
                 this.sliderElem.appendChild(sliderTooltip);
                 this.sliderElem.appendChild(sliderTooltipMin);
                 this.sliderElem.appendChild(sliderTooltipMax);
 
                 if (this.tickLabelContainer) {
                     this.sliderElem.appendChild(this.tickLabelContainer);
                 }
                 if (this.ticksContainer) {
                     this.sliderElem.appendChild(this.ticksContainer);
                 }
 
                 this.sliderElem.appendChild(sliderMinHandle);
                 this.sliderElem.appendChild(sliderMaxHandle);
 
                 /* Append slider element to parent container, right before the original <input> element */
                 parent.insertBefore(this.sliderElem, this.element);
 
                 /* Hide original <input> element */
                 this.element.style.display = "none";
             }
             /* If JQuery exists, cache JQ references */
             if($) {
                 this.$element = $(this.element);
                 this.$sliderElem = $(this.sliderElem);
             }
 
             /*************************************************
 
                                 Setup
 
             **************************************************/
             this.eventToCallbackMap = {};
             this.sliderElem.id = this.options.id;
 
             this.touchCapable = 'ontouchstart' in window || (window.DocumentTouch && document instanceof window.DocumentTouch);
 
             this.touchX = 0;
             this.touchY = 0;
 
             this.tooltip = this.sliderElem.querySelector('.tooltip-main');
             this.tooltipInner = this.tooltip.querySelector('.tooltip-inner');
 
             this.tooltip_min = this.sliderElem.querySelector('.tooltip-min');
             this.tooltipInner_min = this.tooltip_min.querySelector('.tooltip-inner');
 
             this.tooltip_max = this.sliderElem.querySelector('.tooltip-max');
             this.tooltipInner_max= this.tooltip_max.querySelector('.tooltip-inner');
 
             if (SliderScale[this.options.scale]) {
                 this.options.scale = SliderScale[this.options.scale];
             }
 
             if (updateSlider === true) {
                 // Reset classes
                 this._removeClass(this.sliderElem, 'slider-horizontal');
                 this._removeClass(this.sliderElem, 'slider-vertical');
                 this._removeClass(this.sliderElem, 'slider-rtl');
                 this._removeClass(this.tooltip, 'hide');
                 this._removeClass(this.tooltip_min, 'hide');
                 this._removeClass(this.tooltip_max, 'hide');
 
                 // Undo existing inline styles for track
                 ["left", "right", "top", "width", "height"].forEach(function(prop) {
                     this._removeProperty(this.trackLow, prop);
                     this._removeProperty(this.trackSelection, prop);
                     this._removeProperty(this.trackHigh, prop);
                 }, this);
 
                 // Undo inline styles on handles
                 [this.handle1, this.handle2].forEach(function(handle) {
                     this._removeProperty(handle, 'left');
                     this._removeProperty(handle, 'right');
                     this._removeProperty(handle, 'top');
                 }, this);
 
                 // Undo inline styles and classes on tooltips
                 [this.tooltip, this.tooltip_min, this.tooltip_max].forEach(function(tooltip) {
                     this._removeProperty(tooltip, 'bs-tooltip-left');
                     this._removeProperty(tooltip, 'bs-tooltip-right');
                     this._removeProperty(tooltip, 'bs-tooltip-top');
 
                     this._removeClass(tooltip, 'bs-tooltip-right');
                     this._removeClass(tooltip, 'bs-tooltip-left');
                     this._removeClass(tooltip, 'bs-tooltip-top');
                 }, this);
             }
 
             if(this.options.orientation === 'vertical') {
                 this._addClass(this.sliderElem,'slider-vertical');
                 this.stylePos = 'top';
                 this.mousePos = 'pageY';
                 this.sizePos = 'offsetHeight';
             } else {
                 this._addClass(this.sliderElem, 'slider-horizontal');
                 this.sliderElem.style.width = origWidth;
                 this.options.orientation = 'horizontal';
                 if(this.options.rtl) {
                     this.stylePos = 'right';
                 } else {
                     this.stylePos = 'left';
                 }
                 this.mousePos = 'clientX';
                 this.sizePos = 'offsetWidth';
             }
             // specific rtl class
             if (this.options.rtl) {
                 this._addClass(this.sliderElem, 'slider-rtl');
             }
             this._setTooltipPosition();
             /* In case ticks are specified, overwrite the min and max bounds */
             if (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {
                 if (!isMaxSet) {
                     this.options.max = Math.max.apply(Math, this.options.ticks);
                 }
                 if (!isMinSet) {
                     this.options.min = Math.min.apply(Math, this.options.ticks);
                 }
             }
 
             if (Array.isArray(this.options.value)) {
                 this.options.range = true;
                 this._state.value = this.options.value;
             }
             else if (this.options.range) {
                 // User wants a range, but value is not an array
                 this._state.value = [this.options.value, this.options.max];
             }
             else {
                 this._state.value = this.options.value;
             }
 
             this.trackLow = sliderTrackLow || this.trackLow;
             this.trackSelection = sliderTrackSelection || this.trackSelection;
             this.trackHigh = sliderTrackHigh || this.trackHigh;
 
             if (this.options.selection === 'none') {
                 this._addClass(this.trackLow, 'hide');
                 this._addClass(this.trackSelection, 'hide');
                 this._addClass(this.trackHigh, 'hide');
             }
 
             else if (this.options.selection === 'after' || this.options.selection === 'before') {
                 this._removeClass(this.trackLow, 'hide');
                 this._removeClass(this.trackSelection, 'hide');
                 this._removeClass(this.trackHigh, 'hide');
             }
 
             this.handle1 = sliderMinHandle || this.handle1;
             this.handle2 = sliderMaxHandle || this.handle2;
 
             if (updateSlider === true) {
                 // Reset classes
                 this._removeClass(this.handle1, 'round triangle');
                 this._removeClass(this.handle2, 'round triangle hide');
 
                 for (i = 0; i < this.ticks.length; i++) {
                     this._removeClass(this.ticks[i], 'round triangle hide');
                 }
             }
 
             var availableHandleModifiers = ['round', 'triangle', 'custom'];
             var isValidHandleType = availableHandleModifiers.indexOf(this.options.handle) !== -1;
             if (isValidHandleType) {
                 this._addClass(this.handle1, this.options.handle);
                 this._addClass(this.handle2, this.options.handle);
 
                 for (i = 0; i < this.ticks.length; i++) {
                     this._addClass(this.ticks[i], this.options.handle);
                 }
             }
 
             this._state.offset = this._offset(this.sliderElem);
             this._state.size = this.sliderElem[this.sizePos];
             this.setValue(this._state.value);
 
             /******************************************
 
                         Bind Event Listeners
 
             ******************************************/
 
             // Bind keyboard handlers
             this.handle1Keydown = this._keydown.bind(this, 0);
             this.handle1.addEventListener("keydown", this.handle1Keydown, false);
 
             this.handle2Keydown = this._keydown.bind(this, 1);
             this.handle2.addEventListener("keydown", this.handle2Keydown, false);
 
             this.mousedown = this._mousedown.bind(this);
             this.touchstart = this._touchstart.bind(this);
             this.touchmove = this._touchmove.bind(this);
 
             if (this.touchCapable) {
                 this.sliderElem.addEventListener("touchstart", this.touchstart, false);
                 this.sliderElem.addEventListener("touchmove", this.touchmove, false);
             }
 
             this.sliderElem.addEventListener("mousedown", this.mousedown, false);
 
             // Bind window handlers
             this.resize = this._resize.bind(this);
             window.addEventListener("resize", this.resize, false);
 
 
             // Bind tooltip-related handlers
             if(this.options.tooltip === 'hide') {
                 this._addClass(this.tooltip, 'hide');
                 this._addClass(this.tooltip_min, 'hide');
                 this._addClass(this.tooltip_max, 'hide');
             }
             else if(this.options.tooltip === 'always') {
                 this._showTooltip();
                 this._alwaysShowTooltip = true;
             }
             else {
                 this.showTooltip = this._showTooltip.bind(this);
                 this.hideTooltip = this._hideTooltip.bind(this);
 
                 if (this.options.ticks_tooltip) {
                     var callbackHandle = this._addTickListener();
                     //create handle1 listeners and store references in map
                     var mouseEnter = callbackHandle.addMouseEnter(this, this.handle1);
                     var mouseLeave = callbackHandle.addMouseLeave(this, this.handle1);
                     this.handleCallbackMap.handle1 = {
                         mouseEnter: mouseEnter,
                         mouseLeave: mouseLeave
                     };
                     //create handle2 listeners and store references in map
                     mouseEnter = callbackHandle.addMouseEnter(this, this.handle2);
                     mouseLeave = callbackHandle.addMouseLeave(this, this.handle2);
                     this.handleCallbackMap.handle2 = {
                         mouseEnter: mouseEnter,
                         mouseLeave: mouseLeave
                     };
                 } else {
                     this.sliderElem.addEventListener("mouseenter", this.showTooltip, false);
                     this.sliderElem.addEventListener("mouseleave", this.hideTooltip, false);
 
                     if (this.touchCapable) {
                         this.sliderElem.addEventListener("touchstart", this.showTooltip, false);
                         this.sliderElem.addEventListener("touchmove", this.showTooltip, false);
                         this.sliderElem.addEventListener("touchend", this.hideTooltip, false);
                     }
                 }
 
                 this.handle1.addEventListener("focus", this.showTooltip, false);
                 this.handle1.addEventListener("blur", this.hideTooltip, false);
 
                 
                 this.handle2.addEventListener("focus", this.showTooltip, false);
                 this.handle2.addEventListener("blur", this.hideTooltip, false);
 
                 if (this.touchCapable) {
                     this.handle1.addEventListener("touchstart", this.showTooltip, false);
                     this.handle1.addEventListener("touchmove", this.showTooltip, false);
                     this.handle1.addEventListener("touchend", this.hideTooltip, false);
 
                     this.handle2.addEventListener("touchstart", this.showTooltip, false);
                     this.handle2.addEventListener("touchmove", this.showTooltip, false);
                     this.handle2.addEventListener("touchend", this.hideTooltip, false);
                 }
             }
 
             if(this.options.enabled) {
                 this.enable();
             } else {
                 this.disable();
             }
 
         }
 
         /*************************************************
 
                     INSTANCE PROPERTIES/METHODS
 
         - Any methods bound to the prototype are considered
         part of the plugin's `public` interface
 
         **************************************************/
         Slider.prototype = {
             _init: function() {}, // NOTE: Must exist to support bridget
 
             constructor: Slider,
 
             defaultOptions: {
                 id: "",
                 min: 0,
                 max: 10,
                 step: 1,
                 precision: 0,
                 orientation: 'horizontal',
                 value: 5,
                 range: false,
                 selection: 'before',
                 tooltip: 'show',
                 tooltip_split: false,
                 lock_to_ticks: false,
                 handle: 'round',
                 reversed: false,
                 rtl: 'auto',
                 enabled: true,
                 formatter: function(val) {
                     if (Array.isArray(val)) {
                         return val[0] + " : " + val[1];
                     } else {
                         return val;
                     }
                 },
                 natural_arrow_keys: false,
                 ticks: [],
                 ticks_positions: [],
                 ticks_labels: [],
                 ticks_snap_bounds: 0,
                 ticks_tooltip: false,
                 scale: 'linear',
                 focus: false,
                 tooltip_position: null,
                 labelledby: null,
                 rangeHighlights: []
             },
 
             getElement: function() {
                 return this.sliderElem;
             },
 
             getValue: function() {
                 if (this.options.range) {
                     return this._state.value;
                 }
                 else {
                     return this._state.value[0];
                 }
             },
 
             setValue: function(val, triggerSlideEvent, triggerChangeEvent) {
                 if (!val) {
                     val = 0;
                 }
                 var oldValue = this.getValue();
                 this._state.value = this._validateInputValue(val);
                 var applyPrecision = this._applyPrecision.bind(this);
 
                 if (this.options.range) {
                     this._state.value[0] = applyPrecision(this._state.value[0]);
                     this._state.value[1] = applyPrecision(this._state.value[1]);
 
                     if (this.ticksAreValid && this.options.lock_to_ticks) {
                         this._state.value[0] = this.options.ticks[this._getClosestTickIndex(this._state.value[0])];
                         this._state.value[1] = this.options.ticks[this._getClosestTickIndex(this._state.value[1])];
                     }
 
                     this._state.value[0] = Math.max(this.options.min, Math.min(this.options.max, this._state.value[0]));
                     this._state.value[1] = Math.max(this.options.min, Math.min(this.options.max, this._state.value[1]));
                 }
                 else {
                     this._state.value = applyPrecision(this._state.value);
 
                     if (this.ticksAreValid && this.options.lock_to_ticks) {
                         this._state.value = this.options.ticks[this._getClosestTickIndex(this._state.value)];
                     }
 
                     this._state.value = [ Math.max(this.options.min, Math.min(this.options.max, this._state.value))];
                     this._addClass(this.handle2, 'hide');
                     if (this.options.selection === 'after') {
                         this._state.value[1] = this.options.max;
                     } else {
                         this._state.value[1] = this.options.min;
                     }
                 }
 
                 // Determine which ticks the handle(s) are set at (if applicable)
                 this._setTickIndex();
 
                 if (this.options.max > this.options.min) {
                     this._state.percentage = [
                         this._toPercentage(this._state.value[0]),
                         this._toPercentage(this._state.value[1]),
                         this.options.step * 100 / (this.options.max - this.options.min)
                     ];
                 } else {
                     this._state.percentage = [0, 0, 100];
                 }
 
                 this._layout();
                 var newValue = this.options.range ? this._state.value : this._state.value[0];
 
                 this._setDataVal(newValue);
                 if(triggerSlideEvent === true) {
                     this._trigger('slide', newValue);
                 }
 
                 var hasChanged = false;
                 if (Array.isArray(newValue)) {
                     hasChanged = oldValue[0] !== newValue[0] || oldValue[1] !== newValue[1];
                 }
                 else {
                     hasChanged = oldValue !== newValue;
                 }
 
                 if( hasChanged && (triggerChangeEvent === true) ) {
                     this._trigger('change', {
                         oldValue: oldValue,
                         newValue: newValue
                     });
                 }
 
                 return this;
             },
 
             destroy: function(){
                 // Remove event handlers on slider elements
                 this._removeSliderEventHandlers();
 
                 // Remove the slider from the DOM
                 this.sliderElem.parentNode.removeChild(this.sliderElem);
                 /* Show original <input> element */
                 this.element.style.display = "";
 
                 // Clear out custom event bindings
                 this._cleanUpEventCallbacksMap();
 
                 // Remove data values
                 this.element.removeAttribute("data");
 
                 // Remove JQuery handlers/data
                 if($) {
                     this._unbindJQueryEventHandlers();
                     if (autoRegisterNamespace === NAMESPACE_MAIN) {
                         this.$element.removeData(autoRegisterNamespace);
                     }
                     this.$element.removeData(NAMESPACE_ALTERNATE);
                 }
             },
 
             disable: function() {
                 this._state.enabled = false;
                 this.handle1.removeAttribute("tabindex");
                 this.handle2.removeAttribute("tabindex");
                 this._addClass(this.sliderElem, 'slider-disabled');
                 this._trigger('slideDisabled');
 
                 return this;
             },
 
             enable: function() {
                 this._state.enabled = true;
                 this.handle1.setAttribute("tabindex", 0);
                 this.handle2.setAttribute("tabindex", 0);
                 this._removeClass(this.sliderElem, 'slider-disabled');
                 this._trigger('slideEnabled');
 
                 return this;
             },
 
             toggle: function() {
                 if(this._state.enabled) {
                     this.disable();
                 } else {
                     this.enable();
                 }
                 return this;
             },
 
             isEnabled: function() {
                 return this._state.enabled;
             },
 
             on: function(evt, callback) {
                 this._bindNonQueryEventHandler(evt, callback);
                 return this;
             },
 
             off: function(evt, callback) {
                 if($) {
                     this.$element.off(evt, callback);
                     this.$sliderElem.off(evt, callback);
                 } else {
                     this._unbindNonQueryEventHandler(evt, callback);
                 }
             },
 
             getAttribute: function(attribute) {
                 if(attribute) {
                     return this.options[attribute];
                 } else {
                     return this.options;
                 }
             },
 
             setAttribute: function(attribute, value) {
                 this.options[attribute] = value;
                 return this;
             },
 
             refresh: function(options) {
                 const currentValue = this.getValue();
                 this._removeSliderEventHandlers();
                 createNewSlider.call(this, this.element, this.options);
                 // Don't reset slider's value on refresh if `useCurrentValue` is true
                 if (options && options.useCurrentValue === true) {
                     this.setValue(currentValue);
                 }
                 if($) {
                     // Bind new instance of slider to the element
                     if (autoRegisterNamespace === NAMESPACE_MAIN) {
                         $.data(this.element, NAMESPACE_MAIN, this);
                         $.data(this.element, NAMESPACE_ALTERNATE, this);
                     }
                     else {
                         $.data(this.element, NAMESPACE_ALTERNATE, this);
                     }
                 }
                 return this;
             },
 
             relayout: function() {
                 this._resize();
                 return this;
             },
 
             /******************************+
 
                         HELPERS
 
             - Any method that is not part of the public interface.
             - Place it underneath this comment block and write its signature like so:
 
                 _fnName : function() {...}
 
             ********************************/
             _removeTooltipListener: function(event, handler) {
                 this.handle1.removeEventListener(event, handler, false);
                 this.handle2.removeEventListener(event, handler, false);
             },
             _removeSliderEventHandlers: function() {
                 // Remove keydown event listeners
                 this.handle1.removeEventListener("keydown", this.handle1Keydown, false);
                 this.handle2.removeEventListener("keydown", this.handle2Keydown, false);
 
                 //remove the listeners from the ticks and handles if they had their own listeners
                 if (this.options.ticks_tooltip) {
                     var ticks = this.ticksContainer.getElementsByClassName('slider-tick');
                     for(var i = 0; i < ticks.length; i++ ){
                         ticks[i].removeEventListener('mouseenter', this.ticksCallbackMap[i].mouseEnter, false);
                         ticks[i].removeEventListener('mouseleave', this.ticksCallbackMap[i].mouseLeave, false);
                     }
                     if (this.handleCallbackMap.handle1 && this.handleCallbackMap.handle2) {
                         this.handle1.removeEventListener('mouseenter', this.handleCallbackMap.handle1.mouseEnter, false);
                         this.handle2.removeEventListener('mouseenter', this.handleCallbackMap.handle2.mouseEnter, false);
                         this.handle1.removeEventListener('mouseleave', this.handleCallbackMap.handle1.mouseLeave, false);
                         this.handle2.removeEventListener('mouseleave', this.handleCallbackMap.handle2.mouseLeave, false);
                     }
                 }
 
                 this.handleCallbackMap = null;
                 this.ticksCallbackMap = null;
 
                 if (this.showTooltip) {
                     this._removeTooltipListener("focus", this.showTooltip);
                 }
                 if (this.hideTooltip) {
                     this._removeTooltipListener("blur", this.hideTooltip);
                 }
 
                 // Remove event listeners from sliderElem
                 if (this.showTooltip) {
                     this.sliderElem.removeEventListener("mouseenter", this.showTooltip, false);
                 }
                 if (this.hideTooltip) {
                     this.sliderElem.removeEventListener("mouseleave", this.hideTooltip, false);
                 }
 
                 this.sliderElem.removeEventListener("mousedown", this.mousedown, false);
 
                 if (this.touchCapable) {
                     // Remove touch event listeners from handles
                     if (this.showTooltip) {
                         this.handle1.removeEventListener("touchstart", this.showTooltip, false);
                         this.handle1.removeEventListener("touchmove", this.showTooltip, false);
                         this.handle2.removeEventListener("touchstart", this.showTooltip, false);
                         this.handle2.removeEventListener("touchmove", this.showTooltip, false);
                     }
                     if (this.hideTooltip) {
                         this.handle1.removeEventListener("touchend", this.hideTooltip, false);
                         this.handle2.removeEventListener("touchend", this.hideTooltip, false);
                     }
 
                     // Remove event listeners from sliderElem
                     if (this.showTooltip) {
                         this.sliderElem.removeEventListener("touchstart", this.showTooltip, false);
                         this.sliderElem.removeEventListener("touchmove", this.showTooltip, false);
                     }
                     if (this.hideTooltip) {
                         this.sliderElem.removeEventListener("touchend", this.hideTooltip, false);
                     }
 
                     this.sliderElem.removeEventListener("touchstart", this.touchstart, false);
                     this.sliderElem.removeEventListener("touchmove", this.touchmove, false);
                 }
 
                 // Remove window event listener
                 window.removeEventListener("resize", this.resize, false);
             },
             _bindNonQueryEventHandler: function(evt, callback) {
                 if(this.eventToCallbackMap[evt] === undefined) {
                     this.eventToCallbackMap[evt] = [];
                 }
                 this.eventToCallbackMap[evt].push(callback);
             },
             _unbindNonQueryEventHandler: function(evt, callback) {
                 var callbacks = this.eventToCallbackMap[evt];
                 if(callbacks !== undefined) {
                     for (var i = 0; i < callbacks.length; i++) {
                         if (callbacks[i] === callback) {
                             callbacks.splice(i, 1);
                             break;
                         }
                     }
                 }
             },
             _cleanUpEventCallbacksMap: function() {
                 var eventNames = Object.keys(this.eventToCallbackMap);
                 for(var i = 0; i < eventNames.length; i++) {
                     var eventName = eventNames[i];
                     delete this.eventToCallbackMap[eventName];
                 }
             },
             _showTooltip: function() {
                 if (this.options.tooltip_split === false ){
                     this._addClass(this.tooltip, 'show');
                     this.tooltip_min.style.display = 'none';
                     this.tooltip_max.style.display = 'none';
                 } else {
                     this._addClass(this.tooltip_min, 'show');
                     this._addClass(this.tooltip_max, 'show');
                     this.tooltip.style.display = 'none';
                 }
                 this._state.over = true;
             },
             _hideTooltip: function() {
                 if (this._state.inDrag === false && this._alwaysShowTooltip !== true) {
                     this._removeClass(this.tooltip, 'show');
                     this._removeClass(this.tooltip_min, 'show');
                     this._removeClass(this.tooltip_max, 'show');
                 }
                 this._state.over = false;
             },
             _setToolTipOnMouseOver: function _setToolTipOnMouseOver(tempState){
                 let self = this;
                 var formattedTooltipVal = this.options.formatter(!tempState ? this._state.value[0]: tempState.value[0]);
                 var positionPercentages = !tempState ? getPositionPercentages(this._state, this.options.reversed) : getPositionPercentages(tempState, this.options.reversed);
                 this._setText(this.tooltipInner, formattedTooltipVal);
 
                 this.tooltip.style[this.stylePos] = `${positionPercentages[0]}%`;
 
                 function getPositionPercentages(state, reversed){
                     if (reversed) {
                         return [100 - state.percentage[0], self.options.range ? 100 - state.percentage[1] : state.percentage[1]];
                     }
                     return [state.percentage[0], state.percentage[1]];
                 }
             },
             _copyState: function() {
                 return {
                     value: [ this._state.value[0], this._state.value[1] ],
                     enabled: this._state.enabled,
                     offset: this._state.offset,
                     size: this._state.size,
                     percentage: [ this._state.percentage[0], this._state.percentage[1], this._state.percentage[2] ],
                     inDrag: this._state.inDrag,
                     over: this._state.over,
                     // deleted or null'd keys
                     dragged: this._state.dragged,
                     keyCtrl: this._state.keyCtrl
                 };
             },
             _addTickListener: function _addTickListener() {
                 return {
                     addMouseEnter: function(reference, element, index){
                         var enter = function(){
                             let tempState = reference._copyState();
                             // Which handle is being hovered over?
                             let val = element === reference.handle1 ? tempState.value[0] : tempState.value[1];
                             let per;
 
                             // Setup value and percentage for tick's 'mouseenter'
                             if (index !== undefined) {
                                 val = reference.options.ticks[index];
                                 per = (reference.options.ticks_positions.length > 0 && reference.options.ticks_positions[index]) ||
                                     reference._toPercentage(reference.options.ticks[index]);
                             }
                             else {
                                 per = reference._toPercentage(val);
                             }
 
                             tempState.value[0] = val;
                             tempState.percentage[0] = per;
                             reference._setToolTipOnMouseOver(tempState);
                             reference._showTooltip();
                         };
                         element.addEventListener("mouseenter", enter, false);
                         return enter;
                     },
                     addMouseLeave: function(reference, element){
                         var leave = function(){
                             reference._hideTooltip();
                         };
                         element.addEventListener("mouseleave", leave, false);
                         return leave;
                     }
                 };
             },
             _layout: function() {
                 var positionPercentages;
                 var formattedValue;
 
                 if(this.options.reversed) {
                     positionPercentages = [ 100 - this._state.percentage[0], this.options.range ? 100 - this._state.percentage[1] : this._state.percentage[1]];
                 }
                 else {
                     positionPercentages = [ this._state.percentage[0], this._state.percentage[1] ];
                 }
 
                 this.handle1.style[this.stylePos] = `${positionPercentages[0]}%`;
                 this.handle1.setAttribute('aria-valuenow', this._state.value[0]);
                 formattedValue = this.options.formatter(this._state.value[0]);
                 if (isNaN(formattedValue)) {
                     this.handle1.setAttribute('aria-valuetext', formattedValue);
                 }
                 else {
                     this.handle1.removeAttribute('aria-valuetext');
                 }
 
                 this.handle2.style[this.stylePos] =`${positionPercentages[1]}%`;
                 this.handle2.setAttribute('aria-valuenow', this._state.value[1]);
                 formattedValue = this.options.formatter(this._state.value[1]);
                 if (isNaN(formattedValue)) {
                     this.handle2.setAttribute('aria-valuetext', formattedValue);
                 }
                 else {
                     this.handle2.removeAttribute('aria-valuetext');
                 }
 
                 /* Position highlight range elements */
                 if (this.rangeHighlightElements.length > 0 && Array.isArray(this.options.rangeHighlights) && this.options.rangeHighlights.length > 0) {
                     for (let i = 0; i < this.options.rangeHighlights.length; i++) {
                         var startPercent = this._toPercentage(this.options.rangeHighlights[i].start);
                         var endPercent = this._toPercentage(this.options.rangeHighlights[i].end);
 
                         if (this.options.reversed) {
                             var sp = 100-endPercent;
                             endPercent = 100-startPercent;
                             startPercent = sp;
                         }
 
                         var currentRange = this._createHighlightRange(startPercent, endPercent);
 
                         if (currentRange) {
                             if (this.options.orientation === 'vertical') {
                                 this.rangeHighlightElements[i].style.top = `${currentRange.start}%`;
                                 this.rangeHighlightElements[i].style.height = `${currentRange.size}%`;
                             } else {
                                 if(this.options.rtl){
                                     this.rangeHighlightElements[i].style.right = `${currentRange.start}%`;
                                 } else {
                                     this.rangeHighlightElements[i].style.left = `${currentRange.start}%`;
                                 }
                                 this.rangeHighlightElements[i].style.width = `${currentRange.size}%`;
                             }
                         } else {
                             this.rangeHighlightElements[i].style.display = "none";
                         }
                     }
                 }
 
                 /* Position ticks and labels */
                 if (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {
 
                     var styleSize = this.options.orientation === 'vertical' ? 'height' : 'width';
                     var styleMargin;
                     if( this.options.orientation === 'vertical' ){
                         styleMargin='marginTop';
                     }else {
                         if( this.options.rtl ){
                             styleMargin='marginRight';
                         } else {
                             styleMargin='marginLeft';
                         }
                     }
                     var labelSize = this._state.size / (this.options.ticks.length - 1);
 
                     if (this.tickLabelContainer) {
                         var extraMargin = 0;
                         if (this.options.ticks_positions.length === 0) {
                             if (this.options.orientation !== 'vertical') {
                                 this.tickLabelContainer.style[styleMargin] = `${ -labelSize/2 }px`;
                             }
 
                             extraMargin = this.tickLabelContainer.offsetHeight;
                         } else {
                             /* Chidren are position absolute, calculate height by finding the max offsetHeight of a child */
                             for (i = 0 ; i < this.tickLabelContainer.childNodes.length; i++) {
                                 if (this.tickLabelContainer.childNodes[i].offsetHeight > extraMargin) {
                                     extraMargin = this.tickLabelContainer.childNodes[i].offsetHeight;
                                 }
                             }
                         }
                         if (this.options.orientation === 'horizontal') {
                             this.sliderElem.style.marginBottom = `${ extraMargin }px`;
                         }
                     }
                     for (var i = 0; i < this.options.ticks.length; i++) {
 
                         var percentage = this.options.ticks_positions[i] || this._toPercentage(this.options.ticks[i]);
 
                         if (this.options.reversed) {
                             percentage = 100 - percentage;
                         }
 
                         this.ticks[i].style[this.stylePos] = `${ percentage }%`;
 
                         /* Set class labels to denote whether ticks are in the selection */
                         this._removeClass(this.ticks[i], 'in-selection');
                         if (!this.options.range) {
                             if (this.options.selection === 'after' && percentage >= positionPercentages[0]){
                                 this._addClass(this.ticks[i], 'in-selection');
                             } else if (this.options.selection === 'before' && percentage <= positionPercentages[0]) {
                                 this._addClass(this.ticks[i], 'in-selection');
                             }
                         } else if (percentage >= positionPercentages[0] && percentage <= positionPercentages[1]) {
                             this._addClass(this.ticks[i], 'in-selection');
                         }
 
                         if (this.tickLabels[i]) {
                             this.tickLabels[i].style[styleSize] = `${labelSize}px`;
 
                             if (this.options.orientation !== 'vertical' && this.options.ticks_positions[i] !== undefined) {
                                 this.tickLabels[i].style.position = 'absolute';
                                 this.tickLabels[i].style[this.stylePos] = `${percentage}%`;
                                 this.tickLabels[i].style[styleMargin] = -labelSize/2 + 'px';
                             } else if (this.options.orientation === 'vertical') {
                                 if(this.options.rtl){
                                     this.tickLabels[i].style['marginRight'] = `${this.sliderElem.offsetWidth }px`;
                                 }else{
                                     this.tickLabels[i].style['marginLeft'] = `${this.sliderElem.offsetWidth }px`;
                                 }
                                 this.tickLabelContainer.style[styleMargin] = this.sliderElem.offsetWidth / 2 * -1 + 'px';
                             }
 
                             /* Set class labels to indicate tick labels are in the selection or selected */
                             this._removeClass(this.tickLabels[i], 'label-in-selection label-is-selection');
                             if (!this.options.range) {
                                 if (this.options.selection === 'after' && percentage >= positionPercentages[0]) {
                                     this._addClass(this.tickLabels[i], 'label-in-selection');
                                 } else if (this.options.selection === 'before' && percentage <= positionPercentages[0]) {
                                     this._addClass(this.tickLabels[i], 'label-in-selection');
                                 }
                                 if (percentage === positionPercentages[0]) {
                                     this._addClass(this.tickLabels[i], 'label-is-selection');
                                 }
                             } else if (percentage >= positionPercentages[0] && percentage <= positionPercentages[1]) {
                                 this._addClass(this.tickLabels[i], 'label-in-selection');
                                 if (percentage === positionPercentages[0] || positionPercentages[1]) {
                                     this._addClass(this.tickLabels[i], 'label-is-selection');
                                 }
                             }
                         }
                     }
                 }
 
                 var formattedTooltipVal;
 
                 if (this.options.range) {
                     formattedTooltipVal = this.options.formatter(this._state.value);
                     this._setText(this.tooltipInner, formattedTooltipVal);
                     this.tooltip.style[this.stylePos] = `${ (positionPercentages[1] + positionPercentages[0])/2 }%`;
 
                     var innerTooltipMinText = this.options.formatter(this._state.value[0]);
                     this._setText(this.tooltipInner_min, innerTooltipMinText);
 
                     var innerTooltipMaxText = this.options.formatter(this._state.value[1]);
                     this._setText(this.tooltipInner_max, innerTooltipMaxText);
 
                     this.tooltip_min.style[this.stylePos] = `${ positionPercentages[0] }%`;
 
                     this.tooltip_max.style[this.stylePos] = `${ positionPercentages[1] }%`;
 
                 } else {
                     formattedTooltipVal = this.options.formatter(this._state.value[0]);
                     this._setText(this.tooltipInner, formattedTooltipVal);
 
                     this.tooltip.style[this.stylePos] = `${ positionPercentages[0] }%`;
                 }
 
                 if (this.options.orientation === 'vertical') {
                     this.trackLow.style.top = '0';
                     this.trackLow.style.height = Math.min(positionPercentages[0], positionPercentages[1]) +'%';
 
                     this.trackSelection.style.top = Math.min(positionPercentages[0], positionPercentages[1]) +'%';
                     this.trackSelection.style.height = Math.abs(positionPercentages[0] - positionPercentages[1]) +'%';
 
                     this.trackHigh.style.bottom = '0';
                     this.trackHigh.style.height = (100 - Math.min(positionPercentages[0], positionPercentages[1]) - Math.abs(positionPercentages[0] - positionPercentages[1])) +'%';
                 }
                 else {
                     if(this.stylePos==='right') {
                         this.trackLow.style.right = '0';
                     } else {
                         this.trackLow.style.left = '0';
                     }
                     this.trackLow.style.width = Math.min(positionPercentages[0], positionPercentages[1]) +'%';
 
                     if(this.stylePos==='right') {
                         this.trackSelection.style.right = Math.min(positionPercentages[0], positionPercentages[1]) + '%';
                     } else {
                         this.trackSelection.style.left = Math.min(positionPercentages[0], positionPercentages[1]) + '%';
                     }
                     this.trackSelection.style.width = Math.abs(positionPercentages[0] - positionPercentages[1]) +'%';
 
                     if(this.stylePos==='right') {
                         this.trackHigh.style.left = '0';
                     } else {
                         this.trackHigh.style.right = '0';
                     }
                     this.trackHigh.style.width = (100 - Math.min(positionPercentages[0], positionPercentages[1]) - Math.abs(positionPercentages[0] - positionPercentages[1])) +'%';
 
                     var offset_min = this.tooltip_min.getBoundingClientRect();
                     var offset_max = this.tooltip_max.getBoundingClientRect();
 
                     if (this.options.tooltip_position === 'bottom') {
                         if (offset_min.right > offset_max.left) {
                             this._removeClass(this.tooltip_max, 'bs-tooltip-bottom');
                             this._addClass(this.tooltip_max, 'bs-tooltip-top');
                             this.tooltip_max.style.top = '';
                             this.tooltip_max.style.bottom = 22 + 'px';
                         } else {
                             this._removeClass(this.tooltip_max, 'bs-tooltip-top');
                             this._addClass(this.tooltip_max, 'bs-tooltip-bottom');
                             this.tooltip_max.style.top = this.tooltip_min.style.top;
                             this.tooltip_max.style.bottom = '';
                         }
                     } else {
                         if (offset_min.right > offset_max.left) {
                             this._removeClass(this.tooltip_max, 'bs-tooltip-top');
                             this._addClass(this.tooltip_max, 'bs-tooltip-bottom');
                             this.tooltip_max.style.top = 18 + 'px';
                         } else {
                             this._removeClass(this.tooltip_max, 'bs-tooltip-bottom');
                             this._addClass(this.tooltip_max, 'bs-tooltip-top');
                             this.tooltip_max.style.top = this.tooltip_min.style.top;
                         }
                     }
                 }
             },
             _createHighlightRange: function (start, end) {
                 if (this._isHighlightRange(start, end)) {
                     if (start > end) {
                         return {'start': end, 'size': start - end};
                     }
                     return {'start': start, 'size': end - start};
                 }
                 return null;
             },
             _isHighlightRange: function (start, end) {
                 if (0 <= start && start <= 100 && 0 <= end && end <= 100) {
                     return true;
                 }
                 else {
                     return false;
                 }
             },
             _resize: function (ev) {
                 /*jshint unused:false*/
                 this._state.offset = this._offset(this.sliderElem);
                 this._state.size = this.sliderElem[this.sizePos];
                 this._layout();
             },
             _removeProperty: function(element, prop) {
                 if (element.style.removeProperty) {
                     element.style.removeProperty(prop);
                 } else {
                     element.style.removeAttribute(prop);
                 }
             },
             _mousedown: function(ev) {
                 if(!this._state.enabled) {
                     return false;
                 }
 
                 if (ev.preventDefault){
                     ev.preventDefault();
                 }
 
                 this._state.offset = this._offset(this.sliderElem);
                 this._state.size = this.sliderElem[this.sizePos];
 
                 var percentage = this._getPercentage(ev);
 
                 if (this.options.range) {
                     var diff1 = Math.abs(this._state.percentage[0] - percentage);
                     var diff2 = Math.abs(this._state.percentage[1] - percentage);
                     this._state.dragged = (diff1 < diff2) ? 0 : 1;
                     this._adjustPercentageForRangeSliders(percentage);
                 } else {
                     this._state.dragged = 0;
                 }
 
                 this._state.percentage[this._state.dragged] = percentage;
 
                 if (this.touchCapable) {
                     document.removeEventListener("touchmove", this.mousemove, false);
                     document.removeEventListener("touchend", this.mouseup, false);
                 }
 
                 if(this.mousemove){
                     document.removeEventListener("mousemove", this.mousemove, false);
                 }
                 if(this.mouseup){
                     document.removeEventListener("mouseup", this.mouseup, false);
                 }
 
                 this.mousemove = this._mousemove.bind(this);
                 this.mouseup = this._mouseup.bind(this);
 
                 if (this.touchCapable) {
                     // Touch: Bind touch events:
                     document.addEventListener("touchmove", this.mousemove, false);
                     document.addEventListener("touchend", this.mouseup, false);
                 }
                 // Bind mouse events:
                 document.addEventListener("mousemove", this.mousemove, false);
                 document.addEventListener("mouseup", this.mouseup, false);
 
                 this._state.inDrag = true;
                 var newValue = this._calculateValue();
 
                 this._trigger('slideStart', newValue);
 
                 this.setValue(newValue, false, true);
 
                 ev.returnValue = false;
 
                 if (this.options.focus) {
                     this._triggerFocusOnHandle(this._state.dragged);
                 }
 
                 return true;
             },
             _touchstart: function(ev) {
                 this._mousedown(ev);
             },
             _triggerFocusOnHandle: function(handleIdx) {
                 if(handleIdx === 0) {
                     this.handle1.focus();
                 }
                 if(handleIdx === 1) {
                     this.handle2.focus();
                 }
             },
             _keydown: function(handleIdx, ev) {
                 if(!this._state.enabled) {
                     return false;
                 }
 
                 var dir;
                 switch (ev.keyCode) {
                     case 37: // left
                     case 40: // down
                         dir = -1;
                         break;
                     case 39: // right
                     case 38: // up
                         dir = 1;
                         break;
                 }
                 if (!dir) {
                     return;
                 }
 
                 // use natural arrow keys instead of from min to max
                 if (this.options.natural_arrow_keys) {
                     const isHorizontal = this.options.orientation === 'horizontal';
                     const isVertical = this.options.orientation === 'vertical';
                     const isRTL = this.options.rtl;
                     const isReversed = this.options.reversed;
 
                     if (isHorizontal) {
                         if (isRTL) {
                             if (!isReversed) {
                                 dir = -dir;
                             }
                         }
                         else {
                             if (isReversed) {
                                 dir = -dir;
                             }
                         }
                     }
                     else if (isVertical) {
                         if (!isReversed) {
                             dir = -dir;
                         }
                     }
                 }
 
                 var val;
                 if (this.ticksAreValid && this.options.lock_to_ticks) {
                     let index;
                     // Find tick index that handle 1/2 is currently on
                     index = this.options.ticks.indexOf(this._state.value[handleIdx]);
                     if (index === -1) {
                         // Set default to first tick
                         index = 0;
                         window.console.warn('(lock_to_ticks) _keydown: index should not be -1');
                     }
                     index += dir;
                     index = Math.max(0, Math.min(this.options.ticks.length-1, index));
                     val = this.options.ticks[index];
                 }
                 else {
                     val = this._state.value[handleIdx] + dir * this.options.step;
                 }
                 const percentage = this._toPercentage(val);
                 this._state.keyCtrl = handleIdx;
                 if (this.options.range) {
                     this._adjustPercentageForRangeSliders(percentage);
                     const val1 = (!this._state.keyCtrl) ? val : this._state.value[0];
                     const val2 = (this._state.keyCtrl) ? val : this._state.value[1];
                     // Restrict values within limits
                     val = [ Math.max(this.options.min, Math.min(this.options.max, val1)),
                         Math.max(this.options.min, Math.min(this.options.max, val2)) ];
                 }
                 else {
                     val = Math.max(this.options.min, Math.min(this.options.max, val));
                 }
 
                 this._trigger('slideStart', val);
 
                 this.setValue(val, true, true);
 
                 this._trigger('slideStop', val);
 
                 this._pauseEvent(ev);
                 delete this._state.keyCtrl;
 
                 return false;
             },
             _pauseEvent: function(ev) {
                 if(ev.stopPropagation) {
                     ev.stopPropagation();
                 }
                 if(ev.preventDefault) {
                     ev.preventDefault();
                 }
                 ev.cancelBubble=true;
                 ev.returnValue=false;
             },
             _mousemove: function(ev) {
                 if(!this._state.enabled) {
                     return false;
                 }
 
                 var percentage = this._getPercentage(ev);
                 this._adjustPercentageForRangeSliders(percentage);
                 this._state.percentage[this._state.dragged] = percentage;
 
                 var val = this._calculateValue(true);
                 this.setValue(val, true, true);
 
                 return false;
             },
             _touchmove: function(ev) {
                 if (ev.changedTouches === undefined) {
                     return;
                 }
 
                 // Prevent page from scrolling and only drag the slider
                 if(ev.preventDefault) {
                     ev.preventDefault();
                 }
             },
             _adjustPercentageForRangeSliders: function(percentage) {
                 if (this.options.range) {
                     var precision = this._getNumDigitsAfterDecimalPlace(percentage);
                     precision = precision ? precision - 1 : 0;
                     var percentageWithAdjustedPrecision = this._applyToFixedAndParseFloat(percentage, precision);
                     if (this._state.dragged === 0 && this._applyToFixedAndParseFloat(this._state.percentage[1], precision) < percentageWithAdjustedPrecision) {
                         this._state.percentage[0] = this._state.percentage[1];
                         this._state.dragged = 1;
                     } else if (this._state.dragged === 1 && this._applyToFixedAndParseFloat(this._state.percentage[0], precision) > percentageWithAdjustedPrecision) {
                         this._state.percentage[1] = this._state.percentage[0];
                         this._state.dragged = 0;
                     }
                     else if (this._state.keyCtrl === 0 && (this._toPercentage(this._state.value[1]) < percentage)) {
                         this._state.percentage[0] = this._state.percentage[1];
                         this._state.keyCtrl = 1;
                         this.handle2.focus();
                     }
                     else if (this._state.keyCtrl === 1 && (this._toPercentage(this._state.value[0]) > percentage)) {
                         this._state.percentage[1] = this._state.percentage[0];
                         this._state.keyCtrl = 0;
                         this.handle1.focus();
                     }
                 }
             },
             _mouseup: function(ev) {
                 if(!this._state.enabled) {
                     return false;
                 }
 
                 var percentage = this._getPercentage(ev);
                 this._adjustPercentageForRangeSliders(percentage);
                 this._state.percentage[this._state.dragged] = percentage;
 
                 if (this.touchCapable) {
                     // Touch: Unbind touch event handlers:
                     document.removeEventListener("touchmove", this.mousemove, false);
                     document.removeEventListener("touchend", this.mouseup, false);
                 }
                 // Unbind mouse event handlers:
                 document.removeEventListener("mousemove", this.mousemove, false);
                 document.removeEventListener("mouseup", this.mouseup, false);
 
                 this._state.inDrag = false;
                 if (this._state.over === false) {
                     this._hideTooltip();
                 }
                 var val = this._calculateValue(true);
 
                 this.setValue(val, false, true);
                 this._trigger('slideStop', val);
 
                 // No longer need 'dragged' after mouse up
                 this._state.dragged = null;
 
                 return false;
             },
             _setValues: function(index, val) {
                 const comp = (0 === index) ? 0 : 100;
                 if (this._state.percentage[index] !== comp) {
                     val.data[index] = this._toValue(this._state.percentage[index]);
                     val.data[index] = this._applyPrecision(val.data[index]);
                 }
             },
             _calculateValue: function(snapToClosestTick) {
                 let val = {};
                 if (this.options.range) {
                     val.data = [this.options.min, this.options.max];
                     this._setValues(0, val);
                     this._setValues(1, val);
                     if (snapToClosestTick) {
                         val.data[0] = this._snapToClosestTick(val.data[0]);
                         val.data[1] = this._snapToClosestTick(val.data[1]);
                     }
                 } else {
                     val.data = this._toValue(this._state.percentage[0]);
                     val.data = parseFloat(val.data);
                     val.data = this._applyPrecision(val.data);
                     if (snapToClosestTick) {
                         val.data = this._snapToClosestTick(val.data);
                     }
                 }
 
                 return val.data;
             },
             _snapToClosestTick(val){
                 var min = [val, Infinity];
                 for (var i = 0; i < this.options.ticks.length; i++) {
                     var diff = Math.abs(this.options.ticks[i] - val);
                     if (diff <= min[1]) {
                         min = [this.options.ticks[i], diff];
                     }
                 }
                 if (min[1] <= this.options.ticks_snap_bounds) {
                     return min[0];
                 }
                 return val;
             },
             _applyPrecision: function(val) {
                 var precision = this.options.precision || this._getNumDigitsAfterDecimalPlace(this.options.step);
                 return this._applyToFixedAndParseFloat(val, precision);
             },
             _getNumDigitsAfterDecimalPlace: function(num) {
                 var match = (''+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
                 if (!match) { return 0; }
                 return Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0));
             },
             _applyToFixedAndParseFloat: function(num, toFixedInput) {
                 var truncatedNum = num.toFixed(toFixedInput);
                 return parseFloat(truncatedNum);
             },
             /*
                 Credits to Mike Samuel for the following method!
                 Source: http://stackoverflow.com/questions/10454518/javascript-how-to-retrieve-the-number-of-decimals-of-a-string-number
             */
             _getPercentage: function(ev) {
                 if (this.touchCapable && (ev.type === 'touchstart' || ev.type === 'touchmove' || ev.type === 'touchend')) {
                     ev = ev.changedTouches[0];
                 }
 
                 var eventPosition = ev[this.mousePos];
                 var sliderOffset = this._state.offset[this.stylePos];
                 var distanceToSlide = eventPosition - sliderOffset;
                 if(this.stylePos==='right') {
                     distanceToSlide = -distanceToSlide;
                 }
                 // Calculate what percent of the length the slider handle has slid
                 var percentage = (distanceToSlide / this._state.size) * 100;
                 percentage = Math.round(percentage / this._state.percentage[2]) * this._state.percentage[2];
                 if (this.options.reversed) {
                     percentage = 100 - percentage;
                 }
 
                 // Make sure the percent is within the bounds of the slider.
                 // 0% corresponds to the 'min' value of the slide
                 // 100% corresponds to the 'max' value of the slide
                 return Math.max(0, Math.min(100, percentage));
             },
             _validateInputValue: function(val) {
                 if (!isNaN(+val)) {
                     return +val;
                 } else if (Array.isArray(val)) {
                     this._validateArray(val);
                     return val;
                 } else {
                     throw new Error(ErrorMsgs.formatInvalidInputErrorMsg(val));
                 }
             },
             _validateArray: function(val) {
                 for(var i = 0; i < val.length; i++) {
                     var input =  val[i];
                     if (typeof input !== 'number') { throw new Error( ErrorMsgs.formatInvalidInputErrorMsg(input) ); }
                 }
             },
             _setDataVal: function(val) {
                 this.element.setAttribute('data-value', val);
                 this.element.setAttribute('value', val);
                 this.element.value = val;
             },
             _trigger: function(evt, val) {
                 val = (val || val === 0) ? val : undefined;
 
                 var callbackFnArray = this.eventToCallbackMap[evt];
                 if(callbackFnArray && callbackFnArray.length) {
                     for(var i = 0; i < callbackFnArray.length; i++) {
                         var callbackFn = callbackFnArray[i];
                         callbackFn(val);
                     }
                 }
 
                 /* If JQuery exists, trigger JQuery events */
                 if($) {
                     this._triggerJQueryEvent(evt, val);
                 }
             },
             _triggerJQueryEvent: function(evt, val) {
                 var eventData = {
                     type: evt,
                     value: val
                 };
                 this.$element.trigger(eventData);
                 this.$sliderElem.trigger(eventData);
             },
             _unbindJQueryEventHandlers: function() {
                 this.$element.off();
                 this.$sliderElem.off();
             },
             _setText: function(element, text) {
                 if(typeof element.textContent !== "undefined") {
                     element.textContent = text;
                 } else if(typeof element.innerText !== "undefined") {
                     element.innerText = text;
                 }
             },
             _removeClass: function(element, classString) {
                 var classes = classString.split(" ");
                 var newClasses = element.className;
 
                 for(var i = 0; i < classes.length; i++) {
                     var classTag = classes[i];
                     var regex = new RegExp("(?:\\s|^)" + classTag + "(?:\\s|$)");
                     newClasses = newClasses.replace(regex, " ");
                 }
 
                 element.className = newClasses.trim();
             },
             _addClass: function(element, classString) {
                 var classes = classString.split(" ");
                 var newClasses = element.className;
 
                 for(var i = 0; i < classes.length; i++) {
                     var classTag = classes[i];
                     var regex = new RegExp("(?:\\s|^)" + classTag + "(?:\\s|$)");
                     var ifClassExists = regex.test(newClasses);
 
                     if(!ifClassExists) {
                         newClasses += " " + classTag;
                     }
                 }
 
                 element.className = newClasses.trim();
             },
             _offsetLeft: function(obj){
                 return obj.getBoundingClientRect().left;
             },
             _offsetRight: function(obj){
                 return obj.getBoundingClientRect().right;
             },
             _offsetTop: function(obj){
                 var offsetTop = obj.offsetTop;
                 while((obj = obj.offsetParent) && !isNaN(obj.offsetTop)){
                     offsetTop += obj.offsetTop;
                     if( obj.tagName !== 'BODY') {
                         offsetTop -= obj.scrollTop;
                     }
                 }
                 return offsetTop;
             },
             _offset: function (obj) {
                 return {
                     left: this._offsetLeft(obj),
                     right: this._offsetRight(obj),
                     top: this._offsetTop(obj)
                 };
             },
             _css: function(elementRef, styleName, value) {
                 if ($) {
                     $.style(elementRef, styleName, value);
                 } else {
                     var style = styleName.replace(/^-ms-/, "ms-").replace(/-([\da-z])/gi, function (all, letter) {
                         return letter.toUpperCase();
                     });
                     elementRef.style[style] = value;
                 }
             },
             _toValue: function(percentage) {
                 return this.options.scale.toValue.apply(this, [percentage]);
             },
             _toPercentage: function(value) {
                 return this.options.scale.toPercentage.apply(this, [value]);
             },
             _setTooltipPosition: function(){
                 var tooltips = [this.tooltip, this.tooltip_min, this.tooltip_max];
                 if (this.options.orientation === 'vertical'){
                     var tooltipPos;
                     if(this.options.tooltip_position) {
                         tooltipPos = this.options.tooltip_position;
                     } else {
                         if(this.options.rtl) {
                             tooltipPos = 'left';
                         } else {
                             tooltipPos = 'right';
                         }
                     }
                     var oppositeSide = (tooltipPos === 'left') ? 'right' : 'left';
                     tooltips.forEach(function(tooltip){
                         this._addClass(tooltip, 'bs-tooltip-' + tooltipPos);
                         tooltip.style[oppositeSide] = '100%';
                     }.bind(this));
                 } else if(this.options.tooltip_position === 'bottom') {
                     tooltips.forEach(function(tooltip){
                         this._addClass(tooltip, 'bs-tooltip-bottom');
                         tooltip.style.top = 22 + 'px';
                     }.bind(this));
                 } else {
                     tooltips.forEach(function(tooltip){
                         this._addClass(tooltip, 'bs-tooltip-top');
                         tooltip.style.top = -this.tooltip.outerHeight - 14 + 'px';
                     }.bind(this));
                 }
             },
             _getClosestTickIndex: function(val) {
                 let difference = Math.abs(val - this.options.ticks[0]);
                 let index = 0;
                 for (let i = 0; i < this.options.ticks.length; ++i) {
                     let d = Math.abs(val - this.options.ticks[i]);
                     if (d < difference) {
                         difference = d;
                         index = i;
                     }
                 }
                 return index;
             },
             /**
              * Attempts to find the index in `ticks[]` the slider values are set at.
              * The indexes can be -1 to indicate the slider value is not set at a value in `ticks[]`.
              */
             _setTickIndex: function() {
                 if (this.ticksAreValid) {
                     this._state.tickIndex = [
                         this.options.ticks.indexOf(this._state.value[0]),
                         this.options.ticks.indexOf(this._state.value[1])
                     ];
                 }
             },
         };
 
         /*********************************
 
             Attach to global namespace
 
         *********************************/
         if($ && $.fn) {
             if (!$.fn.slider) {
                 $.bridget(NAMESPACE_MAIN, Slider);
                 autoRegisterNamespace = NAMESPACE_MAIN;
             }
             else {
                 if (windowIsDefined) {
                     console.log("");
                 }
                 autoRegisterNamespace = NAMESPACE_ALTERNATE;
             }
             $.bridget(NAMESPACE_ALTERNATE, Slider);
 
             // Auto-Register data-provide="slider" Elements
             $(function() {
                 $("input[data-provide=slider]")[autoRegisterNamespace]();
             });
         }
 
     })( $ );
 
     return Slider;
 }));
 

Youez - 2016 - github.com/yon3zu
LinuXploit