text: /*!
   * Bootstrap.js by @fat & @mdo
   * Copyright 2012 Twitter, Inc.
   * http://www.apache.org/licenses/LICENSE-2.0.txt
   */
  !function( $ ) {
      "use strict";
      $(
          function() {
              $.support.transition = function() {
                  var transitionEnd = function() {
                      var name, el = document.createElement( "bootstrap" ), transEndEventNames = {
                          WebkitTransition: "webkitTransitionEnd",
                          MozTransition: "transitionend",
                          OTransition: "oTransitionEnd otransitionend",
                          transition: "transitionend"
                      };
                      for ( name in transEndEventNames )if ( void 0 !== el.style[name] )return transEndEventNames[name]
                  }();
                  return transitionEnd && {end: transitionEnd}
              }()
          }
      )
  }( window.jQuery ), !function( $ ) {
      "use strict";
      var dismiss = '[data-dismiss="alert"]', Alert = function( el ) {
          $( el ).on( "click", dismiss, this.close )
      };
      Alert.prototype.close = function( e ) {
          function removeElement() {
              $parent.trigger( "closed" ).remove()
          }
  
          var $parent, $this = $( this ), selector = $this.attr( "data-target" );
          selector || (selector = $this.attr( "href" ), selector = selector && selector.replace(
              /.*(?=#[^\s]*$)/, ""
          )), $parent = $( selector ), e && e.preventDefault(), $parent.length || ($parent = $this.hasClass( "alert" ) ? $this : $this.parent()), $parent.trigger( e = $.Event( "close" ) ), e.isDefaultPrevented() || ($parent.removeClass( "in" ), $.support.transition && $parent.hasClass( "fade" ) ? $parent.on(
              $.support.transition.end, removeElement
          ) : removeElement())
      };
      var old = $.fn.alert;
      $.fn.alert = function( option ) {
          return this.each(
              function() {
                  var $this = $( this ), data = $this.data( "alert" );
                  data || $this.data(
                      "alert", data = new Alert( this )
                  ), "string" == typeof option && data[option].call( $this )
              }
          )
      }, $.fn.alert.Constructor = Alert, $.fn.alert.noConflict = function() {
          return $.fn.alert = old, this
      }, $( document ).on( "click.alert.data-api", dismiss, Alert.prototype.close )
  }( window.jQuery ), !function( $ ) {
      "use strict";
      var Button = function( element, options ) {
          this.$element = $( element ), this.options = $.extend( {}, $.fn.button.defaults, options )
      };
      Button.prototype.setState = function( state ) {
          var d = "disabled", $el = this.$element, data = $el.data(), val = $el.is( "input" ) ? "val" : "html";
          state += "Text", data.resetText || $el.data(
              "resetText", $el[val]()
          ), $el[val]( data[state] || this.options[state] ), setTimeout(
              function() {
                  "loadingText" == state ? $el.addClass( d ).attr( d, d ) : $el.removeClass( d ).removeAttr( d )
              }, 0
          )
      }, Button.prototype.toggle = function() {
          var $parent = this.$element.closest( '[data-toggle="buttons-radio"]' );
          $parent && $parent.find( ".active" ).removeClass( "active" ), this.$element.toggleClass( "active" )
      };
      var old = $.fn.button;
      $.fn.button = function( option ) {
          return this.each(
              function() {
                  var $this = $( this ), data = $this.data( "button" ), options = "object" == typeof option && option;
                  data || $this.data(
                      "button", data = new Button( this, options )
                  ), "toggle" == option ? data.toggle() : option && data.setState( option )
              }
          )
      }, $.fn.button.defaults = {loadingText: "loading..."}, $.fn.button.Constructor = Button, $.fn.button.noConflict = function() {
          return $.fn.button = old, this
      }, $( document ).on(
          "click.button.data-api", "[data-toggle^=button]", function( e ) {
              var $btn = $( e.target );
              $btn.hasClass( "btn" ) || ($btn = $btn.closest( ".btn" )), $btn.button( "toggle" )
          }
      )
  }( window.jQuery ), !function( $ ) {
      "use strict";
      var Carousel = function( element, options ) {
          this.$element = $( element ), this.options = options, "hover" == this.options.pause && this.$element.on(
              "mouseenter", $.proxy( this.pause, this )
          ).on( "mouseleave", $.proxy( this.cycle, this ) )
      };
      Carousel.prototype = {
          cycle: function( e ) {
              return e || (this.paused = !1), this.options.interval && !this.paused && (this.interval = setInterval(
                  $.proxy(
                      this.next, this
                  ), this.options.interval
              )), this
          }, to: function( pos ) {
              var $active = this.$element.find( ".item.active" ), children = $active.parent().children(), activePos = children.index( $active ), that = this;
              if ( !(pos > children.length - 1 || 0 > pos) )return this.sliding ? this.$element.one(
                  "slid", function() {
                      that.to( pos )
                  }
              ) : activePos == pos ? this.pause().cycle() : this.slide(
                  pos > activePos ? "next" : "prev", $( children[pos] )
              )
          }, pause: function( e ) {
              return e || (this.paused = !0), this.$element.find( ".next, .prev" ).length && $.support.transition.end && (this.$element.trigger( $.support.transition.end ), this.cycle()), clearInterval( this.interval ), this.interval = null, this
          }, next: function() {
              return this.sliding ? void 0 : this.slide( "next" )
          }, prev: function() {
              return this.sliding ? void 0 : this.slide( "prev" )
          }, slide: function( type, next ) {
              var e, $active = this.$element.find( ".item.active" ), $next = next || $active[type](), isCycling = this.interval, direction = "next" == type ? "left" : "right", fallback = "next" == type ? "first" : "last", that = this;
              if ( this.sliding = !0, isCycling && this.pause(), $next = $next.length ? $next : this.$element.find( ".item" )[fallback](), e = $.Event(
                      "slide", {relatedTarget: $next[0]}
                  ), !$next.hasClass( "active" ) ) {
                  if ( $.support.transition && this.$element.hasClass( "slide" ) ) {
                      if ( this.$element.trigger( e ), e.isDefaultPrevented() )return;
                      $next.addClass( type ), $next[0].offsetWidth, $active.addClass( direction ), $next.addClass( direction ), this.$element.one(
                          $.support.transition.end, function() {
                              $next.removeClass( [type, direction].join( " " ) ).addClass( "active" ), $active.removeClass( ["active", direction].join( " " ) ), that.sliding = !1, setTimeout(
                                  function() {
                                      that.$element.trigger( "slid" )
                                  }, 0
                              )
                          }
                      )
                  } else {
                      if ( this.$element.trigger( e ), e.isDefaultPrevented() )return;
                      $active.removeClass( "active" ), $next.addClass( "active" ), this.sliding = !1, this.$element.trigger( "slid" )
                  }
                  return isCycling && this.cycle(), this
              }
          }
      };
      var old = $.fn.carousel;
      $.fn.carousel = function( option ) {
          return this.each(
              function() {
                  var $this = $( this ), data = $this.data( "carousel" ), options = $.extend(
                      {}, $.fn.carousel.defaults, "object" == typeof option && option
                  ), action = "string" == typeof option ? option : options.slide;
                  data || $this.data(
                      "carousel", data = new Carousel( this, options )
                  ), "number" == typeof option ? data.to( option ) : action ? data[action]() : options.interval && data.cycle()
              }
          )
      }, $.fn.carousel.defaults = {
          interval: 5e3,
          pause: "hover"
      }, $.fn.carousel.Constructor = Carousel, $.fn.carousel.noConflict = function() {
          return $.fn.carousel = old, this
      }, $( document ).on(
          "click.carousel.data-api", "[data-slide]", function( e ) {
              var href, $this = $( this ), $target = $(
                  $this.attr( "data-target" ) || (href = $this.attr( "href" )) && href.replace(
                      /.*(?=#[^\s]+$)/, ""
                  )
              ), options = $.extend( {}, $target.data(), $this.data() );
              $target.carousel( options ), e.preventDefault()
          }
      )
  }( window.jQuery ), !function( $ ) {
      "use strict";
      var Collapse = function( element, options ) {
          this.$element = $( element ), this.options = $.extend(
              {}, $.fn.collapse.defaults, options
          ), this.options.parent && (this.$parent = $( this.options.parent )), this.options.toggle && this.toggle()
      };
      Collapse.prototype = {
          constructor: Collapse, dimension: function() {
              var hasWidth = this.$element.hasClass( "width" );
              return hasWidth ? "width" : "height"
          }, show: function() {
              var dimension, scroll, actives, hasData;
              if ( !this.transitioning ) {
                  if ( dimension = this.dimension(), scroll = $.camelCase( ["scroll", dimension].join( "-" ) ), actives = this.$parent && this.$parent.find( "> .accordion-group > .in" ), actives && actives.length ) {
                      if ( hasData = actives.data( "collapse" ), hasData && hasData.transitioning )return;
                      actives.collapse( "hide" ), hasData || actives.data( "collapse", null )
                  }
                  this.$element[dimension]( 0 ), this.transition(
                      "addClass", $.Event( "show" ), "shown"
                  ), $.support.transition && this.$element[dimension]( this.$element[0][scroll] )
              }
          }, hide: function() {
              var dimension;
              this.transitioning || (dimension = this.dimension(), this.reset( this.$element[dimension]() ), this.transition(
                  "removeClass", $.Event( "hide" ), "hidden"
              ), this.$element[dimension]( 0 ))
          }, reset: function( size ) {
              var dimension = this.dimension();
              return this.$element.removeClass( "collapse" )[dimension]( size || "auto" )[0].offsetWidth, this.$element[null !== size ? "addClass" : "removeClass"]( "collapse" ), this
          }, transition: function( method, startEvent, completeEvent ) {
              var that = this, complete = function() {
                  "show" == startEvent.type && that.reset(), that.transitioning = 0, that.$element.trigger( completeEvent )
              };
              this.$element.trigger( startEvent ), startEvent.isDefaultPrevented() || (this.transitioning = 1, this.$element[method]( "in" ), $.support.transition && this.$element.hasClass( "collapse" ) ? this.$element.one(
                  $.support.transition.end, complete
              ) : complete())
          }, toggle: function() {
              this[this.$element.hasClass( "in" ) ? "hide" : "show"]()
          }
      };
      var old = $.fn.collapse;
      $.fn.collapse = function( option ) {
          return this.each(
              function() {
                  var $this = $( this ), data = $this.data( "collapse" ), options = "object" == typeof option && option;
                  data || $this.data(
                      "collapse", data = new Collapse( this, options )
                  ), "string" == typeof option && data[option]()
              }
          )
      }, $.fn.collapse.defaults = {toggle: !0}, $.fn.collapse.Constructor = Collapse, $.fn.collapse.noConflict = function() {
          return $.fn.collapse = old, this
      }, $( document ).on(
          "click.collapse.data-api", "[data-toggle=collapse]", function( e ) {
              var href, $this = $( this ), target = $this.attr( "data-target" ) || e.preventDefault() || (href = $this.attr( "href" )) && href.replace(
                      /.*(?=#[^\s]+$)/, ""
                  ), option = $( target ).data( "collapse" ) ? "toggle" : $this.data();
              $this[$( target ).hasClass( "in" ) ? "addClass" : "removeClass"]( "collapsed" ), $( target ).collapse( option )
          }
      )
  }( window.jQuery ), !function( $ ) {
      "use strict";
      function clearMenus() {
          $( toggle ).each(
              function() {
                  getParent( $( this ) ).removeClass( "open" )
              }
          )
      }
  
      function getParent( $this ) {
          var $parent, selector = $this.attr( "data-target" );
          return selector || (selector = $this.attr( "href" ), selector = selector && /#/.test( selector ) && selector.replace(
              /.*(?=#[^\s]*$)/, ""
          )), $parent = $( selector ), $parent.length || ($parent = $this.parent()), $parent
      }
  
      var toggle = "[data-toggle=dropdown]", Dropdown = function( element ) {
          var $el = $( element ).on( "click.dropdown.data-api", this.toggle );
          $( "html" ).on(
              "click.dropdown.data-api", function() {
                  $el.parent().removeClass( "open" )
              }
          )
      };
      Dropdown.prototype = {
          constructor: Dropdown, toggle: function() {
              var $parent, isActive, $this = $( this );
              if ( !$this.is( ".disabled, :disabled" ) )return $parent = getParent( $this ), isActive = $parent.hasClass( "open" ), clearMenus(), isActive || $parent.toggleClass( "open" ), $this.focus(), !1
          }, keydown: function( e ) {
              var $this, $items, $parent, isActive, index;
              if ( /(38|40|27)/.test( e.keyCode ) && ($this = $( this ), e.preventDefault(), e.stopPropagation(), !$this.is( ".disabled, :disabled" )) ) {
                  if ( $parent = getParent( $this ), isActive = $parent.hasClass( "open" ), !isActive || isActive && 27 == e.keyCode )return $this.click();
                  $items = $(
                      "[role=menu] li:not(.divider):visible a", $parent
                  ), $items.length && (index = $items.index( $items.filter( ":focus" ) ), 38 == e.keyCode && index > 0 && index--, 40 == e.keyCode && $items.length - 1 > index && index++, ~index || (index = 0), $items.eq( index ).focus())
              }
          }
      };
      var old = $.fn.dropdown;
      $.fn.dropdown = function( option ) {
          return this.each(
              function() {
                  var $this = $( this ), data = $this.data( "dropdown" );
                  data || $this.data(
                      "dropdown", data = new Dropdown( this )
                  ), "string" == typeof option && data[option].call( $this )
              }
          )
      }, $.fn.dropdown.Constructor = Dropdown, $.fn.dropdown.noConflict = function() {
          return $.fn.dropdown = old, this
      }, $( document ).on(
          "click.dropdown.data-api touchstart.dropdown.data-api", clearMenus
      ).on(
          "click.dropdown touchstart.dropdown.data-api", ".dropdown form", function( e ) {
              e.stopPropagation()
          }
      ).on(
          "touchstart.dropdown.data-api", ".dropdown-menu", function( e ) {
              e.stopPropagation()
          }
      ).on(
          "click.dropdown.data-api touchstart.dropdown.data-api", toggle, Dropdown.prototype.toggle
      ).on(
          "keydown.dropdown.data-api touchstart.dropdown.data-api", toggle + ", [role=menu]", Dropdown.prototype.keydown
      )
  }( window.jQuery ), !function( $ ) {
      "use strict";
      var Modal = function( element, options ) {
          this.options = options, this.$element = $( element ).delegate(
              '[data-dismiss="modal"]', "click.dismiss.modal", $.proxy( this.hide, this )
          ), this.options.remote && this.$element.find( ".modal-body" ).load( this.options.remote )
      };
      Modal.prototype = {
          constructor: Modal, toggle: function() {
              return this[this.isShown ? "hide" : "show"]()
          }, show: function() {
              var that = this, e = $.Event( "show" );
              this.$element.trigger( e ), this.isShown || e.isDefaultPrevented() || (this.isShown = !0, this.escape(), this.backdrop(
                  function() {
                      var transition = $.support.transition && that.$element.hasClass( "fade" );
                      that.$element.parent().length || that.$element.appendTo( document.body ), that.$element.show(), transition && that.$element[0].offsetWidth, that.$element.addClass( "in" ).attr(
                          "aria-hidden", !1
                      ), that.enforceFocus(), transition ? that.$element.one(
                          $.support.transition.end, function() {
                              that.$element.focus().trigger( "shown" )
                          }
                      ) : that.$element.focus().trigger( "shown" )
                  }
              ))
          }, hide: function( e ) {
              e && e.preventDefault(), e = $.Event( "hide" ), this.$element.trigger( e ), this.isShown && !e.isDefaultPrevented() && (this.isShown = !1, this.escape(), $( document ).off( "focusin.modal" ), this.$element.removeClass( "in" ).attr(
                  "aria-hidden", !0
              ), $.support.transition && this.$element.hasClass( "fade" ) ? this.hideWithTransition() : this.hideModal())
          }, enforceFocus: function() {
              var that = this;
              $( document ).on(
                  "focusin.modal", function( e ) {
                      that.$element[0] === e.target || that.$element.has( e.target ).length || that.$element.focus()
                  }
              )
          }, escape: function() {
              var that = this;
              this.isShown && this.options.keyboard ? this.$element.on(
                  "keyup.dismiss.modal", function( e ) {
                      27 == e.which && that.hide()
                  }
              ) : this.isShown || this.$element.off( "keyup.dismiss.modal" )
          }, hideWithTransition: function() {
              var that = this, timeout = setTimeout(
                  function() {
                      that.$element.off( $.support.transition.end ), that.hideModal()
                  }, 500
              );
              this.$element.one(
                  $.support.transition.end, function() {
                      clearTimeout( timeout ), that.hideModal()
                  }
              )
          }, hideModal: function() {
              this.$element.hide().trigger( "hidden" ), this.backdrop()
          }, removeBackdrop: function() {
              this.$backdrop.remove(), this.$backdrop = null
          }, backdrop: function( callback ) {
              var animate = this.$element.hasClass( "fade" ) ? "fade" : "";
              if ( this.isShown && this.options.backdrop ) {
                  var doAnimate = $.support.transition && animate;
                  this.$backdrop = $( '<div class="modal-backdrop ' + animate + '" />' ).appendTo( document.body ), this.$backdrop.click(
                      "static" == this.options.backdrop ? $.proxy(
                          this.$element[0].focus, this.$element[0]
                      ) : $.proxy( this.hide, this )
                  ), doAnimate && this.$backdrop[0].offsetWidth, this.$backdrop.addClass( "in" ), doAnimate ? this.$backdrop.one(
                      $.support.transition.end, callback
                  ) : callback()
              } else!this.isShown && this.$backdrop ? (this.$backdrop.removeClass( "in" ), $.support.transition && this.$element.hasClass( "fade" ) ? this.$backdrop.one(
                  $.support.transition.end, $.proxy( this.removeBackdrop, this )
              ) : this.removeBackdrop()) : callback && callback()
          }
      };
      var old = $.fn.modal;
      $.fn.modal = function( option ) {
          return this.each(
              function() {
                  var $this = $( this ), data = $this.data( "modal" ), options = $.extend(
                      {}, $.fn.modal.defaults, $this.data(), "object" == typeof option && option
                  );
                  data || $this.data(
                      "modal", data = new Modal( this, options )
                  ), "string" == typeof option ? data[option]() : options.show && data.show()
              }
          )
      }, $.fn.modal.defaults = {
          backdrop: !0,
          keyboard: !0,
          show: !0
      }, $.fn.modal.Constructor = Modal, $.fn.modal.noConflict = function() {
          return $.fn.modal = old, this
      }, $( document ).on(
          "click.modal.data-api", '[data-toggle="modal"]', function( e ) {
              var $this = $( this ), href = $this.attr( "href" ), $target = $(
                  $this.attr( "data-target" ) || href && href.replace(
                      /.*(?=#[^\s]+$)/, ""
                  )
              ), option = $target.data( "modal" ) ? "toggle" : $.extend(
                  {remote: !/#/.test( href ) && href}, $target.data(), $this.data()
              );
              e.preventDefault(), $target.modal( option ).one(
                  "hide", function() {
                      $this.focus()
                  }
              )
          }
      )
  }( window.jQuery ), !function( $ ) {
      "use strict";
      var Tooltip = function( element, options ) {
          this.init( "tooltip", element, options )
      };
      Tooltip.prototype = {
          constructor: Tooltip, init: function( type, element, options ) {
              var eventIn, eventOut;
              this.type = type, this.$element = $( element ), this.options = this.getOptions( options ), this.enabled = !0, "click" == this.options.trigger ? this.$element.on(
                  "click." + this.type, this.options.selector, $.proxy( this.toggle, this )
              ) : "manual" != this.options.trigger && (eventIn = "hover" == this.options.trigger ? "mouseenter" : "focus", eventOut = "hover" == this.options.trigger ? "mouseleave" : "blur", this.$element.on(
                  eventIn + "." + this.type, this.options.selector, $.proxy( this.enter, this )
              ), this.$element.on(
                  eventOut + "." + this.type, this.options.selector, $.proxy( this.leave, this )
              )), this.options.selector ? this._options = $.extend(
                  {}, this.options, {trigger: "manual", selector: ""}
              ) : this.fixTitle()
          }, getOptions: function( options ) {
              return options = $.extend(
                  {}, $.fn[this.type].defaults, options, this.$element.data()
              ), options.delay && "number" == typeof options.delay && (options.delay = {
                  show: options.delay,
                  hide: options.delay
              }), options
          }, enter: function( e ) {
              var self = $( e.currentTarget )[this.type]( this._options ).data( this.type );
              return self.options.delay && self.options.delay.show ? (clearTimeout( this.timeout ), self.hoverState = "in", this.timeout = setTimeout(
                  function() {
                      "in" == self.hoverState && self.show()
                  }, self.options.delay.show
              ), void 0) : self.show()
          }, leave: function( e ) {
              var self = $( e.currentTarget )[this.type]( this._options ).data( this.type );
              return this.timeout && clearTimeout( this.timeout ), self.options.delay && self.options.delay.hide ? (self.hoverState = "out", this.timeout = setTimeout(
                  function() {
                      "out" == self.hoverState && self.hide()
                  }, self.options.delay.hide
              ), void 0) : self.hide()
          }, show: function() {
              var $tip, inside, pos, actualWidth, actualHeight, placement, tp;
              if ( this.hasContent() && this.enabled ) {
                  switch ( $tip = this.tip(), this.setContent(), this.options.animation && $tip.addClass( "fade" ), placement = "function" == typeof this.options.placement ? this.options.placement.call(
                      this, $tip[0], this.$element[0]
                  ) : this.options.placement, inside = /in/.test( placement ), $tip.detach().css(
                      {
                          top: 0,
                          left: 0,
                          display: "block"
                      }
                  ).insertAfter( this.$element ), pos = this.getPosition( inside ), actualWidth = $tip[0].offsetWidth, actualHeight = $tip[0].offsetHeight, inside ? placement.split( " " )[1] : placement ) {
                      case"bottom":
                          tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2};
                          break;
                      case"top":
                          tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2};
                          break;
                      case"left":
                          tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth};
                          break;
                      case"right":
                          tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
                  }
                  $tip.offset( tp ).addClass( placement ).addClass( "in" )
              }
          }, setContent: function() {
              var $tip = this.tip(), title = this.getTitle();
              $tip.find( ".tooltip-inner" )[this.options.html ? "html" : "text"]( title ), $tip.removeClass( "fade in top bottom left right" )
          }, hide: function() {
              function removeWithAnimation() {
                  var timeout = setTimeout(
                      function() {
                          $tip.off( $.support.transition.end ).detach()
                      }, 500
                  );
                  $tip.one(
                      $.support.transition.end, function() {
                          clearTimeout( timeout ), $tip.detach()
                      }
                  )
              }
  
              var $tip = this.tip();
              return $tip.removeClass( "in" ), $.support.transition && this.$tip.hasClass( "fade" ) ? removeWithAnimation() : $tip.detach(), this
          }, fixTitle: function() {
              var $e = this.$element;
              ($e.attr( "title" ) || "string" != typeof $e.attr( "data-original-title" )) && $e.attr(
                  "data-original-title", $e.attr( "title" ) || ""
              ).removeAttr( "title" )
          }, hasContent: function() {
              return this.getTitle()
          }, getPosition: function( inside ) {
              return $.extend(
                  {}, inside ? {top: 0, left: 0} : this.$element.offset(),
                  {width: this.$element[0].offsetWidth, height: this.$element[0].offsetHeight}
              )
          }, getTitle: function() {
              var title, $e = this.$element, o = this.options;
              return title = $e.attr( "data-original-title" ) || ("function" == typeof o.title ? o.title.call( $e[0] ) : o.title)
          }, tip: function() {
              return this.$tip = this.$tip || $( this.options.template )
          }, validate: function() {
              this.$element[0].parentNode || (this.hide(), this.$element = null, this.options = null)
          }, enable: function() {
              this.enabled = !0
          }, disable: function() {
              this.enabled = !1
          }, toggleEnabled: function() {
              this.enabled = !this.enabled
          }, toggle: function( e ) {
              var self = $( e.currentTarget )[this.type]( this._options ).data( this.type );
              self[self.tip().hasClass( "in" ) ? "hide" : "show"]()
          }, destroy: function() {
              this.hide().$element.off( "." + this.type ).removeData( this.type )
          }
      };
      var old = $.fn.tooltip;
      $.fn.tooltip = function( option ) {
          return this.each(
              function() {
                  var $this = $( this ), data = $this.data( "tooltip" ), options = "object" == typeof option && option;
                  data || $this.data(
                      "tooltip", data = new Tooltip( this, options )
                  ), "string" == typeof option && data[option]()
              }
          )
      }, $.fn.tooltip.Constructor = Tooltip, $.fn.tooltip.defaults = {
          animation: !0,
          placement: "top",
          selector: !1,
          template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
          trigger: "hover",
          title: "",
          delay: 0,
          html: !1
      }, $.fn.tooltip.noConflict = function() {
          return $.fn.tooltip = old, this
      }
  }( window.jQuery ), !function( $ ) {
      "use strict";
      var Popover = function( element, options ) {
          this.init( "popover", element, options )
      };
      Popover.prototype = $.extend(
          {}, $.fn.tooltip.Constructor.prototype, {
              constructor: Popover, setContent: function() {
                  var $tip = this.tip(), title = this.getTitle(), content = this.getContent();
                  $tip.find( ".popover-title" )[this.options.html ? "html" : "text"]( title ), $tip.find( ".popover-content" )[this.options.html ? "html" : "text"]( content ), $tip.removeClass( "fade top bottom left right in" )
              }, hasContent: function() {
                  return this.getTitle() || this.getContent()
              }, getContent: function() {
                  var content, $e = this.$element, o = this.options;
                  return content = $e.attr( "data-content" ) || ("function" == typeof o.content ? o.content.call( $e[0] ) : o.content)
              }, tip: function() {
                  return this.$tip || (this.$tip = $( this.options.template )), this.$tip
              }, destroy: function() {
                  this.hide().$element.off( "." + this.type ).removeData( this.type )
              }
          }
      );
      var old = $.fn.popover;
      $.fn.popover = function( option ) {
          return this.each(
              function() {
                  var $this = $( this ), data = $this.data( "popover" ), options = "object" == typeof option && option;
                  data || $this.data(
                      "popover", data = new Popover( this, options )
                  ), "string" == typeof option && data[option]()
              }
          )
      }, $.fn.popover.Constructor = Popover, $.fn.popover.defaults = $.extend(
          {}, $.fn.tooltip.defaults, {
              placement: "right",
              trigger: "click",
              content: "",
              template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"></div></div></div>'
          }
      ), $.fn.popover.noConflict = function() {
          return $.fn.popover = old, this
      }
  }( window.jQuery ), !function( $ ) {
      "use strict";
      function ScrollSpy( element, options ) {
          var href, process = $.proxy(
              this.process, this
          ), $element = $( element ).is( "body" ) ? $( window ) : $( element );
          this.options = $.extend(
              {}, $.fn.scrollspy.defaults, options
          ), this.$scrollElement = $element.on(
              "scroll.scroll-spy.data-api", process
          ), this.selector = (this.options.target || (href = $( element ).attr( "href" )) && href.replace(
              /.*(?=#[^\s]+$)/, ""
          ) || "") + " .nav li > a", this.$body = $( "body" ), this.refresh(), this.process()
      }
  
      ScrollSpy.prototype = {
          constructor: ScrollSpy, refresh: function() {
              var $targets, self = this;
              this.offsets = $( [] ), this.targets = $( [] ), $targets = this.$body.find( this.selector ).map(
                  function() {
                      var $el = $( this ), href = $el.data( "target" ) || $el.attr( "href" ), $href = /^#\w/.test( href ) && $( href );
                      return $href && $href.length && [[$href.position().top + self.$scrollElement.scrollTop(), href]] || null
                  }
              ).sort(
                  function( a, b ) {
                      return a[0] - b[0]
                  }
              ).each(
                  function() {
                      self.offsets.push( this[0] ), self.targets.push( this[1] )
                  }
              )
          }, process: function() {
              var i, scrollTop = this.$scrollElement.scrollTop() + this.options.offset, scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight, maxScroll = scrollHeight - this.$scrollElement.height(), offsets = this.offsets, targets = this.targets, activeTarget = this.activeTarget;
              if ( scrollTop >= maxScroll )return activeTarget != (i = targets.last()[0]) && this.activate( i );
              for ( i = offsets.length; i--; )activeTarget != targets[i] && scrollTop >= offsets[i] && (!offsets[i + 1] || offsets[i + 1] >= scrollTop) && this.activate( targets[i] )
          }, activate: function( target ) {
              var active, selector;
              this.activeTarget = target, $( this.selector ).parent( ".active" ).removeClass( "active" ), selector = this.selector + '[data-target="' + target + '"],' + this.selector + '[href="' + target + '"]', active = $( selector ).parent( "li" ).addClass( "active" ), active.parent( ".dropdown-menu" ).length && (active = active.closest( "li.dropdown" ).addClass( "active" )), active.trigger( "activate" )
          }
      };
      var old = $.fn.scrollspy;
      $.fn.scrollspy = function( option ) {
          return this.each(
              function() {
                  var $this = $( this ), data = $this.data( "scrollspy" ), options = "object" == typeof option && option;
                  data || $this.data(
                      "scrollspy", data = new ScrollSpy( this, options )
                  ), "string" == typeof option && data[option]()
              }
          )
      }, $.fn.scrollspy.Constructor = ScrollSpy, $.fn.scrollspy.defaults = {offset: 10}, $.fn.scrollspy.noConflict = function() {
          return $.fn.scrollspy = old, this
      }, $( window ).on(
          "load", function() {
              $( '[data-spy="scroll"]' ).each(
                  function() {
                      var $spy = $( this );
                      $spy.scrollspy( $spy.data() )
                  }
              )
          }
      )
  }( window.jQuery ), !function( $ ) {
      "use strict";
      var Tab = function( element ) {
          this.element = $( element )
      };
      Tab.prototype = {
          constructor: Tab, show: function() {
              var previous, $target, e, $this = this.element, $ul = $this.closest( "ul:not(.dropdown-menu)" ), selector = $this.attr( "data-target" );
              selector || (selector = $this.attr( "href" ), selector = selector && selector.replace(
                  /.*(?=#[^\s]*$)/, ""
              )), $this.parent( "li" ).hasClass( "active" ) || (previous = $ul.find( ".active:last a" )[0], e = $.Event(
                  "show", {relatedTarget: previous}
              ), $this.trigger( e ), e.isDefaultPrevented() || ($target = $( selector ), this.activate(
                  $this.parent( "li" ), $ul
              ), this.activate(
                  $target, $target.parent(), function() {
                      $this.trigger( {type: "shown", relatedTarget: previous} )
                  }
              )))
          }, activate: function( element, container, callback ) {
              function next() {
                  $active.removeClass( "active" ).find( "> .dropdown-menu > .active" ).removeClass( "active" ), element.addClass( "active" ), transition ? (element[0].offsetWidth, element.addClass( "in" )) : element.removeClass( "fade" ), element.parent( ".dropdown-menu" ) && element.closest( "li.dropdown" ).addClass( "active" ), callback && callback()
              }
  
              var $active = container.find( "> .active" ), transition = callback && $.support.transition && $active.hasClass( "fade" );
              transition ? $active.one( $.support.transition.end, next ) : next(), $active.removeClass( "in" )
          }
      };
      var old = $.fn.tab;
      $.fn.tab = function( option ) {
          return this.each(
              function() {
                  var $this = $( this ), data = $this.data( "tab" );
                  data || $this.data( "tab", data = new Tab( this ) ), "string" == typeof option && data[option]()
              }
          )
      }, $.fn.tab.Constructor = Tab, $.fn.tab.noConflict = function() {
          return $.fn.tab = old, this
      }, $( document ).on(
          "click.tab.data-api", '[data-toggle="tab"], [data-toggle="pill"]', function( e ) {
              e.preventDefault(), $( this ).tab( "show" )
          }
      )
  }( window.jQuery ), !function( $ ) {
      "use strict";
      var Typeahead = function( element, options ) {
          this.$element = $( element ), this.options = $.extend(
              {}, $.fn.typeahead.defaults, options
          ), this.matcher = this.options.matcher || this.matcher, this.sorter = this.options.sorter || this.sorter, this.highlighter = this.options.highlighter || this.highlighter, this.updater = this.options.updater || this.updater, this.source = this.options.source, this.$menu = $( this.options.menu ), this.shown = !1, this.listen()
      };
      Typeahead.prototype = {
          constructor: Typeahead, select: function() {
              var val = this.$menu.find( ".active" ).attr( "data-value" );
              return this.$element.val( this.updater( val ) ).change(), this.hide()
          }, updater: function( item ) {
              return item
          }, show: function() {
              var pos = $.extend( {}, this.$element.position(), {height: this.$element[0].offsetHeight} );
              return this.$menu.insertAfter( this.$element ).css(
                  {
                      top: pos.top + pos.height,
                      left: pos.left
                  }
              ).show(), this.shown = !0, this
          }, hide: function() {
              return this.$menu.hide(), this.shown = !1, this
          }, lookup: function() {
              var items;
              return this.query = this.$element.val(), !this.query || this.query.length < this.options.minLength ? this.shown ? this.hide() : this : (items = $.isFunction( this.source ) ? this.source(
                  this.query, $.proxy( this.process, this )
              ) : this.source, items ? this.process( items ) : this)
          }, process: function( items ) {
              var that = this;
              return items = $.grep(
                  items, function( item ) {
                      return that.matcher( item )
                  }
              ), items = this.sorter( items ), items.length ? this.render(
                  items.slice(
                      0, this.options.items
                  )
              ).show() : this.shown ? this.hide() : this
          }, matcher: function( item ) {
              return ~item.toLowerCase().indexOf( this.query.toLowerCase() )
          }, sorter: function( items ) {
              for ( var item, beginswith = [], caseSensitive = [], caseInsensitive = []; item = items.shift(); )item.toLowerCase().indexOf( this.query.toLowerCase() ) ? ~item.indexOf( this.query ) ? caseSensitive.push( item ) : caseInsensitive.push( item ) : beginswith.push( item );
              return beginswith.concat( caseSensitive, caseInsensitive )
          }, highlighter: function( item ) {
              var query = this.query.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
              return item.replace(
                  RegExp( "(" + query + ")", "ig" ), function( $1, match ) {
                      return "<strong>" + match + "</strong>"
                  }
              )
          }, render: function( items ) {
              var that = this;
              return items = $( items ).map(
                  function( i, item ) {
                      return i = $( that.options.item ).attr(
                          "data-value", item
                      ), i.find( "a" ).html( that.highlighter( item ) ), i[0]
                  }
              ), items.first().addClass( "active" ), this.$menu.html( items ), this
          }, next: function() {
              var active = this.$menu.find( ".active" ).removeClass( "active" ), next = active.next();
              next.length || (next = $( this.$menu.find( "li" )[0] )), next.addClass( "active" )
          }, prev: function() {
              var active = this.$menu.find( ".active" ).removeClass( "active" ), prev = active.prev();
              prev.length || (prev = this.$menu.find( "li" ).last()), prev.addClass( "active" )
          }, listen: function() {
              this.$element.on( "blur", $.proxy( this.blur, this ) ).on(
                  "keypress", $.proxy( this.keypress, this )
              ).on( "keyup", $.proxy( this.keyup, this ) ), this.eventSupported( "keydown" ) && this.$element.on(
                  "keydown", $.proxy( this.keydown, this )
              ), this.$menu.on( "click", $.proxy( this.click, this ) ).on(
                  "mouseenter", "li", $.proxy( this.mouseenter, this )
              )
          }, eventSupported: function( eventName ) {
              var isSupported = eventName in this.$element;
              return isSupported || (this.$element.setAttribute(
                  eventName, "return;"
              ), isSupported = "function" == typeof this.$element[eventName]), isSupported
          }, move: function( e ) {
              if ( this.shown ) {
                  switch ( e.keyCode ) {
                      case 9:
                      case 13:
                      case 27:
                          e.preventDefault();
                          break;
                      case 38:
                          e.preventDefault(), this.prev();
                          break;
                      case 40:
                          e.preventDefault(), this.next()
                  }
                  e.stopPropagation()
              }
          }, keydown: function( e ) {
              this.suppressKeyPressRepeat = ~$.inArray( e.keyCode, [40, 38, 9, 13, 27] ), this.move( e )
          }, keypress: function( e ) {
              this.suppressKeyPressRepeat || this.move( e )
          }, keyup: function( e ) {
              switch ( e.keyCode ) {
                  case 40:
                  case 38:
                  case 16:
                  case 17:
                  case 18:
                      break;
                  case 9:
                  case 13:
                      if ( !this.shown )return;
                      this.select();
                      break;
                  case 27:
                      if ( !this.shown )return;
                      this.hide();
                      break;
                  default:
                      this.lookup()
              }
              e.stopPropagation(), e.preventDefault()
          }, blur: function() {
              var that = this;
              setTimeout(
                  function() {
                      that.hide()
                  }, 150
              )
          }, click: function( e ) {
              e.stopPropagation(), e.preventDefault(), this.select()
          }, mouseenter: function( e ) {
              this.$menu.find( ".active" ).removeClass( "active" ), $( e.currentTarget ).addClass( "active" )
          }
      };
      var old = $.fn.typeahead;
      $.fn.typeahead = function( option ) {
          return this.each(
              function() {
                  var $this = $( this ), data = $this.data( "typeahead" ), options = "object" == typeof option && option;
                  data || $this.data(
                      "typeahead", data = new Typeahead( this, options )
                  ), "string" == typeof option && data[option]()
              }
          )
      }, $.fn.typeahead.defaults = {
          source: [],
          items: 8,
          menu: '<ul class="typeahead dropdown-menu"></ul>',
          item: '<li><a href="#"></a></li>',
          minLength: 1
      }, $.fn.typeahead.Constructor = Typeahead, $.fn.typeahead.noConflict = function() {
          return $.fn.typeahead = old, this
      }, $( document ).on(
          "focus.typeahead.data-api", '[data-provide="typeahead"]', function( e ) {
              var $this = $( this );
              $this.data( "typeahead" ) || (e.preventDefault(), $this.typeahead( $this.data() ))
          }
      )
  }( window.jQuery ), !function( $ ) {
      "use strict";
      var Affix = function( element, options ) {
          this.options = $.extend(
              {}, $.fn.affix.defaults, options
          ), this.$window = $( window ).on(
              "scroll.affix.data-api", $.proxy( this.checkPosition, this )
          ).on(
              "click.affix.data-api", $.proxy(
                  function() {
                      setTimeout( $.proxy( this.checkPosition, this ), 1 )
                  }, this
              )
          ), this.$element = $( element ), this.checkPosition()
      };
      Affix.prototype.checkPosition = function() {
          if ( this.$element.is( ":visible" ) ) {
              var affix, scrollHeight = $( document ).height(), scrollTop = this.$window.scrollTop(), position = this.$element.offset(), offset = this.options.offset, offsetBottom = offset.bottom, offsetTop = offset.top, reset = "affix affix-top affix-bottom";
              "object" != typeof offset && (offsetBottom = offsetTop = offset), "function" == typeof offsetTop && (offsetTop = offset.top()), "function" == typeof offsetBottom && (offsetBottom = offset.bottom()), affix = null != this.unpin && scrollTop + this.unpin <= position.top ? !1 : null != offsetBottom && position.top + this.$element.height() >= scrollHeight - offsetBottom ? "bottom" : null != offsetTop && offsetTop >= scrollTop ? "top" : !1, this.affixed !== affix && (this.affixed = affix, this.unpin = "bottom" == affix ? position.top - scrollTop : null, this.$element.removeClass( reset ).addClass( "affix" + (affix ? "-" + affix : "") ))
          }
      };
      var old = $.fn.affix;
      $.fn.affix = function( option ) {
          return this.each(
              function() {
                  var $this = $( this ), data = $this.data( "affix" ), options = "object" == typeof option && option;
                  data || $this.data(
                      "affix", data = new Affix( this, options )
                  ), "string" == typeof option && data[option]()
              }
          )
      }, $.fn.affix.Constructor = Affix, $.fn.affix.defaults = {offset: 0}, $.fn.affix.noConflict = function() {
          return $.fn.affix = old, this
      }, $( window ).on(
          "load", function() {
              $( '[data-spy="affix"]' ).each(
                  function() {
                      var $spy = $( this ), data = $spy.data();
                      data.offset = data.offset || {}, data.offsetBottom && (data.offset.bottom = data.offsetBottom), data.offsetTop && (data.offset.top = data.offsetTop), $spy.affix( data )
                  }
              )
          }
      )
  }( window.jQuery );