diff --git a/.babelrc b/.babelrc new file mode 100644 index 00000000..ff3059c3 --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["@babel/preset-env"] +} \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 2142bc5c..80fbccd5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,8 @@ go: - 1.9 - "1.10" - 1.11 + - 1.12 + - 1.13 - tip install: diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..f196e216 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,45 @@ +# Minify client side assets (JavaScript) +FROM node:latest AS build-js + +RUN npm install gulp gulp-cli -g + +WORKDIR /build +COPY . . +RUN npm install --only=dev +RUN gulp + + +# Build Golang binary +FROM golang:1.11 AS build-golang + +WORKDIR /go/src/github.com/gophish/gophish +COPY . . +RUN go get -v && go build -v + + +# Runtime container +FROM debian:stable-slim + +RUN useradd -m -d /opt/gophish -s /bin/bash app + +RUN apt-get update && \ + apt-get install --no-install-recommends -y jq libcap2-bin && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +WORKDIR /opt/gophish +COPY --from=build-golang /go/src/github.com/gophish/gophish/ ./ +COPY --from=build-js /build/static/js/dist/ ./static/js/dist/ +COPY --from=build-js /build/static/css/dist/ ./static/css/dist/ +COPY --from=build-golang /go/src/github.com/gophish/gophish/config.json ./ +RUN chown app. config.json + +RUN setcap 'cap_net_bind_service=+ep' /opt/gophish/gophish + +USER app +RUN sed -i 's/127.0.0.1/0.0.0.0/g' config.json +RUN touch config.json.tmp + +EXPOSE 3333 8080 8443 + +CMD ["./docker/run.sh"] diff --git a/auth/auth.go b/auth/auth.go index 595ed732..3cdc07d0 100644 --- a/auth/auth.go +++ b/auth/auth.go @@ -1,49 +1,24 @@ package auth import ( - "encoding/gob" "errors" - "fmt" - "io" "net/http" - "crypto/rand" - ctx "github.com/gophish/gophish/context" - log "github.com/gophish/gophish/logger" "github.com/gophish/gophish/models" - "github.com/gorilla/securecookie" - "github.com/gorilla/sessions" - "github.com/jinzhu/gorm" "golang.org/x/crypto/bcrypt" ) -//init registers the necessary models to be saved in the session later -func init() { - gob.Register(&models.User{}) - gob.Register(&models.Flash{}) - Store.Options.HttpOnly = true - // This sets the maxAge to 5 days for all cookies - Store.MaxAge(86400 * 5) -} - -// Store contains the session information for the request -var Store = sessions.NewCookieStore( - []byte(securecookie.GenerateRandomKey(64)), //Signing key - []byte(securecookie.GenerateRandomKey(32))) - // ErrInvalidPassword is thrown when a user provides an incorrect password. var ErrInvalidPassword = errors.New("Invalid Password") +// ErrPasswordMismatch is thrown when a user provides a blank password to the register +// or change password functions +var ErrPasswordMismatch = errors.New("Password cannot be blank") + // ErrEmptyPassword is thrown when a user provides a blank password to the register // or change password functions -var ErrEmptyPassword = errors.New("Password cannot be blank") - -// ErrPasswordMismatch is thrown when a user provides passwords that do not match -var ErrPasswordMismatch = errors.New("Passwords must match") - -// ErrUsernameTaken is thrown when a user attempts to register a username that is taken. -var ErrUsernameTaken = errors.New("Username already taken") +var ErrEmptyPassword = errors.New("No password provided") // Login attempts to login the user given a request. func Login(r *http.Request) (bool, models.User, error) { @@ -61,54 +36,6 @@ func Login(r *http.Request) (bool, models.User, error) { return true, u, nil } -// Register attempts to register the user given a request. -func Register(r *http.Request) (bool, error) { - username := r.FormValue("username") - newPassword := r.FormValue("password") - confirmPassword := r.FormValue("confirm_password") - u, err := models.GetUserByUsername(username) - // If the given username already exists, throw an error and return false - if err == nil { - return false, ErrUsernameTaken - } - - // If we have an error which is not simply indicating that no user was found, report it - if err != nil && err != gorm.ErrRecordNotFound { - log.Warn(err) - return false, err - } - - u = models.User{} - // If we've made it here, we should have a valid username given - // Check that the passsword isn't blank - if newPassword == "" { - return false, ErrEmptyPassword - } - // Make sure passwords match - if newPassword != confirmPassword { - return false, ErrPasswordMismatch - } - // Let's create the password hash - h, err := bcrypt.GenerateFromPassword([]byte(newPassword), bcrypt.DefaultCost) - if err != nil { - return false, err - } - u.Username = username - u.Hash = string(h) - u.ApiKey = GenerateSecureKey() - err = models.PutUser(&u) - return true, nil -} - -// GenerateSecureKey creates a secure key to use -// as an API key -func GenerateSecureKey() string { - // Inspired from gorilla/securecookie - k := make([]byte, 32) - io.ReadFull(rand.Reader, k) - return fmt.Sprintf("%x", k) -} - // ChangePassword verifies the current password provided in the request and, // if it's valid, changes the password for the authenticated user. func ChangePassword(r *http.Request) error { diff --git a/config/config.go b/config/config.go index ba81e2f1..ccb6d639 100644 --- a/config/config.go +++ b/config/config.go @@ -32,6 +32,7 @@ type Config struct { PhishConf PhishServer `json:"phish_server"` DBName string `json:"db_name"` DBPath string `json:"db_path"` + DBSSLCaPath string `json:"db_sslca_path"` MigrationsPath string `json:"migrations_prefix"` TestFlag bool `json:"test_flag"` ContactAddress string `json:"contact_address"` diff --git a/controllers/api.go b/controllers/api.go deleted file mode 100644 index a4341355..00000000 --- a/controllers/api.go +++ /dev/null @@ -1,772 +0,0 @@ -package controllers - -import ( - "bytes" - "crypto/tls" - "encoding/json" - "errors" - "fmt" - "net/http" - "strconv" - "strings" - "time" - - "github.com/PuerkitoBio/goquery" - "github.com/gophish/gophish/auth" - ctx "github.com/gophish/gophish/context" - log "github.com/gophish/gophish/logger" - "github.com/gophish/gophish/models" - "github.com/gophish/gophish/util" - "github.com/gorilla/mux" - "github.com/jinzhu/gorm" - "github.com/jordan-wright/email" - "github.com/sirupsen/logrus" -) - -// APIReset (/api/reset) resets the currently authenticated user's API key -func (as *AdminServer) APIReset(w http.ResponseWriter, r *http.Request) { - switch { - case r.Method == "POST": - u := ctx.Get(r, "user").(models.User) - u.ApiKey = auth.GenerateSecureKey() - err := models.PutUser(&u) - if err != nil { - http.Error(w, "Error setting API Key", http.StatusInternalServerError) - } else { - JSONResponse(w, models.Response{Success: true, Message: "API Key successfully reset!", Data: u.ApiKey}, http.StatusOK) - } - } -} - -// APICampaigns returns a list of campaigns if requested via GET. -// If requested via POST, APICampaigns creates a new campaign and returns a reference to it. -func (as *AdminServer) APICampaigns(w http.ResponseWriter, r *http.Request) { - switch { - case r.Method == "GET": - cs, err := models.GetCampaigns(ctx.Get(r, "user_id").(int64)) - if err != nil { - log.Error(err) - } - JSONResponse(w, cs, http.StatusOK) - //POST: Create a new campaign and return it as JSON - case r.Method == "POST": - c := models.Campaign{} - // Put the request into a campaign - err := json.NewDecoder(r.Body).Decode(&c) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Invalid JSON structure"}, http.StatusBadRequest) - return - } - err = models.PostCampaign(&c, ctx.Get(r, "user_id").(int64)) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) - return - } - // If the campaign is scheduled to launch immediately, send it to the worker. - // Otherwise, the worker will pick it up at the scheduled time - if c.Status == models.CampaignInProgress { - go as.worker.LaunchCampaign(c) - } - JSONResponse(w, c, http.StatusCreated) - } -} - -// APICampaignsSummary returns the summary for the current user's campaigns -func (as *AdminServer) APICampaignsSummary(w http.ResponseWriter, r *http.Request) { - switch { - case r.Method == "GET": - cs, err := models.GetCampaignSummaries(ctx.Get(r, "user_id").(int64)) - if err != nil { - log.Error(err) - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) - return - } - JSONResponse(w, cs, http.StatusOK) - } -} - -// APICampaign returns details about the requested campaign. If the campaign is not -// valid, APICampaign returns null. -func (as *AdminServer) APICampaign(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) - id, _ := strconv.ParseInt(vars["id"], 0, 64) - c, err := models.GetCampaign(id, ctx.Get(r, "user_id").(int64)) - if err != nil { - log.Error(err) - JSONResponse(w, models.Response{Success: false, Message: "Campaign not found"}, http.StatusNotFound) - return - } - switch { - case r.Method == "GET": - JSONResponse(w, c, http.StatusOK) - case r.Method == "DELETE": - err = models.DeleteCampaign(id) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Error deleting campaign"}, http.StatusInternalServerError) - return - } - JSONResponse(w, models.Response{Success: true, Message: "Campaign deleted successfully!"}, http.StatusOK) - } -} - -// APICampaignResults returns just the results for a given campaign to -// significantly reduce the information returned. -func (as *AdminServer) APICampaignResults(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) - id, _ := strconv.ParseInt(vars["id"], 0, 64) - cr, err := models.GetCampaignResults(id, ctx.Get(r, "user_id").(int64)) - if err != nil { - log.Error(err) - JSONResponse(w, models.Response{Success: false, Message: "Campaign not found"}, http.StatusNotFound) - return - } - if r.Method == "GET" { - JSONResponse(w, cr, http.StatusOK) - return - } -} - -// APICampaignSummary returns the summary for a given campaign. -func (as *AdminServer) APICampaignSummary(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) - id, _ := strconv.ParseInt(vars["id"], 0, 64) - switch { - case r.Method == "GET": - cs, err := models.GetCampaignSummary(id, ctx.Get(r, "user_id").(int64)) - if err != nil { - if err == gorm.ErrRecordNotFound { - JSONResponse(w, models.Response{Success: false, Message: "Campaign not found"}, http.StatusNotFound) - } else { - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) - } - log.Error(err) - return - } - JSONResponse(w, cs, http.StatusOK) - } -} - -// APICampaignComplete effectively "ends" a campaign. -// Future phishing emails clicked will return a simple "404" page. -func (as *AdminServer) APICampaignComplete(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) - id, _ := strconv.ParseInt(vars["id"], 0, 64) - switch { - case r.Method == "GET": - err := models.CompleteCampaign(id, ctx.Get(r, "user_id").(int64)) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Error completing campaign"}, http.StatusInternalServerError) - return - } - JSONResponse(w, models.Response{Success: true, Message: "Campaign completed successfully!"}, http.StatusOK) - } -} - -// APIGroups returns a list of groups if requested via GET. -// If requested via POST, APIGroups creates a new group and returns a reference to it. -func (as *AdminServer) APIGroups(w http.ResponseWriter, r *http.Request) { - switch { - case r.Method == "GET": - gs, err := models.GetGroups(ctx.Get(r, "user_id").(int64)) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "No groups found"}, http.StatusNotFound) - return - } - JSONResponse(w, gs, http.StatusOK) - //POST: Create a new group and return it as JSON - case r.Method == "POST": - g := models.Group{} - // Put the request into a group - err := json.NewDecoder(r.Body).Decode(&g) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Invalid JSON structure"}, http.StatusBadRequest) - return - } - _, err = models.GetGroupByName(g.Name, ctx.Get(r, "user_id").(int64)) - if err != gorm.ErrRecordNotFound { - JSONResponse(w, models.Response{Success: false, Message: "Group name already in use"}, http.StatusConflict) - return - } - g.ModifiedDate = time.Now().UTC() - g.UserId = ctx.Get(r, "user_id").(int64) - err = models.PostGroup(&g) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) - return - } - JSONResponse(w, g, http.StatusCreated) - } -} - -// APIGroupsSummary returns a summary of the groups owned by the current user. -func (as *AdminServer) APIGroupsSummary(w http.ResponseWriter, r *http.Request) { - switch { - case r.Method == "GET": - gs, err := models.GetGroupSummaries(ctx.Get(r, "user_id").(int64)) - if err != nil { - log.Error(err) - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) - return - } - JSONResponse(w, gs, http.StatusOK) - } -} - -// APIGroup returns details about the requested group. -// If the group is not valid, APIGroup returns null. -func (as *AdminServer) APIGroup(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) - id, _ := strconv.ParseInt(vars["id"], 0, 64) - g, err := models.GetGroup(id, ctx.Get(r, "user_id").(int64)) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Group not found"}, http.StatusNotFound) - return - } - switch { - case r.Method == "GET": - JSONResponse(w, g, http.StatusOK) - case r.Method == "DELETE": - err = models.DeleteGroup(&g) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Error deleting group"}, http.StatusInternalServerError) - return - } - JSONResponse(w, models.Response{Success: true, Message: "Group deleted successfully!"}, http.StatusOK) - case r.Method == "PUT": - // Change this to get from URL and uid (don't bother with id in r.Body) - g = models.Group{} - err = json.NewDecoder(r.Body).Decode(&g) - if g.Id != id { - JSONResponse(w, models.Response{Success: false, Message: "Error: /:id and group_id mismatch"}, http.StatusInternalServerError) - return - } - g.ModifiedDate = time.Now().UTC() - g.UserId = ctx.Get(r, "user_id").(int64) - err = models.PutGroup(&g) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) - return - } - JSONResponse(w, g, http.StatusOK) - } -} - -// APIGroupSummary returns a summary of the groups owned by the current user. -func (as *AdminServer) APIGroupSummary(w http.ResponseWriter, r *http.Request) { - switch { - case r.Method == "GET": - vars := mux.Vars(r) - id, _ := strconv.ParseInt(vars["id"], 0, 64) - g, err := models.GetGroupSummary(id, ctx.Get(r, "user_id").(int64)) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Group not found"}, http.StatusNotFound) - return - } - JSONResponse(w, g, http.StatusOK) - } -} - -// APITemplates handles the functionality for the /api/templates endpoint -func (as *AdminServer) APITemplates(w http.ResponseWriter, r *http.Request) { - switch { - case r.Method == "GET": - ts, err := models.GetTemplates(ctx.Get(r, "user_id").(int64)) - if err != nil { - log.Error(err) - } - JSONResponse(w, ts, http.StatusOK) - //POST: Create a new template and return it as JSON - case r.Method == "POST": - t := models.Template{} - // Put the request into a template - err := json.NewDecoder(r.Body).Decode(&t) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Invalid JSON structure"}, http.StatusBadRequest) - return - } - _, err = models.GetTemplateByName(t.Name, ctx.Get(r, "user_id").(int64)) - if err != gorm.ErrRecordNotFound { - JSONResponse(w, models.Response{Success: false, Message: "Template name already in use"}, http.StatusConflict) - return - } - t.ModifiedDate = time.Now().UTC() - t.UserId = ctx.Get(r, "user_id").(int64) - err = models.PostTemplate(&t) - if err == models.ErrTemplateNameNotSpecified { - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) - return - } - if err == models.ErrTemplateMissingParameter { - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) - return - } - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Error inserting template into database"}, http.StatusInternalServerError) - log.Error(err) - return - } - JSONResponse(w, t, http.StatusCreated) - } -} - -// APITemplate handles the functions for the /api/templates/:id endpoint -func (as *AdminServer) APITemplate(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) - id, _ := strconv.ParseInt(vars["id"], 0, 64) - t, err := models.GetTemplate(id, ctx.Get(r, "user_id").(int64)) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Template not found"}, http.StatusNotFound) - return - } - switch { - case r.Method == "GET": - JSONResponse(w, t, http.StatusOK) - case r.Method == "DELETE": - err = models.DeleteTemplate(id, ctx.Get(r, "user_id").(int64)) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Error deleting template"}, http.StatusInternalServerError) - return - } - JSONResponse(w, models.Response{Success: true, Message: "Template deleted successfully!"}, http.StatusOK) - case r.Method == "PUT": - t = models.Template{} - err = json.NewDecoder(r.Body).Decode(&t) - if err != nil { - log.Error(err) - } - if t.Id != id { - JSONResponse(w, models.Response{Success: false, Message: "Error: /:id and template_id mismatch"}, http.StatusBadRequest) - return - } - t.ModifiedDate = time.Now().UTC() - t.UserId = ctx.Get(r, "user_id").(int64) - err = models.PutTemplate(&t) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) - return - } - JSONResponse(w, t, http.StatusOK) - } -} - -// APIPages handles requests for the /api/pages/ endpoint -func (as *AdminServer) APIPages(w http.ResponseWriter, r *http.Request) { - switch { - case r.Method == "GET": - ps, err := models.GetPages(ctx.Get(r, "user_id").(int64)) - if err != nil { - log.Error(err) - } - JSONResponse(w, ps, http.StatusOK) - //POST: Create a new page and return it as JSON - case r.Method == "POST": - p := models.Page{} - // Put the request into a page - err := json.NewDecoder(r.Body).Decode(&p) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Invalid request"}, http.StatusBadRequest) - return - } - // Check to make sure the name is unique - _, err = models.GetPageByName(p.Name, ctx.Get(r, "user_id").(int64)) - if err != gorm.ErrRecordNotFound { - JSONResponse(w, models.Response{Success: false, Message: "Page name already in use"}, http.StatusConflict) - log.Error(err) - return - } - p.ModifiedDate = time.Now().UTC() - p.UserId = ctx.Get(r, "user_id").(int64) - err = models.PostPage(&p) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) - return - } - JSONResponse(w, p, http.StatusCreated) - } -} - -// APIPage contains functions to handle the GET'ing, DELETE'ing, and PUT'ing -// of a Page object -func (as *AdminServer) APIPage(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) - id, _ := strconv.ParseInt(vars["id"], 0, 64) - p, err := models.GetPage(id, ctx.Get(r, "user_id").(int64)) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Page not found"}, http.StatusNotFound) - return - } - switch { - case r.Method == "GET": - JSONResponse(w, p, http.StatusOK) - case r.Method == "DELETE": - err = models.DeletePage(id, ctx.Get(r, "user_id").(int64)) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Error deleting page"}, http.StatusInternalServerError) - return - } - JSONResponse(w, models.Response{Success: true, Message: "Page Deleted Successfully"}, http.StatusOK) - case r.Method == "PUT": - p = models.Page{} - err = json.NewDecoder(r.Body).Decode(&p) - if err != nil { - log.Error(err) - } - if p.Id != id { - JSONResponse(w, models.Response{Success: false, Message: "/:id and /:page_id mismatch"}, http.StatusBadRequest) - return - } - p.ModifiedDate = time.Now().UTC() - p.UserId = ctx.Get(r, "user_id").(int64) - err = models.PutPage(&p) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Error updating page: " + err.Error()}, http.StatusInternalServerError) - return - } - JSONResponse(w, p, http.StatusOK) - } -} - -// APISendingProfiles handles requests for the /api/smtp/ endpoint -func (as *AdminServer) APISendingProfiles(w http.ResponseWriter, r *http.Request) { - switch { - case r.Method == "GET": - ss, err := models.GetSMTPs(ctx.Get(r, "user_id").(int64)) - if err != nil { - log.Error(err) - } - JSONResponse(w, ss, http.StatusOK) - //POST: Create a new SMTP and return it as JSON - case r.Method == "POST": - s := models.SMTP{} - // Put the request into a page - err := json.NewDecoder(r.Body).Decode(&s) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Invalid request"}, http.StatusBadRequest) - return - } - // Check to make sure the name is unique - _, err = models.GetSMTPByName(s.Name, ctx.Get(r, "user_id").(int64)) - if err != gorm.ErrRecordNotFound { - JSONResponse(w, models.Response{Success: false, Message: "SMTP name already in use"}, http.StatusConflict) - log.Error(err) - return - } - s.ModifiedDate = time.Now().UTC() - s.UserId = ctx.Get(r, "user_id").(int64) - err = models.PostSMTP(&s) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) - return - } - JSONResponse(w, s, http.StatusCreated) - } -} - -// APISendingProfile contains functions to handle the GET'ing, DELETE'ing, and PUT'ing -// of a SMTP object -func (as *AdminServer) APISendingProfile(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) - id, _ := strconv.ParseInt(vars["id"], 0, 64) - s, err := models.GetSMTP(id, ctx.Get(r, "user_id").(int64)) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "SMTP not found"}, http.StatusNotFound) - return - } - switch { - case r.Method == "GET": - JSONResponse(w, s, http.StatusOK) - case r.Method == "DELETE": - err = models.DeleteSMTP(id, ctx.Get(r, "user_id").(int64)) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Error deleting SMTP"}, http.StatusInternalServerError) - return - } - JSONResponse(w, models.Response{Success: true, Message: "SMTP Deleted Successfully"}, http.StatusOK) - case r.Method == "PUT": - s = models.SMTP{} - err = json.NewDecoder(r.Body).Decode(&s) - if err != nil { - log.Error(err) - } - if s.Id != id { - JSONResponse(w, models.Response{Success: false, Message: "/:id and /:smtp_id mismatch"}, http.StatusBadRequest) - return - } - err = s.Validate() - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) - return - } - s.ModifiedDate = time.Now().UTC() - s.UserId = ctx.Get(r, "user_id").(int64) - err = models.PutSMTP(&s) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Error updating page"}, http.StatusInternalServerError) - return - } - JSONResponse(w, s, http.StatusOK) - } -} - -// APIImportGroup imports a CSV of group members -func (as *AdminServer) APIImportGroup(w http.ResponseWriter, r *http.Request) { - ts, err := util.ParseCSV(r) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Error parsing CSV"}, http.StatusInternalServerError) - return - } - JSONResponse(w, ts, http.StatusOK) - return -} - -// APIImportEmail allows for the importing of email. -// Returns a Message object -func (as *AdminServer) APIImportEmail(w http.ResponseWriter, r *http.Request) { - if r.Method != "POST" { - JSONResponse(w, models.Response{Success: false, Message: "Method not allowed"}, http.StatusBadRequest) - return - } - ir := struct { - Content string `json:"content"` - ConvertLinks bool `json:"convert_links"` - }{} - err := json.NewDecoder(r.Body).Decode(&ir) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Error decoding JSON Request"}, http.StatusBadRequest) - return - } - e, err := email.NewEmailFromReader(strings.NewReader(ir.Content)) - if err != nil { - log.Error(err) - } - // If the user wants to convert links to point to - // the landing page, let's make it happen by changing up - // e.HTML - if ir.ConvertLinks { - d, err := goquery.NewDocumentFromReader(bytes.NewReader(e.HTML)) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) - return - } - d.Find("a").Each(func(i int, a *goquery.Selection) { - a.SetAttr("href", "{{.URL}}") - }) - h, err := d.Html() - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) - return - } - e.HTML = []byte(h) - } - er := emailResponse{ - Subject: e.Subject, - Text: string(e.Text), - HTML: string(e.HTML), - } - JSONResponse(w, er, http.StatusOK) - return -} - -// APIImportSite allows for the importing of HTML from a website -// Without "include_resources" set, it will merely place a "base" tag -// so that all resources can be loaded relative to the given URL. -func (as *AdminServer) APIImportSite(w http.ResponseWriter, r *http.Request) { - cr := cloneRequest{} - if r.Method != "POST" { - JSONResponse(w, models.Response{Success: false, Message: "Method not allowed"}, http.StatusBadRequest) - return - } - err := json.NewDecoder(r.Body).Decode(&cr) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Error decoding JSON Request"}, http.StatusBadRequest) - return - } - if err = cr.validate(); err != nil { - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) - return - } - tr := &http.Transport{ - TLSClientConfig: &tls.Config{ - InsecureSkipVerify: true, - }, - } - client := &http.Client{Transport: tr} - resp, err := client.Get(cr.URL) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) - return - } - // Insert the base href tag to better handle relative resources - d, err := goquery.NewDocumentFromResponse(resp) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) - return - } - // Assuming we don't want to include resources, we'll need a base href - if d.Find("head base").Length() == 0 { - d.Find("head").PrependHtml(fmt.Sprintf("", cr.URL)) - } - forms := d.Find("form") - forms.Each(func(i int, f *goquery.Selection) { - // We'll want to store where we got the form from - // (the current URL) - url := f.AttrOr("action", cr.URL) - if !strings.HasPrefix(url, "http") { - url = fmt.Sprintf("%s%s", cr.URL, url) - } - f.PrependHtml(fmt.Sprintf("", url)) - }) - h, err := d.Html() - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) - return - } - cs := cloneResponse{HTML: h} - JSONResponse(w, cs, http.StatusOK) - return -} - -// APISendTestEmail sends a test email using the template name -// and Target given. -func (as *AdminServer) APISendTestEmail(w http.ResponseWriter, r *http.Request) { - s := &models.EmailRequest{ - ErrorChan: make(chan error), - UserId: ctx.Get(r, "user_id").(int64), - } - if r.Method != "POST" { - JSONResponse(w, models.Response{Success: false, Message: "Method not allowed"}, http.StatusBadRequest) - return - } - err := json.NewDecoder(r.Body).Decode(s) - if err != nil { - JSONResponse(w, models.Response{Success: false, Message: "Error decoding JSON Request"}, http.StatusBadRequest) - return - } - - storeRequest := false - - // If a Template is not specified use a default - if s.Template.Name == "" { - //default message body - text := "It works!\n\nThis is an email letting you know that your gophish\nconfiguration was successful.\n" + - "Here are the details:\n\nWho you sent from: {{.From}}\n\nWho you sent to: \n" + - "{{if .FirstName}} First Name: {{.FirstName}}\n{{end}}" + - "{{if .LastName}} Last Name: {{.LastName}}\n{{end}}" + - "{{if .Position}} Position: {{.Position}}\n{{end}}" + - "\nNow go send some phish!" - t := models.Template{ - Subject: "Default Email from Gophish", - Text: text, - } - s.Template = t - } else { - // Get the Template requested by name - s.Template, err = models.GetTemplateByName(s.Template.Name, s.UserId) - if err == gorm.ErrRecordNotFound { - log.WithFields(logrus.Fields{ - "template": s.Template.Name, - }).Error("Template does not exist") - JSONResponse(w, models.Response{Success: false, Message: models.ErrTemplateNotFound.Error()}, http.StatusBadRequest) - return - } else if err != nil { - log.Error(err) - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) - return - } - s.TemplateId = s.Template.Id - // We'll only save the test request to the database if there is a - // user-specified template to use. - storeRequest = true - } - - if s.Page.Name != "" { - s.Page, err = models.GetPageByName(s.Page.Name, s.UserId) - if err == gorm.ErrRecordNotFound { - log.WithFields(logrus.Fields{ - "page": s.Page.Name, - }).Error("Page does not exist") - JSONResponse(w, models.Response{Success: false, Message: models.ErrPageNotFound.Error()}, http.StatusBadRequest) - return - } else if err != nil { - log.Error(err) - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) - return - } - s.PageId = s.Page.Id - } - - // If a complete sending profile is provided use it - if err := s.SMTP.Validate(); err != nil { - // Otherwise get the SMTP requested by name - smtp, lookupErr := models.GetSMTPByName(s.SMTP.Name, s.UserId) - // If the Sending Profile doesn't exist, let's err on the side - // of caution and assume that the validation failure was more important. - if lookupErr != nil { - log.Error(err) - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) - return - } - s.SMTP = smtp - } - s.FromAddress = s.SMTP.FromAddress - - // Validate the given request - if err = s.Validate(); err != nil { - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) - return - } - - // Store the request if this wasn't the default template - if storeRequest { - err = models.PostEmailRequest(s) - if err != nil { - log.Error(err) - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) - return - } - } - // Send the test email - err = as.worker.SendTestEmail(s) - if err != nil { - log.Error(err) - JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) - return - } - JSONResponse(w, models.Response{Success: true, Message: "Email Sent"}, http.StatusOK) - return -} - -// JSONResponse attempts to set the status code, c, and marshal the given interface, d, into a response that -// is written to the given ResponseWriter. -func JSONResponse(w http.ResponseWriter, d interface{}, c int) { - dj, err := json.MarshalIndent(d, "", " ") - if err != nil { - http.Error(w, "Error creating JSON response", http.StatusInternalServerError) - log.Error(err) - } - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(c) - fmt.Fprintf(w, "%s", dj) -} - -type cloneRequest struct { - URL string `json:"url"` - IncludeResources bool `json:"include_resources"` -} - -func (cr *cloneRequest) validate() error { - if cr.URL == "" { - return errors.New("No URL Specified") - } - return nil -} - -type cloneResponse struct { - HTML string `json:"html"` -} - -type emailResponse struct { - Text string `json:"text"` - HTML string `json:"html"` - Subject string `json:"subject"` -} diff --git a/controllers/api/api_test.go b/controllers/api/api_test.go new file mode 100644 index 00000000..09339799 --- /dev/null +++ b/controllers/api/api_test.go @@ -0,0 +1,133 @@ +package api + +import ( + "bytes" + "encoding/json" + "fmt" + "net/http" + "net/http/httptest" + "os" + "testing" + + "github.com/gophish/gophish/config" + "github.com/gophish/gophish/models" + "github.com/stretchr/testify/suite" +) + +type APISuite struct { + suite.Suite + apiKey string + config *config.Config + apiServer *Server + admin models.User +} + +func (s *APISuite) SetupSuite() { + conf := &config.Config{ + DBName: "sqlite3", + DBPath: ":memory:", + MigrationsPath: "../../db/db_sqlite3/migrations/", + } + err := models.Setup(conf) + if err != nil { + s.T().Fatalf("Failed creating database: %v", err) + } + s.config = conf + s.Nil(err) + // Get the API key to use for these tests + u, err := models.GetUser(1) + s.Nil(err) + s.apiKey = u.ApiKey + s.admin = u + // Move our cwd up to the project root for help with resolving + // static assets + err = os.Chdir("../") + s.Nil(err) + s.apiServer = NewServer() +} + +func (s *APISuite) TearDownTest() { + campaigns, _ := models.GetCampaigns(1) + for _, campaign := range campaigns { + models.DeleteCampaign(campaign.Id) + } + // Cleanup all users except the original admin + users, _ := models.GetUsers() + for _, user := range users { + if user.Id == 1 { + continue + } + err := models.DeleteUser(user.Id) + s.Nil(err) + } +} + +func (s *APISuite) SetupTest() { + // Add a group + group := models.Group{Name: "Test Group"} + group.Targets = []models.Target{ + models.Target{BaseRecipient: models.BaseRecipient{Email: "test1@example.com", FirstName: "First", LastName: "Example"}}, + models.Target{BaseRecipient: models.BaseRecipient{Email: "test2@example.com", FirstName: "Second", LastName: "Example"}}, + } + group.UserId = 1 + models.PostGroup(&group) + + // Add a template + t := models.Template{Name: "Test Template"} + t.Subject = "Test subject" + t.Text = "Text text" + t.HTML = "Test" + t.UserId = 1 + models.PostTemplate(&t) + + // Add a landing page + p := models.Page{Name: "Test Page"} + p.HTML = "Test" + p.UserId = 1 + models.PostPage(&p) + + // Add a sending profile + smtp := models.SMTP{Name: "Test Page"} + smtp.UserId = 1 + smtp.Host = "example.com" + smtp.FromAddress = "test@test.com" + models.PostSMTP(&smtp) + + // Setup and "launch" our campaign + // Set the status such that no emails are attempted + c := models.Campaign{Name: "Test campaign"} + c.UserId = 1 + c.Template = t + c.Page = p + c.SMTP = smtp + c.Groups = []models.Group{group} + models.PostCampaign(&c, c.UserId) + c.UpdateStatus(models.CampaignEmailsSent) +} + +func (s *APISuite) TestSiteImportBaseHref() { + h := "" + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintln(w, h) + })) + hr := fmt.Sprintf("\n", ts.URL) + defer ts.Close() + req := httptest.NewRequest(http.MethodPost, "/api/import/site", + bytes.NewBuffer([]byte(fmt.Sprintf(` + { + "url" : "%s", + "include_resources" : false + } + `, ts.URL)))) + req.Header.Set("Content-Type", "application/json") + response := httptest.NewRecorder() + s.apiServer.ImportSite(response, req) + cs := cloneResponse{} + err := json.NewDecoder(response.Body).Decode(&cs) + s.Nil(err) + s.Equal(cs.HTML, hr) +} + +func TestAPISuite(t *testing.T) { + suite.Run(t, new(APISuite)) +} diff --git a/controllers/api/campaign.go b/controllers/api/campaign.go new file mode 100644 index 00000000..33c08fe7 --- /dev/null +++ b/controllers/api/campaign.go @@ -0,0 +1,137 @@ +package api + +import ( + "encoding/json" + "net/http" + "strconv" + + ctx "github.com/gophish/gophish/context" + log "github.com/gophish/gophish/logger" + "github.com/gophish/gophish/models" + "github.com/gorilla/mux" + "github.com/jinzhu/gorm" +) + +// Campaigns returns a list of campaigns if requested via GET. +// If requested via POST, APICampaigns creates a new campaign and returns a reference to it. +func (as *Server) Campaigns(w http.ResponseWriter, r *http.Request) { + switch { + case r.Method == "GET": + cs, err := models.GetCampaigns(ctx.Get(r, "user_id").(int64)) + if err != nil { + log.Error(err) + } + JSONResponse(w, cs, http.StatusOK) + //POST: Create a new campaign and return it as JSON + case r.Method == "POST": + c := models.Campaign{} + // Put the request into a campaign + err := json.NewDecoder(r.Body).Decode(&c) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Invalid JSON structure"}, http.StatusBadRequest) + return + } + err = models.PostCampaign(&c, ctx.Get(r, "user_id").(int64)) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + // If the campaign is scheduled to launch immediately, send it to the worker. + // Otherwise, the worker will pick it up at the scheduled time + if c.Status == models.CampaignInProgress { + go as.worker.LaunchCampaign(c) + } + JSONResponse(w, c, http.StatusCreated) + } +} + +// CampaignsSummary returns the summary for the current user's campaigns +func (as *Server) CampaignsSummary(w http.ResponseWriter, r *http.Request) { + switch { + case r.Method == "GET": + cs, err := models.GetCampaignSummaries(ctx.Get(r, "user_id").(int64)) + if err != nil { + log.Error(err) + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + JSONResponse(w, cs, http.StatusOK) + } +} + +// Campaign returns details about the requested campaign. If the campaign is not +// valid, APICampaign returns null. +func (as *Server) Campaign(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + id, _ := strconv.ParseInt(vars["id"], 0, 64) + c, err := models.GetCampaign(id, ctx.Get(r, "user_id").(int64)) + if err != nil { + log.Error(err) + JSONResponse(w, models.Response{Success: false, Message: "Campaign not found"}, http.StatusNotFound) + return + } + switch { + case r.Method == "GET": + JSONResponse(w, c, http.StatusOK) + case r.Method == "DELETE": + err = models.DeleteCampaign(id) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Error deleting campaign"}, http.StatusInternalServerError) + return + } + JSONResponse(w, models.Response{Success: true, Message: "Campaign deleted successfully!"}, http.StatusOK) + } +} + +// CampaignResults returns just the results for a given campaign to +// significantly reduce the information returned. +func (as *Server) CampaignResults(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + id, _ := strconv.ParseInt(vars["id"], 0, 64) + cr, err := models.GetCampaignResults(id, ctx.Get(r, "user_id").(int64)) + if err != nil { + log.Error(err) + JSONResponse(w, models.Response{Success: false, Message: "Campaign not found"}, http.StatusNotFound) + return + } + if r.Method == "GET" { + JSONResponse(w, cr, http.StatusOK) + return + } +} + +// CampaignSummary returns the summary for a given campaign. +func (as *Server) CampaignSummary(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + id, _ := strconv.ParseInt(vars["id"], 0, 64) + switch { + case r.Method == "GET": + cs, err := models.GetCampaignSummary(id, ctx.Get(r, "user_id").(int64)) + if err != nil { + if err == gorm.ErrRecordNotFound { + JSONResponse(w, models.Response{Success: false, Message: "Campaign not found"}, http.StatusNotFound) + } else { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + } + log.Error(err) + return + } + JSONResponse(w, cs, http.StatusOK) + } +} + +// CampaignComplete effectively "ends" a campaign. +// Future phishing emails clicked will return a simple "404" page. +func (as *Server) CampaignComplete(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + id, _ := strconv.ParseInt(vars["id"], 0, 64) + switch { + case r.Method == "GET": + err := models.CompleteCampaign(id, ctx.Get(r, "user_id").(int64)) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Error completing campaign"}, http.StatusInternalServerError) + return + } + JSONResponse(w, models.Response{Success: true, Message: "Campaign completed successfully!"}, http.StatusOK) + } +} diff --git a/controllers/api/group.go b/controllers/api/group.go new file mode 100644 index 00000000..26dcfb39 --- /dev/null +++ b/controllers/api/group.go @@ -0,0 +1,118 @@ +package api + +import ( + "encoding/json" + "net/http" + "strconv" + "time" + + ctx "github.com/gophish/gophish/context" + log "github.com/gophish/gophish/logger" + "github.com/gophish/gophish/models" + "github.com/gorilla/mux" + "github.com/jinzhu/gorm" +) + +// Groups returns a list of groups if requested via GET. +// If requested via POST, APIGroups creates a new group and returns a reference to it. +func (as *Server) Groups(w http.ResponseWriter, r *http.Request) { + switch { + case r.Method == "GET": + gs, err := models.GetGroups(ctx.Get(r, "user_id").(int64)) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "No groups found"}, http.StatusNotFound) + return + } + JSONResponse(w, gs, http.StatusOK) + //POST: Create a new group and return it as JSON + case r.Method == "POST": + g := models.Group{} + // Put the request into a group + err := json.NewDecoder(r.Body).Decode(&g) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Invalid JSON structure"}, http.StatusBadRequest) + return + } + _, err = models.GetGroupByName(g.Name, ctx.Get(r, "user_id").(int64)) + if err != gorm.ErrRecordNotFound { + JSONResponse(w, models.Response{Success: false, Message: "Group name already in use"}, http.StatusConflict) + return + } + g.ModifiedDate = time.Now().UTC() + g.UserId = ctx.Get(r, "user_id").(int64) + err = models.PostGroup(&g) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + JSONResponse(w, g, http.StatusCreated) + } +} + +// GroupsSummary returns a summary of the groups owned by the current user. +func (as *Server) GroupsSummary(w http.ResponseWriter, r *http.Request) { + switch { + case r.Method == "GET": + gs, err := models.GetGroupSummaries(ctx.Get(r, "user_id").(int64)) + if err != nil { + log.Error(err) + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + JSONResponse(w, gs, http.StatusOK) + } +} + +// Group returns details about the requested group. +// If the group is not valid, Group returns null. +func (as *Server) Group(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + id, _ := strconv.ParseInt(vars["id"], 0, 64) + g, err := models.GetGroup(id, ctx.Get(r, "user_id").(int64)) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Group not found"}, http.StatusNotFound) + return + } + switch { + case r.Method == "GET": + JSONResponse(w, g, http.StatusOK) + case r.Method == "DELETE": + err = models.DeleteGroup(&g) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Error deleting group"}, http.StatusInternalServerError) + return + } + JSONResponse(w, models.Response{Success: true, Message: "Group deleted successfully!"}, http.StatusOK) + case r.Method == "PUT": + // Change this to get from URL and uid (don't bother with id in r.Body) + g = models.Group{} + err = json.NewDecoder(r.Body).Decode(&g) + if g.Id != id { + JSONResponse(w, models.Response{Success: false, Message: "Error: /:id and group_id mismatch"}, http.StatusInternalServerError) + return + } + g.ModifiedDate = time.Now().UTC() + g.UserId = ctx.Get(r, "user_id").(int64) + err = models.PutGroup(&g) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + JSONResponse(w, g, http.StatusOK) + } +} + +// GroupSummary returns a summary of the groups owned by the current user. +func (as *Server) GroupSummary(w http.ResponseWriter, r *http.Request) { + switch { + case r.Method == "GET": + vars := mux.Vars(r) + id, _ := strconv.ParseInt(vars["id"], 0, 64) + g, err := models.GetGroupSummary(id, ctx.Get(r, "user_id").(int64)) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Group not found"}, http.StatusNotFound) + return + } + JSONResponse(w, g, http.StatusOK) + } +} diff --git a/controllers/api/import.go b/controllers/api/import.go new file mode 100644 index 00000000..f1b164d9 --- /dev/null +++ b/controllers/api/import.go @@ -0,0 +1,157 @@ +package api + +import ( + "bytes" + "crypto/tls" + "encoding/json" + "errors" + "fmt" + "net/http" + "strings" + + "github.com/PuerkitoBio/goquery" + log "github.com/gophish/gophish/logger" + "github.com/gophish/gophish/models" + "github.com/gophish/gophish/util" + "github.com/jordan-wright/email" +) + +type cloneRequest struct { + URL string `json:"url"` + IncludeResources bool `json:"include_resources"` +} + +func (cr *cloneRequest) validate() error { + if cr.URL == "" { + return errors.New("No URL Specified") + } + return nil +} + +type cloneResponse struct { + HTML string `json:"html"` +} + +type emailResponse struct { + Text string `json:"text"` + HTML string `json:"html"` + Subject string `json:"subject"` +} + +// ImportGroup imports a CSV of group members +func (as *Server) ImportGroup(w http.ResponseWriter, r *http.Request) { + ts, err := util.ParseCSV(r) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Error parsing CSV"}, http.StatusInternalServerError) + return + } + JSONResponse(w, ts, http.StatusOK) + return +} + +// ImportEmail allows for the importing of email. +// Returns a Message object +func (as *Server) ImportEmail(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + JSONResponse(w, models.Response{Success: false, Message: "Method not allowed"}, http.StatusBadRequest) + return + } + ir := struct { + Content string `json:"content"` + ConvertLinks bool `json:"convert_links"` + }{} + err := json.NewDecoder(r.Body).Decode(&ir) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Error decoding JSON Request"}, http.StatusBadRequest) + return + } + e, err := email.NewEmailFromReader(strings.NewReader(ir.Content)) + if err != nil { + log.Error(err) + } + // If the user wants to convert links to point to + // the landing page, let's make it happen by changing up + // e.HTML + if ir.ConvertLinks { + d, err := goquery.NewDocumentFromReader(bytes.NewReader(e.HTML)) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + d.Find("a").Each(func(i int, a *goquery.Selection) { + a.SetAttr("href", "{{.URL}}") + }) + h, err := d.Html() + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + e.HTML = []byte(h) + } + er := emailResponse{ + Subject: e.Subject, + Text: string(e.Text), + HTML: string(e.HTML), + } + JSONResponse(w, er, http.StatusOK) + return +} + +// ImportSite allows for the importing of HTML from a website +// Without "include_resources" set, it will merely place a "base" tag +// so that all resources can be loaded relative to the given URL. +func (as *Server) ImportSite(w http.ResponseWriter, r *http.Request) { + cr := cloneRequest{} + if r.Method != "POST" { + JSONResponse(w, models.Response{Success: false, Message: "Method not allowed"}, http.StatusBadRequest) + return + } + err := json.NewDecoder(r.Body).Decode(&cr) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Error decoding JSON Request"}, http.StatusBadRequest) + return + } + if err = cr.validate(); err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + tr := &http.Transport{ + TLSClientConfig: &tls.Config{ + InsecureSkipVerify: true, + }, + } + client := &http.Client{Transport: tr} + resp, err := client.Get(cr.URL) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + // Insert the base href tag to better handle relative resources + d, err := goquery.NewDocumentFromResponse(resp) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + // Assuming we don't want to include resources, we'll need a base href + if d.Find("head base").Length() == 0 { + d.Find("head").PrependHtml(fmt.Sprintf("", cr.URL)) + } + forms := d.Find("form") + forms.Each(func(i int, f *goquery.Selection) { + // We'll want to store where we got the form from + // (the current URL) + url := f.AttrOr("action", cr.URL) + if !strings.HasPrefix(url, "http") { + url = fmt.Sprintf("%s%s", cr.URL, url) + } + f.PrependHtml(fmt.Sprintf("", url)) + }) + h, err := d.Html() + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + cs := cloneResponse{HTML: h} + JSONResponse(w, cs, http.StatusOK) + return +} diff --git a/controllers/api/page.go b/controllers/api/page.go new file mode 100644 index 00000000..bdebf5a7 --- /dev/null +++ b/controllers/api/page.go @@ -0,0 +1,91 @@ +package api + +import ( + "encoding/json" + "net/http" + "strconv" + "time" + + ctx "github.com/gophish/gophish/context" + log "github.com/gophish/gophish/logger" + "github.com/gophish/gophish/models" + "github.com/gorilla/mux" + "github.com/jinzhu/gorm" +) + +// Pages handles requests for the /api/pages/ endpoint +func (as *Server) Pages(w http.ResponseWriter, r *http.Request) { + switch { + case r.Method == "GET": + ps, err := models.GetPages(ctx.Get(r, "user_id").(int64)) + if err != nil { + log.Error(err) + } + JSONResponse(w, ps, http.StatusOK) + //POST: Create a new page and return it as JSON + case r.Method == "POST": + p := models.Page{} + // Put the request into a page + err := json.NewDecoder(r.Body).Decode(&p) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Invalid request"}, http.StatusBadRequest) + return + } + // Check to make sure the name is unique + _, err = models.GetPageByName(p.Name, ctx.Get(r, "user_id").(int64)) + if err != gorm.ErrRecordNotFound { + JSONResponse(w, models.Response{Success: false, Message: "Page name already in use"}, http.StatusConflict) + log.Error(err) + return + } + p.ModifiedDate = time.Now().UTC() + p.UserId = ctx.Get(r, "user_id").(int64) + err = models.PostPage(&p) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + JSONResponse(w, p, http.StatusCreated) + } +} + +// Page contains functions to handle the GET'ing, DELETE'ing, and PUT'ing +// of a Page object +func (as *Server) Page(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + id, _ := strconv.ParseInt(vars["id"], 0, 64) + p, err := models.GetPage(id, ctx.Get(r, "user_id").(int64)) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Page not found"}, http.StatusNotFound) + return + } + switch { + case r.Method == "GET": + JSONResponse(w, p, http.StatusOK) + case r.Method == "DELETE": + err = models.DeletePage(id, ctx.Get(r, "user_id").(int64)) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Error deleting page"}, http.StatusInternalServerError) + return + } + JSONResponse(w, models.Response{Success: true, Message: "Page Deleted Successfully"}, http.StatusOK) + case r.Method == "PUT": + p = models.Page{} + err = json.NewDecoder(r.Body).Decode(&p) + if err != nil { + log.Error(err) + } + if p.Id != id { + JSONResponse(w, models.Response{Success: false, Message: "/:id and /:page_id mismatch"}, http.StatusBadRequest) + return + } + p.ModifiedDate = time.Now().UTC() + p.UserId = ctx.Get(r, "user_id").(int64) + err = models.PutPage(&p) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Error updating page: " + err.Error()}, http.StatusInternalServerError) + return + } + JSONResponse(w, p, http.StatusOK) + } +} diff --git a/controllers/api/reset.go b/controllers/api/reset.go new file mode 100644 index 00000000..c7853ad9 --- /dev/null +++ b/controllers/api/reset.go @@ -0,0 +1,24 @@ +package api + +import ( + "net/http" + + ctx "github.com/gophish/gophish/context" + "github.com/gophish/gophish/models" + "github.com/gophish/gophish/util" +) + +// Reset (/api/reset) resets the currently authenticated user's API key +func (as *Server) Reset(w http.ResponseWriter, r *http.Request) { + switch { + case r.Method == "POST": + u := ctx.Get(r, "user").(models.User) + u.ApiKey = util.GenerateSecureKey() + err := models.PutUser(&u) + if err != nil { + http.Error(w, "Error setting API Key", http.StatusInternalServerError) + } else { + JSONResponse(w, models.Response{Success: true, Message: "API Key successfully reset!", Data: u.ApiKey}, http.StatusOK) + } + } +} diff --git a/controllers/api/response.go b/controllers/api/response.go new file mode 100644 index 00000000..bf53014a --- /dev/null +++ b/controllers/api/response.go @@ -0,0 +1,22 @@ +package api + +import ( + "encoding/json" + "fmt" + "net/http" + + log "github.com/gophish/gophish/logger" +) + +// JSONResponse attempts to set the status code, c, and marshal the given interface, d, into a response that +// is written to the given ResponseWriter. +func JSONResponse(w http.ResponseWriter, d interface{}, c int) { + dj, err := json.MarshalIndent(d, "", " ") + if err != nil { + http.Error(w, "Error creating JSON response", http.StatusInternalServerError) + log.Error(err) + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(c) + fmt.Fprintf(w, "%s", dj) +} diff --git a/controllers/api/server.go b/controllers/api/server.go new file mode 100644 index 00000000..9f2bec65 --- /dev/null +++ b/controllers/api/server.go @@ -0,0 +1,79 @@ +package api + +import ( + "net/http" + + mid "github.com/gophish/gophish/middleware" + "github.com/gophish/gophish/models" + "github.com/gophish/gophish/worker" + "github.com/gorilla/mux" +) + +// ServerOption is an option to apply to the API server. +type ServerOption func(*Server) + +// Server represents the routes and functionality of the Gophish API. +// It's not a server in the traditional sense, in that it isn't started and +// stopped. Rather, it's meant to be used as an http.Handler in the +// AdminServer. +type Server struct { + handler http.Handler + worker worker.Worker +} + +// NewServer returns a new instance of the API handler with the provided +// options applied. +func NewServer(options ...ServerOption) *Server { + defaultWorker, _ := worker.New() + as := &Server{ + worker: defaultWorker, + } + for _, opt := range options { + opt(as) + } + as.registerRoutes() + return as +} + +// WithWorker is an option that sets the background worker. +func WithWorker(w worker.Worker) ServerOption { + return func(as *Server) { + as.worker = w + } +} + +func (as *Server) registerRoutes() { + root := mux.NewRouter() + root = root.StrictSlash(true) + router := root.PathPrefix("/api/").Subrouter() + router.Use(mid.RequireAPIKey) + router.Use(mid.EnforceViewOnly) + router.HandleFunc("/reset", as.Reset) + router.HandleFunc("/campaigns/", as.Campaigns) + router.HandleFunc("/campaigns/summary", as.CampaignsSummary) + router.HandleFunc("/campaigns/{id:[0-9]+}", as.Campaign) + router.HandleFunc("/campaigns/{id:[0-9]+}/results", as.CampaignResults) + router.HandleFunc("/campaigns/{id:[0-9]+}/summary", as.CampaignSummary) + router.HandleFunc("/campaigns/{id:[0-9]+}/complete", as.CampaignComplete) + router.HandleFunc("/groups/", as.Groups) + router.HandleFunc("/groups/summary", as.GroupsSummary) + router.HandleFunc("/groups/{id:[0-9]+}", as.Group) + router.HandleFunc("/groups/{id:[0-9]+}/summary", as.GroupSummary) + router.HandleFunc("/templates/", as.Templates) + router.HandleFunc("/templates/{id:[0-9]+}", as.Template) + router.HandleFunc("/pages/", as.Pages) + router.HandleFunc("/pages/{id:[0-9]+}", as.Page) + router.HandleFunc("/smtp/", as.SendingProfiles) + router.HandleFunc("/smtp/{id:[0-9]+}", as.SendingProfile) + router.HandleFunc("/users/", mid.Use(as.Users, mid.RequirePermission(models.PermissionModifySystem))) + router.HandleFunc("/users/{id:[0-9]+}", mid.Use(as.User)) + router.HandleFunc("/util/send_test_email", as.SendTestEmail) + router.HandleFunc("/import/group", as.ImportGroup) + router.HandleFunc("/import/email", as.ImportEmail) + router.HandleFunc("/import/site", as.ImportSite) + as.handler = router +} + +func (as *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { + as.handler.ServeHTTP(w, r) +} diff --git a/controllers/api/smtp.go b/controllers/api/smtp.go new file mode 100644 index 00000000..2da33c93 --- /dev/null +++ b/controllers/api/smtp.go @@ -0,0 +1,96 @@ +package api + +import ( + "encoding/json" + "net/http" + "strconv" + "time" + + ctx "github.com/gophish/gophish/context" + log "github.com/gophish/gophish/logger" + "github.com/gophish/gophish/models" + "github.com/gorilla/mux" + "github.com/jinzhu/gorm" +) + +// SendingProfiles handles requests for the /api/smtp/ endpoint +func (as *Server) SendingProfiles(w http.ResponseWriter, r *http.Request) { + switch { + case r.Method == "GET": + ss, err := models.GetSMTPs(ctx.Get(r, "user_id").(int64)) + if err != nil { + log.Error(err) + } + JSONResponse(w, ss, http.StatusOK) + //POST: Create a new SMTP and return it as JSON + case r.Method == "POST": + s := models.SMTP{} + // Put the request into a page + err := json.NewDecoder(r.Body).Decode(&s) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Invalid request"}, http.StatusBadRequest) + return + } + // Check to make sure the name is unique + _, err = models.GetSMTPByName(s.Name, ctx.Get(r, "user_id").(int64)) + if err != gorm.ErrRecordNotFound { + JSONResponse(w, models.Response{Success: false, Message: "SMTP name already in use"}, http.StatusConflict) + log.Error(err) + return + } + s.ModifiedDate = time.Now().UTC() + s.UserId = ctx.Get(r, "user_id").(int64) + err = models.PostSMTP(&s) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + JSONResponse(w, s, http.StatusCreated) + } +} + +// SendingProfile contains functions to handle the GET'ing, DELETE'ing, and PUT'ing +// of a SMTP object +func (as *Server) SendingProfile(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + id, _ := strconv.ParseInt(vars["id"], 0, 64) + s, err := models.GetSMTP(id, ctx.Get(r, "user_id").(int64)) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "SMTP not found"}, http.StatusNotFound) + return + } + switch { + case r.Method == "GET": + JSONResponse(w, s, http.StatusOK) + case r.Method == "DELETE": + err = models.DeleteSMTP(id, ctx.Get(r, "user_id").(int64)) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Error deleting SMTP"}, http.StatusInternalServerError) + return + } + JSONResponse(w, models.Response{Success: true, Message: "SMTP Deleted Successfully"}, http.StatusOK) + case r.Method == "PUT": + s = models.SMTP{} + err = json.NewDecoder(r.Body).Decode(&s) + if err != nil { + log.Error(err) + } + if s.Id != id { + JSONResponse(w, models.Response{Success: false, Message: "/:id and /:smtp_id mismatch"}, http.StatusBadRequest) + return + } + err = s.Validate() + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + s.ModifiedDate = time.Now().UTC() + s.UserId = ctx.Get(r, "user_id").(int64) + err = models.PutSMTP(&s) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Error updating page"}, http.StatusInternalServerError) + return + } + JSONResponse(w, s, http.StatusOK) + } +} diff --git a/controllers/api/template.go b/controllers/api/template.go new file mode 100644 index 00000000..da8cd90c --- /dev/null +++ b/controllers/api/template.go @@ -0,0 +1,97 @@ +package api + +import ( + "encoding/json" + "net/http" + "strconv" + "time" + + ctx "github.com/gophish/gophish/context" + log "github.com/gophish/gophish/logger" + "github.com/gophish/gophish/models" + "github.com/gorilla/mux" + "github.com/jinzhu/gorm" +) + +// Templates handles the functionality for the /api/templates endpoint +func (as *Server) Templates(w http.ResponseWriter, r *http.Request) { + switch { + case r.Method == "GET": + ts, err := models.GetTemplates(ctx.Get(r, "user_id").(int64)) + if err != nil { + log.Error(err) + } + JSONResponse(w, ts, http.StatusOK) + //POST: Create a new template and return it as JSON + case r.Method == "POST": + t := models.Template{} + // Put the request into a template + err := json.NewDecoder(r.Body).Decode(&t) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Invalid JSON structure"}, http.StatusBadRequest) + return + } + _, err = models.GetTemplateByName(t.Name, ctx.Get(r, "user_id").(int64)) + if err != gorm.ErrRecordNotFound { + JSONResponse(w, models.Response{Success: false, Message: "Template name already in use"}, http.StatusConflict) + return + } + t.ModifiedDate = time.Now().UTC() + t.UserId = ctx.Get(r, "user_id").(int64) + err = models.PostTemplate(&t) + if err == models.ErrTemplateNameNotSpecified { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + if err == models.ErrTemplateMissingParameter { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Error inserting template into database"}, http.StatusInternalServerError) + log.Error(err) + return + } + JSONResponse(w, t, http.StatusCreated) + } +} + +// Template handles the functions for the /api/templates/:id endpoint +func (as *Server) Template(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + id, _ := strconv.ParseInt(vars["id"], 0, 64) + t, err := models.GetTemplate(id, ctx.Get(r, "user_id").(int64)) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Template not found"}, http.StatusNotFound) + return + } + switch { + case r.Method == "GET": + JSONResponse(w, t, http.StatusOK) + case r.Method == "DELETE": + err = models.DeleteTemplate(id, ctx.Get(r, "user_id").(int64)) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Error deleting template"}, http.StatusInternalServerError) + return + } + JSONResponse(w, models.Response{Success: true, Message: "Template deleted successfully!"}, http.StatusOK) + case r.Method == "PUT": + t = models.Template{} + err = json.NewDecoder(r.Body).Decode(&t) + if err != nil { + log.Error(err) + } + if t.Id != id { + JSONResponse(w, models.Response{Success: false, Message: "Error: /:id and template_id mismatch"}, http.StatusBadRequest) + return + } + t.ModifiedDate = time.Now().UTC() + t.UserId = ctx.Get(r, "user_id").(int64) + err = models.PutTemplate(&t) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + JSONResponse(w, t, http.StatusOK) + } +} diff --git a/controllers/api/user.go b/controllers/api/user.go new file mode 100644 index 00000000..484db16f --- /dev/null +++ b/controllers/api/user.go @@ -0,0 +1,218 @@ +package api + +import ( + "encoding/json" + "errors" + "net/http" + "strconv" + + ctx "github.com/gophish/gophish/context" + log "github.com/gophish/gophish/logger" + "github.com/gophish/gophish/models" + "github.com/gophish/gophish/util" + "github.com/gorilla/mux" + "github.com/jinzhu/gorm" +) + +// ErrEmptyPassword is thrown when a user provides a blank password to the register +// or change password functions +var ErrEmptyPassword = errors.New("No password provided") + +// ErrUsernameTaken is thrown when a user attempts to register a username that is taken. +var ErrUsernameTaken = errors.New("Username already taken") + +// ErrEmptyUsername is thrown when a user attempts to register a username that is taken. +var ErrEmptyUsername = errors.New("No username provided") + +// ErrEmptyRole is throws when no role is provided when creating or modifying a user. +var ErrEmptyRole = errors.New("No role specified") + +// ErrInsufficientPermission is thrown when a user attempts to change an +// attribute (such as the role) for which they don't have permission. +var ErrInsufficientPermission = errors.New("Permission denied") + +// userRequest is the payload which represents the creation of a new user. +type userRequest struct { + Username string `json:"username"` + Password string `json:"password"` + Role string `json:"role"` +} + +func (ur *userRequest) Validate(existingUser *models.User) error { + switch { + case ur.Username == "": + return ErrEmptyUsername + case ur.Role == "": + return ErrEmptyRole + } + // Verify that the username isn't already taken. We consider two cases: + // * We're creating a new user, in which case any match is a conflict + // * We're modifying a user, in which case any match with a different ID is + // a conflict. + possibleConflict, err := models.GetUserByUsername(ur.Username) + if err == nil { + if existingUser == nil { + return ErrUsernameTaken + } + if possibleConflict.Id != existingUser.Id { + return ErrUsernameTaken + } + } + // If we have an error which is not simply indicating that no user was found, report it + if err != nil && err != gorm.ErrRecordNotFound { + return err + } + return nil +} + +// Users contains functions to retrieve a list of existing users or create a +// new user. Users with the ModifySystem permissions can view and create users. +func (as *Server) Users(w http.ResponseWriter, r *http.Request) { + switch { + case r.Method == "GET": + us, err := models.GetUsers() + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + JSONResponse(w, us, http.StatusOK) + return + case r.Method == "POST": + ur := &userRequest{} + err := json.NewDecoder(r.Body).Decode(ur) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + err = ur.Validate(nil) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + if ur.Password == "" { + JSONResponse(w, models.Response{Success: false, Message: ErrEmptyPassword.Error()}, http.StatusBadRequest) + return + } + hash, err := util.NewHash(ur.Password) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + role, err := models.GetRoleBySlug(ur.Role) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + user := models.User{ + Username: ur.Username, + Hash: hash, + ApiKey: util.GenerateSecureKey(), + Role: role, + RoleID: role.ID, + } + err = models.PutUser(&user) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + JSONResponse(w, user, http.StatusOK) + return + } +} + +// User contains functions to retrieve or delete a single user. Users with +// the ModifySystem permission can view and modify any user. Otherwise, users +// may only view or delete their own account. +func (as *Server) User(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + id, _ := strconv.ParseInt(vars["id"], 0, 64) + // If the user doesn't have ModifySystem permissions, we need to verify + // that they're only taking action on their account. + currentUser := ctx.Get(r, "user").(models.User) + hasSystem, err := currentUser.HasPermission(models.PermissionModifySystem) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + if !hasSystem && currentUser.Id != id { + JSONResponse(w, models.Response{Success: false, Message: http.StatusText(http.StatusForbidden)}, http.StatusForbidden) + return + } + existingUser, err := models.GetUser(id) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "User not found"}, http.StatusNotFound) + return + } + switch { + case r.Method == "GET": + JSONResponse(w, existingUser, http.StatusOK) + case r.Method == "DELETE": + err = models.DeleteUser(id) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + log.Infof("Deleted user account for %s", existingUser.Username) + JSONResponse(w, models.Response{Success: true, Message: "User deleted Successfully!"}, http.StatusOK) + case r.Method == "PUT": + ur := &userRequest{} + err = json.NewDecoder(r.Body).Decode(ur) + if err != nil { + log.Errorf("error decoding user request: %v", err) + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + err = ur.Validate(&existingUser) + if err != nil { + log.Errorf("invalid user request received: %v", err) + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + existingUser.Username = ur.Username + // Only users with the ModifySystem permission are able to update a + // user's role. This prevents a privilege escalation letting users + // upgrade their own account. + if !hasSystem && ur.Role != existingUser.Role.Slug { + JSONResponse(w, models.Response{Success: false, Message: ErrInsufficientPermission.Error()}, http.StatusBadRequest) + return + } + role, err := models.GetRoleBySlug(ur.Role) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + // If our user is trying to change the role of an admin, we need to + // ensure that it isn't the last user account with the Admin role. + if existingUser.Role.Slug == models.RoleAdmin && existingUser.Role.ID != role.ID { + err = models.EnsureEnoughAdmins() + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + } + existingUser.Role = role + existingUser.RoleID = role.ID + // We don't force the password to be provided, since it may be an admin + // managing the user's account, and making a simple change like + // updating the username or role. However, if it _is_ provided, we'll + // update the stored hash. + // + // Note that we don't force the current password to be provided. The + // assumption here is that the API key is a proper bearer token proving + // authenticated access to the account. + if ur.Password != "" { + hash, err := util.NewHash(ur.Password) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + existingUser.Hash = hash + } + err = models.PutUser(&existingUser) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + JSONResponse(w, existingUser, http.StatusOK) + } +} diff --git a/controllers/api/user_test.go b/controllers/api/user_test.go new file mode 100644 index 00000000..65dc0255 --- /dev/null +++ b/controllers/api/user_test.go @@ -0,0 +1,188 @@ +package api + +import ( + "bytes" + "encoding/json" + "fmt" + "net/http" + "net/http/httptest" + + "golang.org/x/crypto/bcrypt" + + ctx "github.com/gophish/gophish/context" + "github.com/gophish/gophish/models" +) + +func (s *APISuite) createUnpriviledgedUser(slug string) *models.User { + role, err := models.GetRoleBySlug(slug) + s.Nil(err) + unauthorizedUser := &models.User{ + Username: "foo", + Hash: "bar", + ApiKey: "12345", + Role: role, + RoleID: role.ID, + } + err = models.PutUser(unauthorizedUser) + s.Nil(err) + return unauthorizedUser +} + +func (s *APISuite) TestGetUsers() { + r := httptest.NewRequest(http.MethodGet, "/api/users", nil) + r = ctx.Set(r, "user", s.admin) + w := httptest.NewRecorder() + + s.apiServer.Users(w, r) + s.Equal(w.Code, http.StatusOK) + + got := []models.User{} + err := json.NewDecoder(w.Body).Decode(&got) + s.Nil(err) + + // We only expect one user + s.Equal(1, len(got)) + // And it should be the admin user + s.Equal(s.admin.Id, got[0].Id) +} + +func (s *APISuite) TestCreateUser() { + payload := &userRequest{ + Username: "foo", + Password: "bar", + Role: models.RoleUser, + } + body, err := json.Marshal(payload) + s.Nil(err) + + r := httptest.NewRequest(http.MethodPost, "/api/users", bytes.NewBuffer(body)) + r.Header.Set("Content-Type", "application/json") + r = ctx.Set(r, "user", s.admin) + w := httptest.NewRecorder() + + s.apiServer.Users(w, r) + s.Equal(w.Code, http.StatusOK) + + got := &models.User{} + err = json.NewDecoder(w.Body).Decode(got) + s.Nil(err) + s.Equal(got.Username, payload.Username) + s.Equal(got.Role.Slug, payload.Role) +} + +// TestModifyUser tests that a user with the appropriate access is able to +// modify their username and password. +func (s *APISuite) TestModifyUser() { + unpriviledgedUser := s.createUnpriviledgedUser(models.RoleUser) + newPassword := "new-password" + newUsername := "new-username" + payload := userRequest{ + Username: newUsername, + Password: newPassword, + Role: unpriviledgedUser.Role.Slug, + } + body, err := json.Marshal(payload) + s.Nil(err) + url := fmt.Sprintf("/api/users/%d", unpriviledgedUser.Id) + r := httptest.NewRequest(http.MethodPut, url, bytes.NewBuffer(body)) + r.Header.Set("Content-Type", "application/json") + r.Header.Set("Authorization", fmt.Sprintf("Bearer %s", unpriviledgedUser.ApiKey)) + w := httptest.NewRecorder() + + s.apiServer.ServeHTTP(w, r) + response := &models.User{} + err = json.NewDecoder(w.Body).Decode(response) + s.Nil(err) + s.Equal(w.Code, http.StatusOK) + s.Equal(response.Username, newUsername) + got, err := models.GetUser(unpriviledgedUser.Id) + s.Nil(err) + s.Equal(response.Username, got.Username) + s.Equal(newUsername, got.Username) + err = bcrypt.CompareHashAndPassword([]byte(got.Hash), []byte(newPassword)) + s.Nil(err) +} + +// TestUnauthorizedListUsers ensures that users without the ModifySystem +// permission are unable to list the users registered in Gophish. +func (s *APISuite) TestUnauthorizedListUsers() { + // First, let's create a standard user which doesn't + // have ModifySystem permissions. + unauthorizedUser := s.createUnpriviledgedUser(models.RoleUser) + // We'll try to make a request to the various users API endpoints to + // ensure that they fail. Previously, we could hit the handlers directly + // but we need to go through the router for this test to ensure the + // middleware gets applied. + r := httptest.NewRequest(http.MethodGet, "/api/users/", nil) + r.Header.Set("Authorization", fmt.Sprintf("Bearer %s", unauthorizedUser.ApiKey)) + w := httptest.NewRecorder() + + s.apiServer.ServeHTTP(w, r) + s.Equal(w.Code, http.StatusForbidden) +} + +// TestUnauthorizedModifyUsers verifies that users without ModifySystem +// permission (a "standard" user) can only get or modify their own information. +func (s *APISuite) TestUnauthorizedGetUser() { + // First, we'll make sure that a user with the "user" role is unable to + // get the information of another user (in this case, the main admin). + unauthorizedUser := s.createUnpriviledgedUser(models.RoleUser) + url := fmt.Sprintf("/api/users/%d", s.admin.Id) + r := httptest.NewRequest(http.MethodGet, url, nil) + r.Header.Set("Authorization", fmt.Sprintf("Bearer %s", unauthorizedUser.ApiKey)) + w := httptest.NewRecorder() + + s.apiServer.ServeHTTP(w, r) + s.Equal(w.Code, http.StatusForbidden) +} + +// TestUnauthorizedModifyRole ensures that users without the ModifySystem +// privilege are unable to modify their own role, preventing a potential +// privilege escalation issue. +func (s *APISuite) TestUnauthorizedSetRole() { + unauthorizedUser := s.createUnpriviledgedUser(models.RoleUser) + url := fmt.Sprintf("/api/users/%d", unauthorizedUser.Id) + payload := &userRequest{ + Username: unauthorizedUser.Username, + Role: models.RoleAdmin, + } + body, err := json.Marshal(payload) + s.Nil(err) + r := httptest.NewRequest(http.MethodPut, url, bytes.NewBuffer(body)) + r.Header.Set("Authorization", fmt.Sprintf("Bearer %s", unauthorizedUser.ApiKey)) + w := httptest.NewRecorder() + + s.apiServer.ServeHTTP(w, r) + s.Equal(w.Code, http.StatusBadRequest) + response := &models.Response{} + err = json.NewDecoder(w.Body).Decode(response) + s.Nil(err) + s.Equal(response.Message, ErrInsufficientPermission.Error()) +} + +// TestModifyWithExistingUsername verifies that it's not possible to modify +// an user's username to one which already exists. +func (s *APISuite) TestModifyWithExistingUsername() { + unauthorizedUser := s.createUnpriviledgedUser(models.RoleUser) + payload := &userRequest{ + Username: s.admin.Username, + Role: unauthorizedUser.Role.Slug, + } + body, err := json.Marshal(payload) + s.Nil(err) + url := fmt.Sprintf("/api/users/%d", unauthorizedUser.Id) + r := httptest.NewRequest(http.MethodPut, url, bytes.NewReader(body)) + r.Header.Set("Authorization", fmt.Sprintf("Bearer %s", unauthorizedUser.ApiKey)) + w := httptest.NewRecorder() + + s.apiServer.ServeHTTP(w, r) + s.Equal(w.Code, http.StatusBadRequest) + expected := &models.Response{ + Message: ErrUsernameTaken.Error(), + Success: false, + } + got := &models.Response{} + err = json.NewDecoder(w.Body).Decode(got) + s.Nil(err) + s.Equal(got.Message, expected.Message) +} diff --git a/controllers/api/util.go b/controllers/api/util.go new file mode 100644 index 00000000..0f6c215c --- /dev/null +++ b/controllers/api/util.go @@ -0,0 +1,122 @@ +package api + +import ( + "encoding/json" + "net/http" + + ctx "github.com/gophish/gophish/context" + log "github.com/gophish/gophish/logger" + "github.com/gophish/gophish/models" + "github.com/jinzhu/gorm" + "github.com/sirupsen/logrus" +) + +// SendTestEmail sends a test email using the template name +// and Target given. +func (as *Server) SendTestEmail(w http.ResponseWriter, r *http.Request) { + s := &models.EmailRequest{ + ErrorChan: make(chan error), + UserId: ctx.Get(r, "user_id").(int64), + } + if r.Method != "POST" { + JSONResponse(w, models.Response{Success: false, Message: "Method not allowed"}, http.StatusBadRequest) + return + } + err := json.NewDecoder(r.Body).Decode(s) + if err != nil { + JSONResponse(w, models.Response{Success: false, Message: "Error decoding JSON Request"}, http.StatusBadRequest) + return + } + + storeRequest := false + + // If a Template is not specified use a default + if s.Template.Name == "" { + //default message body + text := "It works!\n\nThis is an email letting you know that your gophish\nconfiguration was successful.\n" + + "Here are the details:\n\nWho you sent from: {{.From}}\n\nWho you sent to: \n" + + "{{if .FirstName}} First Name: {{.FirstName}}\n{{end}}" + + "{{if .LastName}} Last Name: {{.LastName}}\n{{end}}" + + "{{if .Position}} Position: {{.Position}}\n{{end}}" + + "\nNow go send some phish!" + t := models.Template{ + Subject: "Default Email from Gophish", + Text: text, + } + s.Template = t + } else { + // Get the Template requested by name + s.Template, err = models.GetTemplateByName(s.Template.Name, s.UserId) + if err == gorm.ErrRecordNotFound { + log.WithFields(logrus.Fields{ + "template": s.Template.Name, + }).Error("Template does not exist") + JSONResponse(w, models.Response{Success: false, Message: models.ErrTemplateNotFound.Error()}, http.StatusBadRequest) + return + } else if err != nil { + log.Error(err) + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + s.TemplateId = s.Template.Id + // We'll only save the test request to the database if there is a + // user-specified template to use. + storeRequest = true + } + + if s.Page.Name != "" { + s.Page, err = models.GetPageByName(s.Page.Name, s.UserId) + if err == gorm.ErrRecordNotFound { + log.WithFields(logrus.Fields{ + "page": s.Page.Name, + }).Error("Page does not exist") + JSONResponse(w, models.Response{Success: false, Message: models.ErrPageNotFound.Error()}, http.StatusBadRequest) + return + } else if err != nil { + log.Error(err) + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + s.PageId = s.Page.Id + } + + // If a complete sending profile is provided use it + if err := s.SMTP.Validate(); err != nil { + // Otherwise get the SMTP requested by name + smtp, lookupErr := models.GetSMTPByName(s.SMTP.Name, s.UserId) + // If the Sending Profile doesn't exist, let's err on the side + // of caution and assume that the validation failure was more important. + if lookupErr != nil { + log.Error(err) + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + s.SMTP = smtp + } + s.FromAddress = s.SMTP.FromAddress + + // Validate the given request + if err = s.Validate(); err != nil { + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest) + return + } + + // Store the request if this wasn't the default template + if storeRequest { + err = models.PostEmailRequest(s) + if err != nil { + log.Error(err) + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + } + // Send the test email + err = as.worker.SendTestEmail(s) + if err != nil { + log.Error(err) + JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError) + return + } + JSONResponse(w, models.Response{Success: true, Message: "Email Sent"}, http.StatusOK) + return +} diff --git a/controllers/api_test.go b/controllers/controllers_test.go similarity index 64% rename from controllers/api_test.go rename to controllers/controllers_test.go index 9f9e26d9..de0a7366 100644 --- a/controllers/api_test.go +++ b/controllers/controllers_test.go @@ -1,10 +1,6 @@ package controllers import ( - "bytes" - "encoding/json" - "fmt" - "net/http" "net/http/httptest" "os" "testing" @@ -103,52 +99,6 @@ func (s *ControllersSuite) SetupTest() { c.UpdateStatus(models.CampaignEmailsSent) } -func (s *ControllersSuite) TestRequireAPIKey() { - resp, err := http.Post(fmt.Sprintf("%s/api/import/site", s.adminServer.URL), "application/json", nil) - s.Nil(err) - defer resp.Body.Close() - s.Equal(resp.StatusCode, http.StatusUnauthorized) -} - -func (s *ControllersSuite) TestInvalidAPIKey() { - resp, err := http.Get(fmt.Sprintf("%s/api/groups/?api_key=%s", s.adminServer.URL, "bogus-api-key")) - s.Nil(err) - defer resp.Body.Close() - s.Equal(resp.StatusCode, http.StatusUnauthorized) -} - -func (s *ControllersSuite) TestBearerToken() { - req, err := http.NewRequest("GET", fmt.Sprintf("%s/api/groups/", s.adminServer.URL), nil) - s.Nil(err) - req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", s.apiKey)) - resp, err := http.DefaultClient.Do(req) - s.Nil(err) - defer resp.Body.Close() - s.Equal(resp.StatusCode, http.StatusOK) -} - -func (s *ControllersSuite) TestSiteImportBaseHref() { - h := "" - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, h) - })) - hr := fmt.Sprintf("\n", ts.URL) - defer ts.Close() - resp, err := http.Post(fmt.Sprintf("%s/api/import/site?api_key=%s", s.adminServer.URL, s.apiKey), "application/json", - bytes.NewBuffer([]byte(fmt.Sprintf(` - { - "url" : "%s", - "include_resources" : false - } - `, ts.URL)))) - s.Nil(err) - defer resp.Body.Close() - cs := cloneResponse{} - err = json.NewDecoder(resp.Body).Decode(&cs) - s.Nil(err) - s.Equal(cs.HTML, hr) -} - func (s *ControllersSuite) TearDownSuite() { // Tear down the admin and phishing servers s.adminServer.Close() diff --git a/controllers/phish.go b/controllers/phish.go index e2ff7870..0d9fc262 100644 --- a/controllers/phish.go +++ b/controllers/phish.go @@ -13,6 +13,7 @@ import ( "github.com/NYTimes/gziphandler" "github.com/gophish/gophish/config" ctx "github.com/gophish/gophish/context" + "github.com/gophish/gophish/controllers/api" log "github.com/gophish/gophish/logger" "github.com/gophish/gophish/models" "github.com/gophish/gophish/util" @@ -81,19 +82,18 @@ func WithContactAddress(addr string) PhishingServerOption { } // Start launches the phishing server, listening on the configured address. -func (ps *PhishingServer) Start() error { +func (ps *PhishingServer) Start() { if ps.config.UseTLS { err := util.CheckAndCreateSSL(ps.config.CertPath, ps.config.KeyPath) if err != nil { log.Fatal(err) - return err } log.Infof("Starting phishing server at https://%s", ps.config.ListenURL) - return ps.server.ListenAndServeTLS(ps.config.CertPath, ps.config.KeyPath) + log.Fatal(ps.server.ListenAndServeTLS(ps.config.CertPath, ps.config.KeyPath)) } // If TLS isn't configured, just listen on HTTP log.Infof("Starting phishing server at http://%s", ps.config.ListenURL) - return ps.server.ListenAndServe() + log.Fatal(ps.server.ListenAndServe()) } // Shutdown attempts to gracefully shutdown the server. @@ -160,6 +160,7 @@ func (ps *PhishingServer) TrackHandler(w http.ResponseWriter, r *http.Request) { // ReportHandler tracks emails as they are reported, updating the status for the given Result func (ps *PhishingServer) ReportHandler(w http.ResponseWriter, r *http.Request) { r, err := setupContext(r) + w.Header().Set("Access-Control-Allow-Origin", "*") // To allow Chrome extensions (or other pages) to report a campaign without violating CORS if err != nil { // Log the error if it wasn't something we can safely ignore if err != ErrInvalidRequest && err != ErrCampaignComplete { @@ -202,6 +203,7 @@ func (ps *PhishingServer) PhishHandler(w http.ResponseWriter, r *http.Request) { http.NotFound(w, r) return } + w.Header().Set("X-Server", config.ServerName) // Useful for checking if this is a GoPhish server (e.g. for campaign reporting plugins) var ptx models.PhishingTemplateContext // Check for a preview if preview, ok := ctx.Get(r, "result").(models.EmailRequest); ok { @@ -299,7 +301,7 @@ func (ps *PhishingServer) TransparencyHandler(w http.ResponseWriter, r *http.Req SendDate: rs.SendDate, ContactAddress: ps.contactAddress, } - JSONResponse(w, tr, http.StatusOK) + api.JSONResponse(w, tr, http.StatusOK) } // setupContext handles some of the administrative work around receiving a new diff --git a/controllers/route.go b/controllers/route.go index 9adc3e4f..72cf545d 100644 --- a/controllers/route.go +++ b/controllers/route.go @@ -12,6 +12,7 @@ import ( "github.com/gophish/gophish/auth" "github.com/gophish/gophish/config" ctx "github.com/gophish/gophish/context" + "github.com/gophish/gophish/controllers/api" log "github.com/gophish/gophish/logger" mid "github.com/gophish/gophish/middleware" "github.com/gophish/gophish/models" @@ -64,7 +65,7 @@ func NewAdminServer(config config.AdminServer, options ...AdminServerOption) *Ad } // Start launches the admin server, listening on the configured address. -func (as *AdminServer) Start() error { +func (as *AdminServer) Start() { if as.worker != nil { go as.worker.Start() } @@ -72,14 +73,13 @@ func (as *AdminServer) Start() error { err := util.CheckAndCreateSSL(as.config.CertPath, as.config.KeyPath) if err != nil { log.Fatal(err) - return err } log.Infof("Starting admin server at https://%s", as.config.ListenURL) - return as.server.ListenAndServeTLS(as.config.CertPath, as.config.KeyPath) + log.Fatal(as.server.ListenAndServeTLS(as.config.CertPath, as.config.KeyPath)) } // If TLS isn't configured, just listen on HTTP log.Infof("Starting admin server at http://%s", as.config.ListenURL) - return as.server.ListenAndServe() + log.Fatal(as.server.ListenAndServe()) } // Shutdown attempts to gracefully shutdown the server. @@ -94,53 +94,30 @@ func (as *AdminServer) Shutdown() error { func (as *AdminServer) registerRoutes() { router := mux.NewRouter() // Base Front-end routes - router.HandleFunc("/", Use(as.Base, mid.RequireLogin)) + router.HandleFunc("/", mid.Use(as.Base, mid.RequireLogin)) router.HandleFunc("/login", as.Login) - router.HandleFunc("/logout", Use(as.Logout, mid.RequireLogin)) - router.HandleFunc("/campaigns", Use(as.Campaigns, mid.RequireLogin)) - router.HandleFunc("/campaigns/{id:[0-9]+}", Use(as.CampaignID, mid.RequireLogin)) - router.HandleFunc("/templates", Use(as.Templates, mid.RequireLogin)) - router.HandleFunc("/users", Use(as.Users, mid.RequireLogin)) - router.HandleFunc("/landing_pages", Use(as.LandingPages, mid.RequireLogin)) - router.HandleFunc("/sending_profiles", Use(as.SendingProfiles, mid.RequireLogin)) - router.HandleFunc("/settings", Use(as.Settings, mid.RequireLogin)) - router.HandleFunc("/register", Use(as.Register, mid.RequireLogin, mid.RequirePermission(models.PermissionModifySystem))) + router.HandleFunc("/logout", mid.Use(as.Logout, mid.RequireLogin)) + router.HandleFunc("/campaigns", mid.Use(as.Campaigns, mid.RequireLogin)) + router.HandleFunc("/campaigns/{id:[0-9]+}", mid.Use(as.CampaignID, mid.RequireLogin)) + router.HandleFunc("/templates", mid.Use(as.Templates, mid.RequireLogin)) + router.HandleFunc("/groups", mid.Use(as.Groups, mid.RequireLogin)) + router.HandleFunc("/landing_pages", mid.Use(as.LandingPages, mid.RequireLogin)) + router.HandleFunc("/sending_profiles", mid.Use(as.SendingProfiles, mid.RequireLogin)) + router.HandleFunc("/settings", mid.Use(as.Settings, mid.RequireLogin)) + router.HandleFunc("/users", mid.Use(as.UserManagement, mid.RequirePermission(models.PermissionModifySystem), mid.RequireLogin)) // Create the API routes - api := router.PathPrefix("/api").Subrouter() - api = api.StrictSlash(true) - api.Use(mid.RequireAPIKey) - api.Use(mid.EnforceViewOnly) - api.HandleFunc("/reset", as.APIReset) - api.HandleFunc("/campaigns/", as.APICampaigns) - api.HandleFunc("/campaigns/summary", as.APICampaignsSummary) - api.HandleFunc("/campaigns/{id:[0-9]+}", as.APICampaign) - api.HandleFunc("/campaigns/{id:[0-9]+}/results", as.APICampaignResults) - api.HandleFunc("/campaigns/{id:[0-9]+}/summary", as.APICampaignSummary) - api.HandleFunc("/campaigns/{id:[0-9]+}/complete", as.APICampaignComplete) - api.HandleFunc("/groups/", as.APIGroups) - api.HandleFunc("/groups/summary", as.APIGroupsSummary) - api.HandleFunc("/groups/{id:[0-9]+}", as.APIGroup) - api.HandleFunc("/groups/{id:[0-9]+}/summary", as.APIGroupSummary) - api.HandleFunc("/templates/", as.APITemplates) - api.HandleFunc("/templates/{id:[0-9]+}", as.APITemplate) - api.HandleFunc("/pages/", as.APIPages) - api.HandleFunc("/pages/{id:[0-9]+}", as.APIPage) - api.HandleFunc("/smtp/", as.APISendingProfiles) - api.HandleFunc("/smtp/{id:[0-9]+}", as.APISendingProfile) - api.HandleFunc("/util/send_test_email", as.APISendTestEmail) - api.HandleFunc("/import/group", as.APIImportGroup) - api.HandleFunc("/import/email", as.APIImportEmail) - api.HandleFunc("/import/site", as.APIImportSite) + api := api.NewServer(api.WithWorker(as.worker)) + router.PathPrefix("/api/").Handler(api) // Setup static file serving router.PathPrefix("/").Handler(http.FileServer(unindexed.Dir("./static/"))) // Setup CSRF Protection - csrfHandler := csrf.Protect([]byte(auth.GenerateSecureKey()), + csrfHandler := csrf.Protect([]byte(util.GenerateSecureKey()), csrf.FieldName("csrf_token"), csrf.Secure(as.config.UseTLS)) adminHandler := csrfHandler(router) - adminHandler = Use(adminHandler.ServeHTTP, mid.CSRFExceptions, mid.GetContext) + adminHandler = mid.Use(adminHandler.ServeHTTP, mid.CSRFExceptions, mid.GetContext) // Setup GZIP compression gzipWrapper, _ := gziphandler.NewGzipLevelHandler(gzip.BestCompression) @@ -151,15 +128,6 @@ func (as *AdminServer) registerRoutes() { as.server.Handler = adminHandler } -// Use allows us to stack middleware to process the request -// Example taken from https://github.com/gorilla/mux/pull/36#issuecomment-25849172 -func Use(handler http.HandlerFunc, mid ...func(http.Handler) http.HandlerFunc) http.HandlerFunc { - for _, m := range mid { - handler = m(handler) - } - return handler -} - type templateParams struct { Title string Flashes []interface{} @@ -182,42 +150,6 @@ func newTemplateParams(r *http.Request) templateParams { } } -// Register creates a new user -func (as *AdminServer) Register(w http.ResponseWriter, r *http.Request) { - // If it is a post request, attempt to register the account - // Now that we are all registered, we can log the user in - params := templateParams{Title: "Register", Token: csrf.Token(r)} - session := ctx.Get(r, "session").(*sessions.Session) - switch { - case r.Method == "GET": - params.Flashes = session.Flashes() - session.Save(r, w) - templates := template.New("template") - _, err := templates.ParseFiles("templates/register.html", "templates/flashes.html") - if err != nil { - log.Error(err) - } - template.Must(templates, err).ExecuteTemplate(w, "base", params) - case r.Method == "POST": - //Attempt to register - succ, err := auth.Register(r) - //If we've registered, redirect to the login page - if succ { - Flash(w, r, "success", "Registration successful!") - session.Save(r, w) - http.Redirect(w, r, "/login", 302) - return - } - // Check the error - m := err.Error() - log.Error(err) - Flash(w, r, "danger", m) - session.Save(r, w) - http.Redirect(w, r, "/register", 302) - return - } -} - // Base handles the default path and template execution func (as *AdminServer) Base(w http.ResponseWriter, r *http.Request) { params := newTemplateParams(r) @@ -246,11 +178,11 @@ func (as *AdminServer) Templates(w http.ResponseWriter, r *http.Request) { getTemplate(w, "templates").ExecuteTemplate(w, "base", params) } -// Users handles the default path and template execution -func (as *AdminServer) Users(w http.ResponseWriter, r *http.Request) { +// Groups handles the default path and template execution +func (as *AdminServer) Groups(w http.ResponseWriter, r *http.Request) { params := newTemplateParams(r) params.Title = "Users & Groups" - getTemplate(w, "users").ExecuteTemplate(w, "base", params) + getTemplate(w, "groups").ExecuteTemplate(w, "base", params) } // LandingPages handles the default path and template execution @@ -280,19 +212,27 @@ func (as *AdminServer) Settings(w http.ResponseWriter, r *http.Request) { if err == auth.ErrInvalidPassword { msg.Message = "Invalid Password" msg.Success = false - JSONResponse(w, msg, http.StatusBadRequest) + api.JSONResponse(w, msg, http.StatusBadRequest) return } if err != nil { msg.Message = err.Error() msg.Success = false - JSONResponse(w, msg, http.StatusBadRequest) + api.JSONResponse(w, msg, http.StatusBadRequest) return } - JSONResponse(w, msg, http.StatusOK) + api.JSONResponse(w, msg, http.StatusOK) } } +// UserManagement is an admin-only handler that allows for the registration +// and management of user accounts within Gophish. +func (as *AdminServer) UserManagement(w http.ResponseWriter, r *http.Request) { + params := newTemplateParams(r) + params.Title = "User Management" + getTemplate(w, "users").ExecuteTemplate(w, "base", params) +} + // Login handles the authentication flow for a user. If credentials are valid, // a session is created func (as *AdminServer) Login(w http.ResponseWriter, r *http.Request) { diff --git a/docker/run.sh b/docker/run.sh new file mode 100755 index 00000000..17cceb5d --- /dev/null +++ b/docker/run.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +# set config for admin_server +if [ -n "${ADMIN_LISTEN_URL+set}" ] ; then + jq -r \ + --arg ADMIN_LISTEN_URL "${ADMIN_LISTEN_URL}" \ + '.admin_server.listen_url = $ADMIN_LISTEN_URL' config.json > config.json.tmp && \ + cat config.json.tmp > config.json +fi +if [ -n "${ADMIN_USE_TLS+set}" ] ; then + jq -r \ + --argjson ADMIN_USE_TLS "${ADMIN_USE_TLS}" \ + '.admin_server.use_tls = $ADMIN_USE_TLS' config.json > config.json.tmp && \ + cat config.json.tmp > config.json +fi +if [ -n "${ADMIN_CERT_PATH+set}" ] ; then + jq -r \ + --arg ADMIN_CERT_PATH "${ADMIN_CERT_PATH}" \ + '.admin_server.cert_path = $ADMIN_CERT_PATH' config.json > config.json.tmp && \ + cat config.json.tmp > config.json +fi +if [ -n "${ADMIN_KEY_PATH+set}" ] ; then + jq -r \ + --arg ADMIN_KEY_PATH "${ADMIN_KEY_PATH}" \ + '.admin_server.key_path = $ADMIN_KEY_PATH' config.json > config.json.tmp && \ + cat config.json.tmp > config.json +fi + +# set config for phish_server +if [ -n "${PHISH_LISTEN_URL+set}" ] ; then + jq -r \ + --arg PHISH_LISTEN_URL "${PHISH_LISTEN_URL}" \ + '.phish_server.listen_url = $PHISH_LISTEN_URL' config.json > config.json.tmp && \ + cat config.json.tmp > config.json +fi +if [ -n "${PHISH_USE_TLS+set}" ] ; then + jq -r \ + --argjson PHISH_USE_TLS "${PHISH_USE_TLS}" \ + '.phish_server.use_tls = $PHISH_USE_TLS' config.json > config.json.tmp && \ + cat config.json.tmp > config.json +fi +if [ -n "${PHISH_CERT_PATH+set}" ] ; then + jq -r \ + --arg PHISH_CERT_PATH "${PHISH_CERT_PATH}" \ + '.phish_server.cert_path = $PHISH_CERT_PATH' config.json > config.json.tmp && \ + cat config.json.tmp > config.json +fi +if [ -n "${PHISH_KEY_PATH+set}" ] ; then + jq -r \ + --arg PHISH_KEY_PATH "${PHISH_KEY_PATH}" \ + '.phish_server.key_path = $PHISH_KEY_PATH' config.json > config.json.tmp && \ + cat config.json.tmp > config.json +fi + +# set contact_address +if [ -n "${CONTACT_ADDRESS+set}" ] ; then + jq -r \ + --arg CONTACT_ADDRESS "${CONTACT_ADDRESS}" \ + '.contact_address = $CONTACT_ADDRESS' config.json > config.json.tmp && \ + cat config.json.tmp > config.json +fi + +if [ -n "${DB_FILE_PATH+set}" ] ; then + jq -r \ + --arg DB_FILE_PATH "${DB_FILE_PATH}" \ + '.db_path = $DB_FILE_PATH' config.json > config.json.tmp && \ + cat config.json.tmp > config.json +fi + +echo "Runtime configuration: " +cat config.json + +# start gophish +./gophish diff --git a/gophish.go b/gophish.go index 6c6fbd9f..e86393d7 100644 --- a/gophish.go +++ b/gophish.go @@ -32,10 +32,10 @@ import ( "gopkg.in/alecthomas/kingpin.v2" - "github.com/gophish/gophish/auth" "github.com/gophish/gophish/config" "github.com/gophish/gophish/controllers" log "github.com/gophish/gophish/logger" + "github.com/gophish/gophish/middleware" "github.com/gophish/gophish/models" ) @@ -94,7 +94,7 @@ func main() { } adminConfig := conf.AdminConf adminServer := controllers.NewAdminServer(adminConfig, adminOptions...) - auth.Store.Options.Secure = adminConfig.UseTLS + middleware.Store.Options.Secure = adminConfig.UseTLS phishConfig := conf.PhishConf phishServer := controllers.NewPhishingServer(phishConfig) diff --git a/gulpfile.js b/gulpfile.js index ea8e31b5..809c28f0 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -9,16 +9,16 @@ var gulp = require('gulp'), concat = require('gulp-concat'), uglify = require('gulp-uglify'), cleanCSS = require('gulp-clean-css'), + babel = require('gulp-babel'), js_directory = 'static/js/src/', css_directory = 'static/css/', vendor_directory = js_directory + 'vendor/', - app_directory = js_directory + 'app/**/*.js', + app_directory = js_directory + 'app/', dest_js_directory = 'static/js/dist/', dest_css_directory = 'static/css/dist/'; -gulp.task('vendorjs', function () { - // Vendor minifying / concat +vendorjs = function () { return gulp.src([ vendor_directory + 'jquery.js', vendor_directory + 'bootstrap.min.js', @@ -46,11 +46,22 @@ gulp.task('vendorjs', function () { })) .pipe(uglify()) .pipe(gulp.dest(dest_js_directory)); -}) +} -gulp.task('scripts', function () { - // Gophish app files - gulp.src(app_directory) +scripts = function () { + // Gophish app files - non-ES6 + return gulp.src([ + app_directory + 'autocomplete.js', + app_directory + 'campaign_results.js', + app_directory + 'campaigns.js', + app_directory + 'dashboard.js', + app_directory + 'groups.js', + app_directory + 'landing_pages.js', + app_directory + 'sending_profiles.js', + app_directory + 'settings.js', + app_directory + 'templates.js', + app_directory + 'gophish.js', + ]) .pipe(rename({ suffix: '.min' })) @@ -58,9 +69,9 @@ gulp.task('scripts', function () { console.log(e); })) .pipe(gulp.dest(dest_js_directory + 'app/')); -}) +} -gulp.task('styles', function () { +styles = function () { return gulp.src([ css_directory + 'bootstrap.min.css', css_directory + 'main.css', @@ -80,8 +91,10 @@ gulp.task('styles', function () { })) .pipe(concat('gophish.css')) .pipe(gulp.dest(dest_css_directory)); -}) +} -gulp.task('build', ['vendorjs', 'scripts', 'styles']); - -gulp.task('default', ['build']); \ No newline at end of file +exports.vendorjs = vendorjs +exports.scripts = scripts +exports.styles = styles +exports.build = gulp.parallel(vendorjs, scripts, styles) +exports.default = exports.build \ No newline at end of file diff --git a/middleware/middleware.go b/middleware/middleware.go index 281aa6be..628763cc 100644 --- a/middleware/middleware.go +++ b/middleware/middleware.go @@ -6,7 +6,6 @@ import ( "net/http" "strings" - "github.com/gophish/gophish/auth" ctx "github.com/gophish/gophish/context" "github.com/gophish/gophish/models" "github.com/gorilla/csrf" @@ -31,6 +30,15 @@ func CSRFExceptions(handler http.Handler) http.HandlerFunc { } } +// Use allows us to stack middleware to process the request +// Example taken from https://github.com/gorilla/mux/pull/36#issuecomment-25849172 +func Use(handler http.HandlerFunc, mid ...func(http.Handler) http.HandlerFunc) http.HandlerFunc { + for _, m := range mid { + handler = m(handler) + } + return handler +} + // GetContext wraps each request in a function which fills in the context for a given request. // This includes setting the User and Session keys and values as necessary for use in later functions. func GetContext(handler http.Handler) http.HandlerFunc { @@ -43,7 +51,7 @@ func GetContext(handler http.Handler) http.HandlerFunc { } // Set the context appropriately here. // Set the session - session, _ := auth.Store.Get(r, "gophish") + session, _ := Store.Get(r, "gophish") // Put the session in the context so that we can // reuse the values in different handlers r = ctx.Set(r, "session", session) @@ -107,11 +115,12 @@ func RequireLogin(handler http.Handler) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { if u := ctx.Get(r, "user"); u != nil { handler.ServeHTTP(w, r) - } else { - q := r.URL.Query() - q.Set("next", r.URL.Path) - http.Redirect(w, r, fmt.Sprintf("/login?%s", q.Encode()), http.StatusTemporaryRedirect) + return } + q := r.URL.Query() + q.Set("next", r.URL.Path) + http.Redirect(w, r, fmt.Sprintf("/login?%s", q.Encode()), http.StatusTemporaryRedirect) + return } } diff --git a/middleware/middleware_test.go b/middleware/middleware_test.go index b17b6351..30752b01 100644 --- a/middleware/middleware_test.go +++ b/middleware/middleware_test.go @@ -1,6 +1,7 @@ package middleware import ( + "fmt" "net/http" "net/http/httptest" "testing" @@ -17,6 +18,7 @@ var successHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Reques type MiddlewareSuite struct { suite.Suite + apiKey string } func (s *MiddlewareSuite) SetupSuite() { @@ -29,6 +31,10 @@ func (s *MiddlewareSuite) SetupSuite() { if err != nil { s.T().Fatalf("Failed creating database: %v", err) } + // Get the API key to use for these tests + u, err := models.GetUser(1) + s.Nil(err) + s.apiKey = u.ApiKey } // MiddlewarePermissionTest maps an expected HTTP Method to an expected HTTP @@ -99,6 +105,35 @@ func (s *MiddlewareSuite) TestRequirePermission() { } } +func (s *MiddlewareSuite) TestRequireAPIKey() { + req := httptest.NewRequest(http.MethodGet, "/", nil) + req.Header.Set("Content-Type", "application/json") + response := httptest.NewRecorder() + // Test that making a request without an API key is denied + RequireAPIKey(successHandler).ServeHTTP(response, req) + s.Equal(response.Code, http.StatusUnauthorized) +} + +func (s *MiddlewareSuite) TestInvalidAPIKey() { + req := httptest.NewRequest(http.MethodGet, "/", nil) + query := req.URL.Query() + query.Set("api_key", "bogus-api-key") + req.URL.RawQuery = query.Encode() + req.Header.Set("Content-Type", "application/json") + response := httptest.NewRecorder() + RequireAPIKey(successHandler).ServeHTTP(response, req) + s.Equal(response.Code, http.StatusUnauthorized) +} + +func (s *MiddlewareSuite) TestBearerToken() { + req := httptest.NewRequest(http.MethodGet, "/", nil) + req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", s.apiKey)) + req.Header.Set("Content-Type", "application/json") + response := httptest.NewRecorder() + RequireAPIKey(successHandler).ServeHTTP(response, req) + s.Equal(response.Code, http.StatusOK) +} + func TestMiddlewareSuite(t *testing.T) { suite.Run(t, new(MiddlewareSuite)) } diff --git a/middleware/session.go b/middleware/session.go new file mode 100644 index 00000000..fe96701b --- /dev/null +++ b/middleware/session.go @@ -0,0 +1,23 @@ +package middleware + +import ( + "encoding/gob" + + "github.com/gophish/gophish/models" + "github.com/gorilla/securecookie" + "github.com/gorilla/sessions" +) + +// init registers the necessary models to be saved in the session later +func init() { + gob.Register(&models.User{}) + gob.Register(&models.Flash{}) + Store.Options.HttpOnly = true + // This sets the maxAge to 5 days for all cookies + Store.MaxAge(86400 * 5) +} + +// Store contains the session information for the request +var Store = sessions.NewCookieStore( + []byte(securecookie.GenerateRandomKey(64)), //Signing key + []byte(securecookie.GenerateRandomKey(32))) diff --git a/models/maillog.go b/models/maillog.go index 98e4a904..59a7f639 100644 --- a/models/maillog.go +++ b/models/maillog.go @@ -1,12 +1,15 @@ package models import ( + "crypto/rand" "encoding/base64" "errors" "fmt" "io" "math" + "math/big" "net/mail" + "os" "strings" "time" @@ -162,6 +165,14 @@ func (m *MailLog) Generate(msg *gomail.Message) error { if conf.ContactAddress != "" { msg.SetHeader("X-Gophish-Contact", conf.ContactAddress) } + + // Add Message-Id header as described in RFC 2822. + messageID, err := m.generateMessageID() + if err != nil { + return err + } + msg.SetHeader("Message-Id", messageID) + // Parse the customHeader templates for _, header := range c.SMTP.Headers { key, err := ExecuteTemplate(header.Key, ptx) @@ -261,3 +272,30 @@ func LockMailLogs(ms []*MailLog, lock bool) error { func UnlockAllMailLogs() error { return db.Model(&MailLog{}).Update("processing", false).Error } + +var maxBigInt = big.NewInt(math.MaxInt64) + +// generateMessageID generates and returns a string suitable for an RFC 2822 +// compliant Message-ID, e.g.: +// <1444789264909237300.3464.1819418242800517193@DESKTOP01> +// +// The following parameters are used to generate a Message-ID: +// - The nanoseconds since Epoch +// - The calling PID +// - A cryptographically random int64 +// - The sending hostname +func (m *MailLog) generateMessageID() (string, error) { + t := time.Now().UnixNano() + pid := os.Getpid() + rint, err := rand.Int(rand.Reader, maxBigInt) + if err != nil { + return "", err + } + h, err := os.Hostname() + // If we can't get the hostname, we'll use localhost + if err != nil { + h = "localhost.localdomain" + } + msgid := fmt.Sprintf("<%d.%d.%d@%s>", t, pid, rint, h) + return msgid, nil +} diff --git a/models/models.go b/models/models.go index 3b1c82f9..e929af02 100644 --- a/models/models.go +++ b/models/models.go @@ -4,10 +4,14 @@ import ( "crypto/rand" "fmt" "io" + "time" + "crypto/tls" + "crypto/x509" + "io/ioutil" "bitbucket.org/liamstask/goose/lib/goose" - _ "github.com/go-sql-driver/mysql" // Blank import needed to import mysql + mysql "github.com/go-sql-driver/mysql" "github.com/gophish/gophish/config" log "github.com/gophish/gophish/logger" "github.com/jinzhu/gorm" @@ -17,6 +21,8 @@ import ( var db *gorm.DB var conf *config.Config +const MaxDatabaseConnectionAttempts int = 10 + const ( CampaignInProgress string = "In progress" CampaignQueued string = "Queued" @@ -93,8 +99,45 @@ func Setup(c *config.Config) error { log.Error(err) return err } + + // Register certificates for tls encrypted db connections + if conf.DBSSLCaPath != "" { + switch conf.DBName { + case "mysql": + rootCertPool := x509.NewCertPool() + pem, err := ioutil.ReadFile(conf.DBSSLCaPath) + if err != nil { + log.Error(err) + return err + } + if ok := rootCertPool.AppendCertsFromPEM(pem); !ok { + log.Error("Failed to append PEM.") + return err + } + mysql.RegisterTLSConfig("ssl_ca", &tls.Config{ + RootCAs: rootCertPool, + }) + // Default database is sqlite3, which supports no tls, as connection + // is file based + default: + } + } + // Open our database connection - db, err = gorm.Open(conf.DBName, conf.DBPath) + i := 0 + for { + db, err = gorm.Open(conf.DBName, conf.DBPath) + if err == nil { + break + } + if err != nil && i >= MaxDatabaseConnectionAttempts { + log.Error(err) + return err + } + i += 1 + log.Warn("waiting for database to be up...") + time.Sleep(5 * time.Second) + } db.LogMode(false) db.SetLogger(log.Logger) db.DB().SetMaxOpenConns(1) diff --git a/models/rbac.go b/models/rbac.go index fc1139fd..00f1346a 100644 --- a/models/rbac.go +++ b/models/rbac.go @@ -48,7 +48,7 @@ const ( // Role represents a user role within Gophish. Each user has a single role // which maps to a set of permissions. type Role struct { - ID int64 `json:"id"` + ID int64 `json:"-"` Slug string `json:"slug"` Name string `json:"name"` Description string `json:"description"` diff --git a/models/smtp.go b/models/smtp.go index 10441ad4..a78d82fd 100644 --- a/models/smtp.go +++ b/models/smtp.go @@ -218,6 +218,7 @@ func PutSMTP(s *SMTP) error { log.Error(err) return err } + // Save custom headers for i := range s.Headers { s.Headers[i].SMTPId = s.Id err := db.Save(&s.Headers[i]).Error diff --git a/models/template_context.go b/models/template_context.go index 96e03f3e..a524d304 100644 --- a/models/template_context.go +++ b/models/template_context.go @@ -45,7 +45,10 @@ func NewPhishingTemplateContext(ctx TemplateContext, r BaseRecipient, rid string // For the base URL, we'll reset the the path and the query // This will create a URL in the form of http://example.com - baseURL, _ := url.Parse(templateURL) + baseURL, err:= url.Parse(templateURL) + if err != nil { + return PhishingTemplateContext{}, err + } baseURL.Path = "" baseURL.RawQuery = "" diff --git a/models/user.go b/models/user.go index 9ce92bbc..e8374e8c 100644 --- a/models/user.go +++ b/models/user.go @@ -1,5 +1,16 @@ package models +import ( + "errors" + + log "github.com/gophish/gophish/logger" +) + +// ErrModifyingOnlyAdmin occurs when there is an attempt to modify the only +// user account with the Admin role in such a way that there will be no user +// accounts left in Gophish with that role. +var ErrModifyingOnlyAdmin = errors.New("Cannot remove the only administrator") + // User represents the user model for gophish. type User struct { Id int64 `json:"id"` @@ -18,6 +29,13 @@ func GetUser(id int64) (User, error) { return u, err } +// GetUsers returns the users registered in Gophish +func GetUsers() ([]User, error) { + us := []User{} + err := db.Preload("Role").Find(&us).Error + return us, err +} + // GetUserByAPIKey returns the user that the given API Key corresponds to. If no user is found, an // error is thrown. func GetUserByAPIKey(key string) (User, error) { @@ -39,3 +57,102 @@ func PutUser(u *User) error { err := db.Save(u).Error return err } + +// EnsureEnoughAdmins ensures that there is more than one user account in +// Gophish with the Admin role. This function is meant to be called before +// modifying a user account with the Admin role in a non-revokable way. +func EnsureEnoughAdmins() error { + role, err := GetRoleBySlug(RoleAdmin) + if err != nil { + return err + } + var adminCount int + err = db.Model(&User{}).Where("role_id=?", role.ID).Count(&adminCount).Error + if err != nil { + return err + } + if adminCount == 1 { + return ErrModifyingOnlyAdmin + } + return nil +} + +// DeleteUser deletes the given user. To ensure that there is always at least +// one user account with the Admin role, this function will refuse to delete +// the last Admin. +func DeleteUser(id int64) error { + existing, err := GetUser(id) + if err != nil { + return err + } + // If the user is an admin, we need to verify that it's not the last one. + if existing.Role.Slug == RoleAdmin { + err = EnsureEnoughAdmins() + if err != nil { + return err + } + } + campaigns, err := GetCampaigns(id) + if err != nil { + return err + } + // Delete the campaigns + log.Infof("Deleting campaigns for user ID %d", id) + for _, campaign := range campaigns { + err = DeleteCampaign(campaign.Id) + if err != nil { + return err + } + } + log.Infof("Deleting pages for user ID %d", id) + // Delete the landing pages + pages, err := GetPages(id) + if err != nil { + return err + } + for _, page := range pages { + err = DeletePage(page.Id, id) + if err != nil { + return err + } + } + // Delete the templates + log.Infof("Deleting templates for user ID %d", id) + templates, err := GetTemplates(id) + if err != nil { + return err + } + for _, template := range templates { + err = DeleteTemplate(template.Id, id) + if err != nil { + return err + } + } + // Delete the groups + log.Infof("Deleting groups for user ID %d", id) + groups, err := GetGroups(id) + if err != nil { + return err + } + for _, group := range groups { + err = DeleteGroup(&group) + if err != nil { + return err + } + } + // Delete the sending profiles + log.Infof("Deleting sending profiles for user ID %d", id) + profiles, err := GetSMTPs(id) + if err != nil { + return err + } + for _, profile := range profiles { + err = DeleteSMTP(profile.Id, id) + if err != nil { + return err + } + } + // Finally, delete the user + err = db.Where("id=?", id).Delete(&User{}).Error + return err +} diff --git a/models/user_test.go b/models/user_test.go index 7e86eecb..c869d82e 100644 --- a/models/user_test.go +++ b/models/user_test.go @@ -59,3 +59,44 @@ func (s *ModelsSuite) TestGeneratedAPIKey(c *check.C) { c.Assert(err, check.Equals, nil) c.Assert(u.ApiKey, check.Not(check.Equals), "12345678901234567890123456789012") } + +func (s *ModelsSuite) verifyRoleCount(c *check.C, roleID, expected int64) { + var adminCount int64 + err := db.Model(&User{}).Where("role_id=?", roleID).Count(&adminCount).Error + c.Assert(err, check.Equals, nil) + c.Assert(adminCount, check.Equals, expected) +} + +func (s *ModelsSuite) TestDeleteLastAdmin(c *check.C) { + // Create a new admin user + role, err := GetRoleBySlug(RoleAdmin) + c.Assert(err, check.Equals, nil) + newAdmin := User{ + Username: "new-admin", + Hash: "123456", + ApiKey: "123456", + Role: role, + RoleID: role.ID, + } + err = PutUser(&newAdmin) + c.Assert(err, check.Equals, nil) + + // Ensure that there are two admins + s.verifyRoleCount(c, role.ID, 2) + + // Delete the newly created admin - this should work since we have more + // than one current admin. + err = DeleteUser(newAdmin.Id) + c.Assert(err, check.Equals, nil) + + // Verify that we now have one admin + s.verifyRoleCount(c, role.ID, 1) + + // Try to delete the last admin - this should fail since we always want at + // least one admin active in Gophish. + err = DeleteUser(1) + c.Assert(err, check.Equals, ErrModifyingOnlyAdmin) + + // Verify that the admin wasn't deleted + s.verifyRoleCount(c, role.ID, 1) +} diff --git a/package.json b/package.json index 36d7e62c..10a1cdad 100644 --- a/package.json +++ b/package.json @@ -12,17 +12,22 @@ }, "homepage": "https://getgophish.com", "devDependencies": { - "clean-css": "^3.4.23", - "gulp": "^3.9.1", - "gulp-clean-css": "^2.3.2", - "gulp-cli": "^1.4.0", + "@babel/core": "^7.4.5", + "@babel/preset-env": "^7.4.5", + "babel-loader": "^8.0.6", + "clean-css": "^4.2.1", + "gulp": "^4.0.0", + "gulp-babel": "^8.0.0", + "gulp-clean-css": "^4.0.0", + "gulp-cli": "^2.2.0", "gulp-concat": "^2.6.1", - "gulp-jshint": "^2.0.4", - "gulp-rename": "^1.2.2", - "gulp-uglify": "^2.0.0", - "gulp-util": "^3.0.8", - "gulp-wrap": "^0.13.0", - "jshint": "^2.9.4", - "jshint-stylish": "^2.2.1" + "gulp-jshint": "^2.1.0", + "gulp-rename": "^1.4.0", + "gulp-uglify": "^3.0.2", + "gulp-wrap": "^0.15.0", + "jshint": "^2.10.2", + "jshint-stylish": "^2.2.1", + "webpack": "^4.32.2", + "webpack-cli": "^3.3.2" } } diff --git a/static/css/dist/gophish.css b/static/css/dist/gophish.css index f80dfc2f..23288b1d 100644 --- a/static/css/dist/gophish.css +++ b/static/css/dist/gophish.css @@ -3,7 +3,7 @@ * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(/font/glyphicons-halflings-regular.eot);src:url(/font/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(/font/glyphicons-halflings-regular.woff2) format('woff2'),url(/font/glyphicons-halflings-regular.woff) format('woff'),url(/font/glyphicons-halflings-regular.ttf) format('truetype'),url(/font/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.in{opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;opacity:0;line-break:auto}.tooltip.in{opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} -.nav-tabs{cursor:pointer}.datatable_hidden{display:none}.navbar-logo{margin:4px 0;float:left}#navbar-login{padding-top:8px;padding-bottom:0}#navbar-dropdown{margin-top:6px;margin-right:15px}.sans{font-family:'Open Sans',sans-serif!important}.label{font-family:Roboto,sans-serif!important}.form-signin{max-width:400px;padding:15px;margin:40px auto 0 auto}ul .dropdown-menu .ng-isolate-scope{visibility:visible;display:block;opacity:1}#login-button{padding:10px 15px}.form-signin-heading{text-align:center}.form-signin .checkbox,.form-signin .form-signin-heading{margin-bottom:10px}.form-signin .checkbox{font-weight:400}.form-signin .form-control{font-family:'Open Sans',sans-serif;position:relative;font-size:16px;height:auto;padding:10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-signin .form-control:focus{z-index:2}.form-signin .top-input{margin-bottom:-1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.form-signin .middle-input{margin-bottom:-1px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.form-signin .bottom-input{margin-bottom:10px;border-top-left-radius:0;border-top-right-radius:0}#logo{display:block;margin-left:auto;margin-right:auto}footer>p{color:#444;font-family:'Open Sans',sans-serif}.header{margin-top:10px}.sidebar{padding-left:0}.sidebar a{color:#201e1c}.sidebar a:hover{color:#201e1c}.api_heading{font-family:'Open Sans',sans-serif;background-color:#201e1c;border-radius:5px;padding:10px;color:#e2e2e2;width:100%}p{font-size:1.2em}.form-label{padding-top:7px}.hover{visibility:visible}.edit-button{display:none}.editable-row:hover .edit-button{display:inline-block;padding:3px 6px;font-size:9px}.remove-row{float:right;cursor:pointer}.pagination{margin:0}@media (min-width:992px){.modal-dialog{width:700px}}.dropdown-menu>li>a{cursor:pointer}.btn-file{position:relative;overflow:hidden}.btn-file input[type=file]{position:absolute;top:0;right:0;min-width:100%;min-height:100%;text-align:right;opacity:0;outline:0;background:#fff;cursor:inherit;display:block}.typeahead{border-left-radius:6px!important;float:none!important}.tt-query{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.tt-hint{color:#999}.tt-menu{width:422px;margin-top:4px;padding:4px 0;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.tt-suggestion{padding:3px 20px;line-height:24px}.tt-suggestion.tt-cursor{color:#fff;background-color:#0097cf}.tt-suggestion p{margin:0}.typeahead-button{line-height:1.39!important}.ct-point{cursor:pointer}.ct-timeline-point{cursor:pointer;stroke:#fff;stroke-width:1px}.ct-point-sending{fill:#428bca!important}.ct-point-error{fill:#6c7a89!important}.ct-point-clicked{fill:#f39c12!important}.ct-point-opened{fill:#f9bf3b!important}.ct-point-sent{fill:#1abc9c!important}.ct-point-success{fill:#f05b4f!important}.chartist-tooltip{position:absolute;display:inline-block;min-width:5em;padding:.5em;background:#283f50;color:#fff;font-weight:700;text-align:center;pointer-events:none;z-index:1;margin-left:1.25em;font-size:.75em;border-radius:4px}.chartist-pie-tooltip{position:absolute;display:inline-block;min-width:5em;padding:.5em;background:#283f50;color:#fff;font-weight:700;text-align:center;pointer-events:none;z-index:1;margin-left:1.25em;font-size:.75em;border-radius:4px}.chartist-tooltip:after{content:"";position:absolute;top:100%;left:50%;width:0;height:0;margin-left:-15px;border:15px solid transparent;border-top-color:#283f50}.chartist-chart{height:175px}.chartist-legend{list-style:none;position:absolute;padding-left:0;top:0}.chartist-legend li{display:block;position:relative;margin-bottom:4px;border-radius:5px;padding:2px 8px 2px 8px;font-size:14px;cursor:default;-webkit-transition:background-color .2s ease-in-out;-moz-transition:background-color .2s ease-in-out;-o-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.chartist-legend li span{display:inline-block;vertical-align:middle;width:20px;height:20px;margin-right:10px;border-radius:50%}.ct-series-a .ct-slice-donut{stroke:#1abc9c!important}.ct-slice-donut.ct-slice-donut-error{stroke:#6c7a89!important}.ct-slice-donut.ct-slice-donut-sent{stroke:#1abc9c!important}.ct-slice-donut.ct-slice-donut-opened{stroke:#f9bf3b!important}.ct-slice-donut.ct-slice-donut-success{stroke:#f05b4f!important}.ct-slice-donut.ct-slice-donut-clicked{stroke:#f39c12!important}.ct-slice-donut.ct-slice-donut-sending{stroke:#428bca!important}.ct-legend-error{background-color:#6c7a89!important}.ct-legend-sent{background-color:#1abc9c!important}.ct-legend-opened{background-color:#f9bf3b!important}.ct-legend-success{background-color:#f05b4f!important}.ct-legend-clicked{background-color:#f39c12!important}.ct-legend-sending{background-color:#428bca!important}.label-clicked{background-color:#f39c12!important}.gophish-editor{font-family:'Courier New',Monospace!important;font-size:small!important}#resultsMap{margin-top:-30px}@media (min-width:768px) and (max-width:1300px){.navbar-collapse.collapse{display:none!important}.navbar-collapse.collapse.in{display:block!important}.navbar-header .collapse,.navbar-toggle{display:block!important}.navbar-header{float:none!important}}.modal-content table{table-layout:fixed}.modal-content .dataTable tbody td{font-size:16px;overflow:hidden;text-overflow:ellipsis}.dataTables_info{font-size:15px}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after{font-family:FontAwesome!important;position:relative!important;display:initial!important;top:initial!important;right:initial!important;left:6px;color:#1abc9c}table.dataTable thead .sorting:after{content:"\f0dc"!important;color:initial}table.dataTable thead .sorting_asc:after{content:"\f0de"!important;opacity:.8!important}table.dataTable thead .sorting_desc:after{content:"\f0dd"!important;opacity:.8!important}td.details-control{cursor:pointer}.timeline{text-align:left;background-color:#fff}.timeline-graph{margin-left:30px}.timeline>h6{margin-top:0;margin-bottom:5px}.timeline>.subtitle{color:#999;font-style:italic;margin-bottom:15px;display:block}.timeline-entry{position:relative;padding-bottom:36px}.timeline-bar{display:block;content:"";position:absolute;top:5px;bottom:0;width:1px;left:-6px;background:#aaa}.timeline-entry:last-child .timeline-bar{display:none}.timeline-entry:last-child{padding-bottom:0}.timeline-icon{position:relative;float:left;margin-left:-24px;width:36px;top:-5px;height:36px;text-align:center;border-radius:50%}.timeline-icon>i{margin-top:10px;color:#fff}.timeline-message{padding-left:30px}.timeline-date{float:right;color:#999;font-style:italic}.timeline-event-details{font-size:16px;margin-top:5px;cursor:pointer}.timeline-replay-button{margin-top:10px}.timeline-event-details>.table-responsive{display:none}.timeline-event-details{margin-top:10px;margin-bottom:10px}.timeline-event-results{font-size:16px;display:none}.timeline-device-details{font-size:.8em;margin-top:10px}.timeline-device-os>span.fa-stack{font-size:.8em}.timeline-device-browser>span.fa-stack{font-size:.8em}.timeline-device-browser>span.fa-stack>i.fa-stack-1x{font-size:1.5em}i.fa-vendor-icon{font-size:.6em}i.fa-tablet+i.fa-vendor-icon{top:-2px}i.fa-tablet+i.fa-vendor-icon{top:-2px}i.fa-laptop+i.fa-vendor-icon{top:-2px}.tooltip-inner{width:300px!important}#refresh_message{display:none}#capture_passwords{display:none}#redirect_url{display:none}@media (max-width:767px){.navbar-header{margin-left:10px!important}}table.dataTable{width:100%!important}.btn-blue{color:#fff;background-color:#428bca;border-color:#428bca}.btn-blue:hover{background-color:#64a1d6}.select2-container--bootstrap .select2-selection--single .select2-selection__rendered{font-size:15px!important}.select2-container--bootstrap .select2-selection--single{height:42px!important;padding:8px 12px!important}.input-group-btn .btn{line-height:20px!important}.highcharts-title{font-family:"Source Sans Pro",Helvetica,Arial,sans-serif;font-size:16px!important}.color-success{font-weight:700;color:#f05b4f}.color-sent{font-weight:700;color:#1abc9c}.color-opened{font-weight:700;color:#f9bf3b}.color-clicked{font-weight:700;color:#f39c12}.color-reported{font-weight:700;color:#45d6ef}.color-success{color:#f05b4f}.nav-sidebar>li.active>a:focus,.nav-sidebar>li.active>a:hover{background-color:#37485a}#resultsMapContainer{display:none}#csv-template{margin-left:15px;cursor:pointer}.cke_chrome{border-top:0!important}.cke_autocomplete_panel{width:400px!important}.cke_autocomplete_panel>li{padding:10px 5px!important} +.swal2-popup{font-size:1.6rem!important}.nav-tabs{cursor:pointer}.datatable_hidden{display:none}.navbar-logo{margin:4px 0;float:left}#navbar-login{padding-top:8px;padding-bottom:0}#navbar-dropdown{margin-top:6px;margin-right:15px}.sans{font-family:'Open Sans',sans-serif!important}.label{font-family:Roboto,sans-serif!important}.form-signin{max-width:400px;padding:15px;margin:40px auto 0 auto}ul .dropdown-menu .ng-isolate-scope{visibility:visible;display:block;opacity:1}#login-button{padding:10px 15px}.form-signin-heading{text-align:center}.form-signin .checkbox,.form-signin .form-signin-heading{margin-bottom:10px}.form-signin .checkbox{font-weight:400}.form-signin .form-control{font-family:'Open Sans',sans-serif;position:relative;font-size:16px;height:auto;padding:10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-signin .form-control:focus{z-index:2}.form-signin .top-input{margin-bottom:-1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.form-signin .middle-input{margin-bottom:-1px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.form-signin .bottom-input{margin-bottom:10px;border-top-left-radius:0;border-top-right-radius:0}#logo{display:block;margin-left:auto;margin-right:auto}footer>p{color:#444;font-family:'Open Sans',sans-serif}.header{margin-top:10px}.sidebar{padding-left:0}.sidebar a{color:#201e1c}.sidebar a:hover{color:#201e1c}.api_heading{font-family:'Open Sans',sans-serif;background-color:#201e1c;border-radius:5px;padding:10px;color:#e2e2e2;width:100%}p{font-size:1.2em}.form-label{padding-top:7px}.hover{visibility:visible}.edit-button{display:none}.editable-row:hover .edit-button{display:inline-block;padding:3px 6px;font-size:9px}.remove-row{float:right;cursor:pointer}.pagination{margin:0}@media (min-width:992px){.modal-dialog{width:700px}}.dropdown-menu>li>a{cursor:pointer}.btn-file{position:relative;overflow:hidden}.btn-file input[type=file]{position:absolute;top:0;right:0;min-width:100%;min-height:100%;text-align:right;opacity:0;outline:0;background:#fff;cursor:inherit;display:block}.typeahead{border-left-radius:6px!important;float:none!important}.tt-query{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.tt-hint{color:#999}.tt-menu{width:422px;margin-top:4px;padding:4px 0;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.tt-suggestion{padding:3px 20px;line-height:24px}.tt-suggestion.tt-cursor{color:#fff;background-color:#0097cf}.tt-suggestion p{margin:0}.typeahead-button{line-height:1.39!important}.ct-point{cursor:pointer}.ct-timeline-point{cursor:pointer;stroke:#fff;stroke-width:1px}.ct-point-sending{fill:#428bca!important}.ct-point-error{fill:#6c7a89!important}.ct-point-clicked{fill:#f39c12!important}.ct-point-opened{fill:#f9bf3b!important}.ct-point-sent{fill:#1abc9c!important}.ct-point-success{fill:#f05b4f!important}.chartist-tooltip{position:absolute;display:inline-block;min-width:5em;padding:.5em;background:#283f50;color:#fff;font-weight:700;text-align:center;pointer-events:none;z-index:1;margin-left:1.25em;font-size:.75em;border-radius:4px}.chartist-pie-tooltip{position:absolute;display:inline-block;min-width:5em;padding:.5em;background:#283f50;color:#fff;font-weight:700;text-align:center;pointer-events:none;z-index:1;margin-left:1.25em;font-size:.75em;border-radius:4px}.chartist-tooltip:after{content:"";position:absolute;top:100%;left:50%;width:0;height:0;margin-left:-15px;border:15px solid transparent;border-top-color:#283f50}.chartist-chart{height:175px}.chartist-legend{list-style:none;position:absolute;padding-left:0;top:0}.chartist-legend li{display:block;position:relative;margin-bottom:4px;border-radius:5px;padding:2px 8px 2px 8px;font-size:14px;cursor:default;-webkit-transition:background-color .2s ease-in-out;-moz-transition:background-color .2s ease-in-out;-o-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.chartist-legend li span{display:inline-block;vertical-align:middle;width:20px;height:20px;margin-right:10px;border-radius:50%}.ct-series-a .ct-slice-donut{stroke:#1abc9c!important}.ct-slice-donut.ct-slice-donut-error{stroke:#6c7a89!important}.ct-slice-donut.ct-slice-donut-sent{stroke:#1abc9c!important}.ct-slice-donut.ct-slice-donut-opened{stroke:#f9bf3b!important}.ct-slice-donut.ct-slice-donut-success{stroke:#f05b4f!important}.ct-slice-donut.ct-slice-donut-clicked{stroke:#f39c12!important}.ct-slice-donut.ct-slice-donut-sending{stroke:#428bca!important}.ct-legend-error{background-color:#6c7a89!important}.ct-legend-sent{background-color:#1abc9c!important}.ct-legend-opened{background-color:#f9bf3b!important}.ct-legend-success{background-color:#f05b4f!important}.ct-legend-clicked{background-color:#f39c12!important}.ct-legend-sending{background-color:#428bca!important}.label-clicked{background-color:#f39c12!important}.gophish-editor{font-family:'Courier New',Monospace!important;font-size:small!important}#resultsMap{margin-top:-30px}@media (min-width:768px) and (max-width:1300px){.navbar-collapse.collapse{display:none!important}.navbar-collapse.collapse.in{display:block!important}.navbar-header .collapse,.navbar-toggle{display:block!important}.navbar-header{float:none!important}}.modal-content table{table-layout:fixed}.modal-content .dataTable tbody td{font-size:16px;overflow:hidden;text-overflow:ellipsis}.dataTables_info{font-size:15px}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after{font-family:FontAwesome!important;position:relative!important;display:initial!important;top:initial!important;right:initial!important;left:6px;color:#1abc9c}table.dataTable thead .sorting:after{content:"\f0dc"!important;color:initial}table.dataTable thead .sorting_asc:after{content:"\f0de"!important;opacity:.8!important}table.dataTable thead .sorting_desc:after{content:"\f0dd"!important;opacity:.8!important}td.details-control{cursor:pointer}.timeline{text-align:left;background-color:#fff}.timeline-graph{margin-left:30px}.timeline>h6{margin-top:0;margin-bottom:5px}.timeline>.subtitle{color:#999;font-style:italic;margin-bottom:15px;display:block}.timeline-entry{position:relative;padding-bottom:36px}.timeline-bar{display:block;content:"";position:absolute;top:5px;bottom:0;width:1px;left:-6px;background:#aaa}.timeline-entry:last-child .timeline-bar{display:none}.timeline-entry:last-child{padding-bottom:0}.timeline-icon{position:relative;float:left;margin-left:-24px;width:36px;top:-5px;height:36px;text-align:center;border-radius:50%}.timeline-icon>i{margin-top:10px;color:#fff}.timeline-message{padding-left:30px}.timeline-date{float:right;color:#999;font-style:italic}.timeline-event-details{font-size:16px;margin-top:5px;cursor:pointer}.timeline-replay-button{margin-top:10px}.timeline-event-details>.table-responsive{display:none}.timeline-event-details{margin-top:10px;margin-bottom:10px}.timeline-event-results{font-size:16px;display:none}.timeline-device-details{font-size:.8em;margin-top:10px}.timeline-device-os>span.fa-stack{font-size:.8em}.timeline-device-browser>span.fa-stack{font-size:.8em}.timeline-device-browser>span.fa-stack>i.fa-stack-1x{font-size:1.5em}i.fa-vendor-icon{font-size:.6em}i.fa-tablet+i.fa-vendor-icon{top:-2px}i.fa-tablet+i.fa-vendor-icon{top:-2px}i.fa-laptop+i.fa-vendor-icon{top:-2px}.tooltip-inner{width:300px!important}#refresh_message{display:none}#capture_passwords{display:none}#redirect_url{display:none}@media (max-width:767px){.navbar-header{margin-left:10px!important}}table.dataTable{width:100%!important}.btn-blue{color:#fff;background-color:#428bca;border-color:#428bca}.btn-blue:hover{background-color:#64a1d6}.select2-container--bootstrap .select2-selection--single .select2-selection__rendered{font-size:15px!important}.select2-container--bootstrap .select2-selection--single{height:42px!important;padding:8px 12px!important}.input-group-btn .btn{line-height:20px!important}.highcharts-title{font-family:"Source Sans Pro",Helvetica,Arial,sans-serif;font-size:16px!important}.color-success{font-weight:700;color:#f05b4f}.color-sent{font-weight:700;color:#1abc9c}.color-opened{font-weight:700;color:#f9bf3b}.color-clicked{font-weight:700;color:#f39c12}.color-reported{font-weight:700;color:#45d6ef}.color-success{color:#f05b4f}.nav-sidebar>li.active>a:focus,.nav-sidebar>li.active>a:hover{background-color:#37485a}.nav-badge{margin-top:5px}#resultsMapContainer{display:none}#csv-template{margin-left:15px;cursor:pointer}.cke_chrome{border-top:0!important}.cke_autocomplete_panel{width:400px!important}.cke_autocomplete_panel>li{padding:10px 5px!important} body{padding-top:50px}.sub-header{padding-bottom:10px;border-bottom:1px solid #eee}.sidebar{display:none}@media (min-width:768px){.sidebar{position:fixed;top:51px;bottom:0;left:0;display:block;padding:20px;overflow-x:hidden;overflow-y:auto;background-color:#f5f5f5;border-right:1px solid #eee}}.nav-sidebar{margin-right:-21px;margin-bottom:20px;margin-left:-20px}.nav-sidebar>li>a{padding-right:20px;padding-left:20px}.nav-sidebar>.active>a{color:#fff;background-color:#283f50}.main{padding:20px}@media (min-width:768px){.main{padding-right:40px;padding-left:40px}}.main .page-header{margin-top:0}.placeholders{margin-bottom:30px;text-align:center}.placeholders h4{margin-bottom:0}.placeholder{margin-bottom:20px}.placeholder img{display:inline-block;border-radius:50%} @font-face{font-family:Flat-UI-Icons;src:url(../font/flat-ui-icons-regular.eot);src:url(../font/flat-ui-icons-regular.eot?#iefix) format('embedded-opentype'),url(../font/flat-ui-icons-regular.woff) format('woff'),url(../font/flat-ui-icons-regular.ttf) format('truetype'),url(../font/flat-ui-icons-regular.svg#flat-ui-icons-regular) format('svg');font-weight:400;font-style:normal}[data-icon]:before{font-family:Flat-UI-Icons;content:attr(data-icon);speak:none;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fui-arrow-left,.fui-arrow-right,.fui-calendar-solid,.fui-chat,.fui-check,.fui-check-inverted,.fui-check-inverted-2,.fui-checkbox-checked,.fui-checkbox-unchecked,.fui-cmd,.fui-cross,.fui-eye,.fui-gear,.fui-heart,.fui-list,.fui-location,.fui-lock,.fui-mail,.fui-new,.fui-pause,.fui-photo,.fui-play,.fui-plus,.fui-radio-checked,.fui-radio-unchecked,.fui-search,.fui-time,.fui-user,.fui-video,.fui-volume{display:inline-block;font-family:Flat-UI-Icons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fui-arrow-right:before{content:"\e02c"}.fui-arrow-left:before{content:"\e02d"}.fui-cmd:before{content:"\e02f"}.fui-check-inverted:before{content:"\e006"}.fui-heart:before{content:"\e007"}.fui-location:before{content:"\e008"}.fui-plus:before{content:"\e009"}.fui-check:before{content:"\e00a"}.fui-cross:before{content:"\e00b"}.fui-list:before{content:"\e00c"}.fui-new:before{content:"\e00d"}.fui-video:before{content:"\e00e"}.fui-photo:before{content:"\e00f"}.fui-volume:before{content:"\e010"}.fui-time:before{content:"\e011"}.fui-eye:before{content:"\e012"}.fui-chat:before{content:"\e013"}.fui-search:before{content:"\e01c"}.fui-user:before{content:"\e01d"}.fui-mail:before{content:"\e01e"}.fui-lock:before{content:"\e01f"}.fui-gear:before{content:"\e024"}.fui-radio-unchecked:before{content:"\e02b"}.fui-radio-checked:before{content:"\e032"}.fui-checkbox-unchecked:before{content:"\e033"}.fui-checkbox-checked:before{content:"\e034"}.fui-calendar-solid:before{content:"\e022"}.fui-pause:before{content:"\e03b"}.fui-play:before{content:"\e03c"}.fui-check-inverted-2:before{content:"\e000"}.dropdown-arrow-inverse{border-bottom-color:#283f50!important;border-top-color:#283f50!important}body{font-family:"Source Sans Pro",Helvetica,Arial,sans-serif;font-size:16px;line-height:1.72222;color:#283f50;background-color:#fff}a{color:#16a085;text-decoration:none;-webkit-transition:.25s;transition:.25s}a:focus,a:hover{color:#1abc9c;text-decoration:none}a:focus{outline:0}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.72222;background-color:#fff;border:2px solid #bdc3c7;border-radius:6px;-webkit-transition:all .25s ease-in-out;transition:all .25s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-comment{font-size:15px;line-height:1.2;font-style:italic;margin:24px 0}h1,h2,h3,h4,h5,h6{font-family:Roboto,sans-serif}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-weight:700;line-height:1.1;color:inherit}.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:#e7e9ec}h1,h2,h3{margin-top:30px;margin-bottom:15px}h4,h5,h6{margin-top:15px;margin-bottom:15px}h6{font-weight:400}.h1,h1{font-size:61px}.h2,h2{font-size:53px}.h3,h3{font-size:40px}.h4,h4{font-size:29px}.h5,h5{font-size:28px}.h6,h6{font-size:24px}p{font-size:16px;line-height:1.72222;margin:0 0 15px}.lead{margin-bottom:30px;font-size:28px;line-height:1.46428571;font-weight:300}@media (min-width:768px){.lead{font-size:30.006px}}.small,small{font-size:83%;line-height:2.067}.text-muted{color:#bdc3c7}.text-inverse{color:#fff}.text-primary{color:#1abc9c}a.text-primary:hover{color:#15967d}.text-warning{color:#f1c40f}a.text-warning:hover{color:#c19d0c}.text-danger{color:#e74c3c}a.text-danger:hover{color:#b93d30}.text-success{color:#2ecc71}a.text-success:hover{color:#25a35a}.text-info{color:#3498db}a.text-info:hover{color:#2a7aaf}.bg-primary{color:#fff;background-color:#283f50}a.bg-primary:hover{background-color:#222f3d}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:14px;margin:60px 0 30px;border-bottom:1px solid #e7e9ec}ol,ul{margin-bottom:15px}dl{margin-bottom:30px}dd,dt{line-height:1.72222}@media (min-width:768px){.dl-horizontal dt{width:160px}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{border-bottom:1px dotted #bdc3c7}blockquote{border-left:3px solid #e7e9ec;padding:0 0 0 16px;margin:0 0 30px}blockquote p{font-size:20px;line-height:1.55;font-weight:400;margin-bottom:.4em}blockquote .small,blockquote small{font-size:16px;line-height:1.72222;font-style:italic;color:inherit}blockquote .small:before,blockquote small:before{content:""}blockquote.pull-right{padding-right:16px;padding-left:0;border-right:3px solid #e7e9ec;border-left:0}blockquote.pull-right small:after{content:""}address{margin-bottom:30px;line-height:1.72222}code,kbd,pre,samp{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 6px;font-size:85%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 6px;font-size:85%;color:#fff;background-color:#283f50;border-radius:4px;box-shadow:none}pre{padding:8px;margin:0 0 15px;font-size:13px;line-height:1.72222;color:inherit;background-color:#fff;border:2px solid #e7e9ec;border-radius:6px;white-space:pre}.pre-scrollable{max-height:340px}.thumbnail{display:block;padding:4px;margin-bottom:5px;line-height:1.72222;background-color:#fff;border:2px solid #bdc3c7;border-radius:6px;-webkit-transition:all .25s ease-in-out;transition:all .25s ease-in-out}.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#16a085}.thumbnail .caption{padding:9px;color:#283f50}.btn{border:none;font-size:15px;font-weight:400;line-height:1.4;border-radius:4px;padding:10px 15px;-webkit-font-smoothing:subpixel-antialiased;-webkit-transition:border .25s linear,color .25s linear,background-color .25s linear;transition:border .25s linear,color .25s linear,background-color .25s linear}.btn:focus,.btn:hover{outline:0;color:#fff}.btn.active,.btn:active{outline:0;-webkit-box-shadow:none;box-shadow:none}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{background-color:#bdc3c7;color:rgba(255,255,255,.75);opacity:.7}.btn>[class^=fui-]{margin:0 1px;position:relative;line-height:1;top:1px}.btn-xs.btn>[class^=fui-]{font-size:11px;top:0}.btn-hg.btn>[class^=fui-]{top:2px}.btn-default{color:#fff;background-color:#bdc3c7}.btn-default.active,.btn-default:active,.btn-default:focus,.btn-default:hover,.open .dropdown-toggle.btn-default{color:#fff;background-color:#cacfd2;border-color:#cacfd2}.btn-default.active,.btn-default:active,.open .dropdown-toggle.btn-default{background:#a1a6a9;border-color:#a1a6a9}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#bdc3c7;border-color:#bdc3c7}.btn-primary{color:#fff;background-color:#1abc9c}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#48c9b0;border-color:#48c9b0}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background:#16a085;border-color:#16a085}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#1abc9c;border-color:#1abc9c}.btn-info{color:#fff;background-color:#3498db}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#fff;background-color:#5dade2;border-color:#5dade2}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background:#2c81ba;border-color:#2c81ba}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#3498db;border-color:#3498db}.btn-danger{color:#fff;background-color:#e74c3c}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#ec7063;border-color:#ec7063}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background:#c44133;border-color:#c44133}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#e74c3c;border-color:#e74c3c}.btn-success{color:#fff;background-color:#2ecc71}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#58d68d;border-color:#58d68d}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background:#27ad60;border-color:#27ad60}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#2ecc71;border-color:#2ecc71}.btn-warning{color:#fff;background-color:#f1c40f}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#f5d313;border-color:#f5d313}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background:#cda70d;border-color:#cda70d}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f1c40f;border-color:#f1c40f}.btn-inverse{color:#fff;background-color:#283f50}.btn-inverse.active,.btn-inverse:active,.btn-inverse:focus,.btn-inverse:hover,.open .dropdown-toggle.btn-inverse{color:#fff;background-color:#415b76;border-color:#415b76}.btn-inverse.active,.btn-inverse:active,.open .dropdown-toggle.btn-inverse{background:#2c3e50;border-color:#2c3e50}.btn-inverse.disabled,.btn-inverse.disabled.active,.btn-inverse.disabled:active,.btn-inverse.disabled:focus,.btn-inverse.disabled:hover,.btn-inverse[disabled],.btn-inverse[disabled].active,.btn-inverse[disabled]:active,.btn-inverse[disabled]:focus,.btn-inverse[disabled]:hover,fieldset[disabled] .btn-inverse,fieldset[disabled] .btn-inverse.active,fieldset[disabled] .btn-inverse:active,fieldset[disabled] .btn-inverse:focus,fieldset[disabled] .btn-inverse:hover{background-color:#283f50;border-color:#283f50}.btn-embossed{-webkit-box-shadow:inset 0 -2px 0 rgba(0,0,0,.15);box-shadow:inset 0 -2px 0 rgba(0,0,0,.15)}.btn-embossed.active,.btn-embossed:active{-webkit-box-shadow:inset 0 2px 0 rgba(0,0,0,.15);box-shadow:inset 0 2px 0 rgba(0,0,0,.15)}.btn-wide{min-width:140px;padding-left:30px;padding-right:30px}.btn-link{color:#16a085}.btn-link:focus,.btn-link:hover{color:#1abc9c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#bdc3c7;text-decoration:none}.btn-hg{padding:13px 20px;font-size:22px;line-height:1.227;border-radius:6px}.btn-lg{padding:10px 19px;font-size:17px;line-height:1.471;border-radius:6px}.btn-sm{padding:9px 13px;font-size:13px;line-height:1.385;border-radius:4px}.btn-xs{padding:6px 9px;font-size:12px;line-height:1.083;border-radius:3px}.btn-tip{font-weight:300;padding-left:10px;font-size:92%}.btn-block{white-space:normal}.btn-default .caret{border-top-color:#fff}.btn-danger .caret,.btn-info .caret,.btn-primary .caret,.btn-success .caret,.btn-warning .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#fff}.dropup .btn-danger .caret,.dropup .btn-info .caret,.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret{border-bottom-color:#fff}.btn-group-xs>.btn{padding:6px 9px;font-size:12px;line-height:1.083;border-radius:3px}.btn-group-sm>.btn{padding:9px 13px;font-size:13px;line-height:1.385;border-radius:4px}.btn-group-lg>.btn{padding:10px 19px;font-size:17px;line-height:1.471;border-radius:6px}.btn-group-gh>.btn{padding:13px 20px;font-size:22px;line-height:1.227;border-radius:6px}.btn-group>.btn+.btn{margin-left:0}.btn-group>.btn+.dropdown-toggle{border-left:2px solid rgba(52,73,94,.15);padding-left:12px;padding-right:12px}.btn-group>.btn+.dropdown-toggle .caret{margin-left:3px;margin-right:3px}.btn-group>.btn.btn-gh+.dropdown-toggle .caret{margin-left:7px;margin-right:7px}.btn-group>.btn.btn-sm+.dropdown-toggle .caret{margin-left:0;margin-right:0}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-weight:400}.btn-group:focus .dropdown-toggle{outline:0;-webkit-transition:.25s;transition:.25s}.btn-group.open .dropdown-toggle{color:rgba(255,255,255,.75);-webkit-box-shadow:none;box-shadow:none}.btn-toolbar .btn.active{color:#fff}.btn-toolbar .btn>[class^=fui-]{font-size:16px;margin:0 1px}.caret{border-width:8px 6px;border-bottom-color:#283f50;border-top-color:#283f50;border-style:solid;border-bottom-style:none;-webkit-transition:.25s;transition:.25s;-webkit-transform:scale(1.001);-ms-transform:scale(1.001);transform:scale(1.001)}.dropup .btn-lg .caret,.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-bottom-width:8px}.btn-lg .caret{border-top-width:8px;border-right-width:6px;border-left-width:6px}.select{display:inline-block;margin-bottom:10px}[class*=span]>.select[class*=span]{margin-left:0}.select[class*=span] .btn{width:100%}.select.select-block{display:block;float:none;margin-left:0;width:auto}.select.select-block:after,.select.select-block:before{content:" ";display:table}.select.select-block:after{clear:both}.select.select-block .btn{width:100%}.select.select-block .dropdown-menu{width:100%}.select .btn{width:220px}.select .btn.btn-hg .filter-option{left:20px;right:40px;top:13px}.select .btn.btn-hg .caret{right:20px}.select .btn.btn-lg .filter-option{left:16px;right:38px}.select .btn.btn-sm .filter-option{left:13px;right:33px}.select .btn.btn-sm .caret{right:13px}.select .btn.btn-xs .filter-option{left:13px;right:33px;top:5px}.select .btn.btn-xs .caret{right:13px}.select .btn .filter-option{height:26px;left:13px;overflow:hidden;position:absolute;right:33px;text-align:left;top:10px}.select .btn .caret{position:absolute;right:16px;top:50%;margin-top:-3px}.select .btn .dropdown-toggle{border-radius:6px}.select .btn .dropdown-menu{min-width:100%}.select .btn .dropdown-menu dt{cursor:default;display:block;padding:3px 20px}.select .btn .dropdown-menu li:not(.disabled)>a:hover small{color:rgba(255,255,255,.004)}.select .btn .dropdown-menu li>a{min-height:20px}.select .btn .dropdown-menu li>a.opt{padding-left:35px}.select .btn .dropdown-menu li small{padding-left:.5em}.select .btn .dropdown-menu li>dt small{font-weight:400}.select .btn .dropdown-menu li.disabled>a,.select .btn>.disabled{cursor:default}.select .caret{border-bottom-color:#fff;border-top-color:#fff}legend{display:block;width:100%;padding:0;margin-bottom:15px;font-size:24px;line-height:inherit;color:inherit;border-bottom:none}textarea{font-size:20px;line-height:24px;padding:5px 11px}input[type=search]{-webkit-appearance:none!important}label{font-weight:400;font-size:15px;line-height:2.4}.form-control:-moz-placeholder{color:#b2bcc5}.form-control::-moz-placeholder{color:#b2bcc5;opacity:1}.form-control:-ms-input-placeholder{color:#b2bcc5}.form-control::-webkit-input-placeholder{color:#b2bcc5}.form-control.placeholder{color:#b2bcc5}.form-control{border:1px solid #bdc3c7;color:#283f50;font-family:"Source Sans Pro",Helvetica,Arial,sans-serif;font-size:15px;line-height:1.467;padding:8px 12px;height:42px;-webkit-appearance:none;border-radius:6px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border .25s linear,color .25s linear,background-color .25s linear;transition:border .25s linear,color .25s linear,background-color .25s linear}.form-control:focus,.form-group.focus .form-control{border-color:#1abc9c;outline:0;-webkit-box-shadow:none;box-shadow:none}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#f4f6f6;border-color:#d5dbdb;color:#555;cursor:default;opacity:.7}.form-control.flat{border-color:transparent}.form-control.flat:hover{border-color:#bdc3c7}.form-control.flat:focus{border-color:#1abc9c}.input-sm{height:35px;padding:6px 10px;font-size:13px;line-height:1.462;border-radius:6px}select.input-sm{height:35px}select[multiple].input-sm,textarea.input-sm{height:auto}.input-lg{height:45px;padding:10px 15px;font-size:17px;line-height:1.235;border-radius:6px}select.input-lg{height:45px;line-height:45px}select[multiple].input-lg,textarea.input-lg{height:auto}.input-hg{height:53px;padding:10px 16px;font-size:22px;line-height:1.318;border-radius:6px}select.input-hg{height:53px;line-height:53px}select[multiple].input-hg,textarea.input-hg{height:auto}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline{color:#f1c40f}.has-warning .form-control{color:#f1c40f;border-color:#f1c40f;-webkit-box-shadow:none;box-shadow:none}.has-warning .form-control:-moz-placeholder{color:#f1c40f}.has-warning .form-control::-moz-placeholder{color:#f1c40f;opacity:1}.has-warning .form-control:-ms-input-placeholder{color:#f1c40f}.has-warning .form-control::-webkit-input-placeholder{color:#f1c40f}.has-warning .form-control.placeholder{color:#f1c40f}.has-warning .form-control:focus{border-color:#f1c40f;-webkit-box-shadow:none;box-shadow:none}.has-warning .input-group-addon{color:#f1c40f;border-color:#f1c40f;background-color:#fff}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline{color:#e74c3c}.has-error .form-control{color:#e74c3c;border-color:#e74c3c;-webkit-box-shadow:none;box-shadow:none}.has-error .form-control:-moz-placeholder{color:#e74c3c}.has-error .form-control::-moz-placeholder{color:#e74c3c;opacity:1}.has-error .form-control:-ms-input-placeholder{color:#e74c3c}.has-error .form-control::-webkit-input-placeholder{color:#e74c3c}.has-error .form-control.placeholder{color:#e74c3c}.has-error .form-control:focus{border-color:#e74c3c;-webkit-box-shadow:none;box-shadow:none}.has-error .input-group-addon{color:#e74c3c;border-color:#e74c3c;background-color:#fff}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline{color:#2ecc71}.has-success .form-control{color:#2ecc71;border-color:#2ecc71;-webkit-box-shadow:none;box-shadow:none}.has-success .form-control:-moz-placeholder{color:#2ecc71}.has-success .form-control::-moz-placeholder{color:#2ecc71;opacity:1}.has-success .form-control:-ms-input-placeholder{color:#2ecc71}.has-success .form-control::-webkit-input-placeholder{color:#2ecc71}.has-success .form-control.placeholder{color:#2ecc71}.has-success .form-control:focus{border-color:#2ecc71;-webkit-box-shadow:none;box-shadow:none}.has-success .input-group-addon{color:#2ecc71;border-color:#2ecc71;background-color:#fff}.help-block{font-size:15px;margin-bottom:5px;color:inherit}.form-group{position:relative;margin-bottom:20px}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:6px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:after,.form-horizontal .form-group:before{content:" ";display:table}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-control-static{padding-top:6px}.form-group{position:relative}.form-control+.input-icon{position:absolute;top:2px;right:2px;line-height:37px;vertical-align:middle;font-size:20px;color:#b2bcc5;background-color:#fff;padding:0 12px 0 0;border-radius:6px}.input-hg+.input-icon{line-height:49px;padding:0 16px 0 0}.input-lg+.input-icon{line-height:41px;padding:0 15px 0 0}.input-sm+.input-icon{font-size:16px;line-height:30px;padding:0 10px 0 0}.has-success .input-icon{color:#2ecc71}.has-warning .input-icon{color:#f1c40f}.has-error .input-icon{color:#e74c3c}.form-control.disabled+.input-icon,.form-control[disabled]+.input-icon,.form-control[readonly]+.input-icon,fieldset[disabled] .form-control+.input-icon{color:#d5dbdb;background-color:transparent;opacity:.7}.input-group-hg>.form-control,.input-group-hg>.input-group-addon,.input-group-hg>.input-group-btn>.btn{height:53px;padding:10px 16px;font-size:22px;line-height:1.318;border-radius:6px}select.input-group-hg>.form-control,select.input-group-hg>.input-group-addon,select.input-group-hg>.input-group-btn>.btn{height:53px;line-height:53px}select[multiple].input-group-hg>.form-control,select[multiple].input-group-hg>.input-group-addon,select[multiple].input-group-hg>.input-group-btn>.btn,textarea.input-group-hg>.form-control,textarea.input-group-hg>.input-group-addon,textarea.input-group-hg>.input-group-btn>.btn{height:auto}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:45px;padding:10px 15px;font-size:17px;line-height:1.235;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:45px;line-height:45px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:35px;padding:6px 10px;font-size:13px;line-height:1.462;border-radius:6px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:35px;line-height:35px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon{padding:10px 12px;font-size:15px;color:#fff;text-align:center;background-color:#bdc3c7;border:1px solid #bdc3c7;border-radius:6px;-webkit-transition:border .25s linear,color .25s linear,background-color .25s linear;transition:border .25s linear,color .25s linear,background-color .25s linear}.input-group-hg .input-group-addon,.input-group-lg .input-group-addon,.input-group-sm .input-group-addon{line-height:1}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.form-group.focus .input-group-addon,.input-group.focus .input-group-addon{background-color:#1abc9c;border-color:#1abc9c}.form-group.focus .input-group-btn>.btn-default+.btn-default,.input-group.focus .input-group-btn>.btn-default+.btn-default{border-left-color:#16a085}.form-group.focus .input-group-btn .btn,.input-group.focus .input-group-btn .btn{border-color:#1abc9c;background-color:#fff;color:#1abc9c}.form-group.focus .input-group-btn .btn-default,.input-group.focus .input-group-btn .btn-default{color:#fff;background-color:#1abc9c}.form-group.focus .input-group-btn .btn-default.active,.form-group.focus .input-group-btn .btn-default:active,.form-group.focus .input-group-btn .btn-default:focus,.form-group.focus .input-group-btn .btn-default:hover,.input-group.focus .input-group-btn .btn-default.active,.input-group.focus .input-group-btn .btn-default:active,.input-group.focus .input-group-btn .btn-default:focus,.input-group.focus .input-group-btn .btn-default:hover,.open .dropdown-toggle.form-group.focus .input-group-btn .btn-default,.open .dropdown-toggle.input-group.focus .input-group-btn .btn-default{color:#fff;background-color:#48c9b0;border-color:#48c9b0}.form-group.focus .input-group-btn .btn-default.active,.form-group.focus .input-group-btn .btn-default:active,.input-group.focus .input-group-btn .btn-default.active,.input-group.focus .input-group-btn .btn-default:active,.open .dropdown-toggle.form-group.focus .input-group-btn .btn-default,.open .dropdown-toggle.input-group.focus .input-group-btn .btn-default{background:#16a085;border-color:#16a085}.form-group.focus .input-group-btn .btn-default.disabled,.form-group.focus .input-group-btn .btn-default.disabled.active,.form-group.focus .input-group-btn .btn-default.disabled:active,.form-group.focus .input-group-btn .btn-default.disabled:focus,.form-group.focus .input-group-btn .btn-default.disabled:hover,.form-group.focus .input-group-btn .btn-default[disabled],.form-group.focus .input-group-btn .btn-default[disabled].active,.form-group.focus .input-group-btn .btn-default[disabled]:active,.form-group.focus .input-group-btn .btn-default[disabled]:focus,.form-group.focus .input-group-btn .btn-default[disabled]:hover,.input-group.focus .input-group-btn .btn-default.disabled,.input-group.focus .input-group-btn .btn-default.disabled.active,.input-group.focus .input-group-btn .btn-default.disabled:active,.input-group.focus .input-group-btn .btn-default.disabled:focus,.input-group.focus .input-group-btn .btn-default.disabled:hover,.input-group.focus .input-group-btn .btn-default[disabled],.input-group.focus .input-group-btn .btn-default[disabled].active,.input-group.focus .input-group-btn .btn-default[disabled]:active,.input-group.focus .input-group-btn .btn-default[disabled]:focus,.input-group.focus .input-group-btn .btn-default[disabled]:hover,fieldset[disabled] .form-group.focus .input-group-btn .btn-default,fieldset[disabled] .form-group.focus .input-group-btn .btn-default.active,fieldset[disabled] .form-group.focus .input-group-btn .btn-default:active,fieldset[disabled] .form-group.focus .input-group-btn .btn-default:focus,fieldset[disabled] .form-group.focus .input-group-btn .btn-default:hover,fieldset[disabled] .input-group.focus .input-group-btn .btn-default,fieldset[disabled] .input-group.focus .input-group-btn .btn-default.active,fieldset[disabled] .input-group.focus .input-group-btn .btn-default:active,fieldset[disabled] .input-group.focus .input-group-btn .btn-default:focus,fieldset[disabled] .input-group.focus .input-group-btn .btn-default:hover{background-color:#1abc9c;border-color:#1abc9c}.input-group-btn .btn{background-color:#fff;border:1px solid #bdc3c7;color:#bdc3c7;line-height:18px}.input-group-btn .btn-default{color:#fff;background-color:#bdc3c7}.input-group-btn .btn-default.active,.input-group-btn .btn-default:active,.input-group-btn .btn-default:focus,.input-group-btn .btn-default:hover,.open .dropdown-toggle.input-group-btn .btn-default{color:#fff;background-color:#cacfd2;border-color:#cacfd2}.input-group-btn .btn-default.active,.input-group-btn .btn-default:active,.open .dropdown-toggle.input-group-btn .btn-default{background:#a1a6a9;border-color:#a1a6a9}.input-group-btn .btn-default.disabled,.input-group-btn .btn-default.disabled.active,.input-group-btn .btn-default.disabled:active,.input-group-btn .btn-default.disabled:focus,.input-group-btn .btn-default.disabled:hover,.input-group-btn .btn-default[disabled],.input-group-btn .btn-default[disabled].active,.input-group-btn .btn-default[disabled]:active,.input-group-btn .btn-default[disabled]:focus,.input-group-btn .btn-default[disabled]:hover,fieldset[disabled] .input-group-btn .btn-default,fieldset[disabled] .input-group-btn .btn-default.active,fieldset[disabled] .input-group-btn .btn-default:active,fieldset[disabled] .input-group-btn .btn-default:focus,fieldset[disabled] .input-group-btn .btn-default:hover{background-color:#bdc3c7;border-color:#bdc3c7}.input-group-hg .input-group-btn .btn{line-height:31px}.input-group-lg .input-group-btn .btn{line-height:21px}.input-group-sm .input-group-btn .btn{line-height:19px}.input-group-btn:first-child>.btn{border-right-width:0;margin-right:-2px}.input-group-btn:last-child>.btn{border-left-width:0;margin-left:-2px}.input-group-btn>.btn-default+.btn-default{border-left:2px solid #bdc3c7}.input-group-btn>.btn:first-child+.btn .caret{margin-left:0}.input-group-rounded .input-group-btn+.form-control,.input-group-rounded .input-group-btn:last-child .btn{border-bottom-right-radius:20px;border-top-right-radius:20px}.input-group-hg.input-group-rounded .input-group-btn+.form-control,.input-group-hg.input-group-rounded .input-group-btn:last-child .btn{border-bottom-right-radius:27px;border-top-right-radius:27px}.input-group-lg.input-group-rounded .input-group-btn+.form-control,.input-group-lg.input-group-rounded .input-group-btn:last-child .btn{border-bottom-right-radius:25px;border-top-right-radius:25px}.input-group-rounded .form-control:first-child,.input-group-rounded .input-group-btn:first-child .btn{border-bottom-left-radius:20px;border-top-left-radius:20px}.input-group-hg.input-group-rounded .form-control:first-child,.input-group-hg.input-group-rounded .input-group-btn:first-child .btn{border-bottom-left-radius:27px;border-top-left-radius:27px}.input-group-lg.input-group-rounded .form-control:first-child,.input-group-lg.input-group-rounded .input-group-btn:first-child .btn{border-bottom-left-radius:25px;border-top-left-radius:25px}.input-group-rounded .input-group-btn+.form-control{padding-left:0}.checkbox,.radio{margin-bottom:12px;padding-left:32px;position:relative;-webkit-transition:color .25s linear;transition:color .25s linear;font-size:14px;line-height:1.5}.checkbox input,.radio input{outline:0!important;display:none}.checkbox .icons,.radio .icons{color:#bdc3c7;display:block;height:20px;left:0;position:absolute;top:0;width:20px;text-align:center;line-height:21px;font-size:20px;cursor:pointer;-webkit-transition:color .25s linear;transition:color .25s linear}.checkbox .icons .first-icon,.checkbox .icons .second-icon,.radio .icons .first-icon,.radio .icons .second-icon{display:inline-table;position:absolute;left:0;top:0;background-color:transparent;margin:0;opacity:1}.checkbox .icons .second-icon,.radio .icons .second-icon{opacity:0}.checkbox:hover,.radio:hover{-webkit-transition:color .25s linear;transition:color .25s linear}.checkbox:hover .first-icon,.radio:hover .first-icon{opacity:0}.checkbox:hover .second-icon,.radio:hover .second-icon{opacity:1}.checkbox.checked,.radio.checked{color:#1abc9c}.checkbox.checked .first-icon,.radio.checked .first-icon{opacity:0}.checkbox.checked .second-icon,.radio.checked .second-icon{opacity:1;color:#1abc9c;-webkit-transition:color .25s linear;transition:color .25s linear}.checkbox.disabled,.radio.disabled{cursor:default;color:#e6e8ea}.checkbox.disabled .icons,.radio.disabled .icons{color:#e6e8ea}.checkbox.disabled .first-icon,.radio.disabled .first-icon{opacity:1}.checkbox.disabled .second-icon,.radio.disabled .second-icon{opacity:0}.checkbox.disabled.checked .icons,.radio.disabled.checked .icons{color:#e6e8ea}.checkbox.disabled.checked .first-icon,.radio.disabled.checked .first-icon{opacity:0}.checkbox.disabled.checked .second-icon,.radio.disabled.checked .second-icon{opacity:1;color:#e6e8ea}.checkbox.primary .icons,.radio.primary .icons{color:#283f50}.checkbox.primary.checked,.radio.primary.checked{color:#1abc9c}.checkbox.primary.checked .icons,.radio.primary.checked .icons{color:#1abc9c}.checkbox.primary.disabled,.radio.primary.disabled{cursor:default;color:#bdc3c7}.checkbox.primary.disabled .icons,.radio.primary.disabled .icons{color:#bdc3c7}.checkbox.primary.disabled.checked .icons,.radio.primary.disabled.checked .icons{color:#bdc3c7}.checkbox+.checkbox,.radio+.radio{margin-top:10px}.navbar{font-size:16px;min-height:53px;margin-bottom:30px;border:none;border-radius:6px}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{box-shadow:none;padding-right:21px;padding-left:21px}@media (min-width:768px){.navbar-collapse .navbar-nav.navbar-left:first-child{margin-left:-21px}.navbar-collapse .navbar-nav.navbar-left:first-child>li:first-child a{border-bottom-left-radius:6px;border-top-left-radius:6px}.navbar-collapse .navbar-nav.navbar-right:last-child{margin-right:-21px}.navbar>.container .navbar-collapse .navbar-nav.navbar-right:last-child{margin-right:-36px}.navbar-collapse .navbar-nav.navbar-right:last-child>.dropdown:last-child>a{border-radius:0 6px 6px 0}.navbar-collapse .navbar-form.navbar-right:last-child{margin-right:-17px}.navbar-fixed-bottom .navbar-collapse .navbar-form.navbar-right:last-child,.navbar-fixed-top .navbar-collapse .navbar-form.navbar-right:last-child{margin-right:0}}@media (max-width:767px){.navbar-collapse .navbar-nav.navbar-right:last-child{margin-bottom:3px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-21px;margin-left:-21px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0;border-radius:0}.navbar-fixed-bottom,.navbar-fixed-top{z-index:1030;border-radius:0}.navbar-fixed-top{border-width:0}.navbar-fixed-bottom{margin-bottom:0;border-width:0}.navbar-brand{font-size:24px;line-height:1.042;font-weight:700;padding:14px 21px}.navbar-brand>[class*=fui-]{font-size:19px;line-height:1.263;vertical-align:top}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-21px}}.navbar-toggle{border:none;color:#283f50;margin:0 0 0 21px;padding:0 21px;height:53px;line-height:53px}.navbar-toggle:focus,.navbar-toggle:hover{outline:0}.navbar-toggle:focus:before,.navbar-toggle:hover:before{color:#1abc9c}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:0}.navbar-nav>li>a{font-size:16px;padding:15px 21px;line-height:23px;font-weight:700}.navbar-nav .dropdown-toggle .caret{border-top-color:#16a085;border-bottom-color:#16a085;border-width:8px 6px 0;margin-left:12px}.navbar-nav .open>a:focus,.navbar-nav .open>a:hover,.navbar-nav>li>a:focus,.navbar-nav>li>a:hover{background-color:transparent}.navbar-nav .open>a:focus .caret,.navbar-nav .open>a:hover .caret,.navbar-nav>li>a:focus .caret,.navbar-nav>li>a:hover .caret{border-top-color:#1abc9c;border-bottom-color:#1abc9c}.navbar-nav [class^=fui-]{line-height:20px;position:relative;top:1px}.navbar-nav .visible-sm>[class^=fui-],.navbar-nav .visible-xs>[class^=fui-]{margin-left:12px}@media (max-width:767px){.navbar-nav{margin:0 -21px}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:7px 15px 7px 31px!important}.navbar-nav .open .dropdown-menu>li>a{line-height:23px}.navbar-nav>li>a{padding-top:7px;padding-bottom:7px}}.navbar-input{height:35px;padding:5px 10px;font-size:13px;line-height:1.4;border-radius:6px}select.navbar-input{height:35px;line-height:35px}select[multiple].navbar-input,textarea.navbar-input{height:auto}.navbar-form{-webkit-box-shadow:none;box-shadow:none;margin-top:0;margin-bottom:0;padding-right:19px;padding-left:19px;padding-top:9px;padding-bottom:9px}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (max-width:767px){.navbar-form{margin:3px -21px;width:auto}}@media (min-width:768px){.navbar-form.navbar-right:last-child,.navbar-nav+.navbar-form.navbar-left{width:260px}}.navbar-form .btn,.navbar-form .form-control,.navbar-form .input-group-addon{height:35px;padding:5px 10px;font-size:13px;line-height:1.4;border-radius:6px}select.navbar-form .btn,select.navbar-form .form-control,select.navbar-form .input-group-addon{height:35px;line-height:35px}select[multiple].navbar-form .btn,select[multiple].navbar-form .form-control,select[multiple].navbar-form .input-group-addon,textarea.navbar-form .btn,textarea.navbar-form .form-control,textarea.navbar-form .input-group-addon{height:auto}.navbar-form .input-group .form-control:first-child,.navbar-form .input-group-addon:first-child,.navbar-form .input-group-btn:first-child>.btn,.navbar-form .input-group-btn:first-child>.dropdown-toggle,.navbar-form .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.navbar-form .input-group .form-control:last-child,.navbar-form .input-group-addon:last-child,.navbar-form .input-group-btn:first-child>.btn:not(:first-child),.navbar-form .input-group-btn:last-child>.btn,.navbar-form .input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.navbar-form .form-control{font-size:15px;border-radius:5px;display:table-cell}.navbar-form .form-group+.btn{font-size:15px;border-radius:5px;margin-left:4px}@media (max-width:767px){.navbar-form .form-group{margin-bottom:0}.navbar-form .form-group+.btn{margin-top:9px;margin-left:0}}.navbar-nav>li>.dropdown-menu{min-width:100%;border-radius:4px}@media (max-width:767px){.navbar-nav>li>.dropdown-menu{-webkit-transition:all 0s;transition:all 0s;display:none}}@media (max-width:767px){.navbar-nav>li.open>.dropdown-menu{margin-top:0!important;display:block}}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.navbar-nav>.open>.dropdown-toggle,.navbar-nav>.open>.dropdown-toggle:focus,.navbar-nav>.open>.dropdown-toggle:hover{background-color:transparent}.navbar-text{font-size:16px;line-height:1.438;color:#283f50;margin-top:0;margin-bottom:0;padding-top:15px;padding-bottom:15px}@media (min-width:768px){.navbar-text{margin-left:21px;margin-right:21px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-btn{margin-top:6px;margin-bottom:6px}.navbar-btn.btn-sm{margin-top:9px;margin-bottom:8px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-new,.navbar-unread{font-family:"Source Sans Pro",Helvetica,Arial,sans-serif;background-color:#1abc9c;border-radius:50%;color:#fff;font-size:0;font-weight:700;height:6px;line-height:1;position:absolute;right:12px;text-align:center;top:35%;width:6px;z-index:10}@media (max-width:768px){.navbar-new,.navbar-unread{position:static;float:right;margin:0 0 0 10px}}.active .navbar-new,.active .navbar-unread{background-color:#fff;display:none}.navbar-new{background-color:#e74c3c;font-size:12px;height:18px;line-height:17px;margin:-6px -10px;min-width:18px;padding:0 1px;width:auto;-webkit-font-smoothing:subpixel-antialiased}.navbar-default{background-color:#ecf0f1}.navbar-default .navbar-brand{color:#283f50}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#1abc9c;background-color:transparent}.navbar-default .navbar-toggle:before{color:#283f50}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:transparent}.navbar-default .navbar-toggle:focus:before,.navbar-default .navbar-toggle:hover:before{color:#1abc9c}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e5e9ea;border-width:2px}.navbar-default .navbar-nav>li>a{color:#283f50}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#1abc9c;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#1abc9c;background-color:transparent}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-nav>.dropdown>a .caret{border-top-color:#283f50;border-bottom-color:#283f50}.navbar-default .navbar-nav>.active>a .caret{border-top-color:#1abc9c;border-bottom-color:#1abc9c}.navbar-default .navbar-nav>.dropdown>a:focus .caret,.navbar-default .navbar-nav>.dropdown>a:hover .caret{border-top-color:#1abc9c;border-bottom-color:#1abc9c}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:transparent;color:#1abc9c}.navbar-default .navbar-nav>.open>a .caret,.navbar-default .navbar-nav>.open>a:focus .caret,.navbar-default .navbar-nav>.open>a:hover .caret{border-top-color:#1abc9c;border-bottom-color:#1abc9c}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#283f50}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#1abc9c;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#1abc9c;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-form .form-control{border-color:transparent}.navbar-default .navbar-form .form-control:-moz-placeholder{color:#aeb6bf}.navbar-default .navbar-form .form-control::-moz-placeholder{color:#aeb6bf;opacity:1}.navbar-default .navbar-form .form-control:-ms-input-placeholder{color:#aeb6bf}.navbar-default .navbar-form .form-control::-webkit-input-placeholder{color:#aeb6bf}.navbar-default .navbar-form .form-control.placeholder{color:#aeb6bf}.navbar-default .navbar-form .form-control:focus{border-color:#1abc9c;color:#1abc9c}.navbar-default .navbar-form .input-group-btn .btn{border-color:transparent;color:#919ba4}.navbar-default .navbar-form .input-group.focus .form-control,.navbar-default .navbar-form .input-group.focus .input-group-btn .btn{border-color:#1abc9c;color:#1abc9c}.navbar-default .navbar-text{color:#283f50}.navbar-default .navbar-text a{color:#283f50}.navbar-default .navbar-text a:focus,.navbar-default .navbar-text a:hover{color:#1abc9c}.navbar-inverse{background-color:#283f50}.navbar-inverse .navbar-brand{color:#fff}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#1abc9c;background-color:transparent}.navbar-inverse .navbar-toggle:before{color:#fff}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:transparent}.navbar-inverse .navbar-toggle:focus:before,.navbar-inverse .navbar-toggle:hover:before{color:#1abc9c}.navbar-inverse .navbar-collapse{border-color:#2f4154;border-width:2px}.navbar-inverse .navbar-nav>li>a{color:#fff}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#1abc9c;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#1abc9c}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-nav>.dropdown>a:focus .caret,.navbar-inverse .navbar-nav>.dropdown>a:hover .caret{border-top-color:#1abc9c;border-bottom-color:#1abc9c}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#1abc9c;color:#fff;border-left-color:transparent}.navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-nav>.dropdown>a .caret{border-top-color:#4b6075;border-bottom-color:#4b6075}.navbar-inverse .navbar-nav>.open>.dropdown-arrow{border-top-color:#283f50;border-bottom-color:#283f50}.navbar-inverse .navbar-nav>.open>.dropdown-menu{background-color:#283f50;padding:3px 4px}.navbar-inverse .navbar-nav>.open>.dropdown-menu>li>a{color:#e1e4e7;border-radius:4px;padding:6px 9px}.navbar-inverse .navbar-nav>.open>.dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav>.open>.dropdown-menu>li>a:hover{color:#fff;background-color:#1abc9c}.navbar-inverse .navbar-nav>.open>.dropdown-menu>.divider{background-color:#2f4154;height:2px;margin-left:-4px;margin-right:-4px}@media (max-width:767px){.navbar-inverse .navbar-nav>li>a{border-left-width:0}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#fff}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#1abc9c;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#1abc9c}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-nav .dropdown-menu .divider{background-color:#2f4154}}.navbar-inverse .navbar-form .form-control{color:#536a81;border-color:transparent;background-color:#293a4a}.navbar-inverse .navbar-form .form-control:-moz-placeholder{color:#536a81}.navbar-inverse .navbar-form .form-control::-moz-placeholder{color:#536a81;opacity:1}.navbar-inverse .navbar-form .form-control:-ms-input-placeholder{color:#536a81}.navbar-inverse .navbar-form .form-control::-webkit-input-placeholder{color:#536a81}.navbar-inverse .navbar-form .form-control.placeholder{color:#536a81}.navbar-inverse .navbar-form .form-control:focus{border-color:#1abc9c;color:#1abc9c}.navbar-inverse .navbar-form .btn{color:#fff;background-color:#1abc9c}.navbar-inverse .navbar-form .btn.active,.navbar-inverse .navbar-form .btn:active,.navbar-inverse .navbar-form .btn:focus,.navbar-inverse .navbar-form .btn:hover,.open .dropdown-toggle.navbar-inverse .navbar-form .btn{color:#fff;background-color:#48c9b0;border-color:#48c9b0}.navbar-inverse .navbar-form .btn.active,.navbar-inverse .navbar-form .btn:active,.open .dropdown-toggle.navbar-inverse .navbar-form .btn{background:#16a085;border-color:#16a085}.navbar-inverse .navbar-form .btn.disabled,.navbar-inverse .navbar-form .btn.disabled.active,.navbar-inverse .navbar-form .btn.disabled:active,.navbar-inverse .navbar-form .btn.disabled:focus,.navbar-inverse .navbar-form .btn.disabled:hover,.navbar-inverse .navbar-form .btn[disabled],.navbar-inverse .navbar-form .btn[disabled].active,.navbar-inverse .navbar-form .btn[disabled]:active,.navbar-inverse .navbar-form .btn[disabled]:focus,.navbar-inverse .navbar-form .btn[disabled]:hover,fieldset[disabled] .navbar-inverse .navbar-form .btn,fieldset[disabled] .navbar-inverse .navbar-form .btn.active,fieldset[disabled] .navbar-inverse .navbar-form .btn:active,fieldset[disabled] .navbar-inverse .navbar-form .btn:focus,fieldset[disabled] .navbar-inverse .navbar-form .btn:hover{background-color:#1abc9c;border-color:#1abc9c}.navbar-inverse .navbar-form .input-group-btn .btn{border-color:transparent;background-color:#293a4a;color:#526a82}.navbar-inverse .navbar-form .input-group.focus .form-control,.navbar-inverse .navbar-form .input-group.focus .input-group-btn .btn{border-color:#1abc9c;color:#1abc9c}@media (max-width:767px){.navbar-inverse .navbar-form{border-color:#2f4154;border-width:2px 0}}.navbar-inverse .navbar-text{color:#fff}.navbar-inverse .navbar-text a{color:#fff}.navbar-inverse .navbar-text a:focus,.navbar-inverse .navbar-text a:hover{color:#1abc9c}.navbar-inverse .navbar-btn{color:#fff;background-color:#1abc9c}.navbar-inverse .navbar-btn.active,.navbar-inverse .navbar-btn:active,.navbar-inverse .navbar-btn:focus,.navbar-inverse .navbar-btn:hover,.open .dropdown-toggle.navbar-inverse .navbar-btn{color:#fff;background-color:#48c9b0;border-color:#48c9b0}.navbar-inverse .navbar-btn.active,.navbar-inverse .navbar-btn:active,.open .dropdown-toggle.navbar-inverse .navbar-btn{background:#16a085;border-color:#16a085}.navbar-inverse .navbar-btn.disabled,.navbar-inverse .navbar-btn.disabled.active,.navbar-inverse .navbar-btn.disabled:active,.navbar-inverse .navbar-btn.disabled:focus,.navbar-inverse .navbar-btn.disabled:hover,.navbar-inverse .navbar-btn[disabled],.navbar-inverse .navbar-btn[disabled].active,.navbar-inverse .navbar-btn[disabled]:active,.navbar-inverse .navbar-btn[disabled]:focus,.navbar-inverse .navbar-btn[disabled]:hover,fieldset[disabled] .navbar-inverse .navbar-btn,fieldset[disabled] .navbar-inverse .navbar-btn.active,fieldset[disabled] .navbar-inverse .navbar-btn:active,fieldset[disabled] .navbar-inverse .navbar-btn:focus,fieldset[disabled] .navbar-inverse .navbar-btn:hover{background-color:#1abc9c;border-color:#1abc9c}@media (min-width:768px){.navbar-embossed>.navbar-collapse{border-radius:6px;-webkit-box-shadow:inset 0 -2px 0 rgba(0,0,0,.15);box-shadow:inset 0 -2px 0 rgba(0,0,0,.15)}.navbar-embossed.navbar-inverse .navbar-nav .active>a,.navbar-embossed.navbar-inverse .navbar-nav .open>a{-webkit-box-shadow:inset 0 -2px 0 rgba(0,0,0,.15);box-shadow:inset 0 -2px 0 rgba(0,0,0,.15)}}.navbar-lg{min-height:76px}.navbar-lg .navbar-brand{line-height:1;padding-top:26px;padding-bottom:26px}.navbar-lg .navbar-brand>[class*=fui-]{font-size:24px;line-height:1}.navbar-lg .navbar-nav>li>a{font-size:15px;line-height:1.6}@media (min-width:768px){.navbar-lg .navbar-nav>li>a{padding-top:26px;padding-bottom:26px}}.navbar-lg .navbar-toggle{height:76px;line-height:76px}.navbar-lg .navbar-form{padding-top:20.5px;padding-bottom:20.5px}.navbar-lg .navbar-text{padding-top:26.5px;padding-bottom:26.5px}.navbar-lg .navbar-btn{margin-top:17.5px;margin-bottom:17.5px}.navbar-lg .navbar-btn.btn-sm{margin-top:20.5px;margin-bottom:20.5px}.navbar-lg .navbar-btn.btn-xs{margin-top:25.5px;margin-bottom:25.5px}.tagsinput{background:#fff;border:2px solid #1abc9c;border-radius:6px;height:100px;margin-bottom:18px;padding:6px 1px 1px 6px;overflow-y:auto;text-align:left}.tagsinput .tag{border-radius:4px;background-color:#1abc9c;color:#fff;font-size:14px;cursor:pointer;display:inline-block;margin-right:5px;margin-bottom:5px;overflow:hidden;line-height:15px;padding:6px 13px 8px 19px;position:relative;vertical-align:middle;-webkit-transition:.25s linear;transition:.25s linear}.tagsinput .tag:hover{background-color:#16a085;color:#fff;padding-left:12px;padding-right:20px}.tagsinput .tag:hover .tagsinput-remove-link{color:#fff;opacity:1}.tagsinput input{background:0 0;border:none;color:#283f50;font-family:"Source Sans Pro",Helvetica,Arial,sans-serif;font-size:14px;margin:0;padding:0 0 0 5px;outline:0!important;margin:6px 5px 0 0;vertical-align:top;width:12px}.tagsinput-remove-link{bottom:0;color:#fff;cursor:pointer;font-size:12px;opacity:0;padding:7px 7px 5px 0;position:absolute;right:0;text-align:right;text-decoration:none;top:0;width:100%;z-index:2}.tagsinput-remove-link:before{color:#fff;content:"\e00b";font-family:Flat-UI-Icons}.tagsinput-add-container{vertical-align:middle;display:inline-block}.tagsinput-add{background-color:#d6dbdf;border-radius:3px;color:#fff;cursor:pointer;display:inline-block;font-size:14px;line-height:1;margin-bottom:5px;padding:7px 9px;vertical-align:top;-webkit-transition:.25s linear;transition:.25s linear}.tagsinput-add:hover{background-color:#1abc9c}.tagsinput-add:before{content:"\e009";font-family:Flat-UI-Icons}.tags_clear{clear:both;width:100%;height:0}.not_valid{background:#fbd8db!important;color:#90111a!important;margin-left:5px!important}.twitter-typeahead{width:100%}.twitter-typeahead .tt-hint,.twitter-typeahead .tt-query{border:2px solid #bdc3c7;color:#283f50;font-family:"Source Sans Pro",Helvetica,Arial,sans-serif;font-size:15px;line-height:1.467;padding:8px 12px;height:42px;-webkit-appearance:none;border-radius:6px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border .25s linear,color .25s linear,background-color .25s linear;transition:border .25s linear,color .25s linear,background-color .25s linear}.twitter-typeahead .tt-hint:-moz-placeholder,.twitter-typeahead .tt-query:-moz-placeholder{color:#b2bcc5}.twitter-typeahead .tt-hint::-moz-placeholder,.twitter-typeahead .tt-query::-moz-placeholder{color:#b2bcc5;opacity:1}.twitter-typeahead .tt-hint:-ms-input-placeholder,.twitter-typeahead .tt-query:-ms-input-placeholder{color:#b2bcc5}.twitter-typeahead .tt-hint::-webkit-input-placeholder,.twitter-typeahead .tt-query::-webkit-input-placeholder{color:#b2bcc5}.twitter-typeahead .tt-hint.placeholder,.twitter-typeahead .tt-query.placeholder{color:#b2bcc5}.form-group.focus .twitter-typeahead .tt-hint,.form-group.focus .twitter-typeahead .tt-query,.twitter-typeahead .tt-hint:focus,.twitter-typeahead .tt-query:focus{border-color:#1abc9c;outline:0;-webkit-box-shadow:none;box-shadow:none}.twitter-typeahead .tt-hint[disabled],.twitter-typeahead .tt-hint[readonly],.twitter-typeahead .tt-query[disabled],.twitter-typeahead .tt-query[readonly],fieldset[disabled] .twitter-typeahead .tt-hint,fieldset[disabled] .twitter-typeahead .tt-query{background-color:#f4f6f6;border-color:#d5dbdb;color:#d5dbdb;cursor:default;opacity:.7}.twitter-typeahead .tt-hint.flat,.twitter-typeahead .tt-query.flat{border-color:transparent}.twitter-typeahead .tt-hint.flat:hover,.twitter-typeahead .tt-query.flat:hover{border-color:#bdc3c7}.twitter-typeahead .tt-hint.flat:focus,.twitter-typeahead .tt-query.flat:focus{border-color:#1abc9c}.twitter-typeahead .tt-hint+.input-icon,.twitter-typeahead .tt-query+.input-icon{position:absolute;top:2px;right:2px;line-height:37px;vertical-align:middle;font-size:20px;color:#b2bcc5;background-color:#fff;padding:0 12px 0 0;border-radius:6px}.twitter-typeahead .tt-dropdown-menu{width:100%;margin-top:5px;border:2px solid #1abc9c;padding:5px 0;background-color:#fff;border-radius:6px}.twitter-typeahead .tt-suggestion p{padding:6px 14px;font-size:14px;line-height:1.429;margin:0}.twitter-typeahead .tt-suggestion:first-child p,.twitter-typeahead .tt-suggestion:last-child p{padding:6px 14px}.twitter-typeahead .tt-suggestion.tt-is-under-cursor{color:#fff;background-color:#16a085}.progress{background:#ebedef;border-radius:32px;height:12px;-webkit-box-shadow:none;box-shadow:none}.progress-bar{background:#1abc9c;line-height:12px;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#2ecc71}.progress-bar-warning{background-color:#f1c40f}.progress-bar-danger{background-color:#e74c3c}.progress-bar-info{background-color:#3498db}.ui-slider{background:#ebedef;border-radius:32px;height:12px;-webkit-box-shadow:none;box-shadow:none;margin-bottom:20px;position:relative;cursor:pointer}.ui-slider-handle{background-color:#16a085;border-radius:50%;cursor:pointer;height:18px;position:absolute;width:18px;z-index:2;-webkit-transition:background .25s;transition:background .25s}.ui-slider-handle:focus,.ui-slider-handle:hover{background-color:#48c9b0;outline:0}.ui-slider-handle:active{background-color:#16a085}.ui-slider-range{background-color:#1abc9c;display:block;height:100%;position:absolute;z-index:1}.ui-slider-segment{background-color:#d9dbdd;border-radius:50%;height:6px;width:6px}.ui-slider-value{float:right;font-size:13px;margin-top:12px}.ui-slider-value.first{clear:left;float:left}.ui-slider-horizontal .ui-slider-handle{margin-left:-9px;top:-3px}.ui-slider-horizontal .ui-slider-handle[style*="100"]{margin-left:-15px}.ui-slider-horizontal .ui-slider-range{border-radius:30px 0 0 30px}.ui-slider-horizontal .ui-slider-segment{float:left;margin:3px -6px 0 0}.ui-slider-vertical{width:12px}.ui-slider-vertical .ui-slider-handle{margin-left:-3px;margin-bottom:-11px;top:auto}.ui-slider-vertical .ui-slider-range{width:100%;bottom:0;border-radius:0 0 30px 30px}.ui-slider-vertical .ui-slider-segment{position:absolute;right:3px}.pager{background-color:#283f50;border-radius:6px;color:#fff;font-size:16px;font-weight:700;display:inline-block}.pager li:first-child>a,.pager li:first-child>span{border-left:none;border-radius:6px 0 0 6px}.pager li>a,.pager li>span{background:0 0;border:none;border-left:2px solid #2c3e50;color:#fff;padding:9px 15px 10px;text-decoration:none;white-space:nowrap;border-radius:0 6px 6px 0;line-height:1.313}.pager li>a:focus,.pager li>a:hover,.pager li>span:focus,.pager li>span:hover{background-color:#2c3e50}.pager li>a:active,.pager li>span:active{background-color:#2c3e50}.pager li>a [class*=fui-]+span,.pager li>span [class*=fui-]+span{margin-left:8px}.pager li>a span+[class*=fui-],.pager li>span span+[class*=fui-]{margin-left:8px}.pagination{position:relative}.pagination ul{background:#d6dbdf;color:#fff;padding:0;margin:0;display:inline-block;border-radius:6px}.pagination ul li{display:inline-block;margin-right:-3px;vertical-align:middle}.pagination ul li:first-child{border-radius:6px 0 0 6px}.pagination ul li:first-child.previous+li>a,.pagination ul li:first-child.previous+li>span{border-left-width:5px}.pagination ul li:last-child{border-radius:0 6px 6px 0;margin-right:0}.pagination ul li.next>a,.pagination ul li.next>span,.pagination ul li.previous>a,.pagination ul li.previous>span{background:0 0;border:none;border-right:2px solid #e4e7ea;font-size:16px;margin:0 9px 0 0;padding:12px 17px;border-radius:6px 0 0 6px}.pagination ul li.next>a,.pagination ul li.next>a:focus,.pagination ul li.next>a:hover,.pagination ul li.next>span,.pagination ul li.next>span:focus,.pagination ul li.next>span:hover,.pagination ul li.previous>a,.pagination ul li.previous>a:focus,.pagination ul li.previous>a:hover,.pagination ul li.previous>span,.pagination ul li.previous>span:focus,.pagination ul li.previous>span:hover{border-color:#e4e7ea!important}@media (max-width:480px){.pagination ul li.next>a,.pagination ul li.next>span,.pagination ul li.previous>a,.pagination ul li.previous>span{margin-right:0}}.pagination ul li.next{margin-left:9px}.pagination ul li.next>a,.pagination ul li.next>span{border-left:2px solid #e4e7ea;border-right:none;margin:0;border-radius:0 6px 6px 0}.pagination ul li.active>a,.pagination ul li.active>span{background-color:#fff;border-color:#fff;border-width:2px!important;color:#d6dbdf;margin:10px 5px 9px}.pagination ul li.active>a:focus,.pagination ul li.active>a:hover,.pagination ul li.active>span:focus,.pagination ul li.active>span:hover{background-color:#fff;border-color:#fff;color:#d6dbdf}.pagination ul li.active.next,.pagination ul li.active.previous{border-color:#e4e7ea}.pagination ul li.active.next>a,.pagination ul li.active.next>span,.pagination ul li.active.previous>a,.pagination ul li.active.previous>span{margin:0}.pagination ul li.active.next>a,.pagination ul li.active.next>a:focus,.pagination ul li.active.next>a:hover,.pagination ul li.active.next>span,.pagination ul li.active.next>span:focus,.pagination ul li.active.next>span:hover,.pagination ul li.active.previous>a,.pagination ul li.active.previous>a:focus,.pagination ul li.active.previous>a:hover,.pagination ul li.active.previous>span,.pagination ul li.active.previous>span:focus,.pagination ul li.active.previous>span:hover{background-color:#1abc9c;color:#fff}.pagination ul li.active.previous{margin-right:6px}.pagination ul li>a,.pagination ul li>span{display:inline-block;background:#fff;border:5px solid #d6dbdf;color:#fff;font-size:14px;line-height:16px;margin:7px 2px 6px;min-width:0;min-height:16px;padding:0 4px;border-radius:50px;-webkit-transition:background .2s ease-out,border-color 0s ease-out,color .2s ease-out;transition:background .2s ease-out,border-color 0s ease-out,color .2s ease-out}.pagination ul li>a:focus,.pagination ul li>a:hover,.pagination ul li>span:focus,.pagination ul li>span:hover{background-color:#1abc9c;border-color:#1abc9c;color:#fff;-webkit-transition:background .2s ease-out,border-color .2s ease-out,color .2s ease-out;transition:background .2s ease-out,border-color .2s ease-out,color .2s ease-out}.pagination ul li>a:active,.pagination ul li>span:active{background-color:#16a085;border-color:#16a085}.pagination>.btn.next,.pagination>.btn.previous{margin-right:8px;font-size:14px;line-height:1.429;padding-left:23px;padding-right:23px}.pagination>.btn.next [class*=fui-],.pagination>.btn.previous [class*=fui-]{font-size:16px;margin-left:-2px;margin-top:-2px}.pagination>.btn.next{margin-left:8px;margin-right:0}.pagination>.btn.next [class*=fui-]{margin-right:-2px;margin-left:4px}.tooltip{font-size:14px;line-height:1.286}.tooltip.in{opacity:1}.tooltip.top{padding-bottom:9px}.tooltip.top .tooltip-arrow{border-top-color:#283f50;border-width:9px 9px 0;bottom:0;margin-left:-9px}.tooltip.right .tooltip-arrow{border-right-color:#283f50;border-width:9px 9px 9px 0;margin-top:-9px;left:-3px}.tooltip.bottom{padding-top:8px}.tooltip.bottom .tooltip-arrow{border-bottom-color:#283f50;border-width:0 9px 9px;margin-left:-9px;top:-1px}.tooltip.left .tooltip-arrow{border-left-color:#283f50;border-width:9px 0 9px 9px;margin-top:-9px;right:-3px}.tooltip-inner{background-color:#283f50;line-height:1.286;padding:12px 12px;text-align:center;width:183px;border-radius:6px}.dropup .dropdown-arrow,.navbar-fixed-bottom .dropdown .dropdown-arrow{border-bottom:none;border-top:8px outset #f3f4f5;bottom:100%;top:auto}.navbar-fixed-bottom .nav>li>ul:before{border-bottom:none;border-top:9px outset #283f50;bottom:4px;top:auto}.open.dropup>.dropdown-menu{margin-bottom:18px}.open.dropup>.dropdown-arrow{margin-bottom:10px}.open.dropup>.dropdown-arrow.dropdown-arrow-inverse{border-top-color:#283f50}.open>.dropdown-arrow{margin-top:11px;opacity:1}.dropdown-arrow{border-style:solid;border-width:0 8px 7px;border-color:transparent transparent #f3f4f5 transparent;height:0;margin-top:0;opacity:0;position:absolute;right:19px;top:100%;width:0;z-index:10;-webkit-transform:rotate(360deg);-webkit-transition:.25s;transition:.25s}.dropdown-inverse{background-color:#283f50;color:#ccc;padding:4px 0 6px}.dropdown-inverse li{margin:0 4px -2px}.dropdown-inverse li:first-child>a,.dropdown-inverse li:last-child>a{border-radius:2px;padding-bottom:7px;padding-top:5px}.dropdown-inverse li:first-child dt+a,.dropdown-inverse li:last-child dt+a{border-radius:2px}.dropdown-inverse li.active>a,.dropdown-inverse li.selected>a{background:#1abc9c;color:#fff;position:relative;z-index:1}.dropdown-inverse li dt{padding-left:11px;padding-right:11px}.dropdown-inverse li .divider{margin-left:11px;margin-right:11px}.dropdown-inverse li>a{border-radius:2px;color:#fff;padding:5px 11px 7px}.dropdown-inverse li>a:active,.dropdown-inverse li>a:focus,.dropdown-inverse li>a:hover{background:#2c3e50}.dropdown-inverse li>a.highlighted{background:#526476}.dropdown-inverse li>a.highlighted:focus,.dropdown-inverse li>a.highlighted:hover{background:#677786}.dropdown-inverse li .divider{background-color:#526476;border-bottom-color:#526476}.has-switch{border-radius:30px;display:inline-block;cursor:pointer;line-height:1.72222;overflow:hidden;position:relative;text-align:left;width:80px;-webkit-mask:url(../images/switch/mask.png) 0 0 no-repeat;mask:url(../images/switch/mask.png) 0 0 no-repeat;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.has-switch.deactivate{opacity:.5;cursor:default!important}.has-switch.deactivate label,.has-switch.deactivate span{cursor:default!important}.has-switch>div{width:130px;position:relative;top:0}.has-switch>div.switch-animate{-webkit-transition:left .25s ease-out;transition:left .25s ease-out}.has-switch>div.switch-off{left:-50px}.has-switch>div.switch-off label{background-color:#7f8c9a;border-color:#bdc3c7;-webkit-box-shadow:-1px 0 0 rgba(255,255,255,.5);box-shadow:-1px 0 0 rgba(255,255,255,.5)}.has-switch>div.switch-on{left:0}.has-switch>div.switch-on label{background-color:#1abc9c}.has-switch input[type=checkbox]{display:none}.has-switch span{cursor:pointer;font-size:15px;font-weight:700;float:left;height:29px;line-height:19px;margin:0;padding-bottom:6px;padding-top:5px;position:relative;text-align:center;width:50%;z-index:1;-webkit-transition:.25s ease-out;transition:.25s ease-out}.has-switch span.switch-left{border-radius:30px 0 0 30px;background-color:#283f50;color:#1abc9c;border-left:1px solid transparent}.has-switch span.switch-right{border-radius:0 30px 30px 0;background-color:#bdc3c7;color:#fff;text-indent:7px}.has-switch span.switch-right [class*=fui-]{text-indent:0}.has-switch label{border:4px solid #283f50;border-radius:50%;float:left;height:29px;margin:0 -15px;padding:0;position:relative;vertical-align:middle;width:29px;z-index:100;-webkit-transition:.25s ease-out;transition:.25s ease-out}.switch-square{border-radius:6px;-webkit-mask:url(../images/switch/mask.png) 0 0 no-repeat;mask:url(../images/switch/mask.png) 0 0 no-repeat}.switch-square>div.switch-off label{border-color:#7f8c9a;border-radius:6px 0 0 6px}.switch-square span.switch-left{border-radius:6px 0 0 6px}.switch-square span.switch-left [class*=fui-]{text-indent:-10px}.switch-square span.switch-right{border-radius:0 6px 6px 0}.switch-square span.switch-right [class*=fui-]{text-indent:5px}.switch-square label{border-radius:0 6px 6px 0;border-color:#1abc9c}.share{background-color:#eff0f2;position:relative;border-radius:6px}.share:before{content:"";border-style:solid;border-width:0 9px 9px 9px;border-color:transparent transparent #eff0f2 transparent;height:0;position:absolute;left:23px;top:-9px;width:0;-webkit-transform:rotate(360deg)}.share ul{list-style-type:none;margin:0;padding:15px}.share li{font-size:15px;line-height:1.4;padding-top:11px}.share li:after,.share li:before{content:" ";display:table}.share li:after{clear:both}.share li:first-child{padding-top:0}.share .toggle{float:right;margin:0}.share .btn{border-radius:0 0 6px 6px}.share-label{float:left;font-size:15px;line-height:1.4;padding-top:5px;width:50%}.pallete-item{width:140px;float:left;margin:0 0 20px 20px}.palette{font-size:14px;line-height:1.214;color:#fff;margin:0;padding:15px;text-transform:uppercase}.palette dd,.palette dt{line-height:1.429}.palette dt{display:block;font-weight:700;opacity:.8}.palette dd{font-weight:300;margin-left:0;opacity:.8;-webkit-font-smoothing:subpixel-antialiased}.palette-turquoise{background-color:#1abc9c}.palette-green-sea{background-color:#16a085}.palette-emerald{background-color:#2ecc71}.palette-nephritis{background-color:#27ae60}.palette-peter-river{background-color:#3498db}.palette-belize-hole{background-color:#2980b9}.palette-amethyst{background-color:#9b59b6}.palette-wisteria{background-color:#8e44ad}.palette-wet-asphalt{background-color:#283f50}.palette-midnight-blue{background-color:#2c3e50}.palette-sun-flower{background-color:#f1c40f}.palette-orange{background-color:#f39c12}.palette-carrot{background-color:#e67e22}.palette-pumpkin{background-color:#d35400}.palette-alizarin{background-color:#e74c3c}.palette-pomegranate{background-color:#c0392b}.palette-clouds{background-color:#ecf0f1}.palette-silver{background-color:#bdc3c7}.palette-concrete{background-color:#95a5a6}.palette-asbestos{background-color:#7f8c8d}.palette-clouds{color:#bdc3c7}.palette-paragraph{color:#7f8c8d;font-size:12px;line-height:17px}.palette-paragraph span{color:#bdc3c7}.palette-headline{color:#7f8c8d;font-size:13px;font-weight:700;margin-top:-3px}.tile{background-color:#eff0f2;border-radius:6px;padding:14px;position:relative;text-align:center}.tile.tile-hot:before{background:url(../images/tile/ribbon.png) 0 0 no-repeat;background-size:82px 82px;content:'';height:82px;position:absolute;right:-4px;top:-4px;width:82px}.tile p{font-size:15px;margin-bottom:33px}.tile-image{height:100px;margin:31px 0 27px;vertical-align:bottom}.tile-image.big-illustration{height:111px;margin-top:20px;width:112px}.tile-title{font-size:20px;margin:0}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-moz-min-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-moz-min-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:2){.tile.tile-hot:before{background-image:url(../images/tile/ribbon-2x.png)}}.todo{color:#798795;margin-bottom:20px;border-radius:6px}.todo ul{background-color:#2c3e50;margin:0;padding:0;list-style-type:none;border-radius:0 0 6px 6px}.todo li{background:#283f50 url(../images/todo/todo.png) 92% center no-repeat;background-size:20px 20px;cursor:pointer;font-size:14px;line-height:1.214;margin-top:2px;padding:18px 42px 21px 25px;position:relative;-webkit-transition:.25s;transition:.25s}.todo li:first-child{margin-top:0}.todo li:last-child{border-radius:0 0 6px 6px;padding-bottom:21px}.todo li.todo-done{background:transparent url(../images/todo/done.png) 92% center no-repeat;background-size:20px 20px;color:#1abc9c}.todo li.todo-done .todo-name{color:#1abc9c}.todo-search{position:relative;background:#1abc9c;background-size:16px 16px;border-radius:6px 6px 0 0;color:#283f50;padding:19px 25px 20px}.todo-search:before{position:absolute;font-family:Flat-UI-Icons;content:"\e01c";font-size:16px;line-height:17px;display:inline-block;top:50%;left:92%;margin:-.5em 0 0 -1em}input.todo-search-field{background:0 0;border:none;color:#283f50;font-size:19px;font-weight:700;margin:0;line-height:23px;padding:5px 0;text-indent:0;-webkit-box-shadow:none;box-shadow:none}input.todo-search-field:-moz-placeholder{color:#283f50}input.todo-search-field::-moz-placeholder{color:#283f50;opacity:1}input.todo-search-field:-ms-input-placeholder{color:#283f50}input.todo-search-field::-webkit-input-placeholder{color:#283f50}input.todo-search-field.placeholder{color:#283f50}.todo-icon{float:left;font-size:24px;padding:11px 22px 0 0}.todo-content{padding-top:1px;overflow:hidden}.todo-name{color:#fff;font-size:17px;margin:1px 0 3px}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-moz-min-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-moz-min-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:2){.todo li{background-image:url(../images/todo/todo-2x.png)}.todo li.todo-done{background-image:url(../images/todo/done-2x.png)}}.video-js{background-color:transparent;margin-top:-95px;position:relative;padding:0;font-size:10px;vertical-align:middle;border-radius:6px 6px 0 0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}.video-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:6px 6px 0 0}.video-js:-moz-full-screen{position:absolute}body.vjs-full-window{padding:0;margin:0;height:100%;overflow-y:auto}.video-js.vjs-fullscreen{position:fixed;overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0;width:100%!important;height:100%!important}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.vjs-poster{margin:0 auto;padding:0;cursor:pointer;position:relative;width:100%;max-height:100%;border-radius:6px 6px 0 0}.video-js .vjs-text-track-display{text-align:center;position:absolute;bottom:4em;left:1em;right:1em;font-family:"Source Sans Pro",Helvetica,Arial,sans-serif}.video-js .vjs-text-track{display:none;color:#fff;font-size:1.4em;text-align:center;margin-bottom:.1em;background:#000;background:rgba(0,0,0,.5)}.video-js .vjs-subtitles{color:#fff}.video-js .vjs-captions{color:#fc6}.vjs-tt-cue{display:block}.vjs-fade-in{visibility:visible!important;opacity:1!important;-webkit-transition:visibility 0s linear 0s,opacity .3s linear;transition:visibility 0s linear 0s,opacity .3s linear}.vjs-fade-out{visibility:hidden!important;opacity:0!important;-webkit-transition:visibility 0s linear 1.5s,opacity 1.5s linear;transition:visibility 0s linear 1.5s,opacity 1.5s linear}.vjs-control-bar{position:absolute;bottom:-47px;left:0;right:0;margin:0;padding:0;height:47px;color:#fff;background:#273747;border-radius:0 0 6px 6px}.vjs-control-bar.vjs-fade-out{visibility:visible!important;opacity:1!important}.vjs-control{background-position:center center;background-repeat:no-repeat;position:relative;float:left;text-align:center;margin:0;padding:0;height:18px;width:18px}.vjs-control:focus{outline:0}.vjs-control div{background-position:center center;background-repeat:no-repeat}.vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.vjs-play-control{cursor:pointer!important;height:47px;left:0;position:absolute;top:0;width:58px}.vjs-play-control div{position:relative;height:47px}.vjs-play-control div:after,.vjs-play-control div:before{position:absolute;font-family:Flat-UI-Icons;color:#1abc9c;font-size:16px;top:50%;left:50%;margin:-.55em 0 0 -.5em;-webkit-transition:color .25s,opacity .25s;transition:color .25s,opacity .25s}.vjs-play-control div:after{content:"\e03b"}.vjs-play-control div:before{content:"\e03c"}.vjs-paused .vjs-play-control:hover div:before{color:#16a085}.vjs-paused .vjs-play-control div:after{opacity:0}.vjs-paused .vjs-play-control div:before{opacity:1}.vjs-playing .vjs-play-control:hover div:after{color:#16a085}.vjs-playing .vjs-play-control div:after{opacity:1}.vjs-playing .vjs-play-control div:before{opacity:0}.vjs-rewind-control{width:5em;cursor:pointer!important}.vjs-rewind-control div{width:19px;height:16px;background:none transparent;margin:.5em auto 0}.vjs-mute-control{background:url(../images/video/volume-full.png) center -48px no-repeat;background-size:16px 64px;cursor:pointer!important;position:absolute;right:51px;top:14px}.vjs-mute-control:focus div,.vjs-mute-control:hover div{opacity:0}.vjs-mute-control.vjs-vol-0,.vjs-mute-control.vjs-vol-0 div{background-image:url(../images/video/volume-off.png)}.vjs-mute-control div{background:#273747 url(../images/video/volume-full.png) no-repeat center 2px;background-size:16px 64px;height:18px;-webkit-transition:opacity .25s;transition:opacity .25s}.vjs-volume-bar,.vjs-volume-control,.vjs-volume-handle,.vjs-volume-level{display:none}.vjs-progress-control{position:absolute;left:60px;right:180px;height:12px;width:auto;top:18px;background:#425669;border-radius:32px}.vjs-progress-holder{position:relative;cursor:pointer!important;padding:0;margin:0;height:12px}.vjs-load-progress,.vjs-play-progress{position:absolute;display:block;height:12px;margin:0;padding:0;left:0;top:0;border-radius:32px}.vjs-play-progress{background:#1abc9c;left:-1px}.vjs-load-progress{background:#d6dbdf;border-radius:32px 0 0 32px}.vjs-load-progress[style*='100%'],.vjs-load-progress[style*='99%']{border-radius:32px}.vjs-seek-handle{background-color:#16a085;position:absolute;width:18px;height:18px;margin:-3px 0 0 1px;left:0;top:0;border-radius:50%;-webkit-transition:background-color .25s;transition:background-color .25s}.vjs-seek-handle[style*='95.']{margin-left:3px}.vjs-seek-handle[style='left: 0%;']{margin-left:-2px}.vjs-seek-handle:focus,.vjs-seek-handle:hover{background-color:#148d75}.vjs-seek-handle:active{background-color:#117a65}.vjs-time-controls{position:absolute;height:20px;width:50px;top:16px;font:300 13px "Source Sans Pro",Helvetica,Arial,sans-serif}.vjs-current-time{right:128px;text-align:right}.vjs-duration{color:#5d6d7e;right:69px;text-align:left}.vjs-remaining-time{display:none}.vjs-time-divider{color:#5d6d7e;font-size:14px;position:absolute;right:121px;top:15px}.vjs-secondary-controls{float:right}.vjs-fullscreen-control{background-image:url(../images/video/fullscreen.png);background-position:center -47px;background-size:15px 64px;cursor:pointer!important;position:absolute;right:17px;top:13px}.vjs-fullscreen-control:focus div,.vjs-fullscreen-control:hover div{opacity:0}.vjs-fullscreen-control div{height:18px;background:url(../images/video/fullscreen.png) no-repeat center 2px;background-size:15px 64px;-webkit-transition:opacity .25s;transition:opacity .25s}.vjs-menu-button{display:none!important}@-webkit-keyframes sharp{0%{background:#e74c3c;border-radius:10px;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}50%{background:#ebedee;border-radius:0;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}100%{background:#e74c3c;border-radius:10px;-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes sharp{0%{background:#e74c3c;border-radius:10px;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}50%{background:#ebedee;border-radius:0;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}100%{background:#e74c3c;border-radius:10px;-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes sharp{0%{background:#e74c3c;border-radius:10px;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}50%{background:#ebedee;border-radius:0;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}100%{background:#e74c3c;border-radius:10px;-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes sharp{0%{background:#e74c3c;border-radius:10px;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}50%{background:#ebedee;border-radius:0;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}100%{background:#e74c3c;border-radius:10px;-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}.vjs-loading-spinner{background:#ebedee;display:none;height:16px;left:50%;margin:-8px 0 0 -8px;position:absolute;top:50%;width:16px;border-radius:10px;-webkit-animation:sharp 2s ease infinite;animation:sharp 2s ease infinite}.login{background:url(../images/login/imac.png) 0 0 no-repeat;background-size:940px 778px;color:#fff;margin-bottom:77px;padding:38px 38px 267px;position:relative}.login-screen{background-color:#1abc9c;min-height:473px;padding:123px 199px 33px 306px}.login-icon{left:200px;position:absolute;top:160px;width:96px}.login-icon>img{display:block;margin-bottom:6px;width:100%}.login-icon>h4{font-size:17px;font-weight:300;line-height:34px;opacity:.95}.login-icon>h4 small{color:inherit;display:block;font-size:inherit;font-weight:700}.login-form{background-color:#edeff1;padding:24px 23px 20px;position:relative;border-radius:6px}.login-form:before{content:'';border-style:solid;border-width:12px 12px 12px 0;border-color:transparent #edeff1 transparent transparent;height:0;position:absolute;left:-12px;top:35px;width:0;-webkit-transform:rotate(360deg)}.login-form .control-group{margin-bottom:6px;position:relative}.login-form .login-field{border-color:transparent;font-size:17px;text-indent:3px}.login-form .login-field:focus{border-color:#1abc9c}.login-form .login-field:focus+.login-field-icon{color:#1abc9c}.login-form .login-field-icon{color:#bfc9ca;font-size:16px;position:absolute;right:15px;top:3px;-webkit-transition:.25s;transition:.25s}.login-link{color:#bfc9ca;display:block;font-size:13px;margin-top:15px;text-align:center}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-moz-min-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-moz-min-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:2){.login{background-image:url(../images/login/imac-2x.png)}}footer{background-color:#edeff1;color:#bac1c8;font-size:15px;padding:0}footer a{color:#9aa4af;font-weight:700}footer p{font-size:15px;line-height:20px;margin-bottom:10px}.footer-title{margin:0 0 22px;padding-top:21px;font-size:24px;line-height:40px}.footer-brand{display:block;margin-bottom:26px;width:220px}.footer-brand img{width:216px}.footer-banner{background-color:#1abc9c;color:#d1f2eb;margin-left:42px;min-height:316px;padding:0 30px 30px}.footer-banner .footer-title{color:#fff}.footer-banner a{color:#b7f5e9;text-decoration:underline}.footer-banner a:hover{text-decoration:none}.footer-banner ul{list-style-type:none;margin:0 0 26px;padding:0}.footer-banner ul li{border-top:1px solid #1bc5a3;line-height:19px;padding:6px 0}.footer-banner ul li:first-child{border-top:none;padding-top:1px}.last-col{overflow:hidden}.pan,.ptn,.pvn{padding-top:0}.pax,.ptx,.pvx{padding-top:3px}.pas,.pts,.pvs{padding-top:5px}.pam,.ptm,.pvm{padding-top:10px}.pal,.ptl,.pvl{padding-top:20px}.pan,.phn,.prn{padding-right:0}.pax,.phx,.prx{padding-right:3px}.pas,.phs,.prs{padding-right:5px}.pam,.phm,.prm{padding-right:10px}.pal,.phl,.prl{padding-right:20px}.pan,.pbn,.pvn{padding-bottom:0}.pax,.pbx,.pvx{padding-bottom:3px}.pas,.pbs,.pvs{padding-bottom:5px}.pam,.pbm,.pvm{padding-bottom:10px}.pal,.pbl,.pvl{padding-bottom:20px}.pan,.phn,.pln{padding-left:0}.pax,.phx,.plx{padding-left:3px}.pas,.phs,.pls{padding-left:5px}.pam,.phm,.plm{padding-left:10px}.pal,.phl,.pll{padding-left:20px}.man,.mtn,.mvn{margin-top:0}.max,.mtx,.mvx{margin-top:3px}.mas,.mts,.mvs{margin-top:5px}.mam,.mtm,.mvm{margin-top:10px}.mal,.mtl,.mvl{margin-top:20px}.man,.mhn,.mrn{margin-right:0}.max,.mhx,.mrx{margin-right:3px}.mas,.mhs,.mrs{margin-right:5px}.mam,.mhm,.mrm{margin-right:10px}.mal,.mhl,.mrl{margin-right:20px}.man,.mbn,.mvn{margin-bottom:0}.max,.mbx,.mvx{margin-bottom:3px}.mas,.mbs,.mvs{margin-bottom:5px}.mam,.mbm,.mvm{margin-bottom:10px}.mal,.mbl,.mvl{margin-bottom:20px}.man,.mhn,.mln{margin-left:0}.max,.mhx,.mlx{margin-left:3px}.mas,.mhs,.mls{margin-left:5px}.mam,.mhm,.mlm{margin-left:10px}.mal,.mhl,.mll{margin-left:20px} table.dataTable{clear:both;margin-top:6px!important;margin-bottom:6px!important;max-width:none!important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap td,table.dataTable.nowrap th{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:400;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:400;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:8px;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>td.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc{padding-right:30px}table.dataTable thead>tr>td:active,table.dataTable thead>tr>th:active{outline:0}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:8px;right:8px;display:block;font-family:'Glyphicons Halflings';opacity:.5}table.dataTable thead .sorting:after{opacity:.2;content:"\e150"}table.dataTable thead .sorting_asc:after{content:"\e155"}table.dataTable thead .sorting_desc:after{content:"\e156"}table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{color:#eee}div.dataTables_scrollHead table.dataTable{margin-bottom:0!important}div.dataTables_scrollBody table{border-top:none;margin-top:0!important;margin-bottom:0!important}div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child td,div.dataTables_scrollBody table tbody tr:first-child th{border-top:none}div.dataTables_scrollFoot table{margin-top:0!important;border-top:none}@media screen and (max-width:767px){div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-condensed>thead>tr>th{padding-right:20px}table.dataTable.table-condensed .sorting:after,table.dataTable.table-condensed .sorting_asc:after,table.dataTable.table-condensed .sorting_desc:after{top:6px;right:6px}table.table-bordered.dataTable{border-collapse:separate!important}table.table-bordered.dataTable td,table.table-bordered.dataTable th{border-left-width:0}table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable th:last-child{border-right-width:0}table.table-bordered.dataTable tbody td,table.table-bordered.dataTable tbody th{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^=col-]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^=col-]:last-child{padding-right:0} @@ -18,6 +18,6 @@ table.dataTable{clear:both;margin-top:6px!important;margin-bottom:6px!important; * https://github.com/Eonasdan/bootstrap-datetimepicker/ */.bootstrap-datetimepicker-widget{list-style:none}.bootstrap-datetimepicker-widget.dropdown-menu{margin:2px 0;padding:4px;width:19em}@media (min-width:768px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:992px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:1200px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.bootstrap-datetimepicker-widget.dropdown-menu:after,.bootstrap-datetimepicker-widget.dropdown-menu:before{content:'';display:inline-block;position:absolute}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);top:-7px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;top:-6px;left:8px}.bootstrap-datetimepicker-widget.dropdown-menu.top:before{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.dropdown-menu.top:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget .list-unstyled{margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:700;font-size:1.2em;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Increment Hours"}.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Increment Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Decrement Hours"}.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Decrement Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=showHours]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Show Hours"}.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Show Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Toggle AM/PM"}.bootstrap-datetimepicker-widget .btn[data-action=clear]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Clear the picker"}.bootstrap-datetimepicker-widget .btn[data-action=today]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Set the date to today"}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget .picker-switch::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Toggle Date and Time Screens"}.bootstrap-datetimepicker-widget .picker-switch td{padding:0;margin:0;height:auto;width:auto;line-height:inherit}.bootstrap-datetimepicker-widget .picker-switch td span{line-height:2.5;height:2.5em;width:100%}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget table td,.bootstrap-datetimepicker-widget table th{text-align:center;border-radius:4px}.bootstrap-datetimepicker-widget table th{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.bootstrap-datetimepicker-widget table th.disabled,.bootstrap-datetimepicker-widget table th.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget table th.prev::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Previous Month"}.bootstrap-datetimepicker-widget table th.next::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Next Month"}.bootstrap-datetimepicker-widget table thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#eee}.bootstrap-datetimepicker-widget table td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget table td.cw{font-size:.8em;height:20px;line-height:20px;color:#777}.bootstrap-datetimepicker-widget table td.day{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table td.day:hover,.bootstrap-datetimepicker-widget table td.hour:hover,.bootstrap-datetimepicker-widget table td.minute:hover,.bootstrap-datetimepicker-widget table td.second:hover{background:#eee;cursor:pointer}.bootstrap-datetimepicker-widget table td.new,.bootstrap-datetimepicker-widget table td.old{color:#777}.bootstrap-datetimepicker-widget table td.today{position:relative}.bootstrap-datetimepicker-widget table td.today:before{content:'';display:inline-block;border:solid transparent;border-width:0 0 7px 7px;border-bottom-color:#337ab7;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget table td.disabled,.bootstrap-datetimepicker-widget table td.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget table td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:4px}.bootstrap-datetimepicker-widget table td span:hover{background:#eee}.bootstrap-datetimepicker-widget table td span.active{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td span.old{color:#777}.bootstrap-datetimepicker-widget table td span.disabled,.bootstrap-datetimepicker-widget table td span.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.bootstrap-datetimepicker-widget.wider{width:21em}.bootstrap-datetimepicker-widget .datepicker-decades .decade{line-height:1.8em!important}.input-group.date .input-group-addon{cursor:pointer}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0} .checkbox{padding-left:24px}.checkbox label{display:inline-block;vertical-align:middle;position:relative;padding-left:5px}.checkbox label::before{content:"";display:inline-block;position:absolute;width:24px;height:24px;left:0;margin-top:5px;margin-left:-24px;border:1px solid #ccc;border-radius:3px;background-color:#fff;-webkit-transition:border .15s ease-in-out,color .15s ease-in-out;-o-transition:border .15s ease-in-out,color .15s ease-in-out;transition:border .15s ease-in-out,color .15s ease-in-out}.checkbox label::after{display:inline-block;position:absolute;width:16px;height:16px;left:0;top:0;margin-left:-20px;padding-left:3px;padding-top:5px;font-size:11px;color:#555}.checkbox input[type=checkbox],.checkbox input[type=radio]{opacity:0;z-index:1}.checkbox input[type=checkbox]:focus+label::before,.checkbox input[type=radio]:focus+label::before{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.checkbox input[type=checkbox]:checked+label::after,.checkbox input[type=radio]:checked+label::after{font-family:FontAwesome;content:"\f00c"}.checkbox input[type=checkbox]:disabled+label,.checkbox input[type=radio]:disabled+label{opacity:.65}.checkbox input[type=checkbox]:disabled+label::before,.checkbox input[type=radio]:disabled+label::before{background-color:#eee;cursor:not-allowed}.checkbox.checkbox-circle label::before{border-radius:50%}.checkbox.checkbox-inline{margin-top:0}.checkbox-primary input[type=checkbox]:checked+label::before,.checkbox-primary input[type=radio]:checked+label::before{background-color:#337ab7;border-color:#337ab7}.checkbox-primary input[type=checkbox]:checked+label::after,.checkbox-primary input[type=radio]:checked+label::after{color:#fff}.checkbox-danger input[type=checkbox]:checked+label::before,.checkbox-danger input[type=radio]:checked+label::before{background-color:#d9534f;border-color:#d9534f}.checkbox-danger input[type=checkbox]:checked+label::after,.checkbox-danger input[type=radio]:checked+label::after{color:#fff}.checkbox-info input[type=checkbox]:checked+label::before,.checkbox-info input[type=radio]:checked+label::before{background-color:#5bc0de;border-color:#5bc0de}.checkbox-info input[type=checkbox]:checked+label::after,.checkbox-info input[type=radio]:checked+label::after{color:#fff}.checkbox-warning input[type=checkbox]:checked+label::before,.checkbox-warning input[type=radio]:checked+label::before{background-color:#f0ad4e;border-color:#f0ad4e}.checkbox-warning input[type=checkbox]:checked+label::after,.checkbox-warning input[type=radio]:checked+label::after{color:#fff}.checkbox-success input[type=checkbox]:checked+label::before,.checkbox-success input[type=radio]:checked+label::before{background-color:#5cb85c;border-color:#5cb85c}.checkbox-success input[type=checkbox]:checked+label::after,.checkbox-success input[type=radio]:checked+label::after{color:#fff}.radio{padding-left:20px}.radio label{display:inline-block;vertical-align:middle;position:relative;padding-left:5px}.radio label::before{content:"";display:inline-block;position:absolute;width:17px;height:17px;left:0;margin-left:-20px;border:1px solid #ccc;border-radius:50%;background-color:#fff;-webkit-transition:border .15s ease-in-out;-o-transition:border .15s ease-in-out;transition:border .15s ease-in-out}.radio label::after{display:inline-block;position:absolute;content:" ";width:11px;height:11px;left:3px;top:3px;margin-left:-20px;border-radius:50%;background-color:#555;-webkit-transform:scale(0,0);-ms-transform:scale(0,0);-o-transform:scale(0,0);transform:scale(0,0);-webkit-transition:-webkit-transform .1s cubic-bezier(.8,-.33,.2,1.33);-moz-transition:-moz-transform .1s cubic-bezier(.8,-.33,.2,1.33);-o-transition:-o-transform .1s cubic-bezier(.8,-.33,.2,1.33);transition:transform .1s cubic-bezier(.8,-.33,.2,1.33)}.radio input[type=radio]{opacity:0;z-index:1}.radio input[type=radio]:focus+label::before{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.radio input[type=radio]:checked+label::after{-webkit-transform:scale(1,1);-ms-transform:scale(1,1);-o-transform:scale(1,1);transform:scale(1,1)}.radio input[type=radio]:disabled+label{opacity:.65}.radio input[type=radio]:disabled+label::before{cursor:not-allowed}.radio.radio-inline{margin-top:0}.radio-primary input[type=radio]+label::after{background-color:#337ab7}.radio-primary input[type=radio]:checked+label::before{border-color:#337ab7}.radio-primary input[type=radio]:checked+label::after{background-color:#337ab7}.radio-danger input[type=radio]+label::after{background-color:#d9534f}.radio-danger input[type=radio]:checked+label::before{border-color:#d9534f}.radio-danger input[type=radio]:checked+label::after{background-color:#d9534f}.radio-info input[type=radio]+label::after{background-color:#5bc0de}.radio-info input[type=radio]:checked+label::before{border-color:#5bc0de}.radio-info input[type=radio]:checked+label::after{background-color:#5bc0de}.radio-warning input[type=radio]+label::after{background-color:#f0ad4e}.radio-warning input[type=radio]:checked+label::before{border-color:#f0ad4e}.radio-warning input[type=radio]:checked+label::after{background-color:#f0ad4e}.radio-success input[type=radio]+label::after{background-color:#5cb85c}.radio-success input[type=radio]:checked+label::before{border-color:#5cb85c}.radio-success input[type=radio]:checked+label::after{background-color:#5cb85c}input[type=checkbox].styled:checked+label:after,input[type=radio].styled:checked+label:after{font-family:FontAwesome;content:"\f00c"}input[type=checkbox] .styled:checked+label::before,input[type=radio] .styled:checked+label::before{color:#fff}input[type=checkbox] .styled:checked+label::after,input[type=radio] .styled:checked+label::after{color:#fff} -.swal2-modal,.swal2-overlay{position:fixed;display:none}.swal2-overlay{background-color:rgba(0,0,0,.4);left:0;right:0;top:0;bottom:0;z-index:1500}.swal2-modal{background-color:#fff;font-family:"Source Sans Pro",Helvetica,Arial,sans-serif,Helvetica,Arial,sans-serif;border-radius:5px;box-sizing:border-box;text-align:center;left:50%;top:50%;margin-top:-200px;max-height:90%;overflow-x:hidden;overflow-y:auto;z-index:2000}.swal2-modal:focus{outline:0}.swal2-modal.loading{overflow-y:hidden}.swal2-modal h2{color:#575757;font-size:30px;text-align:center;font-weight:600;text-transform:none;position:relative;margin:0;padding:0;line-height:60px;display:block}.swal2-modal hr{height:10px;color:transparent;border:0}.swal2-modal button.styled{color:#fff;border:0;box-shadow:none;font-size:17px;font-weight:500;border-radius:5px;padding:10px 32px;margin:0 5px;cursor:pointer}.swal2-content,.swal2-icon{padding:0;position:relative}.swal2-modal button.styled:focus{outline:0}.swal2-modal button.styled:not(.loading)[disabled]{opacity:.4;cursor:no-drop}.swal2-modal button.styled.loading{box-sizing:border-box;border:4px solid transparent;width:40px;height:40px;padding:0;margin:-2px 30px;vertical-align:top;background-color:transparent!important;color:transparent;cursor:default;border-radius:100%;-webkit-animation:rotate-loading 1.5s linear 0s infinite normal;animation:rotate-loading 1.5s linear 0s infinite normal}.swal2-modal button.styled::-moz-focus-inner{border:0}.swal2-modal button:not(.styled).loading:after{display:inline-block;content:"";margin-left:5px;vertical-align:-1px;height:6px;width:6px;border:3px solid #999;border-right-color:transparent;border-radius:50%;-webkit-animation:rotate-loading 1.5s linear 0s infinite normal;animation:rotate-loading 1.5s linear 0s infinite normal}.swal2-checkbox input,.swal2-checkbox span,.swal2-radio input,.swal2-radio span{vertical-align:middle}.swal2-modal .swal2-image{margin:20px auto;max-width:100%}.swal2-modal .swal2-close{font-size:36px;line-height:36px;font-family:serif;position:absolute;top:5px;right:13px;cursor:pointer;color:#cfcfcf;-webkit-transition:all .1s ease;transition:all .1s ease}.swal2-modal .swal2-close:hover{color:#d55}.swal2-modal>.swal2-checkbox,.swal2-modal>.swal2-input,.swal2-modal>.swal2-radio,.swal2-modal>.swal2-select,.swal2-modal>.swal2-textarea{display:none}.swal2-content{font-size:18px;text-align:center;font-weight:400;float:none;margin:0;line-height:normal;color:#555}.swal2-icon.swal2-info,.swal2-icon.swal2-question,.swal2-icon.swal2-warning{font-size:60px;line-height:80px;text-align:center}.swal2-icon{width:80px;height:80px;border:4px solid grey;border-radius:50%;margin:20px auto 30px;box-sizing:content-box;cursor:default;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon.swal2-error{border-color:#f27474}.swal2-icon.swal2-error .x-mark{position:relative;display:block}.swal2-icon.swal2-error .line{position:absolute;height:5px;width:47px;background-color:#f27474;display:block;top:37px;border-radius:2px}.swal2-icon.swal2-error .line.left{-webkit-transform:rotate(45deg);transform:rotate(45deg);left:17px}.swal2-icon.swal2-error .line.right{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);right:16px}.swal2-icon.swal2-warning{font-family:"Source Sans Pro",Helvetica,Arial,sans-serif,Helvetica,Arial,sans-serif;color:#f8bb86;border-color:#f8bb86}.swal2-icon.swal2-info{font-family:"Open Sans",sans-serif;color:#3fc3ee;border-color:#3fc3ee}.swal2-icon.swal2-question{font-family:"Source Sans Pro",Helvetica,Arial,sans-serif,Helvetica,Arial,sans-serif;color:#c9dae1;border-color:#c9dae1}.swal2-icon.swal2-success{border-color:#a5dc86}.swal2-icon.swal2-success::after,.swal2-icon.swal2-success::before{content:'';position:absolute;width:60px;height:120px;background:#fff}.swal2-icon.swal2-success::before{border-radius:120px 0 0 120px;top:-7px;left:-33px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:60px 60px;transform-origin:60px 60px}.swal2-icon.swal2-success::after{border-radius:0 120px 120px 0;top:-11px;left:30px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:0 60px;transform-origin:0 60px}.swal2-icon.swal2-success .placeholder{width:80px;height:80px;border:4px solid rgba(165,220,134,.2);border-radius:50%;box-sizing:content-box;position:absolute;left:-4px;top:-4px;z-index:2}.swal2-icon.swal2-success .fix{width:7px;height:90px;background-color:#fff;position:absolute;left:28px;top:8px;z-index:1;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-icon.swal2-success .line{height:5px;background-color:#a5dc86;display:block;border-radius:2px;position:absolute;z-index:2}.swal2-icon.swal2-success .line.tip{width:25px;left:14px;top:46px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swal2-icon.swal2-success .line.long{width:47px;right:8px;top:38px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-checkbox,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:20px auto}.swal2-input:not([type=file]),.swal2-textarea{width:100%;box-sizing:border-box;border-radius:3px;border:1px solid #d7d7d7;font-size:18px;box-shadow:inset 0 1px 1px rgba(0,0,0,.06);-webkit-transition:all .3s;transition:all .3s}.swal2-input:not([type=file]).error,.swal2-textarea.error{border-color:#f06e57!important}.swal2-input:not([type=file]):focus,.swal2-textarea:focus{outline:0;box-shadow:0 0 3px #c4e6f5;border:1px solid #b4dbed}.swal2-input:not([type=file]):focus::-moz-placeholder,.swal2-textarea:focus::-moz-placeholder{-webkit-transition:opacity .3s 30ms ease;transition:opacity .3s 30ms ease;opacity:.8}.swal2-input:not([type=file]):focus:-ms-input-placeholder,.swal2-textarea:focus:-ms-input-placeholder{-webkit-transition:opacity .3s 30ms ease;transition:opacity .3s 30ms ease;opacity:.8}.swal2-input:not([type=file]):focus::-webkit-input-placeholder,.swal2-textarea:focus::-webkit-input-placeholder{-webkit-transition:opacity .3s 30ms ease;transition:opacity .3s 30ms ease;opacity:.8}.swal2-input:not([type=file])::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#bdbdbd}.swal2-input:not([type=file]):-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#bdbdbd}.swal2-input:not([type=file])::-webkit-input-placeholder,.swal2-textarea::-webkit-input-placeholder{color:#bdbdbd}.swal2-input:not([type=file]){height:43px;padding:0 12px}.swal2-input[type=file]{font-size:20px}.swal2-textarea{height:108px;padding:12px}.swal2-select{color:#555;font-size:inherit;padding:5px 10px;min-width:40%;max-width:100%}.swal2-radio{border:0}.swal2-radio label:not(:first-child){margin-left:20px}.swal2-radio input{margin:0 3px 0 0}.swal2-checkbox{color:#555}.swal2-validationerror{background-color:#f1f1f1;margin:0 -20px;overflow:hidden;padding:10px;color:#797979;font-size:16px;font-weight:400;display:none}.swal2-validationerror::before{content:"!";display:inline-block;width:24px;height:24px;border-radius:50%;background-color:#ea7d7d;color:#fff;line-height:24px;text-align:center;margin-right:10px}@-webkit-keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}@keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}.show-swal2{-webkit-animation:showSweetAlert .3s;animation:showSweetAlert .3s}.show-swal2.no-animation{-webkit-animation:none;animation:none}.hide-swal2{-webkit-animation:hideSweetAlert .15s;animation:hideSweetAlert .15s}.hide-swal2.no-animation{-webkit-animation:none;animation:none}@-webkit-keyframes animate-success-tip{0%,54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@keyframes animate-success-tip{0%,54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@-webkit-keyframes animate-success-long{0%,65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@keyframes animate-success-long{0%,65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@-webkit-keyframes rotatePlaceholder{0%,5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}100%,12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}@keyframes rotatePlaceholder{0%,5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}100%,12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}.animate-success-tip{-webkit-animation:animate-success-tip .75s;animation:animate-success-tip .75s}.animate-success-long{-webkit-animation:animate-success-long .75s;animation:animate-success-long .75s}.swal2-icon.swal2-success.animate::after{-webkit-animation:rotatePlaceholder 4.25s ease-in;animation:rotatePlaceholder 4.25s ease-in}@-webkit-keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}@keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}.animate-error-icon{-webkit-animation:animate-error-icon .5s;animation:animate-error-icon .5s}@-webkit-keyframes animate-x-mark{0%,50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}@keyframes animate-x-mark{0%,50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}.animate-x-mark{-webkit-animation:animate-x-mark .5s;animation:animate-x-mark .5s}@-webkit-keyframes pulse-warning{0%{border-color:#f8d486}100%{border-color:#f8bb86}}@keyframes pulse-warning{0%{border-color:#f8d486}100%{border-color:#f8bb86}}.pulse-warning{-webkit-animation:pulse-warning .75s infinite alternate;animation:pulse-warning .75s infinite alternate}@-webkit-keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}} +@charset "UTF-8";@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.875em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.875em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}body.swal2-toast-shown .swal2-container{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-shown{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}body.swal2-toast-column .swal2-toast{flex-direction:column;align-items:stretch}body.swal2-toast-column .swal2-toast .swal2-actions{flex:1;align-self:stretch;height:2.2em;margin-top:.3125em}body.swal2-toast-column .swal2-toast .swal2-loading{justify-content:center}body.swal2-toast-column .swal2-toast .swal2-input{height:2em;margin:.3125em auto;font-size:1em}body.swal2-toast-column .swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast{flex-direction:row;align-items:center;width:auto;padding:.625em;overflow-y:hidden;box-shadow:0 0 .625em #d9d9d9}.swal2-popup.swal2-toast .swal2-header{flex-direction:row}.swal2-popup.swal2-toast .swal2-title{flex-grow:1;justify-content:flex-start;margin:0 .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{position:static;width:.8em;height:.8em;line-height:.8}.swal2-popup.swal2-toast .swal2-content{justify-content:flex-start;font-size:1em}.swal2-popup.swal2-toast .swal2-icon{width:2em;min-width:2em;height:2em;margin:0}.swal2-popup.swal2-toast .swal2-icon::before{display:flex;align-items:center;font-size:2em;font-weight:700}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-popup.swal2-toast .swal2-icon::before{font-size:.25em}}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{flex-basis:auto!important;width:auto;height:auto;margin:0 .3125em}.swal2-popup.swal2-toast .swal2-styled{margin:0 .3125em;padding:.3125em .625em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 .0625em #fff,0 0 0 .125em rgba(50,100,150,.4)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-popup.swal2-toast .swal2-animate-success-icon .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-animate-success-icon .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-shown{top:auto;right:auto;bottom:auto;left:auto;max-width:calc(100% - .625em * 2);background-color:transparent}body.swal2-no-backdrop .swal2-shown>.swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}body.swal2-no-backdrop .swal2-shown.swal2-top{top:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-top-left,body.swal2-no-backdrop .swal2-shown.swal2-top-start{top:0;left:0}body.swal2-no-backdrop .swal2-shown.swal2-top-end,body.swal2-no-backdrop .swal2-shown.swal2-top-right{top:0;right:0}body.swal2-no-backdrop .swal2-shown.swal2-center{top:50%;left:50%;transform:translate(-50%,-50%)}body.swal2-no-backdrop .swal2-shown.swal2-center-left,body.swal2-no-backdrop .swal2-shown.swal2-center-start{top:50%;left:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-center-end,body.swal2-no-backdrop .swal2-shown.swal2-center-right{top:50%;right:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-bottom{bottom:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-bottom-left,body.swal2-no-backdrop .swal2-shown.swal2-bottom-start{bottom:0;left:0}body.swal2-no-backdrop .swal2-shown.swal2-bottom-end,body.swal2-no-backdrop .swal2-shown.swal2-bottom-right{right:0;bottom:0}.swal2-container{display:flex;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;flex-direction:row;align-items:center;justify-content:center;padding:.625em;overflow-x:hidden;background-color:transparent;-webkit-overflow-scrolling:touch}.swal2-container.swal2-top{align-items:flex-start}.swal2-container.swal2-top-left,.swal2-container.swal2-top-start{align-items:flex-start;justify-content:flex-start}.swal2-container.swal2-top-end,.swal2-container.swal2-top-right{align-items:flex-start;justify-content:flex-end}.swal2-container.swal2-center{align-items:center}.swal2-container.swal2-center-left,.swal2-container.swal2-center-start{align-items:center;justify-content:flex-start}.swal2-container.swal2-center-end,.swal2-container.swal2-center-right{align-items:center;justify-content:flex-end}.swal2-container.swal2-bottom{align-items:flex-end}.swal2-container.swal2-bottom-left,.swal2-container.swal2-bottom-start{align-items:flex-end;justify-content:flex-start}.swal2-container.swal2-bottom-end,.swal2-container.swal2-bottom-right{align-items:flex-end;justify-content:flex-end}.swal2-container.swal2-bottom-end>:first-child,.swal2-container.swal2-bottom-left>:first-child,.swal2-container.swal2-bottom-right>:first-child,.swal2-container.swal2-bottom-start>:first-child,.swal2-container.swal2-bottom>:first-child{margin-top:auto}.swal2-container.swal2-grow-fullscreen>.swal2-modal{display:flex!important;flex:1;align-self:stretch;justify-content:center}.swal2-container.swal2-grow-row>.swal2-modal{display:flex!important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-grow-column{flex:1;flex-direction:column}.swal2-container.swal2-grow-column.swal2-bottom,.swal2-container.swal2-grow-column.swal2-center,.swal2-container.swal2-grow-column.swal2-top{align-items:center}.swal2-container.swal2-grow-column.swal2-bottom-left,.swal2-container.swal2-grow-column.swal2-bottom-start,.swal2-container.swal2-grow-column.swal2-center-left,.swal2-container.swal2-grow-column.swal2-center-start,.swal2-container.swal2-grow-column.swal2-top-left,.swal2-container.swal2-grow-column.swal2-top-start{align-items:flex-start}.swal2-container.swal2-grow-column.swal2-bottom-end,.swal2-container.swal2-grow-column.swal2-bottom-right,.swal2-container.swal2-grow-column.swal2-center-end,.swal2-container.swal2-grow-column.swal2-center-right,.swal2-container.swal2-grow-column.swal2-top-end,.swal2-container.swal2-grow-column.swal2-top-right{align-items:flex-end}.swal2-container.swal2-grow-column>.swal2-modal{display:flex!important;flex:1;align-content:center;justify-content:center}.swal2-container:not(.swal2-top):not(.swal2-top-start):not(.swal2-top-end):not(.swal2-top-left):not(.swal2-top-right):not(.swal2-center-start):not(.swal2-center-end):not(.swal2-center-left):not(.swal2-center-right):not(.swal2-bottom):not(.swal2-bottom-start):not(.swal2-bottom-end):not(.swal2-bottom-left):not(.swal2-bottom-right):not(.swal2-grow-fullscreen)>.swal2-modal{margin:auto}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-container .swal2-modal{margin:0!important}}.swal2-container.swal2-fade{transition:background-color .1s}.swal2-container.swal2-shown{background-color:rgba(0,0,0,.4)}.swal2-popup{display:none;position:relative;box-sizing:border-box;flex-direction:column;justify-content:center;width:32em;max-width:100%;padding:1.25em;border:none;border-radius:.3125em;background:#fff;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-header{display:flex;flex-direction:column;align-items:center}.swal2-title{position:relative;max-width:100%;margin:0 0 .4em;padding:0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;flex-wrap:wrap;align-items:center;justify-content:center;width:100%;margin:1.25em auto 0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-actions.swal2-loading .swal2-styled.swal2-confirm{box-sizing:border-box;width:2.5em;height:2.5em;margin:.46875em;padding:0;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border:.25em solid transparent;border-radius:100%;border-color:transparent;background-color:transparent!important;color:transparent;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-actions.swal2-loading .swal2-styled.swal2-cancel{margin-right:30px;margin-left:30px}.swal2-actions.swal2-loading :not(.swal2-styled).swal2-confirm::after{content:"";display:inline-block;width:15px;height:15px;margin-left:5px;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border:3px solid #999;border-radius:50%;border-right-color:transparent;box-shadow:1px 1px 1px #fff}.swal2-styled{margin:.3125em;padding:.625em 2em;box-shadow:none;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#3085d6;color:#fff;font-size:1.0625em}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#aaa;color:#fff;font-size:1.0625em}.swal2-styled:focus{outline:0;box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(50,100,150,.4)}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1.25em 0 0;padding:1em 0 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-image{max-width:100%;margin:1.25em auto}.swal2-close{position:absolute;z-index:2;top:0;right:0;justify-content:center;width:1.2em;height:1.2em;padding:0;overflow:hidden;transition:color .1s ease-out;border:none;border-radius:0;outline:initial;background:0 0;color:#ccc;font-family:serif;font-size:2.5em;line-height:1.2;cursor:pointer}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-content{z-index:1;justify-content:center;margin:0;padding:0;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em auto}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:100%;transition:border-color .3s,box-shadow .3s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06);color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:0 0 3px #c4e6f5}.swal2-file::-webkit-input-placeholder,.swal2-input::-webkit-input-placeholder,.swal2-textarea::-webkit-input-placeholder{color:#ccc}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::-ms-input-placeholder,.swal2-input::-ms-input-placeholder,.swal2-textarea::-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em auto;background:inherit}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-input[type=number]{max-width:10em}.swal2-file{background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:inherit;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{margin:0 .4em}.swal2-validation-message{display:none;align-items:center;justify-content:center;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:"!";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;zoom:normal;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}@supports (-ms-accelerator:true){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@-moz-document url-prefix(){.swal2-close:focus{outline:2px solid rgba(50,100,150,.4)}}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:1.25em auto 1.875em;zoom:normal;border:.25em solid transparent;border-radius:50%;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon::before{display:flex;align-items:center;height:92%;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-warning::before{content:"!"}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-info::before{content:"i"}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-question::before{content:"?"}.swal2-icon.swal2-question.swal2-arabic-question-mark::before{content:"؟"}.swal2-icon.swal2-success{border-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.875em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-progress-steps{align-items:center;margin:0 0 1.25em;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;width:2em;height:2em;border-radius:2em;background:#3085d6;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#3085d6}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;width:2.5em;height:.4em;margin:0 -1px;background:#3085d6}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-show.swal2-noanimation{-webkit-animation:none;animation:none}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-hide.swal2-noanimation{-webkit-animation:none;animation:none}.swal2-rtl .swal2-close{right:auto;left:0}.swal2-animate-success-icon .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-animate-success-icon .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-animate-success-icon .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-animate-error-icon{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-animate-error-icon .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}} .select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:#fff;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff}.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-search--inline,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__placeholder{float:right}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid #000 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--above .select2-selection--single{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:0 0;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:#fff}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top,#fff 50%,#eee 100%);background-image:-o-linear-gradient(top,#fff 50%,#eee 100%);background-image:linear-gradient(to bottom,#fff 50%,#eee 100%);background-repeat:repeat-x}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top,#eee 50%,#ccc 100%);background-image:-o-linear-gradient(top,#eee 50%,#ccc 100%);background-image:linear-gradient(to bottom,#eee 50%,#ccc 100%);background-repeat:repeat-x}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:0 0;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top,#fff 0,#eee 50%);background-image:-o-linear-gradient(top,#fff 0,#eee 50%);background-image:linear-gradient(to bottom,#fff 0,#eee 50%);background-repeat:repeat-x}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top,#eee 50%,#fff 100%);background-image:-o-linear-gradient(top,#eee 50%,#fff 100%);background-image:linear-gradient(to bottom,#eee 50%,#fff 100%);background-repeat:repeat-x}.select2-container--classic .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} /*! Select2 Bootstrap Theme v0.1.0-beta.9 | MIT License | github.com/select2/select2-bootstrap-theme */.select2-container--bootstrap{display:block}.select2-container--bootstrap .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);background-color:#fff;border:1px solid #ccc;border-radius:4px;color:#555;font-size:14px;outline:0}.select2-container--bootstrap .select2-selection.form-control{border-radius:4px}.select2-container--bootstrap .select2-search--dropdown .select2-search__field{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);background-color:#fff;border:1px solid #ccc;border-radius:4px;color:#555;font-size:14px}.select2-container--bootstrap .select2-search__field{outline:0}.select2-container--bootstrap .select2-search__field::-webkit-input-placeholder{color:#999}.select2-container--bootstrap .select2-search__field:-moz-placeholder{color:#999}.select2-container--bootstrap .select2-search__field::-moz-placeholder{color:#999;opacity:1}.select2-container--bootstrap .select2-search__field:-ms-input-placeholder{color:#999}.select2-container--bootstrap .select2-results__option{padding:6px 12px}.select2-container--bootstrap .select2-results__option[role=group]{padding:0}.select2-container--bootstrap .select2-results__option[aria-disabled=true]{color:#777;cursor:not-allowed}.select2-container--bootstrap .select2-results__option[aria-selected=true]{background-color:#f5f5f5;color:#262626}.select2-container--bootstrap .select2-results__option--highlighted[aria-selected]{background-color:#337ab7;color:#fff}.select2-container--bootstrap .select2-results__option .select2-results__option{padding:6px 12px}.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option{margin-left:-12px;padding-left:24px}.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-24px;padding-left:36px}.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-36px;padding-left:48px}.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-48px;padding-left:60px}.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-60px;padding-left:72px}.select2-container--bootstrap .select2-results__group{color:#777;display:block;padding:6px 12px;font-size:12px;line-height:1.42857143;white-space:nowrap}.select2-container--bootstrap.select2-container--focus .select2-selection,.select2-container--bootstrap.select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;border-color:#66afe9}.select2-container--bootstrap.select2-container--open .select2-selection .select2-selection__arrow b{border-color:transparent transparent #999;border-width:0 4px 4px}.select2-container--bootstrap.select2-container--open.select2-container--below .select2-selection{border-bottom-right-radius:0;border-bottom-left-radius:0;border-bottom-color:transparent}.select2-container--bootstrap.select2-container--open.select2-container--above .select2-selection{border-top-right-radius:0;border-top-left-radius:0;border-top-color:transparent}.select2-container--bootstrap .select2-selection__clear{color:#999;cursor:pointer;float:right;font-weight:700;margin-right:10px}.select2-container--bootstrap .select2-selection__clear:hover{color:#333}.select2-container--bootstrap.select2-container--disabled .select2-selection{border-color:#ccc;-webkit-box-shadow:none;box-shadow:none}.select2-container--bootstrap.select2-container--disabled .select2-search__field,.select2-container--bootstrap.select2-container--disabled .select2-selection{cursor:not-allowed}.select2-container--bootstrap.select2-container--disabled .select2-selection,.select2-container--bootstrap.select2-container--disabled .select2-selection--multiple .select2-selection__choice{background-color:#eee}.select2-container--bootstrap.select2-container--disabled .select2-selection--multiple .select2-selection__choice__remove,.select2-container--bootstrap.select2-container--disabled .select2-selection__clear{display:none}.select2-container--bootstrap .select2-dropdown{-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);border-color:#66afe9;overflow-x:hidden;margin-top:-1px}.select2-container--bootstrap .select2-dropdown--above{-webkit-box-shadow:0 -6px 12px rgba(0,0,0,.175);box-shadow:0 -6px 12px rgba(0,0,0,.175);margin-top:1px}.select2-container--bootstrap .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--bootstrap .select2-selection--single{height:34px;line-height:1.42857143;padding:6px 24px 6px 12px}.select2-container--bootstrap .select2-selection--single .select2-selection__arrow{position:absolute;bottom:0;right:12px;top:0;width:4px}.select2-container--bootstrap .select2-selection--single .select2-selection__arrow b{border-color:#999 transparent transparent;border-style:solid;border-width:4px 4px 0;height:0;left:0;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--bootstrap .select2-selection--single .select2-selection__rendered{color:#555;padding:0}.select2-container--bootstrap .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--bootstrap .select2-selection--multiple{min-height:34px;padding:0;height:auto}.select2-container--bootstrap .select2-selection--multiple .select2-selection__rendered{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;line-height:1.42857143;list-style:none;margin:0;overflow:hidden;padding:0;width:100%;text-overflow:ellipsis;white-space:nowrap}.select2-container--bootstrap .select2-selection--multiple .select2-selection__placeholder{color:#999;float:left;margin-top:5px}.select2-container--bootstrap .select2-selection--multiple .select2-selection__choice{color:#555;background:#fff;border:1px solid #ccc;border-radius:4px;cursor:default;float:left;margin:5px 0 0 6px;padding:0 6px}.select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field{background:0 0;padding:0 12px;height:32px;line-height:1.42857143;margin-top:0;min-width:5em}.select2-container--bootstrap .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:700;margin-right:3px}.select2-container--bootstrap .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--bootstrap .select2-selection--multiple .select2-selection__clear{margin-top:6px}.form-group-sm .select2-container--bootstrap .select2-selection--single,.input-group-sm .select2-container--bootstrap .select2-selection--single,.select2-container--bootstrap .select2-selection--single.input-sm{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 22px 5px 10px}.form-group-sm .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b,.input-group-sm .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b,.select2-container--bootstrap .select2-selection--single.input-sm .select2-selection__arrow b{margin-left:-5px}.form-group-sm .select2-container--bootstrap .select2-selection--multiple,.input-group-sm .select2-container--bootstrap .select2-selection--multiple,.select2-container--bootstrap .select2-selection--multiple.input-sm{min-height:30px;border-radius:3px}.form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice,.input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice,.select2-container--bootstrap .select2-selection--multiple.input-sm .select2-selection__choice{font-size:12px;line-height:1.5;margin:4px 0 0 5px;padding:0 5px}.form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field,.input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field,.select2-container--bootstrap .select2-selection--multiple.input-sm .select2-search--inline .select2-search__field{padding:0 10px;font-size:12px;height:28px;line-height:1.5}.form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear,.input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear,.select2-container--bootstrap .select2-selection--multiple.input-sm .select2-selection__clear{margin-top:5px}.form-group-lg .select2-container--bootstrap .select2-selection--single,.input-group-lg .select2-container--bootstrap .select2-selection--single,.select2-container--bootstrap .select2-selection--single.input-lg{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 31px 10px 16px}.form-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow,.input-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow,.select2-container--bootstrap .select2-selection--single.input-lg .select2-selection__arrow{width:5px}.form-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b,.input-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b,.select2-container--bootstrap .select2-selection--single.input-lg .select2-selection__arrow b{border-width:5px 5px 0;margin-left:-10px;margin-top:-2.5px}.form-group-lg .select2-container--bootstrap .select2-selection--multiple,.input-group-lg .select2-container--bootstrap .select2-selection--multiple,.select2-container--bootstrap .select2-selection--multiple.input-lg{min-height:46px;border-radius:6px}.form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice,.input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice,.select2-container--bootstrap .select2-selection--multiple.input-lg .select2-selection__choice{font-size:18px;line-height:1.3333333;border-radius:4px;margin:9px 0 0 8px;padding:0 10px}.form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field,.input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field,.select2-container--bootstrap .select2-selection--multiple.input-lg .select2-search--inline .select2-search__field{padding:0 16px;font-size:18px;height:44px;line-height:1.3333333}.form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear,.input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear,.select2-container--bootstrap .select2-selection--multiple.input-lg .select2-selection__clear{margin-top:10px}.input-group-lg .select2-container--bootstrap .select2-selection.select2-container--open .select2-selection--single .select2-selection__arrow b,.select2-container--bootstrap .select2-selection.input-lg.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #999;border-width:0 5px 5px}.select2-container--bootstrap[dir=rtl] .select2-selection--single{padding-left:24px;padding-right:12px}.select2-container--bootstrap[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:0;padding-left:0;text-align:right}.select2-container--bootstrap[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--bootstrap[dir=rtl] .select2-selection--single .select2-selection__arrow{left:12px;right:auto}.select2-container--bootstrap[dir=rtl] .select2-selection--single .select2-selection__arrow b{margin-left:0}.select2-container--bootstrap[dir=rtl] .select2-selection--multiple .select2-selection__choice,.select2-container--bootstrap[dir=rtl] .select2-selection--multiple .select2-selection__placeholder{float:right}.select2-container--bootstrap[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:0;margin-right:6px}.select2-container--bootstrap[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.has-warning .select2-dropdown,.has-warning .select2-selection{border-color:#8a6d3b}.has-warning .select2-container--focus .select2-selection,.has-warning .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;border-color:#66512c}.has-warning.select2-drop-active{border-color:#66512c}.has-warning.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#66512c}.has-error .select2-dropdown,.has-error .select2-selection{border-color:#a94442}.has-error .select2-container--focus .select2-selection,.has-error .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;border-color:#843534}.has-error.select2-drop-active{border-color:#843534}.has-error.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#843534}.has-success .select2-dropdown,.has-success .select2-selection{border-color:#3c763d}.has-success .select2-container--focus .select2-selection,.has-success .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;border-color:#2b542c}.has-success.select2-drop-active{border-color:#2b542c}.has-success.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#2b542c}.input-group .select2-container--bootstrap{display:table;table-layout:fixed;position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .select2-container--bootstrap.select2-container--focus,.input-group .select2-container--bootstrap.select2-container--open{z-index:3}.input-group.select2-bootstrap-prepend .select2-container--bootstrap .select2-selection{border-bottom-left-radius:0;border-top-left-radius:0}.input-group.select2-bootstrap-append .select2-container--bootstrap .select2-selection{border-bottom-right-radius:0;border-top-right-radius:0}.select2-bootstrap-append .input-group-btn,.select2-bootstrap-append .input-group-btn .btn,.select2-bootstrap-append .select2-container--bootstrap,.select2-bootstrap-prepend .input-group-btn,.select2-bootstrap-prepend .input-group-btn .btn,.select2-bootstrap-prepend .select2-container--bootstrap{vertical-align:top}.form-control.select2-hidden-accessible{position:absolute!important;width:1px!important}.form-inline .select2-container--bootstrap{display:inline-block} \ No newline at end of file diff --git a/static/css/main.css b/static/css/main.css index 2962bdda..61dc0808 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -1,3 +1,7 @@ +.swal2-popup { + font-size: 1.6rem !important; + } + .nav-tabs { cursor: pointer; } @@ -702,6 +706,10 @@ table.dataTable { background-color: #37485a; } +.nav-badge { + margin-top: 5px; +} + #resultsMapContainer { display: none; } diff --git a/static/css/sweetalert2.min.css b/static/css/sweetalert2.min.css index 9b6e2c1a..fdded9a3 100644 --- a/static/css/sweetalert2.min.css +++ b/static/css/sweetalert2.min.css @@ -1 +1 @@ -.swal2-modal,.swal2-overlay{position:fixed;display:none}.swal2-overlay{background-color:rgba(0,0,0,.4);left:0;right:0;top:0;bottom:0;z-index:1500}.swal2-modal{background-color:#fff;font-family:"Source Sans Pro", Helvetica, Arial, sans-serif,Helvetica,Arial,sans-serif;border-radius:5px;box-sizing:border-box;text-align:center;left:50%;top:50%;margin-top:-200px;max-height:90%;overflow-x:hidden;overflow-y:auto;z-index:2000}.swal2-modal:focus{outline:0}.swal2-modal.loading{overflow-y:hidden}.swal2-modal h2{color:#575757;font-size:30px;text-align:center;font-weight:600;text-transform:none;position:relative;margin:0;padding:0;line-height:60px;display:block}.swal2-modal hr{height:10px;color:transparent;border:0}.swal2-modal button.styled{color:#fff;border:0;box-shadow:none;font-size:17px;font-weight:500;border-radius:5px;padding:10px 32px;margin:0 5px;cursor:pointer}.swal2-content,.swal2-icon{padding:0;position:relative}.swal2-modal button.styled:focus{outline:0}.swal2-modal button.styled:not(.loading)[disabled]{opacity:.4;cursor:no-drop}.swal2-modal button.styled.loading{box-sizing:border-box;border:4px solid transparent;width:40px;height:40px;padding:0;margin:-2px 30px;vertical-align:top;background-color:transparent!important;color:transparent;cursor:default;border-radius:100%;-webkit-animation:rotate-loading 1.5s linear 0s infinite normal;animation:rotate-loading 1.5s linear 0s infinite normal}.swal2-modal button.styled::-moz-focus-inner{border:0}.swal2-modal button:not(.styled).loading:after{display:inline-block;content:"";margin-left:5px;vertical-align:-1px;height:6px;width:6px;border:3px solid #999;border-right-color:transparent;border-radius:50%;-webkit-animation:rotate-loading 1.5s linear 0s infinite normal;animation:rotate-loading 1.5s linear 0s infinite normal}.swal2-checkbox input,.swal2-checkbox span,.swal2-radio input,.swal2-radio span{vertical-align:middle}.swal2-modal .swal2-image{margin:20px auto;max-width:100%}.swal2-modal .swal2-close{font-size:36px;line-height:36px;font-family:serif;position:absolute;top:5px;right:13px;cursor:pointer;color:#cfcfcf;-webkit-transition:all .1s ease;transition:all .1s ease}.swal2-modal .swal2-close:hover{color:#d55}.swal2-modal>.swal2-checkbox,.swal2-modal>.swal2-input,.swal2-modal>.swal2-radio,.swal2-modal>.swal2-select,.swal2-modal>.swal2-textarea{display:none}.swal2-content{font-size:18px;text-align:center;font-weight:400;float:none;margin:0;line-height:normal;color:#555}.swal2-icon.swal2-info,.swal2-icon.swal2-question,.swal2-icon.swal2-warning{font-size:60px;line-height:80px;text-align:center}.swal2-icon{width:80px;height:80px;border:4px solid grey;border-radius:50%;margin:20px auto 30px;box-sizing:content-box;cursor:default;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon.swal2-error{border-color:#f27474}.swal2-icon.swal2-error .x-mark{position:relative;display:block}.swal2-icon.swal2-error .line{position:absolute;height:5px;width:47px;background-color:#f27474;display:block;top:37px;border-radius:2px}.swal2-icon.swal2-error .line.left{-webkit-transform:rotate(45deg);transform:rotate(45deg);left:17px}.swal2-icon.swal2-error .line.right{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);right:16px}.swal2-icon.swal2-warning{font-family:"Source Sans Pro", Helvetica, Arial, sans-serif,Helvetica,Arial,sans-serif;color:#f8bb86;border-color:#f8bb86}.swal2-icon.swal2-info{font-family:"Open Sans",sans-serif;color:#3fc3ee;border-color:#3fc3ee}.swal2-icon.swal2-question{font-family:"Source Sans Pro", Helvetica, Arial, sans-serif,Helvetica,Arial,sans-serif;color:#c9dae1;border-color:#c9dae1}.swal2-icon.swal2-success{border-color:#a5dc86}.swal2-icon.swal2-success::after,.swal2-icon.swal2-success::before{content:'';position:absolute;width:60px;height:120px;background:#fff}.swal2-icon.swal2-success::before{border-radius:120px 0 0 120px;top:-7px;left:-33px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:60px 60px;transform-origin:60px 60px}.swal2-icon.swal2-success::after{border-radius:0 120px 120px 0;top:-11px;left:30px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:0 60px;transform-origin:0 60px}.swal2-icon.swal2-success .placeholder{width:80px;height:80px;border:4px solid rgba(165,220,134,.2);border-radius:50%;box-sizing:content-box;position:absolute;left:-4px;top:-4px;z-index:2}.swal2-icon.swal2-success .fix{width:7px;height:90px;background-color:#fff;position:absolute;left:28px;top:8px;z-index:1;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-icon.swal2-success .line{height:5px;background-color:#a5dc86;display:block;border-radius:2px;position:absolute;z-index:2}.swal2-icon.swal2-success .line.tip{width:25px;left:14px;top:46px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swal2-icon.swal2-success .line.long{width:47px;right:8px;top:38px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-checkbox,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:20px auto}.swal2-input:not([type=file]),.swal2-textarea{width:100%;box-sizing:border-box;border-radius:3px;border:1px solid #d7d7d7;font-size:18px;box-shadow:inset 0 1px 1px rgba(0,0,0,.06);-webkit-transition:all .3s;transition:all .3s}.swal2-input:not([type=file]).error,.swal2-textarea.error{border-color:#f06e57!important}.swal2-input:not([type=file]):focus,.swal2-textarea:focus{outline:0;box-shadow:0 0 3px #c4e6f5;border:1px solid #b4dbed}.swal2-input:not([type=file]):focus::-moz-placeholder,.swal2-textarea:focus::-moz-placeholder{-webkit-transition:opacity .3s 30ms ease;transition:opacity .3s 30ms ease;opacity:.8}.swal2-input:not([type=file]):focus:-ms-input-placeholder,.swal2-textarea:focus:-ms-input-placeholder{-webkit-transition:opacity .3s 30ms ease;transition:opacity .3s 30ms ease;opacity:.8}.swal2-input:not([type=file]):focus::-webkit-input-placeholder,.swal2-textarea:focus::-webkit-input-placeholder{-webkit-transition:opacity .3s 30ms ease;transition:opacity .3s 30ms ease;opacity:.8}.swal2-input:not([type=file])::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#bdbdbd}.swal2-input:not([type=file]):-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#bdbdbd}.swal2-input:not([type=file])::-webkit-input-placeholder,.swal2-textarea::-webkit-input-placeholder{color:#bdbdbd}.swal2-input:not([type=file]){height:43px;padding:0 12px}.swal2-input[type=file]{font-size:20px}.swal2-textarea{height:108px;padding:12px}.swal2-select{color:#555;font-size:inherit;padding:5px 10px;min-width:40%;max-width:100%}.swal2-radio{border:0}.swal2-radio label:not(:first-child){margin-left:20px}.swal2-radio input{margin:0 3px 0 0}.swal2-checkbox{color:#555}.swal2-validationerror{background-color:#f1f1f1;margin:0 -20px;overflow:hidden;padding:10px;color:#797979;font-size:16px;font-weight:400;display:none}.swal2-validationerror::before{content:"!";display:inline-block;width:24px;height:24px;border-radius:50%;background-color:#ea7d7d;color:#fff;line-height:24px;text-align:center;margin-right:10px}@-webkit-keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}@keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}.show-swal2{-webkit-animation:showSweetAlert .3s;animation:showSweetAlert .3s}.show-swal2.no-animation{-webkit-animation:none;animation:none}.hide-swal2{-webkit-animation:hideSweetAlert .15s;animation:hideSweetAlert .15s}.hide-swal2.no-animation{-webkit-animation:none;animation:none}@-webkit-keyframes animate-success-tip{0%,54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@keyframes animate-success-tip{0%,54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@-webkit-keyframes animate-success-long{0%,65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@keyframes animate-success-long{0%,65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@-webkit-keyframes rotatePlaceholder{0%,5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}100%,12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}@keyframes rotatePlaceholder{0%,5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}100%,12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}.animate-success-tip{-webkit-animation:animate-success-tip .75s;animation:animate-success-tip .75s}.animate-success-long{-webkit-animation:animate-success-long .75s;animation:animate-success-long .75s}.swal2-icon.swal2-success.animate::after{-webkit-animation:rotatePlaceholder 4.25s ease-in;animation:rotatePlaceholder 4.25s ease-in}@-webkit-keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}@keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}.animate-error-icon{-webkit-animation:animate-error-icon .5s;animation:animate-error-icon .5s}@-webkit-keyframes animate-x-mark{0%,50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}@keyframes animate-x-mark{0%,50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}.animate-x-mark{-webkit-animation:animate-x-mark .5s;animation:animate-x-mark .5s}@-webkit-keyframes pulse-warning{0%{border-color:#f8d486}100%{border-color:#f8bb86}}@keyframes pulse-warning{0%{border-color:#f8d486}100%{border-color:#f8bb86}}.pulse-warning{-webkit-animation:pulse-warning .75s infinite alternate;animation:pulse-warning .75s infinite alternate}@-webkit-keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}} +@charset "UTF-8";@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.875em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.875em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}body.swal2-toast-shown .swal2-container{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-shown{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}body.swal2-toast-column .swal2-toast{flex-direction:column;align-items:stretch}body.swal2-toast-column .swal2-toast .swal2-actions{flex:1;align-self:stretch;height:2.2em;margin-top:.3125em}body.swal2-toast-column .swal2-toast .swal2-loading{justify-content:center}body.swal2-toast-column .swal2-toast .swal2-input{height:2em;margin:.3125em auto;font-size:1em}body.swal2-toast-column .swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast{flex-direction:row;align-items:center;width:auto;padding:.625em;overflow-y:hidden;box-shadow:0 0 .625em #d9d9d9}.swal2-popup.swal2-toast .swal2-header{flex-direction:row}.swal2-popup.swal2-toast .swal2-title{flex-grow:1;justify-content:flex-start;margin:0 .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{position:static;width:.8em;height:.8em;line-height:.8}.swal2-popup.swal2-toast .swal2-content{justify-content:flex-start;font-size:1em}.swal2-popup.swal2-toast .swal2-icon{width:2em;min-width:2em;height:2em;margin:0}.swal2-popup.swal2-toast .swal2-icon::before{display:flex;align-items:center;font-size:2em;font-weight:700}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-popup.swal2-toast .swal2-icon::before{font-size:.25em}}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{flex-basis:auto!important;width:auto;height:auto;margin:0 .3125em}.swal2-popup.swal2-toast .swal2-styled{margin:0 .3125em;padding:.3125em .625em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 .0625em #fff,0 0 0 .125em rgba(50,100,150,.4)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-popup.swal2-toast .swal2-animate-success-icon .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-animate-success-icon .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-shown{top:auto;right:auto;bottom:auto;left:auto;max-width:calc(100% - .625em * 2);background-color:transparent}body.swal2-no-backdrop .swal2-shown>.swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}body.swal2-no-backdrop .swal2-shown.swal2-top{top:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-top-left,body.swal2-no-backdrop .swal2-shown.swal2-top-start{top:0;left:0}body.swal2-no-backdrop .swal2-shown.swal2-top-end,body.swal2-no-backdrop .swal2-shown.swal2-top-right{top:0;right:0}body.swal2-no-backdrop .swal2-shown.swal2-center{top:50%;left:50%;transform:translate(-50%,-50%)}body.swal2-no-backdrop .swal2-shown.swal2-center-left,body.swal2-no-backdrop .swal2-shown.swal2-center-start{top:50%;left:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-center-end,body.swal2-no-backdrop .swal2-shown.swal2-center-right{top:50%;right:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-bottom{bottom:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-bottom-left,body.swal2-no-backdrop .swal2-shown.swal2-bottom-start{bottom:0;left:0}body.swal2-no-backdrop .swal2-shown.swal2-bottom-end,body.swal2-no-backdrop .swal2-shown.swal2-bottom-right{right:0;bottom:0}.swal2-container{display:flex;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;flex-direction:row;align-items:center;justify-content:center;padding:.625em;overflow-x:hidden;background-color:transparent;-webkit-overflow-scrolling:touch}.swal2-container.swal2-top{align-items:flex-start}.swal2-container.swal2-top-left,.swal2-container.swal2-top-start{align-items:flex-start;justify-content:flex-start}.swal2-container.swal2-top-end,.swal2-container.swal2-top-right{align-items:flex-start;justify-content:flex-end}.swal2-container.swal2-center{align-items:center}.swal2-container.swal2-center-left,.swal2-container.swal2-center-start{align-items:center;justify-content:flex-start}.swal2-container.swal2-center-end,.swal2-container.swal2-center-right{align-items:center;justify-content:flex-end}.swal2-container.swal2-bottom{align-items:flex-end}.swal2-container.swal2-bottom-left,.swal2-container.swal2-bottom-start{align-items:flex-end;justify-content:flex-start}.swal2-container.swal2-bottom-end,.swal2-container.swal2-bottom-right{align-items:flex-end;justify-content:flex-end}.swal2-container.swal2-bottom-end>:first-child,.swal2-container.swal2-bottom-left>:first-child,.swal2-container.swal2-bottom-right>:first-child,.swal2-container.swal2-bottom-start>:first-child,.swal2-container.swal2-bottom>:first-child{margin-top:auto}.swal2-container.swal2-grow-fullscreen>.swal2-modal{display:flex!important;flex:1;align-self:stretch;justify-content:center}.swal2-container.swal2-grow-row>.swal2-modal{display:flex!important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-grow-column{flex:1;flex-direction:column}.swal2-container.swal2-grow-column.swal2-bottom,.swal2-container.swal2-grow-column.swal2-center,.swal2-container.swal2-grow-column.swal2-top{align-items:center}.swal2-container.swal2-grow-column.swal2-bottom-left,.swal2-container.swal2-grow-column.swal2-bottom-start,.swal2-container.swal2-grow-column.swal2-center-left,.swal2-container.swal2-grow-column.swal2-center-start,.swal2-container.swal2-grow-column.swal2-top-left,.swal2-container.swal2-grow-column.swal2-top-start{align-items:flex-start}.swal2-container.swal2-grow-column.swal2-bottom-end,.swal2-container.swal2-grow-column.swal2-bottom-right,.swal2-container.swal2-grow-column.swal2-center-end,.swal2-container.swal2-grow-column.swal2-center-right,.swal2-container.swal2-grow-column.swal2-top-end,.swal2-container.swal2-grow-column.swal2-top-right{align-items:flex-end}.swal2-container.swal2-grow-column>.swal2-modal{display:flex!important;flex:1;align-content:center;justify-content:center}.swal2-container:not(.swal2-top):not(.swal2-top-start):not(.swal2-top-end):not(.swal2-top-left):not(.swal2-top-right):not(.swal2-center-start):not(.swal2-center-end):not(.swal2-center-left):not(.swal2-center-right):not(.swal2-bottom):not(.swal2-bottom-start):not(.swal2-bottom-end):not(.swal2-bottom-left):not(.swal2-bottom-right):not(.swal2-grow-fullscreen)>.swal2-modal{margin:auto}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-container .swal2-modal{margin:0!important}}.swal2-container.swal2-fade{transition:background-color .1s}.swal2-container.swal2-shown{background-color:rgba(0,0,0,.4)}.swal2-popup{display:none;position:relative;box-sizing:border-box;flex-direction:column;justify-content:center;width:32em;max-width:100%;padding:1.25em;border:none;border-radius:.3125em;background:#fff;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-header{display:flex;flex-direction:column;align-items:center}.swal2-title{position:relative;max-width:100%;margin:0 0 .4em;padding:0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;flex-wrap:wrap;align-items:center;justify-content:center;width:100%;margin:1.25em auto 0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-actions.swal2-loading .swal2-styled.swal2-confirm{box-sizing:border-box;width:2.5em;height:2.5em;margin:.46875em;padding:0;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border:.25em solid transparent;border-radius:100%;border-color:transparent;background-color:transparent!important;color:transparent;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-actions.swal2-loading .swal2-styled.swal2-cancel{margin-right:30px;margin-left:30px}.swal2-actions.swal2-loading :not(.swal2-styled).swal2-confirm::after{content:"";display:inline-block;width:15px;height:15px;margin-left:5px;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border:3px solid #999;border-radius:50%;border-right-color:transparent;box-shadow:1px 1px 1px #fff}.swal2-styled{margin:.3125em;padding:.625em 2em;box-shadow:none;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#3085d6;color:#fff;font-size:1.0625em}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#aaa;color:#fff;font-size:1.0625em}.swal2-styled:focus{outline:0;box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(50,100,150,.4)}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1.25em 0 0;padding:1em 0 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-image{max-width:100%;margin:1.25em auto}.swal2-close{position:absolute;z-index:2;top:0;right:0;justify-content:center;width:1.2em;height:1.2em;padding:0;overflow:hidden;transition:color .1s ease-out;border:none;border-radius:0;outline:initial;background:0 0;color:#ccc;font-family:serif;font-size:2.5em;line-height:1.2;cursor:pointer}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-content{z-index:1;justify-content:center;margin:0;padding:0;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em auto}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:100%;transition:border-color .3s,box-shadow .3s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06);color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:0 0 3px #c4e6f5}.swal2-file::-webkit-input-placeholder,.swal2-input::-webkit-input-placeholder,.swal2-textarea::-webkit-input-placeholder{color:#ccc}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::-ms-input-placeholder,.swal2-input::-ms-input-placeholder,.swal2-textarea::-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em auto;background:inherit}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-input[type=number]{max-width:10em}.swal2-file{background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:inherit;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{margin:0 .4em}.swal2-validation-message{display:none;align-items:center;justify-content:center;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:"!";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;zoom:normal;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}@supports (-ms-accelerator:true){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@-moz-document url-prefix(){.swal2-close:focus{outline:2px solid rgba(50,100,150,.4)}}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:1.25em auto 1.875em;zoom:normal;border:.25em solid transparent;border-radius:50%;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon::before{display:flex;align-items:center;height:92%;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-warning::before{content:"!"}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-info::before{content:"i"}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-question::before{content:"?"}.swal2-icon.swal2-question.swal2-arabic-question-mark::before{content:"؟"}.swal2-icon.swal2-success{border-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.875em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-progress-steps{align-items:center;margin:0 0 1.25em;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;width:2em;height:2em;border-radius:2em;background:#3085d6;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#3085d6}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;width:2.5em;height:.4em;margin:0 -1px;background:#3085d6}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-show.swal2-noanimation{-webkit-animation:none;animation:none}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-hide.swal2-noanimation{-webkit-animation:none;animation:none}.swal2-rtl .swal2-close{right:auto;left:0}.swal2-animate-success-icon .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-animate-success-icon .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-animate-success-icon .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-animate-error-icon{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-animate-error-icon .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}} \ No newline at end of file diff --git a/static/js/dist/app/autocomplete.min.js b/static/js/dist/app/autocomplete.min.js index 09a85ec5..0f6c41b4 100644 --- a/static/js/dist/app/autocomplete.min.js +++ b/static/js/dist/app/autocomplete.min.js @@ -1 +1 @@ -var TEMPLATE_TAGS=[{id:1,name:"RId",description:"The unique ID for the recipient."},{id:2,name:"FirstName",description:"The recipient's first name."},{id:3,name:"LastName",description:"The recipient's last name."},{id:4,name:"Position",description:"The recipient's position."},{id:5,name:"From",description:"The address emails are sent from."},{id:6,name:"TrackingURL",description:"The URL to track emails being opened."},{id:7,name:"Tracker",description:"An HTML tag that adds a hidden tracking image (recommended instead of TrackingURL)."},{id:8,name:"URL",description:"The URL to your Gophish listener."},{id:9,name:"BaseURL",description:"The base URL with the path and rid parameter stripped. Useful for making links to static files."}],textTestCallback=function(e){return e.collapsed?CKEDITOR.plugins.textMatch.match(e,matchCallback):null},matchCallback=function(e,t){var i=/\{{2}\.?([A-z]|\})*$/,a=e.slice(0,t).match(i);return a?{start:a.index,end:t}:null},dataCallback=function(e,t){t(TEMPLATE_TAGS.filter(function(t){return 0==("{{."+t.name.toLowerCase()+"}}").indexOf(e.query.toLowerCase())}))},setupAutocomplete=function(e){e.on("instanceReady",function(e){new CKEDITOR.plugins.autocomplete(e.editor,{textTestCallback:textTestCallback,dataCallback:dataCallback,itemTemplate:'
  • {name}
    {description}
  • ',outputTemplate:"[[.{name}]]"}).getHtmlToInsert=function(e){var t=this.outputTemplate.output(e);return t=t.replace("[[","{{").replace("]]","}}")}})}; \ No newline at end of file +var TEMPLATE_TAGS=[{id:1,name:"RId",description:"The unique ID for the recipient."},{id:2,name:"FirstName",description:"The recipient's first name."},{id:3,name:"LastName",description:"The recipient's last name."},{id:4,name:"Position",description:"The recipient's position."},{id:5,name:"From",description:"The address emails are sent from."},{id:6,name:"TrackingURL",description:"The URL to track emails being opened."},{id:7,name:"Tracker",description:"An HTML tag that adds a hidden tracking image (recommended instead of TrackingURL)."},{id:8,name:"URL",description:"The URL to your Gophish listener."},{id:9,name:"BaseURL",description:"The base URL with the path and rid parameter stripped. Useful for making links to static files."}],textTestCallback=function(e){return e.collapsed?CKEDITOR.plugins.textMatch.match(e,matchCallback):null},matchCallback=function(e,t){var i=e.slice(0,t).match(/\{{2}\.?([A-z]|\})*$/);return i?{start:i.index,end:t}:null},dataCallback=function(t,e){e(TEMPLATE_TAGS.filter(function(e){return 0==("{{."+e.name.toLowerCase()+"}}").indexOf(t.query.toLowerCase())}))},setupAutocomplete=function(e){e.on("instanceReady",function(e){new CKEDITOR.plugins.autocomplete(e.editor,{textTestCallback:textTestCallback,dataCallback:dataCallback,itemTemplate:'
  • {name}
    {description}
  • ',outputTemplate:"[[.{name}]]"}).getHtmlToInsert=function(e){var t=this.outputTemplate.output(e);return t=t.replace("[[","{{").replace("]]","}}")}})}; \ No newline at end of file diff --git a/static/js/dist/app/campaign_results.min.js b/static/js/dist/app/campaign_results.min.js index 8c461d9a..0ded2f01 100644 --- a/static/js/dist/app/campaign_results.min.js +++ b/static/js/dist/app/campaign_results.min.js @@ -1 +1 @@ -function dismiss(){$("#modal\\.flashes").empty(),$("#modal").modal("hide"),$("#resultsTable").dataTable().DataTable().clear().draw()}function deleteCampaign(){swal({title:"Are you sure?",text:"This will delete the campaign. This can't be undone!",type:"warning",animation:!1,showCancelButton:!0,confirmButtonText:"Delete Campaign",confirmButtonColor:"#428bca",reverseButtons:!0,allowOutsideClick:!1,showLoaderOnConfirm:!0,preConfirm:function(){return new Promise(function(e,t){api.campaignId.delete(campaign.id).success(function(t){e()}).error(function(e){t(e.responseJSON.message)})})}}).then(function(){swal("Campaign Deleted!","This campaign has been deleted!","success"),$('button:contains("OK")').on("click",function(){location.href="/campaigns"})})}function completeCampaign(){swal({title:"Are you sure?",text:"Gophish will stop processing events for this campaign",type:"warning",animation:!1,showCancelButton:!0,confirmButtonText:"Complete Campaign",confirmButtonColor:"#428bca",reverseButtons:!0,allowOutsideClick:!1,showLoaderOnConfirm:!0,preConfirm:function(){return new Promise(function(e,t){api.campaignId.complete(campaign.id).success(function(t){e()}).error(function(e){t(e.responseJSON.message)})})}}).then(function(){swal("Campaign Completed!","This campaign has been completed!","success"),$("#complete_button")[0].disabled=!0,$("#complete_button").text("Completed!"),doPoll=!1})}function exportAsCSV(e){exportHTML=$("#exportButton").html();var t=null,a=campaign.name+" - "+capitalize(e)+".csv";switch(e){case"results":t=campaign.results;break;case"events":t=campaign.timeline}if(t){$("#exportButton").html('');var s=Papa.unparse(t,{}),i=new Blob([s],{type:"text/csv;charset=utf-8;"});if(navigator.msSaveBlob)navigator.msSaveBlob(i,a);else{var l=window.URL.createObjectURL(i),n=document.createElement("a");n.href=l,n.setAttribute("download",a),document.body.appendChild(n),n.click(),document.body.removeChild(n)}$("#exportButton").html(exportHTML)}}function replay(e){function t(){form.attr({action:url}),form.appendTo("body").submit().remove()}request=campaign.timeline[e],details=JSON.parse(request.details),url=null,form=$("
    ").attr({method:"POST",target:"_blank"}),$.each(Object.keys(details.payload),function(e,t){return"rid"==t||("__original_url"==t?(url=details.payload[t],!0):void $("").attr({name:t}).val(details.payload[t]).appendTo(form))}),swal({title:"Where do you want the credentials submitted to?",input:"text",showCancelButton:!0,inputPlaceholder:"http://example.com/login",inputValue:url||"",inputValidator:function(e){return new Promise(function(t,a){e?t():a("Invalid URL.")})}}).then(function(e){url=e,t()})}function renderTimeline(e){return record={id:e[0],first_name:e[2],last_name:e[3],email:e[4],position:e[5],status:e[6],reported:e[7],send_date:e[8]},results='
    Timeline for '+escapeHtml(record.first_name)+" "+escapeHtml(record.last_name)+'
    Email: '+escapeHtml(record.email)+"
    Result ID: "+escapeHtml(record.id)+'
    ',$.each(campaign.timeline,function(e,t){t.email&&t.email!=record.email||(results+='
    ',results+='
    '+escapeHtml(t.message)+' '+moment.utc(t.time).local().format("MMMM Do YYYY h:mm:ss a")+"",t.details&&(details=JSON.parse(t.details),"Clicked Link"!=t.message&&"Submitted Data"!=t.message||(deviceView=renderDevice(details),deviceView&&(results+=deviceView)),"Submitted Data"==t.message&&(results+='
    ',results+='
    View Details
    '),details.payload&&(results+='
    ',results+=' ',results+=" ",$.each(Object.keys(details.payload),function(e,t){if("rid"==t)return!0;results+=" ",results+=" ",results+=" ",results+=" "}),results+="
    ParameterValue(s)
    "+escapeHtml(t)+""+escapeHtml(details.payload[t])+"
    ",results+="
    "),details.error&&(results+='
    View Details
    ',results+='
    ',results+='Error '+details.error,results+="
    ")),results+="
    ")}),"Scheduled"!=record.status&&"Retrying"!=record.status||(results+='
    ',results+='
    Scheduled to send at '+record.send_date+""),results+="
    ",results}function createStatusLabel(e,t){var a=statuses[e].label||"label-default",s=''+e+"";if("Scheduled"==e||"Retrying"==e){s=''+e+""}return s}function poll(){api.campaignId.results(campaign.id).success(function(e){campaign=e;var t=[];$.each(campaign.timeline,function(e,a){var s=moment.utc(a.time).local();t.push({email:a.email,x:s.valueOf(),y:1})});var t=[];$.each(campaign.timeline,function(e,a){var s=moment.utc(a.time).local();t.push({email:a.email,message:a.message,x:s.valueOf(),y:1,marker:{fillColor:statuses[a.message].color}})}),$("#timeline_chart").highcharts().series[0].update({data:t});var a={};Object.keys(statusMapping).forEach(function(e){a[e]=0}),$.each(campaign.results,function(e,t){a[t.status]++,t.reported&&a["Email Reported"]++;for(var s=progressListing.indexOf(t.status),e=0;e":"":e},targets:[7]}]}),resultsTable.clear();var a={},s=[];Object.keys(statusMapping).forEach(function(e){a[e]=0}),$.each(campaign.results,function(e,t){resultsTable.row.add([t.id,'',escapeHtml(t.first_name)||"",escapeHtml(t.last_name)||"",escapeHtml(t.email)||"",escapeHtml(t.position)||"",t.status,t.reported,moment(t.send_date).format("MMMM Do YYYY, h:mm:ss a")]),a[t.status]++,t.reported&&a["Email Reported"]++;for(var s=progressListing.indexOf(t.status),e=0;e',s="laptop";t.device.type&&("tablet"!=t.device.type&&"mobile"!=t.device.type||(s=t.device.type));var i="";t.device.vendor&&"microsoft"==(i=t.device.vendor.toLowerCase())&&(i="windows");var l="Unknown";t.os.name&&(l=t.os.name,"Mac OS"==l?i="apple":"Windows"==l&&(i="windows"),t.device.vendor&&t.device.model&&(l=t.device.vendor+" "+t.device.model)),t.os.version&&(l=l+" (OS Version: "+t.os.version+")"),deviceString='
    '+escapeHtml(l)+"
    ",a+=deviceString;var n="Unknown",r="info-circle",o="";return t.browser&&t.browser.name&&(n=t.browser.name,n=n.replace("Mobile ",""),n&&"ie"==(r=n.toLowerCase())&&(r="internet-explorer"),o="(Version: "+t.browser.version+")"),a+='
    '+n+" "+o+"
    ",a+="
    "},renderTimelineChart=function(e){return Highcharts.chart("timeline_chart",{chart:{zoomType:"x",type:"line",height:"200px"},title:{text:"Campaign Timeline"},xAxis:{type:"datetime",dateTimeLabelFormats:{second:"%l:%M:%S",minute:"%l:%M",hour:"%l:%M",day:"%b %d, %Y",week:"%b %d, %Y",month:"%b %Y"}},yAxis:{min:0,max:2,visible:!1,tickInterval:1,labels:{enabled:!1},title:{text:""}},tooltip:{formatter:function(){return Highcharts.dateFormat("%A, %b %d %l:%M:%S %P",new Date(this.x))+"
    Event: "+this.point.message+"
    Email: "+this.point.email+""}},legend:{enabled:!1},plotOptions:{series:{marker:{enabled:!0,symbol:"circle",radius:3},cursor:"pointer"},line:{states:{hover:{lineWidth:1}}}},credits:{enabled:!1},series:[{data:e.data,dashStyle:"shortdash",color:"#cccccc",lineWidth:1,turboThreshold:0}]})},renderPieChart=function(e){return Highcharts.chart(e.elemId,{chart:{type:"pie",events:{load:function(){var t=this,a=t.renderer,s=t.series[0],i=t.plotLeft+s.center[0],l=t.plotTop+s.center[1];this.innerText=a.text(e.data[0].count,i,l).attr({"text-anchor":"middle","font-size":"24px","font-weight":"bold",fill:e.colors[0],"font-family":"Helvetica,Arial,sans-serif"}).add()},render:function(){this.innerText.attr({text:e.data[0].count})}}},title:{text:e.title},plotOptions:{pie:{innerSize:"80%",dataLabels:{enabled:!1}}},credits:{enabled:!1},tooltip:{formatter:function(){return void 0!=this.key&&''+this.point.name+": "+this.y+"%
    "}},series:[{data:e.data,colors:e.colors}]})},updateMap=function(e){map&&(bubbles=[],$.each(campaign.results,function(e,t){if(0==t.latitude&&0==t.longitude)return!0;newIP=!0,$.each(bubbles,function(e,a){if(a.ip==t.ip)return bubbles[e].radius+=1,newIP=!1,!1}),newIP&&bubbles.push({latitude:t.latitude,longitude:t.longitude,name:t.ip,fillKey:"point",radius:2})}),map.bubbles(bubbles))},setRefresh;$(document).ready(function(){Highcharts.setOptions({global:{useUTC:!1}}),load(),setRefresh=setTimeout(refresh,6e4)}); \ No newline at end of file +var map=null,doPoll=!0,statuses={"Email Sent":{color:"#1abc9c",label:"label-success",icon:"fa-envelope",point:"ct-point-sent"},"Emails Sent":{color:"#1abc9c",label:"label-success",icon:"fa-envelope",point:"ct-point-sent"},"In progress":{label:"label-primary"},Queued:{label:"label-info"},Completed:{label:"label-success"},"Email Opened":{color:"#f9bf3b",label:"label-warning",icon:"fa-envelope-open",point:"ct-point-opened"},"Clicked Link":{color:"#F39C12",label:"label-clicked",icon:"fa-mouse-pointer",point:"ct-point-clicked"},Success:{color:"#f05b4f",label:"label-danger",icon:"fa-exclamation",point:"ct-point-clicked"},"Email Reported":{color:"#45d6ef",label:"label-info",icon:"fa-bullhorn",point:"ct-point-reported"},Error:{color:"#6c7a89",label:"label-default",icon:"fa-times",point:"ct-point-error"},"Error Sending Email":{color:"#6c7a89",label:"label-default",icon:"fa-times",point:"ct-point-error"},"Submitted Data":{color:"#f05b4f",label:"label-danger",icon:"fa-exclamation",point:"ct-point-clicked"},Unknown:{color:"#6c7a89",label:"label-default",icon:"fa-question",point:"ct-point-error"},Sending:{color:"#428bca",label:"label-primary",icon:"fa-spinner",point:"ct-point-sending"},Retrying:{color:"#6c7a89",label:"label-default",icon:"fa-clock-o",point:"ct-point-error"},Scheduled:{color:"#428bca",label:"label-primary",icon:"fa-clock-o",point:"ct-point-sending"},"Campaign Created":{label:"label-success",icon:"fa-rocket"}},statusMapping={"Email Sent":"sent","Email Opened":"opened","Clicked Link":"clicked","Submitted Data":"submitted_data","Email Reported":"reported"},progressListing=["Email Sent","Email Opened","Clicked Link","Submitted Data"],campaign={},bubbles=[];function dismiss(){$("#modal\\.flashes").empty(),$("#modal").modal("hide"),$("#resultsTable").dataTable().DataTable().clear().draw()}function deleteCampaign(){Swal.fire({title:"Are you sure?",text:"This will delete the campaign. This can't be undone!",type:"warning",animation:!1,showCancelButton:!0,confirmButtonText:"Delete Campaign",confirmButtonColor:"#428bca",reverseButtons:!0,allowOutsideClick:!1,showLoaderOnConfirm:!0,preConfirm:function(){return new Promise(function(t,a){api.campaignId.delete(campaign.id).success(function(e){t()}).error(function(e){a(e.responseJSON.message)})})}}).then(function(e){e.value&&Swal.fire("Campaign Deleted!","This campaign has been deleted!","success"),$('button:contains("OK")').on("click",function(){location.href="/campaigns"})})}function completeCampaign(){Swal.fire({title:"Are you sure?",text:"Gophish will stop processing events for this campaign",type:"warning",animation:!1,showCancelButton:!0,confirmButtonText:"Complete Campaign",confirmButtonColor:"#428bca",reverseButtons:!0,allowOutsideClick:!1,showLoaderOnConfirm:!0,preConfirm:function(){return new Promise(function(t,a){api.campaignId.complete(campaign.id).success(function(e){t()}).error(function(e){a(e.responseJSON.message)})})}}).then(function(e){e.value&&(Swal.fire("Campaign Completed!","This campaign has been completed!","success"),$("#complete_button")[0].disabled=!0,$("#complete_button").text("Completed!"),doPoll=!1)})}function exportAsCSV(e){exportHTML=$("#exportButton").html();var t=null,a=campaign.name+" - "+capitalize(e)+".csv";switch(e){case"results":t=campaign.results;break;case"events":t=campaign.timeline}if(t){$("#exportButton").html('');var s=Papa.unparse(t,{}),i=new Blob([s],{type:"text/csv;charset=utf-8;"});if(navigator.msSaveBlob)navigator.msSaveBlob(i,a);else{var l=window.URL.createObjectURL(i),n=document.createElement("a");n.href=l,n.setAttribute("download",a),document.body.appendChild(n),n.click(),document.body.removeChild(n)}$("#exportButton").html(exportHTML)}}function replay(e){return request=campaign.timeline[e],details=JSON.parse(request.details),url=null,form=$("").attr({method:"POST",target:"_blank"}),$.each(Object.keys(details.payload),function(e,t){return"rid"==t||("__original_url"==t?(url=details.payload[t],!0):void $("").attr({name:t}).val(details.payload[t]).appendTo(form))}),void Swal.fire({title:"Where do you want the credentials submitted to?",input:"text",showCancelButton:!0,inputPlaceholder:"http://example.com/login",inputValue:url||"",inputValidator:function(a){return new Promise(function(e,t){a?e():t("Invalid URL.")})}}).then(function(e){e.value&&(url=e.value,t())});function t(){form.attr({action:url}),form.appendTo("body").submit().remove()}}var renderDevice=function(e){var t=UAParser(details.browser["user-agent"]),a='
    ',s="laptop";t.device.type&&("tablet"!=t.device.type&&"mobile"!=t.device.type||(s=t.device.type));var i="";t.device.vendor&&"microsoft"==(i=t.device.vendor.toLowerCase())&&(i="windows");var l="Unknown";t.os.name&&("Mac OS"==(l=t.os.name)?i="apple":"Windows"==l&&(i="windows"),t.device.vendor&&t.device.model&&(l=t.device.vendor+" "+t.device.model)),t.os.version&&(l=l+" (OS Version: "+t.os.version+")"),deviceString='
    '+escapeHtml(l)+"
    ",a+=deviceString;var n="Unknown",r="info-circle",o="";return t.browser&&t.browser.name&&((n=(n=t.browser.name).replace("Mobile ",""))&&"ie"==(r=n.toLowerCase())&&(r="internet-explorer"),o="(Version: "+t.browser.version+")"),a+='
    '+n+" "+o+"
    ",a+="
    "};function renderTimeline(e){return record={id:e[0],first_name:e[2],last_name:e[3],email:e[4],position:e[5],status:e[6],reported:e[7],send_date:e[8]},results='
    Timeline for '+escapeHtml(record.first_name)+" "+escapeHtml(record.last_name)+'
    Email: '+escapeHtml(record.email)+"
    Result ID: "+escapeHtml(record.id)+'
    ',$.each(campaign.timeline,function(e,t){t.email&&t.email!=record.email||(results+='
    ',results+='
    '+escapeHtml(t.message)+' '+moment.utc(t.time).local().format("MMMM Do YYYY h:mm:ss a")+"",t.details&&(details=JSON.parse(t.details),"Clicked Link"!=t.message&&"Submitted Data"!=t.message||(deviceView=renderDevice(details),deviceView&&(results+=deviceView)),"Submitted Data"==t.message&&(results+='
    ',results+='
    View Details
    '),details.payload&&(results+='
    ',results+=' ',results+=" ",$.each(Object.keys(details.payload),function(e,t){if("rid"==t)return!0;results+=" ",results+=" ",results+=" ",results+=" "}),results+="
    ParameterValue(s)
    "+escapeHtml(t)+""+escapeHtml(details.payload[t])+"
    ",results+="
    "),details.error&&(results+='
    View Details
    ',results+='
    ',results+='Error '+details.error,results+="
    ")),results+="
    ")}),"Scheduled"!=record.status&&"Retrying"!=record.status||(results+='
    ',results+='
    Scheduled to send at '+record.send_date+""),results+="
    ",results}var setRefresh,renderTimelineChart=function(e){return Highcharts.chart("timeline_chart",{chart:{zoomType:"x",type:"line",height:"200px"},title:{text:"Campaign Timeline"},xAxis:{type:"datetime",dateTimeLabelFormats:{second:"%l:%M:%S",minute:"%l:%M",hour:"%l:%M",day:"%b %d, %Y",week:"%b %d, %Y",month:"%b %Y"}},yAxis:{min:0,max:2,visible:!1,tickInterval:1,labels:{enabled:!1},title:{text:""}},tooltip:{formatter:function(){return Highcharts.dateFormat("%A, %b %d %l:%M:%S %P",new Date(this.x))+"
    Event: "+this.point.message+"
    Email: "+this.point.email+""}},legend:{enabled:!1},plotOptions:{series:{marker:{enabled:!0,symbol:"circle",radius:3},cursor:"pointer"},line:{states:{hover:{lineWidth:1}}}},credits:{enabled:!1},series:[{data:e.data,dashStyle:"shortdash",color:"#cccccc",lineWidth:1,turboThreshold:0}]})},renderPieChart=function(l){return Highcharts.chart(l.elemId,{chart:{type:"pie",events:{load:function(){var e=this,t=e.renderer,a=e.series[0],s=e.plotLeft+a.center[0],i=e.plotTop+a.center[1];this.innerText=t.text(l.data[0].count,s,i).attr({"text-anchor":"middle","font-size":"24px","font-weight":"bold",fill:l.colors[0],"font-family":"Helvetica,Arial,sans-serif"}).add()},render:function(){this.innerText.attr({text:l.data[0].count})}}},title:{text:l.title},plotOptions:{pie:{innerSize:"80%",dataLabels:{enabled:!1}}},credits:{enabled:!1},tooltip:{formatter:function(){return null!=this.key&&''+this.point.name+": "+this.y+"%
    "}},series:[{data:l.data,colors:l.colors}]})},updateMap=function(e){map&&(bubbles=[],$.each(campaign.results,function(e,a){if(0==a.latitude&&0==a.longitude)return!0;newIP=!0,$.each(bubbles,function(e,t){if(t.ip==a.ip)return bubbles[e].radius+=1,newIP=!1}),newIP&&bubbles.push({latitude:a.latitude,longitude:a.longitude,name:a.ip,fillKey:"point",radius:2})}),map.bubbles(bubbles))};function createStatusLabel(e,t){var a=statuses[e].label||"label-default",s=''+e+"";"Scheduled"!=e&&"Retrying"!=e||(s=''+e+"");return s}function poll(){api.campaignId.results(campaign.id).success(function(e){campaign=e;var s=[];$.each(campaign.timeline,function(e,t){var a=moment.utc(t.time).local();s.push({email:t.email,x:a.valueOf(),y:1})});s=[];$.each(campaign.timeline,function(e,t){var a=moment.utc(t.time).local();s.push({email:t.email,message:t.message,x:a.valueOf(),y:1,marker:{fillColor:statuses[t.message].color}})}),$("#timeline_chart").highcharts().series[0].update({data:s});var i={};Object.keys(statusMapping).forEach(function(e){i[e]=0}),$.each(campaign.results,function(e,t){i[t.status]++,t.reported&&i["Email Reported"]++;var a=progressListing.indexOf(t.status);for(e=0;e":"":e},targets:[7]}]}),resultsTable.clear();var s={},i=[];Object.keys(statusMapping).forEach(function(e){s[e]=0}),$.each(campaign.results,function(e,t){resultsTable.row.add([t.id,'',escapeHtml(t.first_name)||"",escapeHtml(t.last_name)||"",escapeHtml(t.email)||"",escapeHtml(t.position)||"",t.status,t.reported,moment(t.send_date).format("MMMM Do YYYY, h:mm:ss a")]),s[t.status]++,t.reported&&s["Email Reported"]++;var a=progressListing.indexOf(t.status);for(e=0;e '+e.responseJSON.message+"
    "),swal.close()})})}}).then(function(){swal("Campaign Scheduled!","This campaign has been scheduled for launch!","success"),$('button:contains("OK")').on("click",function(){window.location="/campaigns/"+campaign.id.toString()})})}function sendTestEmail(){var e={template:{name:$("#template").select2("data")[0].text},first_name:$("input[name=to_first_name]").val(),last_name:$("input[name=to_last_name]").val(),email:$("input[name=to_email]").val(),position:$("input[name=to_position]").val(),url:$("#url").val(),page:{name:$("#page").select2("data")[0].text},smtp:{name:$("#profile").select2("data")[0].text}};btnHtml=$("#sendTestModalSubmit").html(),$("#sendTestModalSubmit").html(' Sending'),api.send_test_email(e).success(function(e){$("#sendTestEmailModal\\.flashes").empty().append('
    Email Sent!
    '),$("#sendTestModalSubmit").html(btnHtml)}).error(function(e){$("#sendTestEmailModal\\.flashes").empty().append('
    '+e.responseJSON.message+"
    "),$("#sendTestModalSubmit").html(btnHtml)})}function dismiss(){$("#modal\\.flashes").empty(),$("#name").val(""),$("#template").val("").change(),$("#page").val("").change(),$("#url").val(""),$("#profile").val("").change(),$("#users").val("").change(),$("#modal").modal("hide")}function deleteCampaign(e){swal({title:"Are you sure?",text:"This will delete the campaign. This can't be undone!",type:"warning",animation:!1,showCancelButton:!0,confirmButtonText:"Delete "+campaigns[e].name,confirmButtonColor:"#428bca",reverseButtons:!0,allowOutsideClick:!1,preConfirm:function(){return new Promise(function(a,t){api.campaignId.delete(campaigns[e].id).success(function(e){a()}).error(function(e){t(e.responseJSON.message)})})}}).then(function(){swal("Campaign Deleted!","This campaign has been deleted!","success"),$('button:contains("OK")').on("click",function(){location.reload()})})}function setupOptions(){api.groups.get().success(function(e){if(0==e.length)return modalError("No groups found!"),!1;var a=$.map(e,function(e){return e.text=e.name,e});$("#users.form-control").select2({placeholder:"Select Groups",data:a})}),api.templates.get().success(function(e){if(0==e.length)return modalError("No templates found!"),!1;var a=$.map(e,function(e){return e.text=e.name,e}),t=$("#template.form-control");t.select2({placeholder:"Select a Template",data:a}),1===e.length&&(t.val(a[0].id),t.trigger("change.select2"))}),api.pages.get().success(function(e){if(0==e.length)return modalError("No pages found!"),!1;var a=$.map(e,function(e){return e.text=e.name,e}),t=$("#page.form-control");t.select2({placeholder:"Select a Landing Page",data:a}),1===e.length&&(t.val(a[0].id),t.trigger("change.select2"))}),api.SMTP.get().success(function(e){if(0==e.length)return modalError("No profiles found!"),!1;var a=$.map(e,function(e){return e.text=e.name,e}),t=$("#profile.form-control");t.select2({placeholder:"Select a Sending Profile",data:a}).select2("val",a[0]),1===e.length&&(t.val(a[0].id),t.trigger("change.select2"))})}function edit(e){setupOptions()}function copy(e){setupOptions(),api.campaignId.get(campaigns[e].id).success(function(e){$("#name").val("Copy of "+e.name),e.template.id?($("#template").val(e.template.id.toString()),$("#template").trigger("change.select2")):$("#template").select2({placeholder:e.template.name}),e.page.id?($("#page").val(e.page.id.toString()),$("#page").trigger("change.select2")):$("#page").select2({placeholder:e.page.name}),e.smtp.id?($("#profile").val(e.smtp.id.toString()),$("#profile").trigger("change.select2")):$("#profile").select2({placeholder:e.smtp.name}),$("#url").val(e.url)}).error(function(e){$("#modal\\.flashes").empty().append('
    '+e.responseJSON.message+"
    ")})}var labels={"In progress":"label-primary",Queued:"label-info",Completed:"label-success","Emails Sent":"label-success",Error:"label-danger"},campaigns=[],campaign={};$(document).ready(function(){$("#launch_date").datetimepicker({widgetPositioning:{vertical:"bottom"},showTodayButton:!0,defaultDate:moment(),format:"MMMM Do YYYY, h:mm a"}),$("#send_by_date").datetimepicker({widgetPositioning:{vertical:"bottom"},showTodayButton:!0,useCurrent:!1,format:"MMMM Do YYYY, h:mm a"}),$(".modal").on("hidden.bs.modal",function(e){$(this).removeClass("fv-modal-stack"),$("body").data("fv_open_modals",$("body").data("fv_open_modals")-1)}),$(".modal").on("shown.bs.modal",function(e){void 0===$("body").data("fv_open_modals")&&$("body").data("fv_open_modals",0),$(this).hasClass("fv-modal-stack")||($(this).addClass("fv-modal-stack"),$("body").data("fv_open_modals",$("body").data("fv_open_modals")+1),$(this).css("z-index",1040+10*$("body").data("fv_open_modals")),$(".modal-backdrop").not(".fv-modal-stack").css("z-index",1039+10*$("body").data("fv_open_modals")),$(".modal-backdrop").not("fv-modal-stack").addClass("fv-modal-stack"))}),$(document).on("hidden.bs.modal",".modal",function(){$(".modal:visible").length&&$(document.body).addClass("modal-open")}),$("#modal").on("hidden.bs.modal",function(e){dismiss()}),api.campaigns.summary().success(function(e){campaigns=e.campaigns,$("#loading").hide(),campaigns.length>0?($("#campaignTable").show(),$("#campaignTableArchive").show(),campaignTableOriginal=$("#campaignTable").DataTable({columnDefs:[{orderable:!1,targets:"no-sort"}],order:[[1,"desc"]]}),campaignTableArchive=$("#campaignTableArchive").DataTable({columnDefs:[{orderable:!1,targets:"no-sort"}],order:[[1,"desc"]]}),$.each(campaigns,function(e,a){campaignTable=campaignTableOriginal,"Completed"===a.status&&(campaignTable=campaignTableArchive),label=labels[a.status]||"label-default";var t;if(moment(a.launch_date).isAfter(moment())){t="Scheduled to start: "+moment(a.launch_date).format("MMMM Do YYYY, h:mm:ss a");var n=t+"

    Number of recipients: "+a.stats.total}else{t="Launch Date: "+moment(a.launch_date).format("MMMM Do YYYY, h:mm:ss a");var n=t+"

    Number of recipients: "+a.stats.total+"

    Emails opened: "+a.stats.opened+"

    Emails clicked: "+a.stats.clicked+"

    Submitted Credentials: "+a.stats.submitted_data+"

    Errors : "+a.stats.error+"Reported : "+a.stats.reported}campaignTable.row.add([escapeHtml(a.name),moment(a.created_date).format("MMMM Do YYYY, h:mm:ss a"),''+a.status+"",""]).draw(),$('[data-toggle="tooltip"]').tooltip()})):$("#emptyMessage").show()}).error(function(){$("#loading").hide(),errorFlash("Error fetching campaigns")}),$.fn.select2.defaults.set("width","100%"),$.fn.select2.defaults.set("dropdownParent",$("#modal_body")),$.fn.select2.defaults.set("theme","bootstrap"),$.fn.select2.defaults.set("sorter",function(e){return e.sort(function(e,a){return e.text.toLowerCase()>a.text.toLowerCase()?1:e.text.toLowerCase() '+e.responseJSON.message+"
    "),Swal.close()})})}}).then(function(e){e.value&&Swal.fire("Campaign Scheduled!","This campaign has been scheduled for launch!","success"),$('button:contains("OK")').on("click",function(){window.location="/campaigns/"+campaign.id.toString()})})}function sendTestEmail(){var e={template:{name:$("#template").select2("data")[0].text},first_name:$("input[name=to_first_name]").val(),last_name:$("input[name=to_last_name]").val(),email:$("input[name=to_email]").val(),position:$("input[name=to_position]").val(),url:$("#url").val(),page:{name:$("#page").select2("data")[0].text},smtp:{name:$("#profile").select2("data")[0].text}};btnHtml=$("#sendTestModalSubmit").html(),$("#sendTestModalSubmit").html(' Sending'),api.send_test_email(e).success(function(e){$("#sendTestEmailModal\\.flashes").empty().append('
    Email Sent!
    '),$("#sendTestModalSubmit").html(btnHtml)}).error(function(e){$("#sendTestEmailModal\\.flashes").empty().append('
    '+e.responseJSON.message+"
    "),$("#sendTestModalSubmit").html(btnHtml)})}function dismiss(){$("#modal\\.flashes").empty(),$("#name").val(""),$("#template").val("").change(),$("#page").val("").change(),$("#url").val(""),$("#profile").val("").change(),$("#users").val("").change(),$("#modal").modal("hide")}function deleteCampaign(e){Swal.fire({title:"Are you sure?",text:"This will delete the campaign. This can't be undone!",type:"warning",animation:!1,showCancelButton:!0,confirmButtonText:"Delete "+campaigns[e].name,confirmButtonColor:"#428bca",reverseButtons:!0,allowOutsideClick:!1,preConfirm:function(){return new Promise(function(a,t){api.campaignId.delete(campaigns[e].id).success(function(e){a()}).error(function(e){t(e.responseJSON.message)})})}}).then(function(e){e.value&&Swal.fire("Campaign Deleted!","This campaign has been deleted!","success"),$('button:contains("OK")').on("click",function(){location.reload()})})}function setupOptions(){api.groups.get().success(function(e){if(0==e.length)return modalError("No groups found!"),!1;var a=$.map(e,function(e){return e.text=e.name,e.title=e.targets.length+" targets",e});console.log(a),$("#users.form-control").select2({placeholder:"Select Groups",data:a})}),api.templates.get().success(function(e){if(0==e.length)return modalError("No templates found!"),!1;var a=$.map(e,function(e){return e.text=e.name,e}),t=$("#template.form-control");t.select2({placeholder:"Select a Template",data:a}),1===e.length&&(t.val(a[0].id),t.trigger("change.select2"))}),api.pages.get().success(function(e){if(0==e.length)return modalError("No pages found!"),!1;var a=$.map(e,function(e){return e.text=e.name,e}),t=$("#page.form-control");t.select2({placeholder:"Select a Landing Page",data:a}),1===e.length&&(t.val(a[0].id),t.trigger("change.select2"))}),api.SMTP.get().success(function(e){if(0==e.length)return modalError("No profiles found!"),!1;var a=$.map(e,function(e){return e.text=e.name,e}),t=$("#profile.form-control");t.select2({placeholder:"Select a Sending Profile",data:a}).select2("val",a[0]),1===e.length&&(t.val(a[0].id),t.trigger("change.select2"))})}function edit(e){setupOptions()}function copy(e){setupOptions(),api.campaignId.get(campaigns[e].id).success(function(e){$("#name").val("Copy of "+e.name),e.template.id?($("#template").val(e.template.id.toString()),$("#template").trigger("change.select2")):$("#template").select2({placeholder:e.template.name}),e.page.id?($("#page").val(e.page.id.toString()),$("#page").trigger("change.select2")):$("#page").select2({placeholder:e.page.name}),e.smtp.id?($("#profile").val(e.smtp.id.toString()),$("#profile").trigger("change.select2")):$("#profile").select2({placeholder:e.smtp.name}),$("#url").val(e.url)}).error(function(e){$("#modal\\.flashes").empty().append('
    '+e.responseJSON.message+"
    ")})}$(document).ready(function(){$("#launch_date").datetimepicker({widgetPositioning:{vertical:"bottom"},showTodayButton:!0,defaultDate:moment(),format:"MMMM Do YYYY, h:mm a"}),$("#send_by_date").datetimepicker({widgetPositioning:{vertical:"bottom"},showTodayButton:!0,useCurrent:!1,format:"MMMM Do YYYY, h:mm a"}),$(".modal").on("hidden.bs.modal",function(e){$(this).removeClass("fv-modal-stack"),$("body").data("fv_open_modals",$("body").data("fv_open_modals")-1)}),$(".modal").on("shown.bs.modal",function(e){void 0===$("body").data("fv_open_modals")&&$("body").data("fv_open_modals",0),$(this).hasClass("fv-modal-stack")||($(this).addClass("fv-modal-stack"),$("body").data("fv_open_modals",$("body").data("fv_open_modals")+1),$(this).css("z-index",1040+10*$("body").data("fv_open_modals")),$(".modal-backdrop").not(".fv-modal-stack").css("z-index",1039+10*$("body").data("fv_open_modals")),$(".modal-backdrop").not("fv-modal-stack").addClass("fv-modal-stack"))}),$(document).on("hidden.bs.modal",".modal",function(){$(".modal:visible").length&&$(document.body).addClass("modal-open")}),$("#modal").on("hidden.bs.modal",function(e){dismiss()}),api.campaigns.summary().success(function(e){campaigns=e.campaigns,$("#loading").hide(),0
    Number of recipients: "+a.stats.total;else t="Launch Date: "+moment(a.launch_date).format("MMMM Do YYYY, h:mm:ss a")+"

    Number of recipients: "+a.stats.total+"

    Emails opened: "+a.stats.opened+"

    Emails clicked: "+a.stats.clicked+"

    Submitted Credentials: "+a.stats.submitted_data+"

    Errors : "+a.stats.error+"Reported : "+a.stats.reported;campaignTable.row.add([escapeHtml(a.name),moment(a.created_date).format("MMMM Do YYYY, h:mm:ss a"),''+a.status+"",""]).draw(),$('[data-toggle="tooltip"]').tooltip()})):$("#emptyMessage").show()}).error(function(){$("#loading").hide(),errorFlash("Error fetching campaigns")}),$.fn.select2.defaults.set("width","100%"),$.fn.select2.defaults.set("dropdownParent",$("#modal_body")),$.fn.select2.defaults.set("theme","bootstrap"),$.fn.select2.defaults.set("sorter",function(e){return e.sort(function(e,a){return e.text.toLowerCase()>a.text.toLowerCase()?1:e.text.toLowerCase()●'+this.point.name+": "+this.y+"%
    "}},series:[{data:e.data,colors:e.colors}]})}function generateStatsPieCharts(e){var t=[],a={},l=0;$.each(e,function(e,t){$.each(t.stats,function(e,t){if("total"==e)return l+=t,!0;a[e]?a[e]+=t:a[e]=t})}),$.each(a,function(e,a){if(!(e in statsMapping))return!0;status_label=statsMapping[e],t.push({name:status_label,y:Math.floor(a/l*100),count:a}),t.push({name:"",y:100-Math.floor(a/l*100)});renderPieChart({elemId:e+"_chart",title:status_label,name:e,data:t,colors:[statuses[status_label].color,"#dddddd"]});t=[]})}function generateTimelineChart(e){var t=[];$.each(e,function(e,a){var l=moment.utc(a.created_date).local();a.y=0,a.y+=a.stats.clicked,a.y=Math.floor(a.y/a.stats.total*100),t.push({campaign_id:a.id,name:a.name,x:l.valueOf(),y:a.y})}),Highcharts.chart("overview_chart",{chart:{zoomType:"x",type:"areaspline"},title:{text:"Phishing Success Overview"},xAxis:{type:"datetime",dateTimeLabelFormats:{second:"%l:%M:%S",minute:"%l:%M",hour:"%l:%M",day:"%b %d, %Y",week:"%b %d, %Y",month:"%b %Y"}},yAxis:{min:0,max:100,title:{text:"% of Success"}},tooltip:{formatter:function(){return Highcharts.dateFormat("%A, %b %d %l:%M:%S %P",new Date(this.x))+"
    "+this.point.name+"
    % Success: "+this.y+"%"}},legend:{enabled:!1},plotOptions:{series:{marker:{enabled:!0,symbol:"circle",radius:3},cursor:"pointer",point:{events:{click:function(e){window.location.href="/campaigns/"+this.campaign_id}}}}},credits:{enabled:!1},series:[{data:t,color:"#f05b4f",fillOpacity:.5}]})}var campaigns=[],statuses={"Email Sent":{color:"#1abc9c",label:"label-success",icon:"fa-envelope",point:"ct-point-sent"},"Emails Sent":{color:"#1abc9c",label:"label-success",icon:"fa-envelope",point:"ct-point-sent"},"In progress":{label:"label-primary"},Queued:{label:"label-info"},Completed:{label:"label-success"},"Email Opened":{color:"#f9bf3b",label:"label-warning",icon:"fa-envelope",point:"ct-point-opened"},"Email Reported":{color:"#45d6ef",label:"label-warning",icon:"fa-bullhorne",point:"ct-point-reported"},"Clicked Link":{color:"#F39C12",label:"label-clicked",icon:"fa-mouse-pointer",point:"ct-point-clicked"},Success:{color:"#f05b4f",label:"label-danger",icon:"fa-exclamation",point:"ct-point-clicked"},Error:{color:"#6c7a89",label:"label-default",icon:"fa-times",point:"ct-point-error"},"Error Sending Email":{color:"#6c7a89",label:"label-default",icon:"fa-times",point:"ct-point-error"},"Submitted Data":{color:"#f05b4f",label:"label-danger",icon:"fa-exclamation",point:"ct-point-clicked"},Unknown:{color:"#6c7a89",label:"label-default",icon:"fa-question",point:"ct-point-error"},Sending:{color:"#428bca",label:"label-primary",icon:"fa-spinner",point:"ct-point-sending"},"Campaign Created":{label:"label-success",icon:"fa-rocket"}},statsMapping={sent:"Email Sent",opened:"Email Opened",email_reported:"Email Reported",clicked:"Clicked Link",submitted_data:"Submitted Data"};$(document).ready(function(){Highcharts.setOptions({global:{useUTC:!1}}),api.campaigns.summary().success(function(e){$("#loading").hide(),campaigns=e.campaigns,campaigns.length>0?($("#dashboard").show(),campaignTable=$("#campaignTable").DataTable({columnDefs:[{orderable:!1,targets:"no-sort"},{className:"color-sent",targets:[2]},{className:"color-opened",targets:[3]},{className:"color-clicked",targets:[4]},{className:"color-success",targets:[5]},{className:"color-reported",targets:[6]}],order:[[1,"desc"]]}),$.each(campaigns,function(e,t){var a,l=moment(t.created_date).format("MMMM Do YYYY, h:mm:ss a"),i=statuses[t.status].label||"label-default";if(moment(t.launch_date).isAfter(moment())){a="Scheduled to start: "+moment(t.launch_date).format("MMMM Do YYYY, h:mm:ss a");var n=a+"

    Number of recipients: "+t.stats.total}else{a="Launch Date: "+moment(t.launch_date).format("MMMM Do YYYY, h:mm:ss a");var n=a+"

    Number of recipients: "+t.stats.total+"

    Emails opened: "+t.stats.opened+"

    Emails clicked: "+t.stats.clicked+"

    Submitted Credentials: "+t.stats.submitted_data+"

    Errors : "+t.stats.error+"

    Reported : "+t.stats.email_reported}campaignTable.row.add([escapeHtml(t.name),l,t.stats.sent,t.stats.opened,t.stats.clicked,t.stats.submitted_data,t.stats.email_reported,''+t.status+"",""]).draw(),$('[data-toggle="tooltip"]').tooltip()}),generateStatsPieCharts(campaigns),generateTimelineChart(campaigns)):$("#emptyMessage").show()}).error(function(){errorFlash("Error fetching campaigns")})}); \ No newline at end of file +var campaigns=[],statuses={"Email Sent":{color:"#1abc9c",label:"label-success",icon:"fa-envelope",point:"ct-point-sent"},"Emails Sent":{color:"#1abc9c",label:"label-success",icon:"fa-envelope",point:"ct-point-sent"},"In progress":{label:"label-primary"},Queued:{label:"label-info"},Completed:{label:"label-success"},"Email Opened":{color:"#f9bf3b",label:"label-warning",icon:"fa-envelope",point:"ct-point-opened"},"Email Reported":{color:"#45d6ef",label:"label-warning",icon:"fa-bullhorne",point:"ct-point-reported"},"Clicked Link":{color:"#F39C12",label:"label-clicked",icon:"fa-mouse-pointer",point:"ct-point-clicked"},Success:{color:"#f05b4f",label:"label-danger",icon:"fa-exclamation",point:"ct-point-clicked"},Error:{color:"#6c7a89",label:"label-default",icon:"fa-times",point:"ct-point-error"},"Error Sending Email":{color:"#6c7a89",label:"label-default",icon:"fa-times",point:"ct-point-error"},"Submitted Data":{color:"#f05b4f",label:"label-danger",icon:"fa-exclamation",point:"ct-point-clicked"},Unknown:{color:"#6c7a89",label:"label-default",icon:"fa-question",point:"ct-point-error"},Sending:{color:"#428bca",label:"label-primary",icon:"fa-spinner",point:"ct-point-sending"},"Campaign Created":{label:"label-success",icon:"fa-rocket"}},statsMapping={sent:"Email Sent",opened:"Email Opened",email_reported:"Email Reported",clicked:"Clicked Link",submitted_data:"Submitted Data"};function deleteCampaign(e){confirm("Delete "+campaigns[e].name+"?")&&api.campaignId.delete(campaigns[e].id).success(function(e){successFlash(e.message),location.reload()})}function renderPieChart(i){return Highcharts.chart(i.elemId,{chart:{type:"pie",events:{load:function(){var e=this,t=e.renderer,a=e.series[0],l=e.plotLeft+a.center[0],n=e.plotTop+a.center[1];this.innerText=t.text(i.data[0].count,l,n).attr({"text-anchor":"middle","font-size":"16px","font-weight":"bold",fill:i.colors[0],"font-family":"Helvetica,Arial,sans-serif"}).add()},render:function(){this.innerText.attr({text:i.data[0].count})}}},title:{text:i.title},plotOptions:{pie:{innerSize:"80%",dataLabels:{enabled:!1}}},credits:{enabled:!1},tooltip:{formatter:function(){return null!=this.key&&''+this.point.name+": "+this.y+"%
    "}},series:[{data:i.data,colors:i.colors}]})}function generateStatsPieCharts(e){var a=[],l={},n=0;$.each(e,function(e,t){$.each(t.stats,function(e,t){if("total"==e)return n+=t,!0;l[e]?l[e]+=t:l[e]=t})}),$.each(l,function(e,t){if(!(e in statsMapping))return!0;status_label=statsMapping[e],a.push({name:status_label,y:Math.floor(t/n*100),count:t}),a.push({name:"",y:100-Math.floor(t/n*100)});renderPieChart({elemId:e+"_chart",title:status_label,name:e,data:a,colors:[statuses[status_label].color,"#dddddd"]});a=[]})}function generateTimelineChart(e){var l=[];$.each(e,function(e,t){var a=moment.utc(t.created_date).local();t.y=0,t.y+=t.stats.clicked,t.y=Math.floor(t.y/t.stats.total*100),l.push({campaign_id:t.id,name:t.name,x:a.valueOf(),y:t.y})}),Highcharts.chart("overview_chart",{chart:{zoomType:"x",type:"areaspline"},title:{text:"Phishing Success Overview"},xAxis:{type:"datetime",dateTimeLabelFormats:{second:"%l:%M:%S",minute:"%l:%M",hour:"%l:%M",day:"%b %d, %Y",week:"%b %d, %Y",month:"%b %Y"}},yAxis:{min:0,max:100,title:{text:"% of Success"}},tooltip:{formatter:function(){return Highcharts.dateFormat("%A, %b %d %l:%M:%S %P",new Date(this.x))+"
    "+this.point.name+"
    % Success: "+this.y+"%"}},legend:{enabled:!1},plotOptions:{series:{marker:{enabled:!0,symbol:"circle",radius:3},cursor:"pointer",point:{events:{click:function(e){window.location.href="/campaigns/"+this.campaign_id}}}}},credits:{enabled:!1},series:[{data:l,color:"#f05b4f",fillOpacity:.5}]})}$(document).ready(function(){Highcharts.setOptions({global:{useUTC:!1}}),api.campaigns.summary().success(function(e){$("#loading").hide(),0<(campaigns=e.campaigns).length?($("#dashboard").show(),campaignTable=$("#campaignTable").DataTable({columnDefs:[{orderable:!1,targets:"no-sort"},{className:"color-sent",targets:[2]},{className:"color-opened",targets:[3]},{className:"color-clicked",targets:[4]},{className:"color-success",targets:[5]},{className:"color-reported",targets:[6]}],order:[[1,"desc"]]}),$.each(campaigns,function(e,t){var a=moment(t.created_date).format("MMMM Do YYYY, h:mm:ss a"),l=statuses[t.status].label||"label-default";if(moment(t.launch_date).isAfter(moment()))var n="Scheduled to start: "+moment(t.launch_date).format("MMMM Do YYYY, h:mm:ss a")+"

    Number of recipients: "+t.stats.total;else n="Launch Date: "+moment(t.launch_date).format("MMMM Do YYYY, h:mm:ss a")+"

    Number of recipients: "+t.stats.total+"

    Emails opened: "+t.stats.opened+"

    Emails clicked: "+t.stats.clicked+"

    Submitted Credentials: "+t.stats.submitted_data+"

    Errors : "+t.stats.error+"

    Reported : "+t.stats.email_reported;campaignTable.row.add([escapeHtml(t.name),a,t.stats.sent,t.stats.opened,t.stats.clicked,t.stats.submitted_data,t.stats.email_reported,''+t.status+"",""]).draw(),$('[data-toggle="tooltip"]').tooltip()}),generateStatsPieCharts(campaigns),generateTimelineChart(campaigns)):$("#emptyMessage").show()}).error(function(){errorFlash("Error fetching campaigns")})}); \ No newline at end of file diff --git a/static/js/dist/app/gophish.min.js b/static/js/dist/app/gophish.min.js index d8b9cb99..abadbfa3 100644 --- a/static/js/dist/app/gophish.min.js +++ b/static/js/dist/app/gophish.min.js @@ -1 +1 @@ -function errorFlash(e){$("#flashes").empty(),$("#flashes").append('
    '+e+"
    ")}function successFlash(e){$("#flashes").empty(),$("#flashes").append('
    '+e+"
    ")}function modalError(e){$("#modal\\.flashes").empty().append('
    '+e+"
    ")}function query(e,t,n,r){return $.ajax({url:"/api"+e+"?api_key="+user.api_key,async:r,method:t,data:JSON.stringify(n),dataType:"json",contentType:"application/json"})}function escapeHtml(e){return $("
    ").text(e).html()}function unescapeHtml(e){return $("
    ").html(e).text()}var capitalize=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},api={campaigns:{get:function(){return query("/campaigns/","GET",{},!1)},post:function(e){return query("/campaigns/","POST",e,!1)},summary:function(){return query("/campaigns/summary","GET",{},!1)}},campaignId:{get:function(e){return query("/campaigns/"+e,"GET",{},!0)},delete:function(e){return query("/campaigns/"+e,"DELETE",{},!1)},results:function(e){return query("/campaigns/"+e+"/results","GET",{},!0)},complete:function(e){return query("/campaigns/"+e+"/complete","GET",{},!0)},summary:function(e){return query("/campaigns/"+e+"/summary","GET",{},!0)}},groups:{get:function(){return query("/groups/","GET",{},!1)},post:function(e){return query("/groups/","POST",e,!1)},summary:function(){return query("/groups/summary","GET",{},!0)}},groupId:{get:function(e){return query("/groups/"+e,"GET",{},!1)},put:function(e){return query("/groups/"+e.id,"PUT",e,!1)},delete:function(e){return query("/groups/"+e,"DELETE",{},!1)}},templates:{get:function(){return query("/templates/","GET",{},!1)},post:function(e){return query("/templates/","POST",e,!1)}},templateId:{get:function(e){return query("/templates/"+e,"GET",{},!1)},put:function(e){return query("/templates/"+e.id,"PUT",e,!1)},delete:function(e){return query("/templates/"+e,"DELETE",{},!1)}},pages:{get:function(){return query("/pages/","GET",{},!1)},post:function(e){return query("/pages/","POST",e,!1)}},pageId:{get:function(e){return query("/pages/"+e,"GET",{},!1)},put:function(e){return query("/pages/"+e.id,"PUT",e,!1)},delete:function(e){return query("/pages/"+e,"DELETE",{},!1)}},SMTP:{get:function(){return query("/smtp/","GET",{},!1)},post:function(e){return query("/smtp/","POST",e,!1)}},SMTPId:{get:function(e){return query("/smtp/"+e,"GET",{},!1)},put:function(e){return query("/smtp/"+e.id,"PUT",e,!1)},delete:function(e){return query("/smtp/"+e,"DELETE",{},!1)}},import_email:function(e){return query("/import/email","POST",e,!1)},clone_site:function(e){return query("/import/site","POST",e,!1)},send_test_email:function(e){return query("/util/send_test_email","POST",e,!0)},reset:function(){return query("/reset","POST",{},!0)}};$(document).ready(function(){var e=location.pathname;$(".nav-sidebar li").each(function(){var t=$(this);t.find("a").attr("href")===e&&t.addClass("active")}),$.fn.dataTable.moment("MMMM Do YYYY, h:mm:ss a"),$('[data-toggle="tooltip"]').tooltip()}); \ No newline at end of file +function errorFlash(e){$("#flashes").empty(),$("#flashes").append('
    '+e+"
    ")}function successFlash(e){$("#flashes").empty(),$("#flashes").append('
    '+e+"
    ")}function modalError(e){$("#modal\\.flashes").empty().append('
    '+e+"
    ")}function query(e,t,r,n){return $.ajax({url:"/api"+e,async:n,method:t,data:JSON.stringify(r),dataType:"json",contentType:"application/json",beforeSend:function(e){e.setRequestHeader("Authorization","Bearer "+user.api_key)}})}function escapeHtml(e){return $("
    ").text(e).html()}function unescapeHtml(e){return $("
    ").html(e).text()}window.escapeHtml=escapeHtml;var capitalize=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},api={campaigns:{get:function(){return query("/campaigns/","GET",{},!1)},post:function(e){return query("/campaigns/","POST",e,!1)},summary:function(){return query("/campaigns/summary","GET",{},!1)}},campaignId:{get:function(e){return query("/campaigns/"+e,"GET",{},!0)},delete:function(e){return query("/campaigns/"+e,"DELETE",{},!1)},results:function(e){return query("/campaigns/"+e+"/results","GET",{},!0)},complete:function(e){return query("/campaigns/"+e+"/complete","GET",{},!0)},summary:function(e){return query("/campaigns/"+e+"/summary","GET",{},!0)}},groups:{get:function(){return query("/groups/","GET",{},!1)},post:function(e){return query("/groups/","POST",e,!1)},summary:function(){return query("/groups/summary","GET",{},!0)}},groupId:{get:function(e){return query("/groups/"+e,"GET",{},!1)},put:function(e){return query("/groups/"+e.id,"PUT",e,!1)},delete:function(e){return query("/groups/"+e,"DELETE",{},!1)}},templates:{get:function(){return query("/templates/","GET",{},!1)},post:function(e){return query("/templates/","POST",e,!1)}},templateId:{get:function(e){return query("/templates/"+e,"GET",{},!1)},put:function(e){return query("/templates/"+e.id,"PUT",e,!1)},delete:function(e){return query("/templates/"+e,"DELETE",{},!1)}},pages:{get:function(){return query("/pages/","GET",{},!1)},post:function(e){return query("/pages/","POST",e,!1)}},pageId:{get:function(e){return query("/pages/"+e,"GET",{},!1)},put:function(e){return query("/pages/"+e.id,"PUT",e,!1)},delete:function(e){return query("/pages/"+e,"DELETE",{},!1)}},SMTP:{get:function(){return query("/smtp/","GET",{},!1)},post:function(e){return query("/smtp/","POST",e,!1)}},SMTPId:{get:function(e){return query("/smtp/"+e,"GET",{},!1)},put:function(e){return query("/smtp/"+e.id,"PUT",e,!1)},delete:function(e){return query("/smtp/"+e,"DELETE",{},!1)}},users:{get:function(){return query("/users/","GET",{},!0)},post:function(e){return query("/users/","POST",e,!0)}},userId:{get:function(e){return query("/users/"+e,"GET",{},!0)},put:function(e){return query("/users/"+e.id,"PUT",e,!0)},delete:function(e){return query("/users/"+e,"DELETE",{},!0)}},import_email:function(e){return query("/import/email","POST",e,!1)},clone_site:function(e){return query("/import/site","POST",e,!1)},send_test_email:function(e){return query("/util/send_test_email","POST",e,!0)},reset:function(){return query("/reset","POST",{},!0)}};window.api=api,$(document).ready(function(){var t=location.pathname;$(".nav-sidebar li").each(function(){var e=$(this);e.find("a").attr("href")===t&&e.addClass("active")}),$.fn.dataTable.moment("MMMM Do YYYY, h:mm:ss a"),$('[data-toggle="tooltip"]').tooltip()}); \ No newline at end of file diff --git a/static/js/dist/app/groups.min.js b/static/js/dist/app/groups.min.js new file mode 100644 index 00000000..742508ea --- /dev/null +++ b/static/js/dist/app/groups.min.js @@ -0,0 +1 @@ +var groups=[];function save(e){var t=[];$.each($("#targetsTable").DataTable().rows().data(),function(e,a){t.push({first_name:unescapeHtml(a[0]),last_name:unescapeHtml(a[1]),email:unescapeHtml(a[2]),position:unescapeHtml(a[3])})});var a={name:$("#name").val(),targets:t};-1!=e?(a.id=e,api.groupId.put(a).success(function(e){successFlash("Group updated successfully!"),load(),dismiss(),$("#modal").modal("hide")}).error(function(e){modalError(e.responseJSON.message)})):api.groups.post(a).success(function(e){successFlash("Group added successfully!"),load(),dismiss(),$("#modal").modal("hide")}).error(function(e){modalError(e.responseJSON.message)})}function dismiss(){$("#targetsTable").dataTable().DataTable().clear().draw(),$("#name").val(""),$("#modal\\.flashes").empty()}function edit(e){if(targets=$("#targetsTable").dataTable({destroy:!0,columnDefs:[{orderable:!1,targets:"no-sort"}]}),$("#modalSubmit").unbind("click").click(function(){save(e)}),-1==e);else api.groupId.get(e).success(function(e){$("#name").val(e.name),$.each(e.targets,function(e,a){targets.DataTable().row.add([escapeHtml(a.first_name),escapeHtml(a.last_name),escapeHtml(a.email),escapeHtml(a.position),'']).draw()})}).error(function(){errorFlash("Error fetching group")});$("#csvupload").fileupload({url:"/api/import/group",dataType:"json",beforeSend:function(e){e.setRequestHeader("Authorization","Bearer "+user.api_key)},add:function(e,a){$("#modal\\.flashes").empty();var t=a.originalFiles[0].name;if(t&&!/(csv|txt)$/i.test(t.split(".").pop()))return modalError("Unsupported file extension (use .csv or .txt)"),!1;a.submit()},done:function(e,a){$.each(a.result,function(e,a){addTarget(a.first_name,a.last_name,a.email,a.position)}),targets.DataTable().draw()}})}var downloadCSVTemplate=function(){var e="group_template.csv",a=Papa.unparse([{"First Name":"Example","Last Name":"User",Email:"foobar@example.com",Position:"Systems Administrator"}],{}),t=new Blob([a],{type:"text/csv;charset=utf-8;"});if(navigator.msSaveBlob)navigator.msSaveBlob(t,e);else{var o=window.URL.createObjectURL(t),s=document.createElement("a");s.href=o,s.setAttribute("download",e),document.body.appendChild(s),s.click(),document.body.removeChild(s)}},deleteGroup=function(o){var e=groups.find(function(e){return e.id===o});e&&Swal.fire({title:"Are you sure?",text:"This will delete the group. This can't be undone!",type:"warning",animation:!1,showCancelButton:!0,confirmButtonText:"Delete "+escapeHtml(e.name),confirmButtonColor:"#428bca",reverseButtons:!0,allowOutsideClick:!1,preConfirm:function(){return new Promise(function(a,t){api.groupId.delete(o).success(function(e){a()}).error(function(e){t(e.responseJSON.message)})})}}).then(function(e){e.value&&Swal.fire("Group Deleted!","This group has been deleted!","success"),$('button:contains("OK")').on("click",function(){location.reload()})})};function addTarget(e,a,t,o){var s=escapeHtml(t).toLowerCase(),r=[escapeHtml(e),escapeHtml(a),s,escapeHtml(o),''],n=targets.DataTable(),i=n.column(2,{order:"index"}).data().indexOf(s);0<=i?n.row(i,{order:"index"}).data(r):n.row.add(r)}function load(){$("#groupTable").hide(),$("#emptyMessage").hide(),$("#loading").show(),api.groups.summary().success(function(e){if($("#loading").hide(),0
    "]).draw()})}else $("#emptyMessage").show()}).error(function(){errorFlash("Error fetching groups")})}$(document).ready(function(){load(),$("#targetForm").submit(function(){var e=document.getElementById("targetForm");if(e.checkValidity())return addTarget($("#firstName").val(),$("#lastName").val(),$("#email").val(),$("#position").val()),targets.DataTable().draw(),$("#targetForm>div>input").val(""),$("#firstName").focus(),!1;e.reportValidity()}),$("#targetsTable").on("click","span>i.fa-trash-o",function(){targets.DataTable().row($(this).parents("tr")).remove().draw()}),$("#modal").on("hide.bs.modal",function(){dismiss()}),$("#csv-template").click(downloadCSVTemplate)}); \ No newline at end of file diff --git a/static/js/dist/app/landing_pages.min.js b/static/js/dist/app/landing_pages.min.js index 477a8f6f..cc6fbf5d 100644 --- a/static/js/dist/app/landing_pages.min.js +++ b/static/js/dist/app/landing_pages.min.js @@ -1 +1 @@ -function save(e){var a={};a.name=$("#name").val(),editor=CKEDITOR.instances.html_editor,a.html=editor.getData(),a.capture_credentials=$("#capture_credentials_checkbox").prop("checked"),a.capture_passwords=$("#capture_passwords_checkbox").prop("checked"),a.redirect_url=$("#redirect_url_input").val(),-1!=e?(a.id=pages[e].id,api.pageId.put(a).success(function(e){successFlash("Page edited successfully!"),load(),dismiss()})):api.pages.post(a).success(function(e){successFlash("Page added successfully!"),load(),dismiss()}).error(function(e){modalError(e.responseJSON.message)})}function dismiss(){$("#modal\\.flashes").empty(),$("#name").val(""),$("#html_editor").val(""),$("#url").val(""),$("#redirect_url_input").val(""),$("#modal").find("input[type='checkbox']").prop("checked",!1),$("#capture_passwords").hide(),$("#redirect_url").hide(),$("#modal").modal("hide")}function importSite(){url=$("#url").val(),url?api.clone_site({url:url,include_resources:!1}).success(function(e){$("#html_editor").val(e.html),CKEDITOR.instances.html_editor.setMode("wysiwyg"),$("#importSiteModal").modal("hide")}).error(function(e){modalError(e.responseJSON.message)}):modalError("No URL Specified!")}function edit(e){$("#modalSubmit").unbind("click").click(function(){save(e)}),$("#html_editor").ckeditor(),setupAutocomplete(CKEDITOR.instances.html_editor);var a={};-1!=e&&(a=pages[e],$("#name").val(a.name),$("#html_editor").val(a.html),$("#capture_credentials_checkbox").prop("checked",a.capture_credentials),$("#capture_passwords_checkbox").prop("checked",a.capture_passwords),$("#redirect_url_input").val(a.redirect_url),a.capture_credentials&&($("#capture_passwords").show(),$("#redirect_url").show()))}function copy(e){$("#modalSubmit").unbind("click").click(function(){save(-1)}),$("#html_editor").ckeditor();var a=pages[e];$("#name").val("Copy of "+a.name),$("#html_editor").val(a.html)}function load(){$("#pagesTable").hide(),$("#emptyMessage").hide(),$("#loading").show(),api.pages.get().success(function(e){pages=e,$("#loading").hide(),pages.length>0?($("#pagesTable").show(),pagesTable=$("#pagesTable").DataTable({destroy:!0,columnDefs:[{orderable:!1,targets:"no-sort"}]}),pagesTable.clear(),$.each(pages,function(e,a){pagesTable.row.add([escapeHtml(a.name),moment(a.modified_date).format("MMMM Do YYYY, h:mm:ss a"),"
    \t\t
    "]).draw()}),$('[data-toggle="tooltip"]').tooltip()):$("#emptyMessage").show()}).error(function(){$("#loading").hide(),errorFlash("Error fetching pages")})}var pages=[],deletePage=function(e){swal({title:"Are you sure?",text:"This will delete the landing page. This can't be undone!",type:"warning",animation:!1,showCancelButton:!0,confirmButtonText:"Delete "+escapeHtml(pages[e].name),confirmButtonColor:"#428bca",reverseButtons:!0,allowOutsideClick:!1,preConfirm:function(){return new Promise(function(a,t){api.pageId.delete(pages[e].id).success(function(e){a()}).error(function(e){t(e.responseJSON.message)})})}}).then(function(){swal("Landing Page Deleted!","This landing page has been deleted!","success"),$('button:contains("OK")').on("click",function(){location.reload()})})};$(document).ready(function(){$(".modal").on("hidden.bs.modal",function(e){$(this).removeClass("fv-modal-stack"),$("body").data("fv_open_modals",$("body").data("fv_open_modals")-1)}),$(".modal").on("shown.bs.modal",function(e){void 0===$("body").data("fv_open_modals")&&$("body").data("fv_open_modals",0),$(this).hasClass("fv-modal-stack")||($(this).addClass("fv-modal-stack"),$("body").data("fv_open_modals",$("body").data("fv_open_modals")+1),$(this).css("z-index",1040+10*$("body").data("fv_open_modals")),$(".modal-backdrop").not(".fv-modal-stack").css("z-index",1039+10*$("body").data("fv_open_modals")),$(".modal-backdrop").not("fv-modal-stack").addClass("fv-modal-stack"))}),$.fn.modal.Constructor.prototype.enforceFocus=function(){$(document).off("focusin.bs.modal").on("focusin.bs.modal",$.proxy(function(e){this.$element[0]===e.target||this.$element.has(e.target).length||$(e.target).closest(".cke_dialog, .cke").length||this.$element.trigger("focus")},this))},$(document).on("hidden.bs.modal",".modal",function(){$(".modal:visible").length&&$(document.body).addClass("modal-open")}),$("#modal").on("hidden.bs.modal",function(e){dismiss()}),$("#capture_credentials_checkbox").change(function(){$("#capture_passwords").toggle(),$("#redirect_url").toggle()}),CKEDITOR.on("dialogDefinition",function(e){var a=e.data.name,t=e.data.definition;if("link"==a){t.minWidth=500,t.minHeight=100;t.getContents("info").get("linkType").hidden=!0}}),load()}); \ No newline at end of file +var pages=[];function save(e){var a={};a.name=$("#name").val(),editor=CKEDITOR.instances.html_editor,a.html=editor.getData(),a.capture_credentials=$("#capture_credentials_checkbox").prop("checked"),a.capture_passwords=$("#capture_passwords_checkbox").prop("checked"),a.redirect_url=$("#redirect_url_input").val(),-1!=e?(a.id=pages[e].id,api.pageId.put(a).success(function(e){successFlash("Page edited successfully!"),load(),dismiss()})):api.pages.post(a).success(function(e){successFlash("Page added successfully!"),load(),dismiss()}).error(function(e){modalError(e.responseJSON.message)})}function dismiss(){$("#modal\\.flashes").empty(),$("#name").val(""),$("#html_editor").val(""),$("#url").val(""),$("#redirect_url_input").val(""),$("#modal").find("input[type='checkbox']").prop("checked",!1),$("#capture_passwords").hide(),$("#redirect_url").hide(),$("#modal").modal("hide")}var deletePage=function(e){Swal.fire({title:"Are you sure?",text:"This will delete the landing page. This can't be undone!",type:"warning",animation:!1,showCancelButton:!0,confirmButtonText:"Delete "+escapeHtml(pages[e].name),confirmButtonColor:"#428bca",reverseButtons:!0,allowOutsideClick:!1,preConfirm:function(){return new Promise(function(a,t){api.pageId.delete(pages[e].id).success(function(e){a()}).error(function(e){t(e.responseJSON.message)})})}}).then(function(e){e.value&&Swal.fire("Landing Page Deleted!","This landing page has been deleted!","success"),$('button:contains("OK")').on("click",function(){location.reload()})})};function importSite(){url=$("#url").val(),url?api.clone_site({url:url,include_resources:!1}).success(function(e){$("#html_editor").val(e.html),CKEDITOR.instances.html_editor.setMode("wysiwyg"),$("#importSiteModal").modal("hide")}).error(function(e){modalError(e.responseJSON.message)}):modalError("No URL Specified!")}function edit(e){$("#modalSubmit").unbind("click").click(function(){save(e)}),$("#html_editor").ckeditor(),setupAutocomplete(CKEDITOR.instances.html_editor);var a={};-1!=e&&(a=pages[e],$("#name").val(a.name),$("#html_editor").val(a.html),$("#capture_credentials_checkbox").prop("checked",a.capture_credentials),$("#capture_passwords_checkbox").prop("checked",a.capture_passwords),$("#redirect_url_input").val(a.redirect_url),a.capture_credentials&&($("#capture_passwords").show(),$("#redirect_url").show()))}function copy(e){$("#modalSubmit").unbind("click").click(function(){save(-1)}),$("#html_editor").ckeditor();var a=pages[e];$("#name").val("Copy of "+a.name),$("#html_editor").val(a.html)}function load(){$("#pagesTable").hide(),$("#emptyMessage").hide(),$("#loading").show(),api.pages.get().success(function(e){pages=e,$("#loading").hide(),0\t\t
    "]).draw()}),$('[data-toggle="tooltip"]').tooltip()):$("#emptyMessage").show()}).error(function(){$("#loading").hide(),errorFlash("Error fetching pages")})}$(document).ready(function(){$(".modal").on("hidden.bs.modal",function(e){$(this).removeClass("fv-modal-stack"),$("body").data("fv_open_modals",$("body").data("fv_open_modals")-1)}),$(".modal").on("shown.bs.modal",function(e){void 0===$("body").data("fv_open_modals")&&$("body").data("fv_open_modals",0),$(this).hasClass("fv-modal-stack")||($(this).addClass("fv-modal-stack"),$("body").data("fv_open_modals",$("body").data("fv_open_modals")+1),$(this).css("z-index",1040+10*$("body").data("fv_open_modals")),$(".modal-backdrop").not(".fv-modal-stack").css("z-index",1039+10*$("body").data("fv_open_modals")),$(".modal-backdrop").not("fv-modal-stack").addClass("fv-modal-stack"))}),$.fn.modal.Constructor.prototype.enforceFocus=function(){$(document).off("focusin.bs.modal").on("focusin.bs.modal",$.proxy(function(e){this.$element[0]===e.target||this.$element.has(e.target).length||$(e.target).closest(".cke_dialog, .cke").length||this.$element.trigger("focus")},this))},$(document).on("hidden.bs.modal",".modal",function(){$(".modal:visible").length&&$(document.body).addClass("modal-open")}),$("#modal").on("hidden.bs.modal",function(e){dismiss()}),$("#capture_credentials_checkbox").change(function(){$("#capture_passwords").toggle(),$("#redirect_url").toggle()}),CKEDITOR.on("dialogDefinition",function(e){var a=e.data.name,t=e.data.definition;"link"==a&&(t.minWidth=500,t.minHeight=100,t.getContents("info").get("linkType").hidden=!0)}),load()}); \ No newline at end of file diff --git a/static/js/dist/app/templates.min.js b/static/js/dist/app/templates.min.js index 643f36b6..d3e1a5aa 100644 --- a/static/js/dist/app/templates.min.js +++ b/static/js/dist/app/templates.min.js @@ -1 +1 @@ -function save(t){var e={attachments:[]};e.name=$("#name").val(),e.subject=$("#subject").val(),e.html=CKEDITOR.instances.html_editor.getData(),e.html=e.html.replace(/https?:\/\/{{\.URL}}/gi,"{{.URL}}"),$("#use_tracker_checkbox").prop("checked")?-1==e.html.indexOf("{{.Tracker}}")&&-1==e.html.indexOf("{{.TrackingUrl}}")&&(e.html=e.html.replace("","{{.Tracker}}")):e.html=e.html.replace("{{.Tracker}}",""),e.text=$("#text_editor").val(),$.each($("#attachmentsTable").DataTable().rows().data(),function(t,a){e.attachments.push({name:unescapeHtml(a[1]),content:a[3],type:a[4]})}),-1!=t?(e.id=templates[t].id,api.templateId.put(e).success(function(t){successFlash("Template edited successfully!"),load(),dismiss()}).error(function(t){modalError(t.responseJSON.message)})):api.templates.post(e).success(function(t){successFlash("Template added successfully!"),load(),dismiss()}).error(function(t){modalError(t.responseJSON.message)})}function dismiss(){$("#modal\\.flashes").empty(),$("#attachmentsTable").dataTable().DataTable().clear().draw(),$("#name").val(""),$("#subject").val(""),$("#text_editor").val(""),$("#html_editor").val(""),$("#modal").modal("hide")}function deleteTemplate(t){confirm("Delete "+templates[t].name+"?")&&api.templateId.delete(templates[t].id).success(function(t){successFlash(t.message),load()})}function attach(t){attachmentsTable=$("#attachmentsTable").DataTable({destroy:!0,order:[[1,"asc"]],columnDefs:[{orderable:!1,targets:"no-sort"},{sClass:"datatable_hidden",targets:[3,4]}]}),$.each(t,function(t,e){var a=new FileReader;a.onload=function(t){var o=icons[e.type]||"fa-file-o";attachmentsTable.row.add(['',escapeHtml(e.name),'',a.result.split(",")[1],e.type||"application/octet-stream"]).draw()},a.onerror=function(t){console.log(t)},a.readAsDataURL(e)})}function edit(t){$("#modalSubmit").unbind("click").click(function(){save(t)}),$("#attachmentUpload").unbind("click").click(function(){this.value=null}),$("#html_editor").ckeditor(),setupAutocomplete(CKEDITOR.instances.html_editor),$("#attachmentsTable").show(),attachmentsTable=$("#attachmentsTable").DataTable({destroy:!0,order:[[1,"asc"]],columnDefs:[{orderable:!1,targets:"no-sort"},{sClass:"datatable_hidden",targets:[3,4]}]});var e={attachments:[]};-1!=t&&(e=templates[t],$("#name").val(e.name),$("#subject").val(e.subject),$("#html_editor").val(e.html),$("#text_editor").val(e.text),$.each(e.attachments,function(t,e){var a=icons[e.type]||"fa-file-o";attachmentsTable.row.add(['',escapeHtml(e.name),'',e.content,e.type||"application/octet-stream"]).draw()}),-1!=e.html.indexOf("{{.Tracker}}")?$("#use_tracker_checkbox").prop("checked",!0):$("#use_tracker_checkbox").prop("checked",!1)),$("#attachmentsTable").unbind("click").on("click","span>i.fa-trash-o",function(){attachmentsTable.row($(this).parents("tr")).remove().draw()})}function copy(t){$("#modalSubmit").unbind("click").click(function(){save(-1)}),$("#attachmentUpload").unbind("click").click(function(){this.value=null}),$("#html_editor").ckeditor(),$("#attachmentsTable").show(),attachmentsTable=$("#attachmentsTable").DataTable({destroy:!0,order:[[1,"asc"]],columnDefs:[{orderable:!1,targets:"no-sort"},{sClass:"datatable_hidden",targets:[3,4]}]});var e={attachments:[]};e=templates[t],$("#name").val("Copy of "+e.name),$("#subject").val(e.subject),$("#html_editor").val(e.html),$("#text_editor").val(e.text),$.each(e.attachments,function(t,e){var a=icons[e.type]||"fa-file-o";attachmentsTable.row.add(['',escapeHtml(e.name),'',e.content,e.type||"application/octet-stream"]).draw()}),$("#attachmentsTable").unbind("click").on("click","span>i.fa-trash-o",function(){attachmentsTable.row($(this).parents("tr")).remove().draw()}),-1!=e.html.indexOf("{{.Tracker}}")?$("#use_tracker_checkbox").prop("checked",!0):$("#use_tracker_checkbox").prop("checked",!1)}function importEmail(){raw=$("#email_content").val(),convert_links=$("#convert_links_checkbox").prop("checked"),raw?api.import_email({content:raw,convert_links:convert_links}).success(function(t){$("#text_editor").val(t.text),$("#html_editor").val(t.html),$("#subject").val(t.subject),t.html&&(CKEDITOR.instances.html_editor.setMode("wysiwyg"),$('.nav-tabs a[href="#html"]').click()),$("#importEmailModal").modal("hide")}).error(function(t){modalError(t.responseJSON.message)}):modalError("No Content Specified!")}function load(){$("#templateTable").hide(),$("#emptyMessage").hide(),$("#loading").show(),api.templates.get().success(function(t){templates=t,$("#loading").hide(),templates.length>0?($("#templateTable").show(),templateTable=$("#templateTable").DataTable({destroy:!0,columnDefs:[{orderable:!1,targets:"no-sort"}]}),templateTable.clear(),$.each(templates,function(t,e){templateTable.row.add([escapeHtml(e.name),moment(e.modified_date).format("MMMM Do YYYY, h:mm:ss a"),"
    \t\t
    "]).draw()}),$('[data-toggle="tooltip"]').tooltip()):$("#emptyMessage").show()}).error(function(){$("#loading").hide(),errorFlash("Error fetching templates")})}var templates=[],icons={"application/vnd.ms-excel":"fa-file-excel-o","text/plain":"fa-file-text-o","image/gif":"fa-file-image-o","image/png":"fa-file-image-o","application/pdf":"fa-file-pdf-o","application/x-zip-compressed":"fa-file-archive-o","application/x-gzip":"fa-file-archive-o","application/vnd.openxmlformats-officedocument.presentationml.presentation":"fa-file-powerpoint-o","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"fa-file-word-o","application/octet-stream":"fa-file-o","application/x-msdownload":"fa-file-o"},deleteTemplate=function(t){swal({title:"Are you sure?",text:"This will delete the template. This can't be undone!",type:"warning",animation:!1,showCancelButton:!0,confirmButtonText:"Delete "+escapeHtml(templates[t].name),confirmButtonColor:"#428bca",reverseButtons:!0,allowOutsideClick:!1,preConfirm:function(){return new Promise(function(e,a){api.templateId.delete(templates[t].id).success(function(t){e()}).error(function(t){a(t.responseJSON.message)})})}}).then(function(){swal("Template Deleted!","This template has been deleted!","success"),$('button:contains("OK")').on("click",function(){location.reload()})})};$(document).ready(function(){$(".modal").on("hidden.bs.modal",function(t){$(this).removeClass("fv-modal-stack"),$("body").data("fv_open_modals",$("body").data("fv_open_modals")-1)}),$(".modal").on("shown.bs.modal",function(t){void 0===$("body").data("fv_open_modals")&&$("body").data("fv_open_modals",0),$(this).hasClass("fv-modal-stack")||($(this).addClass("fv-modal-stack"),$("body").data("fv_open_modals",$("body").data("fv_open_modals")+1),$(this).css("z-index",1040+10*$("body").data("fv_open_modals")),$(".modal-backdrop").not(".fv-modal-stack").css("z-index",1039+10*$("body").data("fv_open_modals")),$(".modal-backdrop").not("fv-modal-stack").addClass("fv-modal-stack"))}),$.fn.modal.Constructor.prototype.enforceFocus=function(){$(document).off("focusin.bs.modal").on("focusin.bs.modal",$.proxy(function(t){this.$element[0]===t.target||this.$element.has(t.target).length||$(t.target).closest(".cke_dialog, .cke").length||this.$element.trigger("focus")},this))},$(document).on("hidden.bs.modal",".modal",function(){$(".modal:visible").length&&$(document.body).addClass("modal-open")}),$("#modal").on("hidden.bs.modal",function(t){dismiss()}),$("#importEmailModal").on("hidden.bs.modal",function(t){$("#email_content").val("")}),CKEDITOR.on("dialogDefinition",function(t){var e=t.data.name,a=t.data.definition;if("link"==e){a.minWidth=500,a.minHeight=100;a.getContents("info").get("linkType").hidden=!0}}),load()}); \ No newline at end of file +var templates=[],icons={"application/vnd.ms-excel":"fa-file-excel-o","text/plain":"fa-file-text-o","image/gif":"fa-file-image-o","image/png":"fa-file-image-o","application/pdf":"fa-file-pdf-o","application/x-zip-compressed":"fa-file-archive-o","application/x-gzip":"fa-file-archive-o","application/vnd.openxmlformats-officedocument.presentationml.presentation":"fa-file-powerpoint-o","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"fa-file-word-o","application/octet-stream":"fa-file-o","application/x-msdownload":"fa-file-o"};function save(e){var a={attachments:[]};a.name=$("#name").val(),a.subject=$("#subject").val(),a.html=CKEDITOR.instances.html_editor.getData(),a.html=a.html.replace(/https?:\/\/{{\.URL}}/gi,"{{.URL}}"),$("#use_tracker_checkbox").prop("checked")?-1==a.html.indexOf("{{.Tracker}}")&&-1==a.html.indexOf("{{.TrackingUrl}}")&&(a.html=a.html.replace("","{{.Tracker}}")):a.html=a.html.replace("{{.Tracker}}",""),a.text=$("#text_editor").val(),$.each($("#attachmentsTable").DataTable().rows().data(),function(e,t){a.attachments.push({name:unescapeHtml(t[1]),content:t[3],type:t[4]})}),-1!=e?(a.id=templates[e].id,api.templateId.put(a).success(function(e){successFlash("Template edited successfully!"),load(),dismiss()}).error(function(e){modalError(e.responseJSON.message)})):api.templates.post(a).success(function(e){successFlash("Template added successfully!"),load(),dismiss()}).error(function(e){modalError(e.responseJSON.message)})}function dismiss(){$("#modal\\.flashes").empty(),$("#attachmentsTable").dataTable().DataTable().clear().draw(),$("#name").val(""),$("#subject").val(""),$("#text_editor").val(""),$("#html_editor").val(""),$("#modal").modal("hide")}var deleteTemplate=function(e){Swal.fire({title:"Are you sure?",text:"This will delete the template. This can't be undone!",type:"warning",animation:!1,showCancelButton:!0,confirmButtonText:"Delete "+escapeHtml(templates[e].name),confirmButtonColor:"#428bca",reverseButtons:!0,allowOutsideClick:!1,preConfirm:function(){return new Promise(function(t,a){api.templateId.delete(templates[e].id).success(function(e){t()}).error(function(e){a(e.responseJSON.message)})})}}).then(function(e){e.value&&Swal.fire("Template Deleted!","This template has been deleted!","success"),$('button:contains("OK")').on("click",function(){location.reload()})})};function deleteTemplate(e){confirm("Delete "+templates[e].name+"?")&&api.templateId.delete(templates[e].id).success(function(e){successFlash(e.message),load()})}function attach(e){attachmentsTable=$("#attachmentsTable").DataTable({destroy:!0,order:[[1,"asc"]],columnDefs:[{orderable:!1,targets:"no-sort"},{sClass:"datatable_hidden",targets:[3,4]}]}),$.each(e,function(e,a){var o=new FileReader;o.onload=function(e){var t=icons[a.type]||"fa-file-o";attachmentsTable.row.add(['',escapeHtml(a.name),'',o.result.split(",")[1],a.type||"application/octet-stream"]).draw()},o.onerror=function(e){console.log(e)},o.readAsDataURL(a)})}function edit(e){$("#modalSubmit").unbind("click").click(function(){save(e)}),$("#attachmentUpload").unbind("click").click(function(){this.value=null}),$("#html_editor").ckeditor(),setupAutocomplete(CKEDITOR.instances.html_editor),$("#attachmentsTable").show(),attachmentsTable=$("#attachmentsTable").DataTable({destroy:!0,order:[[1,"asc"]],columnDefs:[{orderable:!1,targets:"no-sort"},{sClass:"datatable_hidden",targets:[3,4]}]});var t={attachments:[]};-1!=e&&(t=templates[e],$("#name").val(t.name),$("#subject").val(t.subject),$("#html_editor").val(t.html),$("#text_editor").val(t.text),$.each(t.attachments,function(e,t){var a=icons[t.type]||"fa-file-o";attachmentsTable.row.add(['',escapeHtml(t.name),'',t.content,t.type||"application/octet-stream"]).draw()}),-1!=t.html.indexOf("{{.Tracker}}")?$("#use_tracker_checkbox").prop("checked",!0):$("#use_tracker_checkbox").prop("checked",!1)),$("#attachmentsTable").unbind("click").on("click","span>i.fa-trash-o",function(){attachmentsTable.row($(this).parents("tr")).remove().draw()})}function copy(e){$("#modalSubmit").unbind("click").click(function(){save(-1)}),$("#attachmentUpload").unbind("click").click(function(){this.value=null}),$("#html_editor").ckeditor(),$("#attachmentsTable").show(),attachmentsTable=$("#attachmentsTable").DataTable({destroy:!0,order:[[1,"asc"]],columnDefs:[{orderable:!1,targets:"no-sort"},{sClass:"datatable_hidden",targets:[3,4]}]});var t={attachments:[]};t=templates[e],$("#name").val("Copy of "+t.name),$("#subject").val(t.subject),$("#html_editor").val(t.html),$("#text_editor").val(t.text),$.each(t.attachments,function(e,t){var a=icons[t.type]||"fa-file-o";attachmentsTable.row.add(['',escapeHtml(t.name),'',t.content,t.type||"application/octet-stream"]).draw()}),$("#attachmentsTable").unbind("click").on("click","span>i.fa-trash-o",function(){attachmentsTable.row($(this).parents("tr")).remove().draw()}),-1!=t.html.indexOf("{{.Tracker}}")?$("#use_tracker_checkbox").prop("checked",!0):$("#use_tracker_checkbox").prop("checked",!1)}function importEmail(){raw=$("#email_content").val(),convert_links=$("#convert_links_checkbox").prop("checked"),raw?api.import_email({content:raw,convert_links:convert_links}).success(function(e){$("#text_editor").val(e.text),$("#html_editor").val(e.html),$("#subject").val(e.subject),e.html&&(CKEDITOR.instances.html_editor.setMode("wysiwyg"),$('.nav-tabs a[href="#html"]').click()),$("#importEmailModal").modal("hide")}).error(function(e){modalError(e.responseJSON.message)}):modalError("No Content Specified!")}function load(){$("#templateTable").hide(),$("#emptyMessage").hide(),$("#loading").show(),api.templates.get().success(function(e){templates=e,$("#loading").hide(),0\t\t
    "]).draw()}),$('[data-toggle="tooltip"]').tooltip()):$("#emptyMessage").show()}).error(function(){$("#loading").hide(),errorFlash("Error fetching templates")})}$(document).ready(function(){$(".modal").on("hidden.bs.modal",function(e){$(this).removeClass("fv-modal-stack"),$("body").data("fv_open_modals",$("body").data("fv_open_modals")-1)}),$(".modal").on("shown.bs.modal",function(e){void 0===$("body").data("fv_open_modals")&&$("body").data("fv_open_modals",0),$(this).hasClass("fv-modal-stack")||($(this).addClass("fv-modal-stack"),$("body").data("fv_open_modals",$("body").data("fv_open_modals")+1),$(this).css("z-index",1040+10*$("body").data("fv_open_modals")),$(".modal-backdrop").not(".fv-modal-stack").css("z-index",1039+10*$("body").data("fv_open_modals")),$(".modal-backdrop").not("fv-modal-stack").addClass("fv-modal-stack"))}),$.fn.modal.Constructor.prototype.enforceFocus=function(){$(document).off("focusin.bs.modal").on("focusin.bs.modal",$.proxy(function(e){this.$element[0]===e.target||this.$element.has(e.target).length||$(e.target).closest(".cke_dialog, .cke").length||this.$element.trigger("focus")},this))},$(document).on("hidden.bs.modal",".modal",function(){$(".modal:visible").length&&$(document.body).addClass("modal-open")}),$("#modal").on("hidden.bs.modal",function(e){dismiss()}),$("#importEmailModal").on("hidden.bs.modal",function(e){$("#email_content").val("")}),CKEDITOR.on("dialogDefinition",function(e){var t=e.data.name,a=e.data.definition;"link"==t&&(a.minWidth=500,a.minHeight=100,a.getContents("info").get("linkType").hidden=!0)}),load()}); \ No newline at end of file diff --git a/static/js/dist/app/users.min.js b/static/js/dist/app/users.min.js index 300f6acd..f6aab604 100644 --- a/static/js/dist/app/users.min.js +++ b/static/js/dist/app/users.min.js @@ -1 +1 @@ -function save(e){var a=[];$.each($("#targetsTable").DataTable().rows().data(),function(e,t){a.push({first_name:unescapeHtml(t[0]),last_name:unescapeHtml(t[1]),email:unescapeHtml(t[2]),position:unescapeHtml(t[3])})});var t={name:$("#name").val(),targets:a};-1!=e?(t.id=e,api.groupId.put(t).success(function(e){successFlash("Group updated successfully!"),load(),dismiss(),$("#modal").modal("hide")}).error(function(e){modalError(e.responseJSON.message)})):api.groups.post(t).success(function(e){successFlash("Group added successfully!"),load(),dismiss(),$("#modal").modal("hide")}).error(function(e){modalError(e.responseJSON.message)})}function dismiss(){$("#targetsTable").dataTable().DataTable().clear().draw(),$("#name").val(""),$("#modal\\.flashes").empty()}function edit(e){if(targets=$("#targetsTable").dataTable({destroy:!0,columnDefs:[{orderable:!1,targets:"no-sort"}]}),$("#modalSubmit").unbind("click").click(function(){save(e)}),-1==e);else api.groupId.get(e).success(function(e){$("#name").val(e.name),$.each(e.targets,function(e,a){targets.DataTable().row.add([escapeHtml(a.first_name),escapeHtml(a.last_name),escapeHtml(a.email),escapeHtml(a.position),'']).draw()})}).error(function(){errorFlash("Error fetching group")});$("#csvupload").fileupload({url:"/api/import/group?api_key="+user.api_key,dataType:"json",add:function(e,a){$("#modal\\.flashes").empty();var t=/(csv|txt)$/i,s=a.originalFiles[0].name;if(s&&!t.test(s.split(".").pop()))return modalError("Unsupported file extension (use .csv or .txt)"),!1;a.submit()},done:function(e,a){$.each(a.result,function(e,a){addTarget(a.first_name,a.last_name,a.email,a.position)}),targets.DataTable().draw()}})}function addTarget(e,a,t,s){var o=escapeHtml(t).toLowerCase(),r=[escapeHtml(e),escapeHtml(a),o,escapeHtml(s),''],n=targets.DataTable(),i=n.column(2,{order:"index"}).data().indexOf(o);i>=0?n.row(i,{order:"index"}).data(r):n.row.add(r)}function load(){$("#groupTable").hide(),$("#emptyMessage").hide(),$("#loading").show(),api.groups.summary().success(function(e){if($("#loading").hide(),e.total>0){groups=e.groups,$("#emptyMessage").hide(),$("#groupTable").show();var a=$("#groupTable").DataTable({destroy:!0,columnDefs:[{orderable:!1,targets:"no-sort"}]});a.clear(),$.each(groups,function(e,t){a.row.add([escapeHtml(t.name),escapeHtml(t.num_targets),moment(t.modified_date).format("MMMM Do YYYY, h:mm:ss a"),"
    "]).draw()})}else $("#emptyMessage").show()}).error(function(){errorFlash("Error fetching groups")})}var groups=[],downloadCSVTemplate=function(){var e=[{"First Name":"Example","Last Name":"User",Email:"foobar@example.com",Position:"Systems Administrator"}],a=Papa.unparse(e,{}),t=new Blob([a],{type:"text/csv;charset=utf-8;"});if(navigator.msSaveBlob)navigator.msSaveBlob(t,"group_template.csv");else{var s=window.URL.createObjectURL(t),o=document.createElement("a");o.href=s,o.setAttribute("download","group_template.csv"),document.body.appendChild(o),o.click(),document.body.removeChild(o)}},deleteGroup=function(e){var a=groups.find(function(a){return a.id===e});a&&swal({title:"Are you sure?",text:"This will delete the group. This can't be undone!",type:"warning",animation:!1,showCancelButton:!0,confirmButtonText:"Delete "+escapeHtml(a.name),confirmButtonColor:"#428bca",reverseButtons:!0,allowOutsideClick:!1,preConfirm:function(){return new Promise(function(a,t){api.groupId.delete(e).success(function(e){a()}).error(function(e){t(e.responseJSON.message)})})}}).then(function(){swal("Group Deleted!","This group has been deleted!","success"),$('button:contains("OK")').on("click",function(){location.reload()})})};$(document).ready(function(){load(),$("#targetForm").submit(function(){return addTarget($("#firstName").val(),$("#lastName").val(),$("#email").val(),$("#position").val()),targets.DataTable().draw(),$("#targetForm>div>input").val(""),$("#firstName").focus(),!1}),$("#targetsTable").on("click","span>i.fa-trash-o",function(){targets.DataTable().row($(this).parents("tr")).remove().draw()}),$("#modal").on("hide.bs.modal",function(){dismiss()}),$("#csv-template").click(downloadCSVTemplate)}); \ No newline at end of file +!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t){var r=[],n=function(){$("#username").val(""),$("#password").val(""),$("#confirm_password").val(""),$("#role").val(""),$("#modal\\.flashes").empty()},o=function(e){$("#modalSubmit").unbind("click").click(function(){!function(e){if($("#password").val()===$("#confirm_password").val()){var t={username:$("#username").val(),password:$("#password").val(),role:$("#role").val()};-1!=e?(t.id=e,api.userId.put(t).success(function(e){successFlash("User "+escapeHtml(t.username)+" updated successfully!"),s(),n(),$("#modal").modal("hide")}).error(function(e){modalError(e.responseJSON.message)})):api.users.post(t).success(function(e){successFlash("User "+escapeHtml(t.username)+" registered successfully!"),s(),n(),$("#modal").modal("hide")}).error(function(e){modalError(e.responseJSON.message)})}else modalError("Passwords must match.")}(e)}),$("#role").select2(),-1==e?($("#role").val("user"),$("#role").trigger("change")):api.userId.get(e).success(function(e){$("#username").val(e.username),$("#role").val(e.role.slug),$("#role").trigger("change")}).error(function(){errorFlash("Error fetching user")})},s=function(){$("#userTable").hide(),$("#loading").show(),api.users.get().success(function(e){r=e,$("#loading").hide(),$("#userTable").show();var t=$("#userTable").DataTable({destroy:!0,columnDefs:[{orderable:!1,targets:"no-sort"}]});t.clear(),$.each(r,function(e,r){t.row.add([escapeHtml(r.username),escapeHtml(r.role.name),"
    "]).draw()})}).error(function(){errorFlash("Error fetching users")})};$(document).ready(function(){s(),$("#modal").on("hide.bs.modal",function(){n()}),$.fn.select2.defaults.set("width","100%"),$.fn.select2.defaults.set("dropdownParent",$("#role-select")),$.fn.select2.defaults.set("theme","bootstrap"),$.fn.select2.defaults.set("sorter",function(e){return e.sort(function(e,t){return e.text.toLowerCase()>t.text.toLowerCase()?1:e.text.toLowerCase()0&&e-1 in t)))}function i(t){var e=Ct[t]={};return ct.each(t.match(dt)||[],function(t,n){e[n]=!0}),e}function r(t,n,i,r){if(ct.acceptData(t)){var o,a,s=ct.expando,l=t.nodeType,u=l?ct.cache:t,c=l?t[s]:t[s]&&s;if(c&&u[c]&&(r||u[c].data)||i!==e||"string"!=typeof n)return c||(c=l?t[s]=et.pop()||ct.guid++:s),u[c]||(u[c]=l?{}:{toJSON:ct.noop}),("object"==typeof n||"function"==typeof n)&&(r?u[c]=ct.extend(u[c],n):u[c].data=ct.extend(u[c].data,n)),a=u[c],r||(a.data||(a.data={}),a=a.data),i!==e&&(a[ct.camelCase(n)]=i),"string"==typeof n?null==(o=a[n])&&(o=a[ct.camelCase(n)]):o=a,o}}function o(t,e,n){if(ct.acceptData(t)){var i,r,o=t.nodeType,a=o?ct.cache:t,l=o?t[ct.expando]:ct.expando;if(a[l]){if(e&&(i=n?a[l]:a[l].data)){ct.isArray(e)?e=e.concat(ct.map(e,ct.camelCase)):e in i?e=[e]:(e=ct.camelCase(e),e=e in i?[e]:e.split(" ")),r=e.length;for(;r--;)delete i[e[r]];if(n?!s(i):!ct.isEmptyObject(i))return}(n||(delete a[l].data,s(a[l])))&&(o?ct.cleanData([t],!0):ct.support.deleteExpando||a!=a.window?delete a[l]:a[l]=null)}}}function a(t,n,i){if(i===e&&1===t.nodeType){var r="data-"+n.replace(Tt,"-$1").toLowerCase();if("string"==typeof(i=t.getAttribute(r))){try{i="true"===i||"false"!==i&&("null"===i?null:+i+""===i?+i:Mt.test(i)?ct.parseJSON(i):i)}catch(t){}ct.data(t,n,i)}else i=e}return i}function s(t){var e;for(e in t)if(("data"!==e||!ct.isEmptyObject(t[e]))&&"toJSON"!==e)return!1;return!0}function l(){return!0}function u(){return!1}function c(){try{return Z.activeElement}catch(t){}}function h(t,e){do{t=t[e]}while(t&&1!==t.nodeType);return t}function d(t,e,n){if(ct.isFunction(e))return ct.grep(t,function(t,i){return!!e.call(t,i,t)!==n});if(e.nodeType)return ct.grep(t,function(t){return t===e!==n});if("string"==typeof e){if(Wt.test(e))return ct.filter(e,t,n);e=ct.filter(e,t)}return ct.grep(t,function(t){return ct.inArray(t,e)>=0!==n})}function f(t){var e=Yt.split("|"),n=t.createDocumentFragment();if(n.createElement)for(;e.length;)n.createElement(e.pop());return n}function p(t,e){return ct.nodeName(t,"table")&&ct.nodeName(1===e.nodeType?e:e.firstChild,"tr")?t.getElementsByTagName("tbody")[0]||t.appendChild(t.ownerDocument.createElement("tbody")):t}function g(t){return t.type=(null!==ct.find.attr(t,"type"))+"/"+t.type,t}function m(t){var e=re.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function v(t,e){for(var n,i=0;null!=(n=t[i]);i++)ct._data(n,"globalEval",!e||ct._data(e[i],"globalEval"))}function y(t,e){if(1===e.nodeType&&ct.hasData(t)){var n,i,r,o=ct._data(t),a=ct._data(e,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(i=0,r=s[n].length;r>i;i++)ct.event.add(e,n,s[n][i])}a.data&&(a.data=ct.extend({},a.data))}}function b(t,e){var n,i,r;if(1===e.nodeType){if(n=e.nodeName.toLowerCase(),!ct.support.noCloneEvent&&e[ct.expando]){r=ct._data(e);for(i in r.events)ct.removeEvent(e,i,r.handle);e.removeAttribute(ct.expando)}"script"===n&&e.text!==t.text?(g(e).text=t.text,m(e)):"object"===n?(e.parentNode&&(e.outerHTML=t.outerHTML),ct.support.html5Clone&&t.innerHTML&&!ct.trim(e.innerHTML)&&(e.innerHTML=t.innerHTML)):"input"===n&&ee.test(t.type)?(e.defaultChecked=e.checked=t.checked,e.value!==t.value&&(e.value=t.value)):"option"===n?e.defaultSelected=e.selected=t.defaultSelected:("input"===n||"textarea"===n)&&(e.defaultValue=t.defaultValue)}}function x(t,n){var i,r,o=0,a=typeof t.getElementsByTagName!==X?t.getElementsByTagName(n||"*"):typeof t.querySelectorAll!==X?t.querySelectorAll(n||"*"):e;if(!a)for(a=[],i=t.childNodes||t;null!=(r=i[o]);o++)!n||ct.nodeName(r,n)?a.push(r):ct.merge(a,x(r,n));return n===e||n&&ct.nodeName(t,n)?ct.merge([t],a):a}function w(t){ee.test(t.type)&&(t.defaultChecked=t.checked)}function S(t,e){if(e in t)return e;for(var n=e.charAt(0).toUpperCase()+e.slice(1),i=e,r=ke.length;r--;)if((e=ke[r]+n)in t)return e;return i}function _(t,e){return t=e||t,"none"===ct.css(t,"display")||!ct.contains(t.ownerDocument,t)}function k(t,e){for(var n,i,r,o=[],a=0,s=t.length;s>a;a++)i=t[a],i.style&&(o[a]=ct._data(i,"olddisplay"),n=i.style.display,e?(o[a]||"none"!==n||(i.style.display=""),""===i.style.display&&_(i)&&(o[a]=ct._data(i,"olddisplay",D(i.nodeName)))):o[a]||(r=_(i),(n&&"none"!==n||!r)&&ct._data(i,"olddisplay",r?n:ct.css(i,"display"))));for(a=0;s>a;a++)i=t[a],i.style&&(e&&"none"!==i.style.display&&""!==i.style.display||(i.style.display=e?o[a]||"":"none"));return t}function C(t,e,n){var i=ve.exec(e);return i?Math.max(0,i[1]-(n||0))+(i[2]||"px"):e}function M(t,e,n,i,r){for(var o=n===(i?"border":"content")?4:"width"===e?1:0,a=0;4>o;o+=2)"margin"===n&&(a+=ct.css(t,n+_e[o],!0,r)),i?("content"===n&&(a-=ct.css(t,"padding"+_e[o],!0,r)),"margin"!==n&&(a-=ct.css(t,"border"+_e[o]+"Width",!0,r))):(a+=ct.css(t,"padding"+_e[o],!0,r),"padding"!==n&&(a+=ct.css(t,"border"+_e[o]+"Width",!0,r)));return a}function T(t,e,n){var i=!0,r="width"===e?t.offsetWidth:t.offsetHeight,o=ce(t),a=ct.support.boxSizing&&"border-box"===ct.css(t,"boxSizing",!1,o);if(0>=r||null==r){if(r=he(t,e,o),(0>r||null==r)&&(r=t.style[e]),ye.test(r))return r;i=a&&(ct.support.boxSizingReliable||r===t.style[e]),r=parseFloat(r)||0}return r+M(t,e,n||(a?"border":"content"),i,o)+"px"}function D(t){var e=Z,n=xe[t];return n||(n=A(t,e),"none"!==n&&n||(ue=(ue||ct("').bind("load",function(){var e,o=t.isArray(n.paramName)?n.paramName:[n.paramName];r.unbind("load").bind("load",function(){var e;try{if(e=r.contents(),!e.length||!e[0].firstChild)throw new Error}catch(t){e=void 0}l(200,"success",{iframe:e}),t('').appendTo(i),window.setTimeout(function(){i.remove()},0)}),i.prop("target",r.prop("name")).prop("action",n.url).prop("method",n.type),n.formData&&t.each(n.formData,function(e,n){t('').prop("name",n.name).val(n.value).appendTo(i)}),n.fileInput&&n.fileInput.length&&"POST"===n.type&&(e=n.fileInput.clone(),n.fileInput.after(function(t){return e[t]}),n.paramName&&n.fileInput.each(function(e){t(this).prop("name",o[e]||n.paramName)}),i.append(n.fileInput).prop("enctype","multipart/form-data").prop("encoding","multipart/form-data"),n.fileInput.removeAttr("form")),i.submit(),e&&e.length&&n.fileInput.each(function(n,i){var r=t(e[n]);t(i).prop("name",r.prop("name")).attr("form",r.attr("form")),r.replaceWith(i)})}),i.append(r).appendTo(document.body)},abort:function(){r&&r.unbind("load").prop("src",a),i&&i.remove()}}}}),t.ajaxSetup({converters:{"iframe text":function(e){return e&&t(e[0].body).text()},"iframe json":function(e){return e&&t.parseJSON(t(e[0].body).text())},"iframe html":function(e){return e&&t(e[0].body).html()},"iframe xml":function(e){var n=e&&e[0];return n&&t.isXMLDoc(n)?n:t.parseXML(n.XMLDocument&&n.XMLDocument.xml||t(n.body).html())},"iframe script":function(e){return e&&t.globalEval(t(e[0].body).text())}}})}),function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.Sweetalert2=e()}(this,function(){"use strict";function t(){if(void 0===arguments[0])return console.error("sweetAlert2 expects at least 1 attribute!"),!1;var t=l({},I);switch(typeof arguments[0]){case"string":t.title=arguments[0],t.text=arguments[1]||"",t.type=arguments[2]||"";break;case"object":l(t,arguments[0]),t.extraParams=arguments[0].extraParams,"email"===t.input&&null===t.inputValidator&&(t.inputValidator=function(t){return new Promise(function(e,n){/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/.test(t)?e():n("Invalid email address")})});break;default:return console.error('Unexpected type of argument! Expected "string" or "object", got '+typeof arguments[0]),!1}N(t);var i=f();return new Promise(function(o,a){function s(t,e){for(var n=0;n0;)I.removeAttribute(I.attributes[0].name);for(var H in t.inputAttributes)I.setAttribute(H,t.inputAttributes[H]);I.className=j,t.inputClass&&b(I,t.inputClass),k(I)}var z;switch(t.input){case"text":case"email":case"password":case"file":I=w(i,r.input),I.value=t.inputValue,I.placeholder=t.inputPlaceholder,I.type=t.input,S(I);break;case"select":var B=w(i,r.select);if(B.innerHTML="",t.inputPlaceholder){var W=document.createElement("option");W.innerHTML=t.inputPlaceholder,W.value="",W.disabled=!0,W.selected=!0,B.appendChild(W)}z=function(e){for(var n in e){var i=document.createElement("option");i.value=n,i.innerHTML=e[n],t.inputValue===n&&(i.selected=!0),B.appendChild(i)}S(B),B.focus()};break;case"radio":var $=w(i,r.radio);$.innerHTML="",z=function(e){for(var n in e){var i=1,o=document.createElement("input"),a=document.createElement("label"),s=document.createElement("span");o.type="radio",o.name=r.radio,o.value=n,o.id=r.radio+"-"+i++,t.inputValue===n&&(o.checked=!0),s.innerHTML=e[n],a.appendChild(o),a.appendChild(s),a.for=o.id,$.appendChild(a)}S($);var l=$.querySelectorAll("input");l.length&&l[0].focus()};break;case"checkbox":var q=w(i,r.checkbox),U=i.querySelector("#"+r.checkbox);U.value=1,U.checked=Boolean(t.inputValue);var Y=q.getElementsByTagName("span");Y.length&&q.removeChild(Y[0]),Y=document.createElement("span"),Y.innerHTML=t.inputPlaceholder,q.appendChild(Y),S(q);break;case"textarea":var G=w(i,r.textarea);G.value=t.inputValue,G.placeholder=t.inputPlaceholder,S(G);break;case null:break;default:console.error('Unexpected type of input! Expected "text" or "email" or "password", "select", "checkbox", "textarea" or "file", got '+typeof arguments[0])}"select"!==t.input&&"radio"!==t.input||(t.inputOptions instanceof Promise?(e.showLoading(),t.inputOptions.then(function(t){e.hideLoading(),z(t)})):"object"==typeof t.inputOptions?z(t.inputOptions):console.error("Unexpected type of inputOptions! Expected object or Promise, got "+t.inputOptions)),R(),F(t.animation,t.onOpen),s(-1,1)})}function e(){var n=arguments,i=f();return null===i&&(e.init(),i=f()),v(i,"visible")&&L(),t.apply(this,n)}var n="swal2-",i=function(t){var e={};for(var i in t)e[t[i]]=n+t[i];return e},r=i(["container","modal","overlay","close","content","spacer","confirm","cancel","icon","image","input","select","radio","checkbox","textarea","validationerror"]),o=i(["success","warning","info","question","error"]),a={title:"",text:"",html:"",type:null,animation:!0,allowOutsideClick:!0,allowEscapeKey:!0,showConfirmButton:!0,showCancelButton:!1,preConfirm:null,confirmButtonText:"OK",confirmButtonColor:"#3085d6",confirmButtonClass:null,cancelButtonText:"Cancel",cancelButtonColor:"#aaa",cancelButtonClass:null,buttonsStyling:!0,reverseButtons:!1,showCloseButton:!1,showLoaderOnConfirm:!1,imageUrl:null,imageWidth:null,imageHeight:null,imageClass:null,timer:null,width:500,padding:20,background:"#fff",input:null,inputPlaceholder:"",inputValue:"",inputOptions:{},inputAutoTrim:!0,inputClass:null,inputAttributes:{},inputValidator:null,onOpen:null,onClose:null},s='
    ',l=function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t},u=function(t,e){t=String(t).replace(/[^0-9a-f]/gi,""),t.length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),e=e||0;for(var n="#",i=0;3>i;i++){var r=parseInt(t.substr(2*i,2),16);r=Math.round(Math.min(Math.max(0,r+r*e),255)).toString(16),n+=("00"+r).substr(r.length)}return n},c=n+"mediaquery",h={previousDocumentClick:null,previousWindowKeyDown:null,previousActiveElement:null},d=function(t){return document.querySelector("."+t)},f=function(){return d(r.modal)},p=function(){return d(r.overlay)},g=function(){return d(r.confirm)},m=function(){return d(r.cancel)},v=function(t,e){return new RegExp(" "+e+" ").test(" "+t.className+" ")},y=function(t){t.focus();var e=t.value;t.value="",t.value=e},b=function(t,e){e&&!v(t,e)&&(t.className+=" "+e)},x=function(t,e){var n=" "+t.className.replace(/[\t\r\n]/g," ")+" ";if(v(t,e)){for(;n.indexOf(" "+e+" ")>=0;)n=n.replace(" "+e+" "," ");t.className=n.replace(/^\s+|\s+$/g,"")}},w=function(t,e){for(var n=0;n1?1:r,n=+new Date,+t.style.opacity<1&&setTimeout(i,e)};i()}},A=function(t,e){if(+t.style.opacity>0){e=e||16;var n=t.style.opacity,i=+new Date,r=function(){var o=new Date-i,a=+t.style.opacity-o/(100*n);t.style.opacity=a,i=+new Date,+t.style.opacity>0?setTimeout(r,e):k(t)};r()}},P=function(t){if("function"==typeof MouseEvent){var e=new MouseEvent("click",{view:window,bubbles:!1,cancelable:!0});t.dispatchEvent(e)}else if(document.createEvent){var n=document.createEvent("MouseEvents");n.initEvent("click",!1,!1),t.dispatchEvent(n)}else document.createEventObject?t.fireEvent("onclick"):"function"==typeof t.onclick&&t.onclick()},E=function(t){"function"==typeof t.stopPropagation?(t.stopPropagation(),t.preventDefault()):window.event&&window.event.hasOwnProperty("cancelBubble")&&(window.event.cancelBubble=!0)},O=function(){var t=document.createElement("div"),e={WebkitAnimation:"webkitAnimationEnd",MozAnimation:"animationend",OAnimation:"oAnimationEnd oanimationend",msAnimation:"MSAnimationEnd",animation:"animationend"};for(var n in e)if(e.hasOwnProperty(n)&&void 0!==t.style[n])return e[n];return!1}(),L=function(){var t=f();window.onkeydown=h.previousWindowKeyDown,document.onclick=h.previousDocumentClick,h.previousActiveElement&&h.previousActiveElement.focus(),clearTimeout(t.timeout);var e=document.getElementsByTagName("head")[0],n=document.getElementById(c);n&&e.removeChild(n)},I=l({},a),N=function(t){var e,n=f();n.style.width=t.width+"px",n.style.padding=t.padding+"px",n.style.marginLeft=-t.width/2+"px",n.style.background=t.background;var i=document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",a.id=c;var s=t.width+parseInt(.05*t.width*2,10);a.innerHTML="@media screen and (max-width: "+s+"px) {."+r.modal+" {width: auto !important;left: 5% !important;right: 5% !important;margin-left: 0 !important;}}",i.appendChild(a);var l=n.querySelector("h2"),u=n.querySelector("."+r.content),h=g(),d=m(),p=n.querySelector("."+r.spacer),v=n.querySelector("."+r.close);if(l.innerHTML=t.title.split("\n").join("
    "),t.text||t.html){if("object"==typeof t.html)if(u.innerHTML="",0 in t.html)for(e=0;e in t.html;e++)u.appendChild(t.html[e]);else u.appendChild(t.html);else u.innerHTML=t.html||t.text.split("\n").join("
    ");_(u)}else C(u);if(t.showCloseButton?_(v):C(v),n.className=r.modal,t.customClass&&b(n,t.customClass),C(n.querySelectorAll("."+r.icon)),t.type){var y=!1;for(var w in o)if(t.type===w){y=!0;break}if(!y)return console.error("Unknown alert type: "+t.type),!1;var S=n.querySelector("."+r.icon+"."+o[t.type]);switch(_(S),t.type){case"success":b(S,"animate"),b(S.querySelector(".tip"),"animate-success-tip"),b(S.querySelector(".long"),"animate-success-long");break;case"error":b(S,"animate-error-icon"),b(S.querySelector(".x-mark"),"animate-x-mark");break;case"warning":b(S,"pulse-warning")}}var k=n.querySelector("."+r.image);t.imageUrl?(k.setAttribute("src",t.imageUrl),_(k),t.imageWidth&&k.setAttribute("width",t.imageWidth),t.imageHeight&&k.setAttribute("height",t.imageHeight),t.imageClass&&b(k,t.imageClass)):C(k),t.showCancelButton?d.style.display="inline-block":C(d),t.showConfirmButton?M(h,"display"):C(h),t.showConfirmButton||t.showCancelButton?_(p):C(p),h.innerHTML=t.confirmButtonText,d.innerHTML=t.cancelButtonText,t.buttonsStyling&&(h.style.backgroundColor=t.confirmButtonColor,d.style.backgroundColor=t.cancelButtonColor),h.className=r.confirm,b(h,t.confirmButtonClass),d.className=r.cancel,b(d,t.cancelButtonClass),t.buttonsStyling?(b(h,"styled"),b(d,"styled")):(x(h,"styled"),x(d,"styled"),h.style.backgroundColor=h.style.borderLeftColor=h.style.borderRightColor="",d.style.backgroundColor=d.style.borderLeftColor=d.style.borderRightColor=""),!0===t.animation?x(n,"no-animation"):b(n,"no-animation")},F=function(t,e){var n=f();t?(D(p(),10),b(n,"show-swal2"),x(n,"hide-swal2")):_(p()),_(n),h.previousActiveElement=document.activeElement,b(n,"visible"),null!==e&&"function"==typeof e&&e.call(this,n)},R=function(){var t=f();t.style.marginTop=T(t)};return e.queue=function(t){return new Promise(function(n,i){!function r(o,a){ -o1)throw new TypeError("isEnabled expects a single character string parameter");switch(t){case"y":return-1!==l.indexOf("Y");case"M":return-1!==l.indexOf("M");case"d":return-1!==l.toLowerCase().indexOf("d");case"h":case"H":return-1!==l.toLowerCase().indexOf("h");case"m":return-1!==l.indexOf("m");case"s":return-1!==l.indexOf("s");default:return!1}},C=function(){return k("h")||k("m")||k("s")},M=function(){return k("y")||k("M")||k("d")},T=function(){var e=t("").append(t("").append(t("").addClass("prev").attr("data-action","previous").append(t("").addClass(i.icons.previous))).append(t("").addClass("picker-switch").attr("data-action","pickerSwitch").attr("colspan",i.calendarWeeks?"6":"5")).append(t("").addClass("next").attr("data-action","next").append(t("").addClass(i.icons.next)))),n=t("").append(t("").append(t("").attr("colspan",i.calendarWeeks?"8":"7")));return[t("
    ").addClass("datepicker-days").append(t("").addClass("table-condensed").append(e).append(t(""))),t("
    ").addClass("datepicker-months").append(t("
    ").addClass("table-condensed").append(e.clone()).append(n.clone())),t("
    ").addClass("datepicker-years").append(t("
    ").addClass("table-condensed").append(e.clone()).append(n.clone())),t("
    ").addClass("datepicker-decades").append(t("
    ").addClass("table-condensed").append(e.clone()).append(n.clone()))]},D=function(){var e=t(""),n=t(""),r=t("");return k("h")&&(e.append(t("
    ").append(t("").attr({href:"#",tabindex:"-1",title:i.tooltips.incrementHour}).addClass("btn").attr("data-action","incrementHours").append(t("").addClass(i.icons.up)))),n.append(t("").append(t("").addClass("timepicker-hour").attr({"data-time-component":"hours",title:i.tooltips.pickHour}).attr("data-action","showHours"))),r.append(t("").append(t("").attr({href:"#",tabindex:"-1",title:i.tooltips.decrementHour}).addClass("btn").attr("data-action","decrementHours").append(t("").addClass(i.icons.down))))),k("m")&&(k("h")&&(e.append(t("").addClass("separator")),n.append(t("").addClass("separator").html(":")),r.append(t("").addClass("separator"))),e.append(t("").append(t("").attr({href:"#",tabindex:"-1",title:i.tooltips.incrementMinute}).addClass("btn").attr("data-action","incrementMinutes").append(t("").addClass(i.icons.up)))),n.append(t("").append(t("").addClass("timepicker-minute").attr({"data-time-component":"minutes",title:i.tooltips.pickMinute}).attr("data-action","showMinutes"))),r.append(t("").append(t("").attr({href:"#",tabindex:"-1",title:i.tooltips.decrementMinute}).addClass("btn").attr("data-action","decrementMinutes").append(t("").addClass(i.icons.down))))),k("s")&&(k("m")&&(e.append(t("").addClass("separator")),n.append(t("").addClass("separator").html(":")),r.append(t("").addClass("separator"))),e.append(t("").append(t("").attr({href:"#",tabindex:"-1",title:i.tooltips.incrementSecond}).addClass("btn").attr("data-action","incrementSeconds").append(t("").addClass(i.icons.up)))),n.append(t("").append(t("").addClass("timepicker-second").attr({"data-time-component":"seconds",title:i.tooltips.pickSecond}).attr("data-action","showSeconds"))),r.append(t("").append(t("").attr({href:"#",tabindex:"-1",title:i.tooltips.decrementSecond}).addClass("btn").attr("data-action","decrementSeconds").append(t("").addClass(i.icons.down))))),s||(e.append(t("").addClass("separator")),n.append(t("").append(t("").addClass("separator"))),t("
    ").addClass("timepicker-picker").append(t("").addClass("table-condensed").append([e,n,r]))},A=function(){var e=t("
    ").addClass("timepicker-hours").append(t("
    ").addClass("table-condensed")),n=t("
    ").addClass("timepicker-minutes").append(t("
    ").addClass("table-condensed")),i=t("
    ").addClass("timepicker-seconds").append(t("
    ").addClass("table-condensed")),r=[D()];return k("h")&&r.push(e),k("m")&&r.push(n),k("s")&&r.push(i),r},P=function(){var e=[];return i.showTodayButton&&e.push(t("
    ").append(t("").attr({"data-action":"today",title:i.tooltips.today}).append(t("").addClass(i.icons.today)))),!i.sideBySide&&M()&&C()&&e.push(t("").append(t("").attr({"data-action":"togglePicker",title:i.tooltips.selectTime}).append(t("").addClass(i.icons.time)))),i.showClear&&e.push(t("").append(t("").attr({"data-action":"clear",title:i.tooltips.clear}).append(t("").addClass(i.icons.clear)))),i.showClose&&e.push(t("").append(t("").attr({"data-action":"close",title:i.tooltips.close}).append(t("").addClass(i.icons.close)))),t("").addClass("table-condensed").append(t("").append(t("").append(e)))},E=function(){var e=t("
    ").addClass("bootstrap-datetimepicker-widget dropdown-menu"),n=t("
    ").addClass("datepicker").append(T()),r=t("
    ").addClass("timepicker").append(A()),o=t("
      ").addClass("list-unstyled"),a=t("
    • ").addClass("picker-switch"+(i.collapse?" accordion-toggle":"")).append(P());return i.inline&&e.removeClass("dropdown-menu"),s&&e.addClass("usetwentyfour"),k("s")&&!s&&e.addClass("wider"),i.sideBySide&&M()&&C()?(e.addClass("timepicker-sbs"),"top"===i.toolbarPlacement&&e.append(a),e.append(t("
      ").addClass("row").append(n.addClass("col-md-6")).append(r.addClass("col-md-6"))),"bottom"===i.toolbarPlacement&&e.append(a),e):("top"===i.toolbarPlacement&&o.append(a),M()&&o.append(t("
    • ").addClass(i.collapse&&C()?"collapse in":"").append(n)),"default"===i.toolbarPlacement&&o.append(a),C()&&o.append(t("
    • ").addClass(i.collapse&&M()?"collapse":"").append(r)),"bottom"===i.toolbarPlacement&&o.append(a),e.append(o))},O=function(){var e,r=(f||n).position(),o=(f||n).offset(),a=i.widgetPositioning.vertical,s=i.widgetPositioning.horizontal;if(i.widgetParent)e=i.widgetParent.append(p);else if(n.is("input"))e=n.after(p).parent();else{if(i.inline)return void(e=n.append(p));e=n,n.children().first().after(p)}if("auto"===a&&(a=o.top+1.5*p.height()>=t(window).height()+t(window).scrollTop()&&p.height()+n.outerHeight()t(window).width()?"right":"left"),"top"===a?p.addClass("top").removeClass("bottom"):p.addClass("bottom").removeClass("top"),"right"===s?p.addClass("pull-right"):p.removeClass("pull-right"),"relative"!==e.css("position")&&(e=e.parents().filter(function(){return"relative"===t(this).css("position")}).first()),0===e.length)throw new Error("datetimepicker component should be placed within a relative positioned container");p.css({top:"top"===a?"auto":r.top+n.outerHeight(),bottom:"top"===a?r.top+n.outerHeight():"auto",left:"left"===s?e===n?0:r.left:"auto",right:"left"===s?"auto":e.outerWidth()-n.outerWidth()-(e===n?0:r.left)})},L=function(t){"dp.change"===t.type&&(t.date&&t.date.isSame(t.oldDate)||!t.date&&!t.oldDate)||n.trigger(t)},I=function(t){"y"===t&&(t="YYYY"),L({type:"dp.update",change:t,viewDate:o.clone()})},N=function(t){p&&(t&&(c=Math.max(g,Math.min(3,c+t))),p.find(".datepicker > div").hide().filter(".datepicker-"+m[c].clsName).show())},F=function(){var e=t("
    "),n=o.clone().startOf("w").startOf("d");for(!0===i.calendarWeeks&&e.append(t(""),i.calendarWeeks&&n.append('"),c.push(n)),a="",e.isBefore(o,"M")&&(a+=" old"),e.isAfter(o,"M")&&(a+=" new"),e.isSame(r,"d")&&!d&&(a+=" active"),B(e,"d")||(a+=" disabled"),e.isSame(_(),"d")&&(a+=" today"),0!==e.day()&&6!==e.day()||(a+=" weekend"),n.append('"),e.add(1,"d");l.find("tbody").empty().append(c),$(),q(),U()}},G=function(){var e=p.find(".timepicker-hours table"),n=o.clone().startOf("d"),i=[],r=t("");for(o.hour()>11&&!s&&n.hour(12);n.isSame(o,"d")&&(s||o.hour()<12&&n.hour()<12||o.hour()>11);)n.hour()%4==0&&(r=t(""),i.push(r)),r.append('"),n.add(1,"h");e.empty().append(i)},X=function(){for(var e=p.find(".timepicker-minutes table"),n=o.clone().startOf("h"),r=[],a=t(""),s=1===i.stepping?5:i.stepping;o.isSame(n,"h");)n.minute()%(4*s)==0&&(a=t(""),r.push(a)),a.append('"),n.add(s,"m");e.empty().append(r)},V=function(){for(var e=p.find(".timepicker-seconds table"),n=o.clone().startOf("m"),i=[],r=t("");o.isSame(n,"m");)n.second()%20==0&&(r=t(""),i.push(r)),r.append('"),n.add(5,"s");e.empty().append(i)},Z=function(){var t,e,n=p.find(".timepicker span[data-time-component]");s||(t=p.find(".timepicker [data-action=togglePeriod]"),e=r.clone().add(r.hours()>=12?-12:12,"h"),t.text(r.format("A")),B(e,"h")?t.removeClass("disabled"):t.addClass("disabled")),n.filter("[data-time-component=hours]").text(r.format(s?"HH":"hh")),n.filter("[data-time-component=minutes]").text(r.format("mm")),n.filter("[data-time-component=seconds]").text(r.format("ss")),G(),X(),V()},K=function(){p&&(Y(),Z())},J=function(t){var e=d?null:r;if(!t)return d=!0,a.val(""),n.data("date",""),L({type:"dp.change",date:!1,oldDate:e}),void K();t=t.clone().locale(i.locale),1!==i.stepping&&t.minutes(Math.round(t.minutes()/i.stepping)*i.stepping%60).seconds(0),B(t)?(r=t,o=r.clone(),a.val(r.format(l)),n.data("date",r.format(l)),d=!1,K(),L({type:"dp.change",date:r.clone(),oldDate:e})):(i.keepInvalid||a.val(d?"":r.format(l)),L({type:"dp.error",date:t}))},Q=function(){var e=!1;return p?(p.find(".collapse").each(function(){var n=t(this).data("collapse");return!n||!n.transitioning||(e=!0,!1)}),e?h:(f&&f.hasClass("btn")&&f.toggleClass("active"),p.hide(),t(window).off("resize",O),p.off("click","[data-action]"),p.off("mousedown",!1),p.remove(),p=!1,L({type:"dp.hide",date:r.clone()}),a.blur(),h)):h},tt=function(){J(null)},et={next:function(){var t=m[c].navFnc;o.add(m[c].navStep,t),Y(),I(t)},previous:function(){var t=m[c].navFnc;o.subtract(m[c].navStep,t),Y(),I(t)},pickerSwitch:function(){N(1)},selectMonth:function(e){var n=t(e.target).closest("tbody").find("span").index(t(e.target));o.month(n),c===g?(J(r.clone().year(o.year()).month(o.month())),i.inline||Q()):(N(-1),Y()),I("M")},selectYear:function(e){var n=parseInt(t(e.target).text(),10)||0;o.year(n),c===g?(J(r.clone().year(o.year())),i.inline||Q()):(N(-1),Y()),I("YYYY")},selectDecade:function(e){var n=parseInt(t(e.target).data("selection"),10)||0;o.year(n),c===g?(J(r.clone().year(o.year())),i.inline||Q()):(N(-1),Y()),I("YYYY")},selectDay:function(e){var n=o.clone();t(e.target).is(".old")&&n.subtract(1,"M"),t(e.target).is(".new")&&n.add(1,"M"),J(n.date(parseInt(t(e.target).text(),10))),C()||i.keepOpen||i.inline||Q()},incrementHours:function(){var t=r.clone().add(1,"h");B(t,"h")&&J(t)},incrementMinutes:function(){var t=r.clone().add(i.stepping,"m");B(t,"m")&&J(t)},incrementSeconds:function(){var t=r.clone().add(1,"s");B(t,"s")&&J(t)},decrementHours:function(){var t=r.clone().subtract(1,"h");B(t,"h")&&J(t)},decrementMinutes:function(){var t=r.clone().subtract(i.stepping,"m");B(t,"m")&&J(t)},decrementSeconds:function(){var t=r.clone().subtract(1,"s");B(t,"s")&&J(t)},togglePeriod:function(){J(r.clone().add(r.hours()>=12?-12:12,"h"))},togglePicker:function(e){var n,r=t(e.target),o=r.closest("ul"),a=o.find(".in"),s=o.find(".collapse:not(.in)");if(a&&a.length){if((n=a.data("collapse"))&&n.transitioning)return;a.collapse?(a.collapse("hide"),s.collapse("show")):(a.removeClass("in"),s.addClass("in")),r.is("span")?r.toggleClass(i.icons.time+" "+i.icons.date):r.find("span").toggleClass(i.icons.time+" "+i.icons.date)}},showPicker:function(){p.find(".timepicker > div:not(.timepicker-picker)").hide(),p.find(".timepicker .timepicker-picker").show()},showHours:function(){p.find(".timepicker .timepicker-picker").hide(),p.find(".timepicker .timepicker-hours").show()},showMinutes:function(){p.find(".timepicker .timepicker-picker").hide(),p.find(".timepicker .timepicker-minutes").show()},showSeconds:function(){p.find(".timepicker .timepicker-picker").hide(),p.find(".timepicker .timepicker-seconds").show()},selectHour:function(e){var n=parseInt(t(e.target).text(),10);s||(r.hours()>=12?12!==n&&(n+=12):12===n&&(n=0)),J(r.clone().hours(n)),et.showPicker.call(h)},selectMinute:function(e){J(r.clone().minutes(parseInt(t(e.target).text(),10))),et.showPicker.call(h)},selectSecond:function(e){J(r.clone().seconds(parseInt(t(e.target).text(),10))),et.showPicker.call(h)},clear:tt,today:function(){var t=_();B(t,"d")&&J(t)},close:Q},nt=function(e){return!t(e.currentTarget).is(".disabled")&&(et[t(e.currentTarget).data("action")].apply(h,arguments),!1)},it=function(){var e,n={year:function(t){return t.month(0).date(1).hours(0).seconds(0).minutes(0)},month:function(t){return t.date(1).hours(0).seconds(0).minutes(0)},day:function(t){return t.hours(0).seconds(0).minutes(0)},hour:function(t){return t.seconds(0).minutes(0)},minute:function(t){return t.seconds(0)}};return a.prop("disabled")||!i.ignoreReadonly&&a.prop("readonly")||p?h:(void 0!==a.val()&&0!==a.val().trim().length?J(ot(a.val().trim())):i.useCurrent&&d&&(a.is("input")&&0===a.val().trim().length||i.inline)&&(e=_(),"string"==typeof i.useCurrent&&(e=n[i.useCurrent](e)),J(e)),p=E(),F(),W(),p.find(".timepicker-hours").hide(),p.find(".timepicker-minutes").hide(),p.find(".timepicker-seconds").hide(),K(),N(),t(window).on("resize",O),p.on("click","[data-action]",nt),p.on("mousedown",!1),f&&f.hasClass("btn")&&f.toggleClass("active"),p.show(),O(),i.focusOnShow&&!a.is(":focus")&&a.focus(),L({type:"dp.show"}),h)},rt=function(){return p?Q():it()},ot=function(t){return t=void 0===i.parseInputDate?e.isMoment(t)||t instanceof Date?e(t):_(t):i.parseInputDate(t),t.locale(i.locale),t},at=function(t){var e,n,r,o,a=null,s=[],l={},u=t.which;S[u]="p";for(e in S)S.hasOwnProperty(e)&&"p"===S[e]&&(s.push(e),parseInt(e,10)!==u&&(l[e]=!0));for(e in i.keyBinds)if(i.keyBinds.hasOwnProperty(e)&&"function"==typeof i.keyBinds[e]&&(r=e.split(" "),r.length===s.length&&w[u]===r[r.length-1])){for(o=!0,n=r.length-2;n>=0;n--)if(!(w[r[n]]in l)){o=!1;break}if(o){a=i.keyBinds[e];break}}a&&(a.call(h,p),t.stopPropagation(),t.preventDefault())},st=function(t){S[t.which]="r",t.stopPropagation(),t.preventDefault()},lt=function(e){var n=t(e.target).val().trim(),i=n?ot(n):null;return J(i),e.stopImmediatePropagation(),!1},ut=function(){a.off({change:lt,blur:blur,keydown:at,keyup:st,focus:i.allowInputToggle?Q:""}),n.is("input")?a.off({focus:it}):f&&(f.off("click",rt),f.off("mousedown",!1))},ct=function(e){var n={};return t.each(e,function(){var t=ot(this);t.isValid()&&(n[t.format("YYYY-MM-DD")]=!0)}),!!Object.keys(n).length&&n},ht=function(e){var n={};return t.each(e,function(){n[this]=!0}),!!Object.keys(n).length&&n},dt=function(){var t=i.format||"L LT";l=t.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,function(t){return(r.localeData().longDateFormat(t)||t).replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,function(t){return r.localeData().longDateFormat(t)||t})}),u=i.extraFormats?i.extraFormats.slice():[],u.indexOf(t)<0&&u.indexOf(l)<0&&u.push(l),s=l.toLowerCase().indexOf("a")<1&&l.replace(/\[.*?\]/g,"").indexOf("h")<1,k("y")&&(g=2),k("M")&&(g=1),k("d")&&(g=0),c=Math.max(g,c),d||J(r)};if(h.destroy=function(){Q(),ut(),n.removeData("DateTimePicker"),n.removeData("date")},h.toggle=rt,h.show=it,h.hide=Q,h.disable=function(){return Q(),f&&f.hasClass("btn")&&f.addClass("disabled"),a.prop("disabled",!0),h},h.enable=function(){return f&&f.hasClass("btn")&&f.removeClass("disabled"),a.prop("disabled",!1),h},h.ignoreReadonly=function(t){if(0===arguments.length)return i.ignoreReadonly;if("boolean"!=typeof t)throw new TypeError("ignoreReadonly () expects a boolean parameter");return i.ignoreReadonly=t,h},h.options=function(e){if(0===arguments.length)return t.extend(!0,{},i);if(!(e instanceof Object))throw new TypeError("options() options parameter should be an object");return t.extend(!0,i,e),t.each(i,function(t,e){if(void 0===h[t])throw new TypeError("option "+t+" is not recognized!");h[t](e)}),h},h.date=function(t){if(0===arguments.length)return d?null:r.clone();if(!(null===t||"string"==typeof t||e.isMoment(t)||t instanceof Date))throw new TypeError("date() parameter must be one of [null, string, moment or Date]");return J(null===t?null:ot(t)),h},h.format=function(t){if(0===arguments.length)return i.format;if("string"!=typeof t&&("boolean"!=typeof t||!1!==t))throw new TypeError("format() expects a sting or boolean:false parameter "+t);return i.format=t,l&&dt(),h},h.timeZone=function(t){return 0===arguments.length?i.timeZone:(i.timeZone=t,h)},h.dayViewHeaderFormat=function(t){if(0===arguments.length)return i.dayViewHeaderFormat;if("string"!=typeof t)throw new TypeError("dayViewHeaderFormat() expects a string parameter");return i.dayViewHeaderFormat=t,h},h.extraFormats=function(t){if(0===arguments.length)return i.extraFormats;if(!1!==t&&!(t instanceof Array))throw new TypeError("extraFormats() expects an array or false parameter");return i.extraFormats=t,u&&dt(),h},h.disabledDates=function(e){if(0===arguments.length)return i.disabledDates?t.extend({},i.disabledDates):i.disabledDates;if(!e)return i.disabledDates=!1,K(),h;if(!(e instanceof Array))throw new TypeError("disabledDates() expects an array parameter");return i.disabledDates=ct(e),i.enabledDates=!1,K(),h},h.enabledDates=function(e){if(0===arguments.length)return i.enabledDates?t.extend({},i.enabledDates):i.enabledDates;if(!e)return i.enabledDates=!1,K(),h;if(!(e instanceof Array))throw new TypeError("enabledDates() expects an array parameter");return i.enabledDates=ct(e),i.disabledDates=!1,K(),h},h.daysOfWeekDisabled=function(t){if(0===arguments.length)return i.daysOfWeekDisabled.splice(0);if("boolean"==typeof t&&!t)return i.daysOfWeekDisabled=!1,K(),h;if(!(t instanceof Array))throw new TypeError("daysOfWeekDisabled() expects an array parameter");if(i.daysOfWeekDisabled=t.reduce(function(t,e){return(e=parseInt(e,10))>6||e<0||isNaN(e)?t:(-1===t.indexOf(e)&&t.push(e),t)},[]).sort(),i.useCurrent&&!i.keepInvalid){for(var e=0;!B(r,"d");){if(r.add(1,"d"),7===e)throw"Tried 7 times to find a valid date";e++}J(r)}return K(),h},h.maxDate=function(t){if(0===arguments.length)return i.maxDate?i.maxDate.clone():i.maxDate;if("boolean"==typeof t&&!1===t)return i.maxDate=!1,K(),h;"string"==typeof t&&("now"!==t&&"moment"!==t||(t=_()));var e=ot(t);if(!e.isValid())throw new TypeError("maxDate() Could not parse date parameter: "+t);if(i.minDate&&e.isBefore(i.minDate))throw new TypeError("maxDate() date parameter is before options.minDate: "+e.format(l));return i.maxDate=e,i.useCurrent&&!i.keepInvalid&&r.isAfter(t)&&J(i.maxDate),o.isAfter(e)&&(o=e.clone().subtract(i.stepping,"m")),K(),h},h.minDate=function(t){if(0===arguments.length)return i.minDate?i.minDate.clone():i.minDate;if("boolean"==typeof t&&!1===t)return i.minDate=!1,K(),h;"string"==typeof t&&("now"!==t&&"moment"!==t||(t=_()));var e=ot(t);if(!e.isValid())throw new TypeError("minDate() Could not parse date parameter: "+t);if(i.maxDate&&e.isAfter(i.maxDate))throw new TypeError("minDate() date parameter is after options.maxDate: "+e.format(l));return i.minDate=e,i.useCurrent&&!i.keepInvalid&&r.isBefore(t)&&J(i.minDate),o.isBefore(e)&&(o=e.clone().add(i.stepping,"m")),K(),h},h.defaultDate=function(t){if(0===arguments.length)return i.defaultDate?i.defaultDate.clone():i.defaultDate;if(!t)return i.defaultDate=!1,h;"string"==typeof t&&("now"!==t&&"moment"!==t||(t=_()));var e=ot(t);if(!e.isValid())throw new TypeError("defaultDate() Could not parse date parameter: "+t);if(!B(e))throw new TypeError("defaultDate() date passed is invalid according to component setup validations");return i.defaultDate=e,(i.defaultDate&&i.inline||""===a.val().trim())&&J(i.defaultDate),h},h.locale=function(t){if(0===arguments.length)return i.locale;if(!e.localeData(t))throw new TypeError("locale() locale "+t+" is not loaded from moment locales!");return i.locale=t,r.locale(i.locale),o.locale(i.locale),l&&dt(),p&&(Q(),it()),h},h.stepping=function(t){return 0===arguments.length?i.stepping:(t=parseInt(t,10),(isNaN(t)||t<1)&&(t=1),i.stepping=t,h)},h.useCurrent=function(t){var e=["year","month","day","hour","minute"];if(0===arguments.length)return i.useCurrent;if("boolean"!=typeof t&&"string"!=typeof t)throw new TypeError("useCurrent() expects a boolean or string parameter");if("string"==typeof t&&-1===e.indexOf(t.toLowerCase()))throw new TypeError("useCurrent() expects a string parameter of "+e.join(", "));return i.useCurrent=t,h},h.collapse=function(t){if(0===arguments.length)return i.collapse;if("boolean"!=typeof t)throw new TypeError("collapse() expects a boolean parameter");return i.collapse===t?h:(i.collapse=t,p&&(Q(),it()),h)},h.icons=function(e){if(0===arguments.length)return t.extend({},i.icons);if(!(e instanceof Object))throw new TypeError("icons() expects parameter to be an Object");return t.extend(i.icons,e),p&&(Q(),it()),h},h.tooltips=function(e){if(0===arguments.length)return t.extend({},i.tooltips);if(!(e instanceof Object))throw new TypeError("tooltips() expects parameter to be an Object");return t.extend(i.tooltips,e),p&&(Q(),it()),h},h.useStrict=function(t){if(0===arguments.length)return i.useStrict;if("boolean"!=typeof t)throw new TypeError("useStrict() expects a boolean parameter");return i.useStrict=t,h},h.sideBySide=function(t){if(0===arguments.length)return i.sideBySide;if("boolean"!=typeof t)throw new TypeError("sideBySide() expects a boolean parameter");return i.sideBySide=t,p&&(Q(),it()),h},h.viewMode=function(t){if(0===arguments.length)return i.viewMode;if("string"!=typeof t)throw new TypeError("viewMode() expects a string parameter");if(-1===v.indexOf(t))throw new TypeError("viewMode() parameter must be one of ("+v.join(", ")+") value");return i.viewMode=t,c=Math.max(v.indexOf(t),g),N(),h},h.toolbarPlacement=function(t){if(0===arguments.length)return i.toolbarPlacement;if("string"!=typeof t)throw new TypeError("toolbarPlacement() expects a string parameter");if(-1===x.indexOf(t))throw new TypeError("toolbarPlacement() parameter must be one of ("+x.join(", ")+") value");return i.toolbarPlacement=t,p&&(Q(),it()),h},h.widgetPositioning=function(e){if(0===arguments.length)return t.extend({},i.widgetPositioning);if("[object Object]"!=={}.toString.call(e))throw new TypeError("widgetPositioning() expects an object variable");if(e.horizontal){if("string"!=typeof e.horizontal)throw new TypeError("widgetPositioning() horizontal variable must be a string");if(e.horizontal=e.horizontal.toLowerCase(),-1===b.indexOf(e.horizontal))throw new TypeError("widgetPositioning() expects horizontal parameter to be one of ("+b.join(", ")+")");i.widgetPositioning.horizontal=e.horizontal}if(e.vertical){if("string"!=typeof e.vertical)throw new TypeError("widgetPositioning() vertical variable must be a string");if(e.vertical=e.vertical.toLowerCase(),-1===y.indexOf(e.vertical))throw new TypeError("widgetPositioning() expects vertical parameter to be one of ("+y.join(", ")+")");i.widgetPositioning.vertical=e.vertical}return K(),h},h.calendarWeeks=function(t){if(0===arguments.length)return i.calendarWeeks;if("boolean"!=typeof t)throw new TypeError("calendarWeeks() expects parameter to be a boolean value");return i.calendarWeeks=t,K(),h},h.showTodayButton=function(t){if(0===arguments.length)return i.showTodayButton;if("boolean"!=typeof t)throw new TypeError("showTodayButton() expects a boolean parameter");return i.showTodayButton=t,p&&(Q(),it()),h},h.showClear=function(t){if(0===arguments.length)return i.showClear;if("boolean"!=typeof t)throw new TypeError("showClear() expects a boolean parameter");return i.showClear=t,p&&(Q(),it()),h},h.widgetParent=function(e){if(0===arguments.length)return i.widgetParent;if("string"==typeof e&&(e=t(e)),null!==e&&"string"!=typeof e&&!(e instanceof t))throw new TypeError("widgetParent() expects a string or a jQuery object parameter");return i.widgetParent=e,p&&(Q(),it()),h},h.keepOpen=function(t){ -if(0===arguments.length)return i.keepOpen;if("boolean"!=typeof t)throw new TypeError("keepOpen() expects a boolean parameter");return i.keepOpen=t,h},h.focusOnShow=function(t){if(0===arguments.length)return i.focusOnShow;if("boolean"!=typeof t)throw new TypeError("focusOnShow() expects a boolean parameter");return i.focusOnShow=t,h},h.inline=function(t){if(0===arguments.length)return i.inline;if("boolean"!=typeof t)throw new TypeError("inline() expects a boolean parameter");return i.inline=t,h},h.clear=function(){return tt(),h},h.keyBinds=function(t){return i.keyBinds=t,h},h.getMoment=function(t){return _(t)},h.debug=function(t){if("boolean"!=typeof t)throw new TypeError("debug() expects a boolean parameter");return i.debug=t,h},h.allowInputToggle=function(t){if(0===arguments.length)return i.allowInputToggle;if("boolean"!=typeof t)throw new TypeError("allowInputToggle() expects a boolean parameter");return i.allowInputToggle=t,h},h.showClose=function(t){if(0===arguments.length)return i.showClose;if("boolean"!=typeof t)throw new TypeError("showClose() expects a boolean parameter");return i.showClose=t,h},h.keepInvalid=function(t){if(0===arguments.length)return i.keepInvalid;if("boolean"!=typeof t)throw new TypeError("keepInvalid() expects a boolean parameter");return i.keepInvalid=t,h},h.datepickerInput=function(t){if(0===arguments.length)return i.datepickerInput;if("string"!=typeof t)throw new TypeError("datepickerInput() expects a string parameter");return i.datepickerInput=t,h},h.parseInputDate=function(t){if(0===arguments.length)return i.parseInputDate;if("function"!=typeof t)throw new TypeError("parseInputDate() sholud be as function");return i.parseInputDate=t,h},h.disabledTimeIntervals=function(e){if(0===arguments.length)return i.disabledTimeIntervals?t.extend({},i.disabledTimeIntervals):i.disabledTimeIntervals;if(!e)return i.disabledTimeIntervals=!1,K(),h;if(!(e instanceof Array))throw new TypeError("disabledTimeIntervals() expects an array parameter");return i.disabledTimeIntervals=e,K(),h},h.disabledHours=function(e){if(0===arguments.length)return i.disabledHours?t.extend({},i.disabledHours):i.disabledHours;if(!e)return i.disabledHours=!1,K(),h;if(!(e instanceof Array))throw new TypeError("disabledHours() expects an array parameter");if(i.disabledHours=ht(e),i.enabledHours=!1,i.useCurrent&&!i.keepInvalid){for(var n=0;!B(r,"h");){if(r.add(1,"h"),24===n)throw"Tried 24 times to find a valid date";n++}J(r)}return K(),h},h.enabledHours=function(e){if(0===arguments.length)return i.enabledHours?t.extend({},i.enabledHours):i.enabledHours;if(!e)return i.enabledHours=!1,K(),h;if(!(e instanceof Array))throw new TypeError("enabledHours() expects an array parameter");if(i.enabledHours=ht(e),i.disabledHours=!1,i.useCurrent&&!i.keepInvalid){for(var n=0;!B(r,"h");){if(r.add(1,"h"),24===n)throw"Tried 24 times to find a valid date";n++}J(r)}return K(),h},h.viewDate=function(t){if(0===arguments.length)return o.clone();if(!t)return o=r.clone(),h;if(!("string"==typeof t||e.isMoment(t)||t instanceof Date))throw new TypeError("viewDate() parameter must be one of [string, moment or Date]");return o=ot(t),I(),h},n.is("input"))a=n;else if(a=n.find(i.datepickerInput),0===a.size())a=n.find("input");else if(!a.is("input"))throw new Error('CSS class "'+i.datepickerInput+'" cannot be applied to non input element');if(n.hasClass("input-group")&&(f=0===n.find(".datepickerbutton").size()?n.find(".input-group-addon"):n.find(".datepickerbutton")),!i.inline&&!a.is("input"))throw new Error("Could not initialize DateTimePicker without an input element");return r=_(),o=r.clone(),t.extend(!0,i,function(){var e,r={};return e=n.is("input")||i.inline?n.data():n.find("input").data(),e.dateOptions&&e.dateOptions instanceof Object&&(r=t.extend(!0,r,e.dateOptions)),t.each(i,function(t){var n="date"+t.charAt(0).toUpperCase()+t.slice(1);void 0!==e[n]&&(r[t]=e[n])}),r}()),h.options(i),dt(),function(){a.on({change:lt,blur:i.debug?"":Q,keydown:at,keyup:st,focus:i.allowInputToggle?it:""}),n.is("input")?a.on({focus:it}):f&&(f.on("click",rt),f.on("mousedown",!1))}(),a.prop("disabled")&&h.disable(),a.is("input")&&0!==a.val().trim().length?J(ot(a.val().trim())):i.defaultDate&&void 0===a.attr("placeholder")&&J(i.defaultDate),i.inline&&it(),h};t.fn.datetimepicker=function(e){return this.each(function(){var i=t(this);i.data("DateTimePicker")||(e=t.extend(!0,{},t.fn.datetimepicker.defaults,e),i.data("DateTimePicker",n(i,e)))})},t.fn.datetimepicker.defaults={timeZone:"Etc/UTC",format:!1,dayViewHeaderFormat:"MMMM YYYY",extraFormats:!1,stepping:1,minDate:!1,maxDate:!1,useCurrent:!0,collapse:!0,locale:e.locale(),defaultDate:!1,disabledDates:!1,enabledDates:!1,icons:{time:"glyphicon glyphicon-time",date:"glyphicon glyphicon-calendar",up:"glyphicon glyphicon-chevron-up",down:"glyphicon glyphicon-chevron-down",previous:"glyphicon glyphicon-chevron-left",next:"glyphicon glyphicon-chevron-right",today:"glyphicon glyphicon-screenshot",clear:"glyphicon glyphicon-trash",close:"glyphicon glyphicon-remove"},tooltips:{today:"Go to today",clear:"Clear selection",close:"Close the picker",selectMonth:"Select Month",prevMonth:"Previous Month",nextMonth:"Next Month",selectYear:"Select Year",prevYear:"Previous Year",nextYear:"Next Year",selectDecade:"Select Decade",prevDecade:"Previous Decade",nextDecade:"Next Decade",prevCentury:"Previous Century",nextCentury:"Next Century",pickHour:"Pick Hour",incrementHour:"Increment Hour",decrementHour:"Decrement Hour",pickMinute:"Pick Minute",incrementMinute:"Increment Minute",decrementMinute:"Decrement Minute",pickSecond:"Pick Second",incrementSecond:"Increment Second",decrementSecond:"Decrement Second",togglePeriod:"Toggle Period",selectTime:"Select Time"},useStrict:!1,sideBySide:!1,daysOfWeekDisabled:!1,calendarWeeks:!1,viewMode:"days",toolbarPlacement:"default",showTodayButton:!1,showClear:!1,showClose:!1,widgetPositioning:{horizontal:"auto",vertical:"auto"},widgetParent:null,ignoreReadonly:!1,keepOpen:!1,focusOnShow:!0,inline:!1,keepInvalid:!1,datepickerInput:".datepickerinput",keyBinds:{up:function(t){if(t){var e=this.date()||this.getMoment();t.find(".datepicker").is(":visible")?this.date(e.clone().subtract(7,"d")):this.date(e.clone().add(this.stepping(),"m"))}},down:function(t){if(!t)return void this.show();var e=this.date()||this.getMoment();t.find(".datepicker").is(":visible")?this.date(e.clone().add(7,"d")):this.date(e.clone().subtract(this.stepping(),"m"))},"control up":function(t){if(t){var e=this.date()||this.getMoment();t.find(".datepicker").is(":visible")?this.date(e.clone().subtract(1,"y")):this.date(e.clone().add(1,"h"))}},"control down":function(t){if(t){var e=this.date()||this.getMoment();t.find(".datepicker").is(":visible")?this.date(e.clone().add(1,"y")):this.date(e.clone().subtract(1,"h"))}},left:function(t){if(t){var e=this.date()||this.getMoment();t.find(".datepicker").is(":visible")&&this.date(e.clone().subtract(1,"d"))}},right:function(t){if(t){var e=this.date()||this.getMoment();t.find(".datepicker").is(":visible")&&this.date(e.clone().add(1,"d"))}},pageUp:function(t){if(t){var e=this.date()||this.getMoment();t.find(".datepicker").is(":visible")&&this.date(e.clone().subtract(1,"M"))}},pageDown:function(t){if(t){var e=this.date()||this.getMoment();t.find(".datepicker").is(":visible")&&this.date(e.clone().add(1,"M"))}},enter:function(){this.hide()},escape:function(){this.hide()},"control space":function(t){t.find(".timepicker").is(":visible")&&t.find('.btn[data-action="togglePeriod"]').click()},t:function(){this.date(this.getMoment())},delete:function(){this.clear()}},debug:!1,allowInputToggle:!1,disabledTimeIntervals:!1,disabledHours:!1,enabledHours:!1,viewDate:!1}}),function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t("object"==typeof exports?require("jquery"):jQuery)}(function(t){var e=function(){if(t&&t.fn&&t.fn.select2&&t.fn.select2.amd)var e=t.fn.select2.amd;var e;return function(){if(!e||!e.requirejs){e?n=e:e={};var t,n,i;!function(e){function r(t,e){return x.call(t,e)}function o(t,e){var n,i,r,o,a,s,l,u,c,h,d,f=e&&e.split("/"),p=y.map,g=p&&p["*"]||{};if(t&&"."===t.charAt(0))if(e){for(t=t.split("/"),a=t.length-1,y.nodeIdCompat&&S.test(t[a])&&(t[a]=t[a].replace(S,"")),t=f.slice(0,f.length-1).concat(t),c=0;c0&&(t.splice(c-1,2),c-=2)}t=t.join("/")}else 0===t.indexOf("./")&&(t=t.substring(2));if((f||g)&&p){for(n=t.split("/"),c=n.length;c>0;c-=1){if(i=n.slice(0,c).join("/"),f)for(h=f.length;h>0;h-=1)if((r=p[f.slice(0,h).join("/")])&&(r=r[i])){o=r,s=c;break}if(o)break;!l&&g&&g[i]&&(l=g[i],u=c)}!o&&l&&(o=l,s=u),o&&(n.splice(0,s,o),t=n.join("/"))}return t}function a(t,n){return function(){var i=w.call(arguments,0);return"string"!=typeof i[0]&&1===i.length&&i.push(null),f.apply(e,i.concat([t,n]))}}function s(t){return function(e){return o(e,t)}}function l(t){return function(e){m[t]=e}}function u(t){if(r(v,t)){var n=v[t];delete v[t],b[t]=!0,d.apply(e,n)}if(!r(m,t)&&!r(b,t))throw new Error("No "+t);return m[t]}function c(t){var e,n=t?t.indexOf("!"):-1;return n>-1&&(e=t.substring(0,n),t=t.substring(n+1,t.length)),[e,t]}function h(t){return function(){return y&&y.config&&y.config[t]||{}}}var d,f,p,g,m={},v={},y={},b={},x=Object.prototype.hasOwnProperty,w=[].slice,S=/\.js$/;p=function(t,e){var n,i=c(t),r=i[0];return t=i[1],r&&(r=o(r,e),n=u(r)),r?t=n&&n.normalize?n.normalize(t,s(e)):o(t,e):(t=o(t,e),i=c(t),r=i[0],t=i[1],r&&(n=u(r))),{f:r?r+"!"+t:t,n:t,pr:r,p:n}},g={require:function(t){return a(t)},exports:function(t){var e=m[t];return void 0!==e?e:m[t]={}},module:function(t){return{id:t,uri:"",exports:m[t],config:h(t)}}},d=function(t,n,i,o){var s,c,h,d,f,y,x=[],w=typeof i;if(o=o||t,"undefined"===w||"function"===w){for(n=!n.length&&i.length?["require","exports","module"]:n,f=0;f0&&(e.call(arguments,t.prototype.constructor),r=n.prototype.constructor),r.apply(this,arguments)}function r(){this.constructor=i}var o=e(n),a=e(t);n.displayName=t.displayName,i.prototype=new r;for(var s=0;sn;n++)t[n].apply(this,e)},n.Observable=i,n.generateChars=function(t){for(var e="",n=0;t>n;n++){e+=Math.floor(36*Math.random()).toString(36)}return e},n.bind=function(t,e){return function(){t.apply(e,arguments)}},n._convertData=function(t){for(var e in t){var n=e.split("-"),i=t;if(1!==n.length){for(var r=0;r":">",'"':""","'":"'","/":"/"};return"string"!=typeof t?t:String(t).replace(/[&<>"'\/\\]/g,function(t){return e[t]})},n.appendMany=function(e,n){if("1.7"===t.fn.jquery.substr(0,3)){var i=t();t.map(n,function(t){i=i.add(t)}),n=i}e.append(n)},n}),e.define("select2/results",["jquery","./utils"],function(t,e){function n(t,e,i){this.$element=t,this.data=i,this.options=e,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('
      ');return this.options.get("multiple")&&e.attr("aria-multiselectable","true"),this.$results=e,e},n.prototype.clear=function(){this.$results.empty()},n.prototype.displayMessage=function(e){var n=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var i=t('
    • '),r=this.options.get("translations").get(e.message);i.append(n(r(e.args))),i[0].className+=" select2-results__message",this.$results.append(i)},n.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},n.prototype.append=function(t){this.hideLoading();var e=[];if(null==t.results||0===t.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));t.results=this.sort(t.results);for(var n=0;n0?e.first().trigger("mouseenter"):t.first().trigger("mouseenter"),this.ensureHighlightVisible()},n.prototype.setClasses=function(){var e=this;this.data.current(function(n){var i=t.map(n,function(t){return t.id.toString()});e.$results.find(".select2-results__option[aria-selected]").each(function(){var e=t(this),n=t.data(this,"data"),r=""+n.id;null!=n.element&&n.element.selected||null==n.element&&t.inArray(r,i)>-1?e.attr("aria-selected","true"):e.attr("aria-selected","false")})})},n.prototype.showLoading=function(t){this.hideLoading();var e=this.options.get("translations").get("searching"),n={disabled:!0,loading:!0,text:e(t)},i=this.option(n);i.className+=" loading-results",this.$results.prepend(i)},n.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},n.prototype.option=function(e){var n=document.createElement("li");n.className="select2-results__option";var i={role:"treeitem","aria-selected":"false"};e.disabled&&(delete i["aria-selected"],i["aria-disabled"]="true"),null==e.id&&delete i["aria-selected"],null!=e._resultId&&(n.id=e._resultId),e.title&&(n.title=e.title),e.children&&(i.role="group",i["aria-label"]=e.text,delete i["aria-selected"]);for(var r in i){var o=i[r];n.setAttribute(r,o)}if(e.children){var a=t(n),s=document.createElement("strong");s.className="select2-results__group",t(s),this.template(e,s);for(var l=[],u=0;u",{class:"select2-results__options select2-results__options--nested"});d.append(l),a.append(s),a.append(d)}else this.template(e,n);return t.data(n,"data",e),n},n.prototype.bind=function(e,n){var i=this,r=e.id+"-results";this.$results.attr("id",r),e.on("results:all",function(t){i.clear(),i.append(t.data),e.isOpen()&&(i.setClasses(),i.highlightFirstItem())}),e.on("results:append",function(t){i.append(t.data),e.isOpen()&&i.setClasses()}),e.on("query",function(t){i.hideMessages(),i.showLoading(t)}),e.on("select",function(){e.isOpen()&&(i.setClasses(),i.highlightFirstItem())}),e.on("unselect",function(){e.isOpen()&&(i.setClasses(),i.highlightFirstItem())}),e.on("open",function(){i.$results.attr("aria-expanded","true"),i.$results.attr("aria-hidden","false"),i.setClasses(),i.ensureHighlightVisible()}),e.on("close",function(){i.$results.attr("aria-expanded","false"),i.$results.attr("aria-hidden","true"),i.$results.removeAttr("aria-activedescendant")}),e.on("results:toggle",function(){var t=i.getHighlightedResults();0!==t.length&&t.trigger("mouseup")}),e.on("results:select",function(){var t=i.getHighlightedResults();if(0!==t.length){var e=t.data("data");"true"==t.attr("aria-selected")?i.trigger("close",{}):i.trigger("select",{data:e})}}),e.on("results:previous",function(){var t=i.getHighlightedResults(),e=i.$results.find("[aria-selected]"),n=e.index(t);if(0!==n){var r=n-1;0===t.length&&(r=0);var o=e.eq(r);o.trigger("mouseenter");var a=i.$results.offset().top,s=o.offset().top,l=i.$results.scrollTop()+(s-a);0===r?i.$results.scrollTop(0):0>s-a&&i.$results.scrollTop(l)}}),e.on("results:next",function(){var t=i.getHighlightedResults(),e=i.$results.find("[aria-selected]"),n=e.index(t),r=n+1;if(!(r>=e.length)){var o=e.eq(r);o.trigger("mouseenter");var a=i.$results.offset().top+i.$results.outerHeight(!1),s=o.offset().top+o.outerHeight(!1),l=i.$results.scrollTop()+s-a;0===r?i.$results.scrollTop(0):s>a&&i.$results.scrollTop(l)}}),e.on("results:focus",function(t){t.element.addClass("select2-results__option--highlighted")}),e.on("results:message",function(t){i.displayMessage(t)}),t.fn.mousewheel&&this.$results.on("mousewheel",function(t){var e=i.$results.scrollTop(),n=i.$results.get(0).scrollHeight-e+t.deltaY,r=t.deltaY>0&&e-t.deltaY<=0,o=t.deltaY<0&&n<=i.$results.height();r?(i.$results.scrollTop(0),t.preventDefault(),t.stopPropagation()):o&&(i.$results.scrollTop(i.$results.get(0).scrollHeight-i.$results.height()),t.preventDefault(),t.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(e){var n=t(this),r=n.data("data");return"true"===n.attr("aria-selected")?void(i.options.get("multiple")?i.trigger("unselect",{originalEvent:e,data:r}):i.trigger("close",{})):void i.trigger("select",{originalEvent:e,data:r})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(e){var n=t(this).data("data");i.getHighlightedResults().removeClass("select2-results__option--highlighted"),i.trigger("results:focus",{data:n,element:t(this)})})},n.prototype.getHighlightedResults=function(){return this.$results.find(".select2-results__option--highlighted")},n.prototype.destroy=function(){this.$results.remove()},n.prototype.ensureHighlightVisible=function(){var t=this.getHighlightedResults();if(0!==t.length){var e=this.$results.find("[aria-selected]"),n=e.index(t),i=this.$results.offset().top,r=t.offset().top,o=this.$results.scrollTop()+(r-i),a=r-i;o-=2*t.outerHeight(!1),2>=n?this.$results.scrollTop(0):(a>this.$results.outerHeight()||0>a)&&this.$results.scrollTop(o)}},n.prototype.template=function(e,n){var i=this.options.get("templateResult"),r=this.options.get("escapeMarkup"),o=i(e,n);null==o?n.style.display="none":"string"==typeof o?n.innerHTML=r(o):t(n).append(o)},n}),e.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),e.define("select2/selection/base",["jquery","../utils","../keys"],function(t,e,n){function i(t,e){this.$element=t,this.options=e,i.__super__.constructor.call(this)}return e.Extend(i,e.Observable),i.prototype.render=function(){var e=t('');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),e.attr("title",this.$element.attr("title")),e.attr("tabindex",this._tabindex),this.$selection=e,e},i.prototype.bind=function(t,e){var i=this,r=(t.id,t.id+"-results");this.container=t,this.$selection.on("focus",function(t){i.trigger("focus",t)}),this.$selection.on("blur",function(t){i._handleBlur(t)}),this.$selection.on("keydown",function(t){i.trigger("keypress",t),t.which===n.SPACE&&t.preventDefault()}),t.on("results:focus",function(t){i.$selection.attr("aria-activedescendant",t.data._resultId)}),t.on("selection:update",function(t){i.update(t.data)}),t.on("open",function(){i.$selection.attr("aria-expanded","true"),i.$selection.attr("aria-owns",r),i._attachCloseHandler(t)}),t.on("close",function(){i.$selection.attr("aria-expanded","false"),i.$selection.removeAttr("aria-activedescendant"),i.$selection.removeAttr("aria-owns"),i.$selection.focus(),i._detachCloseHandler(t)}),t.on("enable",function(){i.$selection.attr("tabindex",i._tabindex)}),t.on("disable",function(){i.$selection.attr("tabindex","-1")})},i.prototype._handleBlur=function(e){var n=this;window.setTimeout(function(){document.activeElement==n.$selection[0]||t.contains(n.$selection[0],document.activeElement)||n.trigger("blur",e)},1)},i.prototype._attachCloseHandler=function(e){t(document.body).on("mousedown.select2."+e.id,function(e){var n=t(e.target),i=n.closest(".select2");t(".select2.select2-container--open").each(function(){var e=t(this);this!=i[0]&&e.data("element").select2("close")})})},i.prototype._detachCloseHandler=function(e){t(document.body).off("mousedown.select2."+e.id)},i.prototype.position=function(t,e){e.find(".selection").append(t)},i.prototype.destroy=function(){this._detachCloseHandler(this.container)},i.prototype.update=function(t){throw new Error("The `update` method must be defined in child classes.")},i}),e.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(t,e,n,i){function r(){r.__super__.constructor.apply(this,arguments)}return n.Extend(r,e),r.prototype.render=function(){var t=r.__super__.render.call(this);return t.addClass("select2-selection--single"),t.html(''),t},r.prototype.bind=function(t,e){var n=this;r.__super__.bind.apply(this,arguments);var i=t.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",i),this.$selection.attr("aria-labelledby",i),this.$selection.on("mousedown",function(t){1===t.which&&n.trigger("toggle",{originalEvent:t})}),this.$selection.on("focus",function(t){}),this.$selection.on("blur",function(t){}),t.on("focus",function(e){t.isOpen()||n.$selection.focus()}),t.on("selection:update",function(t){n.update(t.data)})},r.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},r.prototype.display=function(t,e){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(t,e))},r.prototype.selectionContainer=function(){return t("")},r.prototype.update=function(t){if(0===t.length)return void this.clear();var e=t[0],n=this.$selection.find(".select2-selection__rendered"),i=this.display(e,n);n.empty().append(i),n.prop("title",e.title||e.text)},r}),e.define("select2/selection/multiple",["jquery","./base","../utils"],function(t,e,n){function i(t,e){i.__super__.constructor.apply(this,arguments)}return n.Extend(i,e),i.prototype.render=function(){var t=i.__super__.render.call(this);return t.addClass("select2-selection--multiple"),t.html('
        '),t},i.prototype.bind=function(e,n){var r=this;i.__super__.bind.apply(this,arguments),this.$selection.on("click",function(t){r.trigger("toggle",{originalEvent:t})}),this.$selection.on("click",".select2-selection__choice__remove",function(e){if(!r.options.get("disabled")){var n=t(this),i=n.parent(),o=i.data("data");r.trigger("unselect",{originalEvent:e,data:o})}})},i.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},i.prototype.display=function(t,e){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(t,e))},i.prototype.selectionContainer=function(){return t('
      • ×
      • ')},i.prototype.update=function(t){if(this.clear(),0!==t.length){for(var e=[],i=0;i1||n)return t.call(this,e);this.clear();var i=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(i)},e}),e.define("select2/selection/allowClear",["jquery","../keys"],function(t,e){function n(){}return n.prototype.bind=function(t,e,n){var i=this;t.call(this,e,n),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(t){i._handleClear(t)}),e.on("keypress",function(t){i._handleKeyboardClear(t,e)})},n.prototype._handleClear=function(t,e){if(!this.options.get("disabled")){var n=this.$selection.find(".select2-selection__clear");if(0!==n.length){e.stopPropagation();for(var i=n.data("data"),r=0;r0||0===n.length)){var i=t('×');i.data("data",n),this.$selection.find(".select2-selection__rendered").prepend(i)}},n}),e.define("select2/selection/search",["jquery","../utils","../keys"],function(t,e,n){function i(t,e,n){t.call(this,e,n)}return i.prototype.render=function(e){var n=t('');this.$searchContainer=n,this.$search=n.find("input");var i=e.call(this);return this._transferTabIndex(),i},i.prototype.bind=function(t,e,i){var r=this;t.call(this,e,i),e.on("open",function(){r.$search.trigger("focus")}),e.on("close",function(){r.$search.val(""),r.$search.removeAttr("aria-activedescendant"),r.$search.trigger("focus")}),e.on("enable",function(){r.$search.prop("disabled",!1),r._transferTabIndex()}),e.on("disable",function(){r.$search.prop("disabled",!0)}),e.on("focus",function(t){r.$search.trigger("focus")}),e.on("results:focus",function(t){r.$search.attr("aria-activedescendant",t.id)}),this.$selection.on("focusin",".select2-search--inline",function(t){r.trigger("focus",t)}),this.$selection.on("focusout",".select2-search--inline",function(t){r._handleBlur(t)}),this.$selection.on("keydown",".select2-search--inline",function(t){if(t.stopPropagation(),r.trigger("keypress",t),r._keyUpPrevented=t.isDefaultPrevented(),t.which===n.BACKSPACE&&""===r.$search.val()){var e=r.$searchContainer.prev(".select2-selection__choice");if(e.length>0){var i=e.data("data");r.searchRemoveChoice(i),t.preventDefault()}}});var o=document.documentMode,a=o&&11>=o;this.$selection.on("input.searchcheck",".select2-search--inline",function(t){return a?void r.$selection.off("input.search input.searchcheck"):void r.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(t){if(a&&"input"===t.type)return void r.$selection.off("input.search input.searchcheck");var e=t.which;e!=n.SHIFT&&e!=n.CTRL&&e!=n.ALT&&e!=n.TAB&&r.handleSearch(t)})},i.prototype._transferTabIndex=function(t){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},i.prototype.createPlaceholder=function(t,e){this.$search.attr("placeholder",e.text)},i.prototype.update=function(t,e){var n=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),t.call(this,e),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),n&&this.$search.focus()},i.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var t=this.$search.val();this.trigger("query",{term:t})}this._keyUpPrevented=!1},i.prototype.searchRemoveChoice=function(t,e){this.trigger("unselect",{data:e}),this.$search.val(e.text),this.handleSearch()},i.prototype.resizeSearch=function(){this.$search.css("width","25px");var t="";if(""!==this.$search.attr("placeholder"))t=this.$selection.find(".select2-selection__rendered").innerWidth();else{t=.75*(this.$search.val().length+1)+"em"}this.$search.css("width",t)},i}),e.define("select2/selection/eventRelay",["jquery"],function(t){function e(){}return e.prototype.bind=function(e,n,i){var r=this,o=["open","opening","close","closing","select","selecting","unselect","unselecting"],a=["opening","closing","selecting","unselecting"];e.call(this,n,i),n.on("*",function(e,n){if(-1!==t.inArray(e,o)){n=n||{};var i=t.Event("select2:"+e,{params:n});r.$element.trigger(i),-1!==t.inArray(e,a)&&(n.prevented=i.isDefaultPrevented())}})},e}),e.define("select2/translation",["jquery","require"],function(t,e){function n(t){this.dict=t||{}}return n.prototype.all=function(){return this.dict},n.prototype.get=function(t){return this.dict[t]},n.prototype.extend=function(e){this.dict=t.extend({},e.all(),this.dict)},n._cache={},n.loadPath=function(t){if(!(t in n._cache)){var i=e(t);n._cache[t]=i}return new n(n._cache[t])},n}),e.define("select2/diacritics",[],function(){return{"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A", -"Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"}}),e.define("select2/data/base",["../utils"],function(t){function e(t,n){e.__super__.constructor.call(this)}return t.Extend(e,t.Observable),e.prototype.current=function(t){throw new Error("The `current` method must be defined in child classes.")},e.prototype.query=function(t,e){throw new Error("The `query` method must be defined in child classes.")},e.prototype.bind=function(t,e){},e.prototype.destroy=function(){},e.prototype.generateResultId=function(e,n){var i=e.id+"-result-";return i+=t.generateChars(4),i+=null!=n.id?"-"+n.id.toString():"-"+t.generateChars(4)},e}),e.define("select2/data/select",["./base","../utils","jquery"],function(t,e,n){function i(t,e){this.$element=t,this.options=e,i.__super__.constructor.call(this)}return e.Extend(i,t),i.prototype.current=function(t){var e=[],i=this;this.$element.find(":selected").each(function(){var t=n(this),r=i.item(t);e.push(r)}),t(e)},i.prototype.select=function(t){var e=this;if(t.selected=!0,n(t.element).is("option"))return t.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(i){var r=[];t=[t],t.push.apply(t,i);for(var o=0;o=0){var u=r.filter(function(t){return function(){return n(this).val()==t.id}}(l)),c=this.item(u),h=n.extend(!0,{},l,c),d=this.option(h);u.replaceWith(d)}else{var f=this.option(l);if(l.children){var p=this.convertToOptions(l.children);e.appendMany(f,p)}a.push(f)}}return a},i}),e.define("select2/data/ajax",["./array","../utils","jquery"],function(t,e,n){function i(t,e){this.ajaxOptions=this._applyDefaults(e.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),i.__super__.constructor.call(this,t,e)}return e.Extend(i,t),i.prototype._applyDefaults=function(t){var e={data:function(t){return n.extend({},t,{q:t.term})},transport:function(t,e,i){var r=n.ajax(t);return r.then(e),r.fail(i),r}};return n.extend({},e,t,!0)},i.prototype.processResults=function(t){return t},i.prototype.query=function(t,e){function i(){var i=o.transport(o,function(i){var o=r.processResults(i,t);r.options.get("debug")&&window.console&&console.error&&(o&&o.results&&n.isArray(o.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),e(o)},function(){i.status&&"0"===i.status||r.trigger("results:message",{message:"errorLoading"})});r._request=i}var r=this;null!=this._request&&(n.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var o=n.extend({type:"GET"},this.ajaxOptions);"function"==typeof o.url&&(o.url=o.url.call(this.$element,t)),"function"==typeof o.data&&(o.data=o.data.call(this.$element,t)),this.ajaxOptions.delay&&null!=t.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(i,this.ajaxOptions.delay)):i()},i}),e.define("select2/data/tags",["jquery"],function(t){function e(e,n,i){var r=i.get("tags"),o=i.get("createTag");void 0!==o&&(this.createTag=o);var a=i.get("insertTag");if(void 0!==a&&(this.insertTag=a),e.call(this,n,i),t.isArray(r))for(var s=0;s0&&e.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:e.term,params:e}}):void t.call(this,e,n)},t}),e.define("select2/data/maximumSelectionLength",[],function(){function t(t,e,n){this.maximumSelectionLength=n.get("maximumSelectionLength"),t.call(this,e,n)}return t.prototype.query=function(t,e,n){var i=this;this.current(function(r){var o=null!=r?r.length:0;return i.maximumSelectionLength>0&&o>=i.maximumSelectionLength?void i.trigger("results:message",{message:"maximumSelected",args:{maximum:i.maximumSelectionLength}}):void t.call(i,e,n)})},t}),e.define("select2/dropdown",["jquery","./utils"],function(t,e){function n(t,e){this.$element=t,this.options=e,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('');return e.attr("dir",this.options.get("dir")),this.$dropdown=e,e},n.prototype.bind=function(){},n.prototype.position=function(t,e){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),e.define("select2/dropdown/search",["jquery","../utils"],function(t,e){function n(){}return n.prototype.render=function(e){var n=e.call(this),i=t('');return this.$searchContainer=i,this.$search=i.find("input"),n.prepend(i),n},n.prototype.bind=function(e,n,i){var r=this;e.call(this,n,i),this.$search.on("keydown",function(t){r.trigger("keypress",t),r._keyUpPrevented=t.isDefaultPrevented()}),this.$search.on("input",function(e){t(this).off("keyup")}),this.$search.on("keyup input",function(t){r.handleSearch(t)}),n.on("open",function(){r.$search.attr("tabindex",0),r.$search.focus(),window.setTimeout(function(){r.$search.focus()},0)}),n.on("close",function(){r.$search.attr("tabindex",-1),r.$search.val("")}),n.on("focus",function(){n.isOpen()&&r.$search.focus()}),n.on("results:all",function(t){if(null==t.query.term||""===t.query.term){r.showSearch(t)?r.$searchContainer.removeClass("select2-search--hide"):r.$searchContainer.addClass("select2-search--hide")}})},n.prototype.handleSearch=function(t){if(!this._keyUpPrevented){var e=this.$search.val();this.trigger("query",{term:e})}this._keyUpPrevented=!1},n.prototype.showSearch=function(t,e){return!0},n}),e.define("select2/dropdown/hidePlaceholder",[],function(){function t(t,e,n,i){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),t.call(this,e,n,i)}return t.prototype.append=function(t,e){e.results=this.removePlaceholder(e.results),t.call(this,e)},t.prototype.normalizePlaceholder=function(t,e){return"string"==typeof e&&(e={id:"",text:e}),e},t.prototype.removePlaceholder=function(t,e){for(var n=e.slice(0),i=e.length-1;i>=0;i--){var r=e[i];this.placeholder.id===r.id&&n.splice(i,1)}return n},t}),e.define("select2/dropdown/infiniteScroll",["jquery"],function(t){function e(t,e,n,i){this.lastParams={},t.call(this,e,n,i),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(t,e){this.$loadingMore.remove(),this.loading=!1,t.call(this,e),this.showLoadingMore(e)&&this.$results.append(this.$loadingMore)},e.prototype.bind=function(e,n,i){var r=this;e.call(this,n,i),n.on("query",function(t){r.lastParams=t,r.loading=!0}),n.on("query:append",function(t){r.lastParams=t,r.loading=!0}),this.$results.on("scroll",function(){var e=t.contains(document.documentElement,r.$loadingMore[0]);if(!r.loading&&e){r.$results.offset().top+r.$results.outerHeight(!1)+50>=r.$loadingMore.offset().top+r.$loadingMore.outerHeight(!1)&&r.loadMore()}})},e.prototype.loadMore=function(){this.loading=!0;var e=t.extend({},{page:1},this.lastParams);e.page++,this.trigger("query:append",e)},e.prototype.showLoadingMore=function(t,e){return e.pagination&&e.pagination.more},e.prototype.createLoadingMore=function(){var e=t('
      • '),n=this.options.get("translations").get("loadingMore");return e.html(n(this.lastParams)),e},e}),e.define("select2/dropdown/attachBody",["jquery","../utils"],function(t,e){function n(e,n,i){this.$dropdownParent=i.get("dropdownParent")||t(document.body),e.call(this,n,i)}return n.prototype.bind=function(t,e,n){var i=this,r=!1;t.call(this,e,n),e.on("open",function(){i._showDropdown(),i._attachPositioningHandler(e),r||(r=!0,e.on("results:all",function(){i._positionDropdown(),i._resizeDropdown()}),e.on("results:append",function(){i._positionDropdown(),i._resizeDropdown()}))}),e.on("close",function(){i._hideDropdown(),i._detachPositioningHandler(e)}),this.$dropdownContainer.on("mousedown",function(t){t.stopPropagation()})},n.prototype.destroy=function(t){t.call(this),this.$dropdownContainer.remove()},n.prototype.position=function(t,e,n){e.attr("class",n.attr("class")),e.removeClass("select2"),e.addClass("select2-container--open"),e.css({position:"absolute",top:-999999}),this.$container=n},n.prototype.render=function(e){var n=t(""),i=e.call(this);return n.append(i),this.$dropdownContainer=n,n},n.prototype._hideDropdown=function(t){this.$dropdownContainer.detach()},n.prototype._attachPositioningHandler=function(n,i){var r=this,o="scroll.select2."+i.id,a="resize.select2."+i.id,s="orientationchange.select2."+i.id,l=this.$container.parents().filter(e.hasScroll);l.each(function(){t(this).data("select2-scroll-position",{x:t(this).scrollLeft(),y:t(this).scrollTop()})}),l.on(o,function(e){var n=t(this).data("select2-scroll-position");t(this).scrollTop(n.y)}),t(window).on(o+" "+a+" "+s,function(t){r._positionDropdown(),r._resizeDropdown()})},n.prototype._detachPositioningHandler=function(n,i){var r="scroll.select2."+i.id,o="resize.select2."+i.id,a="orientationchange.select2."+i.id;this.$container.parents().filter(e.hasScroll).off(r),t(window).off(r+" "+o+" "+a)},n.prototype._positionDropdown=function(){var e=t(window),n=this.$dropdown.hasClass("select2-dropdown--above"),i=this.$dropdown.hasClass("select2-dropdown--below"),r=null,o=this.$container.offset();o.bottom=o.top+this.$container.outerHeight(!1);var a={height:this.$container.outerHeight(!1)};a.top=o.top,a.bottom=o.top+a.height;var s={height:this.$dropdown.outerHeight(!1)},l={top:e.scrollTop(),bottom:e.scrollTop()+e.height()},u=l.topo.bottom+s.height,h={left:o.left,top:a.bottom},d=this.$dropdownParent;"static"===d.css("position")&&(d=d.offsetParent());var f=d.offset();h.top-=f.top,h.left-=f.left,n||i||(r="below"),c||!u||n?!u&&c&&n&&(r="below"):r="above",("above"==r||n&&"below"!==r)&&(h.top=a.top-f.top-s.height),null!=r&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+r),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+r)),this.$dropdownContainer.css(h)},n.prototype._resizeDropdown=function(){var t={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(t.minWidth=t.width,t.position="relative",t.width="auto"),this.$dropdown.css(t)},n.prototype._showDropdown=function(t){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},n}),e.define("select2/dropdown/minimumResultsForSearch",[],function(){function t(e){for(var n=0,i=0;i0&&(h.dataAdapter=u.Decorate(h.dataAdapter,v)),h.maximumInputLength>0&&(h.dataAdapter=u.Decorate(h.dataAdapter,y)),h.maximumSelectionLength>0&&(h.dataAdapter=u.Decorate(h.dataAdapter,b)),h.tags&&(h.dataAdapter=u.Decorate(h.dataAdapter,g)),(null!=h.tokenSeparators||null!=h.tokenizer)&&(h.dataAdapter=u.Decorate(h.dataAdapter,m)),null!=h.query){var D=e(h.amdBase+"compat/query");h.dataAdapter=u.Decorate(h.dataAdapter,D)}if(null!=h.initSelection){var A=e(h.amdBase+"compat/initSelection");h.dataAdapter=u.Decorate(h.dataAdapter,A)}}if(null==h.resultsAdapter&&(h.resultsAdapter=n,null!=h.ajax&&(h.resultsAdapter=u.Decorate(h.resultsAdapter,_)),null!=h.placeholder&&(h.resultsAdapter=u.Decorate(h.resultsAdapter,S)),h.selectOnClose&&(h.resultsAdapter=u.Decorate(h.resultsAdapter,M))),null==h.dropdownAdapter){if(h.multiple)h.dropdownAdapter=x;else{var P=u.Decorate(x,w);h.dropdownAdapter=P}if(0!==h.minimumResultsForSearch&&(h.dropdownAdapter=u.Decorate(h.dropdownAdapter,C)),h.closeOnSelect&&(h.dropdownAdapter=u.Decorate(h.dropdownAdapter,T)),null!=h.dropdownCssClass||null!=h.dropdownCss||null!=h.adaptDropdownCssClass){var E=e(h.amdBase+"compat/dropdownCss");h.dropdownAdapter=u.Decorate(h.dropdownAdapter,E)}h.dropdownAdapter=u.Decorate(h.dropdownAdapter,k)}if(null==h.selectionAdapter){if(h.multiple?h.selectionAdapter=r:h.selectionAdapter=i,null!=h.placeholder&&(h.selectionAdapter=u.Decorate(h.selectionAdapter,o)),h.allowClear&&(h.selectionAdapter=u.Decorate(h.selectionAdapter,a)),h.multiple&&(h.selectionAdapter=u.Decorate(h.selectionAdapter,s)),null!=h.containerCssClass||null!=h.containerCss||null!=h.adaptContainerCssClass){var O=e(h.amdBase+"compat/containerCss");h.selectionAdapter=u.Decorate(h.selectionAdapter,O)}h.selectionAdapter=u.Decorate(h.selectionAdapter,l)}if("string"==typeof h.language)if(h.language.indexOf("-")>0){var L=h.language.split("-"),I=L[0];h.language=[h.language,I]}else h.language=[h.language];if(t.isArray(h.language)){var N=new c;h.language.push("en");for(var F=h.language,R=0;R0){for(var o=t.extend(!0,{},r),a=r.children.length-1;a>=0;a--){null==n(i,r.children[a])&&o.children.splice(a,1)}return o.children.length>0?o:n(i,o)}var s=e(r.text).toUpperCase(),l=e(i.term).toUpperCase();return s.indexOf(l)>-1?r:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:u.escapeMarkup,language:D,matcher:n,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(t){return t},templateResult:function(t){return t.text},templateSelection:function(t){return t.text},theme:"default",width:"resolve"}},A.prototype.set=function(e,n){var i=t.camelCase(e),r={};r[i]=n;var o=u._convertData(r);t.extend(this.defaults,o)},new A}),e.define("select2/options",["require","jquery","./defaults","./utils"],function(t,e,n,i){function r(e,r){if(this.options=e,null!=r&&this.fromElement(r),this.options=n.apply(this.options),r&&r.is("input")){var o=t(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=i.Decorate(this.options.dataAdapter,o)}}return r.prototype.fromElement=function(t){var n=["select2"];null==this.options.multiple&&(this.options.multiple=t.prop("multiple")),null==this.options.disabled&&(this.options.disabled=t.prop("disabled")),null==this.options.language&&(t.prop("lang")?this.options.language=t.prop("lang").toLowerCase():t.closest("[lang]").prop("lang")&&(this.options.language=t.closest("[lang]").prop("lang"))),null==this.options.dir&&(t.prop("dir")?this.options.dir=t.prop("dir"):t.closest("[dir]").prop("dir")?this.options.dir=t.closest("[dir]").prop("dir"):this.options.dir="ltr"),t.prop("disabled",this.options.disabled),t.prop("multiple",this.options.multiple),t.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),t.data("data",t.data("select2Tags")),t.data("tags",!0)),t.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),t.attr("ajax--url",t.data("ajaxUrl")),t.data("ajax--url",t.data("ajaxUrl")));var r={};r=e.fn.jquery&&"1."==e.fn.jquery.substr(0,2)&&t[0].dataset?e.extend(!0,{},t[0].dataset,t.data()):t.data();var o=e.extend(!0,{},r);o=i._convertData(o);for(var a in o)e.inArray(a,n)>-1||(e.isPlainObject(this.options[a])?e.extend(this.options[a],o[a]):this.options[a]=o[a]);return this},r.prototype.get=function(t){return this.options[t]},r.prototype.set=function(t,e){this.options[t]=e},r}),e.define("select2/core",["jquery","./options","./utils","./keys"],function(t,e,n,i){var r=function(t,n){null!=t.data("select2")&&t.data("select2").destroy(),this.$element=t,this.id=this._generateId(t),n=n||{},this.options=new e(n,t),r.__super__.constructor.call(this);var i=t.attr("tabindex")||0;t.data("old-tabindex",i),t.attr("tabindex","-1");var o=this.options.get("dataAdapter");this.dataAdapter=new o(t,this.options);var a=this.render();this._placeContainer(a);var s=this.options.get("selectionAdapter");this.selection=new s(t,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,a);var l=this.options.get("dropdownAdapter");this.dropdown=new l(t,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,a);var u=this.options.get("resultsAdapter");this.results=new u(t,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var c=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(), -this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(t){c.trigger("selection:update",{data:t})}),t.addClass("select2-hidden-accessible"),t.attr("aria-hidden","true"),this._syncAttributes(),t.data("select2",this)};return n.Extend(r,n.Observable),r.prototype._generateId=function(t){var e="";return e=null!=t.attr("id")?t.attr("id"):null!=t.attr("name")?t.attr("name")+"-"+n.generateChars(2):n.generateChars(4),e=e.replace(/(:|\.|\[|\]|,)/g,""),e="select2-"+e},r.prototype._placeContainer=function(t){t.insertAfter(this.$element);var e=this._resolveWidth(this.$element,this.options.get("width"));null!=e&&t.css("width",e)},r.prototype._resolveWidth=function(t,e){var n=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==e){var i=this._resolveWidth(t,"style");return null!=i?i:this._resolveWidth(t,"element")}if("element"==e){var r=t.outerWidth(!1);return 0>=r?"auto":r+"px"}if("style"==e){var o=t.attr("style");if("string"!=typeof o)return null;for(var a=o.split(";"),s=0,l=a.length;l>s;s+=1){var u=a[s].replace(/\s/g,""),c=u.match(n);if(null!==c&&c.length>=1)return c[1]}return null}return e},r.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},r.prototype._registerDomEvents=function(){var e=this;this.$element.on("change.select2",function(){e.dataAdapter.current(function(t){e.trigger("selection:update",{data:t})})}),this.$element.on("focus.select2",function(t){e.trigger("focus",t)}),this._syncA=n.bind(this._syncAttributes,this),this._syncS=n.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var i=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=i?(this._observer=new i(function(n){t.each(n,e._syncA),t.each(n,e._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",e._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",e._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",e._syncS,!1))},r.prototype._registerDataEvents=function(){var t=this;this.dataAdapter.on("*",function(e,n){t.trigger(e,n)})},r.prototype._registerSelectionEvents=function(){var e=this,n=["toggle","focus"];this.selection.on("toggle",function(){e.toggleDropdown()}),this.selection.on("focus",function(t){e.focus(t)}),this.selection.on("*",function(i,r){-1===t.inArray(i,n)&&e.trigger(i,r)})},r.prototype._registerDropdownEvents=function(){var t=this;this.dropdown.on("*",function(e,n){t.trigger(e,n)})},r.prototype._registerResultsEvents=function(){var t=this;this.results.on("*",function(e,n){t.trigger(e,n)})},r.prototype._registerEvents=function(){var t=this;this.on("open",function(){t.$container.addClass("select2-container--open")}),this.on("close",function(){t.$container.removeClass("select2-container--open")}),this.on("enable",function(){t.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){t.$container.addClass("select2-container--disabled")}),this.on("blur",function(){t.$container.removeClass("select2-container--focus")}),this.on("query",function(e){t.isOpen()||t.trigger("open",{}),this.dataAdapter.query(e,function(n){t.trigger("results:all",{data:n,query:e})})}),this.on("query:append",function(e){this.dataAdapter.query(e,function(n){t.trigger("results:append",{data:n,query:e})})}),this.on("keypress",function(e){var n=e.which;t.isOpen()?n===i.ESC||n===i.TAB||n===i.UP&&e.altKey?(t.close(),e.preventDefault()):n===i.ENTER?(t.trigger("results:select",{}),e.preventDefault()):n===i.SPACE&&e.ctrlKey?(t.trigger("results:toggle",{}),e.preventDefault()):n===i.UP?(t.trigger("results:previous",{}),e.preventDefault()):n===i.DOWN&&(t.trigger("results:next",{}),e.preventDefault()):(n===i.ENTER||n===i.SPACE||n===i.DOWN&&e.altKey)&&(t.open(),e.preventDefault())})},r.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},r.prototype._syncSubtree=function(t,e){var n=!1,i=this;if(!t||!t.target||"OPTION"===t.target.nodeName||"OPTGROUP"===t.target.nodeName){if(e)if(e.addedNodes&&e.addedNodes.length>0)for(var r=0;r0&&(n=!0);else n=!0;n&&this.dataAdapter.current(function(t){i.trigger("selection:update",{data:t})})}},r.prototype.trigger=function(t,e){var n=r.__super__.trigger,i={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(void 0===e&&(e={}),t in i){var o=i[t],a={prevented:!1,name:t,args:e};if(n.call(this,o,a),a.prevented)return void(e.prevented=!0)}n.call(this,t,e)},r.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},r.prototype.open=function(){this.isOpen()||this.trigger("query",{})},r.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},r.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},r.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},r.prototype.focus=function(t){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},r.prototype.enable=function(t){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),(null==t||0===t.length)&&(t=[!0]);var e=!t[0];this.$element.prop("disabled",e)},r.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var t=[];return this.dataAdapter.current(function(e){t=e}),t},r.prototype.val=function(e){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==e||0===e.length)return this.$element.val();var n=e[0];t.isArray(n)&&(n=t.map(n,function(t){return t.toString()})),this.$element.val(n).trigger("change")},r.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},r.prototype.render=function(){var e=t('');return e.attr("dir",this.options.get("dir")),this.$container=e,this.$container.addClass("select2-container--"+this.options.get("theme")),e.data("element",this.$element),e},r}),e.define("jquery-mousewheel",["jquery"],function(t){return t}),e.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults"],function(t,e,n,i){if(null==t.fn.select2){var r=["open","close","destroy"];t.fn.select2=function(e){if("object"==typeof(e=e||{}))return this.each(function(){var i=t.extend(!0,{},e);new n(t(this),i)}),this;if("string"==typeof e){var i,o=Array.prototype.slice.call(arguments,1);return this.each(function(){var n=t(this).data("select2");null==n&&window.console&&console.error&&console.error("The select2('"+e+"') method was called on an element that is not using Select2."),i=n[e].apply(n,o)}),t.inArray(e,r)>-1?this:i}throw new Error("Invalid arguments for Select2: "+e)}}return null==t.fn.select2.defaults&&(t.fn.select2.defaults=i),n}),{define:e.define,require:e.require}}(),n=e.require("jquery.select2");return t.fn.select2.amd=e,n}),function(t,e,n){"use strict";!function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={exports:{},id:i,loaded:!1};return t[i].call(r.exports,r,r.exports,e),r.loaded=!0,r.exports}var n={};e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){n(1),n(50),n(51),n(52),n(54),n(55),n(58),n(59),n(60),n(61),n(62),n(63),n(64),n(65),n(66),n(68),n(70),n(72),n(74),n(77),n(78),n(79),n(83),n(86),n(87),n(88),n(89),n(91),n(92),n(93),n(94),n(95),n(97),n(99),n(100),n(101),n(103),n(104),n(105),n(107),n(108),n(109),n(111),n(112),n(113),n(114),n(115),n(116),n(117),n(118),n(119),n(120),n(121),n(122),n(123),n(124),n(126),n(130),n(131),n(132),n(133),n(137),n(139),n(140),n(141),n(142),n(143),n(144),n(145),n(146),n(147),n(148),n(149),n(150),n(151),n(152),n(158),n(159),n(161),n(162),n(163),n(167),n(168),n(169),n(170),n(171),n(173),n(174),n(175),n(176),n(179),n(181),n(182),n(183),n(185),n(187),n(189),n(190),n(191),n(193),n(194),n(195),n(196),n(203),n(206),n(207),n(209),n(210),n(211),n(212),n(213),n(214),n(215),n(216),n(217),n(218),n(219),n(220),n(222),n(223),n(224),n(225),n(226),n(227),n(228),n(229),n(231),n(234),n(235),n(237),n(238),n(239),n(240),n(241),n(242),n(243),n(244),n(245),n(246),n(247),n(249),n(250),n(251),n(252),n(253),n(254),n(255),n(256),n(258),n(259),n(261),n(262),n(263),n(264),n(267),n(268),n(269),n(270),n(271),n(272),n(273),n(274),n(276),n(277),n(278),n(279),n(280),n(281),n(282),n(283),n(284),n(285),n(286),n(287),n(288),n(291),n(156),n(293),n(292),n(294),n(295),n(296),n(297),n(298),n(300),n(301),n(302),n(304),t.exports=n(305)},function(t,e,i){var r=i(2),o=i(3),a=i(4),s=i(6),l=i(16),u=i(20).KEY,c=i(5),h=i(21),d=i(22),f=i(17),p=i(23),g=i(24),m=i(25),v=i(27),y=i(40),b=i(43),x=i(10),w=i(30),S=i(14),_=i(15),k=i(44),C=i(47),M=i(49),T=i(9),D=i(28),A=M.f,P=T.f,E=C.f,O=r.Symbol,L=r.JSON,I=L&&L.stringify,N="prototype",F=p("_hidden"),R=p("toPrimitive"),j={}.propertyIsEnumerable,H=h("symbol-registry"),z=h("symbols"),B=h("op-symbols"),W=Object[N],$="function"==typeof O,q=r.QObject,U=!q||!q[N]||!q[N].findChild,Y=a&&c(function(){return 7!=k(P({},"a",{get:function(){return P(this,"a",{value:7}).a}})).a})?function(t,e,n){var i=A(W,e);i&&delete W[e],P(t,e,n),i&&t!==W&&P(W,e,i)}:P,G=function(t){var e=z[t]=k(O[N]);return e._k=t,e},X=$&&"symbol"==typeof O.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof O},V=function(t,e,n){return t===W&&V(B,e,n),x(t),e=S(e,!0),x(n),o(z,e)?(n.enumerable?(o(t,F)&&t[F][e]&&(t[F][e]=!1),n=k(n,{enumerable:_(0,!1)})):(o(t,F)||P(t,F,_(1,{})),t[F][e]=!0),Y(t,e,n)):P(t,e,n)},Z=function(t,e){x(t);for(var n,i=y(e=w(e)),r=0,o=i.length;o>r;)V(t,n=i[r++],e[n]);return t},K=function(t,e){return e===n?k(t):Z(k(t),e)},J=function(t){var e=j.call(this,t=S(t,!0));return!(this===W&&o(z,t)&&!o(B,t))&&(!(e||!o(this,t)||!o(z,t)||o(this,F)&&this[F][t])||e)},Q=function(t,e){if(t=w(t),e=S(e,!0),t!==W||!o(z,e)||o(B,e)){var n=A(t,e);return!n||!o(z,e)||o(t,F)&&t[F][e]||(n.enumerable=!0),n}},tt=function(t){for(var e,n=E(w(t)),i=[],r=0;n.length>r;)o(z,e=n[r++])||e==F||e==u||i.push(e);return i},et=function(t){for(var e,n=t===W,i=E(n?B:w(t)),r=[],a=0;i.length>a;)!o(z,e=i[a++])||n&&!o(W,e)||r.push(z[e]);return r};$||(O=function(){if(this instanceof O)throw TypeError("Symbol is not a constructor!");var t=f(arguments.length>0?arguments[0]:n),e=function(n){this===W&&e.call(B,n),o(this,F)&&o(this[F],t)&&(this[F][t]=!1),Y(this,t,_(1,n))};return a&&U&&Y(W,t,{configurable:!0,set:e}),G(t)},l(O[N],"toString",function(){return this._k}),M.f=Q,T.f=V,i(48).f=C.f=tt,i(42).f=J,i(41).f=et,a&&!i(26)&&l(W,"propertyIsEnumerable",J,!0),g.f=function(t){return G(p(t))}),s(s.G+s.W+s.F*!$,{Symbol:O});for(var nt="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),it=0;nt.length>it;)p(nt[it++]);for(var nt=D(p.store),it=0;nt.length>it;)m(nt[it++]);s(s.S+s.F*!$,"Symbol",{for:function(t){return o(H,t+="")?H[t]:H[t]=O(t)},keyFor:function(t){if(X(t))return v(H,t);throw TypeError(t+" is not a symbol!")},useSetter:function(){U=!0},useSimple:function(){U=!1}}),s(s.S+s.F*!$,"Object",{create:K,defineProperty:V,defineProperties:Z,getOwnPropertyDescriptor:Q,getOwnPropertyNames:tt,getOwnPropertySymbols:et}),L&&s(s.S+s.F*(!$||c(function(){var t=O();return"[null]"!=I([t])||"{}"!=I({a:t})||"{}"!=I(Object(t))})),"JSON",{stringify:function(t){if(t!==n&&!X(t)){for(var e,i,r=[t],o=1;arguments.length>o;)r.push(arguments[o++]);return e=r[1],"function"==typeof e&&(i=e),!i&&b(e)||(e=function(t,e){if(i&&(e=i.call(this,t,e)),!X(e))return e}),r[1]=e,I.apply(L,r)}}}),O[N][R]||i(8)(O[N],R,O[N].valueOf),d(O,"Symbol"),d(Math,"Math",!0),d(r.JSON,"JSON",!0)},function(t,n){var i=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof e&&(e=i)},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e,n){t.exports=!n(5)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,i){var r=i(2),o=i(7),a=i(8),s=i(16),l=i(18),u="prototype",c=function(t,e,i){var h,d,f,p,g=t&c.F,m=t&c.G,v=t&c.S,y=t&c.P,b=t&c.B,x=m?r:v?r[e]||(r[e]={}):(r[e]||{})[u],w=m?o:o[e]||(o[e]={}),S=w[u]||(w[u]={});m&&(i=e);for(h in i)d=!g&&x&&x[h]!==n,f=(d?x:i)[h],p=b&&d?l(f,r):y&&"function"==typeof f?l(Function.call,f):f,x&&s(x,h,f,t&c.U),w[h]!=f&&a(w,h,p),y&&S[h]!=f&&(S[h]=f)};r.core=o,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,t.exports=c},function(e,n){var i=e.exports={version:"2.4.0"};"number"==typeof t&&(t=i)},function(t,e,n){var i=n(9),r=n(15);t.exports=n(4)?function(t,e,n){return i.f(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var i=n(10),r=n(12),o=n(14),a=Object.defineProperty;e.f=n(4)?Object.defineProperty:function(t,e,n){if(i(t),e=o(e,!0),i(n),r)try{return a(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var i=n(11);t.exports=function(t){if(!i(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,n){t.exports=!n(4)&&!n(5)(function(){return 7!=Object.defineProperty(n(13)("div"),"a",{get:function(){return 7}}).a})},function(t,e,n){var i=n(11),r=n(2).document,o=i(r)&&i(r.createElement);t.exports=function(t){return o?r.createElement(t):{}}},function(t,e,n){var i=n(11);t.exports=function(t,e){if(!i(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!i(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!i(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!i(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){var i=n(2),r=n(8),o=n(3),a=n(17)("src"),s="toString",l=Function[s],u=(""+l).split(s);n(7).inspectSource=function(t){return l.call(t)},(t.exports=function(t,e,n,s){var l="function"==typeof n;l&&(o(n,"name")||r(n,"name",e)),t[e]!==n&&(l&&(o(n,a)||r(n,a,t[e]?""+t[e]:u.join(String(e)))),t===i?t[e]=n:s?t[e]?t[e]=n:r(t,e,n):(delete t[e],r(t,e,n)))})(Function.prototype,s,function(){return"function"==typeof this&&this[a]||l.call(this)})},function(t,e){var i=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(t===n?"":t,")_",(++i+r).toString(36))}},function(t,e,i){var r=i(19);t.exports=function(t,e,i){if(r(t),e===n)return t;switch(i){case 1:return function(n){return t.call(e,n)};case 2:return function(n,i){return t.call(e,n,i)};case 3:return function(n,i,r){return t.call(e,n,i,r)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,n){var i=n(17)("meta"),r=n(11),o=n(3),a=n(9).f,s=0,l=Object.isExtensible||function(){return!0},u=!n(5)(function(){return l(Object.preventExtensions({}))}),c=function(t){a(t,i,{value:{i:"O"+ ++s,w:{}}})},h=function(t,e){if(!r(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,i)){if(!l(t))return"F";if(!e)return"E";c(t)}return t[i].i},d=function(t,e){if(!o(t,i)){if(!l(t))return!0;if(!e)return!1;c(t)}return t[i].w},f=function(t){return u&&p.NEED&&l(t)&&!o(t,i)&&c(t),t},p=t.exports={KEY:i,NEED:!1,fastKey:h,getWeak:d,onFreeze:f}},function(t,e,n){var i=n(2),r="__core-js_shared__",o=i[r]||(i[r]={});t.exports=function(t){return o[t]||(o[t]={})}},function(t,e,n){var i=n(9).f,r=n(3),o=n(23)("toStringTag");t.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,o)&&i(t,o,{configurable:!0,value:e})}},function(t,e,n){var i=n(21)("wks"),r=n(17),o=n(2).Symbol,a="function"==typeof o;(t.exports=function(t){return i[t]||(i[t]=a&&o[t]||(a?o:r)("Symbol."+t))}).store=i},function(t,e,n){e.f=n(23)},function(t,e,n){var i=n(2),r=n(7),o=n(26),a=n(24),s=n(9).f;t.exports=function(t){var e=r.Symbol||(r.Symbol=o?{}:i.Symbol||{});"_"==t.charAt(0)||t in e||s(e,t,{value:a.f(t)})}},function(t,e){t.exports=!1},function(t,e,n){var i=n(28),r=n(30);t.exports=function(t,e){for(var n,o=r(t),a=i(o),s=a.length,l=0;s>l;)if(o[n=a[l++]]===e)return n}},function(t,e,n){var i=n(29),r=n(39);t.exports=Object.keys||function(t){return i(t,r)}},function(t,e,n){var i=n(3),r=n(30),o=n(34)(!1),a=n(38)("IE_PROTO");t.exports=function(t,e){var n,s=r(t),l=0,u=[];for(n in s)n!=a&&i(s,n)&&u.push(n);for(;e.length>l;)i(s,n=e[l++])&&(~o(u,n)||u.push(n));return u}},function(t,e,n){var i=n(31),r=n(33);t.exports=function(t){return i(r(t))}},function(t,e,n){var i=n(32);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==i(t)?t.split(""):Object(t)}},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(t==n)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){var i=n(30),r=n(35),o=n(37);t.exports=function(t){return function(e,n,a){var s,l=i(e),u=r(l.length),c=o(a,u);if(t&&n!=n){for(;u>c;)if((s=l[c++])!=s)return!0}else for(;u>c;c++)if((t||c in l)&&l[c]===n)return t||c||0;return!t&&-1}}},function(t,e,n){var i=n(36),r=Math.min;t.exports=function(t){return t>0?r(i(t),9007199254740991):0}},function(t,e){var n=Math.ceil,i=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?i:n)(t)}},function(t,e,n){var i=n(36),r=Math.max,o=Math.min;t.exports=function(t,e){return t=i(t),t<0?r(t+e,0):o(t,e)}},function(t,e,n){var i=n(21)("keys"),r=n(17);t.exports=function(t){return i[t]||(i[t]=r(t))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,n){var i=n(28),r=n(41),o=n(42);t.exports=function(t){var e=i(t),n=r.f;if(n)for(var a,s=n(t),l=o.f,u=0;s.length>u;)l.call(t,a=s[u++])&&e.push(a);return e}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,n){var i=n(32);t.exports=Array.isArray||function(t){return"Array"==i(t)}},function(t,e,i){var r=i(10),o=i(45),a=i(39),s=i(38)("IE_PROTO"),l=function(){},u="prototype",c=function(){var t,e=i(13)("iframe"),n=a.length;for(e.style.display="none",i(46).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(" +{{end}} \ No newline at end of file diff --git a/templates/nav.html b/templates/nav.html index 09af8982..728a8f7e 100644 --- a/templates/nav.html +++ b/templates/nav.html @@ -10,7 +10,7 @@ Campaigns
      • - Users & Groups + Users & Groups
      • Email Templates
      • @@ -21,8 +21,13 @@ Sending Profiles
      • - Settings Admin + Account Settings
      • + {{if .ModifySystem}} +
      • + User ManagementAdmin +
      • + {{end}}

      • diff --git a/templates/register.html b/templates/register.html deleted file mode 100644 index 518aec09..00000000 --- a/templates/register.html +++ /dev/null @@ -1,62 +0,0 @@ -{{ define "base" }} - - - - - - - - - - - - Gophish - {{ .Title }} - - - - - - - -
        - - - - {{template "flashes" .Flashes}} - - - - - - -
        - - - - - -{{ end }} \ No newline at end of file diff --git a/templates/settings.html b/templates/settings.html index b08842f4..eeac2c24 100644 --- a/templates/settings.html +++ b/templates/settings.html @@ -8,7 +8,8 @@
        @@ -22,19 +23,12 @@

        -
        - - -
        -
        {{end}}
        - +
        @@ -46,26 +40,30 @@
        - +

        - +

        - +

        - +
        diff --git a/templates/users.html b/templates/users.html index adbcad01..0f5736ef 100644 --- a/templates/users.html +++ b/templates/users.html @@ -2,31 +2,25 @@

        - Users & Groups + {{.Title}}

        - +
         
        -
        -
        ").addClass("cw").text("#"));n.isBefore(o.clone().endOf("w"));)e.append(t("").addClass("dow").text(n.format("dd"))),n.add(1,"d");p.find(".datepicker-days thead").append(e)},R=function(t){return!0===i.disabledDates[t.format("YYYY-MM-DD")]},j=function(t){return!0===i.enabledDates[t.format("YYYY-MM-DD")]},H=function(t){return!0===i.disabledHours[t.format("H")]},z=function(t){return!0===i.enabledHours[t.format("H")]},B=function(e,n){if(!e.isValid())return!1;if(i.disabledDates&&"d"===n&&R(e))return!1;if(i.enabledDates&&"d"===n&&!j(e))return!1;if(i.minDate&&e.isBefore(i.minDate,n))return!1;if(i.maxDate&&e.isAfter(i.maxDate,n))return!1;if(i.daysOfWeekDisabled&&"d"===n&&-1!==i.daysOfWeekDisabled.indexOf(e.day()))return!1;if(i.disabledHours&&("h"===n||"m"===n||"s"===n)&&H(e))return!1;if(i.enabledHours&&("h"===n||"m"===n||"s"===n)&&!z(e))return!1;if(i.disabledTimeIntervals&&("h"===n||"m"===n||"s"===n)){var r=!1;if(t.each(i.disabledTimeIntervals,function(){if(e.isBetween(this[0],this[1]))return r=!0,!1}),r)return!1}return!0},W=function(){for(var e=[],n=o.clone().startOf("y").startOf("d");n.isSame(o,"y");)e.push(t("").attr("data-action","selectMonth").addClass("month").text(n.format("MMM"))),n.add(1,"M");p.find(".datepicker-months td").empty().append(e)},$=function(){var e=p.find(".datepicker-months"),n=e.find("th"),a=e.find("tbody").find("span");n.eq(0).find("span").attr("title",i.tooltips.prevYear),n.eq(1).attr("title",i.tooltips.selectYear),n.eq(2).find("span").attr("title",i.tooltips.nextYear),e.find(".disabled").removeClass("disabled"),B(o.clone().subtract(1,"y"),"y")||n.eq(0).addClass("disabled"),n.eq(1).text(o.year()),B(o.clone().add(1,"y"),"y")||n.eq(2).addClass("disabled"),a.removeClass("active"),r.isSame(o,"y")&&!d&&a.eq(r.month()).addClass("active"),a.each(function(e){B(o.clone().month(e),"M")||t(this).addClass("disabled")})},q=function(){var t=p.find(".datepicker-years"),e=t.find("th"),n=o.clone().subtract(5,"y"),a=o.clone().add(6,"y"),s="";for(e.eq(0).find("span").attr("title",i.tooltips.prevDecade),e.eq(1).attr("title",i.tooltips.selectDecade),e.eq(2).find("span").attr("title",i.tooltips.nextDecade),t.find(".disabled").removeClass("disabled"),i.minDate&&i.minDate.isAfter(n,"y")&&e.eq(0).addClass("disabled"),e.eq(1).text(n.year()+"-"+a.year()),i.maxDate&&i.maxDate.isBefore(a,"y")&&e.eq(2).addClass("disabled");!n.isAfter(a,"y");)s+=''+n.year()+"",n.add(1,"y");t.find("td").html(s)},U=function(){var t=p.find(".datepicker-decades"),n=t.find("th"),a=e({y:o.year()-o.year()%100-1}),s=a.clone().add(100,"y"),l=a.clone(),u="";for(n.eq(0).find("span").attr("title",i.tooltips.prevCentury),n.eq(2).find("span").attr("title",i.tooltips.nextCentury),t.find(".disabled").removeClass("disabled"),(a.isSame(e({y:1900}))||i.minDate&&i.minDate.isAfter(a,"y"))&&n.eq(0).addClass("disabled"),n.eq(1).text(a.year()+"-"+s.year()),(a.isSame(e({y:2e3}))||i.maxDate&&i.maxDate.isBefore(s,"y"))&&n.eq(2).addClass("disabled");!a.isAfter(s,"y");)u+=''+(a.year()+1)+" - "+(a.year()+12)+"",a.add(12,"y");u+="",t.find("td").html(u),n.eq(1).text(l.year()+1+"-"+a.year())},Y=function(){var e,n,a,s,l=p.find(".datepicker-days"),u=l.find("th"),c=[];if(M()){for(u.eq(0).find("span").attr("title",i.tooltips.prevMonth),u.eq(1).attr("title",i.tooltips.selectMonth),u.eq(2).find("span").attr("title",i.tooltips.nextMonth),l.find(".disabled").removeClass("disabled"),u.eq(1).text(o.format(i.dayViewHeaderFormat)),B(o.clone().subtract(1,"M"),"M")||u.eq(0).addClass("disabled"),B(o.clone().add(1,"M"),"M")||u.eq(2).addClass("disabled"),e=o.clone().startOf("M").startOf("w").startOf("d"),s=0;s<42;s++)0===e.weekday()&&(n=t("
        '+e.week()+"'+e.date()+"
        '+n.format(s?"HH":"hh")+"
        '+n.format("mm")+"
        '+n.format("ss")+"
        + - - - + + @@ -43,56 +37,30 @@ - + - - - - - - - - - - -
        First NameLast NameEmailPosition