From 876e04af07f38b270575220fddaf14a18f78c1a9 Mon Sep 17 00:00:00 2001 From: Russell Jones Date: Fri, 4 May 2018 00:36:08 +0000 Subject: [PATCH 1/3] * Push window size changes to clients instead of polling. * Cache services.ClusterConfig within srv.ServerContext for the duration of a connection. * Create a single websocket between the browser and the proxy for all * terminal bytes and events. --- constants.go | 6 + integration/integration_test.go | 114 +++++ lib/client/api.go | 30 +- lib/client/client.go | 69 ++- lib/client/session.go | 117 +++-- lib/defaults/defaults.go | 28 +- lib/service/service.go | 9 +- lib/session/session.go | 27 +- lib/srv/ctx.go | 15 +- lib/srv/exec.go | 19 +- lib/srv/forward/sshserver.go | 37 +- lib/srv/regular/sshserver.go | 94 ++-- lib/srv/sess.go | 478 +++++++++---------- lib/srv/term.go | 14 +- lib/srv/termhandlers.go | 14 +- lib/web/apiserver.go | 101 +--- lib/web/apiserver_test.go | 820 ++++++++++++++++++-------------- lib/web/sessions.go | 45 +- lib/web/stream.go | 171 ------- lib/web/terminal.go | 618 +++++++++++++++++++----- 20 files changed, 1612 insertions(+), 1214 deletions(-) delete mode 100644 lib/web/stream.go diff --git a/constants.go b/constants.go index a1c4010e62859..ad5a55eebe3f2 100644 --- a/constants.go +++ b/constants.go @@ -345,3 +345,9 @@ const ( // SharedDirMode is a mode for a directory shared with group SharedDirMode = 0750 ) + +const ( + // SessionEvent is sent by servers to clients when an audit event occurs on + // the session. + SessionEvent = "x-teleport-event" +) diff --git a/integration/integration_test.go b/integration/integration_test.go index 0cbf6497cfbe2..6157dac70be70 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -2525,6 +2525,120 @@ func runAndMatch(tc *client.TeleportClient, attempts int, command []string, patt return err } +// TestWindowChange checks if custom Teleport window change requests are sent +// when the server side PTY changes its size. +func (s *IntSuite) TestWindowChange(c *check.C) { + t := s.newTeleport(c, nil, true) + defer t.Stop(true) + + site := t.GetSiteAPI(Site) + c.Assert(site, check.NotNil) + + personA := NewTerminal(250) + personB := NewTerminal(250) + + // openSession will open a new session on a server. + openSession := func() { + cl, err := t.NewClient(ClientConfig{ + Login: s.me.Username, + Cluster: Site, + Host: Host, + Port: t.GetPortSSHInt(), + }) + c.Assert(err, check.IsNil) + + cl.Stdout = &personA + cl.Stdin = &personA + + err = cl.SSH(context.TODO(), []string{}, false) + c.Assert(err, check.IsNil) + } + + // joinSession will join the existing session on a server. + joinSession := func() { + // Find the existing session in the backend. + var sessionID string + for { + time.Sleep(time.Millisecond) + sessions, _ := site.GetSessions(defaults.Namespace) + if len(sessions) == 0 { + continue + } + sessionID = string(sessions[0].ID) + break + } + + cl, err := t.NewClient(ClientConfig{ + Login: s.me.Username, + Cluster: Site, + Host: Host, + Port: t.GetPortSSHInt(), + }) + c.Assert(err, check.IsNil) + + cl.Stdout = &personB + cl.Stdin = &personB + + // Change the size of the window immediately after it is created. + cl.OnShellCreated = func(s *ssh.Session, c *ssh.Client, terminal io.ReadWriteCloser) (exit bool, err error) { + err = s.WindowChange(48, 160) + if err != nil { + return true, trace.Wrap(err) + } + return false, nil + } + + for i := 0; i < 10; i++ { + err = cl.Join(context.TODO(), defaults.Namespace, session.ID(sessionID), &personB) + if err == nil { + break + } + } + c.Assert(err, check.IsNil) + } + + // waitForOutput checks the output of the passed in terminal of a string until + // some timeout has occured. + waitForOutput := func(t Terminal, s string) error { + tickerCh := time.Tick(500 * time.Millisecond) + timeoutCh := time.After(30 * time.Second) + for { + select { + case <-tickerCh: + if strings.Contains(t.Output(500), s) { + return nil + } + case <-timeoutCh: + return trace.BadParameter("timed out waiting for output") + } + } + + } + + // Open session, the initial size will be 80x24. + go openSession() + + // Use the "printf" command to print the terminal size on the screen and + // make sure it is 80x25. + personA.Type("\aprintf '%s %s\n' $(tput cols) $(tput lines)\n\r\a") + err := waitForOutput(personA, "80 25") + c.Assert(err, check.IsNil) + + // As soon as person B joins the session, the terminal is resized to 160x48. + // Have another user join the session. As soon as the second shell is + // created, the window is resized to 160x48 (see joinSession implementation). + go joinSession() + + // Use the "printf" command to print the window size again and make sure it's + // 160x48. + personA.Type("\aprintf '%s %s\n' $(tput cols) $(tput lines)\n\r\a") + err = waitForOutput(personA, "160 48") + c.Assert(err, check.IsNil) + + // Close the session. + personA.Type("\aexit\r\n\a") +} + // runCommand is a shortcut for running SSH command, it creates a client // connected to proxy of the passed in instance, runs the command, and returns // the result. If multiple attempts are requested, a 250 millisecond delay is diff --git a/lib/client/api.go b/lib/client/api.go index cb365ff921155..2255d178a76a6 100644 --- a/lib/client/api.go +++ b/lib/client/api.go @@ -518,8 +518,12 @@ type TeleportClient struct { localAgent *LocalKeyAgent // OnShellCreated gets called when the shell is created. It's - // safe to keep it nil + // safe to keep it nil. OnShellCreated ShellCreatedCallback + + // eventsCh is a channel used to inform clients about events have that + // occured during the session. + eventsCh chan events.EventFields } // ShellCreatedCallback can be supplied for every teleport client. It will @@ -568,6 +572,12 @@ func NewClient(c *Config) (tc *TeleportClient, err error) { tc.Stdin = os.Stdin } + // Create a buffered channel to hold events that occured during this session. + // This channel must be buffered because the SSH connection directly feeds + // into it. Delays in pulling messages off the global SSH request channel + // could lead to the connection hanging. + tc.eventsCh = make(chan events.EventFields, 1024) + // sometimes we need to use external auth without using local auth // methods, e.g. in automation daemons if c.SkipLocalAuth { @@ -1500,6 +1510,24 @@ func (tc *TeleportClient) u2fLogin(pub []byte) (*auth.SSHLoginResponse, error) { return response, trace.Wrap(err) } +// SendEvent adds a events.EventFields to the channel. +func (tc *TeleportClient) SendEvent(ctx context.Context, e events.EventFields) error { + // Try and send the event to the eventsCh. If blocking, keep blocking until + // the passed in context in canceled. + select { + case tc.eventsCh <- e: + return nil + case <-ctx.Done(): + return trace.Wrap(ctx.Err()) + } +} + +// EventsChannel returns a channel that can be used to listen for events that +// occur for this session. +func (tc *TeleportClient) EventsChannel() <-chan events.EventFields { + return tc.eventsCh +} + // loopbackPool reads trusted CAs if it finds it in a predefined location // and will work only if target proxy address is loopback func loopbackPool(proxyAddr string) *x509.CertPool { diff --git a/lib/client/client.go b/lib/client/client.go index 8f81837f5b75e..297e0747597ec 100644 --- a/lib/client/client.go +++ b/lib/client/client.go @@ -34,6 +34,7 @@ import ( "github.com/gravitational/teleport" "github.com/gravitational/teleport/lib/auth" "github.com/gravitational/teleport/lib/defaults" + "github.com/gravitational/teleport/lib/events" "github.com/gravitational/teleport/lib/services" "github.com/gravitational/teleport/lib/sshutils" "github.com/gravitational/teleport/lib/sshutils/scp" @@ -63,6 +64,7 @@ type NodeClient struct { Namespace string Client *ssh.Client Proxy *ProxyClient + TC *TeleportClient } // GetSites returns list of the "sites" (AKA teleport clusters) connected to the proxy @@ -420,9 +422,62 @@ func (proxy *ProxyClient) ConnectToNode(ctx context.Context, nodeAddress string, return nil, trace.Wrap(err) } - client := ssh.NewClient(conn, chans, reqs) + // We pass an empty channel which we close right away to ssh.NewClient + // because the client need to handle requests itself. + emptyCh := make(chan *ssh.Request) + close(emptyCh) - return &NodeClient{Client: client, Proxy: proxy, Namespace: defaults.Namespace}, nil + client := ssh.NewClient(conn, chans, emptyCh) + + nc := &NodeClient{ + Client: client, + Proxy: proxy, + Namespace: defaults.Namespace, + TC: proxy.teleportClient, + } + + // Start a goroutine that will run for the duration of the client to process + // global requests from the client. Teleport clients will use this to update + // terminal sizes when the remote PTY size has changed. + go nc.handleGlobalRequests(ctx, reqs) + + return nc, nil +} + +func (c *NodeClient) handleGlobalRequests(ctx context.Context, requestCh <-chan *ssh.Request) { + for { + select { + case r := <-requestCh: + // When the channel is closing, nil is returned. + if r == nil { + return + } + + switch r.Type { + case teleport.SessionEvent: + // Parse event and create events.EventFields that can be consumed directly + // by caller. + var e events.EventFields + err := json.Unmarshal(r.Payload, &e) + if err != nil { + log.Warnf("Unable to parse event: %v: %v.", string(r.Payload), err) + continue + } + + // Send event to event channel. + err = c.TC.SendEvent(ctx, e) + if err != nil { + log.Warnf("Unable to send event %v: %v.", string(r.Payload), err) + continue + } + default: + // This handles keepalive messages and matches the behaviour of OpenSSH. + r.Reply(false, nil) + } + case <-ctx.Done(): + return + } + } } // newClientConn is a wrapper around ssh.NewClientConn @@ -504,18 +559,18 @@ func (client *NodeClient) Download(remoteSourcePath, localDestinationPath string // scp runs remote scp command(shellCmd) on the remote server and // runs local scp handler using scpConf func (client *NodeClient) scp(scpCommand scp.Command, shellCmd string, errWriter io.Writer) error { - session, err := client.Client.NewSession() + s, err := client.Client.NewSession() if err != nil { return trace.Wrap(err) } - defer session.Close() + defer s.Close() - stdin, err := session.StdinPipe() + stdin, err := s.StdinPipe() if err != nil { return trace.Wrap(err) } - stdout, err := session.StdoutPipe() + stdout, err := s.StdoutPipe() if err != nil { return trace.Wrap(err) } @@ -537,7 +592,7 @@ func (client *NodeClient) scp(scpCommand scp.Command, shellCmd string, errWriter close(closeC) }() - runErr := session.Run(shellCmd) + runErr := s.Run(shellCmd) if runErr != nil && err == nil { err = runErr } diff --git a/lib/client/session.go b/lib/client/session.go index a8a3c0a3e9f81..989c38d015022 100644 --- a/lib/client/session.go +++ b/lib/client/session.go @@ -32,6 +32,7 @@ import ( "github.com/gravitational/teleport" "github.com/gravitational/teleport/lib/defaults" + "github.com/gravitational/teleport/lib/events" "github.com/gravitational/teleport/lib/session" "github.com/gravitational/teleport/lib/sshutils" "github.com/gravitational/teleport/lib/utils" @@ -44,6 +45,7 @@ import ( type NodeSession struct { // namespace is a session this namespace belongs to namespace string + // id is the Teleport session ID id session.ID @@ -281,81 +283,102 @@ func (ns *NodeSession) allocateTerminal(termType string, s *ssh.Session) (io.Rea } func (ns *NodeSession) updateTerminalSize(s *ssh.Session) { - // sibscribe for "terminal resized" signal: - sigC := make(chan os.Signal, 1) - signal.Notify(sigC, syscall.SIGWINCH) - currentSize, _ := term.GetWinsize(0) + // SIGWINCH is sent to the process when the window size of the terminal has + // changed. + sigwinchCh := make(chan os.Signal, 1) + signal.Notify(sigwinchCh, syscall.SIGWINCH) - // start the timer which asks for server-side window size changes: - siteClient, err := ns.nodeClient.Proxy.ConnectToSite(context.TODO(), true) + lastSize, err := term.GetWinsize(0) if err != nil { - log.Error(err) + log.Errorf("Unable to get window size: %v", err) return } - tick := time.NewTicker(defaults.SessionRefreshPeriod) - defer tick.Stop() - var prevSess *session.Session + // Sync the local terminal with size received from the remote server every + // two seconds. If we try and do it live, synchronization jitters occur. + tickerCh := time.NewTicker(defaults.TerminalResizePeriod) + defer tickerCh.Stop() + for { select { - // our own terminal window got resized: - case sig := <-sigC: - if sig == nil { + // The client updated the size of the local PTY. This change needs to occur + // on the server side PTY as well. + case sigwinch := <-sigwinchCh: + if sigwinch == nil { return } - // get the size: - winSize, err := term.GetWinsize(0) + + currSize, err := term.GetWinsize(0) if err != nil { - log.Warnf("[CLIENT] Error getting size: %s", err) - break + log.Warnf("Unable to get window size: %v.", err) + continue } - // it's the result of our own size change (see below) - if winSize.Height == currentSize.Height && winSize.Width == currentSize.Width { + + // Terminal size has not changed, don't do anything. + if currSize.Height == lastSize.Height && currSize.Width == lastSize.Width { continue } - // send the new window size to the server + + // Send the "window-change" request over the channel. _, err = s.SendRequest( - sshutils.WindowChangeRequest, false, + sshutils.WindowChangeRequest, + false, ssh.Marshal(sshutils.WinChangeReqParams{ - W: uint32(winSize.Width), - H: uint32(winSize.Height), + W: uint32(currSize.Width), + H: uint32(currSize.Height), })) if err != nil { - log.Warnf("[CLIENT] failed to send window change reqest: %v", err) + log.Warnf("Unable to send %v reqest: %v.", sshutils.WindowChangeRequest, err) + continue } - case <-tick.C: - sess, err := siteClient.GetSession(ns.namespace, ns.id) + + log.Debugf("Updated window size from %v to %v due to SIGWINCH.", lastSize, currSize) + + lastSize = currSize + + // Extract "resize" events in the stream and store the last window size. + case event := <-ns.nodeClient.TC.EventsChannel(): + // Only "resize" events are important to tsh, all others can be ignored. + if event.GetType() != events.ResizeEvent { + continue + } + + terminalParams, err := session.UnmarshalTerminalParams(event.GetString(events.TerminalSize)) if err != nil { - if !trace.IsNotFound(err) { - log.Error(trace.DebugReport(err)) - } + log.Warnf("Unable to unmarshal terminal parameters: %v.", err) continue } - // no previous session - if prevSess == nil || sess == nil { - prevSess = sess + + lastSize = terminalParams.Winsize() + log.Debugf("Recevied window size %v from node in session.\n", lastSize, event.GetString(events.SessionEventID)) + + // Update size of local terminal with the last size received from remote server. + case <-tickerCh.C: + // Get the current size of the terminal and the last size report that was + // received. + currSize, err := term.GetWinsize(0) + if err != nil { + log.Warnf("Unable to get current terminal size: %v.", err) continue } - // nothing changed - if prevSess.TerminalParams.W == sess.TerminalParams.W && prevSess.TerminalParams.H == sess.TerminalParams.H { + + // Terminal size has not changed, don't do anything. + if currSize.Width == lastSize.Width && currSize.Height == lastSize.Height { continue } - log.Infof("[CLIENT] updating the session %v with %d parties", sess.ID, len(sess.Parties)) - newSize := sess.TerminalParams.Winsize() - currentSize, err = term.GetWinsize(0) + // This changes the size of the local PTY. This will re-draw what's within + // the window. + err = term.SetWinsize(0, lastSize) if err != nil { - log.Error(err) - } - if currentSize.Width != newSize.Width || currentSize.Height != newSize.Height { - // ok, something have changed, let's resize to the new parameters - err = term.SetWinsize(0, newSize) - if err != nil { - log.Error(err) - } - os.Stdout.Write([]byte(fmt.Sprintf("\x1b[8;%d;%dt", newSize.Height, newSize.Width))) + log.Warnf("Unable to update terminal size: %v.\n", err) + continue } - prevSess = sess + + // This is what we use to resize the physical terminal window itself. + os.Stdout.Write([]byte(fmt.Sprintf("\x1b[8;%d;%dt", lastSize.Height, lastSize.Width))) + + log.Debugf("Updated window size from to %v due to remote window change.", currSize, lastSize) case <-ns.closer.C: return } diff --git a/lib/defaults/defaults.go b/lib/defaults/defaults.go index 19b9a0dcb4715..1e639bb1c6354 100644 --- a/lib/defaults/defaults.go +++ b/lib/defaults/defaults.go @@ -221,19 +221,21 @@ var ( // their stored list of auth servers AuthServersRefreshPeriod = 30 * time.Second - // SessionRefreshPeriod is how often tsh polls information about session - // TODO(klizhentas) all polling periods should go away once backend - // releases events + // TerminalResizePeriod is how long tsh waits before updating the size of the + // terminal window. + TerminalResizePeriod = 2 * time.Second + + // SessionRefreshPeriod is how often session data is updated on the backend. + // The web client polls this information about session to update the UI. + // + // TODO(klizhentas): All polling periods should go away once backend supports + // events. SessionRefreshPeriod = 2 * time.Second // SessionIdlePeriod is the period of inactivity after which the // session will be considered idle SessionIdlePeriod = SessionRefreshPeriod * 10 - // TerminalSizeRefreshPeriod is how frequently clients who share sessions sync up - // their terminal sizes - TerminalSizeRefreshPeriod = 2 * time.Second - // NewtworkBackoffDuration is a standard backoff on network requests // usually is slow, e.g. once in 30 seconds NetworkBackoffDuration = time.Second * 30 @@ -399,3 +401,15 @@ const ( // CATTL is a default lifetime of a CA certificate CATTL = time.Hour * 24 * 365 * 10 ) + +const ( + // AuditEnvelopeType is sending a audit event over the websocket to the web client. + AuditEnvelopeType = "audit" + + // RawEnvelopeType is sending raw terminal bytes over the websocket to the web + // client. + RawEnvelopeType = "raw" + + // ResizeRequestEnvelopeType is receiving a resize request. + ResizeRequestEnvelopeType = "resize.request" +) diff --git a/lib/service/service.go b/lib/service/service.go index 66ba7ec043ef5..2f2c75ab086d8 100644 --- a/lib/service/service.go +++ b/lib/service/service.go @@ -1617,8 +1617,9 @@ func (process *TeleportProcess) initProxyEndpoint(conn *Connector) error { // Register web proxy server var webServer *http.Server + var webHandler *web.RewritingHandler if !process.Config.Proxy.DisableWebService { - webHandler, err := web.NewHandler( + webHandler, err = web.NewHandler( web.Config{ Proxy: tsrv, AuthServers: cfg.AuthServers[0], @@ -1718,6 +1719,9 @@ func (process *TeleportProcess) initProxyEndpoint(conn *Connector) error { if webServer != nil { warnOnErr(webServer.Close()) } + if webHandler != nil { + warnOnErr(webHandler.Close()) + } warnOnErr(sshProxy.Close()) } else { log.Infof("Shutting down gracefully.") @@ -1729,6 +1733,9 @@ func (process *TeleportProcess) initProxyEndpoint(conn *Connector) error { if webServer != nil { warnOnErr(webServer.Shutdown(ctx)) } + if webHandler != nil { + warnOnErr(webHandler.Close()) + } } log.Infof("Exited.") }) diff --git a/lib/session/session.go b/lib/session/session.go index 0c6834a87c60a..3396bf4869191 100644 --- a/lib/session/session.go +++ b/lib/session/session.go @@ -21,6 +21,8 @@ package session import ( "fmt" "sort" + "strconv" + "strings" "time" "github.com/gravitational/teleport/lib/backend" @@ -154,12 +156,35 @@ func (p *Party) String() string { ) } -// TerminalParams holds parameters of the terminal used in session +// TerminalParams holds the terminal size in a session. type TerminalParams struct { W int `json:"w"` H int `json:"h"` } +// UnmarshalTerminalParams takes a serialized string that contains the +// terminal parameters and returns a *TerminalParams. +func UnmarshalTerminalParams(s string) (*TerminalParams, error) { + parts := strings.Split(s, ":") + if len(parts) != 2 { + return nil, trace.BadParameter("failed to unmarshal: too many parts") + } + + w, err := strconv.Atoi(parts[0]) + if err != nil { + return nil, trace.Wrap(err) + } + h, err := strconv.Atoi(parts[1]) + if err != nil { + return nil, trace.Wrap(err) + } + + return &TerminalParams{ + W: w, + H: h, + }, nil +} + // Serialize is a more strict version of String(): it returns a string // representation of terminal size, this is used in our APIs. // Format : "W:H" diff --git a/lib/srv/ctx.go b/lib/srv/ctx.go index 57eea72b3ac60..b82a2867f5a9d 100644 --- a/lib/srv/ctx.go +++ b/lib/srv/ctx.go @@ -172,6 +172,10 @@ type ServerContext struct { // ClusterName is the name of the cluster current user is authenticated with. ClusterName string + // ClusterConfig holds the cluster configuration at the time this context was + // created. + ClusterConfig services.ClusterConfig + // RemoteClient holds a SSH client to a remote server. Only used by the // recording proxy. RemoteClient *ssh.Client @@ -183,7 +187,12 @@ type ServerContext struct { // NewServerContext creates a new *ServerContext which is used to pass and // manage resources. -func NewServerContext(srv Server, conn *ssh.ServerConn, identityContext IdentityContext) *ServerContext { +func NewServerContext(srv Server, conn *ssh.ServerConn, identityContext IdentityContext) (*ServerContext, error) { + clusterConfig, err := srv.GetAccessPoint().GetClusterConfig() + if err != nil { + return nil, trace.Wrap(err) + } + ctx := &ServerContext{ id: int(atomic.AddInt32(&ctxID, int32(1))), env: make(map[string]string), @@ -192,6 +201,7 @@ func NewServerContext(srv Server, conn *ssh.ServerConn, identityContext Identity ExecResultCh: make(chan ExecResult, 10), SubsystemResultCh: make(chan SubsystemResult, 10), ClusterName: conn.Permissions.Extensions[utils.CertTeleportClusterName], + ClusterConfig: clusterConfig, Identity: identityContext, } @@ -205,7 +215,8 @@ func NewServerContext(srv Server, conn *ssh.ServerConn, identityContext Identity "id": ctx.id, }, }) - return ctx + + return ctx, nil } func (c *ServerContext) ID() int { diff --git a/lib/srv/exec.go b/lib/srv/exec.go index bb2fbd89f3f9e..7a2e1c5db09ae 100644 --- a/lib/srv/exec.go +++ b/lib/srv/exec.go @@ -76,8 +76,8 @@ type Exec interface { // NewExecRequest creates a new local or remote Exec. func NewExecRequest(ctx *ServerContext, command string) (Exec, error) { - // doesn't matter what mode the cluster is in, if this is a teleport node - // return a local *localExec + // It doesn't matter what mode the cluster is in, if this is a Teleport node + // return a local *localExec. if ctx.srv.Component() == teleport.ComponentNode { return &localExec{ Ctx: ctx, @@ -85,14 +85,9 @@ func NewExecRequest(ctx *ServerContext, command string) (Exec, error) { }, nil } - clusterConfig, err := ctx.srv.GetAccessPoint().GetClusterConfig() - if err != nil { - return nil, trace.Wrap(err) - } - - // when in recording mode, return an *remoteExec which will execute the - // command on a remote host. used by forwarding nodes. - if clusterConfig.GetSessionRecording() == services.RecordAtProxy { + // When in recording mode, return an *remoteExec which will execute the + // command on a remote host. This is used by in-memory forwarding nodes. + if ctx.ClusterConfig.GetSessionRecording() == services.RecordAtProxy { return &remoteExec{ ctx: ctx, command: command, @@ -100,8 +95,8 @@ func NewExecRequest(ctx *ServerContext, command string) (Exec, error) { }, nil } - // otherwise return a *localExec which will execute locally on the server. - // used by the regular teleport nodes. + // Otherwise return a *localExec which will execute locally on the server. + // used by the regular Teleport nodes. return &localExec{ Ctx: ctx, Command: command, diff --git a/lib/srv/forward/sshserver.go b/lib/srv/forward/sshserver.go index 6d72f932917b1..a95e13326891b 100644 --- a/lib/srv/forward/sshserver.go +++ b/lib/srv/forward/sshserver.go @@ -507,13 +507,8 @@ func (s *Server) handleChannel(nch ssh.NewChannel) { channelType := nch.ChannelType() switch channelType { - // A client requested the terminal size to be sent along with every - // session message (Teleport-specific SSH channel for web-based terminals). - case "x-teleport-request-resize-events": - ch, _, _ := nch.Accept() - go s.handleTerminalResize(ch) // Channels of type "session" handle requests that are invovled in running - // commands on a server. + // commands on a server, subsystem requests, and agent forwarding. case "session": ch, requests, err := nch.Accept() if err != nil { @@ -549,12 +544,17 @@ func (s *Server) handleDirectTCPIPRequest(ch ssh.Channel, req *sshutils.DirectTC // Create context for this channel. This context will be closed when // forwarding is complete. - ctx := srv.NewServerContext(s, s.sconn, s.identityContext) + ctx, err := srv.NewServerContext(s, s.sconn, s.identityContext) + if err != nil { + ctx.Errorf("Unable to create connection context: %v.", err) + ch.Stderr().Write([]byte("Unable to create connection context.")) + return + } ctx.RemoteClient = s.remoteClient defer ctx.Close() // Check if the role allows port forwarding for this user. - err := s.authHandlers.CheckPortForward(dstAddr, ctx) + err = s.authHandlers.CheckPortForward(dstAddr, ctx) if err != nil { ch.Stderr().Write([]byte(err.Error())) return @@ -597,27 +597,18 @@ func (s *Server) handleDirectTCPIPRequest(ch ssh.Channel, req *sshutils.DirectTC wg.Wait() } -// handleTerminalResize is called by the web proxy via its SSH connection. -// when a web browser connects to the web API, the web proxy asks us, -// by creating this new SSH channel, to start injecting the terminal size -// into every SSH write back to it. -// -// This is the only way to make web-based terminal UI not break apart -// when window changes its size. -func (s *Server) handleTerminalResize(channel ssh.Channel) { - err := s.sessionRegistry.PushTermSizeToParty(s.sconn, channel) - if err != nil { - s.log.Warnf("Unable to push terminal size to party: %v", err) - } -} - // handleSessionRequests handles out of band session requests once the session // channel has been created this function's loop handles all the "exec", // "subsystem" and "shell" requests. func (s *Server) handleSessionRequests(ch ssh.Channel, in <-chan *ssh.Request) { // Create context for this channel. This context will be closed when the // session request is complete. - ctx := srv.NewServerContext(s, s.sconn, s.identityContext) + ctx, err := srv.NewServerContext(s, s.sconn, s.identityContext) + if err != nil { + ctx.Errorf("Unable to create connection context: %v.", err) + ch.Stderr().Write([]byte("Unable to create connection context.")) + return + } ctx.RemoteClient = s.remoteClient ctx.AddCloser(ch) defer ctx.Close() diff --git a/lib/srv/regular/sshserver.go b/lib/srv/regular/sshserver.go index 6a2ea7832fbe2..b1791b40dd341 100644 --- a/lib/srv/regular/sshserver.go +++ b/lib/srv/regular/sshserver.go @@ -699,10 +699,15 @@ func (s *Server) HandleNewChan(nc net.Conn, sconn *ssh.ServerConn, nch ssh.NewCh channelType := nch.ChannelType() if s.proxyMode { - if channelType == "session" { // interactive sessions + // Channels of type "session" handle requests that are invovled in running + // commands on a server. In the case of proxy mode subsystem and agent + // forwarding requests occur over the "session" channel. + if channelType == "session" { ch, requests, err := nch.Accept() if err != nil { - log.Infof("could not accept channel (%s)", err) + log.Warnf("Unable to accept channel: %v.", err) + nch.Reject(ssh.ConnectionFailed, fmt.Sprintf("unable to accept channel: %v", err)) + return } go s.handleSessionRequests(sconn, identityContext, ch, requests) } else { @@ -712,26 +717,29 @@ func (s *Server) HandleNewChan(nc net.Conn, sconn *ssh.ServerConn, nch ssh.NewCh } switch channelType { - // a client requested the terminal size to be sent along with every - // session message (Teleport-specific SSH channel for web-based terminals) - case "x-teleport-request-resize-events": - ch, _, _ := nch.Accept() - go s.handleTerminalResize(sconn, ch) - case "session": // interactive sessions + // Channels of type "session" handle requests that are invovled in running + // commands on a server, subsystem requests, and agent forwarding. + case "session": ch, requests, err := nch.Accept() if err != nil { - log.Infof("could not accept channel (%s)", err) + log.Warnf("Unable to accept channel: %v.", err) + nch.Reject(ssh.ConnectionFailed, fmt.Sprintf("unable to accept channel: %v", err)) + return } go s.handleSessionRequests(sconn, identityContext, ch, requests) - case "direct-tcpip": //port forwarding + // Channels of type "direct-tcpip" handles request for port forwarding. + case "direct-tcpip": req, err := sshutils.ParseDirectTCPIPReq(nch.ExtraData()) if err != nil { - log.Errorf("failed to parse request data: %v, err: %v", string(nch.ExtraData()), err) + log.Errorf("Failed to parse request data: %v, err: %v.", string(nch.ExtraData()), err) nch.Reject(ssh.UnknownChannelType, "failed to parse direct-tcpip request") + return } ch, _, err := nch.Accept() if err != nil { - log.Infof("could not accept channel (%s)", err) + log.Warnf("Unable to accept channel: %v.", err) + nch.Reject(ssh.ConnectionFailed, fmt.Sprintf("unable to accept channel: %v", err)) + return } go s.handleDirectTCPIPRequest(sconn, identityContext, ch, req) default: @@ -739,10 +747,17 @@ func (s *Server) HandleNewChan(nc net.Conn, sconn *ssh.ServerConn, nch ssh.NewCh } } -// handleDirectTCPIPRequest does the port forwarding +// handleDirectTCPIPRequest handles port forwarding requests. func (s *Server) handleDirectTCPIPRequest(sconn *ssh.ServerConn, identityContext srv.IdentityContext, ch ssh.Channel, req *sshutils.DirectTCPIPReq) { - // ctx holds the connection context and keeps track of the associated resources - ctx := srv.NewServerContext(s, sconn, identityContext) + // Create context for this channel. This context will be closed when + // forwarding is complete. + ctx, err := srv.NewServerContext(s, sconn, identityContext) + if err != nil { + ctx.Errorf("Unable to create connection context: %v.", err) + ch.Stderr().Write([]byte("Unable to create connection context.")) + return + } + ctx.IsTestStub = s.isTestStub ctx.AddCloser(ch) defer ctx.Debugf("direct-tcp closed") @@ -752,7 +767,7 @@ func (s *Server) handleDirectTCPIPRequest(sconn *ssh.ServerConn, identityContext dstAddr := fmt.Sprintf("%v:%d", req.Host, req.Port) // check if the role allows port forwarding for this user - err := s.authHandlers.CheckPortForward(dstAddr, ctx) + err = s.authHandlers.CheckPortForward(dstAddr, ctx) if err != nil { ch.Stderr().Write([]byte(err.Error())) return @@ -822,25 +837,18 @@ func (s *Server) handleDirectTCPIPRequest(sconn *ssh.ServerConn, identityContext } } -// handleTerminalResize is called by the web proxy via its SSH connection. -// when a web browser connects to the web API, the web proxy asks us, -// by creating this new SSH channel, to start injecting the terminal size -// into every SSH write back to it. -// -// this is the only way to make web-based terminal UI not break apart -// when window changes its size -func (s *Server) handleTerminalResize(sconn *ssh.ServerConn, ch ssh.Channel) { - err := s.reg.PushTermSizeToParty(sconn, ch) +// handleSessionRequests handles out of band session requests once the session +// channel has been created this function's loop handles all the "exec", +// "subsystem" and "shell" requests. +func (s *Server) handleSessionRequests(sconn *ssh.ServerConn, identityContext srv.IdentityContext, ch ssh.Channel, in <-chan *ssh.Request) { + // Create context for this channel. This context will be closed when the + // session request is complete. + ctx, err := srv.NewServerContext(s, sconn, identityContext) if err != nil { - log.Warnf("Unable to push terminal size to party: %v", err) + ctx.Errorf("Unable to create connection context: %v.", err) + ch.Stderr().Write([]byte("Unable to create connection context.")) + return } -} - -// handleSessionRequests handles out of band session requests once the session channel has been created -// this function's loop handles all the "exec", "subsystem" and "shell" requests. -func (s *Server) handleSessionRequests(sconn *ssh.ServerConn, identityContext srv.IdentityContext, ch ssh.Channel, in <-chan *ssh.Request) { - // ctx holds the connection context and keeps track of the associated resources - ctx := srv.NewServerContext(s, sconn, identityContext) ctx.IsTestStub = s.isTestStub ctx.AddCloser(ch) defer ctx.Close() @@ -991,29 +999,27 @@ func (s *Server) handleAgentForwardNode(req *ssh.Request, ctx *srv.ServerContext // requests should never fail, all errors should be logged and we should // continue processing requests. func (s *Server) handleAgentForwardProxy(req *ssh.Request, ctx *srv.ServerContext) error { - // we only support agent forwarding at the proxy when the proxy is in recording mode - clusterConfig, err := s.GetAccessPoint().GetClusterConfig() - if err != nil { - return trace.Wrap(err) - } - if clusterConfig.GetSessionRecording() != services.RecordAtProxy { + // Forwarding an agent to the proxy is only supported when the proxy is in + // recording mode. + if ctx.ClusterConfig.GetSessionRecording() != services.RecordAtProxy { return trace.BadParameter("agent forwarding to proxy only supported in recording mode") } - // check if the user's RBAC role allows agent forwarding - err = s.authHandlers.CheckAgentForward(ctx) + // Check if the user's RBAC role allows agent forwarding. + err := s.authHandlers.CheckAgentForward(ctx) if err != nil { return trace.Wrap(err) } - // open a channel to the client where the client will serve an agent + // Open a channel to the client where the client will serve an agent. authChannel, _, err := ctx.Conn.OpenChannel(sshutils.AuthAgentRequest, nil) if err != nil { return trace.Wrap(err) } - // we save the agent so it can be used when we make a proxy subsystem request - // later and use it to build a remote connection to the target node. + // Save the agent so it can be used when making a proxy subsystem request + // later. It will also be used when building a remote connection to the + // target node. ctx.SetAgent(agent.NewClient(authChannel), authChannel) return nil diff --git a/lib/srv/sess.go b/lib/srv/sess.go index a32abb162bf25..8c6563964db2e 100644 --- a/lib/srv/sess.go +++ b/lib/srv/sess.go @@ -18,6 +18,7 @@ package srv import ( "context" + "encoding/json" "fmt" "io" "path/filepath" @@ -110,22 +111,56 @@ func (s *SessionRegistry) Close() { s.log.Debugf("Closing Session Registry.") } -// joinShell either joins an existing session or starts a new shell +// emitSessionJoinEvent emits a session join event to both the Audit Log as +// well as sending a "x-teleport-event" global request on the SSH connection. +func (s *SessionRegistry) emitSessionJoinEvent(ctx *ServerContext) { + sessionJoinEvent := events.EventFields{ + events.EventType: events.SessionJoinEvent, + events.SessionEventID: string(ctx.session.id), + events.EventNamespace: s.srv.GetNamespace(), + events.EventLogin: ctx.Identity.Login, + events.EventUser: ctx.Identity.TeleportUser, + events.LocalAddr: ctx.Conn.LocalAddr().String(), + events.RemoteAddr: ctx.Conn.RemoteAddr().String(), + events.SessionServerID: ctx.srv.ID(), + } + + // Emit session join event to Audit Log. + ctx.session.recorder.alog.EmitAuditEvent(events.SessionJoinEvent, sessionJoinEvent) + + // Notify all members of the party that a new member has joined over the + // "x-teleport-event" channel. + for _, p := range s.getParties(ctx.session) { + eventPayload, err := json.Marshal(sessionJoinEvent) + if err != nil { + s.log.Warnf("Unable to marshal %v for %v: %v.", events.SessionJoinEvent, p.sconn.RemoteAddr(), err) + continue + } + _, _, err = p.sconn.SendRequest(teleport.SessionEvent, false, eventPayload) + if err != nil { + s.log.Warnf("Unable to send %v to %v: %v.", events.SessionJoinEvent, p.sconn.RemoteAddr(), err) + continue + } + s.log.Debugf("Sent %v to %v.", events.SessionJoinEvent, p.sconn.RemoteAddr()) + } +} + +// OpenSession either joins an existing session or starts a new session. func (s *SessionRegistry) OpenSession(ch ssh.Channel, req *ssh.Request, ctx *ServerContext) error { if ctx.session != nil { - // emit "joined session" event: - ctx.session.recorder.alog.EmitAuditEvent(events.SessionJoinEvent, events.EventFields{ - events.SessionEventID: string(ctx.session.id), - events.EventNamespace: s.srv.GetNamespace(), - events.EventLogin: ctx.Identity.Login, - events.EventUser: ctx.Identity.TeleportUser, - events.LocalAddr: ctx.Conn.LocalAddr().String(), - events.RemoteAddr: ctx.Conn.RemoteAddr().String(), - events.SessionServerID: ctx.srv.ID(), - }) ctx.Infof("Joining existing session %v.", ctx.session.id) + + // Update the in-memory data structure that a party member has joined. _, err := ctx.session.join(ch, req, ctx) - return trace.Wrap(err) + if err != nil { + return trace.Wrap(err) + } + + // Emit session join event to both the Audit Log as well as over the + // "x-teleport-event" channel in the SSH connection. + s.emitSessionJoinEvent(ctx) + + return nil } // session not found? need to create one. start by getting/generating an ID for it sid, found := ctx.GetEnv(sshutils.SessionEnvVar) @@ -150,25 +185,52 @@ func (s *SessionRegistry) OpenSession(ch ssh.Channel, req *ssh.Request, ctx *Ser return nil } -// leaveSession removes the given party from this session +// emitSessionLeaveEvent emits a session leave event to both the Audit Log as +// well as sending a "x-teleport-event" global request on the SSH connection. +func (s *SessionRegistry) emitSessionLeaveEvent(party *party) { + sessionLeaveEvent := events.EventFields{ + events.EventType: events.SessionLeaveEvent, + events.SessionEventID: party.id.String(), + events.EventUser: party.user, + events.SessionServerID: party.serverID, + events.EventNamespace: s.srv.GetNamespace(), + } + + // Emit session leave event to Audit Log. + party.s.recorder.alog.EmitAuditEvent(events.SessionLeaveEvent, sessionLeaveEvent) + + // Notify all members of the party that a new member has left over the + // "x-teleport-event" channel. + for _, p := range s.getParties(party.s) { + eventPayload, err := json.Marshal(sessionLeaveEvent) + if err != nil { + s.log.Warnf("Unable to marshal %v for %v: %v.", events.SessionJoinEvent, p.sconn.RemoteAddr(), err) + continue + } + _, _, err = p.sconn.SendRequest(teleport.SessionEvent, false, eventPayload) + if err != nil { + s.log.Warnf("Unable to send %v to %v: %v.", events.SessionJoinEvent, p.sconn.RemoteAddr(), err) + continue + } + s.log.Debugf("Sent %v to %v.", events.SessionJoinEvent, p.sconn.RemoteAddr()) + } +} + +// leaveSession removes the given party from this session. func (s *SessionRegistry) leaveSession(party *party) error { sess := party.s s.Lock() defer s.Unlock() - // remove from in-memory representation of the session: + // Emit session leave event to both the Audit Log as well as over the + // "x-teleport-event" channel in the SSH connection. + s.emitSessionLeaveEvent(party) + + // Remove member from in-members representation of party. if err := sess.removeParty(party); err != nil { return trace.Wrap(err) } - // emit "session leave" event (party left the session) - sess.recorder.alog.EmitAuditEvent(events.SessionLeaveEvent, events.EventFields{ - events.SessionEventID: string(sess.id), - events.EventUser: party.user, - events.SessionServerID: party.serverID, - events.EventNamespace: s.srv.GetNamespace(), - }) - // this goroutine runs for a short amount of time only after a session // becomes empty (no parties). It allows session to "linger" for a bit // allowing parties to reconnect if they lost connection momentarily @@ -221,54 +283,84 @@ func (s *SessionRegistry) leaveSession(party *party) error { // getParties allows to safely return a list of parties connected to this // session (as determined by ctx) -func (s *SessionRegistry) getParties(ctx *ServerContext) (parties []*party) { - sess := ctx.session - if sess != nil { - sess.Lock() - defer sess.Unlock() - - parties = make([]*party, 0, len(sess.parties)) - for _, p := range sess.parties { - parties = append(parties, p) - } +func (s *SessionRegistry) getParties(sess *session) []*party { + var parties []*party + + if sess == nil { + return parties + } + + sess.Lock() + defer sess.Unlock() + + for _, p := range sess.parties { + parties = append(parties, p) } + return parties } -// notifyWinChange is called when an SSH server receives a command notifying -// us that the terminal size has changed +// NotifyWinChange is called to notify all members in the party that the PTY +// size has changed. The notification is sent as a global SSH request and it +// is the responsibility of the client to update it's window size upon receipt. func (s *SessionRegistry) NotifyWinChange(params rsession.TerminalParams, ctx *ServerContext) error { if ctx.session == nil { s.log.Debugf("Unable to update window size, no session found in context.") return nil } sid := ctx.session.id - // report this to the event/audit log: - ctx.session.recorder.alog.EmitAuditEvent(events.ResizeEvent, events.EventFields{ + + // Build the resize event. + resizeEvent := events.EventFields{ + events.EventType: events.ResizeEvent, events.EventNamespace: s.srv.GetNamespace(), events.SessionEventID: sid, events.EventLogin: ctx.Identity.Login, events.EventUser: ctx.Identity.TeleportUser, events.TerminalSize: params.Serialize(), - }) + } + + // Report the updated window size to the event log (this is so the sessions + // can be replayed correctly). + ctx.session.recorder.alog.EmitAuditEvent(events.ResizeEvent, resizeEvent) + + // Update the size of the server side PTY. err := ctx.session.term.SetWinSize(params) if err != nil { return trace.Wrap(err) } - // notify all connected parties about the change in real time - // (if they're capable) - for _, p := range s.getParties(ctx) { - p.onWindowChanged(¶ms) + // If sessions are being recorded at the proxy, sessions can not be shared. + // In that situation, PTY size information does not need to be propagated + // back to all clients and we can return right away. + if ctx.ClusterConfig.GetSessionRecording() == services.RecordAtProxy { + return nil } - go func() { - err := s.srv.GetSessionServer().UpdateSession( - rsession.UpdateRequest{ID: sid, TerminalParams: ¶ms, Namespace: s.srv.GetNamespace()}) + // Notify all members of the party (except originator) that the size of the + // window has changed so the client can update it's own local PTY. Note that + // OpenSSH clients will ignore this and not update their own local PTY. + for _, p := range s.getParties(ctx.session) { + // Don't send the window change notification back to the originator. + if p.ctx.ID() == ctx.ID() { + continue + } + + eventPayload, err := json.Marshal(resizeEvent) if err != nil { - s.log.Errorf("Unable to update session %v: %v", sid, err) + s.log.Warnf("Unable to marshal resize event for %v: %v.", p.sconn.RemoteAddr(), err) + continue } - }() + + // Send the message as a global request. + _, _, err = p.sconn.SendRequest(teleport.SessionEvent, false, eventPayload) + if err != nil { + s.log.Warnf("Unable to resize event to %v: %v.", p.sconn.RemoteAddr(), err) + continue + } + s.log.Debugf("Sent resize event %v to %v.", params, p.sconn.RemoteAddr()) + } + return nil } @@ -289,43 +381,6 @@ func (s *SessionRegistry) findSession(id rsession.ID) (*session, bool) { return sess, found } -func (r *SessionRegistry) PushTermSizeToParty(sconn *ssh.ServerConn, ch ssh.Channel) error { - // the party may not be immediately available for this connection, - // keep asking for a full second: - for i := 0; i < 10; i++ { - party := r.partyForConnection(sconn) - if party == nil { - time.Sleep(time.Millisecond * 100) - continue - } - - // this starts a loop which will keep updating the terminal - // size for every SSH write back to this connection - party.termSizePusher(ch) - return nil - } - - return trace.Errorf("unable to push term size to party") -} - -// partyForConnection finds an existing party which owns the given connection -func (r *SessionRegistry) partyForConnection(sconn *ssh.ServerConn) *party { - r.Lock() - defer r.Unlock() - - for _, session := range r.sessions { - session.Lock() - defer session.Unlock() - parties := session.parties - for _, party := range parties { - if party.sconn == sconn { - return party - } - } - } - return nil -} - // sessionRecorder implements io.Writer to be plugged into the multi-writer // associated with every session. It forwards session stream to the audit log type sessionRecorder struct { @@ -343,21 +398,18 @@ type sessionRecorder struct { } func newSessionRecorder(alog events.IAuditLog, ctx *ServerContext, sid rsession.ID) (*sessionRecorder, error) { + var err error var auditLog events.IAuditLog if alog == nil { auditLog = &events.DiscardAuditLog{} } else { - clusterConfig, err := ctx.srv.GetAccessPoint().GetClusterConfig() - if err != nil { - return nil, trace.Wrap(err) - } - // always write sessions to local disk first - // forward them to auth server later + // Always write sessions to local disk first, then forward them to the Auth + // Server later. auditLog, err = events.NewForwarder(events.ForwarderConfig{ SessionID: sid, ServerID: "upload", DataDir: filepath.Join(ctx.srv.GetDataDir(), teleport.LogsDir), - RecordSessions: clusterConfig.GetSessionRecording() != services.RecordOff, + RecordSessions: ctx.ClusterConfig.GetSessionRecording() != services.RecordOff, Namespace: ctx.srv.GetNamespace(), ForwardTo: alog, }) @@ -533,10 +585,12 @@ func newSession(id rsession.ID, r *SessionRegistry, ctx *ServerContext) (*sessio return sess, nil } -// isLingering returns 'true' if every party has left this session +// isLingering returns true if every party has left this session. Occurs +// under a lock. func (s *session) isLingering() bool { s.Lock() defer s.Unlock() + return len(s.parties) == 0 } @@ -644,9 +698,9 @@ func (s *session) start(ch ssh.Channel, ctx *ServerContext) error { events.TerminalSize: params.Serialize(), }) - // start asynchronous loop of synchronizing session state with - // the session server (terminal size and activity) - go s.pollAndSync() + // Start a heartbeat that marks this session as active with current members + // of party in the backend. + go s.heartbeat(ctx) doneCh := make(chan bool, 1) @@ -732,41 +786,25 @@ func (s *session) String() string { return fmt.Sprintf("session(id=%v, parties=%v)", s.id, len(s.parties)) } -// removeParty removes the party from two places: -// 1. from in-memory dictionary inside of this session -// 2. from sessin server's storage +// removePartyMember removes participant from in-memory representation of +// party members. Occurs under a lock. +func (s *session) removePartyMember(party *party) { + s.Lock() + defer s.Unlock() + + delete(s.parties, party.id) +} + +// removeParty removes the party from the in-memory map that holds all party +// members. func (s *session) removeParty(p *party) error { p.ctx.Infof("Removing party %v from session %v", p, s.id) - ns := s.getNamespace() + // Removes participant from in-memory map of party members. + s.removePartyMember(p) - // in-memory locked remove: - lockedRemove := func() { - s.Lock() - defer s.Unlock() - delete(s.parties, p.id) - s.writer.deleteWriter(string(p.id)) - } - lockedRemove() + s.writer.deleteWriter(string(p.id)) - // remove from the session server (asynchronously) - storageRemove := func(db rsession.Service) { - dbSession, err := db.GetSession(ns, s.id) - if err != nil { - s.log.Errorf("Unable to get session %v: %v", s.id, err) - return - } - if dbSession != nil && dbSession.RemoveParty(p.id) { - db.UpdateSession(rsession.UpdateRequest{ - ID: dbSession.ID, - Parties: &dbSession.Parties, - Namespace: ns, - }) - } - } - if s.registry.srv.GetSessionServer() != nil { - go storageRemove(s.registry.srv.GetSessionServer()) - } return nil } @@ -786,81 +824,82 @@ func (s *session) getNamespace() string { return s.registry.srv.GetNamespace() } -// pollAndSync is a loops forever trying to sync terminal size to what's in -// the session (so all connected parties have the same terminal size) and -// update the "active" field of the session. If the session are recorded at -// the proxy, then this function does nothing as it's counterpart in the proxy -// will do this work. -func (s *session) pollAndSync() { +// exportPartyMembers exports participants in the in-memory map of party +// members. Occurs under a lock. +func (s *session) exportPartyMembers() []rsession.Party { + s.Lock() + defer s.Unlock() + + var partyList []rsession.Party + for _, p := range s.parties { + partyList = append(partyList, rsession.Party{ + ID: p.id, + User: p.user, + ServerID: p.serverID, + RemoteAddr: p.site, + LastActive: p.getLastActive(), + }) + } + + return partyList +} + +// heartbeat will loop as long as the session is not closed and mark it as +// active and update the list of party members. If the session are recorded at +// the proxy, then this function does nothing as it's counterpart +// in the proxy will do this work. +func (s *session) heartbeat(ctx *ServerContext) { // If sessions are being recorded at the proxy, an identical version of this // goroutine is running in the proxy, which means it does not need to run here. - clusterConfig, err := s.registry.srv.GetAccessPoint().GetClusterConfig() - if err != nil { - s.log.Errorf("Unable to sync terminal size: %v.", err) - return - } - if clusterConfig.GetSessionRecording() == services.RecordAtProxy && + if ctx.ClusterConfig.GetSessionRecording() == services.RecordAtProxy && s.registry.srv.Component() == teleport.ComponentNode { return } - s.log.Debugf("Starting poll and sync of terminal size to all parties.") - defer s.log.Debugf("Stopping poll and sync of terminal size to all parties.") - - ns := s.getNamespace() - + // If no session server (endpoint interface for active sessions) is passed in + // (for example Teleconsole does this) then nothing to sync. sessionServer := s.registry.srv.GetSessionServer() if sessionServer == nil { return } - errCount := 0 - sync := func() error { - sess, err := sessionServer.GetSession(ns, s.id) - if err != nil || sess == nil { - return trace.Wrap(err) - } - var active = true - sessionServer.UpdateSession(rsession.UpdateRequest{ - Namespace: ns, - ID: sess.ID, - Active: &active, - Parties: nil, - }) - winSize, err := s.term.GetWinSize() - if err != nil { - return err - } - termSizeChanged := (int(winSize.Width) != sess.TerminalParams.W || - int(winSize.Height) != sess.TerminalParams.H) - if termSizeChanged { - s.log.Debugf("Terminal changed from: %v to %v", sess.TerminalParams, winSize) - err = s.term.SetWinSize(sess.TerminalParams) - } - return err - } - tick := time.NewTicker(defaults.TerminalSizeRefreshPeriod) - defer tick.Stop() + s.log.Debugf("Starting poll and sync of terminal size to all parties.") + defer s.log.Debugf("Stopping poll and sync of terminal size to all parties.") + + tickerCh := time.NewTicker(defaults.SessionRefreshPeriod) + defer tickerCh.Stop() + + // Loop as long as the session is active, updating the session in the backend. for { - if err := sync(); err != nil { - s.log.Infof("Unable to sync terminal: %v", err) - errCount++ - // if the error count keeps going up, this means we're stuck in - // a bad state: end this goroutine to avoid leaks - if errCount > maxTermSyncErrorCount { - return - } - } else { - errCount = 0 - } select { + case <-tickerCh.C: + partyList := s.exportPartyMembers() + + var active = true + err := sessionServer.UpdateSession(rsession.UpdateRequest{ + Namespace: s.getNamespace(), + ID: s.id, + Active: &active, + Parties: &partyList, + }) + if err != nil { + s.log.Warnf("Unable to update session %v as active: %v", s.id, err) + } case <-s.closeC: return - case <-tick.C: } } } +// addPartyMember adds participant to in-memory map of party members. Occurs +// under a lock. +func (s *session) addPartyMember(p *party) { + s.Lock() + defer s.Unlock() + + s.parties[p.id] = p +} + // addParty is called when a new party joins the session. func (s *session) addParty(p *party) error { if s.login != p.login { @@ -869,9 +908,11 @@ func (s *session) addParty(p *party) error { s.login, p.login, s.id) } - s.parties[p.id] = p - // write last chunk (so the newly joined parties won't stare - // at a blank screen) + // Adds participant to in-memory map of party members. + s.addPartyMember(p) + + // Write last chunk (so the newly joined parties won't stare at a blank + // screen). getRecentWrite := func() []byte { s.writer.Lock() defer s.writer.Unlock() @@ -883,39 +924,14 @@ func (s *session) addParty(p *party) error { } p.Write(getRecentWrite()) - // register this party as one of the session writers - // (output will go to it) + // Register this party as one of the session writers (output will go to it). s.writer.addWriter(string(p.id), p, true) p.ctx.AddCloser(p) s.term.AddParty(1) - // update session on the session server - storageUpdate := func(db rsession.Service) { - dbSession, err := db.GetSession(s.getNamespace(), s.id) - if err != nil { - s.log.Errorf("Unable to get session %v: %v", s.id, err) - return - } - dbSession.Parties = append(dbSession.Parties, rsession.Party{ - ID: p.id, - User: p.user, - ServerID: p.serverID, - RemoteAddr: p.site, - LastActive: p.getLastActive(), - }) - db.UpdateSession(rsession.UpdateRequest{ - ID: dbSession.ID, - Parties: &dbSession.Parties, - Namespace: s.getNamespace(), - }) - } - if s.registry.srv.GetSessionServer() != nil { - go storageUpdate(s.registry.srv.GetSessionServer()) - } - s.log.Infof("New party %v joined session: %v", p.String(), s.id) - // this goroutine keeps pumping party's input into the session + // This goroutine keeps pumping party's input into the session. go func() { defer s.term.AddParty(-1) _, err := io.Copy(s.term.PTY(), p) @@ -1046,48 +1062,6 @@ func newParty(s *session, ch ssh.Channel, ctx *ServerContext) *party { } } -func (p *party) onWindowChanged(params *rsession.TerminalParams) { - p.log.Debugf("Window size changed to %v in party: %v", params.Serialize(), p.id) - - p.Lock() - defer p.Unlock() - - // this prefix will be appended to the end of every socker write going - // to this party: - prefix := []byte("\x00" + params.Serialize()) - if p.termSizeC != nil && len(p.termSizeC) == 0 { - p.termSizeC <- prefix - } -} - -// This goroutine pushes terminal resize events directly into a connected web client -func (p *party) termSizePusher(ch ssh.Channel) { - var ( - err error - n int - ) - defer func() { - if err != nil { - p.log.Error(err) - } - }() - - for err == nil { - select { - case newSize := <-p.termSizeC: - n, err = ch.Write(newSize) - if err == io.EOF { - continue - } - if err != nil || n == 0 { - return - } - case <-p.closeC: - return - } - } -} - func (p *party) updateActivity() { p.Lock() defer p.Unlock() diff --git a/lib/srv/term.go b/lib/srv/term.go index fc7e6df4fad76..8a7f91f74487f 100644 --- a/lib/srv/term.go +++ b/lib/srv/term.go @@ -85,19 +85,15 @@ type Terminal interface { // NewTerminal returns a new terminal. Terminal can be local or remote // depending on cluster configuration. func NewTerminal(ctx *ServerContext) (Terminal, error) { - // doesn't matter what mode the cluster is in, if this is a teleport node - // return a local terminal + // It doesn't matter what mode the cluster is in, if this is a Teleport node + // return a local terminal. if ctx.srv.Component() == teleport.ComponentNode { return newLocalTerminal(ctx) } - // otherwise find out what mode the cluster is in and return the - // correct terminal - clusterConfig, err := ctx.srv.GetAccessPoint().GetClusterConfig() - if err != nil { - return nil, trace.Wrap(err) - } - if clusterConfig.GetSessionRecording() == services.RecordAtProxy { + // If this is not a Teleport node, find out what mode the cluster is in and + // return the correct terminal. + if ctx.ClusterConfig.GetSessionRecording() == services.RecordAtProxy { return newRemoteTerminal(ctx) } return newLocalTerminal(ctx) diff --git a/lib/srv/termhandlers.go b/lib/srv/termhandlers.go index 7b3d0ee653a76..1ac4a32cb7628 100644 --- a/lib/srv/termhandlers.go +++ b/lib/srv/termhandlers.go @@ -180,22 +180,16 @@ func (t *TermHandlers) HandleShell(ch ssh.Channel, req *ssh.Request, ctx *Server } // HandleWinChange handles requests of type "window-change" which update the -// size of the TTY running on the server. +// size of the PTY running on the server and update any other members in the +// party. func (t *TermHandlers) HandleWinChange(ch ssh.Channel, req *ssh.Request, ctx *ServerContext) error { params, err := parseWinChange(req) if err != nil { - ctx.Error(err) return trace.Wrap(err) } - term := ctx.GetTerm() - if term != nil { - err = term.SetWinSize(*params) - if err != nil { - ctx.Errorf("Unable to set window size: %v", err) - } - } - + // Update any other members in the party that the window size has changed + // and to update their terminal windows accordingly. err = t.SessionRegistry.NotifyWinChange(*params, ctx) if err != nil { return trace.Wrap(err) diff --git a/lib/web/apiserver.go b/lib/web/apiserver.go index 3c7fde03aa724..1711a7b311d2d 100644 --- a/lib/web/apiserver.go +++ b/lib/web/apiserver.go @@ -135,10 +135,6 @@ func NewHandler(cfg Config, opts ...HandlerOption) (*RewritingHandler, error) { } } - if h.sessionStreamPollPeriod == 0 { - h.sessionStreamPollPeriod = sessionStreamPollPeriod - } - if h.clock == nil { h.clock = clockwork.NewRealClock() } @@ -175,12 +171,10 @@ func NewHandler(cfg Config, opts ...HandlerOption) (*RewritingHandler, error) { h.GET("/webapi/sites/:site/namespaces/:namespace/nodes", h.WithClusterAuth(h.siteNodesGet)) // active sessions handlers - h.GET("/webapi/sites/:site/namespaces/:namespace/connect", h.WithClusterAuth(h.siteNodeConnect)) // connect to an active session (via websocket) - h.GET("/webapi/sites/:site/namespaces/:namespace/sessions", h.WithClusterAuth(h.siteSessionsGet)) // get active list of sessions - h.POST("/webapi/sites/:site/namespaces/:namespace/sessions", h.WithClusterAuth(h.siteSessionGenerate)) // create active session metadata - h.GET("/webapi/sites/:site/namespaces/:namespace/sessions/:sid", h.WithClusterAuth(h.siteSessionGet)) // get active session metadata - h.PUT("/webapi/sites/:site/namespaces/:namespace/sessions/:sid", h.WithClusterAuth(h.siteSessionUpdate)) // update active session metadata (parameters) - h.GET("/webapi/sites/:site/namespaces/:namespace/sessions/:sid/events/stream", h.WithClusterAuth(h.siteSessionStream)) // get active session's byte stream (from events) + h.GET("/webapi/sites/:site/namespaces/:namespace/connect", h.WithClusterAuth(h.siteNodeConnect)) // connect to an active session (via websocket) + h.GET("/webapi/sites/:site/namespaces/:namespace/sessions", h.WithClusterAuth(h.siteSessionsGet)) // get active list of sessions + h.POST("/webapi/sites/:site/namespaces/:namespace/sessions", h.WithClusterAuth(h.siteSessionGenerate)) // create active session metadata + h.GET("/webapi/sites/:site/namespaces/:namespace/sessions/:sid", h.WithClusterAuth(h.siteSessionGet)) // get active session metadata // recorded sessions handlers h.GET("/webapi/sites/:site/events", h.WithClusterAuth(h.siteEventsGet)) // get recorded list of sessions (from events) @@ -1406,51 +1400,8 @@ func (h *Handler) siteNodeConnect( // start the websocket session with a web-based terminal: log.Infof("[WEB] getting terminal to '%#v'", req) - term.Run(w, r) - - return nil, nil -} - -// sessionStreamEvent is sent over the session stream socket, it contains -// last events that occurred (only new events are sent) -type sessionStreamEvent struct { - Events []events.EventFields `json:"events"` - Session *session.Session `json:"session"` - Servers []services.ServerV1 `json:"servers"` -} - -// siteSessionStream returns a stream of events related to the session -// -// GET /v1/webapi/sites/:site/namespaces/:namespace/sessions/:sid/events/stream?access_token=bearer_token -// -// Successful response is a websocket stream that allows read write to the server and returns -// json events -// -func (h *Handler) siteSessionStream(w http.ResponseWriter, r *http.Request, p httprouter.Params, ctx *SessionContext, site reversetunnel.RemoteSite) (interface{}, error) { - sessionID, err := session.ParseID(p.ByName("sid")) - if err != nil { - return nil, trace.Wrap(err) - } + term.Serve(w, r) - namespace := p.ByName("namespace") - if !services.IsValidNamespace(namespace) { - return nil, trace.BadParameter("invalid namespace %q", namespace) - } - - connect, err := newSessionStreamHandler(namespace, - *sessionID, ctx, site, h.sessionStreamPollPeriod) - if err != nil { - return nil, trace.Wrap(err) - } - // this is to make sure we close web socket connections once - // sessionContext that owns them expires - ctx.AddClosers(connect) - defer func() { - connect.Close() - ctx.RemoveCloser(connect) - }() - - connect.Handler().ServeHTTP(w, r) return nil, nil } @@ -1496,48 +1447,6 @@ type siteSessionUpdateReq struct { TerminalParams session.TerminalParams `json:"terminal_params"` } -// siteSessionUpdate udpdates the site session -// -// PUT /v1/webapi/sites/:site/sessions/:sid -// -// Request body: -// -// {"terminal_params": {"w": 100, "h": 100}} -// -// Response body: -// -// {"message": "ok"} -// -func (h *Handler) siteSessionUpdate(w http.ResponseWriter, r *http.Request, p httprouter.Params, ctx *SessionContext, site reversetunnel.RemoteSite) (interface{}, error) { - sessionID, err := session.ParseID(p.ByName("sid")) - if err != nil { - return nil, trace.Wrap(err) - } - - var req *siteSessionUpdateReq - if err := httplib.ReadJSON(r, &req); err != nil { - return nil, trace.Wrap(err) - } - - siteAPI, err := site.GetClient() - if err != nil { - log.Error(err) - return nil, trace.Wrap(err) - } - - namespace := p.ByName("namespace") - if !services.IsValidNamespace(namespace) { - return nil, trace.BadParameter("invalid namespace %q", namespace) - } - - err = ctx.UpdateSessionTerminal(siteAPI, namespace, *sessionID, req.TerminalParams) - if err != nil { - log.Error(err) - return nil, trace.Wrap(err) - } - return ok(), nil -} - type siteSessionsGetResponse struct { Sessions []session.Session `json:"sessions"` } diff --git a/lib/web/apiserver_test.go b/lib/web/apiserver_test.go index a7576ca07dd64..69ddc0a9c3974 100644 --- a/lib/web/apiserver_test.go +++ b/lib/web/apiserver_test.go @@ -19,6 +19,7 @@ package web import ( "bytes" "compress/flate" + "context" "crypto/tls" "encoding/base32" "encoding/base64" @@ -37,13 +38,16 @@ import ( "testing" "time" - "github.com/gravitational/roundtrip" + "golang.org/x/crypto/ssh" + "golang.org/x/net/websocket" + "github.com/gravitational/teleport" "github.com/gravitational/teleport/lib/auth" "github.com/gravitational/teleport/lib/auth/mocku2f" "github.com/gravitational/teleport/lib/backend" "github.com/gravitational/teleport/lib/client" "github.com/gravitational/teleport/lib/defaults" + "github.com/gravitational/teleport/lib/events" "github.com/gravitational/teleport/lib/fixtures" "github.com/gravitational/teleport/lib/httplib" "github.com/gravitational/teleport/lib/httplib/csrf" @@ -51,21 +55,20 @@ import ( "github.com/gravitational/teleport/lib/reversetunnel" "github.com/gravitational/teleport/lib/services" "github.com/gravitational/teleport/lib/session" - sess "github.com/gravitational/teleport/lib/session" "github.com/gravitational/teleport/lib/srv/regular" "github.com/gravitational/teleport/lib/sshutils" "github.com/gravitational/teleport/lib/state" "github.com/gravitational/teleport/lib/utils" "github.com/gravitational/teleport/lib/web/ui" + "github.com/gravitational/roundtrip" + "github.com/gravitational/trace" + "github.com/beevik/etree" "github.com/gokyle/hotp" - "github.com/gravitational/trace" "github.com/jonboulle/clockwork" "github.com/pquerna/otp/totp" "github.com/tstranex/u2f" - "golang.org/x/crypto/ssh" - "golang.org/x/net/websocket" . "gopkg.in/check.v1" kyaml "k8s.io/apimachinery/pkg/util/yaml" ) @@ -101,34 +104,12 @@ func (s *WebSuite) SetUpSuite(c *C) { debugAssetsPath = "../../web/dist" os.Setenv(teleport.DebugEnvVar, "true") - sessionStreamPollPeriod = time.Millisecond + //sessionStreamPollPeriod = time.Millisecond s.mockU2F, err = mocku2f.Create() c.Assert(err, IsNil) c.Assert(s.mockU2F, NotNil) } -func (s *WebSuite) clientNoRedirects(opts ...roundtrip.ClientParam) *client.WebClient { - hclient := client.NewInsecureWebClient() - hclient.CheckRedirect = func(req *http.Request, via []*http.Request) error { - return http.ErrUseLastResponse - } - opts = append(opts, roundtrip.HTTPClient(hclient)) - wc, err := client.NewWebClient(s.url().String(), opts...) - if err != nil { - panic(err) - } - return wc -} - -func (s *WebSuite) client(opts ...roundtrip.ClientParam) *client.WebClient { - opts = append(opts, roundtrip.HTTPClient(client.NewInsecureWebClient())) - wc, err := client.NewWebClient(s.url().String(), opts...) - if err != nil { - panic(err) - } - return wc -} - func (s *WebSuite) TearDownSuite(c *C) { os.Unsetenv(teleport.DebugEnvVar) } @@ -248,14 +229,6 @@ func (s *WebSuite) SetUpTest(c *C) { handler.handler.cfg.ProxySSHAddr = proxyAddr } -func (s *WebSuite) url() *url.URL { - u, err := url.Parse("https://" + s.webServer.Listener.Addr().String()) - if err != nil { - panic(err) - } - return u -} - func (s *WebSuite) TearDownTest(c *C) { c.Assert(s.node.Close(), IsNil) c.Assert(s.server.Close(), IsNil) @@ -263,6 +236,117 @@ func (s *WebSuite) TearDownTest(c *C) { s.proxy.Close() } +type authPack struct { + otpSecret string + user string + login string + otp *hotp.HOTP + session *CreateSessionResponse + clt *client.WebClient + cookies []*http.Cookie +} + +func (s *WebSuite) authPackFromResponse(c *C, re *roundtrip.Response) *authPack { + var sess *createSessionResponseRaw + c.Assert(json.Unmarshal(re.Bytes(), &sess), IsNil) + + jar, err := cookiejar.New(nil) + c.Assert(err, IsNil) + + clt := s.client(roundtrip.BearerAuth(sess.Token), roundtrip.CookieJar(jar)) + jar.SetCookies(s.url(), re.Cookies()) + + session, err := sess.response() + if err != nil { + panic(err) + } + if session.ExpiresIn < 0 { + c.Errorf("expected expiry time to be in the future but got %v", session.ExpiresIn) + } + return &authPack{ + session: session, + clt: clt, + cookies: re.Cookies(), + } +} + +// authPack returns new authenticated package consisting of created valid +// user, otp token, created web session and authenticated client. +func (s *WebSuite) authPack(c *C, user string) *authPack { + login := s.user + pass := "abc123" + rawSecret := "def456" + otpSecret := base32.StdEncoding.EncodeToString([]byte(rawSecret)) + + ap, err := services.NewAuthPreference(services.AuthPreferenceSpecV2{ + Type: teleport.Local, + SecondFactor: teleport.OTP, + }) + c.Assert(err, IsNil) + err = s.server.Auth().SetAuthPreference(ap) + c.Assert(err, IsNil) + + s.createUser(c, user, login, pass, otpSecret) + + // create a valid otp token + validToken, err := totp.GenerateCode(otpSecret, time.Now()) + c.Assert(err, IsNil) + + clt := s.client() + req := createSessionReq{ + User: user, + Pass: pass, + SecondFactorToken: validToken, + } + + csrfToken := "2ebcb768d0090ea4368e42880c970b61865c326172a4a2343b645cf5d7f20992" + re, err := s.login(clt, csrfToken, csrfToken, req) + c.Assert(err, IsNil) + + var rawSess *createSessionResponseRaw + c.Assert(json.Unmarshal(re.Bytes(), &rawSess), IsNil) + + sess, err := rawSess.response() + c.Assert(err, IsNil) + + jar, err := cookiejar.New(nil) + c.Assert(err, IsNil) + + clt = s.client(roundtrip.BearerAuth(sess.Token), roundtrip.CookieJar(jar)) + jar.SetCookies(s.url(), re.Cookies()) + + return &authPack{ + otpSecret: otpSecret, + user: user, + login: login, + session: sess, + clt: clt, + cookies: re.Cookies(), + } +} + +func (s *WebSuite) createUser(c *C, user string, login string, pass string, otpSecret string) { + teleUser, err := services.NewUser(user) + c.Assert(err, IsNil) + role := services.RoleForUser(teleUser) + role.SetLogins(services.Allow, []string{login}) + options := role.GetOptions() + options[services.ForwardAgent] = true + role.SetOptions(options) + err = s.server.Auth().UpsertRole(role, backend.Forever) + c.Assert(err, IsNil) + teleUser.AddRole(role.GetName()) + + err = s.server.Auth().UpsertUser(teleUser) + c.Assert(err, IsNil) + + err = s.server.Auth().UpsertPassword(user, []byte(pass)) + c.Assert(err, IsNil) + + err = s.server.Auth().UpsertTOTP(user, otpSecret) + c.Assert(err, IsNil) +} + func (s *WebSuite) TestNewUser(c *C) { token, err := s.server.Auth().CreateSignupToken(services.UserV1{Name: "bob", AllowedLogins: []string{s.user}}, 0) c.Assert(err, IsNil) @@ -430,118 +514,8 @@ func (s *WebSuite) TestSAMLSuccess(c *C) { c.Assert(authRe.Headers().Get("Location"), Equals, "/after") } -type authPack struct { - otpSecret string - user string - otp *hotp.HOTP - session *CreateSessionResponse - clt *client.WebClient - cookies []*http.Cookie -} - -func (s *WebSuite) authPackFromResponse(c *C, re *roundtrip.Response) *authPack { - var sess *createSessionResponseRaw - c.Assert(json.Unmarshal(re.Bytes(), &sess), IsNil) - - jar, err := cookiejar.New(nil) - c.Assert(err, IsNil) - - clt := s.client(roundtrip.BearerAuth(sess.Token), roundtrip.CookieJar(jar)) - jar.SetCookies(s.url(), re.Cookies()) - - session, err := sess.response() - if err != nil { - panic(err) - } - if session.ExpiresIn < 0 { - c.Errorf("expected expiry time to be in the future but got %v", session.ExpiresIn) - } - return &authPack{ - session: session, - clt: clt, - cookies: re.Cookies(), - } -} - -func (s *WebSuite) createUser(c *C, user string, pass string, otpSecret string) { - teleUser, err := services.NewUser(user) - c.Assert(err, IsNil) - role := services.RoleForUser(teleUser) - role.SetLogins(services.Allow, []string{user}) - options := role.GetOptions() - options[services.ForwardAgent] = true - role.SetOptions(options) - err = s.server.Auth().UpsertRole(role, backend.Forever) - c.Assert(err, IsNil) - teleUser.AddRole(role.GetName()) - - err = s.server.Auth().UpsertUser(teleUser) - c.Assert(err, IsNil) - - err = s.server.Auth().UpsertPassword(user, []byte(pass)) - c.Assert(err, IsNil) - - err = s.server.Auth().UpsertTOTP(user, otpSecret) - c.Assert(err, IsNil) -} - -// authPack returns new authenticated package consisting -// of created valid user, hotp token, created web session and -// authenticated client -func (s *WebSuite) authPack(c *C) *authPack { - user := s.user - pass := "abc123" - rawSecret := "def456" - otpSecret := base32.StdEncoding.EncodeToString([]byte(rawSecret)) - - ap, err := services.NewAuthPreference(services.AuthPreferenceSpecV2{ - Type: teleport.Local, - SecondFactor: teleport.OTP, - }) - c.Assert(err, IsNil) - err = s.server.Auth().SetAuthPreference(ap) - c.Assert(err, IsNil) - - s.createUser(c, user, pass, otpSecret) - - // create a valid otp token - validToken, err := totp.GenerateCode(otpSecret, time.Now()) - c.Assert(err, IsNil) - - clt := s.client() - req := createSessionReq{ - User: user, - Pass: pass, - SecondFactorToken: validToken, - } - - csrfToken := "2ebcb768d0090ea4368e42880c970b61865c326172a4a2343b645cf5d7f20992" - re, err := s.login(clt, csrfToken, csrfToken, req) - c.Assert(err, IsNil) - - var rawSess *createSessionResponseRaw - c.Assert(json.Unmarshal(re.Bytes(), &rawSess), IsNil) - - sess, err := rawSess.response() - c.Assert(err, IsNil) - - jar, err := cookiejar.New(nil) - c.Assert(err, IsNil) - - clt = s.client(roundtrip.BearerAuth(sess.Token), roundtrip.CookieJar(jar)) - jar.SetCookies(s.url(), re.Cookies()) - - return &authPack{ - otpSecret: otpSecret, - user: user, - session: sess, - clt: clt, - cookies: re.Cookies(), - } -} - func (s *WebSuite) TestWebSessionsCRUD(c *C) { - pack := s.authPack(c) + pack := s.authPack(c, "foo") // make sure we can use client to make authenticated requests re, err := pack.clt.Get(pack.clt.Endpoint("webapi", "sites"), url.Values{}) @@ -562,7 +536,7 @@ func (s *WebSuite) TestWebSessionsCRUD(c *C) { } func (s *WebSuite) TestNamespace(c *C) { - pack := s.authPack(c) + pack := s.authPack(c, "foo") _, err := pack.clt.Get(pack.clt.Endpoint("webapi", "sites", s.server.ClusterName(), "namespaces", "..%252fevents%3f", "nodes"), url.Values{}) c.Assert(err, NotNil) @@ -581,7 +555,7 @@ func (s *WebSuite) TestCSRF(c *C) { user := "csrfuser" pass := "abc123" otpSecret := base32.StdEncoding.EncodeToString([]byte("def456")) - s.createUser(c, user, pass, otpSecret) + s.createUser(c, user, user, pass, otpSecret) // create a valid login form request validToken, err := totp.GenerateCode(otpSecret, time.Now()) @@ -616,7 +590,7 @@ func (s *WebSuite) TestCSRF(c *C) { } func (s *WebSuite) TestPasswordChange(c *C) { - pack := s.authPack(c) + pack := s.authPack(c, "foo") fakeClock := clockwork.NewFakeClock() s.server.AuthServer.AuthServer.SetClock(fakeClock) @@ -634,7 +608,7 @@ func (s *WebSuite) TestPasswordChange(c *C) { } func (s *WebSuite) TestWebSessionsRenew(c *C) { - pack := s.authPack(c) + pack := s.authPack(c, "foo") // make sure we can use client to make authenticated requests // before we issue this request, we will recover session id and bearer token @@ -730,7 +704,7 @@ type getSiteNodeResponse struct { } func (s *WebSuite) TestGetSiteNodes(c *C) { - pack := s.authPack(c) + pack := s.authPack(c, "foo") // get site nodes re, err := pack.clt.Get(pack.clt.Endpoint("webapi", "sites", s.server.ClusterName(), "nodes"), url.Values{}) @@ -751,7 +725,7 @@ func (s *WebSuite) TestGetSiteNodes(c *C) { } func (s *WebSuite) TestSiteNodeConnectInvalidSessionID(c *C) { - _, err := s.makeTerminal(s.authPack(c), session.ID("/../../../foo")) + _, err := s.makeTerminal(s.authPack(c, "foo"), session.ID("/../../../foo")) c.Assert(err, NotNil) } @@ -839,39 +813,42 @@ func (s *WebSuite) TestNewTerminalHandler(c *C) { H: 1, W: 1, } + validTimeout := 1 * time.Second - makeProvider := func(server services.ServerV2) NodeProvider { - return nodeProviderMock(func() []services.Server { - return []services.Server{&server} - }) + makeProvider := func(server services.ServerV2) AuthProvider { + return authProviderMock{ + server: server, + } } // valid cases validCases := []struct { req TerminalRequest - nodeProvider NodeProvider + authProvider AuthProvider expectedHost string expectedPort int }{ { req: TerminalRequest{ - Login: validLogin, - Server: validServer, - SessionID: validSID, - Term: validParams, + Login: validLogin, + Server: validServer, + SessionID: validSID, + Term: validParams, + SessionTimeout: validTimeout, }, - nodeProvider: makeProvider(validNode), + authProvider: makeProvider(validNode), expectedHost: validServer, expectedPort: 0, }, { req: TerminalRequest{ - Login: validLogin, - Server: "eca53e45-86a9-11e7-a893-0242ac0a0101", - SessionID: validSID, - Term: validParams, + Login: validLogin, + Server: "eca53e45-86a9-11e7-a893-0242ac0a0101", + SessionID: validSID, + Term: validParams, + SessionTimeout: validTimeout, }, - nodeProvider: makeProvider(validNode), + authProvider: makeProvider(validNode), expectedHost: "nodehostname", expectedPort: 0, }, @@ -880,22 +857,23 @@ func (s *WebSuite) TestNewTerminalHandler(c *C) { // invalid cases invalidCases := []struct { req TerminalRequest - nodeProvider NodeProvider + authProvider AuthProvider expectedErr string }{ { expectedErr: "invalid session", - nodeProvider: makeProvider(validNode), + authProvider: makeProvider(validNode), req: TerminalRequest{ - SessionID: "", - Login: validLogin, - Server: validServer, - Term: validParams, + SessionID: "", + Login: validLogin, + Server: validServer, + Term: validParams, + SessionTimeout: validTimeout, }, }, { expectedErr: "bad term dimensions", - nodeProvider: makeProvider(validNode), + authProvider: makeProvider(validNode), req: TerminalRequest{ SessionID: validSID, Login: validLogin, @@ -904,22 +882,24 @@ func (s *WebSuite) TestNewTerminalHandler(c *C) { H: -1, W: 0, }, + SessionTimeout: validTimeout, }, }, { expectedErr: "invalid server name", - nodeProvider: makeProvider(validNode), + authProvider: makeProvider(validNode), req: TerminalRequest{ - Server: "localhost:port", - SessionID: validSID, - Login: validLogin, - Term: validParams, + Server: "localhost:port", + SessionID: validSID, + Login: validLogin, + Term: validParams, + SessionTimeout: validTimeout, }, }, } for _, testCase := range validCases { - term, err := NewTerminal(testCase.req, testCase.nodeProvider, nil) + term, err := NewTerminal(testCase.req, testCase.authProvider, nil) c.Assert(err, IsNil) c.Assert(term.params, DeepEquals, testCase.req) c.Assert(term.hostName, Equals, testCase.expectedHost) @@ -927,214 +907,166 @@ func (s *WebSuite) TestNewTerminalHandler(c *C) { } for _, testCase := range invalidCases { - _, err := NewTerminal(testCase.req, testCase.nodeProvider, nil) + _, err := NewTerminal(testCase.req, testCase.authProvider, nil) c.Assert(err, ErrorMatches, ".*"+testCase.expectedErr+".*") } } -func (s *WebSuite) makeTerminal(pack *authPack, opts ...session.ID) (*websocket.Conn, error) { - var sessionID session.ID - if len(opts) == 0 { - sessionID = session.NewID() - } else { - sessionID = opts[0] - } - u := url.URL{Host: s.url().Host, Scheme: client.WSS, Path: fmt.Sprintf("/v1/webapi/sites/%v/connect", currentSiteShortcut)} - data, err := json.Marshal(TerminalRequest{ - Server: s.srvID, - Login: s.user, - Term: session.TerminalParams{W: 100, H: 100}, - SessionID: sessionID, - }) - if err != nil { - return nil, err - } +func (s *WebSuite) TestResizeTerminal(c *C) { + sid := session.NewID() - q := u.Query() - q.Set("params", string(data)) - q.Set(roundtrip.AccessTokenQueryParam, pack.session.Token) - u.RawQuery = q.Encode() + // Create a new user "foo", open a terminal to a new session, and wait for + // it to be ready. + pack1 := s.authPack(c, "foo") + ws1, err := s.makeTerminal(pack1, sid) + c.Assert(err, IsNil) + defer ws1.Close() + err = s.waitForRawEvent(ws1, 5*time.Second) + c.Assert(err, IsNil) - wscfg, err := websocket.NewConfig(u.String(), "http://localhost") - wscfg.TlsConfig = &tls.Config{ - InsecureSkipVerify: true, - } - if err != nil { - return nil, err - } + // Create a new user "bar", open a terminal to the session created above, + // and wait for it to be ready. + pack2 := s.authPack(c, "bar") + ws2, err := s.makeTerminal(pack2, sid) + c.Assert(err, IsNil) + defer ws2.Close() + err = s.waitForRawEvent(ws2, 5*time.Second) + c.Assert(err, IsNil) - for _, cookie := range pack.cookies { - wscfg.Header.Add("Cookie", cookie.String()) - } + // Look at the audit events for the first terminal. It should have two + // resize events from the second terminal (80x25 default then 100x100). Only + // the second terminal will get these because resize events are not sent + // back to the originator. + err = s.waitForResizeEvent(ws1, 5*time.Second) + c.Assert(err, IsNil) + err = s.waitForResizeEvent(ws1, 5*time.Second) + c.Assert(err, IsNil) - return websocket.DialConfig(wscfg) -} + // Look at the stream events for the second terminal. We don't expect to see + // any resize events yet. It will timeout. + err = s.waitForResizeEvent(ws2, 1*time.Second) + c.Assert(err, NotNil) -func (s *WebSuite) sessionStream(c *C, pack *authPack, sessionID session.ID, opts ...string) *websocket.Conn { - u := url.URL{ - Host: s.url().Host, - Scheme: client.WSS, - Path: fmt.Sprintf( - "/v1/webapi/sites/%v/sessions/%v/events/stream", - currentSiteShortcut, - sessionID), - } - q := u.Query() - q.Set(roundtrip.AccessTokenQueryParam, pack.session.Token) - u.RawQuery = q.Encode() - wscfg, err := websocket.NewConfig(u.String(), "http://localhost") - wscfg.TlsConfig = &tls.Config{ - InsecureSkipVerify: true, - } - c.Assert(err, IsNil) - for _, cookie := range pack.cookies { - wscfg.Header.Add("Cookie", cookie.String()) - } - clt, err := websocket.DialConfig(wscfg) + // Resize the second terminal. This should be reflected on the first terminal + // because resize events are not sent back to the originator. + params, err := session.NewTerminalParamsFromInt(300, 120) + c.Assert(err, IsNil) + websocket.JSON.Send(ws2, eventEnvelope{ + Type: "resize.request", + Payload: events.EventFields{ + events.EventType: events.ResizeEvent, + events.EventNamespace: defaults.Namespace, + events.SessionEventID: sid.String(), + events.TerminalSize: params.Serialize(), + }, + }) + + // This time the first terminal will see the resize event. + err = s.waitForResizeEvent(ws1, 5*time.Second) c.Assert(err, IsNil) - return clt + // The second terminal will not see any resize event. It will timeout. + err = s.waitForResizeEvent(ws2, 1*time.Second) + c.Assert(err, NotNil) } func (s *WebSuite) TestTerminal(c *C) { - term, err := s.makeTerminal(s.authPack(c)) + ws, err := s.makeTerminal(s.authPack(c, "foo")) c.Assert(err, IsNil) - defer term.Close() + defer ws.Close() + + // Create a wrapped connection that gives access to the terminal stream. + term := newWrappedSocket(ws, nil) _, err = io.WriteString(term, "echo vinsong\r\n") c.Assert(err, IsNil) - resultC := make(chan struct{}) - - go func() { - out := make([]byte, 100) - for { - n, err := term.Read(out) - c.Assert(err, IsNil) - c.Assert(n > 0, Equals, true) - if strings.Contains(removeSpace(string(out)), "vinsong") { - close(resultC) - return - } - } - }() - - select { - case <-time.After(time.Second): - c.Fatalf("timeout waiting for proper response") - case <-resultC: - // everything is as expected - } + err = s.waitForOutput(term, "vinsong") + c.Assert(err, IsNil) } func (s *WebSuite) TestWebAgentForward(c *C) { - term, err := s.makeTerminal(s.authPack(c)) + ws, err := s.makeTerminal(s.authPack(c, "foo")) c.Assert(err, IsNil) - defer term.Close() + defer ws.Close() + + // Create a wrapped connection that gives access to the terminal stream. + term := newWrappedSocket(ws, nil) _, err = io.WriteString(term, "echo $SSH_AUTH_SOCK\r\n") c.Assert(err, IsNil) - resultC := make(chan struct{}) - - go func() { - out := make([]byte, 10000) - for { - n, err := term.Read(out) - c.Assert(err, IsNil) - c.Assert(n > 0, Equals, true) - if strings.Contains(removeSpace(string(out)), "/") { - close(resultC) - return - } - } - }() - - select { - case <-time.After(1 * time.Second): - c.Fatalf("timeout waiting for proper response") - case <-resultC: - // everything is as expected - } + err = s.waitForOutput(term, "/") + c.Assert(err, IsNil) } func (s *WebSuite) TestActiveSessions(c *C) { sid := session.NewID() - pack := s.authPack(c) - clt, err := s.makeTerminal(pack, sid) + pack := s.authPack(c, "foo") + + ws, err := s.makeTerminal(pack, sid) c.Assert(err, IsNil) - defer clt.Close() + defer ws.Close() - // to make sure we have a session - _, err = io.WriteString(clt, "echo vinsong\r\n") + // Create a wrapped connection that gives access to the terminal stream. + term := newWrappedSocket(ws, nil) + + // To make sure we have a session. + _, err = io.WriteString(term, "echo vinsong\r\n") c.Assert(err, IsNil) - // make sure server has replied - out := make([]byte, 1024) - n := 0 - for err == nil { - clt.SetReadDeadline(time.Now().Add(time.Millisecond * 20)) - n, err = clt.Read(out) - if err == nil && n > 0 { - break - } - ne, ok := err.(net.Error) - if ok && ne.Timeout() { - err = nil - continue - } - c.Error(err) - } + // Make sure server has replied. + err = s.waitForOutput(term, "vinsong") + c.Assert(err, IsNil) + // Make sure this session appears in the list of active sessions. var sessResp *siteSessionsGetResponse for i := 0; i < 10; i++ { - // get site nodes and make sure the node has our active party + // Get site nodes and make sure the node has our active party. re, err := pack.clt.Get(pack.clt.Endpoint("webapi", "sites", s.server.ClusterName(), "sessions"), url.Values{}) c.Assert(err, IsNil) c.Assert(json.Unmarshal(re.Bytes(), &sessResp), IsNil) c.Assert(len(sessResp.Sessions), Equals, 1) - // sessions do not appear momentarily as there's async heartbeat - // procedure - time.Sleep(30 * time.Millisecond) + + // Sessions do not appear momentarily as there's async heartbeat + // procedure. + time.Sleep(250 * time.Millisecond) } c.Assert(len(sessResp.Sessions), Equals, 1) c.Assert(sessResp.Sessions[0].ID, Equals, sid) - - // connect to session stream and receive events - stream := s.sessionStream(c, pack, sid) - defer stream.Close() - var event *sessionStreamEvent - c.Assert(websocket.JSON.Receive(stream, &event), IsNil) - c.Assert(event, NotNil) } func (s *WebSuite) TestCloseConnectionsOnLogout(c *C) { sid := session.NewID() - pack := s.authPack(c) - clt, err := s.makeTerminal(pack, sid) + pack := s.authPack(c, "foo") + + ws, err := s.makeTerminal(pack, sid) c.Assert(err, IsNil) - defer clt.Close() + defer ws.Close() + + // Create a wrapped connection that gives access to the terminal stream. + term := newWrappedSocket(ws, nil) // to make sure we have a session - _, err = io.WriteString(clt, "expr 137 + 39\r\n") + _, err = io.WriteString(term, "expr 137 + 39\r\n") c.Assert(err, IsNil) // make sure server has replied out := make([]byte, 100) - clt.Read(out) + term.Read(out) _, err = pack.clt.Delete( pack.clt.Endpoint("webapi", "sessions")) c.Assert(err, IsNil) // wait until we timeout or detect that connection has been closed - after := time.After(time.Second) + after := time.After(5 * time.Second) errC := make(chan error) go func() { for { - _, err := clt.Read(out) + _, err := term.Read(out) if err != nil { errC <- err } @@ -1150,7 +1082,7 @@ func (s *WebSuite) TestCloseConnectionsOnLogout(c *C) { } func (s *WebSuite) TestCreateSession(c *C) { - pack := s.authPack(c) + pack := s.authPack(c, "foo") sess := session.Session{ TerminalParams: session.TerminalParams{W: 300, H: 120}, @@ -1168,50 +1100,12 @@ func (s *WebSuite) TestCreateSession(c *C) { c.Assert(created.Session.ID, Not(Equals), "") } -func (s *WebSuite) TestResizeTerminal(c *C) { - sid := session.NewID() - pack := s.authPack(c) - term, err := s.makeTerminal(pack, sid) - c.Assert(err, IsNil) - defer term.Close() - - // to make sure we have a session - _, err = io.WriteString(term, "expr 137 + 39\r\n") - c.Assert(err, IsNil) - - // make sure server has replied - out := make([]byte, 100) - term.Read(out) - - params := session.TerminalParams{W: 300, H: 120} - _, err = pack.clt.PutJSON( - pack.clt.Endpoint("webapi", "sites", s.server.ClusterName(), "sessions", string(sid)), - siteSessionUpdateReq{TerminalParams: session.TerminalParams{W: 300, H: 120}}, - ) - c.Assert(err, IsNil) - - re, err := pack.clt.Get( - pack.clt.Endpoint("webapi", "sites", s.server.ClusterName(), "sessions", string(sid)), url.Values{}) - c.Assert(err, IsNil) - - var se *sess.Session - c.Assert(json.Unmarshal(re.Bytes(), &se), IsNil) - c.Assert(se.TerminalParams, DeepEquals, params) -} - func (s *WebSuite) TestPlayback(c *C) { - pack := s.authPack(c) + pack := s.authPack(c, "foo") sid := session.NewID() - term, err := s.makeTerminal(pack, sid) + ws, err := s.makeTerminal(pack, sid) c.Assert(err, IsNil) - defer term.Close() -} - -func removeSpace(in string) string { - for _, c := range []string{"\n", "\r", "\t"} { - in = strings.Replace(in, c, " ", -1) - } - return strings.TrimSpace(in) + defer ws.Close() } func (s *WebSuite) TestNewU2FUser(c *C) { @@ -1475,10 +1369,187 @@ func (s *WebSuite) TestMultipleConnectors(c *C) { c.Assert(out.Auth.OIDC.Name, Equals, "foo") } -type nodeProviderMock func() []services.Server +type authProviderMock struct { + server services.ServerV2 +} -func (mock nodeProviderMock) GetNodes(namespace string) ([]services.Server, error) { - return mock(), nil +func (mock authProviderMock) GetNodes(n string) ([]services.Server, error) { + return []services.Server{&mock.server}, nil +} + +func (mock authProviderMock) GetSessionEvents(n string, s session.ID, c int, p bool) ([]events.EventFields, error) { + return []events.EventFields{}, nil +} + +func (s *WebSuite) makeTerminal(pack *authPack, opts ...session.ID) (*websocket.Conn, error) { + var sessionID session.ID + if len(opts) == 0 { + sessionID = session.NewID() + } else { + sessionID = opts[0] + } + + u := url.URL{ + Host: s.url().Host, + Scheme: client.WSS, + Path: fmt.Sprintf("/v1/webapi/sites/%v/connect", currentSiteShortcut), + } + data, err := json.Marshal(TerminalRequest{ + Server: s.srvID, + Login: pack.login, + Term: session.TerminalParams{ + W: 100, + H: 100, + }, + SessionID: sessionID, + SessionTimeout: 500 * time.Millisecond, + }) + if err != nil { + return nil, err + } + + q := u.Query() + q.Set("params", string(data)) + q.Set(roundtrip.AccessTokenQueryParam, pack.session.Token) + u.RawQuery = q.Encode() + + wscfg, err := websocket.NewConfig(u.String(), "http://localhost") + wscfg.TlsConfig = &tls.Config{ + InsecureSkipVerify: true, + } + if err != nil { + return nil, err + } + + for _, cookie := range pack.cookies { + wscfg.Header.Add("Cookie", cookie.String()) + } + + ws, err := websocket.DialConfig(wscfg) + if err != nil { + return nil, trace.Wrap(err) + } + + return ws, nil +} + +//func (s *WebSuite) waitForOutput(conn *websocket.Conn, substr string) error { +func (s *WebSuite) waitForOutput(conn *wrappedSocket, substr string) error { + tickerCh := time.Tick(250 * time.Millisecond) + timeoutCh := time.After(10 * time.Second) + + for { + select { + case <-tickerCh: + out := make([]byte, 100) + _, err := conn.Read(out) + if err != nil { + return trace.Wrap(err) + } + if strings.Contains(removeSpace(string(out)), substr) { + return nil + } + case <-timeoutCh: + return trace.BadParameter("timeout waiting on terminal for output: %v", substr) + } + } +} + +func (s *WebSuite) waitForRawEvent(ws *websocket.Conn, timeout time.Duration) error { + timeoutContext, timeoutCancel := context.WithTimeout(context.Background(), timeout) + defer timeoutCancel() + doneContext, doneCancel := context.WithCancel(context.Background()) + defer doneCancel() + + go func() { + for { + time.Sleep(250 * time.Millisecond) + + var ue unknownEnvelope + err := websocket.JSON.Receive(ws, &ue) + if err != nil { + continue + } + if ue.Type == "raw" { + doneCancel() + return + } + } + }() + + for { + select { + case <-timeoutContext.Done(): + return trace.BadParameter("timeout waiting for resize event") + case <-doneContext.Done(): + return nil + } + } +} + +func (s *WebSuite) waitForResizeEvent(ws *websocket.Conn, timeout time.Duration) error { + timeoutContext, timeoutCancel := context.WithTimeout(context.Background(), timeout) + defer timeoutCancel() + doneContext, doneCancel := context.WithCancel(context.Background()) + defer doneCancel() + + go func() { + for { + time.Sleep(250 * time.Millisecond) + + var ue unknownEnvelope + err := websocket.JSON.Receive(ws, &ue) + if err != nil { + continue + } + + if ue.Type != "audit" { + continue + } + + var ee eventEnvelope + err = json.Unmarshal(ue.Raw, &ee) + if err != nil { + continue + } + + if ee.Payload.GetType() == "resize" { + doneCancel() + return + } + } + }() + + for { + select { + case <-timeoutContext.Done(): + return trace.BadParameter("timeout waiting for resize event") + case <-doneContext.Done(): + return nil + } + } +} + +func (s *WebSuite) clientNoRedirects(opts ...roundtrip.ClientParam) *client.WebClient { + hclient := client.NewInsecureWebClient() + hclient.CheckRedirect = func(req *http.Request, via []*http.Request) error { + return http.ErrUseLastResponse + } + opts = append(opts, roundtrip.HTTPClient(hclient)) + wc, err := client.NewWebClient(s.url().String(), opts...) + if err != nil { + panic(err) + } + return wc +} + +func (s *WebSuite) client(opts ...roundtrip.ClientParam) *client.WebClient { + opts = append(opts, roundtrip.HTTPClient(client.NewInsecureWebClient())) + wc, err := client.NewWebClient(s.url().String(), opts...) + if err != nil { + panic(err) + } + return wc } func (s *WebSuite) login(clt *client.WebClient, cookieToken string, reqToken string, reqData interface{}) (*roundtrip.Response, error) { @@ -1495,6 +1566,14 @@ func (s *WebSuite) login(clt *client.WebClient, cookieToken string, reqToken str })) } +func (s *WebSuite) url() *url.URL { + u, err := url.Parse("https://" + s.webServer.Listener.Addr().String()) + if err != nil { + panic(err) + } + return u +} + func addCSRFCookieToReq(req *http.Request, token string) { cookie := &http.Cookie{ Name: csrf.CookieName, @@ -1503,3 +1582,10 @@ func addCSRFCookieToReq(req *http.Request, token string) { req.AddCookie(cookie) } + +func removeSpace(in string) string { + for _, c := range []string{"\n", "\r", "\t"} { + in = strings.Replace(in, c, " ", -1) + } + return strings.TrimSpace(in) +} diff --git a/lib/web/sessions.go b/lib/web/sessions.go index c3b6f1ce006db..46ee095244ac9 100644 --- a/lib/web/sessions.go +++ b/lib/web/sessions.go @@ -26,22 +26,23 @@ import ( "sync" "time" + "golang.org/x/crypto/ssh" + "golang.org/x/crypto/ssh/agent" + "github.com/gravitational/teleport" "github.com/gravitational/teleport/lib/auth" "github.com/gravitational/teleport/lib/client" "github.com/gravitational/teleport/lib/defaults" "github.com/gravitational/teleport/lib/reversetunnel" "github.com/gravitational/teleport/lib/services" - "github.com/gravitational/teleport/lib/session" "github.com/gravitational/teleport/lib/utils" "github.com/gravitational/trace" "github.com/gravitational/ttlmap" + "github.com/jonboulle/clockwork" log "github.com/sirupsen/logrus" "github.com/tstranex/u2f" - "golang.org/x/crypto/ssh" - "golang.org/x/crypto/ssh/agent" ) // SessionContext is a context associated with users' @@ -57,43 +58,7 @@ type SessionContext struct { remoteClt map[string]auth.ClientI parent *sessionCache closers []io.Closer -} - -// getTerminal finds and returns an active web terminal for a given session: -func (c *SessionContext) getTerminal(sessionID session.ID) (*TerminalHandler, error) { - c.Lock() - defer c.Unlock() - - for _, closer := range c.closers { - term, ok := closer.(*TerminalHandler) - if ok && term.params.SessionID == sessionID { - return term, nil - } - } - return nil, trace.NotFound("no connected streams") -} - -// UpdateSessionTerminal is called when a browser window is resized and -// we need to update PTY on the server side -func (c *SessionContext) UpdateSessionTerminal( - siteAPI auth.ClientI, namespace string, sessionID session.ID, params session.TerminalParams) error { - - // update the session size on the auth server's side - err := siteAPI.UpdateSession(session.UpdateRequest{ - ID: sessionID, - TerminalParams: ¶ms, - Namespace: namespace, - }) - if err != nil { - log.Error(err) - } - // update the server-side PTY to match the browser window size - term, err := c.getTerminal(sessionID) - if err != nil { - log.Error(err) - return trace.Wrap(err) - } - return trace.Wrap(term.resizePTYWindow(params)) + tc *client.TeleportClient } func (c *SessionContext) AddClosers(closers ...io.Closer) { diff --git a/lib/web/stream.go b/lib/web/stream.go deleted file mode 100644 index 3aad8e5e8a503..0000000000000 --- a/lib/web/stream.go +++ /dev/null @@ -1,171 +0,0 @@ -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package web - -import ( - "io" - "io/ioutil" - "net/http" - "sync" - "time" - - "github.com/gravitational/teleport/lib/events" - "github.com/gravitational/teleport/lib/reversetunnel" - "github.com/gravitational/teleport/lib/services" - "github.com/gravitational/teleport/lib/session" - - "github.com/gravitational/trace" - log "github.com/sirupsen/logrus" - "golang.org/x/net/websocket" -) - -func newSessionStreamHandler(namespace string, sessionID session.ID, ctx *SessionContext, site reversetunnel.RemoteSite, pollPeriod time.Duration) (*sessionStreamHandler, error) { - return &sessionStreamHandler{ - pollPeriod: pollPeriod, - sessionID: sessionID, - ctx: ctx, - site: site, - closeC: make(chan bool), - namespace: namespace, - }, nil -} - -// sessionStreamHandler streams events related to some particular session -// as a stream of JSON encoded event packets -type sessionStreamHandler struct { - closeOnce sync.Once - pollPeriod time.Duration - ctx *SessionContext - site reversetunnel.RemoteSite - namespace string - sessionID session.ID - closeC chan bool - ws *websocket.Conn -} - -func (w *sessionStreamHandler) Close() error { - if w.ws != nil { - w.ws.Close() - } - w.closeOnce.Do(func() { - close(w.closeC) - }) - return nil -} - -// sessionStreamPollPeriod defines how frequently web sessions are -// sent new events -var sessionStreamPollPeriod = time.Second - -// stream runs in a loop generating "something changed" events for a -// given active WebSession -// -// The events are fed to a web client via the websocket -func (w *sessionStreamHandler) stream(ws *websocket.Conn) error { - w.ws = ws - clt, err := w.site.GetClient() - if err != nil { - return trace.Wrap(err) - } - // spin up a goroutine to detect closed socket by reading - // from it - go func() { - defer w.Close() - io.Copy(ioutil.Discard, ws) - }() - - eventsCursor := -1 - emptyEventList := make([]events.EventFields, 0) - - pollEvents := func() []events.EventFields { - // ask for any events than happened since the last call: - re, err := clt.GetSessionEvents(w.namespace, w.sessionID, eventsCursor+1, false) - if err != nil { - if !trace.IsNotFound(err) { - log.Error(err) - } - return emptyEventList - } - batchLen := len(re) - if batchLen == 0 { - return emptyEventList - } - // advance the cursor, so next time we'll ask for the latest: - eventsCursor = re[batchLen-1].GetInt(events.EventCursor) - return re - } - - ticker := time.NewTicker(w.pollPeriod) - defer ticker.Stop() - defer w.Close() - - // keep polling in a loop: - for { - // wait for next timer tick or a signal to abort: - select { - case <-ticker.C: - case <-w.closeC: - log.Infof("[web] session.stream() exited") - return nil - } - - newEvents := pollEvents() - sess, err := clt.GetSession(w.namespace, w.sessionID) - if err != nil { - if trace.IsNotFound(err) { - continue - } - log.Error(err) - } - if sess == nil { - log.Warningf("invalid session ID: %v", w.sessionID) - continue - } - servers, err := clt.GetNodes(w.namespace) - if err != nil { - log.Error(err) - } - if len(newEvents) > 0 { - log.Infof("[WEB] streaming for %v. Events: %v, Nodes: %v, Parties: %v", - w.sessionID, len(newEvents), len(servers), len(sess.Parties)) - } - - // push events to the web client - event := &sessionStreamEvent{ - Events: newEvents, - Session: sess, - Servers: services.ServersToV1(servers), - } - if err := websocket.JSON.Send(ws, event); err != nil { - log.Error(err) - } - } -} - -func (w *sessionStreamHandler) Handler() http.Handler { - // TODO(klizhentas) - // we instantiate a server explicitly here instead of using - // websocket.HandlerFunc to set empty origin checker - // make sure we check origin when in prod mode - return &websocket.Server{ - Handler: func(ws *websocket.Conn) { - if err := w.stream(ws); err != nil { - log.WithFields(log.Fields{"sid": w.sessionID}).Infof("handler returned: %#v", err) - } - }, - } -} diff --git a/lib/web/terminal.go b/lib/web/terminal.go index 9a35fb6483c8f..12884bd540cdf 100644 --- a/lib/web/terminal.go +++ b/lib/web/terminal.go @@ -18,55 +18,78 @@ package web import ( "context" + "encoding/json" "fmt" "io" "net" "net/http" "strconv" "strings" + "time" + + "golang.org/x/crypto/ssh" + "golang.org/x/net/websocket" + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/unicode" "github.com/gravitational/teleport/lib/client" + "github.com/gravitational/teleport/lib/defaults" + "github.com/gravitational/teleport/lib/events" "github.com/gravitational/teleport/lib/services" "github.com/gravitational/teleport/lib/session" "github.com/gravitational/teleport/lib/sshutils" "github.com/gravitational/teleport/lib/utils" "github.com/gravitational/trace" + log "github.com/sirupsen/logrus" - "golang.org/x/crypto/ssh" - "golang.org/x/net/websocket" ) -// TerminalRequest describes a request to crate a web-based terminal -// to a remote SSH server +// TerminalRequest describes a request to create a web-based terminal +// to a remote SSH server. type TerminalRequest struct { - // Server describes a server to connect to (serverId|hostname[:port]) + // Server describes a server to connect to (serverId|hostname[:port]). Server string `json:"server_id"` - // User is linux username to connect as + + // Login is Linux username to connect as. Login string `json:"login"` - // Term sets PTY params like width and height + + // Term is the initial PTY size. Term session.TerminalParams `json:"term"` - // SessionID is a teleport session ID to join as + + // SessionID is a Teleport session ID to join as. SessionID session.ID `json:"sid"` - // Namespace is node namespace + + // Namespace is node namespace. Namespace string `json:"namespace"` - // Proxy server address + + // ProxyHostPort is the address of the server to connect to. ProxyHostPort string `json:"-"` - // Remote cluster name + + // Cluster is the name of the remote cluster to connect to. Cluster string `json:"-"` - // InteractiveCommand is a command to execute + + // InteractiveCommand is a command to execut.e InteractiveCommand []string `json:"-"` + + // SessionTimeout is how long to wait for the session end event to arrive. + SessionTimeout time.Duration } -// NodeProvider is a provider of nodes for namespace -type NodeProvider interface { +// AuthProvider is a subset of the full Auth API. +type AuthProvider interface { GetNodes(namespace string) ([]services.Server, error) + GetSessionEvents(namespace string, sid session.ID, after int, includePrintEvents bool) ([]events.EventFields, error) } -// newTerminal creates a web-based terminal based on WebSockets and returns a new -// TerminalHandler -func NewTerminal(req TerminalRequest, provider NodeProvider, ctx *SessionContext) (*TerminalHandler, error) { - // make sure whatever session is requested is a valid session +// newTerminal creates a web-based terminal based on WebSockets and returns a +// new TerminalHandler. +func NewTerminal(req TerminalRequest, authProvider AuthProvider, ctx *SessionContext) (*TerminalHandler, error) { + if req.SessionTimeout == 0 { + req.SessionTimeout = defaults.HTTPIdleTimeout + } + + // Make sure whatever session is requested is a valid session. _, err := session.ParseID(string(req.SessionID)) if err != nil { return nil, trace.BadParameter("sid: invalid session id") @@ -79,7 +102,7 @@ func NewTerminal(req TerminalRequest, provider NodeProvider, ctx *SessionContext return nil, trace.BadParameter("term: bad term dimensions") } - servers, err := provider.GetNodes(req.Namespace) + servers, err := authProvider.GetNodes(req.Namespace) if err != nil { return nil, trace.Wrap(err) } @@ -90,50 +113,336 @@ func NewTerminal(req TerminalRequest, provider NodeProvider, ctx *SessionContext } return &TerminalHandler{ - params: req, - ctx: ctx, - hostName: hostName, - hostPort: hostPort, + namespace: req.Namespace, + sessionID: req.SessionID, + params: req, + ctx: ctx, + hostName: hostName, + hostPort: hostPort, + authProvider: authProvider, + sessionTimeout: req.SessionTimeout, }, nil } // TerminalHandler connects together an SSH session with a web-based // terminal via a web socket. type TerminalHandler struct { - // params describe the terminal configuration + // namespace is node namespace. + namespace string + + // sessionID is a Teleport session ID to join as. + sessionID session.ID + + // params is the initial PTY size. params TerminalRequest - // ctx is a web session context for the currently logged in user + + // ctx is a web session context for the currently logged in user. ctx *SessionContext - // ws is the websocket which is connected to stdin/out/err of the terminal shell + + // ws is the websocket which is connected to stdin/out/err of the terminal shell. ws *websocket.Conn - // hostName we're connected to + + // hostName is the hostname of the server. hostName string - // hostPort we're connected to + + // hostPort is the port of the server. hostPort int - // sshClient is initialized after an SSH connection to a node is established + + // sshSession holds the "shell" SSH channel to the node. sshSession *ssh.Session + + // teleportClient is the client used to form the connection. + teleportClient *client.TeleportClient + + // terminalContext is used to signal when the terminal sesson is closing. + terminalContext context.Context + + // terminalCancel is used to signal when the terminal session is closing. + terminalCancel context.CancelFunc + + // eventContext is used to signal when the event stream is closing. + eventContext context.Context + + // eventCancel is used to signal when the event is closing. + eventCancel context.CancelFunc + + // request is the HTTP request that initiated the websocket connection. + request *http.Request + + // authProvider is used to fetch nodes and sessions from the backend. + authProvider AuthProvider + + // sessionTimeout is how long to wait for the session end event to arrive. + sessionTimeout time.Duration } +// Serve builds a connect to the remote node and then pumps back two types of +// events: raw input/output events for what's happening on the terminal itself +// and audit log events relevant to this session. +func (t *TerminalHandler) Serve(w http.ResponseWriter, r *http.Request) { + t.request = r + + // This allows closing of the websocket if the user logs out before exiting + // the session. + t.ctx.AddClosers(t) + defer t.ctx.RemoveCloser(t) + + // We initial a server explicitly here instead of using websocket.HandlerFunc + // to set an empty origin checker (this is to make our lives easier in tests). + // The main use of the origin checker is to enforce the browsers same-origin + // policy. That does not matter here because even if malicious Javascript + // would try and open a websocket the request to this endpoint requires the + // bearer token to be in the URL so it would not be sent along by default + // like cookies are. + ws := &websocket.Server{Handler: t.handler} + ws.ServeHTTP(w, r) +} + +// Close the websocket stream. func (t *TerminalHandler) Close() error { + // Close the websocket connection to the client web browser. if t.ws != nil { t.ws.Close() } + + // Close the SSH connection to the remote node. if t.sshSession != nil { t.sshSession.Close() } + + // If the terminal handler was closed (most likely due to the *SessionContext + // closing) then the stream should be closed as well. + t.terminalCancel() + return nil } -// resizePTYWindow is called when a brower resizes its window. Now the node -// needs to be notified via SSH -func (t *TerminalHandler) resizePTYWindow(params session.TerminalParams) error { +// handler is the main websocket loop. It creates a Teleport client and then +// pumps raw events and audit events back to the client until the SSH session +// is complete. +func (t *TerminalHandler) handler(ws *websocket.Conn) { + // Create a Teleport client, if not able to, show the reason to the user in + // the terminal. + tc, err := t.makeClient(ws) + if err != nil { + errToTerm(err, ws) + return + } + + // Create two contexts for signaling. The first + t.terminalContext, t.terminalCancel = context.WithCancel(context.Background()) + t.eventContext, t.eventCancel = context.WithCancel(context.Background()) + + // Pump raw terminal in/out and audit events into the websocket. + go t.streamTerminal(ws, tc) + go t.streamEvents(ws, tc) + + // Block until the terminal session is complete. + <-t.terminalContext.Done() + + // Block until the session end event is sent or a timeout occurs. + timeoutCh := time.After(t.sessionTimeout) + for { + select { + case <-timeoutCh: + t.eventCancel() + case <-t.eventContext.Done(): + } + + log.Debugf("Closing websocket stream to web client.") + return + } +} + +// makeClient builds a *client.TeleportClient for the connection. +func (t *TerminalHandler) makeClient(ws *websocket.Conn) (*client.TeleportClient, error) { + agent, cert, err := t.ctx.GetAgent() + if err != nil { + return nil, trace.BadParameter("failed to get user credentials: %v", err) + } + + signers, err := agent.Signers() + if err != nil { + return nil, trace.BadParameter("failed to get user credentials: %v", err) + } + + tlsConfig, err := t.ctx.ClientTLSConfig() + if err != nil { + return nil, trace.BadParameter("failed to get client TLS config: %v", err) + } + + // Create a wrapped websocket to wrap/unwrap the envelope used to + // communicate over the websocket. + wrappedSock := newWrappedSocket(ws, t) + + clientConfig := &client.Config{ + SkipLocalAuth: true, + ForwardAgent: true, + Agent: agent, + TLS: tlsConfig, + AuthMethods: []ssh.AuthMethod{ssh.PublicKeys(signers...)}, + DefaultPrincipal: cert.ValidPrincipals[0], + HostLogin: t.params.Login, + Username: t.ctx.user, + Namespace: t.params.Namespace, + Stdout: wrappedSock, + Stderr: wrappedSock, + Stdin: wrappedSock, + SiteName: t.params.Cluster, + ProxyHostPort: t.params.ProxyHostPort, + Host: t.hostName, + HostPort: t.hostPort, + Env: map[string]string{sshutils.SessionEnvVar: string(t.params.SessionID)}, + HostKeyCallback: func(string, net.Addr, ssh.PublicKey) error { return nil }, + ClientAddr: t.request.RemoteAddr, + } + if len(t.params.InteractiveCommand) > 0 { + clientConfig.Interactive = true + } + + tc, err := client.NewClient(clientConfig) + if err != nil { + return nil, trace.BadParameter("failed to create client: %v", err) + } + + // Save the *ssh.Session after the shell has been created. The session is + // used to update all other parties window size to that of the web client and + // to allow future window changes. + tc.OnShellCreated = func(s *ssh.Session, c *ssh.Client, _ io.ReadWriteCloser) (bool, error) { + t.sshSession = s + t.windowChange(&t.params.Term) + return false, nil + } + + return tc, nil +} + +// streamTerminal opens a SSH connection to the remote host and streams +// events back to the web client. +func (t *TerminalHandler) streamTerminal(ws *websocket.Conn, tc *client.TeleportClient) { + defer t.terminalCancel() + + // Establish SSH connection to the server. This function will block until + // either an error occurs or it completes successfully. + err := tc.SSH(t.terminalContext, t.params.InteractiveCommand, false) + if err != nil { + log.Warningf("failed to SSH: %v", err) + errToTerm(err, ws) + } +} + +// streamEvents receives events over the SSH connection (as well as periodic +// polling) to update the client with relevant audit events. +func (t *TerminalHandler) streamEvents(ws *websocket.Conn, tc *client.TeleportClient) { + // A cursor are used to keep track of where we are in the event stream. This + // is to find "session.end" events. + var cursor int = -1 + + tickerCh := time.NewTicker(defaults.SessionRefreshPeriod) + defer tickerCh.Stop() + + for { + select { + // Send push events that come over the events channel to the web client. + case event := <-tc.EventsChannel(): + e := eventEnvelope{ + Type: defaults.AuditEnvelopeType, + Payload: event, + } + log.Debugf("Sending audit event %v to web client.", event.GetType()) + + err := websocket.JSON.Send(ws, e) + if err != nil { + log.Errorf("Unable to %v event to web client: %v.", event.GetType(), err) + continue + } + // Poll for events to send to the web client. This is for events that can + // not be sent over the events channel (like "session.end" which lingers for + // a while after all party members have left). + case <-tickerCh.C: + // Fetch all session events from the backend. + sessionEvents, cur, err := t.pollEvents(cursor) + if err != nil { + if !trace.IsNotFound(err) { + log.Errorf("Unable to poll for events: %v.", err) + continue + } + continue + } + + // Update the cursor location. + cursor = cur + + // Send all events to the web client. + for _, sessionEvent := range sessionEvents { + ee := eventEnvelope{ + Type: defaults.AuditEnvelopeType, + Payload: sessionEvent, + } + err = websocket.JSON.Send(ws, ee) + if err != nil { + log.Warnf("Unable to send %v events to web client: %v.", len(sessionEvents), err) + continue + } + + // The session end event was sent over the websocket, we can now close the + // websocket. + if sessionEvent.GetType() == events.SessionEndEvent { + t.eventCancel() + return + } + } + case <-t.eventContext.Done(): + return + } + } +} + +// pollEvents polls the backend for events that don't get pushed over the +// SSH events channel. Eventually this function will be removed completely. +func (t *TerminalHandler) pollEvents(cursor int) ([]events.EventFields, int, error) { + // Poll for events since the last call (cursor location). + sessionEvents, err := t.authProvider.GetSessionEvents(t.namespace, t.sessionID, cursor+1, false) + if err != nil { + if !trace.IsNotFound(err) { + return nil, 0, trace.Wrap(err) + } + return nil, 0, trace.NotFound("no events from cursor: %v", cursor) + } + + // Get the batch size to see if any events were returned. + batchLen := len(sessionEvents) + if batchLen == 0 { + return nil, 0, trace.NotFound("no events from cursor: %v", cursor) + } + + // Advance the cursor. + newCursor := sessionEvents[batchLen-1].GetInt(events.EventCursor) + + // Filter out any resize events as we get them over push notifications. + var filteredEvents []events.EventFields + for _, event := range sessionEvents { + if event.GetType() == events.ResizeEvent || + event.GetType() == events.SessionJoinEvent || + event.GetType() == events.SessionLeaveEvent || + event.GetType() == events.SessionPrintEvent { + continue + } + filteredEvents = append(filteredEvents, event) + } + + return filteredEvents, newCursor, nil +} + +// windowChange is called when the browser window is resized. It sends a +// "window-change" channel request to the server. +func (t *TerminalHandler) windowChange(params *session.TerminalParams) error { if t.sshSession == nil { return nil } + _, err := t.sshSession.SendRequest( - // send SSH "window resized" SSH request: sshutils.WindowChangeRequest, - // no response needed false, ssh.Marshal(sshutils.WinChangeReqParams{ W: uint32(params.W), @@ -142,107 +451,26 @@ func (t *TerminalHandler) resizePTYWindow(params session.TerminalParams) error { if err != nil { log.Error(err) } + return trace.Wrap(err) } -// Run creates a new websocket connection to the SSH server and runs -// the "loop" piping the input/output of the SSH session into the -// js-based terminal. -func (t *TerminalHandler) Run(w http.ResponseWriter, r *http.Request) { - errToTerm := func(err error, w io.Writer) { - fmt.Fprintf(w, "%s\n\r", err.Error()) - log.Error(err) - } - webSocketLoop := func(ws *websocket.Conn) { - agent, cert, err := t.ctx.GetAgent() - if err != nil { - log.Warningf("failed to get user credentials: %v", err) - errToTerm(err, ws) - return - } - - signers, err := agent.Signers() - if err != nil { - log.Warningf("failed to get user credentials: %v", err) - errToTerm(err, ws) - return - } - - tlsConfig, err := t.ctx.ClientTLSConfig() - if err != nil { - log.Warningf("failed to get client TLS config: %v", err) - errToTerm(err, ws) - return - } - - // create teleport client: - output := utils.NewWebSockWrapper(ws, utils.WebSocketTextMode) - clientConfig := &client.Config{ - SkipLocalAuth: true, - ForwardAgent: true, - Agent: agent, - TLS: tlsConfig, - AuthMethods: []ssh.AuthMethod{ssh.PublicKeys(signers...)}, - DefaultPrincipal: cert.ValidPrincipals[0], - HostLogin: t.params.Login, - Username: t.ctx.user, - Namespace: t.params.Namespace, - Stdout: output, - Stderr: output, - Stdin: ws, - SiteName: t.params.Cluster, - ProxyHostPort: t.params.ProxyHostPort, - Host: t.hostName, - HostPort: t.hostPort, - Env: map[string]string{sshutils.SessionEnvVar: string(t.params.SessionID)}, - HostKeyCallback: func(string, net.Addr, ssh.PublicKey) error { return nil }, - ClientAddr: r.RemoteAddr, - } - if len(t.params.InteractiveCommand) > 0 { - clientConfig.Interactive = true - } - tc, err := client.NewClient(clientConfig) - if err != nil { - log.Warningf("failed to create client: %v", err) - errToTerm(err, ws) - return - } - // this callback will execute when a shell is created, it will give - // us a reference to ssh.Client object - tc.OnShellCreated = func(s *ssh.Session, c *ssh.Client, _ io.ReadWriteCloser) (bool, error) { - t.sshSession = s - t.resizePTYWindow(t.params.Term) - return false, nil - } - if err = tc.SSH(context.TODO(), t.params.InteractiveCommand, false); err != nil { - log.Warningf("failed to SSH: %v", err) - errToTerm(err, ws) - return - } - } - // this is to make sure we close web socket connections once - // sessionContext that owns them expires - t.ctx.AddClosers(t) - defer t.ctx.RemoveCloser(t) - - // TODO(klizhentas) - // we instantiate a server explicitly here instead of using - // websocket.HandlerFunc to set empty origin checker - // make sure we check origin when in prod mode - ws := &websocket.Server{Handler: webSocketLoop} - ws.ServeHTTP(w, r) +// errToTerm displays an error in the terminal window. +func errToTerm(err error, w io.Writer) { + fmt.Fprintf(w, "%s\r\n", err.Error()) } -// resolveServerHostPort parses server name and attempts to resolve hostname and port +// resolveServerHostPort parses server name and attempts to resolve hostname +// and port. func resolveServerHostPort(servername string, existingServers []services.Server) (string, int, error) { - // if port is 0, it means the client wants us to figure out which port to use + // If port is 0, client wants us to figure out which port to use. var defaultPort = 0 if servername == "" { return "", defaultPort, trace.BadParameter("empty server name") } - // check if servername is UUID + // Check if servername is UUID. for i := range existingServers { node := existingServers[i] if node.GetName() == servername { @@ -254,7 +482,7 @@ func resolveServerHostPort(servername string, existingServers []services.Server) return servername, defaultPort, nil } - // check for explicitly specified port + // Check for explicitly specified port. host, portString, err := utils.SplitHostPort(servername) if err != nil { return "", defaultPort, trace.Wrap(err) @@ -267,3 +495,145 @@ func resolveServerHostPort(servername string, existingServers []services.Server) return host, port, nil } + +// wrappedSocket wraps and unwraps the envelope that is used to send events +// over the websocket. +type wrappedSocket struct { + ws *websocket.Conn + terminal *TerminalHandler + + encoder *encoding.Encoder + decoder *encoding.Decoder +} + +func newWrappedSocket(ws *websocket.Conn, terminal *TerminalHandler) *wrappedSocket { + if ws == nil { + return nil + } + return &wrappedSocket{ + ws: ws, + terminal: terminal, + encoder: unicode.UTF8.NewEncoder(), + decoder: unicode.UTF8.NewDecoder(), + } +} + +// Write wraps the data bytes in a raw envelope and sends. +func (w *wrappedSocket) Write(data []byte) (n int, err error) { + encodedBytes, err := w.encoder.Bytes(data) + if err != nil { + return 0, trace.Wrap(err) + } + + e := rawEnvelope{ + Type: defaults.RawEnvelopeType, + Payload: encodedBytes, + } + + err = websocket.JSON.Send(w.ws, e) + if err != nil { + return 0, trace.Wrap(err) + } + + return len(data), nil +} + +// Read unwraps the envelope and either fills out the passed in bytes or +// performs an action on the connection (sending window-change request). +func (w *wrappedSocket) Read(out []byte) (n int, err error) { + var ue unknownEnvelope + err = websocket.JSON.Receive(w.ws, &ue) + if err != nil { + if err == io.EOF { + return 0, io.EOF + } + return 0, trace.Wrap(err) + } + + switch ue.Type { + case defaults.RawEnvelopeType: + var re rawEnvelope + err := json.Unmarshal(ue.Raw, &re) + if err != nil { + return 0, trace.Wrap(err) + } + + var data []byte + data, err = w.decoder.Bytes(re.Payload) + if err != nil { + return 0, trace.Wrap(err) + } + + if len(out) < len(data) { + log.Warningf("websocket failed to receive everything: %d vs %d", len(out), len(data)) + } + + return copy(out, data), nil + case defaults.ResizeRequestEnvelopeType: + if w.terminal == nil { + return 0, nil + } + + var ee eventEnvelope + err := json.Unmarshal(ue.Raw, &ee) + if err != nil { + return 0, trace.Wrap(err) + } + + params, err := session.UnmarshalTerminalParams(ee.Payload.GetString("size")) + if err != nil { + return 0, trace.Wrap(err) + } + + // Send the window change request in a goroutine so reads are not blocked + // by network connectivity issues. + go w.terminal.windowChange(params) + + return 0, nil + default: + return 0, trace.BadParameter("unknown envelope type") + } +} + +// SetReadDeadline sets the network read deadline on the underlying websocket. +func (w *wrappedSocket) SetReadDeadline(t time.Time) error { + return w.ws.SetReadDeadline(t) +} + +// Close the websocket. +func (w *wrappedSocket) Close() error { + return w.ws.Close() +} + +// eventEnvelope is used to send/receive audit events. +type eventEnvelope struct { + Type string `json:"type"` + Payload events.EventFields `json:"payload"` +} + +// rawEnvelope is used to send/receive terminal bytes. +type rawEnvelope struct { + Type string `json:"type"` + Payload []byte `json:"payload"` +} + +// unknownEnvelope is used to figure out the type of data being unmarshaled. +type unknownEnvelope struct { + envelopeHeader + Raw []byte +} + +type envelopeHeader struct { + Type string `json:"type"` +} + +func (u *unknownEnvelope) UnmarshalJSON(raw []byte) error { + var eh envelopeHeader + if err := json.Unmarshal(raw, &eh); err != nil { + return err + } + u.Type = eh.Type + u.Raw = make([]byte, len(raw)) + copy(u.Raw, raw) + return nil +} From 2d067f9a95e2731dfce8dcf0bd006d0885c9097d Mon Sep 17 00:00:00 2001 From: Alexey Kontsevoy Date: Fri, 4 May 2018 15:00:35 -0400 Subject: [PATCH 2/3] (web) use the same websocket for terminal data and events --- .../app/__tests__/lib/sessionPlayerTest.js | 9 +- web/src/app/components/app.jsx | 2 +- .../app/components/terminal/terminalHost.jsx | 21 +---- web/src/app/config.js | 2 - web/src/app/flux/sessions/actionTypes.js | 4 +- web/src/app/flux/sessions/actions.js | 7 +- .../app/flux/sessions/activeSessionStore.js | 9 +- web/src/app/flux/terminal/store.js | 4 +- web/src/app/lib/term/enums.js | 9 ++ web/src/app/lib/term/terminal.js | 20 ++--- web/src/app/lib/term/tty.js | 78 +++++++++++----- web/src/app/lib/term/ttyAddressResolver.js | 14 +-- web/src/app/lib/term/ttyEvents.js | 89 ------------------- web/src/app/lib/term/ttyPlayer.js | 20 ++--- web/src/styles/grv.scss | 6 ++ 15 files changed, 105 insertions(+), 189 deletions(-) delete mode 100644 web/src/app/lib/term/ttyEvents.js diff --git a/web/src/app/__tests__/lib/sessionPlayerTest.js b/web/src/app/__tests__/lib/sessionPlayerTest.js index 3cf2590f96db1..e8b03035063a3 100644 --- a/web/src/app/__tests__/lib/sessionPlayerTest.js +++ b/web/src/app/__tests__/lib/sessionPlayerTest.js @@ -16,7 +16,8 @@ limitations under the License. import api from 'app/services/api'; import $ from 'jQuery'; import expect, { spyOn } from 'expect'; -import {EventProvider, TtyPlayer, MAX_SIZE, Buffer } from 'app/lib/term/ttyPlayer'; +import { EventProvider, TtyPlayer, MAX_SIZE, Buffer } from 'app/lib/term/ttyPlayer'; +import { TermEventEnum } from 'app/lib/term/enums'; import sample from './streamData'; const Dfd = $.Deferred; @@ -163,7 +164,7 @@ describe('lib/ttyPlayer', () => { }); it('should move by 1 position when called w/o params', cb => { - tty.on('data', data=>{ + tty.on(TermEventEnum.DATA, data=>{ expect(data.length).toBe(42); cb(); }); @@ -172,7 +173,7 @@ describe('lib/ttyPlayer', () => { }); it('should move from 1 to 478 position (forward)', cb => { - tty.on('data', data=>{ + tty.on(TermEventEnum.DATA, data=>{ cb(); expect(data.length).toBe(11246); }); @@ -182,7 +183,7 @@ describe('lib/ttyPlayer', () => { it('should move from 478 to 1 position (back)', cb => { tty.current = 478; - tty.on('data', data=>{ + tty.on(TermEventEnum.DATA, data=>{ cb(); expect(data.length).toEqual(42); }); diff --git a/web/src/app/components/app.jsx b/web/src/app/components/app.jsx index 27610849b40c6..2f52c470bfb1f 100644 --- a/web/src/app/components/app.jsx +++ b/web/src/app/components/app.jsx @@ -49,7 +49,7 @@ class App extends Component { if (isSuccess) { return (
- + {this.props.CurrentSessionHost} {this.props.children} diff --git a/web/src/app/components/terminal/terminalHost.jsx b/web/src/app/components/terminal/terminalHost.jsx index eb9bf989cc9d0..c145fc046aa4a 100644 --- a/web/src/app/components/terminal/terminalHost.jsx +++ b/web/src/app/components/terminal/terminalHost.jsx @@ -16,15 +16,15 @@ limitations under the License. import React from 'react'; import { connect } from 'nuclear-js-react-addons'; -import { EventTypeEnum } from 'app/lib/term/enums'; import Terminal from 'app/lib/term/terminal'; +import { TermEventEnum } from 'app/lib/term/enums'; import termGetters from 'app/flux/terminal/getters'; import TtyAddressResolver from 'app/lib/term/ttyAddressResolver'; import { initTerminal, updateRoute, close } from 'app/flux/terminal/actions'; -import { updateSession } from 'app/flux/sessions/actions'; import * as playerActions from 'app/flux/player/actions'; import PartyListPanel from './../partyListPanel'; + import Indicator from './../indicator.jsx'; import PartyList from './terminalPartyList'; @@ -105,9 +105,9 @@ class TerminalContainer extends React.Component { el: this.refs.container, addressResolver }); - - this.terminal.ttyEvents.on('data', this.receiveEvents.bind(this)); + this.terminal.open(); + this.terminal.tty.on(TermEventEnum.CLOSE, close); } componentWillUnmount() { @@ -121,19 +121,6 @@ class TerminalContainer extends React.Component { render() { return (
); } - - receiveEvents(data) { - let hasEnded = data.events.some(item => item.event === EventTypeEnum.END); - if (hasEnded) { - close(); - } - - // update participant list - updateSession({ - siteId: this.props.store.getClusterName(), - json: data.session - }) - } } const ErrorIndicator = ({ text }) => ( diff --git a/web/src/app/config.js b/web/src/app/config.js index fc7cd8b9bd78e..f75ed6a9c0f80 100644 --- a/web/src/app/config.js +++ b/web/src/app/config.js @@ -76,8 +76,6 @@ const cfg = { siteEventSessionFilterPath: `/v1/webapi/sites/:siteId/sessions`, siteEventsFilterPath: `/v1/webapi/sites/:siteId/events?event=session.start&event=session.end&from=:start&to=:end`, ttyWsAddr: ':fqdm/v1/webapi/sites/:cluster/connect?access_token=:token¶ms=:params', - ttyEventWsAddr: ':fqdm/v1/webapi/sites/:cluster/sessions/:sid/events/stream?access_token=:token', - ttyResizeUrl: '/v1/webapi/sites/:cluster/sessions/:sid', getSiteUrl(siteId) { return formatPattern(cfg.api.sitePath, { siteId }); diff --git a/web/src/app/flux/sessions/actionTypes.js b/web/src/app/flux/sessions/actionTypes.js index a64a4382e7490..b356183a0f557 100644 --- a/web/src/app/flux/sessions/actionTypes.js +++ b/web/src/app/flux/sessions/actionTypes.js @@ -15,6 +15,4 @@ limitations under the License. */ export const RECEIVE_ACTIVE_SESSIONS = 'TLPT_SESSIONS_RECEIVE_ACTIVE'; -export const UPDATE_ACTIVE_SESSION = 'TLPT_SESSIONS_UPDATE_ACTIVE'; -export const RECEIVE_SITE_EVENTS = 'TLPT_SESSIONS_RECEIVE_EVENTS'; - +export const RECEIVE_SITE_EVENTS = 'TLPT_SESSIONS_RECEIVE_EVENTS'; \ No newline at end of file diff --git a/web/src/app/flux/sessions/actions.js b/web/src/app/flux/sessions/actions.js index fbc1a2b5a8a3c..f2ac98f45ba31 100644 --- a/web/src/app/flux/sessions/actions.js +++ b/web/src/app/flux/sessions/actions.js @@ -22,8 +22,7 @@ import appGetters from 'app/flux/app/getters'; import Logger from 'app/lib/logger'; import { RECEIVE_ACTIVE_SESSIONS, - RECEIVE_SITE_EVENTS, - UPDATE_ACTIVE_SESSION + RECEIVE_SITE_EVENTS, } from './actionTypes'; const logger = Logger.create('Modules/Sessions'); @@ -69,10 +68,6 @@ const actions = { .fail(err => { logger.error('fetchActiveSessions', err); }); - }, - - updateSession({ siteId, json }){ - reactor.dispatch(UPDATE_ACTIVE_SESSION, { siteId, json }); } } diff --git a/web/src/app/flux/sessions/activeSessionStore.js b/web/src/app/flux/sessions/activeSessionStore.js index fcd53a62e4236..701d7463eb750 100644 --- a/web/src/app/flux/sessions/activeSessionStore.js +++ b/web/src/app/flux/sessions/activeSessionStore.js @@ -17,9 +17,7 @@ limitations under the License. import { Store, toImmutable } from 'nuclear-js'; import { Record, List } from 'immutable'; -import { - RECEIVE_ACTIVE_SESSIONS, - UPDATE_ACTIVE_SESSION } from './actionTypes'; +import { RECEIVE_ACTIVE_SESSIONS } from './actionTypes'; const ActiveSessionRec = Record({ id: undefined, @@ -48,14 +46,9 @@ export default Store({ initialize() { this.on(RECEIVE_ACTIVE_SESSIONS, receive); - this.on(UPDATE_ACTIVE_SESSION, updateSession); } }) -function updateSession(state, { siteId, json }) { - const rec = createSessionRec(siteId, json); - return rec.equals(state.get(rec.id)) ? state : state.set(rec.id, rec); -} function receive(state, { siteId, json }) { const jsonArray = json || []; diff --git a/web/src/app/flux/terminal/store.js b/web/src/app/flux/terminal/store.js index 8374f2ec9a814..34cc0f74cf533 100644 --- a/web/src/app/flux/terminal/store.js +++ b/web/src/app/flux/terminal/store.js @@ -53,9 +53,7 @@ export class TermRec extends Record({ login: this.login, sid: this.sid, token: accessToken, - ttyUrl: cfg.api.ttyWsAddr, - ttyEventUrl: cfg.api.ttyEventWsAddr, - ttyResizeUrl: cfg.api.ttyResizeUrl, + ttyUrl: cfg.api.ttyWsAddr, cluster: this.siteId, getTarget() { return { server_id }; diff --git a/web/src/app/lib/term/enums.js b/web/src/app/lib/term/enums.js index da1e365c68787..a5f3ba566c164 100644 --- a/web/src/app/lib/term/enums.js +++ b/web/src/app/lib/term/enums.js @@ -16,11 +16,20 @@ limitations under the License. export const EventTypeEnum = { START: 'session.start', + JOIN: 'session.join', END: 'session.end', PRINT: 'print', RESIZE: 'resize' } +export const TermEventEnum = { + RESIZE: 'terminal.resize', + CLOSE: 'terminal.close', + RESET: 'terminal.reset', + DATA: 'terminal.data', + CONN_CLOSE: 'connection.close' +} + export const StatusCodeEnum = { NORMAL: 1000 } \ No newline at end of file diff --git a/web/src/app/lib/term/terminal.js b/web/src/app/lib/term/terminal.js index 730071c2d2c76..7412cd3b4e1e6 100644 --- a/web/src/app/lib/term/terminal.js +++ b/web/src/app/lib/term/terminal.js @@ -15,9 +15,9 @@ limitations under the License. */ import XTerm from 'xterm/dist/xterm'; import Tty from './tty'; -import TtyEvents from './ttyEvents'; import {debounce, isNumber} from 'lodash'; import Logger from 'app/lib/logger'; +import { TermEventEnum } from './enums'; const logger = Logger.create('lib/term/terminal'); const DISCONNECT_TXT = 'disconnected'; @@ -34,7 +34,6 @@ class TtyTerminal { const { addressResolver, el, scrollBack = 1000 } = options; this._el = el; this.tty = new Tty(addressResolver); - this.ttyEvents = new TtyEvents(addressResolver); this.scrollBack = scrollBack this.rows = undefined; this.cols = undefined; @@ -70,24 +69,21 @@ class TtyTerminal { window.addEventListener('resize', this.debouncedResize); // subscribe to tty - this.tty.on('reset', this.reset.bind(this)); - this.tty.on('close', this._processClose.bind(this)); - this.tty.on('data', this._processData.bind(this)); + this.tty.on(TermEventEnum.RESET, this.reset.bind(this)); + this.tty.on(TermEventEnum.CONN_CLOSE, this._processClose.bind(this)); + this.tty.on(TermEventEnum.DATA, this._processData.bind(this)); // subscribe tty resize event (used by session player) - this.tty.on('resize', ({h, w}) => this.resize(w, h)); - // subscribe to session resize events (triggered by other participants) - this.ttyEvents.on('resize', ({h, w}) => this.resize(w, h)); + this.tty.on(TermEventEnum.RESIZE, ({h, w}) => this.resize(w, h)); this.connect(); } connect(){ this.tty.connect(this.cols, this.rows); - this.ttyEvents.connect(); } - destroy() { + destroy() { window.removeEventListener('resize', this.debouncedResize); this._disconnect(); if(this.term !== null){ @@ -148,9 +144,7 @@ class TtyTerminal { _disconnect() { this.tty.disconnect(); - this.tty.removeAllListeners(); - this.ttyEvents.disconnect(); - this.ttyEvents.removeAllListeners(); + this.tty.removeAllListeners(); } _requestResize(){ diff --git a/web/src/app/lib/term/tty.js b/web/src/app/lib/term/tty.js index f06a6612fd2e4..65b2f35cdee19 100644 --- a/web/src/app/lib/term/tty.js +++ b/web/src/app/lib/term/tty.js @@ -14,10 +14,12 @@ See the License for the specific language governing permissions and limitations under the License. */ +import BufferModule from 'buffer/'; import { EventEmitter } from 'events'; -import { StatusCodeEnum } from './enums'; -import api from 'app/services/api'; import Logger from './../logger'; +import { EventTypeEnum, TermEventEnum, StatusCodeEnum } from './enums'; + +const Decoder = BufferModule.Buffer; const logger = Logger.create('Tty'); @@ -60,24 +62,34 @@ class Tty extends EventEmitter { this.socket.onmessage = this._onReceiveData; this.socket.onclose = this._onCloseConnection; } - - send(data){ - this.socket.send(data); - } + + send(data) { + const msg = { + type: "raw", + payload: Decoder(data, 'utf8').toString('base64') + } - requestResize(w, h){ - const url = this._addressResolver.getResizeReqUrl(); - const payload = { - terminal_params: { w, h } - }; + this.socket.send(JSON.stringify(msg)); + } + requestResize(w, h){ + const msg = { + type: "resize.request", + payload: { + event: EventTypeEnum.RESIZE, + width: w, + height: h, + size: `${w}:${h}` + } + } + logger.info('requesting new screen size', `w:${w} and h:${h}`); - return api.put(url, payload) - .fail(err => logger.error('requestResize', err)); + + this.socket.send(JSON.stringify(msg)); } _flushBuffer() { - this.emit('data', this._attachSocketBuffer); + this.emit(TermEventEnum.DATA, this._attachSocketBuffer); this._attachSocketBuffer = null; clearTimeout(this._attachSocketBufferTimer); this._attachSocketBufferTimer = null; @@ -102,17 +114,43 @@ class Tty extends EventEmitter { this.socket.onmessage = null; this.socket.onclose = null; this.socket = null; - this.emit('close', e); + this.emit(TermEventEnum.CONN_CLOSE, e); logger.info('websocket is closed'); } - _onReceiveData(ev) { - if (this._buffered) { - this._pushToBuffer(ev.data); - } else { - this.emit('data', ev.data); + _onReceiveData(ev) { + try { + const msg = JSON.parse(ev.data); + if (msg.type === 'audit') { + this._processEvent(msg.payload); + return; + } + + const data = Decoder(msg.payload, 'base64').toString('utf8'); + if (this._buffered) { + this._pushToBuffer(data); + } else { + this.emit(TermEventEnum.DATA, data); + } + } catch (err) { + logger.error('failed to parse incoming message.', err); } } + + _processEvent(event) { + if (event.event === EventTypeEnum.RESIZE) { + let [w, h] = event.size.split(':'); + w = Number(w); + h = Number(h); + this.emit(TermEventEnum.RESIZE, { w, h }); + return; + } + + if (event.event === EventTypeEnum.END) { + this.emit(TermEventEnum.CLOSE, event); + return; + } + } } export default Tty; \ No newline at end of file diff --git a/web/src/app/lib/term/ttyAddressResolver.js b/web/src/app/lib/term/ttyAddressResolver.js index ace722a485c96..91e274cc6ded2 100644 --- a/web/src/app/lib/term/ttyAddressResolver.js +++ b/web/src/app/lib/term/ttyAddressResolver.js @@ -24,9 +24,7 @@ export default class AddressResolver { }, sid: null, clusterName: null, - ttyUrl: null, - ttyEventUrl: null, - ttyResizeUrl: null + ttyUrl: null } constructor(params){ @@ -47,15 +45,7 @@ export default class AddressResolver { const encoded = window.encodeURI(params); return this.format(ttyUrl).replace(':params', encoded); } - - getEventProviderConnStr(){ - return this.format(this._params.ttyEventUrl); - } - - getResizeReqUrl(){ - return this.format(this._params.ttyResizeUrl); - } - + format(url){ return url .replace(':fqdm', cfg.getWsHostName()) diff --git a/web/src/app/lib/term/ttyEvents.js b/web/src/app/lib/term/ttyEvents.js deleted file mode 100644 index b6bed9a0521ee..0000000000000 --- a/web/src/app/lib/term/ttyEvents.js +++ /dev/null @@ -1,89 +0,0 @@ -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import { EventEmitter } from 'events'; -import { sortBy } from 'lodash'; -import { StatusCodeEnum, EventTypeEnum } from './enums'; -import Logger from './../logger'; - -const logger = Logger.create('TtyEvents'); - -class TtyEvents extends EventEmitter { - - socket = null; - - _addressResolver = null; - - constructor(addressResolver){ - super(); - this._addressResolver = addressResolver; - } - - connect(){ - const connStr = this._addressResolver.getEventProviderConnStr(); - this.socket = new WebSocket(connStr); - this.socket.onmessage = this._onReceiveMessage.bind(this); - this.socket.onclose = this._onCloseConnection.bind(this); - this.socket.onopen = () => { - logger.info('websocket is open'); - } - } - - disconnect(reasonCode = StatusCodeEnum.NORMAL) { - if (this.socket !== null) { - this.socket.close(reasonCode); - } - } - - _onCloseConnection(e) { - this.socket.onmessage = null; - this.socket.onopen = null; - this.socket.onclose = null; - this.emit('close', e); - logger.info('websocket is closed'); - } - - _onReceiveMessage(message) { - try - { - let json = JSON.parse(message.data); - this._processResize(json.events) - this.emit('data', json); - } - catch(err){ - logger.error('failed to parse event stream data', err); - } - } - - _processResize(events){ - events = events || []; - // filter resize events - let resizes = events.filter( - item => item.event === EventTypeEnum.RESIZE); - - sortBy(resizes, ['ms']); - - if(resizes.length > 0){ - // get values from the last resize event - let [w, h] = resizes[resizes.length-1].size.split(':'); - w = Number(w); - h = Number(h); - this.emit('resize', { w, h }); - } - } -} - -export default TtyEvents; diff --git a/web/src/app/lib/term/ttyPlayer.js b/web/src/app/lib/term/ttyPlayer.js index 12908e1091b4b..2b5fe85c4c728 100644 --- a/web/src/app/lib/term/ttyPlayer.js +++ b/web/src/app/lib/term/ttyPlayer.js @@ -18,7 +18,7 @@ import $ from 'jQuery'; import BufferModule from 'buffer/'; import api from 'app/services/api'; import Tty from './tty'; -import { EventTypeEnum } from './enums'; +import { EventTypeEnum, TermEventEnum } from './enums'; import Logger from 'app/lib/logger'; const logger = Logger.create('TtyPlayer'); @@ -68,6 +68,8 @@ export class EventProvider{ const end = this.events.length - 1; const totalSize = this.events[end].offset - offset + this.events[end].bytes; const chunkCount = Math.ceil(totalSize / MAX_SIZE); + + // now create a fetch request for each chunk const promises = []; for (let i = 0; i < chunkCount; i++){ const url = `${this.url}/stream?offset=${offset}&bytes=${MAX_SIZE}`; @@ -80,7 +82,7 @@ export class EventProvider{ offset = offset + MAX_SIZE; } - // wait for all chunks to load and then merge all in one + // wait for all chunks and then merge all in one return $.when(...promises) .then((...responses) => { responses = promises.length === 1 ? [[responses]] : responses; @@ -219,11 +221,7 @@ export class TtyPlayer extends Tty { // override send(){ } - - // override - resize(){ - } - + // override connect(){ this._setStatusFlag({isLoading: true}); @@ -287,7 +285,7 @@ export class TtyPlayer extends Tty { // 2. tell terminal to render 1 huge chunk that has everything up to current // location. if (isRewind) { - this.emit('reset'); + this.emit(TermEventEnum.RESET); } const from = isRewind ? 0 : this.currentEventIndex; @@ -321,7 +319,7 @@ export class TtyPlayer extends Tty { // start from the beginning if at the end if(this.current === this.length){ this.current = STREAM_START_INDEX; - this.emit('reset'); + this.emit(TermEventEnum.RESET); } this.timer = setInterval(this.move.bind(this), PLAY_SPEED); @@ -370,8 +368,8 @@ export class TtyPlayer extends Tty { const str = groups[i].data.join(''); const {h, w} = groups[i]; if (str.length > 0) { - this.emit('resize', { h, w }); - this.emit('data', str); + this.emit(TermEventEnum.RESIZE, { h, w }); + this.emit(TermEventEnum.DATA, str); } } } diff --git a/web/src/styles/grv.scss b/web/src/styles/grv.scss index aab5cc5dbd807..596a91eab86fc 100644 --- a/web/src/styles/grv.scss +++ b/web/src/styles/grv.scss @@ -102,6 +102,12 @@ limitations under the License. position: relative; width: 300px; float: right; + + + input { + padding-top: 7px !important; + } + .grv-sshserver-input-errors{ display: none; font-size: 10px; From c4fe0088ee5f0169e0d8d96f37d006346a4e8925 Mon Sep 17 00:00:00 2001 From: Alexey Kontsevoy Date: Fri, 4 May 2018 15:05:35 -0400 Subject: [PATCH 3/3] (web) dist --- ...c365e09.js => app.5395520144facce1d768.js} | 697 +++++++----------- ...5e09.js => styles.5395520144facce1d768.js} | 4 +- ...5e09.js => vendor.5395520144facce1d768.js} | 20 +- ...ndor.aefd2bf857785c3666cbdc029b496d91.css} | 2 +- web/dist/index.html | 4 +- 5 files changed, 297 insertions(+), 430 deletions(-) rename web/dist/app/{app.861b1d995a5d2c365e09.js => app.5395520144facce1d768.js} (97%) rename web/dist/app/{styles.861b1d995a5d2c365e09.js => styles.5395520144facce1d768.js} (77%) rename web/dist/app/{vendor.861b1d995a5d2c365e09.js => vendor.5395520144facce1d768.js} (87%) rename web/dist/app/{vendor.ef05e364314287d37e7b0c161a904a27.css => vendor.aefd2bf857785c3666cbdc029b496d91.css} (99%) diff --git a/web/dist/app/app.861b1d995a5d2c365e09.js b/web/dist/app/app.5395520144facce1d768.js similarity index 97% rename from web/dist/app/app.861b1d995a5d2c365e09.js rename to web/dist/app/app.5395520144facce1d768.js index 9d8aff65edc94..073b608684426 100644 --- a/web/dist/app/app.861b1d995a5d2c365e09.js +++ b/web/dist/app/app.5395520144facce1d768.js @@ -39,21 +39,21 @@ webpackJsonp([0],[ var Features = _interopRequireWildcard(_features); - var _settings = __webpack_require__(549); + var _settings = __webpack_require__(548); - var _featureActivator = __webpack_require__(543); + var _featureActivator = __webpack_require__(542); var _featureActivator2 = _interopRequireDefault(_featureActivator); var _actions = __webpack_require__(284); - var _app = __webpack_require__(555); + var _app = __webpack_require__(554); var _app2 = _interopRequireDefault(_app); var _actions2 = __webpack_require__(239); - __webpack_require__(559); + __webpack_require__(558); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } @@ -1244,8 +1244,6 @@ webpackJsonp([0],[ siteEventSessionFilterPath: '/v1/webapi/sites/:siteId/sessions', siteEventsFilterPath: '/v1/webapi/sites/:siteId/events?event=session.start&event=session.end&from=:start&to=:end', ttyWsAddr: ':fqdm/v1/webapi/sites/:cluster/connect?access_token=:token¶ms=:params', - ttyEventWsAddr: ':fqdm/v1/webapi/sites/:cluster/sessions/:sid/events/stream?access_token=:token', - ttyResizeUrl: '/v1/webapi/sites/:cluster/sessions/:sid', getSiteUrl: function getSiteUrl(siteId) { return (0, _patternUtils.formatPattern)(cfg.api.sitePath, { siteId: siteId }); @@ -10224,11 +10222,11 @@ webpackJsonp([0],[ var _featureSsh2 = _interopRequireDefault(_featureSsh); - var _featureAudit = __webpack_require__(444); + var _featureAudit = __webpack_require__(448); var _featureAudit2 = _interopRequireDefault(_featureAudit); - var _featureSettings = __webpack_require__(542); + var _featureSettings = __webpack_require__(541); var _featureSettings2 = _interopRequireDefault(_featureSettings); @@ -12231,12 +12229,6 @@ webpackJsonp([0],[ }).fail(function (err) { logger.error('fetchActiveSessions', err); }); - }, - updateSession: function updateSession(_ref) { - var siteId = _ref.siteId, - json = _ref.json; - - _reactor2.default.dispatch(_actionTypes.UPDATE_ACTIVE_SESSION, { siteId: siteId, json: json }); } }; @@ -12387,7 +12379,6 @@ webpackJsonp([0],[ */ var RECEIVE_ACTIVE_SESSIONS = exports.RECEIVE_ACTIVE_SESSIONS = 'TLPT_SESSIONS_RECEIVE_ACTIVE'; - var UPDATE_ACTIVE_SESSION = exports.UPDATE_ACTIVE_SESSION = 'TLPT_SESSIONS_UPDATE_ACTIVE'; var RECEIVE_SITE_EVENTS = exports.RECEIVE_SITE_EVENTS = 'TLPT_SESSIONS_RECEIVE_EVENTS'; /***/ }), @@ -12997,29 +12988,27 @@ webpackJsonp([0],[ var _nuclearJsReactAddons = __webpack_require__(219); - var _enums = __webpack_require__(420); - - var _terminal = __webpack_require__(421); + var _terminal = __webpack_require__(420); var _terminal2 = _interopRequireDefault(_terminal); - var _getters = __webpack_require__(426); + var _enums = __webpack_require__(429); + + var _getters = __webpack_require__(430); var _getters2 = _interopRequireDefault(_getters); - var _ttyAddressResolver = __webpack_require__(427); + var _ttyAddressResolver = __webpack_require__(431); var _ttyAddressResolver2 = _interopRequireDefault(_ttyAddressResolver); - var _actions = __webpack_require__(428); - - var _actions2 = __webpack_require__(290); + var _actions = __webpack_require__(432); - var _actions3 = __webpack_require__(433); + var _actions2 = __webpack_require__(437); - var playerActions = _interopRequireWildcard(_actions3); + var playerActions = _interopRequireWildcard(_actions2); - var _partyListPanel = __webpack_require__(435); + var _partyListPanel = __webpack_require__(439); var _partyListPanel2 = _interopRequireDefault(_partyListPanel); @@ -13027,7 +13016,7 @@ webpackJsonp([0],[ var _indicator2 = _interopRequireDefault(_indicator); - var _terminalPartyList = __webpack_require__(436); + var _terminalPartyList = __webpack_require__(440); var _terminalPartyList2 = _interopRequireDefault(_terminalPartyList); @@ -13162,8 +13151,8 @@ webpackJsonp([0],[ addressResolver: addressResolver }); - this.terminal.ttyEvents.on('data', this.receiveEvents.bind(this)); this.terminal.open(); + this.terminal.tty.on(_enums.TermEventEnum.CLOSE, _actions.close); }; TerminalContainer.prototype.componentWillUnmount = function componentWillUnmount() { @@ -13178,21 +13167,6 @@ webpackJsonp([0],[ return _react2.default.createElement('div', { ref: 'container' }); }; - TerminalContainer.prototype.receiveEvents = function receiveEvents(data) { - var hasEnded = data.events.some(function (item) { - return item.event === _enums.EventTypeEnum.END; - }); - if (hasEnded) { - (0, _actions.close)(); - } - - // update participant list - (0, _actions2.updateSession)({ - siteId: this.props.store.getClusterName(), - json: data.session - }); - }; - return TerminalContainer; }(_react2.default.Component); @@ -13266,64 +13240,28 @@ webpackJsonp([0],[ /***/ }), /* 420 */ -/***/ (function(module, exports) { - - 'use strict'; - - exports.__esModule = true; - /* - Copyright 2015 Gravitational, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - - var EventTypeEnum = exports.EventTypeEnum = { - START: 'session.start', - END: 'session.end', - PRINT: 'print', - RESIZE: 'resize' - }; - - var StatusCodeEnum = exports.StatusCodeEnum = { - NORMAL: 1000 - }; - -/***/ }), -/* 421 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; exports.__esModule = true; - var _xterm = __webpack_require__(422); + var _xterm = __webpack_require__(421); var _xterm2 = _interopRequireDefault(_xterm); - var _tty = __webpack_require__(423); + var _tty = __webpack_require__(422); var _tty2 = _interopRequireDefault(_tty); - var _ttyEvents = __webpack_require__(425); - - var _ttyEvents2 = _interopRequireDefault(_ttyEvents); - var _lodash = __webpack_require__(275); var _logger = __webpack_require__(245); var _logger2 = _interopRequireDefault(_logger); + var _enums = __webpack_require__(429); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /* @@ -13364,7 +13302,6 @@ webpackJsonp([0],[ this._el = el; this.tty = new _tty2.default(addressResolver); - this.ttyEvents = new _ttyEvents2.default(addressResolver); this.scrollBack = scrollBack; this.rows = undefined; this.cols = undefined; @@ -13399,29 +13336,22 @@ webpackJsonp([0],[ window.addEventListener('resize', this.debouncedResize); // subscribe to tty - this.tty.on('reset', this.reset.bind(this)); - this.tty.on('close', this._processClose.bind(this)); - this.tty.on('data', this._processData.bind(this)); + this.tty.on(_enums.TermEventEnum.RESET, this.reset.bind(this)); + this.tty.on(_enums.TermEventEnum.CONN_CLOSE, this._processClose.bind(this)); + this.tty.on(_enums.TermEventEnum.DATA, this._processData.bind(this)); // subscribe tty resize event (used by session player) - this.tty.on('resize', function (_ref) { + this.tty.on(_enums.TermEventEnum.RESIZE, function (_ref) { var h = _ref.h, w = _ref.w; return _this.resize(w, h); }); - // subscribe to session resize events (triggered by other participants) - this.ttyEvents.on('resize', function (_ref2) { - var h = _ref2.h, - w = _ref2.w; - return _this.resize(w, h); - }); this.connect(); }; TtyTerminal.prototype.connect = function connect() { this.tty.connect(this.cols, this.rows); - this.ttyEvents.connect(); }; TtyTerminal.prototype.destroy = function destroy() { @@ -13487,8 +13417,6 @@ webpackJsonp([0],[ TtyTerminal.prototype._disconnect = function _disconnect() { this.tty.disconnect(); this.tty.removeAllListeners(); - this.ttyEvents.disconnect(); - this.ttyEvents.removeAllListeners(); }; TtyTerminal.prototype._requestResize = function _requestResize() { @@ -13540,8 +13468,8 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 422 */, -/* 423 */ +/* 421 */, +/* 422 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -13550,18 +13478,18 @@ webpackJsonp([0],[ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - var _events = __webpack_require__(424); - - var _enums = __webpack_require__(420); + var _buffer = __webpack_require__(423); - var _api = __webpack_require__(241); + var _buffer2 = _interopRequireDefault(_buffer); - var _api2 = _interopRequireDefault(_api); + var _events = __webpack_require__(428); var _logger = __webpack_require__(245); var _logger2 = _interopRequireDefault(_logger); + var _enums = __webpack_require__(429); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -13584,6 +13512,8 @@ webpackJsonp([0],[ limitations under the License. */ + var Decoder = _buffer2.default.Buffer; + var logger = _logger2.default.create('Tty'); var defaultOptions = { @@ -13631,23 +13561,32 @@ webpackJsonp([0],[ }; Tty.prototype.send = function send(data) { - this.socket.send(data); + var msg = { + type: "raw", + payload: Decoder(data, 'utf8').toString('base64') + }; + + this.socket.send(JSON.stringify(msg)); }; Tty.prototype.requestResize = function requestResize(w, h) { - var url = this._addressResolver.getResizeReqUrl(); - var payload = { - terminal_params: { w: w, h: h } + var msg = { + type: "resize.request", + payload: { + event: _enums.EventTypeEnum.RESIZE, + width: w, + height: h, + size: w + ':' + h + } }; logger.info('requesting new screen size', 'w:' + w + ' and h:' + h); - return _api2.default.put(url, payload).fail(function (err) { - return logger.error('requestResize', err); - }); + + this.socket.send(JSON.stringify(msg)); }; Tty.prototype._flushBuffer = function _flushBuffer() { - this.emit('data', this._attachSocketBuffer); + this.emit(_enums.TermEventEnum.DATA, this._attachSocketBuffer); this._attachSocketBuffer = null; clearTimeout(this._attachSocketBufferTimer); this._attachSocketBufferTimer = null; @@ -13672,15 +13611,44 @@ webpackJsonp([0],[ this.socket.onmessage = null; this.socket.onclose = null; this.socket = null; - this.emit('close', e); + this.emit(_enums.TermEventEnum.CONN_CLOSE, e); logger.info('websocket is closed'); }; Tty.prototype._onReceiveData = function _onReceiveData(ev) { - if (this._buffered) { - this._pushToBuffer(ev.data); - } else { - this.emit('data', ev.data); + try { + var msg = JSON.parse(ev.data); + if (msg.type === 'audit') { + this._processEvent(msg.payload); + return; + } + + var data = Decoder(msg.payload, 'base64').toString('utf8'); + if (this._buffered) { + this._pushToBuffer(data); + } else { + this.emit(_enums.TermEventEnum.DATA, data); + } + } catch (err) { + logger.error('failed to parse incoming message.', err); + } + }; + + Tty.prototype._processEvent = function _processEvent(event) { + if (event.event === _enums.EventTypeEnum.RESIZE) { + var _event$size$split = event.size.split(':'), + w = _event$size$split[0], + h = _event$size$split[1]; + + w = Number(w); + h = Number(h); + this.emit(_enums.TermEventEnum.RESIZE, { w: w, h: h }); + return; + } + + if (event.event === _enums.EventTypeEnum.END) { + this.emit(_enums.TermEventEnum.CLOSE, event); + return; } }; @@ -13691,7 +13659,12 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 424 */ +/* 423 */, +/* 424 */, +/* 425 */, +/* 426 */, +/* 427 */, +/* 428 */ /***/ (function(module, exports) { // Copyright Joyent, Inc. and other Node contributors. @@ -13998,127 +13971,50 @@ webpackJsonp([0],[ /***/ }), -/* 425 */ -/***/ (function(module, exports, __webpack_require__) { +/* 429 */ +/***/ (function(module, exports) { 'use strict'; exports.__esModule = true; + /* + Copyright 2015 Gravitational, Inc. - var _events = __webpack_require__(424); - - var _lodash = __webpack_require__(275); - - var _enums = __webpack_require__(420); - - var _logger = __webpack_require__(245); - - var _logger2 = _interopRequireDefault(_logger); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* - Copyright 2015 Gravitational, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - - var logger = _logger2.default.create('TtyEvents'); - - var TtyEvents = function (_EventEmitter) { - _inherits(TtyEvents, _EventEmitter); - - function TtyEvents(addressResolver) { - _classCallCheck(this, TtyEvents); - - var _this = _possibleConstructorReturn(this, _EventEmitter.call(this)); - - _this.socket = null; - _this._addressResolver = null; - - _this._addressResolver = addressResolver; - return _this; - } - - TtyEvents.prototype.connect = function connect() { - var connStr = this._addressResolver.getEventProviderConnStr(); - this.socket = new WebSocket(connStr); - this.socket.onmessage = this._onReceiveMessage.bind(this); - this.socket.onclose = this._onCloseConnection.bind(this); - this.socket.onopen = function () { - logger.info('websocket is open'); - }; - }; - - TtyEvents.prototype.disconnect = function disconnect() { - var reasonCode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _enums.StatusCodeEnum.NORMAL; - - if (this.socket !== null) { - this.socket.close(reasonCode); - } - }; - - TtyEvents.prototype._onCloseConnection = function _onCloseConnection(e) { - this.socket.onmessage = null; - this.socket.onopen = null; - this.socket.onclose = null; - this.emit('close', e); - logger.info('websocket is closed'); - }; - - TtyEvents.prototype._onReceiveMessage = function _onReceiveMessage(message) { - try { - var json = JSON.parse(message.data); - this._processResize(json.events); - this.emit('data', json); - } catch (err) { - logger.error('failed to parse event stream data', err); - } - }; - - TtyEvents.prototype._processResize = function _processResize(events) { - events = events || []; - // filter resize events - var resizes = events.filter(function (item) { - return item.event === _enums.EventTypeEnum.RESIZE; - }); + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - (0, _lodash.sortBy)(resizes, ['ms']); + http://www.apache.org/licenses/LICENSE-2.0 - if (resizes.length > 0) { - // get values from the last resize event - var _resizes$size$split = resizes[resizes.length - 1].size.split(':'), - w = _resizes$size$split[0], - h = _resizes$size$split[1]; + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ - w = Number(w); - h = Number(h); - this.emit('resize', { w: w, h: h }); - } - }; + var EventTypeEnum = exports.EventTypeEnum = { + START: 'session.start', + JOIN: 'session.join', + END: 'session.end', + PRINT: 'print', + RESIZE: 'resize' + }; - return TtyEvents; - }(_events.EventEmitter); + var TermEventEnum = exports.TermEventEnum = { + RESIZE: 'terminal.resize', + CLOSE: 'terminal.close', + RESET: 'terminal.reset', + DATA: 'terminal.data', + CONN_CLOSE: 'connection.close' + }; - exports.default = TtyEvents; - module.exports = exports['default']; + var StatusCodeEnum = exports.StatusCodeEnum = { + NORMAL: 1000 + }; /***/ }), -/* 426 */ +/* 430 */ /***/ (function(module, exports) { 'use strict'; @@ -14146,7 +14042,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 427 */ +/* 431 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -14188,9 +14084,7 @@ webpackJsonp([0],[ }, sid: null, clusterName: null, - ttyUrl: null, - ttyEventUrl: null, - ttyResizeUrl: null + ttyUrl: null }; this._params = _extends({}, params); @@ -14213,14 +14107,6 @@ webpackJsonp([0],[ return this.format(ttyUrl).replace(':params', encoded); }; - AddressResolver.prototype.getEventProviderConnStr = function getEventProviderConnStr() { - return this.format(this._params.ttyEventUrl); - }; - - AddressResolver.prototype.getResizeReqUrl = function getResizeReqUrl() { - return this.format(this._params.ttyResizeUrl); - }; - AddressResolver.prototype.format = function format(url) { return url.replace(':fqdm', _config2.default.getWsHostName()).replace(':token', this._params.token).replace(':cluster', this._params.cluster).replace(':sid', this._params.sid); }; @@ -14232,7 +14118,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 428 */ +/* 432 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -14280,15 +14166,15 @@ webpackJsonp([0],[ var _logger2 = _interopRequireDefault(_logger); - var _nodeStore = __webpack_require__(429); + var _nodeStore = __webpack_require__(433); - var _getters = __webpack_require__(430); + var _getters = __webpack_require__(434); var _getters2 = _interopRequireDefault(_getters); - var _actionTypes = __webpack_require__(431); + var _actionTypes = __webpack_require__(435); - var _actions = __webpack_require__(432); + var _actions = __webpack_require__(436); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -14373,7 +14259,7 @@ webpackJsonp([0],[ } /***/ }), -/* 429 */ +/* 433 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -14491,7 +14377,7 @@ webpackJsonp([0],[ }); /***/ }), -/* 430 */ +/* 434 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -14506,7 +14392,7 @@ webpackJsonp([0],[ var _config2 = _interopRequireDefault(_config); - var _enums = __webpack_require__(420); + var _enums = __webpack_require__(429); var _reactor = __webpack_require__(233); @@ -14514,7 +14400,7 @@ webpackJsonp([0],[ var _objectUtils = __webpack_require__(277); - var _nodeStore = __webpack_require__(429); + var _nodeStore = __webpack_require__(433); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -14671,7 +14557,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 431 */ +/* 435 */ /***/ (function(module, exports) { 'use strict'; @@ -14697,7 +14583,7 @@ webpackJsonp([0],[ var TLPT_TERMINAL_SET_STATUS = exports.TLPT_TERMINAL_SET_STATUS = 'TLPT_TERMINAL_SET_STATUS'; /***/ }), -/* 432 */ +/* 436 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -14737,7 +14623,7 @@ webpackJsonp([0],[ }; /***/ }), -/* 433 */ +/* 437 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -14754,7 +14640,7 @@ webpackJsonp([0],[ var _config2 = _interopRequireDefault(_config); - var _store = __webpack_require__(434); + var _store = __webpack_require__(438); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -14784,7 +14670,7 @@ webpackJsonp([0],[ } /***/ }), -/* 434 */ +/* 438 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -14909,7 +14795,7 @@ webpackJsonp([0],[ }); /***/ }), -/* 435 */ +/* 439 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -14976,7 +14862,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 436 */ +/* 440 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -14987,13 +14873,13 @@ webpackJsonp([0],[ var _react2 = _interopRequireDefault(_react); - var _reactAddonsCssTransitionGroup = __webpack_require__(437); + var _reactAddonsCssTransitionGroup = __webpack_require__(441); var _reactAddonsCssTransitionGroup2 = _interopRequireDefault(_reactAddonsCssTransitionGroup); var _nuclearJsReactAddons = __webpack_require__(219); - var _getters = __webpack_require__(430); + var _getters = __webpack_require__(434); var _getters2 = _interopRequireDefault(_getters); @@ -15050,14 +14936,14 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 437 */, -/* 438 */, -/* 439 */, -/* 440 */, /* 441 */, /* 442 */, /* 443 */, -/* 444 */ +/* 444 */, +/* 445 */, +/* 446 */, +/* 447 */, +/* 448 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -15074,11 +14960,11 @@ webpackJsonp([0],[ var _actions = __webpack_require__(284); - var _main = __webpack_require__(445); + var _main = __webpack_require__(449); var _main2 = _interopRequireDefault(_main); - var _playerHost = __webpack_require__(510); + var _playerHost = __webpack_require__(514); var _playerHost2 = _interopRequireDefault(_playerHost); @@ -15086,9 +14972,9 @@ webpackJsonp([0],[ var _reactor2 = _interopRequireDefault(_reactor); - var _actions2 = __webpack_require__(447); + var _actions2 = __webpack_require__(451); - var _store = __webpack_require__(434); + var _store = __webpack_require__(438); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -15172,7 +15058,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 445 */ +/* 449 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -15183,25 +15069,25 @@ webpackJsonp([0],[ var _react2 = _interopRequireDefault(_react); - var _connect = __webpack_require__(446); + var _connect = __webpack_require__(450); var _connect2 = _interopRequireDefault(_connect); - var _actions = __webpack_require__(447); + var _actions = __webpack_require__(451); - var _getters = __webpack_require__(430); + var _getters = __webpack_require__(434); - var _getters2 = __webpack_require__(448); + var _getters2 = __webpack_require__(452); var _getters3 = __webpack_require__(273); var _getters4 = _interopRequireDefault(_getters3); - var _dataProvider = __webpack_require__(450); + var _dataProvider = __webpack_require__(454); var _dataProvider2 = _interopRequireDefault(_dataProvider); - var _sessionList = __webpack_require__(451); + var _sessionList = __webpack_require__(455); var _sessionList2 = _interopRequireDefault(_sessionList); @@ -15293,7 +15179,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 446 */ +/* 450 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -15450,7 +15336,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 447 */ +/* 451 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -15461,11 +15347,11 @@ webpackJsonp([0],[ var _reactor2 = _interopRequireDefault(_reactor); - var _getters = __webpack_require__(448); + var _getters = __webpack_require__(452); var _actions = __webpack_require__(290); - var _actionTypes = __webpack_require__(449); + var _actionTypes = __webpack_require__(453); var _logger = __webpack_require__(245); @@ -15515,7 +15401,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 448 */ +/* 452 */ /***/ (function(module, exports) { 'use strict'; @@ -15547,7 +15433,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 449 */ +/* 453 */ /***/ (function(module, exports) { 'use strict'; @@ -15574,7 +15460,7 @@ webpackJsonp([0],[ var TLPT_STORED_SESSINS_FILTER_RECEIVE_MORE = exports.TLPT_STORED_SESSINS_FILTER_RECEIVE_MORE = 'TLPT_STORED_SESSINS_FILTER_RECEIVE_MORE'; /***/ }), -/* 450 */ +/* 454 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -15653,7 +15539,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 451 */ +/* 455 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -15676,13 +15562,13 @@ webpackJsonp([0],[ var _objectUtils = __webpack_require__(277); - var _storedSessionsFilter = __webpack_require__(452); + var _storedSessionsFilter = __webpack_require__(456); var _table = __webpack_require__(280); - var _listItems = __webpack_require__(453); + var _listItems = __webpack_require__(457); - var _datePicker = __webpack_require__(509); + var _datePicker = __webpack_require__(513); var _datePicker2 = _interopRequireDefault(_datePicker); @@ -15918,7 +15804,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 452 */ +/* 456 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -15938,11 +15824,11 @@ webpackJsonp([0],[ See the License for the specific language governing permissions and limitations under the License. */ - module.exports.getters = __webpack_require__(448); - module.exports.actions = __webpack_require__(447); + module.exports.getters = __webpack_require__(452); + module.exports.actions = __webpack_require__(451); /***/ }), -/* 453 */ +/* 457 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -15962,15 +15848,15 @@ webpackJsonp([0],[ var _moment2 = _interopRequireDefault(_moment); - var _layout = __webpack_require__(454); + var _layout = __webpack_require__(458); var _layout2 = _interopRequireDefault(_layout); - var _moreButton = __webpack_require__(455); + var _moreButton = __webpack_require__(459); var _moreButton2 = _interopRequireDefault(_moreButton); - var _popover = __webpack_require__(508); + var _popover = __webpack_require__(512); var _popover2 = _interopRequireDefault(_popover); @@ -16165,7 +16051,7 @@ webpackJsonp([0],[ exports.NodeCell = NodeCell; /***/ }), -/* 454 */ +/* 458 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -16277,7 +16163,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 455 */ +/* 459 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -16292,7 +16178,7 @@ webpackJsonp([0],[ var _classnames2 = _interopRequireDefault(_classnames); - var _overlayTrigger = __webpack_require__(456); + var _overlayTrigger = __webpack_require__(460); var _overlayTrigger2 = _interopRequireDefault(_overlayTrigger); @@ -16340,7 +16226,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 456 */ +/* 460 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -16355,7 +16241,7 @@ webpackJsonp([0],[ var _reactDom2 = _interopRequireDefault(_reactDom); - var _reactOverlays = __webpack_require__(457); + var _reactOverlays = __webpack_require__(461); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -16497,10 +16383,6 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 457 */, -/* 458 */, -/* 459 */, -/* 460 */, /* 461 */, /* 462 */, /* 463 */, @@ -16548,7 +16430,11 @@ webpackJsonp([0],[ /* 505 */, /* 506 */, /* 507 */, -/* 508 */ +/* 508 */, +/* 509 */, +/* 510 */, +/* 511 */, +/* 512 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -16669,7 +16555,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 509 */ +/* 513 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -16790,7 +16676,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 510 */ +/* 514 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -16801,11 +16687,11 @@ webpackJsonp([0],[ var _react2 = _interopRequireDefault(_react); - var _actions = __webpack_require__(433); + var _actions = __webpack_require__(437); - var _player = __webpack_require__(511); + var _player = __webpack_require__(515); - var _partyListPanel = __webpack_require__(435); + var _partyListPanel = __webpack_require__(439); var _partyListPanel2 = _interopRequireDefault(_partyListPanel); @@ -16881,7 +16767,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 511 */ +/* 515 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -16893,7 +16779,7 @@ webpackJsonp([0],[ var _jQuery2 = _interopRequireDefault(_jQuery); - var _jquery = __webpack_require__(512); + var _jquery = __webpack_require__(516); var _jquery2 = _interopRequireDefault(_jquery); @@ -16905,21 +16791,21 @@ webpackJsonp([0],[ var _reactDom2 = _interopRequireDefault(_reactDom); - var _reactSlider = __webpack_require__(534); + var _reactSlider = __webpack_require__(538); var _reactSlider2 = _interopRequireDefault(_reactSlider); - var _terminal = __webpack_require__(421); + var _terminal = __webpack_require__(420); var _terminal2 = _interopRequireDefault(_terminal); - var _ttyPlayer = __webpack_require__(535); + var _ttyPlayer = __webpack_require__(539); var _indicator = __webpack_require__(418); var _indicator2 = _interopRequireDefault(_indicator); - var _items = __webpack_require__(541); + var _items = __webpack_require__(540); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -17176,10 +17062,6 @@ webpackJsonp([0],[ }(_react2.default.Component); /***/ }), -/* 512 */, -/* 513 */, -/* 514 */, -/* 515 */, /* 516 */, /* 517 */, /* 518 */, @@ -17199,7 +17081,11 @@ webpackJsonp([0],[ /* 532 */, /* 533 */, /* 534 */, -/* 535 */ +/* 535 */, +/* 536 */, +/* 537 */, +/* 538 */, +/* 539 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -17211,7 +17097,7 @@ webpackJsonp([0],[ var _jQuery2 = _interopRequireDefault(_jQuery); - var _buffer = __webpack_require__(536); + var _buffer = __webpack_require__(423); var _buffer2 = _interopRequireDefault(_buffer); @@ -17219,11 +17105,11 @@ webpackJsonp([0],[ var _api2 = _interopRequireDefault(_api); - var _tty = __webpack_require__(423); + var _tty = __webpack_require__(422); var _tty2 = _interopRequireDefault(_tty); - var _enums = __webpack_require__(420); + var _enums = __webpack_require__(429); var _logger = __webpack_require__(245); @@ -17306,6 +17192,8 @@ webpackJsonp([0],[ var end = this.events.length - 1; var totalSize = this.events[end].offset - offset + this.events[end].bytes; var chunkCount = Math.ceil(totalSize / MAX_SIZE); + + // now create a fetch request for each chunk var promises = []; for (var i = 0; i < chunkCount; i++) { var url = this.url + '/stream?offset=' + offset + '&bytes=' + MAX_SIZE; @@ -17318,7 +17206,7 @@ webpackJsonp([0],[ offset = offset + MAX_SIZE; } - // wait for all chunks to load and then merge all in one + // wait for all chunks and then merge all in one return _jQuery2.default.when.apply(_jQuery2.default, promises).then(function () { for (var _len = arguments.length, responses = Array(_len), _key = 0; _key < _len; _key++) { responses[_key] = arguments[_key]; @@ -17487,11 +17375,6 @@ webpackJsonp([0],[ // override - TtyPlayer.prototype.resize = function resize() {}; - - // override - - TtyPlayer.prototype.connect = function connect() { var _this4 = this; @@ -17556,7 +17439,7 @@ webpackJsonp([0],[ // 2. tell terminal to render 1 huge chunk that has everything up to current // location. if (isRewind) { - this.emit('reset'); + this.emit(_enums.TermEventEnum.RESET); } var from = isRewind ? 0 : this.currentEventIndex; @@ -17589,7 +17472,7 @@ webpackJsonp([0],[ // start from the beginning if at the end if (this.current === this.length) { this.current = STREAM_START_INDEX; - this.emit('reset'); + this.emit(_enums.TermEventEnum.RESET); } this.timer = setInterval(this.move.bind(this), PLAY_SPEED); @@ -17642,8 +17525,8 @@ webpackJsonp([0],[ w = _groups$_i.w; if (str.length > 0) { - this.emit('resize', { h: h, w: w }); - this.emit('data', str); + this.emit(_enums.TermEventEnum.RESIZE, { h: h, w: w }); + this.emit(_enums.TermEventEnum.DATA, str); } } }; @@ -17696,12 +17579,7 @@ webpackJsonp([0],[ exports.Buffer = Buffer; /***/ }), -/* 536 */, -/* 537 */, -/* 538 */, -/* 539 */, -/* 540 */, -/* 541 */ +/* 540 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -17761,7 +17639,7 @@ webpackJsonp([0],[ }; /***/ }), -/* 542 */ +/* 541 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -17773,7 +17651,7 @@ webpackJsonp([0],[ var _featureBase2 = _interopRequireDefault(_featureBase); - var _featureActivator = __webpack_require__(543); + var _featureActivator = __webpack_require__(542); var _featureActivator2 = _interopRequireDefault(_featureActivator); @@ -17783,13 +17661,13 @@ webpackJsonp([0],[ var _config2 = _interopRequireDefault(_config); - var _main = __webpack_require__(544); + var _main = __webpack_require__(543); var _main2 = _interopRequireDefault(_main); - var _actions2 = __webpack_require__(546); + var _actions2 = __webpack_require__(545); - var _settings = __webpack_require__(548); + var _settings = __webpack_require__(547); var _settings2 = _interopRequireDefault(_settings); @@ -17904,7 +17782,7 @@ webpackJsonp([0],[ exports.default = SettingsFeature; /***/ }), -/* 543 */ +/* 542 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -18016,7 +17894,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 544 */ +/* 543 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -18031,7 +17909,7 @@ webpackJsonp([0],[ var _reactRouter = __webpack_require__(164); - var _getters = __webpack_require__(545); + var _getters = __webpack_require__(544); var _getters2 = _interopRequireDefault(_getters); @@ -18132,7 +18010,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 545 */ +/* 544 */ /***/ (function(module, exports) { 'use strict'; @@ -18160,7 +18038,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 546 */ +/* 545 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -18173,11 +18051,11 @@ webpackJsonp([0],[ var _reactor2 = _interopRequireDefault(_reactor); - var _getters = __webpack_require__(545); + var _getters = __webpack_require__(544); var _getters2 = _interopRequireDefault(_getters); - var _actionTypes = __webpack_require__(547); + var _actionTypes = __webpack_require__(546); var AT = _interopRequireWildcard(_actionTypes); @@ -18220,7 +18098,7 @@ webpackJsonp([0],[ } /***/ }), -/* 547 */ +/* 546 */ /***/ (function(module, exports) { 'use strict'; @@ -18247,7 +18125,7 @@ webpackJsonp([0],[ var SET_RES_TO_DELETE = exports.SET_RES_TO_DELETE = 'SETTINGS_SET_RES_TO_DELETE'; /***/ }), -/* 548 */ +/* 547 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -18258,7 +18136,7 @@ webpackJsonp([0],[ var _react2 = _interopRequireDefault(_react); - var _connect = __webpack_require__(446); + var _connect = __webpack_require__(450); var _connect2 = _interopRequireDefault(_connect); @@ -18266,7 +18144,7 @@ webpackJsonp([0],[ var Messages = _interopRequireWildcard(_msgPage); - var _getters = __webpack_require__(545); + var _getters = __webpack_require__(544); var _getters2 = _interopRequireDefault(_getters); @@ -18343,7 +18221,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 549 */ +/* 548 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -18351,11 +18229,11 @@ webpackJsonp([0],[ exports.__esModule = true; exports.createSettings = exports.append = undefined; - var _featureSettingsAccount = __webpack_require__(550); + var _featureSettingsAccount = __webpack_require__(549); var _featureSettingsAccount2 = _interopRequireDefault(_featureSettingsAccount); - var _featureSettings = __webpack_require__(542); + var _featureSettings = __webpack_require__(541); var _featureSettings2 = _interopRequireDefault(_featureSettings); @@ -18393,26 +18271,26 @@ webpackJsonp([0],[ }; /***/ }), -/* 550 */ +/* 549 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; exports.__esModule = true; - var _flags = __webpack_require__(551); + var _flags = __webpack_require__(550); var featureFlags = _interopRequireWildcard(_flags); - var _featureSettings = __webpack_require__(542); + var _featureSettings = __webpack_require__(541); var _config = __webpack_require__(228); var _config2 = _interopRequireDefault(_config); - var _actions = __webpack_require__(546); + var _actions = __webpack_require__(545); - var _accountTab = __webpack_require__(552); + var _accountTab = __webpack_require__(551); var _accountTab2 = _interopRequireDefault(_accountTab); @@ -18491,7 +18369,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 551 */ +/* 550 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -18520,7 +18398,7 @@ webpackJsonp([0],[ */ /***/ }), -/* 552 */ +/* 551 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -18537,7 +18415,7 @@ webpackJsonp([0],[ var _react2 = _interopRequireDefault(_react); - var _connect = __webpack_require__(446); + var _connect = __webpack_require__(450); var _connect2 = _interopRequireDefault(_connect); @@ -18547,17 +18425,17 @@ webpackJsonp([0],[ var _enums = __webpack_require__(264); - var _alerts = __webpack_require__(553); + var _alerts = __webpack_require__(552); var Alerts = _interopRequireWildcard(_alerts); var _user = __webpack_require__(250); - var _actions = __webpack_require__(554); + var _actions = __webpack_require__(553); var actions = _interopRequireWildcard(_actions); - var _layout = __webpack_require__(454); + var _layout = __webpack_require__(458); var _layout2 = _interopRequireDefault(_layout); @@ -18859,7 +18737,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 553 */ +/* 552 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -18921,7 +18799,7 @@ webpackJsonp([0],[ }; /***/ }), -/* 554 */ +/* 553 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -19002,7 +18880,7 @@ webpackJsonp([0],[ } /***/ }), -/* 555 */ +/* 554 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -19023,15 +18901,15 @@ webpackJsonp([0],[ var _getters2 = _interopRequireDefault(_getters); - var _browser = __webpack_require__(556); + var _browser = __webpack_require__(555); var _actions = __webpack_require__(284); - var _navLeftBar = __webpack_require__(557); + var _navLeftBar = __webpack_require__(556); var _navLeftBar2 = _interopRequireDefault(_navLeftBar); - var _dataProvider = __webpack_require__(450); + var _dataProvider = __webpack_require__(454); var _dataProvider2 = _interopRequireDefault(_dataProvider); @@ -19100,7 +18978,7 @@ webpackJsonp([0],[ return _react2.default.createElement( 'div', { className: className }, - _react2.default.createElement(_dataProvider2.default, { onFetch: _actions.refresh, time: 4000 }), + _react2.default.createElement(_dataProvider2.default, { onFetch: _actions.refresh, time: 3000 }), this.props.CurrentSessionHost, _react2.default.createElement(_navLeftBar2.default, { router: router }), this.props.children @@ -19123,7 +19001,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 556 */ +/* 555 */ /***/ (function(module, exports) { 'use strict'; @@ -19157,7 +19035,7 @@ webpackJsonp([0],[ var platform = exports.platform = detectPlatform(); /***/ }), -/* 557 */ +/* 556 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -19177,7 +19055,7 @@ webpackJsonp([0],[ var UserFlux = _interopRequireWildcard(_user); - var _appStore = __webpack_require__(558); + var _appStore = __webpack_require__(557); var AppStore = _interopRequireWildcard(_appStore); @@ -19264,7 +19142,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 558 */ +/* 557 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -19359,7 +19237,7 @@ webpackJsonp([0],[ }); /***/ }), -/* 559 */ +/* 558 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -19368,23 +19246,23 @@ webpackJsonp([0],[ var _reactor2 = _interopRequireDefault(_reactor); - var _store = __webpack_require__(560); + var _store = __webpack_require__(559); var _store2 = _interopRequireDefault(_store); - var _store3 = __webpack_require__(434); + var _store3 = __webpack_require__(438); var _store4 = _interopRequireDefault(_store3); - var _appStore = __webpack_require__(558); + var _appStore = __webpack_require__(557); var _appStore2 = _interopRequireDefault(_appStore); - var _nodeStore = __webpack_require__(429); + var _nodeStore = __webpack_require__(433); var _nodeStore2 = _interopRequireDefault(_nodeStore); - var _store5 = __webpack_require__(561); + var _store5 = __webpack_require__(560); var _store6 = _interopRequireDefault(_store5); @@ -19421,19 +19299,19 @@ webpackJsonp([0],[ 'tlpt': _appStore2.default, 'tlpt_terminal': _store2.default, 'tlpt_nodes': _nodeStore2.default, - 'tlpt_user': __webpack_require__(562), - 'tlpt_user_invite': __webpack_require__(563), + 'tlpt_user': __webpack_require__(561), + 'tlpt_user_invite': __webpack_require__(562), 'tlpt_user_acl': _store4.default, - 'tlpt_sites': __webpack_require__(564), + 'tlpt_sites': __webpack_require__(563), 'tlpt_status': _statusStore2.default, - 'tlpt_sessions_events': __webpack_require__(565), - 'tlpt_sessions_archived': __webpack_require__(566), - 'tlpt_sessions_active': __webpack_require__(567), - 'tlpt_sessions_filter': __webpack_require__(568) + 'tlpt_sessions_events': __webpack_require__(564), + 'tlpt_sessions_archived': __webpack_require__(565), + 'tlpt_sessions_active': __webpack_require__(566), + 'tlpt_sessions_filter': __webpack_require__(567) }); /***/ }), -/* 560 */ +/* 559 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -19453,7 +19331,7 @@ webpackJsonp([0],[ var _localStorage2 = _interopRequireDefault(_localStorage); - var _actionTypes = __webpack_require__(431); + var _actionTypes = __webpack_require__(435); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -19509,8 +19387,6 @@ webpackJsonp([0],[ sid: this.sid, token: accessToken, ttyUrl: _config2.default.api.ttyWsAddr, - ttyEventUrl: _config2.default.api.ttyEventWsAddr, - ttyResizeUrl: _config2.default.api.ttyResizeUrl, cluster: this.siteId, getTarget: function getTarget() { return { server_id: server_id }; @@ -19565,7 +19441,7 @@ webpackJsonp([0],[ } /***/ }), -/* 561 */ +/* 560 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -19576,7 +19452,7 @@ webpackJsonp([0],[ var _immutable = __webpack_require__(253); - var _actionTypes = __webpack_require__(547); + var _actionTypes = __webpack_require__(546); var AT = _interopRequireWildcard(_actionTypes); @@ -19645,7 +19521,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 562 */ +/* 561 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -19719,7 +19595,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 563 */ +/* 562 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -19768,7 +19644,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 564 */ +/* 563 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -19818,7 +19694,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 565 */ +/* 564 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -19876,7 +19752,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 566 */ +/* 565 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -19889,7 +19765,7 @@ webpackJsonp([0],[ var _actionTypes = __webpack_require__(411); - var _enums = __webpack_require__(420); + var _enums = __webpack_require__(429); /* Copyright 2015 Gravitational, Inc. @@ -19974,7 +19850,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 567 */ +/* 566 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -20031,23 +19907,14 @@ webpackJsonp([0],[ }, initialize: function initialize() { this.on(_actionTypes.RECEIVE_ACTIVE_SESSIONS, receive); - this.on(_actionTypes.UPDATE_ACTIVE_SESSION, updateSession); } }); - function updateSession(state, _ref) { + function receive(state, _ref) { var siteId = _ref.siteId, json = _ref.json; - var rec = createSessionRec(siteId, json); - return rec.equals(state.get(rec.id)) ? state : state.set(rec.id, rec); - } - - function receive(state, _ref2) { - var siteId = _ref2.siteId, - json = _ref2.json; - var jsonArray = json || []; var newState = defaultState().withMutations(function (newState) { return jsonArray.filter(function (item) { @@ -20089,7 +19956,7 @@ webpackJsonp([0],[ module.exports = exports['default']; /***/ }), -/* 568 */ +/* 567 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -20118,7 +19985,7 @@ webpackJsonp([0],[ var moment = __webpack_require__(291); - var _require2 = __webpack_require__(449), + var _require2 = __webpack_require__(453), TLPT_STORED_SESSINS_FILTER_SET_RANGE = _require2.TLPT_STORED_SESSINS_FILTER_SET_RANGE; exports.default = Store({ diff --git a/web/dist/app/styles.861b1d995a5d2c365e09.js b/web/dist/app/styles.5395520144facce1d768.js similarity index 77% rename from web/dist/app/styles.861b1d995a5d2c365e09.js rename to web/dist/app/styles.5395520144facce1d768.js index 9f6cd9d0b6bc3..29f12117e5825 100644 --- a/web/dist/app/styles.861b1d995a5d2c365e09.js +++ b/web/dist/app/styles.5395520144facce1d768.js @@ -3,12 +3,12 @@ webpackJsonp([1],{ /***/ 0: /***/ (function(module, exports, __webpack_require__) { - module.exports = __webpack_require__(569); + module.exports = __webpack_require__(568); /***/ }), -/***/ 569: +/***/ 568: /***/ (function(module, exports) { // removed by extract-text-webpack-plugin diff --git a/web/dist/app/vendor.861b1d995a5d2c365e09.js b/web/dist/app/vendor.5395520144facce1d768.js similarity index 87% rename from web/dist/app/vendor.861b1d995a5d2c365e09.js rename to web/dist/app/vendor.5395520144facce1d768.js index 721036062fc4d..639b4a0117b6d 100644 --- a/web/dist/app/vendor.861b1d995a5d2c365e09.js +++ b/web/dist/app/vendor.5395520144facce1d768.js @@ -1,4 +1,4 @@ -!function(t){function e(n){if(r[n])return r[n].exports;var i=r[n]={exports:{},id:n,loaded:!1};return t[n].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var n=window.webpackJsonp;window.webpackJsonp=function(o,a){for(var s,u,l=0,c=[];l=11?t:t+12:"sore"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"siang":t<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";function e(t){return t%100===11||t%10!==1}function n(t,n,r,i){var o=t+" ";switch(r){case"s":return n||i?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return n?"mínúta":"mínútu";case"mm":return e(t)?o+(n||i?"mínútur":"mínútum"):n?o+"mínúta":o+"mínútu";case"hh":return e(t)?o+(n||i?"klukkustundir":"klukkustundum"):o+"klukkustund";case"d":return n?"dagur":i?"dag":"degi";case"dd":return e(t)?n?o+"dagar":o+(i?"daga":"dögum"):n?o+"dagur":o+(i?"dag":"degi");case"M":return n?"mánuður":i?"mánuð":"mánuði";case"MM":return e(t)?n?o+"mánuðir":o+(i?"mánuði":"mánuðum"):n?o+"mánuður":o+(i?"mánuð":"mánuði");case"y":return n||i?"ár":"ári";case"yy":return e(t)?o+(n||i?"ár":"árum"):o+(n||i?"ár":"ári")}}var r=t.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:n,m:n,mm:n,h:"klukkustund",hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return r})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(t){return(/^[0-9].+$/.test(t)?"tra":"in")+" "+t},past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 HH:mm dddd",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日 HH:mm dddd"},meridiemParse:/午前|午後/i,isPM:function(t){return"午後"===t},meridiem:function(t,e,n){return t<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";default:return t}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(t,e){return 12===t&&(t=0),"enjing"===e?t:"siyang"===e?t>=11?t:t+12:"sonten"===e||"ndalu"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"enjing":t<15?"siyang":t<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("ka",{months:{standalone:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),format:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(t){return/(წამი|წუთი|საათი|წელი)/.test(t)?t.replace(/ი$/,"ში"):t+"ში"},past:function(t){return/(წამი|წუთი|საათი|დღე|თვე)/.test(t)?t.replace(/(ი|ე)$/,"ის უკან"):/წელი/.test(t)?t.replace(/წელი$/,"წლის უკან"):void 0},s:"რამდენიმე წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(t){return 0===t?t:1===t?t+"-ლი":t<20||t<=100&&t%20===0||t%100===0?"მე-"+t:t+"-ე"},week:{dow:1,doy:7}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"},n=t.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(t){var n=t%10,r=t>=100?100:null;return t+(e[t]||e[n]||e[r])},week:{dow:1,doy:7}});return n})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysMin:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},week:{dow:1,doy:4}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},n={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"},r=t.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬ_ನವೆಂಬ_ಡಿಸೆಂಬ".split("_"),monthsParseExact:!0,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(t){return t.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(t,e){return 12===t&&(t=0),"ರಾತ್ರಿ"===e?t<4?t:t+12:"ಬೆಳಿಗ್ಗೆ"===e?t:"ಮಧ್ಯಾಹ್ನ"===e?t>=10?t:t+12:"ಸಂಜೆ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"ರಾತ್ರಿ":t<10?"ಬೆಳಿಗ್ಗೆ":t<17?"ಮಧ್ಯಾಹ್ನ":t<20?"ಸಂಜೆ":"ರಾತ್ರಿ"},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(t){return t+"ನೇ"},week:{dow:0,doy:6}});return r})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"일";case"M":return t+"월";case"w":case"W":return t+"주";default:return t}},meridiemParse:/오전|오후/,isPM:function(t){return"오후"===t},meridiem:function(t,e,n){return t<12?"오전":"오후"}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"},n=t.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кече саат] LT",lastWeek:"[Өткен аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(t){var n=t%10,r=t>=100?100:null;return t+(e[t]||e[n]||e[r])},week:{dow:1,doy:7}});return n})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";function e(t,e,n,r){var i={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return e?i[n][0]:i[n][1]}function n(t){var e=t.substr(0,t.indexOf(" "));return i(e)?"a "+t:"an "+t}function r(t){var e=t.substr(0,t.indexOf(" "));return i(e)?"viru "+t:"virun "+t}function i(t){if(t=parseInt(t,10),isNaN(t))return!1;if(t<0)return!0;if(t<10)return 4<=t&&t<=7;if(t<100){var e=t%10,n=t/10;return i(0===e?n:e)}if(t<1e4){for(;t>=10;)t/=10;return i(t)}return t/=1e3,i(t)}var o=t.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:n,past:r,s:"e puer Sekonnen",m:e,mm:"%d Minutten",h:e,hh:"%d Stonnen",d:e,dd:"%d Deeg",M:e,MM:"%d Méint",y:e,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return o})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(t){return"ຕອນແລງ"===t},meridiem:function(t,e,n){return t<12?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},dayOfMonthOrdinalParse:/(ທີ່)\d{1,2}/,ordinal:function(t){return"ທີ່"+t}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";function e(t,e,n,r){return e?"kelios sekundės":r?"kelių sekundžių":"kelias sekundes"}function n(t,e,n,r){return e?i(n)[0]:r?i(n)[1]:i(n)[2]}function r(t){return t%10===0||t>10&&t<20}function i(t){return a[t].split("_")}function o(t,e,o,a){var s=t+" ";return 1===t?s+n(t,e,o[0],a):e?s+(r(t)?i(o)[1]:i(o)[0]):a?s+i(o)[1]:s+(r(t)?i(o)[1]:i(o)[2])}var a={m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"},s=t.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:e,m:n,mm:o,h:n,hh:o,d:n,dd:o,M:n,MM:o,y:n,yy:o},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(t){return t+"-oji"},week:{dow:1,doy:4}});return s})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";function e(t,e,n){return n?e%10===1&&e%100!==11?t[2]:t[3]:e%10===1&&e%100!==11?t[0]:t[1]}function n(t,n,r){return t+" "+e(o[r],t,n)}function r(t,n,r){return e(o[r],t,n)}function i(t,e){return e?"dažas sekundes":"dažām sekundēm"}var o={m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")},a=t.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:i,m:r,mm:n,h:r,hh:n,d:r,dd:n,M:r,MM:n,y:r,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return a})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e={words:{m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var i=e.words[r];return 1===r.length?n?i[0]:i[1]:t+" "+e.correctGrammaticalCase(t,i)}},n=t.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var t=["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return t[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"dan",dd:e.translate,M:"mjesec",MM:e.translate,y:"godinu",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return n})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(t){var e=t%10,n=t%100;return 0===t?t+"-ев":0===n?t+"-ен":n>10&&n<20?t+"-ти":1===e?t+"-ви":2===e?t+"-ри":7===e||8===e?t+"-ми":t+"-ти"},week:{dow:1,doy:7}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:!0,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(t,e){return 12===t&&(t=0),"രാത്രി"===e&&t>=4||"ഉച്ച കഴിഞ്ഞ്"===e||"വൈകുന്നേരം"===e?t+12:t},meridiem:function(t,e,n){return t<4?"രാത്രി":t<12?"രാവിലെ":t<17?"ഉച്ച കഴിഞ്ഞ്":t<20?"വൈകുന്നേരം":"രാത്രി"}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";function e(t,e,n,r){var i="";if(e)switch(n){case"s":i="काही सेकंद";break;case"m":i="एक मिनिट";break;case"mm":i="%d मिनिटे";break;case"h":i="एक तास";break;case"hh":i="%d तास";break;case"d":i="एक दिवस";break;case"dd":i="%d दिवस";break;case"M":i="एक महिना";break;case"MM":i="%d महिने";break;case"y":i="एक वर्ष";break;case"yy":i="%d वर्षे"}else switch(n){case"s":i="काही सेकंदां";break;case"m":i="एका मिनिटा";break;case"mm":i="%d मिनिटां";break;case"h":i="एका तासा";break;case"hh":i="%d तासां";break;case"d":i="एका दिवसा";break;case"dd":i="%d दिवसां";break;case"M": i="एका महिन्या";break;case"MM":i="%d महिन्यां";break;case"y":i="एका वर्षा";break;case"yy":i="%d वर्षां"}return i.replace(/%d/i,t)}var n={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},r={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},i=t.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,function(t){return r[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return n[t]})},meridiemParse:/रात्री|सकाळी|दुपारी|सायंकाळी/,meridiemHour:function(t,e){return 12===t&&(t=0),"रात्री"===e?t<4?t:t+12:"सकाळी"===e?t:"दुपारी"===e?t>=10?t:t+12:"सायंकाळी"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"रात्री":t<10?"सकाळी":t<17?"दुपारी":t<20?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}});return i})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"tengahari"===e?t>=11?t:t+12:"petang"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"tengahari":t<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"tengahari"===e?t>=11?t:t+12:"petang"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"tengahari":t<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},n={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"},r=t.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(t){return t.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},week:{dow:1,doy:4}});return r})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},r=t.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(t,e){return 12===t&&(t=0),"राति"===e?t<4?t:t+12:"बिहान"===e?t:"दिउँसो"===e?t>=10?t:t+12:"साँझ"===e?t+12:void 0},meridiem:function(t,e,n){return t<3?"राति":t<12?"बिहान":t<16?"दिउँसो":t<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}});return r})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],i=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,o=t.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}});return o})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],i=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,o=t.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}});return o})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},n={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"},r=t.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(t){return t.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(t,e){return 12===t&&(t=0),"ਰਾਤ"===e?t<4?t:t+12:"ਸਵੇਰ"===e?t:"ਦੁਪਹਿਰ"===e?t>=10?t:t+12:"ਸ਼ਾਮ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"ਰਾਤ":t<10?"ਸਵੇਰ":t<17?"ਦੁਪਹਿਰ":t<20?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,doy:6}});return r})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";function e(t){return t%10<5&&t%10>1&&~~(t/10)%10!==1}function n(t,n,r){var i=t+" ";switch(r){case"m":return n?"minuta":"minutę";case"mm":return i+(e(t)?"minuty":"minut");case"h":return n?"godzina":"godzinę";case"hh":return i+(e(t)?"godziny":"godzin");case"MM":return i+(e(t)?"miesiące":"miesięcy");case"yy":return i+(e(t)?"lata":"lat")}}var r="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),i="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"),o=t.defineLocale("pl",{months:function(t,e){return t?""===e?"("+i[t.month()]+"|"+r[t.month()]+")":/D MMMM/.test(e)?i[t.month()]:r[t.month()]:r},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:n,mm:n,h:n,hh:n,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:n,y:"rok",yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return o})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("pt",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("pt-br",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";function e(t,e,n){var r={mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},i=" ";return(t%100>=20||t>=100&&t%100===0)&&(i=" de "),t+i+r[n]}var n=t.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:e,h:"o oră",hh:e,d:"o zi",dd:e,M:"o lună",MM:e,y:"un an",yy:e},week:{dow:1,doy:7}});return n})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";function e(t,e){var n=t.split("_");return e%10===1&&e%100!==11?n[0]:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?n[1]:n[2]}function n(t,n,r){var i={mm:n?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===r?n?"минута":"минуту":t+" "+e(i[r],+t)}var r=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i],i=t.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:r,longMonthsParse:r,shortMonthsParse:r,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(t){if(t.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В следующее] dddd [в] LT";case 1:case 2:case 4:return"[В следующий] dddd [в] LT";case 3:case 5:case 6:return"[В следующую] dddd [в] LT"}},lastWeek:function(t){if(t.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:n,mm:n,h:"час",hh:n,d:"день",dd:n,M:"месяц",MM:n,y:"год",yy:n},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(t){return/^(дня|вечера)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночи":t<12?"утра":t<17?"дня":"вечера"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":return t+"-й";case"D":return t+"-го";case"w":case"W":return t+"-я";default:return t}},week:{dow:1,doy:4}});return i})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=["جنوري","فيبروري","مارچ","اپريل","مئي","جون","جولاءِ","آگسٽ","سيپٽمبر","آڪٽوبر","نومبر","ڊسمبر"],n=["آچر","سومر","اڱارو","اربع","خميس","جمع","ڇنڇر"],r=t.defineLocale("sd",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(t){return"شام"===t},meridiem:function(t,e,n){return t<12?"صبح":"شام"},calendar:{sameDay:"[اڄ] LT",nextDay:"[سڀاڻي] LT",nextWeek:"dddd [اڳين هفتي تي] LT",lastDay:"[ڪالهه] LT",lastWeek:"[گزريل هفتي] dddd [تي] LT",sameElse:"L"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:1,doy:4}});return r})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},dayOfMonthOrdinalParse:/\d{1,2} වැනි/,ordinal:function(t){return t+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(t){return"ප.ව."===t||"පස් වරු"===t},meridiem:function(t,e,n){return t>11?n?"ප.ව.":"පස් වරු":n?"පෙ.ව.":"පෙර වරු"}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";function e(t){return t>1&&t<5}function n(t,n,r,i){var o=t+" ";switch(r){case"s":return n||i?"pár sekúnd":"pár sekundami";case"m":return n?"minúta":i?"minútu":"minútou";case"mm":return n||i?o+(e(t)?"minúty":"minút"):o+"minútami";case"h":return n?"hodina":i?"hodinu":"hodinou";case"hh":return n||i?o+(e(t)?"hodiny":"hodín"):o+"hodinami";case"d":return n||i?"deň":"dňom";case"dd":return n||i?o+(e(t)?"dni":"dní"):o+"dňami";case"M":return n||i?"mesiac":"mesiacom";case"MM":return n||i?o+(e(t)?"mesiace":"mesiacov"):o+"mesiacmi";case"y":return n||i?"rok":"rokom";case"yy":return n||i?o+(e(t)?"roky":"rokov"):o+"rokmi"}}var r="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),i="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_"),o=t.defineLocale("sk",{months:r,monthsShort:i,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return o})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";function e(t,e,n,r){var i=t+" ";switch(n){case"s":return e||r?"nekaj sekund":"nekaj sekundami";case"m":return e?"ena minuta":"eno minuto";case"mm":return i+=1===t?e?"minuta":"minuto":2===t?e||r?"minuti":"minutama":t<5?e||r?"minute":"minutami":e||r?"minut":"minutami";case"h":return e?"ena ura":"eno uro";case"hh":return i+=1===t?e?"ura":"uro":2===t?e||r?"uri":"urama":t<5?e||r?"ure":"urami":e||r?"ur":"urami";case"d":return e||r?"en dan":"enim dnem";case"dd":return i+=1===t?e||r?"dan":"dnem":2===t?e||r?"dni":"dnevoma":e||r?"dni":"dnevi";case"M":return e||r?"en mesec":"enim mesecem";case"MM":return i+=1===t?e||r?"mesec":"mesecem":2===t?e||r?"meseca":"mesecema":t<5?e||r?"mesece":"meseci":e||r?"mesecev":"meseci";case"y":return e||r?"eno leto":"enim letom";case"yy":return i+=1===t?e||r?"leto":"letom":2===t?e||r?"leti":"letoma":t<5?e||r?"leta":"leti":e||r?"let":"leti"}}var n=t.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return n})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(t){return"M"===t.charAt(0)},meridiem:function(t,e,n){return t<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e={words:{m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(t,e){ return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var i=e.words[r];return 1===r.length?n?i[0]:i[1]:t+" "+e.correctGrammaticalCase(t,i)}},n=t.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var t=["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return t[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"dan",dd:e.translate,M:"mesec",MM:e.translate,y:"godinu",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return n})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e={words:{m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var i=e.words[r];return 1===r.length?n?i[0]:i[1]:t+" "+e.correctGrammaticalCase(t,i)}},n=t.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){var t=["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"];return t[this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"дан",dd:e.translate,M:"месец",MM:e.translate,y:"годину",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return n})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(t,e,n){return t<11?"ekuseni":t<15?"emini":t<19?"entsambama":"ebusuku"},meridiemHour:function(t,e){return 12===t&&(t=0),"ekuseni"===e?t:"emini"===e?t>=11?t:t+12:"entsambama"===e||"ebusuku"===e?0===t?0:t+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(e|a)/,ordinal:function(t){var e=t%10,n=1===~~(t%100/10)?"e":1===e?"a":2===e?"a":"e";return t+n},week:{dow:1,doy:4}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},n={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"},r=t.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(t){return t+"வது"},preparse:function(t){return t.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(t,e,n){return t<2?" யாமம்":t<6?" வைகறை":t<10?" காலை":t<14?" நண்பகல்":t<18?" எற்பாடு":t<22?" மாலை":" யாமம்"},meridiemHour:function(t,e){return 12===t&&(t=0),"யாமம்"===e?t<2?t:t+12:"வைகறை"===e||"காலை"===e?t:"நண்பகல்"===e&&t>=10?t:t+12},week:{dow:0,doy:6}});return r})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(t,e){return 12===t&&(t=0),"రాత్రి"===e?t<4?t:t+12:"ఉదయం"===e?t:"మధ్యాహ్నం"===e?t>=10?t:t+12:"సాయంత్రం"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"రాత్రి":t<10?"ఉదయం":t<17?"మధ్యాహ్నం":t<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,doy:6}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sext_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Sex_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",m:"minutu ida",mm:"minutus %d",h:"horas ida",hh:"horas %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10,n=1===~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n},week:{dow:1,doy:4}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(t){return"หลังเที่ยง"===t},meridiem:function(t,e,n){return t<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";function e(t){var e=t;return e=t.indexOf("jaj")!==-1?e.slice(0,-3)+"leS":t.indexOf("jar")!==-1?e.slice(0,-3)+"waQ":t.indexOf("DIS")!==-1?e.slice(0,-3)+"nem":e+" pIq"}function n(t){var e=t;return e=t.indexOf("jaj")!==-1?e.slice(0,-3)+"Hu’":t.indexOf("jar")!==-1?e.slice(0,-3)+"wen":t.indexOf("DIS")!==-1?e.slice(0,-3)+"ben":e+" ret"}function r(t,e,n,r){var o=i(t);switch(n){case"mm":return o+" tup";case"hh":return o+" rep";case"dd":return o+" jaj";case"MM":return o+" jar";case"yy":return o+" DIS"}}function i(t){var e=Math.floor(t%1e3/100),n=Math.floor(t%100/10),r=t%10,i="";return e>0&&(i+=o[e]+"vatlh"),n>0&&(i+=(""!==i?" ":"")+o[n]+"maH"),r>0&&(i+=(""!==i?" ":"")+o[r]),""===i?"pagh":i}var o="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_"),a=t.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:e,past:n,s:"puS lup",m:"wa’ tup",mm:r,h:"wa’ rep",hh:r,d:"wa’ jaj",dd:r,M:"wa’ jar",MM:r,y:"wa’ DIS",yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return a})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"},n=t.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},dayOfMonthOrdinalParse:/\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,ordinal:function(t){if(0===t)return t+"'ıncı";var n=t%10,r=t%100-n,i=t>=100?100:null;return t+(e[n]||e[r]||e[i])},week:{dow:1,doy:7}});return n})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";function e(t,e,n,r){var i={s:["viensas secunds","'iensas secunds"],m:["'n míut","'iens míut"],mm:[t+" míuts",""+t+" míuts"],h:["'n þora","'iensa þora"],hh:[t+" þoras",""+t+" þoras"],d:["'n ziua","'iensa ziua"],dd:[t+" ziuas",""+t+" ziuas"],M:["'n mes","'iens mes"],MM:[t+" mesen",""+t+" mesen"],y:["'n ar","'iens ar"],yy:[t+" ars",""+t+" ars"]};return r?i[n][0]:e?i[n][0]:i[n][1]}var n=t.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(t){return"d'o"===t.toLowerCase()},meridiem:function(t,e,n){return t>11?n?"d'o":"D'O":n?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return n})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";function e(t,e){var n=t.split("_");return e%10===1&&e%100!==11?n[0]:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?n[1]:n[2]}function n(t,n,r){var i={mm:n?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:n?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===r?n?"хвилина":"хвилину":"h"===r?n?"година":"годину":t+" "+e(i[r],+t)}function r(t,e){var n={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};if(!t)return n.nominative;var r=/(\[[ВвУу]\]) ?dddd/.test(e)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(e)?"genitive":"nominative";return n[r][t.day()]}function i(t){return function(){return t+"о"+(11===this.hours()?"б":"")+"] LT"}}var o=t.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:r,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:i("[Сьогодні "),nextDay:i("[Завтра "),lastDay:i("[Вчора "),nextWeek:i("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return i("[Минулої] dddd [").call(this);case 1:case 2:case 4:return i("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:n,mm:n,h:"годину",hh:n,d:"день",dd:n,M:"місяць",MM:n,y:"рік",yy:n},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(t){return/^(дня|вечора)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночі":t<12?"ранку":t<17?"дня":"вечора"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":case"w":case"W":return t+"-й";case"D":return t+"-го";default:return t}},week:{dow:1,doy:7}});return o})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],n=["اتوار","پیر","منگل","بدھ","جمعرات","جمعہ","ہفتہ"],r=t.defineLocale("ur",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(t){return"شام"===t},meridiem:function(t,e,n){return t<12?"صبح":"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:1,doy:4}});return r})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(t){return/^ch$/i.test(t)},meridiem:function(t,e,n){return t<12?n?"sa":"SA":n?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,n=1===~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n},week:{dow:1,doy:4}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah点mm分",LLLL:"YYYY年MMMD日ddddAh点mm分",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"下午"===e||"晚上"===e?t+12:t>=11?t:t+12},meridiem:function(t,e,n){var r=100*t+e;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"周";default:return t}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict";var e=t.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"中午"===e?t>=11?t:t+12:"下午"===e||"晚上"===e?t+12:void 0},meridiem:function(t,e,n){var r=100*t+e;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"週";default:return t}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}});return e})},function(t,e,n){!function(t,e){e(n(291))}(this,function(t){"use strict"; -var e=t.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"中午"===e?t>=11?t:t+12:"下午"===e||"晚上"===e?t+12:void 0},meridiem:function(t,e,n){var r=100*t+e;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"週";default:return t}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}});return e})},,,,,,,,,,,,function(t,e){!function(n){if("object"==typeof e&&"undefined"!=typeof t)t.exports=n();else if("function"==typeof define&&define.amd)define([],n);else{var r;r="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,r.Terminal=n()}}(function(){var t;return function t(e,n,r){function i(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(o)return o(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var c=n[a]={exports:{}};e[a][0].call(c.exports,function(t){var n=e[a][1][t];return i(n?n:t)},c,c.exports,t,e,n,r)}return n[a].exports}for(var o="function"==typeof require&&require,a=0;a0&&t.terminal.handler(r)}},0)},t.prototype.updateCompositionElements=function(t){var e=this;if(this.isComposing){var n=this.terminal.element.querySelector(".terminal-cursor");if(n){var r=this.terminal.element.querySelector(".xterm-rows"),i=r.offsetTop+n.offsetTop;this.compositionView.style.left=n.offsetLeft+"px",this.compositionView.style.top=i+"px",this.compositionView.style.height=n.offsetHeight+"px",this.compositionView.style.lineHeight=n.offsetHeight+"px";var o=this.compositionView.getBoundingClientRect();this.textarea.style.left=n.offsetLeft+"px",this.textarea.style.top=i+"px",this.textarea.style.width=o.width+"px",this.textarea.style.height=o.height+"px",this.textarea.style.lineHeight=o.height+"px"}t||setTimeout(function(){return e.updateCompositionElements(!0)},0)}},t.prototype.clearTextareaPosition=function(){this.textarea.style.left="",this.textarea.style.top=""},t}();n.CompositionHelper=r},{}],3:[function(t,e,n){"use strict";var r;!function(t){t.NUL="\0",t.SOH="",t.STX="",t.ETX="",t.EOT="",t.ENQ="",t.ACK="",t.BEL="",t.BS="\b",t.HT="\t",t.LF="\n",t.VT="\v",t.FF="\f",t.CR="\r",t.SO="",t.SI="",t.DLE="",t.DC1="",t.DC2="",t.DC3="",t.DC4="",t.NAK="",t.SYN="",t.ETB="",t.CAN="",t.EM="",t.SUB="",t.ESC="",t.FS="",t.GS="",t.RS="",t.US="",t.SP=" ",t.DEL=""}(r=n.C0||(n.C0={}))},{}],4:[function(t,e,n){"use strict";var r=function(){function t(){this._events=this._events||{}}return t.prototype.on=function(t,e){this._events[t]=this._events[t]||[],this._events[t].push(e)},t.prototype.off=function(t,e){if(this._events[t])for(var n=this._events[t],r=n.length;r--;)if(n[r]===e||n[r].listener===e)return void n.splice(r,1)},t.prototype.removeAllListeners=function(t){this._events[t]&&delete this._events[t]},t.prototype.once=function(t,e){function n(){var r=Array.prototype.slice.call(arguments);return this.off(t,n),e.apply(this,r)}return n.listener=e,this.on(t,n)},t.prototype.emit=function(t){if(this._events[t])for(var e=Array.prototype.slice.call(arguments,1),n=this._events[t],r=0;r=" "){var n=a(e);this._terminal.charset&&this._terminal.charset[t]&&(t=this._terminal.charset[t]);var r=this._terminal.y+this._terminal.ybase;if(!n&&this._terminal.x)return void(this._terminal.lines.get(r)[this._terminal.x-1]&&(this._terminal.lines.get(r)[this._terminal.x-1][2]?this._terminal.lines.get(r)[this._terminal.x-1][1]+=t:this._terminal.lines.get(r)[this._terminal.x-2]&&(this._terminal.lines.get(r)[this._terminal.x-2][1]+=t),this._terminal.updateRange(this._terminal.y)));if(this._terminal.x+n-1>=this._terminal.cols)if(this._terminal.wraparoundMode)this._terminal.x=0,this._terminal.y++,this._terminal.y>this._terminal.scrollBottom&&(this._terminal.y--,this._terminal.scroll());else if(2===n)return;if(r=this._terminal.y+this._terminal.ybase,this._terminal.insertMode)for(var i=0;ithis._terminal.scrollBottom&&(this._terminal.y--,this._terminal.scroll()),this._terminal.x>=this._terminal.cols&&this._terminal.x--},t.prototype.carriageReturn=function(){this._terminal.x=0},t.prototype.backspace=function(){this._terminal.x>0&&this._terminal.x--},t.prototype.tab=function(){this._terminal.x=this._terminal.nextStop()},t.prototype.shiftOut=function(){this._terminal.setgLevel(1)},t.prototype.shiftIn=function(){this._terminal.setgLevel(0)},t.prototype.insertChars=function(t){var e,n,r,i;for(e=t[0],e<1&&(e=1),n=this._terminal.y+this._terminal.ybase,r=this._terminal.x,i=[this._terminal.eraseAttr()," ",1];e--&&r=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1),this._terminal.x>=this._terminal.cols&&this._terminal.x--},t.prototype.cursorForward=function(t){var e=t[0];e<1&&(e=1),this._terminal.x+=e,this._terminal.x>=this._terminal.cols&&(this._terminal.x=this._terminal.cols-1)},t.prototype.cursorBackward=function(t){var e=t[0];e<1&&(e=1),this._terminal.x>=this._terminal.cols&&this._terminal.x--,this._terminal.x-=e,this._terminal.x<0&&(this._terminal.x=0)},t.prototype.cursorNextLine=function(t){var e=t[0];e<1&&(e=1),this._terminal.y+=e,this._terminal.y>=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1),this._terminal.x=0},t.prototype.cursorPrecedingLine=function(t){var e=t[0];e<1&&(e=1),this._terminal.y-=e,this._terminal.y<0&&(this._terminal.y=0),this._terminal.x=0},t.prototype.cursorCharAbsolute=function(t){var e=t[0];e<1&&(e=1),this._terminal.x=e-1},t.prototype.cursorPosition=function(t){var e,n;e=t[0]-1,n=t.length>=2?t[1]-1:0,e<0?e=0:e>=this._terminal.rows&&(e=this._terminal.rows-1),n<0?n=0:n>=this._terminal.cols&&(n=this._terminal.cols-1),this._terminal.x=n,this._terminal.y=e},t.prototype.cursorForwardTab=function(t){for(var e=t[0]||1;e--;)this._terminal.x=this._terminal.nextStop()},t.prototype.eraseInDisplay=function(t){var e;switch(t[0]){case 0:for(this._terminal.eraseRight(this._terminal.x,this._terminal.y),e=this._terminal.y+1;e=this._terminal.cols&&(this._terminal.x=this._terminal.cols-1)},t.prototype.HPositionRelative=function(t){var e=t[0];e<1&&(e=1),this._terminal.x+=e,this._terminal.x>=this._terminal.cols&&(this._terminal.x=this._terminal.cols-1)},t.prototype.repeatPrecedingCharacter=function(t){for(var e=t[0]||1,n=this._terminal.lines.get(this._terminal.ybase+this._terminal.y),r=n[this._terminal.x-1]||[this._terminal.defAttr," ",1];e--;)n[this._terminal.x++]=r},t.prototype.sendDeviceAttributes=function(t){t[0]>0||(this._terminal.prefix?">"===this._terminal.prefix&&(this._terminal.is("xterm")?this._terminal.send(r.C0.ESC+"[>0;276;0c"):this._terminal.is("rxvt-unicode")?this._terminal.send(r.C0.ESC+"[>85;95;0c"):this._terminal.is("linux")?this._terminal.send(t[0]+"c"):this._terminal.is("screen")&&this._terminal.send(r.C0.ESC+"[>83;40003;0c")):this._terminal.is("xterm")||this._terminal.is("rxvt-unicode")||this._terminal.is("screen")?this._terminal.send(r.C0.ESC+"[?1;2c"):this._terminal.is("linux")&&this._terminal.send(r.C0.ESC+"[?6c"))},t.prototype.linePosAbsolute=function(t){var e=t[0];e<1&&(e=1),this._terminal.y=e-1,this._terminal.y>=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1)},t.prototype.VPositionRelative=function(t){var e=t[0];e<1&&(e=1),this._terminal.y+=e,this._terminal.y>=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1),this._terminal.x>=this._terminal.cols&&this._terminal.x--},t.prototype.HVPosition=function(t){t[0]<1&&(t[0]=1),t[1]<1&&(t[1]=1),this._terminal.y=t[0]-1,this._terminal.y>=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1),this._terminal.x=t[1]-1,this._terminal.x>=this._terminal.cols&&(this._terminal.x=this._terminal.cols-1)},t.prototype.tabClear=function(t){var e=t[0];e<=0?delete this._terminal.tabs[this._terminal.x]:3===e&&(this._terminal.tabs={})},t.prototype.setMode=function(t){if(t.length>1)for(var e=0;e1e3,this._terminal.mouseEvents=!0,this._terminal.element.style.cursor="default",this._terminal.log("Binding to mouse events.");break;case 1004:this._terminal.sendFocus=!0;break;case 1005:this._terminal.utfMouse=!0;break;case 1006:this._terminal.sgrMouse=!0;break;case 1015:this._terminal.urxvtMouse=!0;break;case 25:this._terminal.cursorHidden=!1;break;case 1049:case 47:case 1047:if(!this._terminal.normal){var n={lines:this._terminal.lines,ybase:this._terminal.ybase,ydisp:this._terminal.ydisp,x:this._terminal.x,y:this._terminal.y,scrollTop:this._terminal.scrollTop,scrollBottom:this._terminal.scrollBottom,tabs:this._terminal.tabs};this._terminal.reset(),this._terminal.viewport.syncScrollArea(),this._terminal.normal=n,this._terminal.showCursor()}}}else switch(t[0]){case 4:this._terminal.insertMode=!0;break;case 20:}},t.prototype.resetMode=function(t){if(t.length>1)for(var e=0;e>18,o=this._terminal.curAttr>>9&511,a=511&this._terminal.curAttr;r=30&&e<=37?o=e-30:e>=40&&e<=47?a=e-40:e>=90&&e<=97?(e+=8,o=e-90):e>=100&&e<=107?(e+=8,a=e-100):0===e?(i=this._terminal.defAttr>>18,o=this._terminal.defAttr>>9&511,a=511&this._terminal.defAttr):1===e?i|=1:4===e?i|=2:5===e?i|=4:7===e?i|=8:8===e?i|=16:22===e?i&=-2:24===e?i&=-3:25===e?i&=-5:27===e?i&=-9:28===e?i&=-17:39===e?o=this._terminal.defAttr>>9&511:49===e?a=511&this._terminal.defAttr:38===e?2===t[r+1]?(r+=2,o=this._terminal.matchColor(255&t[r],255&t[r+1],255&t[r+2]),o===-1&&(o=511),r+=2):5===t[r+1]&&(r+=2,e=255&t[r],o=e):48===e?2===t[r+1]?(r+=2,a=this._terminal.matchColor(255&t[r],255&t[r+1],255&t[r+2]),a===-1&&(a=511),r+=2):5===t[r+1]&&(r+=2,e=255&t[r],a=e):100===e?(o=this._terminal.defAttr>>9&511,a=511&this._terminal.defAttr):this._terminal.error("Unknown SGR attribute: %d.",e);this._terminal.curAttr=i<<18|o<<9|a},t.prototype.deviceStatus=function(t){if(this._terminal.prefix){if("?"===this._terminal.prefix)switch(t[0]){case 6:this._terminal.send(r.C0.ESC+"[?"+(this._terminal.y+1)+";"+(this._terminal.x+1)+"R");break;case 15:break;case 25:break;case 26:break;case 53:}}else switch(t[0]){case 5:this._terminal.send(r.C0.ESC+"[0n");break;case 6:this._terminal.send(r.C0.ESC+"["+(this._terminal.y+1)+";"+(this._terminal.x+1)+"R")}},t.prototype.softReset=function(t){this._terminal.cursorHidden=!1,this._terminal.insertMode=!1,this._terminal.originMode=!1,this._terminal.wraparoundMode=!0,this._terminal.applicationKeypad=!1,this._terminal.viewport.syncScrollArea(),this._terminal.applicationCursor=!1,this._terminal.scrollTop=0,this._terminal.scrollBottom=this._terminal.rows-1,this._terminal.curAttr=this._terminal.defAttr,this._terminal.x=this._terminal.y=0,this._terminal.charset=null,this._terminal.glevel=0,this._terminal.charsets=[null]},t.prototype.setCursorStyle=function(t){var e=t[0]<1?1:t[0];switch(e){case 1:case 2:this._terminal.setOption("cursorStyle","block");break;case 3:case 4:this._terminal.setOption("cursorStyle","underline");break;case 5:case 6:this._terminal.setOption("cursorStyle","bar")}var n=e%2===1;this._terminal.setOption("cursorBlink",n)},t.prototype.setScrollRegion=function(t){this._terminal.prefix||(this._terminal.scrollTop=(t[0]||1)-1,this._terminal.scrollBottom=(t[1]&&t[1]<=this._terminal.rows?t[1]:this._terminal.rows)-1,this._terminal.x=0,this._terminal.y=0)},t.prototype.saveCursor=function(t){this._terminal.savedX=this._terminal.x,this._terminal.savedY=this._terminal.y},t.prototype.restoreCursor=function(t){this._terminal.x=this._terminal.savedX||0,this._terminal.y=this._terminal.savedY||0},t}();n.InputHandler=o;var a=function(t){function e(t){var e,n=0,r=i.length-1;if(ti[r][1])return!1;for(;r>=n;)if(e=Math.floor((n+r)/2),t>i[e][1])n=e+1;else{if(!(t=127&&n<160?t.control:e(n)?0:r(n)?2:1}function r(t){return t>=4352&&(t<=4447||9001===t||9002===t||t>=11904&&t<=42191&&12351!==t||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65135||t>=65280&&t<=65376||t>=65504&&t<=65510||t>=131072&&t<=196605||t>=196608&&t<=262141)}var i=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531],[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]];return n}({nul:0,control:0})},{"./Charsets":1,"./EscapeSequences":3}],6:[function(t,e,n){"use strict";var r="xterm-invalid-link",i="(https?:\\/\\/)",o="[\\da-z\\.-]+",a="[^\\da-z\\.-]+",s="("+o+")",u="([a-z\\.]{2,6})",l="((\\d{1,3}\\.){3}\\d{1,3})",c="(localhost)",d="(:\\d{1,5})",h="(("+s+"\\."+u+")|"+l+"|"+c+")"+d+"?",f="(\\/[\\/\\w\\.\\-%]*)*",p="[0-9\\w\\[\\]\\(\\)\\/\\?\\!#@$%&'*+,:;\\=\\.\\-]*",m="(\\?"+p+")?",_="(#"+p+")?",y="[^\\/\\w\\.\\-%]+",v=h+f+m+_,g="(?:^|"+a+")(",M=")($|"+y+")",b=new RegExp(g+i+v+M),w=0,L=function(){function t(t,e){this._nextLinkMatcherId=w,this._document=t,this._rows=e,this._rowTimeoutIds=[],this._linkMatchers=[],this.registerLinkMatcher(b,null,{matchIndex:1})}return t.prototype.linkifyRow=function(e){var n=this._rowTimeoutIds[e];n&&clearTimeout(n),this._rowTimeoutIds[e]=setTimeout(this._linkifyRow.bind(this,e),t.TIME_BEFORE_LINKIFY)},t.prototype.attachHypertextLinkHandler=function(t){this._linkMatchers[w].handler=t},t.prototype.registerLinkMatcher=function(t,e,n){if(void 0===n&&(n={}),this._nextLinkMatcherId!==w&&!e)throw new Error("handler must be defined");var r={id:this._nextLinkMatcherId++,regex:t,handler:e,matchIndex:n.matchIndex,validationCallback:n.validationCallback,priority:n.priority||0};return this._addLinkMatcherToList(r),r.id},t.prototype._addLinkMatcherToList=function(t){if(0===this._linkMatchers.length)return void this._linkMatchers.push(t);for(var e=this._linkMatchers.length-1;e>=0;e--)if(t.priority<=this._linkMatchers[e].priority)return void this._linkMatchers.splice(e+1,0,t);this._linkMatchers.splice(0,0,t)},t.prototype.deregisterLinkMatcher=function(t){for(var e=1;e=0){var u=this._createAnchorElement(e,n,r);if(a.textContent.length===e.length)if(3===a.nodeType)this._replaceNode(a,u);else{var l=a;if("A"===l.nodeName)return;l.innerHTML="",l.appendChild(u)}else this._replaceNodeSubstringWithNode(a,u,e,s);return u}}},t.prototype._findLinkMatch=function(t,e,n){var r=t.match(e);return r&&0!==r.length?r["number"!=typeof n?0:n]:null},t.prototype._createAnchorElement=function(t,e,n){var i=this._document.createElement("a");return i.textContent=t,n?(i.href=t,i.target="_blank",i.addEventListener("click",function(n){if(e)return e(n,t)})):i.addEventListener("click",function(n){if(!i.classList.contains(r))return e(n,t)}),i},t.prototype._replaceNode=function(t){for(var e=[],n=1;n"]=function(t){return t.setPrefix(">")},s["!"]=function(t){return t.setPrefix("!")},s[0]=function(t){return t.setParam(10*t.getParam())},s[1]=function(t){return t.setParam(10*t.getParam()+1)},s[2]=function(t){return t.setParam(10*t.getParam()+2)},s[3]=function(t){return t.setParam(10*t.getParam()+3)},s[4]=function(t){return t.setParam(10*t.getParam()+4)},s[5]=function(t){return t.setParam(10*t.getParam()+5)},s[6]=function(t){return t.setParam(10*t.getParam()+6)},s[7]=function(t){return t.setParam(10*t.getParam()+7)},s[8]=function(t){return t.setParam(10*t.getParam()+8)},s[9]=function(t){return t.setParam(10*t.getParam()+9)},s.$=function(t){return t.setPostfix("$")},s['"']=function(t){return t.setPostfix('"')},s[" "]=function(t){return t.setPostfix(" ")},s["'"]=function(t){return t.setPostfix("'")},s[";"]=function(t){return t.finalizeParam()},s[r.C0.CAN]=function(t){return t.setState(l.NORMAL)};var u={};u["@"]=function(t,e,n){return t.insertChars(e)},u.A=function(t,e,n){return t.cursorUp(e)},u.B=function(t,e,n){return t.cursorDown(e)},u.C=function(t,e,n){return t.cursorForward(e)},u.D=function(t,e,n){return t.cursorBackward(e)},u.E=function(t,e,n){return t.cursorNextLine(e)},u.F=function(t,e,n){return t.cursorPrecedingLine(e)},u.G=function(t,e,n){return t.cursorCharAbsolute(e)},u.H=function(t,e,n){return t.cursorPosition(e)},u.I=function(t,e,n){return t.cursorForwardTab(e)},u.J=function(t,e,n){return t.eraseInDisplay(e)},u.K=function(t,e,n){return t.eraseInLine(e)},u.L=function(t,e,n){return t.insertLines(e)},u.M=function(t,e,n){return t.deleteLines(e)},u.P=function(t,e,n){return t.deleteChars(e)},u.S=function(t,e,n){return t.scrollUp(e)},u.T=function(t,e,n){e.length<2&&!n&&t.scrollDown(e)},u.X=function(t,e,n){return t.eraseChars(e)},u.Z=function(t,e,n){return t.cursorBackwardTab(e)},u["`"]=function(t,e,n){return t.charPosAbsolute(e)},u.a=function(t,e,n){return t.HPositionRelative(e)},u.b=function(t,e,n){return t.repeatPrecedingCharacter(e)},u.c=function(t,e,n){return t.sendDeviceAttributes(e)},u.d=function(t,e,n){return t.linePosAbsolute(e); +var e=t.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"中午"===e?t>=11?t:t+12:"下午"===e||"晚上"===e?t+12:void 0},meridiem:function(t,e,n){var r=100*t+e;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"週";default:return t}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}});return e})},,,,,,,,,,,function(t,e){!function(n){if("object"==typeof e&&"undefined"!=typeof t)t.exports=n();else if("function"==typeof define&&define.amd)define([],n);else{var r;r="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,r.Terminal=n()}}(function(){var t;return function t(e,n,r){function i(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(o)return o(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var c=n[a]={exports:{}};e[a][0].call(c.exports,function(t){var n=e[a][1][t];return i(n?n:t)},c,c.exports,t,e,n,r)}return n[a].exports}for(var o="function"==typeof require&&require,a=0;a0&&t.terminal.handler(r)}},0)},t.prototype.updateCompositionElements=function(t){var e=this;if(this.isComposing){var n=this.terminal.element.querySelector(".terminal-cursor");if(n){var r=this.terminal.element.querySelector(".xterm-rows"),i=r.offsetTop+n.offsetTop;this.compositionView.style.left=n.offsetLeft+"px",this.compositionView.style.top=i+"px",this.compositionView.style.height=n.offsetHeight+"px",this.compositionView.style.lineHeight=n.offsetHeight+"px";var o=this.compositionView.getBoundingClientRect();this.textarea.style.left=n.offsetLeft+"px",this.textarea.style.top=i+"px",this.textarea.style.width=o.width+"px",this.textarea.style.height=o.height+"px",this.textarea.style.lineHeight=o.height+"px"}t||setTimeout(function(){return e.updateCompositionElements(!0)},0)}},t.prototype.clearTextareaPosition=function(){this.textarea.style.left="",this.textarea.style.top=""},t}();n.CompositionHelper=r},{}],3:[function(t,e,n){"use strict";var r;!function(t){t.NUL="\0",t.SOH="",t.STX="",t.ETX="",t.EOT="",t.ENQ="",t.ACK="",t.BEL="",t.BS="\b",t.HT="\t",t.LF="\n",t.VT="\v",t.FF="\f",t.CR="\r",t.SO="",t.SI="",t.DLE="",t.DC1="",t.DC2="",t.DC3="",t.DC4="",t.NAK="",t.SYN="",t.ETB="",t.CAN="",t.EM="",t.SUB="",t.ESC="",t.FS="",t.GS="",t.RS="",t.US="",t.SP=" ",t.DEL=""}(r=n.C0||(n.C0={}))},{}],4:[function(t,e,n){"use strict";var r=function(){function t(){this._events=this._events||{}}return t.prototype.on=function(t,e){this._events[t]=this._events[t]||[],this._events[t].push(e)},t.prototype.off=function(t,e){if(this._events[t])for(var n=this._events[t],r=n.length;r--;)if(n[r]===e||n[r].listener===e)return void n.splice(r,1)},t.prototype.removeAllListeners=function(t){this._events[t]&&delete this._events[t]},t.prototype.once=function(t,e){function n(){var r=Array.prototype.slice.call(arguments);return this.off(t,n),e.apply(this,r)}return n.listener=e,this.on(t,n)},t.prototype.emit=function(t){if(this._events[t])for(var e=Array.prototype.slice.call(arguments,1),n=this._events[t],r=0;r=" "){var n=a(e);this._terminal.charset&&this._terminal.charset[t]&&(t=this._terminal.charset[t]);var r=this._terminal.y+this._terminal.ybase;if(!n&&this._terminal.x)return void(this._terminal.lines.get(r)[this._terminal.x-1]&&(this._terminal.lines.get(r)[this._terminal.x-1][2]?this._terminal.lines.get(r)[this._terminal.x-1][1]+=t:this._terminal.lines.get(r)[this._terminal.x-2]&&(this._terminal.lines.get(r)[this._terminal.x-2][1]+=t),this._terminal.updateRange(this._terminal.y)));if(this._terminal.x+n-1>=this._terminal.cols)if(this._terminal.wraparoundMode)this._terminal.x=0,this._terminal.y++,this._terminal.y>this._terminal.scrollBottom&&(this._terminal.y--,this._terminal.scroll());else if(2===n)return;if(r=this._terminal.y+this._terminal.ybase,this._terminal.insertMode)for(var i=0;ithis._terminal.scrollBottom&&(this._terminal.y--,this._terminal.scroll()),this._terminal.x>=this._terminal.cols&&this._terminal.x--},t.prototype.carriageReturn=function(){this._terminal.x=0},t.prototype.backspace=function(){this._terminal.x>0&&this._terminal.x--},t.prototype.tab=function(){this._terminal.x=this._terminal.nextStop()},t.prototype.shiftOut=function(){this._terminal.setgLevel(1)},t.prototype.shiftIn=function(){this._terminal.setgLevel(0)},t.prototype.insertChars=function(t){var e,n,r,i;for(e=t[0],e<1&&(e=1),n=this._terminal.y+this._terminal.ybase,r=this._terminal.x,i=[this._terminal.eraseAttr()," ",1];e--&&r=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1),this._terminal.x>=this._terminal.cols&&this._terminal.x--},t.prototype.cursorForward=function(t){var e=t[0];e<1&&(e=1),this._terminal.x+=e,this._terminal.x>=this._terminal.cols&&(this._terminal.x=this._terminal.cols-1)},t.prototype.cursorBackward=function(t){var e=t[0];e<1&&(e=1),this._terminal.x>=this._terminal.cols&&this._terminal.x--,this._terminal.x-=e,this._terminal.x<0&&(this._terminal.x=0)},t.prototype.cursorNextLine=function(t){var e=t[0];e<1&&(e=1),this._terminal.y+=e,this._terminal.y>=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1),this._terminal.x=0},t.prototype.cursorPrecedingLine=function(t){var e=t[0];e<1&&(e=1),this._terminal.y-=e,this._terminal.y<0&&(this._terminal.y=0),this._terminal.x=0},t.prototype.cursorCharAbsolute=function(t){var e=t[0];e<1&&(e=1),this._terminal.x=e-1},t.prototype.cursorPosition=function(t){var e,n;e=t[0]-1,n=t.length>=2?t[1]-1:0,e<0?e=0:e>=this._terminal.rows&&(e=this._terminal.rows-1),n<0?n=0:n>=this._terminal.cols&&(n=this._terminal.cols-1),this._terminal.x=n,this._terminal.y=e},t.prototype.cursorForwardTab=function(t){for(var e=t[0]||1;e--;)this._terminal.x=this._terminal.nextStop()},t.prototype.eraseInDisplay=function(t){var e;switch(t[0]){case 0:for(this._terminal.eraseRight(this._terminal.x,this._terminal.y),e=this._terminal.y+1;e=this._terminal.cols&&(this._terminal.x=this._terminal.cols-1)},t.prototype.HPositionRelative=function(t){var e=t[0];e<1&&(e=1),this._terminal.x+=e,this._terminal.x>=this._terminal.cols&&(this._terminal.x=this._terminal.cols-1)},t.prototype.repeatPrecedingCharacter=function(t){for(var e=t[0]||1,n=this._terminal.lines.get(this._terminal.ybase+this._terminal.y),r=n[this._terminal.x-1]||[this._terminal.defAttr," ",1];e--;)n[this._terminal.x++]=r},t.prototype.sendDeviceAttributes=function(t){t[0]>0||(this._terminal.prefix?">"===this._terminal.prefix&&(this._terminal.is("xterm")?this._terminal.send(r.C0.ESC+"[>0;276;0c"):this._terminal.is("rxvt-unicode")?this._terminal.send(r.C0.ESC+"[>85;95;0c"):this._terminal.is("linux")?this._terminal.send(t[0]+"c"):this._terminal.is("screen")&&this._terminal.send(r.C0.ESC+"[>83;40003;0c")):this._terminal.is("xterm")||this._terminal.is("rxvt-unicode")||this._terminal.is("screen")?this._terminal.send(r.C0.ESC+"[?1;2c"):this._terminal.is("linux")&&this._terminal.send(r.C0.ESC+"[?6c"))},t.prototype.linePosAbsolute=function(t){var e=t[0];e<1&&(e=1),this._terminal.y=e-1,this._terminal.y>=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1)},t.prototype.VPositionRelative=function(t){var e=t[0];e<1&&(e=1),this._terminal.y+=e,this._terminal.y>=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1),this._terminal.x>=this._terminal.cols&&this._terminal.x--},t.prototype.HVPosition=function(t){t[0]<1&&(t[0]=1),t[1]<1&&(t[1]=1),this._terminal.y=t[0]-1,this._terminal.y>=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1),this._terminal.x=t[1]-1,this._terminal.x>=this._terminal.cols&&(this._terminal.x=this._terminal.cols-1)},t.prototype.tabClear=function(t){var e=t[0];e<=0?delete this._terminal.tabs[this._terminal.x]:3===e&&(this._terminal.tabs={})},t.prototype.setMode=function(t){if(t.length>1)for(var e=0;e1e3,this._terminal.mouseEvents=!0,this._terminal.element.style.cursor="default",this._terminal.log("Binding to mouse events.");break;case 1004:this._terminal.sendFocus=!0;break;case 1005:this._terminal.utfMouse=!0;break;case 1006:this._terminal.sgrMouse=!0;break;case 1015:this._terminal.urxvtMouse=!0;break;case 25:this._terminal.cursorHidden=!1;break;case 1049:case 47:case 1047:if(!this._terminal.normal){var n={lines:this._terminal.lines,ybase:this._terminal.ybase,ydisp:this._terminal.ydisp,x:this._terminal.x,y:this._terminal.y,scrollTop:this._terminal.scrollTop,scrollBottom:this._terminal.scrollBottom,tabs:this._terminal.tabs};this._terminal.reset(),this._terminal.viewport.syncScrollArea(),this._terminal.normal=n,this._terminal.showCursor()}}}else switch(t[0]){case 4:this._terminal.insertMode=!0;break;case 20:}},t.prototype.resetMode=function(t){if(t.length>1)for(var e=0;e>18,o=this._terminal.curAttr>>9&511,a=511&this._terminal.curAttr;r=30&&e<=37?o=e-30:e>=40&&e<=47?a=e-40:e>=90&&e<=97?(e+=8,o=e-90):e>=100&&e<=107?(e+=8,a=e-100):0===e?(i=this._terminal.defAttr>>18,o=this._terminal.defAttr>>9&511,a=511&this._terminal.defAttr):1===e?i|=1:4===e?i|=2:5===e?i|=4:7===e?i|=8:8===e?i|=16:22===e?i&=-2:24===e?i&=-3:25===e?i&=-5:27===e?i&=-9:28===e?i&=-17:39===e?o=this._terminal.defAttr>>9&511:49===e?a=511&this._terminal.defAttr:38===e?2===t[r+1]?(r+=2,o=this._terminal.matchColor(255&t[r],255&t[r+1],255&t[r+2]),o===-1&&(o=511),r+=2):5===t[r+1]&&(r+=2,e=255&t[r],o=e):48===e?2===t[r+1]?(r+=2,a=this._terminal.matchColor(255&t[r],255&t[r+1],255&t[r+2]),a===-1&&(a=511),r+=2):5===t[r+1]&&(r+=2,e=255&t[r],a=e):100===e?(o=this._terminal.defAttr>>9&511,a=511&this._terminal.defAttr):this._terminal.error("Unknown SGR attribute: %d.",e);this._terminal.curAttr=i<<18|o<<9|a},t.prototype.deviceStatus=function(t){if(this._terminal.prefix){if("?"===this._terminal.prefix)switch(t[0]){case 6:this._terminal.send(r.C0.ESC+"[?"+(this._terminal.y+1)+";"+(this._terminal.x+1)+"R");break;case 15:break;case 25:break;case 26:break;case 53:}}else switch(t[0]){case 5:this._terminal.send(r.C0.ESC+"[0n");break;case 6:this._terminal.send(r.C0.ESC+"["+(this._terminal.y+1)+";"+(this._terminal.x+1)+"R")}},t.prototype.softReset=function(t){this._terminal.cursorHidden=!1,this._terminal.insertMode=!1,this._terminal.originMode=!1,this._terminal.wraparoundMode=!0,this._terminal.applicationKeypad=!1,this._terminal.viewport.syncScrollArea(),this._terminal.applicationCursor=!1,this._terminal.scrollTop=0,this._terminal.scrollBottom=this._terminal.rows-1,this._terminal.curAttr=this._terminal.defAttr,this._terminal.x=this._terminal.y=0,this._terminal.charset=null,this._terminal.glevel=0,this._terminal.charsets=[null]},t.prototype.setCursorStyle=function(t){var e=t[0]<1?1:t[0];switch(e){case 1:case 2:this._terminal.setOption("cursorStyle","block");break;case 3:case 4:this._terminal.setOption("cursorStyle","underline");break;case 5:case 6:this._terminal.setOption("cursorStyle","bar")}var n=e%2===1;this._terminal.setOption("cursorBlink",n)},t.prototype.setScrollRegion=function(t){this._terminal.prefix||(this._terminal.scrollTop=(t[0]||1)-1,this._terminal.scrollBottom=(t[1]&&t[1]<=this._terminal.rows?t[1]:this._terminal.rows)-1,this._terminal.x=0,this._terminal.y=0)},t.prototype.saveCursor=function(t){this._terminal.savedX=this._terminal.x,this._terminal.savedY=this._terminal.y},t.prototype.restoreCursor=function(t){this._terminal.x=this._terminal.savedX||0,this._terminal.y=this._terminal.savedY||0},t}();n.InputHandler=o;var a=function(t){function e(t){var e,n=0,r=i.length-1;if(ti[r][1])return!1;for(;r>=n;)if(e=Math.floor((n+r)/2),t>i[e][1])n=e+1;else{if(!(t=127&&n<160?t.control:e(n)?0:r(n)?2:1}function r(t){return t>=4352&&(t<=4447||9001===t||9002===t||t>=11904&&t<=42191&&12351!==t||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65135||t>=65280&&t<=65376||t>=65504&&t<=65510||t>=131072&&t<=196605||t>=196608&&t<=262141)}var i=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531],[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]];return n}({nul:0,control:0})},{"./Charsets":1,"./EscapeSequences":3}],6:[function(t,e,n){"use strict";var r="xterm-invalid-link",i="(https?:\\/\\/)",o="[\\da-z\\.-]+",a="[^\\da-z\\.-]+",s="("+o+")",u="([a-z\\.]{2,6})",l="((\\d{1,3}\\.){3}\\d{1,3})",c="(localhost)",d="(:\\d{1,5})",h="(("+s+"\\."+u+")|"+l+"|"+c+")"+d+"?",f="(\\/[\\/\\w\\.\\-%]*)*",p="[0-9\\w\\[\\]\\(\\)\\/\\?\\!#@$%&'*+,:;\\=\\.\\-]*",m="(\\?"+p+")?",_="(#"+p+")?",y="[^\\/\\w\\.\\-%]+",v=h+f+m+_,g="(?:^|"+a+")(",M=")($|"+y+")",b=new RegExp(g+i+v+M),w=0,L=function(){function t(t,e){this._nextLinkMatcherId=w,this._document=t,this._rows=e,this._rowTimeoutIds=[],this._linkMatchers=[],this.registerLinkMatcher(b,null,{matchIndex:1})}return t.prototype.linkifyRow=function(e){var n=this._rowTimeoutIds[e];n&&clearTimeout(n),this._rowTimeoutIds[e]=setTimeout(this._linkifyRow.bind(this,e),t.TIME_BEFORE_LINKIFY)},t.prototype.attachHypertextLinkHandler=function(t){this._linkMatchers[w].handler=t},t.prototype.registerLinkMatcher=function(t,e,n){if(void 0===n&&(n={}),this._nextLinkMatcherId!==w&&!e)throw new Error("handler must be defined");var r={id:this._nextLinkMatcherId++,regex:t,handler:e,matchIndex:n.matchIndex,validationCallback:n.validationCallback,priority:n.priority||0};return this._addLinkMatcherToList(r),r.id},t.prototype._addLinkMatcherToList=function(t){if(0===this._linkMatchers.length)return void this._linkMatchers.push(t);for(var e=this._linkMatchers.length-1;e>=0;e--)if(t.priority<=this._linkMatchers[e].priority)return void this._linkMatchers.splice(e+1,0,t);this._linkMatchers.splice(0,0,t)},t.prototype.deregisterLinkMatcher=function(t){for(var e=1;e=0){var u=this._createAnchorElement(e,n,r);if(a.textContent.length===e.length)if(3===a.nodeType)this._replaceNode(a,u);else{var l=a;if("A"===l.nodeName)return;l.innerHTML="",l.appendChild(u)}else this._replaceNodeSubstringWithNode(a,u,e,s);return u}}},t.prototype._findLinkMatch=function(t,e,n){var r=t.match(e);return r&&0!==r.length?r["number"!=typeof n?0:n]:null},t.prototype._createAnchorElement=function(t,e,n){var i=this._document.createElement("a");return i.textContent=t,n?(i.href=t,i.target="_blank",i.addEventListener("click",function(n){if(e)return e(n,t)})):i.addEventListener("click",function(n){if(!i.classList.contains(r))return e(n,t)}),i},t.prototype._replaceNode=function(t){for(var e=[],n=1;n"]=function(t){return t.setPrefix(">")},s["!"]=function(t){return t.setPrefix("!")},s[0]=function(t){return t.setParam(10*t.getParam())},s[1]=function(t){return t.setParam(10*t.getParam()+1)},s[2]=function(t){return t.setParam(10*t.getParam()+2)},s[3]=function(t){return t.setParam(10*t.getParam()+3)},s[4]=function(t){return t.setParam(10*t.getParam()+4)},s[5]=function(t){return t.setParam(10*t.getParam()+5)},s[6]=function(t){return t.setParam(10*t.getParam()+6)},s[7]=function(t){return t.setParam(10*t.getParam()+7)},s[8]=function(t){return t.setParam(10*t.getParam()+8)},s[9]=function(t){return t.setParam(10*t.getParam()+9)},s.$=function(t){return t.setPostfix("$")},s['"']=function(t){return t.setPostfix('"')},s[" "]=function(t){return t.setPostfix(" ")},s["'"]=function(t){return t.setPostfix("'")},s[";"]=function(t){return t.finalizeParam()},s[r.C0.CAN]=function(t){return t.setState(l.NORMAL)};var u={};u["@"]=function(t,e,n){return t.insertChars(e)},u.A=function(t,e,n){return t.cursorUp(e)},u.B=function(t,e,n){return t.cursorDown(e)},u.C=function(t,e,n){return t.cursorForward(e)},u.D=function(t,e,n){return t.cursorBackward(e)},u.E=function(t,e,n){return t.cursorNextLine(e)},u.F=function(t,e,n){return t.cursorPrecedingLine(e)},u.G=function(t,e,n){return t.cursorCharAbsolute(e)},u.H=function(t,e,n){return t.cursorPosition(e)},u.I=function(t,e,n){return t.cursorForwardTab(e)},u.J=function(t,e,n){return t.eraseInDisplay(e)},u.K=function(t,e,n){return t.eraseInLine(e)},u.L=function(t,e,n){return t.insertLines(e)},u.M=function(t,e,n){return t.deleteLines(e)},u.P=function(t,e,n){return t.deleteChars(e)},u.S=function(t,e,n){return t.scrollUp(e)},u.T=function(t,e,n){e.length<2&&!n&&t.scrollDown(e)},u.X=function(t,e,n){return t.eraseChars(e)},u.Z=function(t,e,n){return t.cursorBackwardTab(e)},u["`"]=function(t,e,n){return t.charPosAbsolute(e)},u.a=function(t,e,n){return t.HPositionRelative(e)},u.b=function(t,e,n){return t.repeatPrecedingCharacter(e)},u.c=function(t,e,n){return t.sendDeviceAttributes(e)},u.d=function(t,e,n){return t.linePosAbsolute(e); },u.e=function(t,e,n){return t.VPositionRelative(e)},u.f=function(t,e,n){return t.HVPosition(e)},u.g=function(t,e,n){return t.tabClear(e)},u.h=function(t,e,n){return t.setMode(e)},u.l=function(t,e,n){return t.resetMode(e)},u.m=function(t,e,n){return t.charAttributes(e)},u.n=function(t,e,n){return t.deviceStatus(e)},u.p=function(t,e,n){switch(n){case"!":t.softReset(e)}},u.q=function(t,e,n,r){" "===r&&t.setCursorStyle(e)},u.r=function(t,e){return t.setScrollRegion(e)},u.s=function(t,e){return t.saveCursor(e)},u.u=function(t,e){return t.restoreCursor(e)},u[r.C0.CAN]=function(t,e,n,r,i){return i.setState(l.NORMAL)};var l;!function(t){t[t.NORMAL=0]="NORMAL",t[t.ESCAPED=1]="ESCAPED",t[t.CSI_PARAM=2]="CSI_PARAM",t[t.CSI=3]="CSI",t[t.OSC=4]="OSC",t[t.CHARSET=5]="CHARSET",t[t.DCS=6]="DCS",t[t.IGNORE=7]="IGNORE"}(l||(l={}));var c=function(){function t(t,e){this._inputHandler=t,this._terminal=e,this._state=l.NORMAL}return t.prototype.parse=function(t){var e,n,c,d,h=t.length;for(this._position=0,this._terminal.surrogate_high&&(t=this._terminal.surrogate_high+t,this._terminal.surrogate_high="");this._position":this._terminal.log("Switching back to normal keypad."),this._terminal.applicationKeypad=!1,this._terminal.viewport.syncScrollArea(),this._state=l.NORMAL;break;default:this._state=l.NORMAL,this._terminal.error("Unknown ESC control: %s.",n)}break;case l.CHARSET:n in i.CHARSETS?(e=i.CHARSETS[n],"/"===n&&this.skipNextChar()):e=i.DEFAULT_CHARSET,this._terminal.setgCharset(this._terminal.gcharset,e),this._terminal.gcharset=null,this._state=l.NORMAL;break;case l.OSC:if(n===r.C0.ESC||n===r.C0.BEL){switch(n===r.C0.ESC&&this._position++,this._terminal.params.push(this._terminal.currentParam),this._terminal.params[0]){case 0:case 1:case 2:this._terminal.params[1]&&(this._terminal.title=this._terminal.params[1],this._terminal.handleTitle(this._terminal.title));break;case 3:break;case 4:case 5:break;case 10:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:break;case 46:break;case 50:break;case 51:break;case 52:break;case 104:case 105:case 110:case 111:case 112:case 113:case 114:case 115:case 116:case 117:case 118:}this._terminal.params=[],this._terminal.currentParam=0,this._state=l.NORMAL}else this._terminal.params.length?this._terminal.currentParam+=n:n>="0"&&n<="9"?this._terminal.currentParam=10*this._terminal.currentParam+n.charCodeAt(0)-48:";"===n&&(this._terminal.params.push(this._terminal.currentParam),this._terminal.currentParam="");break;case l.CSI_PARAM:if(n in s){s[n](this);break}this.finalizeParam(),this._state=l.CSI;case l.CSI:n in u?u[n](this._inputHandler,this._terminal.params,this._terminal.prefix,this._terminal.postfix,this):this._terminal.error("Unknown CSI code: %s.",n),this._state=l.NORMAL,this._terminal.prefix="",this._terminal.postfix="";break;case l.DCS:if(n===r.C0.ESC||n===r.C0.BEL){switch(n===r.C0.ESC&&this._position++,this._terminal.prefix){case"":break;case"$q":var f=this._terminal.currentParam,p=!1;switch(f){case'"q':f='0"q';break;case'"p':f='61"p';break;case"r":f=""+(this._terminal.scrollTop+1)+";"+(this._terminal.scrollBottom+1)+"r";break;case"m":f="0m";break;default:this._terminal.error("Unknown DCS Pt: %s.",f),f=""}this._terminal.send(r.C0.ESC+"P"+ +p+"$r"+f+r.C0.ESC+"\\");break;case"+p":break;case"+q":f=this._terminal.currentParam,p=!1,this._terminal.send(r.C0.ESC+"P"+ +p+"+r"+f+r.C0.ESC+"\\");break;default:this._terminal.error("Unknown DCS prefix: %s.",this._terminal.prefix)}this._terminal.currentParam=0,this._terminal.prefix="",this._state=l.NORMAL}else this._terminal.currentParam?this._terminal.currentParam+=n:this._terminal.prefix||"$"===n||"+"===n?2===this._terminal.prefix.length?this._terminal.currentParam=n:this._terminal.prefix+=n:this._terminal.currentParam=n;break;case l.IGNORE:n!==r.C0.ESC&&n!==r.C0.BEL||(n===r.C0.ESC&&this._position++,this._state=l.NORMAL)}}},t.prototype.setState=function(t){this._state=t},t.prototype.setPrefix=function(t){this._terminal.prefix=t},t.prototype.setPostfix=function(t){this._terminal.postfix=t},t.prototype.setParam=function(t){this._terminal.currentParam=t},t.prototype.getParam=function(){return this._terminal.currentParam},t.prototype.finalizeParam=function(){this._terminal.params.push(this._terminal.currentParam),this._terminal.currentParam=0},t.prototype.skipNextChar=function(){this._position++},t}();n.Parser=c},{"./Charsets":1,"./EscapeSequences":3}],8:[function(t,e,n){"use strict";function r(t){var e=t.getElementsByTagName("body")[0],n=t.createElement("span");n.innerHTML="hello world",e.appendChild(n);var r=n.scrollWidth;n.style.fontWeight="bold";var i=n.scrollWidth;return e.removeChild(n),r!==i}var i,o=5;!function(t){t[t.BOLD=1]="BOLD",t[t.UNDERLINE=2]="UNDERLINE",t[t.BLINK=4]="BLINK",t[t.INVERSE=8]="INVERSE",t[t.INVISIBLE=16]="INVISIBLE"}(i||(i={}));var a=null,s=function(){function t(t){this._terminal=t,this._refreshRowsQueue=[],this._refreshFramesSkipped=0,this._refreshAnimationFrame=null,null===a&&(a=r(this._terminal.document))}return t.prototype.queueRefresh=function(t,e){this._refreshRowsQueue.push({start:t,end:e}),this._refreshAnimationFrame||(this._refreshAnimationFrame=window.requestAnimationFrame(this._refreshLoop.bind(this)))},t.prototype._refreshLoop=function(){var t=this._terminal.writeBuffer.length>0&&this._refreshFramesSkipped++<=o;if(t)return void(this._refreshAnimationFrame=window.requestAnimationFrame(this._refreshLoop.bind(this)));this._refreshFramesSkipped=0;var e,n;if(this._refreshRowsQueue.length>4)e=0,n=this._terminal.rows-1;else{e=this._refreshRowsQueue[0].start,n=this._refreshRowsQueue[0].end;for(var r=1;rn&&(n=this._refreshRowsQueue[r].end)}this._refreshRowsQueue=[],this._refreshAnimationFrame=null,this._refresh(e,n)},t.prototype._refresh=function(t,e){var n,r,o,s,u,l,c,d,h,f,p,m,_,y,v;document.activeElement;for(e-t>=this._terminal.rows/2&&(v=this._terminal.element.parentNode,v&&this._terminal.element.removeChild(this._terminal.rowContainer)),d=this._terminal.cols,r=t,e>=this._terminal.rows&&(this._terminal.log("`end` is too large. Most likely a bad CSR."),e=this._terminal.rows-1);r<=e;r++)if(y=r+this._terminal.ydisp,s=this._terminal.lines.get(y),s&&this._terminal.children[r]){for(u="",n=this._terminal.y===r-(this._terminal.ybase-this._terminal.ydisp)&&this._terminal.cursorState&&!this._terminal.cursorHidden?this._terminal.x:-1,f=this._terminal.defAttr,o=0;o"),h!==this._terminal.defAttr))if(h===-1)u+='';else{var g=[];p=511&h,m=h>>9&511,_=h>>18,_&i.BOLD&&(a||g.push("xterm-bold"),m<8&&(m+=8)),_&i.UNDERLINE&&g.push("xterm-underline"),_&i.BLINK&&g.push("xterm-blink"),_&i.INVERSE&&(p=[m,m=p][0],1&_&&m<8&&(m+=8)),_&i.INVISIBLE&&g.push("xterm-hidden"),_&i.INVERSE&&(257===p&&(p=15),256===m&&(m=0)),p<256&&g.push("xterm-bg-color-"+p),m<256&&g.push("xterm-color-"+m),u+="'),l){case"&":u+="&";break;case"<":u+="<";break;case">":u+=">";break;default:u+=l<=" "?" ":l}2===c&&(u+=""),f=h}f!==this._terminal.defAttr&&(u+=""),this._terminal.children[r].innerHTML=u}v&&this._terminal.element.appendChild(this._terminal.rowContainer),this._terminal.emit("refresh",{element:this._terminal.element,start:t,end:e})},t}();n.Renderer=s},{}],9:[function(t,e,n){"use strict";var r=function(){function t(t,e,n,r){var i=this;this.terminal=t,this.viewportElement=e,this.scrollArea=n,this.charMeasure=r,this.currentRowHeight=0,this.lastRecordedBufferLength=0,this.lastRecordedViewportHeight=0,this.terminal.on("scroll",this.syncScrollArea.bind(this)),this.terminal.on("resize",this.syncScrollArea.bind(this)),this.viewportElement.addEventListener("scroll",this.onScroll.bind(this)),setTimeout(function(){return i.syncScrollArea()},0)}return t.prototype.refresh=function(){if(this.charMeasure.height>0){var t=this.charMeasure.height!==this.currentRowHeight;t&&(this.currentRowHeight=this.charMeasure.height,this.viewportElement.style.lineHeight=this.charMeasure.height+"px",this.terminal.rowContainer.style.lineHeight=this.charMeasure.height+"px");var e=this.lastRecordedViewportHeight!==this.terminal.rows;(t||e)&&(this.lastRecordedViewportHeight=this.terminal.rows,this.viewportElement.style.height=this.charMeasure.height*this.terminal.rows+"px"),this.scrollArea.style.height=this.charMeasure.height*this.lastRecordedBufferLength+"px"}},t.prototype.syncScrollArea=function(){this.lastRecordedBufferLength!==this.terminal.lines.length?(this.lastRecordedBufferLength=this.terminal.lines.length,this.refresh()):this.lastRecordedViewportHeight!==this.terminal.rows?this.refresh():this.charMeasure.height!==this.currentRowHeight&&this.refresh();var t=this.terminal.ydisp*this.currentRowHeight;this.viewportElement.scrollTop!==t&&(this.viewportElement.scrollTop=t)},t.prototype.onScroll=function(t){var e=Math.round(this.viewportElement.scrollTop/this.currentRowHeight),n=e-this.terminal.ydisp;this.terminal.scrollDisp(n,!0)},t.prototype.onWheel=function(t){if(0!==t.deltaY){var e=1;t.deltaMode===WheelEvent.DOM_DELTA_LINE?e=this.currentRowHeight:t.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(e=this.currentRowHeight*this.terminal.rows),this.viewportElement.scrollTop+=t.deltaY*e,t.preventDefault()}},t}();n.Viewport=r},{}],10:[function(t,e,n){"use strict";function r(t){var e=String.fromCharCode(32),n=String.fromCharCode(160),r=new RegExp(n,"g"),i=t.split("\n").map(function(t){var n=t.replace(/\s+$/g,"").replace(r,e);return n}).join("\n");return i}function i(t,e){var n=window.getSelection().toString(),i=r(n);e.browser.isMSIE?window.clipboardData.setData("Text",i):t.clipboardData.setData("text/plain",i),t.preventDefault()}function o(t,e){t.stopPropagation();var n,r=function(n){return e.handler(n),e.textarea.value="",e.cancel(t)};e.browser.isMSIE?window.clipboardData&&(n=window.clipboardData.getData("Text"),r(n)):t.clipboardData&&(n=t.clipboardData.getData("text/plain"),r(n))}function a(t,e){var n=document.getSelection(),i=r(n.toString()),o=!1,a=t.clientX,s=t.clientY;if(n.rangeCount){for(var u=n.getRangeAt(0),l=u.getClientRects(),c=0;cd.left&&ad.top&&sthis._length)for(var e=this._length;e=t;i--)this._array[this._getCyclicIndex(i+n.length)]=this._array[this._getCyclicIndex(i)];for(var i=0;ithis.maxLength?(this._startIndex+=this._length+n.length-this.maxLength,this._length=this.maxLength):this._length+=n.length}},t.prototype.trimStart=function(t){t>this._length&&(t=this._length),this._startIndex+=t,this._length-=t},t.prototype.shiftElements=function(t,e,n){if(!(e<=0)){if(t<0||t>=this._length)throw new Error("start argument out of range");if(t+n<0)throw new Error("Cannot shift elements in list beyond index 0");if(n>0){for(var r=e-1;r>=0;r--)this.set(t+r+n,this.get(t+r));var i=t+e+n-this._length;if(i>0)for(this._length+=i;this._length>this.maxLength;)this._length--,this._startIndex++}else for(var r=0;r=0}n.contains=r},{}],15:[function(e,n,r){"use strict";function i(t){var e=this;if(!(this instanceof i))return new i(arguments[0],arguments[1],arguments[2]);e.browser=T,e.cancel=i.cancel,m.EventEmitter.call(this),"number"==typeof t&&(t={cols:arguments[0],rows:arguments[1],handler:arguments[2]}),t=t||{},Object.keys(i.defaults).forEach(function(n){null==t[n]&&(t[n]=i.options[n],i[n]!==i.defaults[n]&&(t[n]=i[n])),e[n]=t[n]}),8===t.colors.length?t.colors=t.colors.concat(i._colors.slice(8)):16===t.colors.length?t.colors=t.colors.concat(i._colors.slice(16)):10===t.colors.length?t.colors=t.colors.slice(0,-2).concat(i._colors.slice(8,-2),t.colors.slice(-2)):18===t.colors.length&&(t.colors=t.colors.concat(i._colors.slice(16,-2),t.colors.slice(-2))),this.colors=t.colors,this.options=t,this.parent=t.body||t.parent||(D?D.getElementsByTagName("body")[0]:null),this.cols=t.cols||t.geometry[0],this.rows=t.rows||t.geometry[1],this.geometry=[this.cols,this.rows],t.handler&&this.on("data",t.handler),this.ybase=0,this.ydisp=0,this.x=0,this.y=0,this.cursorState=0,this.cursorHidden=!1,this.convertEol,this.queue="",this.scrollTop=0,this.scrollBottom=this.rows-1,this.customKeydownHandler=null,this.applicationKeypad=!1,this.applicationCursor=!1,this.originMode=!1,this.insertMode=!1,this.wraparoundMode=!0,this.normal=null,this.charset=null,this.gcharset=null,this.glevel=0,this.charsets=[null],this.decLocator,this.x10Mouse,this.vt200Mouse,this.vt300Mouse,this.normalMouse,this.mouseEvents,this.sendFocus,this.utfMouse,this.sgrMouse,this.urxvtMouse,this.element,this.children,this.refreshStart,this.refreshEnd,this.savedX,this.savedY,this.savedCols,this.readable=!0,this.writable=!0,this.defAttr=131840,this.curAttr=this.defAttr,this.params=[],this.currentParam=0,this.prefix="",this.postfix="",this.inputHandler=new M.InputHandler(this),this.parser=new b.Parser(this.inputHandler,this),this.renderer=this.renderer||null,this.linkifier=this.linkifier||null,this.writeBuffer=[],this.writeInProgress=!1,this.xoffSentToCatchUp=!1,this.writeStopped=!1,this.surrogate_high="",this.lines=new v.CircularList(this.scrollback);for(var n=this.rows;n--;)this.lines.push(this.blankLine());this.tabs,this.setupStops(),this.userScrolling=!1}function o(t,e,n,r){Array.isArray(t)||(t=[t]),t.forEach(function(t){t.addEventListener(e,n,r||!1)})}function a(t,e,n,r){t.removeEventListener(e,n,r||!1)}function s(t,e){if(this.cancelEvents||e)return t.preventDefault(),t.stopPropagation(),!1}function u(t,e){function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n}function l(t,e){var n=t.browser.isMac&&e.altKey&&!e.ctrlKey&&!e.metaKey||t.browser.isMSWindows&&e.altKey&&e.ctrlKey&&!e.metaKey;return"keypress"==e.type?n:n&&(!e.keyCode||e.keyCode>47)}function c(t,e,n){var r=t<<16|e<<8|n;if(null!=c._cache[r])return c._cache[r];for(var o,a,s,u,l,d=1/0,h=-1,f=0;f>16&255,t>>8&255,255&t]);return e}(),i.defaults={colors:i.colors,theme:"default",convertEol:!1,termName:"xterm",geometry:[80,24],cursorBlink:!1,cursorStyle:"block",visualBell:!1,popOnBell:!1,scrollback:1e3,screenKeys:!1,debug:!1,cancelEvents:!1,disableStdin:!1,useFlowControl:!1,tabStopWidth:8},i.options={},i.focus=null,d(f(i.defaults),function(t){i[t]=i.defaults[t],i.options[t]=i.defaults[t]}),i.prototype.focus=function(){return this.textarea.focus()},i.prototype.getOption=function(t,e){if(!(t in i.defaults))throw new Error('No option with key "'+t+'"');return"undefined"!=typeof this.options[t]?this.options[t]:this[t]},i.prototype.setOption=function(t,e){if(!(t in i.defaults))throw new Error('No option with key "'+t+'"');switch(t){case"scrollback":if(this.options[t]!==e){if(this.lines.length>e){var n=this.lines.length-e,r=this.ydisp-n<0;this.lines.trimStart(n),this.ybase=Math.max(this.ybase-n,0),this.ydisp=Math.max(this.ydisp-n,0),r&&this.refresh(0,this.rows-1)}this.lines.maxLength=e,this.viewport.syncScrollArea()}}switch(this[t]=e,this.options[t]=e,t){case"cursorBlink":this.element.classList.toggle("xterm-cursor-blink",e);break;case"cursorStyle":this.element.classList.toggle("xterm-cursor-style-underline","underline"===e),this.element.classList.toggle("xterm-cursor-style-bar","bar"===e);break;case"tabStopWidth":this.setupStops()}},i.bindFocus=function(t){o(t.textarea,"focus",function(e){t.sendFocus&&t.send(g.C0.ESC+"[I"),t.element.classList.add("focus"),t.showCursor(),i.focus=t,t.emit("focus",{terminal:t})})},i.prototype.blur=function(){return this.textarea.blur()},i.bindBlur=function(t){o(t.textarea,"blur",function(e){t.refresh(t.y,t.y),t.sendFocus&&t.send(g.C0.ESC+"[O"),t.element.classList.remove("focus"),i.focus=null,t.emit("blur",{terminal:t})})},i.prototype.initGlobal=function(){function t(t){y.rightClickHandler.call(this,t,e)}var e=this;i.bindKeys(this),i.bindFocus(this),i.bindBlur(this),o(this.element,"copy",function(t){y.copyHandler.call(this,t,e)}),o(this.textarea,"paste",function(t){y.pasteHandler.call(this,t,e)}),o(this.element,"paste",function(t){y.pasteHandler.call(this,t,e)}),e.browser.isFirefox?o(this.element,"mousedown",function(e){2==e.button&&t(e)}):o(this.element,"contextmenu",t)},i.bindKeys=function(t){o(t.element,"keydown",function(e){D.activeElement==this&&t.keyDown(e)},!0),o(t.element,"keypress",function(e){D.activeElement==this&&t.keyPress(e)},!0),o(t.element,"keyup",function(e){h(e)||t.focus(t)},!0),o(t.textarea,"keydown",function(e){t.keyDown(e)},!0),o(t.textarea,"keypress",function(e){t.keyPress(e),this.value=""},!0),o(t.textarea,"compositionstart",t.compositionHelper.compositionstart.bind(t.compositionHelper)),o(t.textarea,"compositionupdate",t.compositionHelper.compositionupdate.bind(t.compositionHelper)),o(t.textarea,"compositionend",t.compositionHelper.compositionend.bind(t.compositionHelper)),t.on("refresh",t.compositionHelper.updateCompositionElements.bind(t.compositionHelper)),t.on("refresh",function(e){t.queueLinkification(e.start,e.end)})},i.prototype.insertRow=function(t){return"object"!=typeof t&&(t=D.createElement("div")),this.rowContainer.appendChild(t),this.children.push(t),t},i.prototype.open=function(t){var e=this,n=0;if(this.parent=t||this.parent,!this.parent)throw new Error("Terminal requires a parent element.");for(this.context=this.parent.ownerDocument.defaultView,this.document=this.parent.ownerDocument,this.body=this.document.getElementsByTagName("body")[0],this.element=this.document.createElement("div"),this.element.classList.add("terminal"),this.element.classList.add("xterm"),this.element.classList.add("xterm-theme-"+this.theme),this.element.classList.toggle("xterm-cursor-blink",this.options.cursorBlink),this.element.style.height,this.element.setAttribute("tabindex",0),this.viewportElement=D.createElement("div"),this.viewportElement.classList.add("xterm-viewport"),this.element.appendChild(this.viewportElement),this.viewportScrollArea=D.createElement("div"),this.viewportScrollArea.classList.add("xterm-scroll-area"),this.viewportElement.appendChild(this.viewportScrollArea),this.rowContainer=D.createElement("div"),this.rowContainer.classList.add("xterm-rows"),this.element.appendChild(this.rowContainer),this.children=[],this.linkifier=new L.Linkifier(D,this.children),this.helperContainer=D.createElement("div"),this.helperContainer.classList.add("xterm-helpers"),this.element.appendChild(this.helperContainer),this.textarea=D.createElement("textarea"),this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this.textarea.addEventListener("focus",function(){e.emit("focus",{terminal:e})}),this.textarea.addEventListener("blur",function(){e.emit("blur",{terminal:e})}),this.helperContainer.appendChild(this.textarea),this.compositionView=D.createElement("div"),this.compositionView.classList.add("composition-view"),this.compositionHelper=new p.CompositionHelper(this.textarea,this.compositionView,this),this.helperContainer.appendChild(this.compositionView),this.charSizeStyleElement=D.createElement("style"),this.helperContainer.appendChild(this.charSizeStyleElement);n2047&&(e=2047),t.push(192|e>>6),t.push(128|63&e))}else{if(255===e)return t.push(0);e>127&&(e=127),t.push(e)}}function r(t,e){if(l.vt300Mouse){t&=3,e.x-=32,e.y-=32;var r=g.C0.ESC+"[24";if(0===t)r+="1";else if(1===t)r+="3";else if(2===t)r+="5";else{if(3===t)return;r+="0"}return r+="~["+e.x+","+e.y+"]\r",void l.send(r)}if(l.decLocator)return t&=3,e.x-=32,e.y-=32,0===t?t=2:1===t?t=4:2===t?t=6:3===t&&(t=3),void l.send(g.C0.ESC+"["+t+";"+(3===t?4:0)+";"+e.y+";"+e.x+";"+(e.page||0)+"&w");if(l.urxvtMouse)return e.x-=32,e.y-=32,e.x++,e.y++,void l.send(g.C0.ESC+"["+t+";"+e.x+";"+e.y+"M");if(l.sgrMouse)return e.x-=32,e.y-=32,void l.send(g.C0.ESC+"[<"+((3===(3&t)?t&-4:t)-32)+";"+e.x+";"+e.y+(3===(3&t)?"m":"M"));var r=[];n(r,t),n(r,e.x),n(r,e.y),l.send(g.C0.ESC+"[M"+String.fromCharCode.apply(String,r))}function i(t){var e,n,r,i,o;switch(t.overrideType||t.type){case"mousedown":e=null!=t.button?+t.button:null!=t.which?t.which-1:null,l.browser.isMSIE&&(e=1===e?0:4===e?1:e);break;case"mouseup":e=3;break;case"DOMMouseScroll":e=t.detail<0?64:65;break;case"wheel":e=t.wheelDeltaY>0?64:65}return n=t.shiftKey?4:0,r=t.metaKey?8:0,i=t.ctrlKey?16:0,o=n|r|i,l.vt200Mouse?o&=i:l.normalMouse||(o=0),e=32+(o<<2)+e}function s(t){var e,n,r;if(null!=t.pageX){for(e=t.pageX,n=t.pageY,r=l.element;r&&r!==l.document.documentElement;)e-=r.offsetLeft,n-=r.offsetTop,r="offsetParent"in r?r.offsetParent:r.parentNode;return e=Math.ceil(e/l.charMeasure.width),n=Math.ceil(n/l.charMeasure.height),e<0&&(e=0),e>l.cols&&(e=l.cols),n<0&&(n=0),n>l.rows&&(n=l.rows),e+=32,n+=32,{x:e,y:n,type:"wheel"}}}var u=this.element,l=this,c=32;o(u,"mousedown",function(n){if(l.mouseEvents)return t(n),l.focus(),l.vt200Mouse?(n.overrideType="mouseup",t(n),l.cancel(n)):(l.normalMouse&&o(l.document,"mousemove",e),l.x10Mouse||o(l.document,"mouseup",function n(r){return t(r),l.normalMouse&&a(l.document,"mousemove",e),a(l.document,"mouseup",n),l.cancel(r)}),l.cancel(n))}),o(u,"wheel",function(e){if(l.mouseEvents&&!(l.x10Mouse||l.vt300Mouse||l.decLocator))return t(e),l.cancel(e)}),o(u,"wheel",function(t){if(!l.mouseEvents)return l.viewport.onWheel(t),l.cancel(t)})},i.prototype.destroy=function(){this.readable=!1,this.writable=!1,this._events={},this.handler=function(){},this.write=function(){},this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},i.prototype.refresh=function(t,e){this.renderer&&this.renderer.queueRefresh(t,e)},i.prototype.queueLinkification=function(t,e){if(this.linkifier)for(var n=t;n<=e;n++)this.linkifier.linkifyRow(n)},i.prototype.showCursor=function(){this.cursorState||(this.cursorState=1,this.refresh(this.y,this.y))},i.prototype.scroll=function(){var t;this.lines.length===this.lines.maxLength&&(this.lines.trimStart(1),this.ybase--,0!==this.ydisp&&this.ydisp--),this.ybase++,this.userScrolling||(this.ydisp=this.ybase),t=this.ybase+this.rows-1,t-=this.rows-1-this.scrollBottom,t===this.lines.length?this.lines.push(this.blankLine()):this.lines.splice(t,0,this.blankLine()),0!==this.scrollTop&&(0!==this.ybase&&(this.ybase--,this.userScrolling||(this.ydisp=this.ybase)),this.lines.splice(this.ybase+this.scrollTop,1)),this.updateRange(this.scrollTop),this.updateRange(this.scrollBottom),this.emit("scroll",this.ydisp)},i.prototype.scrollDisp=function(t,e){t<0?this.userScrolling=!0:t+this.ydisp>=this.ybase&&(this.userScrolling=!1),this.ydisp+=t,this.ydisp>this.ybase?this.ydisp=this.ybase:this.ydisp<0&&(this.ydisp=0),e||this.emit("scroll",this.ydisp),this.refresh(0,this.rows-1)},i.prototype.scrollPages=function(t){this.scrollDisp(t*(this.rows-1))},i.prototype.scrollToTop=function(){this.scrollDisp(-this.ydisp)},i.prototype.scrollToBottom=function(){this.scrollDisp(this.ybase-this.ydisp)},i.prototype.write=function(t){if(this.writeBuffer.push(t),this.options.useFlowControl&&!this.xoffSentToCatchUp&&this.writeBuffer.length>=S&&(this.send(g.C0.DC3),this.xoffSentToCatchUp=!0),!this.writeInProgress&&this.writeBuffer.length>0){this.writeInProgress=!0;var e=this;setTimeout(function(){e.innerWrite()})}},i.prototype.innerWrite=function(){for(var t=this.writeBuffer.splice(0,x);t.length>0;){var e=t.shift();e.length;this.xoffSentToCatchUp&&0===t.length&&0===this.writeBuffer.length&&(this.send(g.C0.DC1),this.xoffSentToCatchUp=!1),this.refreshStart=this.y,this.refreshEnd=this.y,this.parser.parse(e),this.updateRange(this.y),this.refresh(this.refreshStart,this.refreshEnd)}if(this.writeBuffer.length>0){var n=this; -setTimeout(function(){n.innerWrite()},0)}else this.writeInProgress=!1},i.prototype.writeln=function(t){this.write(t+"\r\n")},i.prototype.attachCustomKeydownHandler=function(t){this.customKeydownHandler=t},i.prototype.attachHypertextLinkHandler=function(t){if(!this.linkifier)throw new Error("Cannot attach a hypertext link handler before Terminal.open is called");this.linkifier.attachHypertextLinkHandler(t),this.refresh(0,this.rows-1)},i.prototype.registerLinkMatcher=function(t,e,n){if(this.linkifier){var r=this.linkifier.registerLinkMatcher(t,e,n);return this.refresh(0,this.rows-1),r}},i.prototype.deregisterLinkMatcher=function(t){this.linkifier&&this.linkifier.deregisterLinkMatcher(t)&&this.refresh(0,this.rows-1)},i.prototype.keyDown=function(t){if(this.customKeydownHandler&&this.customKeydownHandler(t)===!1)return!1;if(!this.compositionHelper.keydown.bind(this.compositionHelper)(t))return this.ybase!==this.ydisp&&this.scrollToBottom(),!1;var e=this.evaluateKeyEscapeSequence(t);return e.key===g.C0.DC3?this.writeStopped=!0:e.key===g.C0.DC1&&(this.writeStopped=!1),e.scrollDisp?(this.scrollDisp(e.scrollDisp),this.cancel(t,!0)):!!l(this,t)||(e.cancel&&this.cancel(t,!0),!e.key||(this.emit("keydown",t),this.emit("key",e.key,t),this.showCursor(),this.handler(e.key),this.cancel(t,!0)))},i.prototype.evaluateKeyEscapeSequence=function(t){var e={cancel:!1,key:void 0,scrollDisp:void 0},n=t.shiftKey<<0|t.altKey<<1|t.ctrlKey<<2|t.metaKey<<3;switch(t.keyCode){case 8:if(t.shiftKey){e.key=g.C0.BS;break}e.key=g.C0.DEL;break;case 9:if(t.shiftKey){e.key=g.C0.ESC+"[Z";break}e.key=g.C0.HT,e.cancel=!0;break;case 13:e.key=g.C0.CR,e.cancel=!0;break;case 27:e.key=g.C0.ESC,e.cancel=!0;break;case 37:n?(e.key=g.C0.ESC+"[1;"+(n+1)+"D",e.key==g.C0.ESC+"[1;3D"&&(e.key=this.browser.isMac?g.C0.ESC+"b":g.C0.ESC+"[1;5D")):this.applicationCursor?e.key=g.C0.ESC+"OD":e.key=g.C0.ESC+"[D";break;case 39:n?(e.key=g.C0.ESC+"[1;"+(n+1)+"C",e.key==g.C0.ESC+"[1;3C"&&(e.key=this.browser.isMac?g.C0.ESC+"f":g.C0.ESC+"[1;5C")):this.applicationCursor?e.key=g.C0.ESC+"OC":e.key=g.C0.ESC+"[C";break;case 38:n?(e.key=g.C0.ESC+"[1;"+(n+1)+"A",e.key==g.C0.ESC+"[1;3A"&&(e.key=g.C0.ESC+"[1;5A")):this.applicationCursor?e.key=g.C0.ESC+"OA":e.key=g.C0.ESC+"[A";break;case 40:n?(e.key=g.C0.ESC+"[1;"+(n+1)+"B",e.key==g.C0.ESC+"[1;3B"&&(e.key=g.C0.ESC+"[1;5B")):this.applicationCursor?e.key=g.C0.ESC+"OB":e.key=g.C0.ESC+"[B";break;case 45:t.shiftKey||t.ctrlKey||(e.key=g.C0.ESC+"[2~");break;case 46:n?e.key=g.C0.ESC+"[3;"+(n+1)+"~":e.key=g.C0.ESC+"[3~";break;case 36:n?e.key=g.C0.ESC+"[1;"+(n+1)+"H":this.applicationCursor?e.key=g.C0.ESC+"OH":e.key=g.C0.ESC+"[H";break;case 35:n?e.key=g.C0.ESC+"[1;"+(n+1)+"F":this.applicationCursor?e.key=g.C0.ESC+"OF":e.key=g.C0.ESC+"[F";break;case 33:t.shiftKey?e.scrollDisp=-(this.rows-1):e.key=g.C0.ESC+"[5~";break;case 34:t.shiftKey?e.scrollDisp=this.rows-1:e.key=g.C0.ESC+"[6~";break;case 112:n?e.key=g.C0.ESC+"[1;"+(n+1)+"P":e.key=g.C0.ESC+"OP";break;case 113:n?e.key=g.C0.ESC+"[1;"+(n+1)+"Q":e.key=g.C0.ESC+"OQ";break;case 114:n?e.key=g.C0.ESC+"[1;"+(n+1)+"R":e.key=g.C0.ESC+"OR";break;case 115:n?e.key=g.C0.ESC+"[1;"+(n+1)+"S":e.key=g.C0.ESC+"OS";break;case 116:n?e.key=g.C0.ESC+"[15;"+(n+1)+"~":e.key=g.C0.ESC+"[15~";break;case 117:n?e.key=g.C0.ESC+"[17;"+(n+1)+"~":e.key=g.C0.ESC+"[17~";break;case 118:n?e.key=g.C0.ESC+"[18;"+(n+1)+"~":e.key=g.C0.ESC+"[18~";break;case 119:n?e.key=g.C0.ESC+"[19;"+(n+1)+"~":e.key=g.C0.ESC+"[19~";break;case 120:n?e.key=g.C0.ESC+"[20;"+(n+1)+"~":e.key=g.C0.ESC+"[20~";break;case 121:n?e.key=g.C0.ESC+"[21;"+(n+1)+"~":e.key=g.C0.ESC+"[21~";break;case 122:n?e.key=g.C0.ESC+"[23;"+(n+1)+"~":e.key=g.C0.ESC+"[23~";break;case 123:n?e.key=g.C0.ESC+"[24;"+(n+1)+"~":e.key=g.C0.ESC+"[24~";break;default:!t.ctrlKey||t.shiftKey||t.altKey||t.metaKey?this.browser.isMac||!t.altKey||t.ctrlKey||t.metaKey||(t.keyCode>=65&&t.keyCode<=90?e.key=g.C0.ESC+String.fromCharCode(t.keyCode+32):192===t.keyCode?e.key=g.C0.ESC+"`":t.keyCode>=48&&t.keyCode<=57&&(e.key=g.C0.ESC+(t.keyCode-48))):t.keyCode>=65&&t.keyCode<=90?e.key=String.fromCharCode(t.keyCode-64):32===t.keyCode?e.key=String.fromCharCode(0):t.keyCode>=51&&t.keyCode<=55?e.key=String.fromCharCode(t.keyCode-51+27):56===t.keyCode?e.key=String.fromCharCode(127):219===t.keyCode?e.key=String.fromCharCode(27):220===t.keyCode?e.key=String.fromCharCode(28):221===t.keyCode&&(e.key=String.fromCharCode(29))}return e},i.prototype.setgLevel=function(t){this.glevel=t,this.charset=this.charsets[t]},i.prototype.setgCharset=function(t,e){this.charsets[t]=e,this.glevel===t&&(this.charset=e)},i.prototype.keyPress=function(t){var e;if(this.cancel(t),t.charCode)e=t.charCode;else if(null==t.which)e=t.keyCode;else{if(0===t.which||0===t.charCode)return!1;e=t.which}return!(!e||(t.altKey||t.ctrlKey||t.metaKey)&&!l(this,t))&&(e=String.fromCharCode(e),this.emit("keypress",e,t),this.emit("key",e,t),this.showCursor(),this.handler(e),!1)},i.prototype.send=function(t){var e=this;this.queue||setTimeout(function(){e.handler(e.queue),e.queue=""},1),this.queue+=t},i.prototype.bell=function(){if(this.visualBell){var t=this;this.element.style.borderColor="white",setTimeout(function(){t.element.style.borderColor=""},10),this.popOnBell&&this.focus()}},i.prototype.log=function(){if(this.debug&&this.context.console&&this.context.console.log){var t=Array.prototype.slice.call(arguments);this.context.console.log.apply(this.context.console,t)}},i.prototype.error=function(){if(this.debug&&this.context.console&&this.context.console.error){var t=Array.prototype.slice.call(arguments);this.context.console.error.apply(this.context.console,t)}},i.prototype.resize=function(t,e){if(!isNaN(t)&&!isNaN(e)){var n,r,i,o,a;if(t!==this.cols||e!==this.rows){if(t<1&&(t=1),e<1&&(e=1),i=this.cols,it;)this.lines.get(r).pop();if(this.cols=t,this.setupStops(this.cols),i=this.rows,a=0,i0&&this.lines.length<=this.ybase+this.y+a+1?(this.ybase--,a++,this.ydisp>0&&this.ydisp--):this.lines.push(this.blankLine())),this.children.lengthe;)if(this.lines.length>e+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++)),this.children.length>e){if(n=this.children.shift(),!n)continue;n.parentNode.removeChild(n)}this.rows=e,this.y>=e&&(this.y=e-1),a&&(this.y+=a),this.x>=t&&(this.x=t-1),this.scrollTop=0,this.scrollBottom=e-1,this.charMeasure.measure(),this.refresh(0,this.rows-1),this.normal=null,this.geometry=[this.cols,this.rows],this.emit("resize",{terminal:this,cols:t,rows:e})}}},i.prototype.updateRange=function(t){tthis.refreshEnd&&(this.refreshEnd=t)},i.prototype.maxRange=function(){this.refreshStart=0,this.refreshEnd=this.rows-1},i.prototype.setupStops=function(t){for(null!=t?this.tabs[t]||(t=this.prevStop(t)):(this.tabs={},t=0);t0;);return t>=this.cols?this.cols-1:t<0?0:t},i.prototype.nextStop=function(t){for(null==t&&(t=this.x);!this.tabs[++t]&&t=this.cols?this.cols-1:t<0?0:t},i.prototype.eraseRight=function(t,e){var n=this.lines.get(this.ybase+e);if(n){for(var r=[this.eraseAttr()," ",1];tthis.scrollBottom&&(this.y--,this.scroll()),this.x>=this.cols&&this.x--},i.prototype.reverseIndex=function(){this.y===this.scrollTop?(this.lines.shiftElements(this.y+this.ybase,this.rows-1,1),this.lines.set(this.y+this.ybase,this.blankLine(!0)),this.updateRange(this.scrollTop),this.updateRange(this.scrollBottom)):this.y--},i.prototype.reset=function(){this.options.rows=this.rows,this.options.cols=this.cols;var t=this.customKeydownHandler;i.call(this,this.options),this.customKeydownHandler=t,this.refresh(0,this.rows-1),this.viewport.syncScrollArea()},i.prototype.tabSet=function(){this.tabs[this.x]=!0},i.prototype.matchColor=c,c._cache={},c.distance=function(t,e,n,r,i,o){return Math.pow(30*(t-r),2)+Math.pow(59*(e-i),2)+Math.pow(11*(n-o),2)},i.EventEmitter=m.EventEmitter,i.inherits=u,i.on=o,i.off=a,i.cancel=s,n.exports=i},{"./CompositionHelper":2,"./EscapeSequences":3,"./EventEmitter":4,"./InputHandler":5,"./Linkifier":6,"./Parser":7,"./Renderer":8,"./Viewport":9,"./handlers/Clipboard":10,"./utils/Browser":11,"./utils/CharMeasure":12,"./utils/CircularList":13}]},{},[15])(15)})},,,,,,,,,,,,,,,function(t,e,n){t.exports=n(438)},function(t,e,n){"use strict";function r(t){var e="transition"+t+"Timeout",n="transition"+t;return function(t){if(t[n]){if(null==t[e])return new Error(e+" wasn't supplied to ReactCSSTransitionGroup: this can cause unreliable animations and won't be supported in a future version of React. See https://fb.me/react-animation-transition-group-timeout for more information.");if("number"!=typeof t[e])return new Error(e+" must be a number (in milliseconds)")}}}var i=n(4),o=n(3),a=n(439),s=n(441),u=o.createClass({displayName:"ReactCSSTransitionGroup",propTypes:{transitionName:s.propTypes.name,transitionAppear:o.PropTypes.bool,transitionEnter:o.PropTypes.bool,transitionLeave:o.PropTypes.bool,transitionAppearTimeout:r("Appear"),transitionEnterTimeout:r("Enter"),transitionLeaveTimeout:r("Leave")},getDefaultProps:function(){return{transitionAppear:!1,transitionEnter:!0,transitionLeave:!0}},_wrapChild:function(t){return o.createElement(s,{name:this.props.transitionName,appear:this.props.transitionAppear,enter:this.props.transitionEnter,leave:this.props.transitionLeave,appearTimeout:this.props.transitionAppearTimeout,enterTimeout:this.props.transitionEnterTimeout,leaveTimeout:this.props.transitionLeaveTimeout},t)},render:function(){return o.createElement(a,i({},this.props,{childFactory:this._wrapChild}))}});t.exports=u},function(t,e,n){"use strict";var r=n(4),i=n(3),o=(n(110),n(440)),a=n(12),s=i.createClass({displayName:"ReactTransitionGroup",propTypes:{component:i.PropTypes.any,childFactory:i.PropTypes.func},getDefaultProps:function(){return{component:"span",childFactory:a.thatReturnsArgument}},getInitialState:function(){return{children:o.getChildMapping(this.props.children)}},componentWillMount:function(){this.currentlyTransitioningKeys={},this.keysToEnter=[],this.keysToLeave=[]},componentDidMount:function(){var t=this.state.children;for(var e in t)t[e]&&this.performAppear(e)},componentWillReceiveProps:function(t){var e;e=o.getChildMapping(t.children);var n=this.state.children;this.setState({children:o.mergeChildMappings(n,e)});var r;for(r in e){var i=n&&n.hasOwnProperty(r);!e[r]||i||this.currentlyTransitioningKeys[r]||this.keysToEnter.push(r)}for(r in n){var a=e&&e.hasOwnProperty(r);!n[r]||a||this.currentlyTransitioningKeys[r]||this.keysToLeave.push(r)}},componentDidUpdate:function(){var t=this.keysToEnter;this.keysToEnter=[],t.forEach(this.performEnter);var e=this.keysToLeave;this.keysToLeave=[],e.forEach(this.performLeave)},performAppear:function(t){this.currentlyTransitioningKeys[t]=!0;var e=this.refs[t];e.componentWillAppear?e.componentWillAppear(this._handleDoneAppearing.bind(this,t)):this._handleDoneAppearing(t)},_handleDoneAppearing:function(t){var e=this.refs[t];e.componentDidAppear&&e.componentDidAppear(),delete this.currentlyTransitioningKeys[t];var n;n=o.getChildMapping(this.props.children),n&&n.hasOwnProperty(t)||this.performLeave(t)},performEnter:function(t){this.currentlyTransitioningKeys[t]=!0;var e=this.refs[t];e.componentWillEnter?e.componentWillEnter(this._handleDoneEntering.bind(this,t)):this._handleDoneEntering(t)},_handleDoneEntering:function(t){var e=this.refs[t];e.componentDidEnter&&e.componentDidEnter(),delete this.currentlyTransitioningKeys[t];var n;n=o.getChildMapping(this.props.children),n&&n.hasOwnProperty(t)||this.performLeave(t)},performLeave:function(t){this.currentlyTransitioningKeys[t]=!0;var e=this.refs[t];e.componentWillLeave?e.componentWillLeave(this._handleDoneLeaving.bind(this,t)):this._handleDoneLeaving(t)},_handleDoneLeaving:function(t){var e=this.refs[t];e.componentDidLeave&&e.componentDidLeave(),delete this.currentlyTransitioningKeys[t];var n;n=o.getChildMapping(this.props.children),n&&n.hasOwnProperty(t)?this.performEnter(t):this.setState(function(e){var n=r({},e.children);return delete n[t],{children:n}})},render:function(){var t=[];for(var e in this.state.children){var n=this.state.children[e];n&&t.push(i.cloneElement(this.props.childFactory(n),{ref:e,key:e}))}var o=r({},this.props);return delete o.transitionLeave,delete o.transitionName,delete o.transitionAppear,delete o.transitionEnter,delete o.childFactory,delete o.transitionLeaveTimeout,delete o.transitionEnterTimeout,delete o.transitionAppearTimeout,delete o.component,i.createElement(this.props.component,o,t)}});t.exports=s},function(t,e,n){"use strict";var r=n(122),i={getChildMapping:function(t,e){return t?r(t):t},mergeChildMappings:function(t,e){function n(n){return e.hasOwnProperty(n)?e[n]:t[n]}t=t||{},e=e||{};var r={},i=[];for(var o in t)e.hasOwnProperty(o)?i.length&&(r[o]=i,i=[]):i.push(o);var a,s={};for(var u in e){if(r.hasOwnProperty(u))for(a=0;a-1},matchesSelector:function(t,e){var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.msMatchesSelector||function(e){return r(t,e)};return n.call(t,e)}};t.exports=o},function(t,e,n){"use strict";function r(){var t=s("animationend"),e=s("transitionend");t&&u.push(t),e&&u.push(e)}function i(t,e,n){t.addEventListener(e,n,!1)}function o(t,e,n){t.removeEventListener(e,n,!1)}var a=n(46),s=n(100),u=[];a.canUseDOM&&r();var l={addEndEventListener:function(t,e){return 0===u.length?void window.setTimeout(e,0):void u.forEach(function(n){i(t,n,e)})},removeEndEventListener:function(t,e){0!==u.length&&u.forEach(function(n){o(t,n,e)})}};t.exports=l},,,,,,,,,,,,,,function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.RootCloseWrapper=e.Transition=e.Position=e.Portal=e.Overlay=e.Modal=e.AutoAffix=e.Affix=void 0;var i=n(458),o=r(i),a=n(484),s=r(a),u=n(488),l=r(u),c=n(501),d=r(c),h=n(490),f=r(h),p=n(502),m=r(p),_=n(507),y=r(_),v=n(506),g=r(v);e.Affix=o.default,e.AutoAffix=s.default,e.Modal=l.default,e.Overlay=d.default,e.Portal=f.default,e.Position=m.default,e.Transition=y.default,e.RootCloseWrapper=g.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var s=Object.assign||function(t){for(var e=1;ethis.getPositionTopMax()?void("bottom"===this.state.affixed?this.updateStateAtBottom():this.setState({affixed:"bottom",position:"absolute",top:null},function(){t._isMounted&&t.updateStateAtBottom()})):void this.updateState("affix","fixed",r)}}},{key:"getPositionTopMax",value:function(){var t=(0,x.default)((0,C.default)(this)),e=(0,h.default)(k.default.findDOMNode(this));return t-e-this.props.offsetBottom}},{key:"updateState",value:function(t,e,n){var r=this;if(t!==this.state.affixed||e!==this.state.position||n!==this.state.top){var i="affix"===t?"":t.charAt(0).toUpperCase()+t.substr(1);this.props["onAffix"+i]&&this.props["onAffix"+i](),this.setState({affixed:t,position:e,top:n},function(){r.props["onAffixed"+i]&&r.props["onAffixed"+i]()})}}},{key:"updateStateAtBottom",value:function(){var t=this.getPositionTopMax(),e=(0,_.default)(k.default.findDOMNode(this)),n=(0,p.default)(e).top;this.updateState("bottom","absolute",t-n)}},{key:"render",value:function(){var t=w.default.Children.only(this.props.children),e=t.props,n=e.className,r=e.style,i=this.state,o=i.affixed,a=i.position,u=i.top,l={position:a,top:u},d=void 0,h=void 0;return"top"===o?(d=this.props.topClassName,h=this.props.topStyle):"bottom"===o?(d=this.props.bottomClassName,h=this.props.bottomStyle):(d=this.props.affixClassName,h=this.props.affixStyle),w.default.cloneElement(t,{className:(0,c.default)(d,n),style:s({},l,h,r)})}}]),e}(w.default.Component);O.propTypes={offsetTop:w.default.PropTypes.number,viewportOffsetTop:w.default.PropTypes.number,offsetBottom:w.default.PropTypes.number,topClassName:w.default.PropTypes.string,topStyle:w.default.PropTypes.object,affixClassName:w.default.PropTypes.string,affixStyle:w.default.PropTypes.object,bottomClassName:w.default.PropTypes.string,bottomStyle:w.default.PropTypes.object,onAffix:w.default.PropTypes.func,onAffixed:w.default.PropTypes.func,onAffixTop:w.default.PropTypes.func,onAffixedTop:w.default.PropTypes.func,onAffixBottom:w.default.PropTypes.func,onAffixedBottom:w.default.PropTypes.func},O.defaultProps={offsetTop:0,viewportOffsetTop:null,offsetBottom:0},e.default=O,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){var n=(0,u.default)(t);return n?n.innerHeight:e?t.clientHeight:(0,a.default)(t).height}Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var o=n(460),a=r(o),s=n(463),u=r(s);t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){var e=(0,c.default)(t),n=(0,u.default)(e),r=e&&e.documentElement,i={top:0,left:0,height:0,width:0};if(e)return(0,a.default)(r,t)?(void 0!==t.getBoundingClientRect&&(i=t.getBoundingClientRect()),i={top:i.top+(n.pageYOffset||r.scrollTop)-(r.clientTop||0),left:i.left+(n.pageXOffset||r.scrollLeft)-(r.clientLeft||0),width:(null==i.width?t.offsetWidth:i.width)||0,height:(null==i.height?t.offsetHeight:i.height)||0}):i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var o=n(461),a=r(o),s=n(463),u=r(s),l=n(464),c=r(l);t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){if(e)do if(e===t)return!0;while(e=e.parentNode);return!1}Object.defineProperty(e,"__esModule",{value:!0});var o=n(462),a=r(o);e.default=function(){return a.default?function(t,e){return t.contains?t.contains(e):t.compareDocumentPosition?t===e||!!(16&t.compareDocumentPosition(e)):i(t,e)}:i}(),t.exports=e.default},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=!("undefined"==typeof window||!window.document||!window.document.createElement),t.exports=e.default},function(t,e){"use strict";function n(t){return t===t.window?t:9===t.nodeType&&(t.defaultView||t.parentWindow)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n,t.exports=e.default},function(t,e){"use strict";function n(t){return t&&t.ownerDocument||document}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return t.nodeName&&t.nodeName.toLowerCase()}function o(t){for(var e=(0,s.default)(t),n=t&&t.offsetParent;n&&"html"!==i(t)&&"static"===(0,l.default)(n,"position");)n=n.offsetParent;return n||e.documentElement}Object.defineProperty(e,"__esModule",{value:!0}),e.default=o;var a=n(464),s=r(a),u=n(466),l=r(u);t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e,n){var r="",i="",o=e;if("string"==typeof e){if(void 0===n)return t.style[(0,a.default)(e)]||(0,c.default)(t).getPropertyValue((0,u.default)(e));(o={})[e]=n}Object.keys(o).forEach(function(e){var n=o[e];n||0===n?(0,m.default)(e)?i+=e+"("+n+") ":r+=(0,u.default)(e)+": "+n+";":(0,h.default)(t,(0,u.default)(e))}),i&&(r+=f.transform+": "+i+";"),t.style.cssText+=";"+r}Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var o=n(467),a=r(o),s=n(469),u=r(s),l=n(471),c=r(l),d=n(472),h=r(d),f=n(473),p=n(474),m=r(p);t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return(0,a.default)(t.replace(s,"ms-"))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var o=n(468),a=r(o),s=/^-ms-/;t.exports=e.default},function(t,e){"use strict";function n(t){return t.replace(r,function(t,e){return e.toUpperCase()})}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n;var r=/-(.)/g;t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return(0,a.default)(t).replace(s,"-ms-")}Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var o=n(470),a=r(o),s=/^ms-/;t.exports=e.default},function(t,e){"use strict";function n(t){return t.replace(r,"-$1").toLowerCase()}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n;var r=/([A-Z])/g;t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){if(!t)throw new TypeError("No Element passed to `getComputedStyle()`");var e=t.ownerDocument;return"defaultView"in e?e.defaultView.opener?t.ownerDocument.defaultView.getComputedStyle(t,null):window.getComputedStyle(t,null):{getPropertyValue:function(e){var n=t.style;e=(0,a.default)(e),"float"==e&&(e="styleFloat");var r=t.currentStyle[e]||null;if(null==r&&n&&n[e]&&(r=n[e]),u.test(r)&&!s.test(e)){var i=n.left,o=t.runtimeStyle,l=o&&o.left;l&&(o.left=t.currentStyle.left),n.left="fontSize"===e?"1em":r,r=n.pixelLeft+"px",n.left=i,l&&(o.left=l)}return r}}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var o=n(467),a=r(o),s=/^(top|right|bottom|left)$/,u=/^([+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/i;t.exports=e.default},function(t,e){"use strict";function n(t,e){return"removeProperty"in t.style?t.style.removeProperty(e):t.style.removeAttribute(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(){for(var t=document.createElement("div").style,e={O:function(t){return"o"+t.toLowerCase()},Moz:function(t){return t.toLowerCase()},Webkit:function(t){return"webkit"+t},ms:function(t){return"MS"+t}},n=Object.keys(e),r=void 0,i=void 0,o="",a=0;a=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var u=Object.assign||function(t){for(var e=1;e>",u=a||r;if(null==n[r])return e?new Error("Required "+o+" `"+u+"` was not specified "+("in `"+s+"`.")):null;for(var l=arguments.length,c=Array(l>6?l-6:0),d=6;d0&&void 0!==arguments[0]?arguments[0]:{},n=e.hideSiblingNodes,r=void 0===n||n,o=e.handleContainerOverflow,a=void 0===o||o;i(this,t),this.hideSiblingNodes=r,this.handleContainerOverflow=a,this.modals=[],this.containers=[],this.data=[]}return l(t,[{key:"add",value:function(t,e,n){var r=this.modals.indexOf(t),i=this.containers.indexOf(e);if(r!==-1)return r;if(r=this.modals.length,this.modals.push(t),this.hideSiblingNodes&&(0,v.hideSiblings)(e,t.mountNode),i!==-1)return this.data[i].modals.push(t),r;var o={modals:[t],classes:n?n.split(/\s+/):[],overflowing:(0,y.default)(e)};return this.handleContainerOverflow&&s(o,e),o.classes.forEach(f.default.addClass.bind(null,e)),this.containers.push(e),this.data.push(o),r}},{key:"remove",value:function(t){var e=this.modals.indexOf(t);if(e!==-1){var n=a(this.data,t),r=this.data[n],i=this.containers[n];r.modals.splice(r.modals.indexOf(t),1),this.modals.splice(e,1),0===r.modals.length?(r.classes.forEach(f.default.removeClass.bind(null,i)),this.handleContainerOverflow&&u(r,i),this.hideSiblingNodes&&(0,v.showSiblings)(i,t.mountNode),this.containers.splice(n,1),this.data.splice(n,1)):this.hideSiblingNodes&&(0,v.ariaHidden)(!1,r.modals[r.modals.length-1].mountNode)}}},{key:"isTopModal",value:function(t){return!!this.modals.length&&this.modals[this.modals.length-1]===t}}]),t}();e.default=g,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.hasClass=e.removeClass=e.addClass=void 0;var i=n(493),o=r(i),a=n(495),s=r(a),u=n(494),l=r(u);e.addClass=o.default,e.removeClass=s.default,e.hasClass=l.default,e.default={addClass:o.default,removeClass:s.default,hasClass:l.default}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){t.classList?t.classList.add(e):(0,a.default)(t,e)||("string"==typeof t.className?t.className=t.className+" "+e:t.setAttribute("class",(t.className&&t.className.baseVal||"")+" "+e))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var o=n(494),a=r(o);t.exports=e.default},function(t,e){"use strict";function n(t,e){return t.classList?!!e&&t.classList.contains(e):(" "+(t.className.baseVal||t.className)+" ").indexOf(" "+e+" ")!==-1}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n,t.exports=e.default},function(t,e){"use strict";function n(t,e){return t.replace(new RegExp("(^|\\s)"+e+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}t.exports=function(t,e){t.classList?t.classList.remove(e):"string"==typeof t.className?t.className=n(t.className,e):t.setAttribute("class",n(t.className&&t.className.baseVal||"",e))}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){if((!a&&0!==a||t)&&o.default){var e=document.createElement("div");e.style.position="absolute",e.style.top="-9999px",e.style.width="50px",e.style.height="50px",e.style.overflow="scroll",document.body.appendChild(e),a=e.offsetWidth-e.clientWidth,document.body.removeChild(e)}return a};var i=n(462),o=r(i),a=void 0;t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return t&&"body"===t.tagName.toLowerCase()}function o(t){var e=(0,c.default)(t),n=(0,u.default)(e),r=n.innerWidth;if(!r){var i=e.documentElement.getBoundingClientRect();r=i.right-Math.abs(i.left)}return e.body.clientWidtht.clientHeight}Object.defineProperty(e,"__esModule",{value:!0}),e.default=a;var s=n(463),u=r(s),l=n(464),c=r(l);t.exports=e.default},function(t,e){"use strict";function n(t,e){e&&(t?e.setAttribute("aria-hidden","true"):e.removeAttribute("aria-hidden"))}function r(t,e){s(t,e,function(t){return n(!0,t)})}function i(t,e){s(t,e,function(t){return n(!1,t)})}Object.defineProperty(e,"__esModule",{value:!0}),e.ariaHidden=n,e.hideSiblings=r,e.showSiblings=i;var o=["template","script","style"],a=function(t){var e=t.nodeType,n=t.tagName;return 1===e&&o.indexOf(n.toLowerCase())===-1},s=function(t,e,n){e=[].concat(e),[].forEach.call(t.children,function(t){e.indexOf(t)===-1&&a(t)&&n(t)})}},function(t,e){"use strict";function n(t){var e=!document.addEventListener,n=void 0;return e?(document.attachEvent("onfocusin",t),n=function(){return document.detachEvent("onfocusin",t)}):(document.addEventListener("focus",t,!0),n=function(){return document.removeEventListener("focus",t,!0)}),{remove:n}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:(0,a.default)();try{return t.activeElement}catch(t){}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var o=n(464),a=r(o);t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){var n={};for(var r in t)e.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var u=Object.assign||function(t){for(var e=1;e1?n-1:0),i=1;i=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var u=Object.assign||function(t){for(var e=1;es?s-l:0}function a(t,e,n,r){var o=i(n),a=o.width,s=t-r,u=t+r+e;return s<0?-s:u>a?a-u:0}function s(t,e,n,r,i){var s="BODY"===r.tagName?(0,l.default)(n):(0,d.default)(n,r),u=(0,l.default)(e),c=u.height,h=u.width,f=void 0,p=void 0,m=void 0,_=void 0;if("left"===t||"right"===t){p=s.top+(s.height-c)/2,f="left"===t?s.left-h:s.left+s.width;var y=o(p,c,r,i);p+=y,_=50*(1-2*y/c)+"%",m=void 0}else{if("top"!==t&&"bottom"!==t)throw new Error('calcOverlayPosition(): No such placement of "'+t+'" found.');f=s.left+(s.width-h)/2,p="top"===t?s.top-c:s.top+s.height;var v=a(f,h,r,i);f+=v,m=50*(1-2*v/h)+"%",_=void 0}return{positionLeft:f,positionTop:p,arrowOffsetLeft:m,arrowOffsetTop:_}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=s;var u=n(460),l=r(u),c=n(504),d=r(c),h=n(475),f=r(h),p=n(481),m=r(p);t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return t.nodeName&&t.nodeName.toLowerCase()}function o(t,e){var n,r={top:0,left:0};return"fixed"===(0,_.default)(t,"position")?n=t.getBoundingClientRect():(e=e||(0,c.default)(t),n=(0,u.default)(t),"html"!==i(e)&&(r=(0,u.default)(e)),r.top+=parseInt((0,_.default)(e,"borderTopWidth"),10)-(0,h.default)(e)||0,r.left+=parseInt((0,_.default)(e,"borderLeftWidth"),10)-(0,p.default)(e)||0),a({},n,{top:n.top-r.top-(parseInt((0,_.default)(t,"marginTop"),10)||0),left:n.left-r.left-(parseInt((0,_.default)(t,"marginLeft"),10)||0)})}Object.defineProperty(e,"__esModule",{value:!0});var a=Object.assign||function(t){for(var e=1;e=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function u(){}Object.defineProperty(e,"__esModule",{value:!0}),e.EXITING=e.ENTERED=e.ENTERING=e.EXITED=e.UNMOUNTED=void 0;var l=Object.assign||function(t){for(var e=1;e=0&&n.splice(r,1),t.className=n.join(" ")}e.add=function(t,e){t.classList?t.classList.add(e):n(t,e)},e.remove=function(t,e){t.classList?t.classList.remove(e):r(t,e)},e.list=function(t){return t.classList?Array.prototype.slice.apply(t.classList):t.className.split(" ")}},function(t,e){"use strict";function n(t,e){return window.getComputedStyle(t)[e]}function r(t,e,n){return"number"==typeof n&&(n=n.toString()+"px"),t.style[e]=n,t}function i(t,e){for(var n in e){var r=e[n];"number"==typeof r&&(r=r.toString()+"px"),t.style[n]=r}return t}var o={};o.e=function(t,e){var n=document.createElement(t);return n.className=e,n},o.appendTo=function(t,e){return e.appendChild(t),t},o.css=function(t,e,o){return"object"==typeof e?i(t,e):"undefined"==typeof o?n(t,e):r(t,e,o)},o.matches=function(t,e){return"undefined"!=typeof t.matches?t.matches(e):"undefined"!=typeof t.matchesSelector?t.matchesSelector(e):"undefined"!=typeof t.webkitMatchesSelector?t.webkitMatchesSelector(e):"undefined"!=typeof t.mozMatchesSelector?t.mozMatchesSelector(e):"undefined"!=typeof t.msMatchesSelector?t.msMatchesSelector(e):void 0},o.remove=function(t){"undefined"!=typeof t.remove?t.remove():t.parentNode&&t.parentNode.removeChild(t)},o.queryChildren=function(t,e){return Array.prototype.filter.call(t.childNodes,function(t){return o.matches(t,e)})},t.exports=o},function(t,e,n){"use strict";function r(t){function e(){u.add(t,"ps-focus")}function n(){u.remove(t,"ps-focus")}var r=this;r.settings=s.clone(l),r.containerWidth=null,r.containerHeight=null,r.contentWidth=null,r.contentHeight=null,r.isRtl="rtl"===c.css(t,"direction"),r.isNegativeScroll=function(){var e=t.scrollLeft,n=null;return t.scrollLeft=-1,n=t.scrollLeft<0,t.scrollLeft=e,n}(),r.negativeScrollAdjustment=r.isNegativeScroll?t.scrollWidth-t.clientWidth:0,r.event=new d,r.ownerDocument=t.ownerDocument||document,r.scrollbarXRail=c.appendTo(c.e("div","ps-scrollbar-x-rail"),t),r.scrollbarX=c.appendTo(c.e("div","ps-scrollbar-x"),r.scrollbarXRail),r.scrollbarX.setAttribute("tabindex",0),r.event.bind(r.scrollbarX,"focus",e),r.event.bind(r.scrollbarX,"blur",n),r.scrollbarXActive=null,r.scrollbarXWidth=null,r.scrollbarXLeft=null,r.scrollbarXBottom=s.toInt(c.css(r.scrollbarXRail,"bottom")),r.isScrollbarXUsingBottom=r.scrollbarXBottom===r.scrollbarXBottom,r.scrollbarXTop=r.isScrollbarXUsingBottom?null:s.toInt(c.css(r.scrollbarXRail,"top")),r.railBorderXWidth=s.toInt(c.css(r.scrollbarXRail,"borderLeftWidth"))+s.toInt(c.css(r.scrollbarXRail,"borderRightWidth")),c.css(r.scrollbarXRail,"display","block"),r.railXMarginWidth=s.toInt(c.css(r.scrollbarXRail,"marginLeft"))+s.toInt(c.css(r.scrollbarXRail,"marginRight")),c.css(r.scrollbarXRail,"display",""),r.railXWidth=null,r.railXRatio=null,r.scrollbarYRail=c.appendTo(c.e("div","ps-scrollbar-y-rail"),t),r.scrollbarY=c.appendTo(c.e("div","ps-scrollbar-y"),r.scrollbarYRail),r.scrollbarY.setAttribute("tabindex",0),r.event.bind(r.scrollbarY,"focus",e),r.event.bind(r.scrollbarY,"blur",n),r.scrollbarYActive=null,r.scrollbarYHeight=null,r.scrollbarYTop=null,r.scrollbarYRight=s.toInt(c.css(r.scrollbarYRail,"right")),r.isScrollbarYUsingRight=r.scrollbarYRight===r.scrollbarYRight,r.scrollbarYLeft=r.isScrollbarYUsingRight?null:s.toInt(c.css(r.scrollbarYRail,"left")),r.scrollbarYOuterWidth=r.isRtl?s.outerWidth(r.scrollbarY):null,r.railBorderYWidth=s.toInt(c.css(r.scrollbarYRail,"borderTopWidth"))+s.toInt(c.css(r.scrollbarYRail,"borderBottomWidth")),c.css(r.scrollbarYRail,"display","block"),r.railYMarginHeight=s.toInt(c.css(r.scrollbarYRail,"marginTop"))+s.toInt(c.css(r.scrollbarYRail,"marginBottom")),c.css(r.scrollbarYRail,"display",""),r.railYHeight=null,r.railYRatio=null}function i(t){return t.getAttribute("data-ps-id")}function o(t,e){t.setAttribute("data-ps-id",e)}function a(t){t.removeAttribute("data-ps-id")}var s=n(516),u=n(517),l=n(520),c=n(518),d=n(521),h=n(522),f={};e.add=function(t){var e=h();return o(t,e),f[e]=new r(t),f[e]},e.remove=function(t){delete f[i(t)],a(t)},e.get=function(t){return f[i(t)]}},function(t,e){"use strict";t.exports={handlers:["click-rail","drag-scrollbar","keyboard","wheel","touch"],maxScrollbarLength:null,minScrollbarLength:null,scrollXMarginOffset:0,scrollYMarginOffset:0,suppressScrollX:!1,suppressScrollY:!1,swipePropagation:!0,useBothWheelAxes:!1,wheelPropagation:!1,wheelSpeed:1,theme:"default"}},function(t,e){"use strict";var n=function(t){this.element=t,this.events={}};n.prototype.bind=function(t,e){"undefined"==typeof this.events[t]&&(this.events[t]=[]),this.events[t].push(e),this.element.addEventListener(t,e,!1)},n.prototype.unbind=function(t,e){var n="undefined"!=typeof e;this.events[t]=this.events[t].filter(function(r){return!(!n||r===e)||(this.element.removeEventListener(t,r,!1),!1)},this)},n.prototype.unbindAll=function(){for(var t in this.events)this.unbind(t)};var r=function(){this.eventElements=[]};r.prototype.eventElement=function(t){var e=this.eventElements.filter(function(e){return e.element===t})[0];return"undefined"==typeof e&&(e=new n(t),this.eventElements.push(e)),e},r.prototype.bind=function(t,e,n){this.eventElement(t).bind(e,n)},r.prototype.unbind=function(t,e,n){this.eventElement(t).unbind(e,n)},r.prototype.unbindAll=function(){for(var t=0;t0&&n.forEach(function(t){s.remove(t)}),s.appendTo(e.scrollbarXRail,t)),t.contains(e.scrollbarYRail)||(n=s.queryChildren(t,".ps-scrollbar-y-rail"),n.length>0&&n.forEach(function(t){s.remove(t)}),s.appendTo(e.scrollbarYRail,t)),!e.settings.suppressScrollX&&e.containerWidth+e.settings.scrollXMarginOffset=e.railXWidth-e.scrollbarXWidth&&(e.scrollbarXLeft=e.railXWidth-e.scrollbarXWidth),e.scrollbarYTop>=e.railYHeight-e.scrollbarYHeight&&(e.scrollbarYTop=e.railYHeight-e.scrollbarYHeight),i(t,e),e.scrollbarXActive?a.add(t,"ps-active-x"):(a.remove(t,"ps-active-x"),e.scrollbarXWidth=0,e.scrollbarXLeft=0,l(t,"left",0)),e.scrollbarYActive?a.add(t,"ps-active-y"):(a.remove(t,"ps-active-y"),e.scrollbarYHeight=0,e.scrollbarYTop=0,l(t,"top",0))}},function(t,e,n){"use strict";var r,i,o=n(519),a=function(t){var e=document.createEvent("Event");return e.initEvent(t,!0,!0),e};t.exports=function(t,e,n){if("undefined"==typeof t)throw"You must provide an element to the update-scroll function";if("undefined"==typeof e)throw"You must provide an axis to the update-scroll function";if("undefined"==typeof n)throw"You must provide a value to the update-scroll function";"top"===e&&n<=0&&(t.scrollTop=n=0,t.dispatchEvent(a("ps-y-reach-start"))),"left"===e&&n<=0&&(t.scrollLeft=n=0,t.dispatchEvent(a("ps-x-reach-start")));var s=o.get(t);"top"===e&&n>=s.contentHeight-s.containerHeight&&(n=s.contentHeight-s.containerHeight,n-t.scrollTop<=1?n=t.scrollTop:t.scrollTop=n,t.dispatchEvent(a("ps-y-reach-end"))),"left"===e&&n>=s.contentWidth-s.containerWidth&&(n=s.contentWidth-s.containerWidth,n-t.scrollLeft<=1?n=t.scrollLeft:t.scrollLeft=n,t.dispatchEvent(a("ps-x-reach-end"))),r||(r=t.scrollTop),i||(i=t.scrollLeft),"top"===e&&nr&&t.dispatchEvent(a("ps-scroll-down")),"left"===e&&ni&&t.dispatchEvent(a("ps-scroll-right")),"top"===e&&(t.scrollTop=r=n,t.dispatchEvent(a("ps-scroll-y"))),"left"===e&&(t.scrollLeft=i=n,t.dispatchEvent(a("ps-scroll-x")))}},function(t,e,n){"use strict";function r(t,e){function n(t){return t.getBoundingClientRect()}var r=function(t){t.stopPropagation()};e.event.bind(e.scrollbarY,"click",r),e.event.bind(e.scrollbarYRail,"click",function(r){var i=r.pageY-window.pageYOffset-n(e.scrollbarYRail).top,s=i>e.scrollbarYTop?1:-1;a(t,"top",t.scrollTop+s*e.containerHeight),o(t),r.stopPropagation()}),e.event.bind(e.scrollbarX,"click",r),e.event.bind(e.scrollbarXRail,"click",function(r){var i=r.pageX-window.pageXOffset-n(e.scrollbarXRail).left,s=i>e.scrollbarXLeft?1:-1;a(t,"left",t.scrollLeft+s*e.containerWidth),o(t),r.stopPropagation()})}var i=n(519),o=n(524),a=n(525);t.exports=function(t){var e=i.get(t);r(t,e)}},function(t,e,n){"use strict";function r(t,e){function n(n){var i=r+n*e.railXRatio,a=Math.max(0,e.scrollbarXRail.getBoundingClientRect().left)+e.railXRatio*(e.railXWidth-e.scrollbarXWidth);i<0?e.scrollbarXLeft=0:i>a?e.scrollbarXLeft=a:e.scrollbarXLeft=i;var s=o.toInt(e.scrollbarXLeft*(e.contentWidth-e.containerWidth)/(e.containerWidth-e.railXRatio*e.scrollbarXWidth))-e.negativeScrollAdjustment;l(t,"left",s)}var r=null,i=null,s=function(e){n(e.pageX-i),u(t),e.stopPropagation(),e.preventDefault()},c=function(){o.stopScrolling(t,"x"),e.event.unbind(e.ownerDocument,"mousemove",s)};e.event.bind(e.scrollbarX,"mousedown",function(n){i=n.pageX,r=o.toInt(a.css(e.scrollbarX,"left"))*e.railXRatio,o.startScrolling(t,"x"),e.event.bind(e.ownerDocument,"mousemove",s),e.event.once(e.ownerDocument,"mouseup",c),n.stopPropagation(),n.preventDefault()})}function i(t,e){function n(n){var i=r+n*e.railYRatio,a=Math.max(0,e.scrollbarYRail.getBoundingClientRect().top)+e.railYRatio*(e.railYHeight-e.scrollbarYHeight);i<0?e.scrollbarYTop=0:i>a?e.scrollbarYTop=a:e.scrollbarYTop=i;var s=o.toInt(e.scrollbarYTop*(e.contentHeight-e.containerHeight)/(e.containerHeight-e.railYRatio*e.scrollbarYHeight));l(t,"top",s)}var r=null,i=null,s=function(e){n(e.pageY-i),u(t),e.stopPropagation(),e.preventDefault()},c=function(){o.stopScrolling(t,"y"),e.event.unbind(e.ownerDocument,"mousemove",s)};e.event.bind(e.scrollbarY,"mousedown",function(n){i=n.pageY,r=o.toInt(a.css(e.scrollbarY,"top"))*e.railYRatio,o.startScrolling(t,"y"),e.event.bind(e.ownerDocument,"mousemove",s),e.event.once(e.ownerDocument,"mouseup",c),n.stopPropagation(),n.preventDefault()})}var o=n(516),a=n(518),s=n(519),u=n(524),l=n(525);t.exports=function(t){var e=s.get(t);r(t,e),i(t,e)}},function(t,e,n){"use strict";function r(t,e){function n(n,r){var i=t.scrollTop;if(0===n){if(!e.scrollbarYActive)return!1;if(0===i&&r>0||i>=e.contentHeight-e.containerHeight&&r<0)return!e.settings.wheelPropagation}var o=t.scrollLeft;if(0===r){if(!e.scrollbarXActive)return!1;if(0===o&&n<0||o>=e.contentWidth-e.containerWidth&&n>0)return!e.settings.wheelPropagation}return!0}var r=!1;e.event.bind(t,"mouseenter",function(){r=!0}),e.event.bind(t,"mouseleave",function(){r=!1});var a=!1;e.event.bind(e.ownerDocument,"keydown",function(l){if(!(l.isDefaultPrevented&&l.isDefaultPrevented()||l.defaultPrevented)){var c=o.matches(e.scrollbarX,":focus")||o.matches(e.scrollbarY,":focus");if(r||c){var d=document.activeElement?document.activeElement:e.ownerDocument.activeElement;if(d){if("IFRAME"===d.tagName)d=d.contentDocument.activeElement;else for(;d.shadowRoot;)d=d.shadowRoot.activeElement;if(i.isEditable(d))return}var h=0,f=0;switch(l.which){case 37:h=l.metaKey?-e.contentWidth:l.altKey?-e.containerWidth:-30;break;case 38:f=l.metaKey?e.contentHeight:l.altKey?e.containerHeight:30;break;case 39:h=l.metaKey?e.contentWidth:l.altKey?e.containerWidth:30;break;case 40:f=l.metaKey?-e.contentHeight:l.altKey?-e.containerHeight:-30;break;case 33:f=90;break;case 32:f=l.shiftKey?90:-90;break;case 34:f=-90;break;case 35:f=l.ctrlKey?-e.contentHeight:-e.containerHeight;break;case 36:f=l.ctrlKey?t.scrollTop:e.containerHeight;break;default:return}u(t,"top",t.scrollTop-f),u(t,"left",t.scrollLeft+h),s(t),a=n(h,f),a&&l.preventDefault()}}})}var i=n(516),o=n(518),a=n(519),s=n(524),u=n(525);t.exports=function(t){var e=a.get(t);r(t,e)}},function(t,e,n){"use strict";function r(t,e){function n(n,r){var i=t.scrollTop;if(0===n){if(!e.scrollbarYActive)return!1;if(0===i&&r>0||i>=e.contentHeight-e.containerHeight&&r<0)return!e.settings.wheelPropagation}var o=t.scrollLeft;if(0===r){if(!e.scrollbarXActive)return!1;if(0===o&&n<0||o>=e.contentWidth-e.containerWidth&&n>0)return!e.settings.wheelPropagation}return!0}function r(t){var e=t.deltaX,n=-1*t.deltaY;return"undefined"!=typeof e&&"undefined"!=typeof n||(e=-1*t.wheelDeltaX/6,n=t.wheelDeltaY/6),t.deltaMode&&1===t.deltaMode&&(e*=10,n*=10),e!==e&&n!==n&&(e=0,n=t.wheelDelta),t.shiftKey?[-n,-e]:[e,n]}function i(e,n){var r=t.querySelector("textarea:hover, select[multiple]:hover, .ps-child:hover");if(r){if(!window.getComputedStyle(r).overflow.match(/(scroll|auto)/))return!1;var i=r.scrollHeight-r.clientHeight;if(i>0&&!(0===r.scrollTop&&n>0||r.scrollTop===i&&n<0))return!0;var o=r.scrollLeft-r.clientWidth;if(o>0&&!(0===r.scrollLeft&&e<0||r.scrollLeft===o&&e>0))return!0}return!1}function s(s){var l=r(s),c=l[0],d=l[1];i(c,d)||(u=!1,e.settings.useBothWheelAxes?e.scrollbarYActive&&!e.scrollbarXActive?(d?a(t,"top",t.scrollTop-d*e.settings.wheelSpeed):a(t,"top",t.scrollTop+c*e.settings.wheelSpeed),u=!0):e.scrollbarXActive&&!e.scrollbarYActive&&(c?a(t,"left",t.scrollLeft+c*e.settings.wheelSpeed):a(t,"left",t.scrollLeft-d*e.settings.wheelSpeed),u=!0):(a(t,"top",t.scrollTop-d*e.settings.wheelSpeed),a(t,"left",t.scrollLeft+c*e.settings.wheelSpeed)),o(t),u=u||n(c,d),u&&(s.stopPropagation(),s.preventDefault()))}var u=!1;"undefined"!=typeof window.onwheel?e.event.bind(t,"wheel",s):"undefined"!=typeof window.onmousewheel&&e.event.bind(t,"mousewheel",s)}var i=n(519),o=n(524),a=n(525);t.exports=function(t){var e=i.get(t);r(t,e)}},function(t,e,n){"use strict";function r(t,e,n,r){function i(n,r){var i=t.scrollTop,o=t.scrollLeft,a=Math.abs(n),s=Math.abs(r);if(s>a){if(r<0&&i===e.contentHeight-e.containerHeight||r>0&&0===i)return!e.settings.swipePropagation}else if(a>s&&(n<0&&o===e.contentWidth-e.containerWidth||n>0&&0===o))return!e.settings.swipePropagation;return!0}function u(e,n){s(t,"top",t.scrollTop-n),s(t,"left",t.scrollLeft-e),a(t)}function l(){M=!0}function c(){M=!1}function d(t){return t.targetTouches?t.targetTouches[0]:t}function h(t){return!(!t.targetTouches||1!==t.targetTouches.length)||!(!t.pointerType||"mouse"===t.pointerType||t.pointerType===t.MSPOINTER_TYPE_MOUSE)}function f(t){if(h(t)){b=!0;var e=d(t);_.pageX=e.pageX,_.pageY=e.pageY,y=(new Date).getTime(),null!==g&&clearInterval(g),t.stopPropagation()}}function p(t){if(!b&&e.settings.swipePropagation&&f(t),!M&&b&&h(t)){var n=d(t),r={pageX:n.pageX,pageY:n.pageY},o=r.pageX-_.pageX,a=r.pageY-_.pageY;u(o,a),_=r;var s=(new Date).getTime(),l=s-y;l>0&&(v.x=o/l,v.y=a/l,y=s),i(o,a)&&(t.stopPropagation(),t.preventDefault())}}function m(){!M&&b&&(b=!1,clearInterval(g),g=setInterval(function(){return o.get(t)&&(v.x||v.y)?Math.abs(v.x)<.01&&Math.abs(v.y)<.01?void clearInterval(g):(u(30*v.x,30*v.y),v.x*=.8,void(v.y*=.8)):void clearInterval(g)},10))}var _={},y=0,v={},g=null,M=!1,b=!1;n?(e.event.bind(window,"touchstart",l),e.event.bind(window,"touchend",c),e.event.bind(t,"touchstart",f),e.event.bind(t,"touchmove",p),e.event.bind(t,"touchend",m)):r&&(window.PointerEvent?(e.event.bind(window,"pointerdown",l),e.event.bind(window,"pointerup",c),e.event.bind(t,"pointerdown",f),e.event.bind(t,"pointermove",p),e.event.bind(t,"pointerup",m)):window.MSPointerEvent&&(e.event.bind(window,"MSPointerDown",l),e.event.bind(window,"MSPointerUp",c),e.event.bind(t,"MSPointerDown",f),e.event.bind(t,"MSPointerMove",p),e.event.bind(t,"MSPointerUp",m)))}var i=n(516),o=n(519),a=n(524),s=n(525);t.exports=function(t){if(i.env.supportsTouch||i.env.supportsIePointer){var e=o.get(t);r(t,e,i.env.supportsTouch,i.env.supportsIePointer)}}},function(t,e,n){"use strict";function r(t,e){function n(){var t=window.getSelection?window.getSelection():document.getSelection?document.getSelection():"";return 0===t.toString().length?null:t.getRangeAt(0).commonAncestorContainer}function r(){l||(l=setInterval(function(){return o.get(t)?(s(t,"top",t.scrollTop+c.top),s(t,"left",t.scrollLeft+c.left),void a(t)):void clearInterval(l)},50))}function u(){l&&(clearInterval(l),l=null),i.stopScrolling(t)}var l=null,c={top:0,left:0},d=!1;e.event.bind(e.ownerDocument,"selectionchange",function(){t.contains(n())?d=!0:(d=!1,u())}),e.event.bind(window,"mouseup",function(){d&&(d=!1,u())}),e.event.bind(window,"keyup",function(){d&&(d=!1,u())}),e.event.bind(window,"mousemove",function(e){if(d){var n={x:e.pageX,y:e.pageY},o={left:t.offsetLeft,right:t.offsetLeft+t.offsetWidth,top:t.offsetTop,bottom:t.offsetTop+t.offsetHeight};n.xo.right-3?(c.left=5,i.startScrolling(t,"x")):c.left=0,n.yo.bottom-3?(n.y-o.bottom+3<5?c.top=5:c.top=20,i.startScrolling(t,"y")):c.top=0,0===c.top&&0===c.left?u():r()}})}var i=n(516),o=n(519),a=n(524),s=n(525);t.exports=function(t){var e=o.get(t);r(t,e)}},function(t,e,n){"use strict";function r(t,e){e.event.bind(t,"scroll",function(){o(t)})}var i=n(519),o=n(524);t.exports=function(t){var e=i.get(t);r(t,e)}},function(t,e,n){"use strict";var r=n(516),i=n(518),o=n(519),a=n(524),s=n(525);t.exports=function(t){var e=o.get(t);e&&(e.negativeScrollAdjustment=e.isNegativeScroll?t.scrollWidth-t.clientWidth:0,i.css(e.scrollbarXRail,"display","block"),i.css(e.scrollbarYRail,"display","block"),e.railXMarginWidth=r.toInt(i.css(e.scrollbarXRail,"marginLeft"))+r.toInt(i.css(e.scrollbarXRail,"marginRight")),e.railYMarginHeight=r.toInt(i.css(e.scrollbarYRail,"marginTop"))+r.toInt(i.css(e.scrollbarYRail,"marginBottom")),i.css(e.scrollbarXRail,"display","none"),i.css(e.scrollbarYRail,"display","none"),a(t),s(t,"top",t.scrollTop),s(t,"left",t.scrollLeft),i.css(e.scrollbarXRail,"display",""),i.css(e.scrollbarYRail,"display",""))}},function(t,e,n){var r,i,o;!function(a,s){i=[n(2)],r=s,o="function"==typeof r?r.apply(e,i):r,!(void 0!==o&&(t.exports=o))}(this,function(t){function e(t){return t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.cancelBubble=!0,t.returnValue=!1,!1}function n(t){t.stopPropagation&&t.stopPropagation(),t.cancelBubble=!0}function r(t,e,n){for(var r=(e-t)/(n-1),i=[],o=0;oe.length&&(this.state.value.length=e.length),0===this.state.upperBound&&this._handleResize()},_or:function(e,n){var i=t.Children.count(this.props.children);switch(i){case 0:return e.length>0?e:n;case e.length:return e;case n.length:return n;default:return e.length===i&&n.length===i||console.warn(this.constructor.displayName+": Number of values does not match number of children."),r(this.props.min,this.props.max,i)}},componentDidMount:function(){window.addEventListener("resize",this._handleResize),this._handleResize()},componentWillUnmount:function(){this._clearPendingResizeTimeouts(),window.removeEventListener("resize",this._handleResize)},getValue:function(){return o(this.state.value)},_handleResize:function(){var t=window.setTimeout(function(){this.pendingResizeTimeouts.shift();var t=this.refs.slider,e=this.refs.handle0,n=t.getBoundingClientRect(),r=this._sizeKey(),i=n[this._posMaxKey()],o=n[this._posMinKey()];this.setState({upperBound:t[r]-e[r],sliderLength:Math.abs(i-o),handleSize:e[r],sliderStart:this.props.invert?i:o -})}.bind(this),0);this.pendingResizeTimeouts.push(t)},_clearPendingResizeTimeouts:function(){do{var t=this.pendingResizeTimeouts.shift();clearTimeout(t)}while(this.pendingResizeTimeouts.length)},_calcOffset:function(t){var e=(t-this.props.min)/(this.props.max-this.props.min);return e*this.state.upperBound},_calcValue:function(t){var e=t/this.state.upperBound;return e*(this.props.max-this.props.min)+this.props.min},_buildHandleStyle:function(t,e){var n={position:"absolute",willChange:this.state.index>=0?this._posMinKey():"",zIndex:this.state.zIndices.indexOf(e)+1};return n[this._posMinKey()]=t+"px",n},_buildBarStyle:function(t,e){var n={position:"absolute",willChange:this.state.index>=0?this._posMinKey()+","+this._posMaxKey():""};return n[this._posMinKey()]=t,n[this._posMaxKey()]=e,n},_getClosestIndex:function(t){for(var e=Number.MAX_VALUE,n=-1,r=this.state.value,i=r.length,o=0;o1)){var r=this._getTouchPosition(e);this.startPosition=r,this.isScrolling=void 0,this._start(t,r[0]),this._addHandlers(this._getTouchEventMap()),n(e)}}.bind(this)},_addHandlers:function(t){for(var e in t)document.addEventListener(e,t[e],!1)},_removeHandlers:function(t){for(var e in t)document.removeEventListener(e,t[e],!1)},_start:function(t,e){document.activeElement&&document.activeElement!=document.body&&document.activeElement.blur(),this.hasMoved=!1,this._fireChangeEvent("onBeforeChange");var n=this.state.zIndices;n.splice(n.indexOf(t),1),n.push(t),this.setState({startValue:this.state.value[t],startPosition:e,index:t,zIndices:n})},_onMouseUp:function(){this._onEnd(this._getMouseEventMap())},_onTouchEnd:function(){this._onEnd(this._getTouchEventMap())},_onEnd:function(t){this._removeHandlers(t),this.setState({index:-1},this._fireChangeEvent.bind(this,"onAfterChange"))},_onMouseMove:function(t){var e=this._getMousePosition(t);this._move(e[0])},_onTouchMove:function(t){if(!(t.touches.length>1)){var n=this._getTouchPosition(t);if("undefined"==typeof this.isScrolling){var r=n[0]-this.startPosition[0],i=n[1]-this.startPosition[1];this.isScrolling=Math.abs(i)>Math.abs(r)}if(this.isScrolling)return void this.setState({index:-1});e(t),this._move(n[0])}},_move:function(t){this.hasMoved=!0;var e=this.props,n=this.state,r=n.index,i=n.value,o=i.length,a=i[r],s=t-n.startPosition;e.invert&&(s*=-1);var u=s/(n.sliderLength-n.handleSize)*(e.max-e.min),l=this._trimAlignValue(n.startValue+u),c=e.minDistance;if(!e.pearling){if(r>0){var d=i[r-1];lh-c&&(l=h-c)}}i[r]=l,e.pearling&&o>1&&(l>a?(this._pushSucceeding(i,c,r),this._trimSucceeding(o,i,c,e.max)):lt[r+1];r++,i=t[r]+e)t[r+1]=this._alignValue(i)},_trimSucceeding:function(t,e,n,r){for(var i=0;io&&(e[t-1-i]=o)}},_pushPreceding:function(t,e,n){var r,i;for(r=n,i=t[r]-e;null!=t[r-1]&&i=e.max&&(t=e.max),t},_alignValue:function(t,e){e=e||this.props;var n=(t-e.min)%e.step,r=t-n;return 2*Math.abs(n)>=e.step&&(r+=n>0?e.step:-e.step),parseFloat(r.toFixed(5))},_renderHandle:function(e,n,r){var i=this.props.handleClassName+" "+(this.props.handleClassName+"-"+r)+" "+(this.state.index===r?this.props.handleActiveClassName:"");return t.createElement("div",{ref:"handle"+r,key:"handle"+r,className:i,style:e,onMouseDown:this._createOnMouseDown(r),onTouchStart:this._createOnTouchStart(r)},n)},_renderHandles:function(e){for(var n=e.length,r=this.tempArray,i=0;i0)t.Children.forEach(this.props.children,function(t,e){o[e]=a(r[e],t,e)});else for(i=0;i=65&&t.keyCode<=90?e.key=g.C0.ESC+String.fromCharCode(t.keyCode+32):192===t.keyCode?e.key=g.C0.ESC+"`":t.keyCode>=48&&t.keyCode<=57&&(e.key=g.C0.ESC+(t.keyCode-48))):t.keyCode>=65&&t.keyCode<=90?e.key=String.fromCharCode(t.keyCode-64):32===t.keyCode?e.key=String.fromCharCode(0):t.keyCode>=51&&t.keyCode<=55?e.key=String.fromCharCode(t.keyCode-51+27):56===t.keyCode?e.key=String.fromCharCode(127):219===t.keyCode?e.key=String.fromCharCode(27):220===t.keyCode?e.key=String.fromCharCode(28):221===t.keyCode&&(e.key=String.fromCharCode(29))}return e},i.prototype.setgLevel=function(t){this.glevel=t,this.charset=this.charsets[t]},i.prototype.setgCharset=function(t,e){this.charsets[t]=e,this.glevel===t&&(this.charset=e)},i.prototype.keyPress=function(t){var e;if(this.cancel(t),t.charCode)e=t.charCode;else if(null==t.which)e=t.keyCode;else{if(0===t.which||0===t.charCode)return!1;e=t.which}return!(!e||(t.altKey||t.ctrlKey||t.metaKey)&&!l(this,t))&&(e=String.fromCharCode(e),this.emit("keypress",e,t),this.emit("key",e,t),this.showCursor(),this.handler(e),!1)},i.prototype.send=function(t){var e=this;this.queue||setTimeout(function(){e.handler(e.queue),e.queue=""},1),this.queue+=t},i.prototype.bell=function(){if(this.visualBell){var t=this;this.element.style.borderColor="white",setTimeout(function(){t.element.style.borderColor=""},10),this.popOnBell&&this.focus()}},i.prototype.log=function(){if(this.debug&&this.context.console&&this.context.console.log){var t=Array.prototype.slice.call(arguments);this.context.console.log.apply(this.context.console,t)}},i.prototype.error=function(){if(this.debug&&this.context.console&&this.context.console.error){var t=Array.prototype.slice.call(arguments);this.context.console.error.apply(this.context.console,t)}},i.prototype.resize=function(t,e){if(!isNaN(t)&&!isNaN(e)){var n,r,i,o,a;if(t!==this.cols||e!==this.rows){if(t<1&&(t=1),e<1&&(e=1),i=this.cols,it;)this.lines.get(r).pop();if(this.cols=t,this.setupStops(this.cols),i=this.rows,a=0,i0&&this.lines.length<=this.ybase+this.y+a+1?(this.ybase--,a++,this.ydisp>0&&this.ydisp--):this.lines.push(this.blankLine())),this.children.lengthe;)if(this.lines.length>e+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++)),this.children.length>e){if(n=this.children.shift(),!n)continue;n.parentNode.removeChild(n)}this.rows=e,this.y>=e&&(this.y=e-1),a&&(this.y+=a),this.x>=t&&(this.x=t-1),this.scrollTop=0,this.scrollBottom=e-1,this.charMeasure.measure(),this.refresh(0,this.rows-1),this.normal=null,this.geometry=[this.cols,this.rows],this.emit("resize",{terminal:this,cols:t,rows:e})}}},i.prototype.updateRange=function(t){tthis.refreshEnd&&(this.refreshEnd=t)},i.prototype.maxRange=function(){this.refreshStart=0,this.refreshEnd=this.rows-1},i.prototype.setupStops=function(t){for(null!=t?this.tabs[t]||(t=this.prevStop(t)):(this.tabs={},t=0);t0;);return t>=this.cols?this.cols-1:t<0?0:t},i.prototype.nextStop=function(t){for(null==t&&(t=this.x);!this.tabs[++t]&&t=this.cols?this.cols-1:t<0?0:t},i.prototype.eraseRight=function(t,e){var n=this.lines.get(this.ybase+e);if(n){for(var r=[this.eraseAttr()," ",1];tthis.scrollBottom&&(this.y--,this.scroll()),this.x>=this.cols&&this.x--},i.prototype.reverseIndex=function(){this.y===this.scrollTop?(this.lines.shiftElements(this.y+this.ybase,this.rows-1,1),this.lines.set(this.y+this.ybase,this.blankLine(!0)),this.updateRange(this.scrollTop),this.updateRange(this.scrollBottom)):this.y--},i.prototype.reset=function(){this.options.rows=this.rows,this.options.cols=this.cols;var t=this.customKeydownHandler;i.call(this,this.options),this.customKeydownHandler=t,this.refresh(0,this.rows-1),this.viewport.syncScrollArea()},i.prototype.tabSet=function(){this.tabs[this.x]=!0},i.prototype.matchColor=c,c._cache={},c.distance=function(t,e,n,r,i,o){return Math.pow(30*(t-r),2)+Math.pow(59*(e-i),2)+Math.pow(11*(n-o),2)},i.EventEmitter=m.EventEmitter,i.inherits=u,i.on=o,i.off=a,i.cancel=s,n.exports=i},{"./CompositionHelper":2,"./EscapeSequences":3,"./EventEmitter":4,"./InputHandler":5,"./Linkifier":6,"./Parser":7,"./Renderer":8,"./Viewport":9,"./handlers/Clipboard":10,"./utils/Browser":11,"./utils/CharMeasure":12,"./utils/CircularList":13}]},{},[15])(15)})},,function(t,e,n){(function(t,r){/*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT */ -"use strict";function i(){try{var t=new Uint8Array(1);return t.foo=function(){return 42},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}function o(){return t.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function t(e){return this instanceof t?(t.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof e?a(this,e):"string"==typeof e?s(this,e,arguments.length>1?arguments[1]:"utf8"):u(this,e)):arguments.length>1?new t(e,arguments[1]):new t(e)}function a(e,n){if(e=m(e,n<0?0:0|_(n)),!t.TYPED_ARRAY_SUPPORT)for(var r=0;r>>1;return r&&(e.parent=G),e}function _(t){if(t>=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|t}function y(e,n){if(!(this instanceof y))return new y(e,n);var r=new t(e,n);return delete r.parent,r}function v(t,e){"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case"ascii":case"binary":case"raw":case"raws":return n;case"utf8":case"utf-8":return z(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return V(t).length;default:if(r)return z(t).length;e=(""+e).toLowerCase(),r=!0}}function g(t,e,n){var r=!1;if(e|=0,n=void 0===n||n===1/0?this.length:0|n,t||(t="utf8"),e<0&&(e=0),n>this.length&&(n=this.length),n<=e)return"";for(;;)switch(t){case"hex":return E(this,e,n);case"utf8":case"utf-8":return S(this,e,n);case"ascii":return Y(this,e,n);case"binary":return C(this,e,n);case"base64":return D(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function M(t,e,n,r){n=Number(n)||0;var i=t.length-n;r?(r=Number(r),r>i&&(r=i)):r=i;var o=e.length;if(o%2!==0)throw new Error("Invalid hex string");r>o/2&&(r=o/2);for(var a=0;a239?4:o>223?3:o>191?2:1;if(i+s<=n){var u,l,c,d;switch(s){case 1:o<128&&(a=o);break;case 2:u=t[i+1],128===(192&u)&&(d=(31&o)<<6|63&u,d>127&&(a=d));break;case 3:u=t[i+1],l=t[i+2],128===(192&u)&&128===(192&l)&&(d=(15&o)<<12|(63&u)<<6|63&l,d>2047&&(d<55296||d>57343)&&(a=d));break;case 4:u=t[i+1],l=t[i+2],c=t[i+3],128===(192&u)&&128===(192&l)&&128===(192&c)&&(d=(15&o)<<18|(63&u)<<12|(63&l)<<6|63&c,d>65535&&d<1114112&&(a=d))}}null===a?(a=65533,s=1):a>65535&&(a-=65536,r.push(a>>>10&1023|55296),a=56320|1023&a),r.push(a),i+=s}return x(r)}function x(t){var e=t.length;if(e<=Q)return String.fromCharCode.apply(String,t);for(var n="",r=0;rr)&&(n=r);for(var i="",o=e;on)throw new RangeError("Trying to access beyond buffer length")}function A(e,n,r,i,o,a){if(!t.isBuffer(e))throw new TypeError("buffer must be a Buffer instance");if(n>o||ne.length)throw new RangeError("index out of range")}function j(t,e,n,r){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-n,2);i>>8*(r?i:1-i)}function R(t,e,n,r){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-n,4);i>>8*(r?i:3-i)&255}function H(t,e,n,r,i,o){if(n+r>t.length)throw new RangeError("index out of range");if(n<0)throw new RangeError("index out of range")}function N(t,e,n,r,i){return i||H(t,e,n,4,3.4028234663852886e38,-3.4028234663852886e38),J.write(t,e,n,r,23,4),n+4}function I(t,e,n,r,i){return i||H(t,e,n,8,1.7976931348623157e308,-1.7976931348623157e308),J.write(t,e,n,r,52,8),n+8}function W(t){if(t=U(t).replace(Z,""),t.length<2)return"";for(;t.length%4!==0;)t+="=";return t}function U(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function F(t){return t<16?"0"+t.toString(16):t.toString(16)}function z(t,e){e=e||1/0;for(var n,r=t.length,i=null,o=[],a=0;a55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===r){(e-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),i=n;continue}n=(i-55296<<10|n-56320)+65536}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function B(t){for(var e=[],n=0;n>8,i=n%256,o.push(i),o.push(r);return o}function V(t){return K.toByteArray(W(t))}function $(t,e,n,r){for(var i=0;i=e.length||i>=t.length);i++)e[i+n]=t[i];return i}var K=n(538),J=n(539),X=n(540);e.Buffer=t,e.SlowBuffer=y,e.INSPECT_MAX_BYTES=50,t.poolSize=8192;var G={};t.TYPED_ARRAY_SUPPORT=void 0!==r.TYPED_ARRAY_SUPPORT?r.TYPED_ARRAY_SUPPORT:i(),t._augment=function(e){return e.__proto__=t.prototype,e},t.TYPED_ARRAY_SUPPORT?(t.prototype.__proto__=Uint8Array.prototype,t.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&t[Symbol.species]===t&&Object.defineProperty(t,Symbol.species,{value:null,configurable:!0})):(t.prototype.length=void 0,t.prototype.parent=void 0),t.isBuffer=function(t){return!(null==t||!t._isBuffer)},t.compare=function(e,n){if(!t.isBuffer(e)||!t.isBuffer(n))throw new TypeError("Arguments must be Buffers");if(e===n)return 0;for(var r=e.length,i=n.length,o=0,a=Math.min(r,i);o0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),""},t.prototype.compare=function(e){if(!t.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e?0:t.compare(this,e)},t.prototype.indexOf=function(e,n){function r(t,e,n){for(var r=-1,i=0;n+i2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n>>=0,0===this.length)return-1;if(n>=this.length)return-1;if(n<0&&(n=Math.max(this.length+n,0)),"string"==typeof e)return 0===e.length?-1:String.prototype.indexOf.call(this,e,n);if(t.isBuffer(e))return r(this,e,n);if("number"==typeof e)return t.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,e,n):r(this,[e],n);throw new TypeError("val must be string, number or Buffer")},t.prototype.write=function(t,e,n,r){if(void 0===e)r="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)r=e,n=this.length,e=0;else if(isFinite(e))e|=0,isFinite(n)?(n|=0,void 0===r&&(r="utf8")):(r=n,n=void 0);else{var i=r;r=e,e=0|n,n=i}var o=this.length-e;if((void 0===n||n>o)&&(n=o),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("attempt to write outside buffer bounds");r||(r="utf8");for(var a=!1;;)switch(r){case"hex":return M(this,t,e,n);case"utf8":case"utf-8":return b(this,t,e,n);case"ascii":return w(this,t,e,n);case"binary":return L(this,t,e,n);case"base64":return k(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,t,e,n);default:if(a)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),a=!0}},t.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Q=4096;t.prototype.slice=function(e,n){var r=this.length;e=~~e,n=void 0===n?r:~~n,e<0?(e+=r,e<0&&(e=0)):e>r&&(e=r),n<0?(n+=r,n<0&&(n=0)):n>r&&(n=r),n0&&(i*=256);)r+=this[t+--e]*i;return r},t.prototype.readUInt8=function(t,e){return e||O(t,1,this.length),this[t]},t.prototype.readUInt16LE=function(t,e){return e||O(t,2,this.length),this[t]|this[t+1]<<8},t.prototype.readUInt16BE=function(t,e){return e||O(t,2,this.length),this[t]<<8|this[t+1]},t.prototype.readUInt32LE=function(t,e){return e||O(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},t.prototype.readUInt32BE=function(t,e){return e||O(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},t.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||O(t,e,this.length);for(var r=this[t],i=1,o=0;++o=i&&(r-=Math.pow(2,8*e)),r},t.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||O(t,e,this.length);for(var r=e,i=1,o=this[t+--r];r>0&&(i*=256);)o+=this[t+--r]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},t.prototype.readInt8=function(t,e){return e||O(t,1,this.length),128&this[t]?(255-this[t]+1)*-1:this[t]},t.prototype.readInt16LE=function(t,e){e||O(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},t.prototype.readInt16BE=function(t,e){e||O(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},t.prototype.readInt32LE=function(t,e){return e||O(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},t.prototype.readInt32BE=function(t,e){return e||O(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},t.prototype.readFloatLE=function(t,e){return e||O(t,4,this.length),J.read(this,t,!0,23,4)},t.prototype.readFloatBE=function(t,e){return e||O(t,4,this.length),J.read(this,t,!1,23,4)},t.prototype.readDoubleLE=function(t,e){return e||O(t,8,this.length),J.read(this,t,!0,52,8)},t.prototype.readDoubleBE=function(t,e){return e||O(t,8,this.length),J.read(this,t,!1,52,8)},t.prototype.writeUIntLE=function(t,e,n,r){t=+t,e|=0,n|=0,r||A(this,t,e,n,Math.pow(2,8*n),0);var i=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+i]=t/o&255;return e+n},t.prototype.writeUInt8=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,1,255,0),t.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[n]=255&e,n+1},t.prototype.writeUInt16LE=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8):j(this,e,n,!0),n+2},t.prototype.writeUInt16BE=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[n]=e>>>8,this[n+1]=255&e):j(this,e,n,!1),n+2},t.prototype.writeUInt32LE=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[n+3]=e>>>24,this[n+2]=e>>>16,this[n+1]=e>>>8,this[n]=255&e):R(this,e,n,!0),n+4},t.prototype.writeUInt32BE=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[n]=e>>>24,this[n+1]=e>>>16,this[n+2]=e>>>8,this[n+3]=255&e):R(this,e,n,!1),n+4},t.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);A(this,t,e,n,i-1,-i)}var o=0,a=1,s=t<0?1:0;for(this[e]=255&t;++o>0)-s&255;return e+n},t.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);A(this,t,e,n,i-1,-i)}var o=n-1,a=1,s=t<0?1:0;for(this[e+o]=255&t;--o>=0&&(a*=256);)this[e+o]=(t/a>>0)-s&255;return e+n},t.prototype.writeInt8=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,1,127,-128),t.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[n]=255&e,n+1},t.prototype.writeInt16LE=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8):j(this,e,n,!0),n+2},t.prototype.writeInt16BE=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[n]=e>>>8,this[n+1]=255&e):j(this,e,n,!1),n+2},t.prototype.writeInt32LE=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,4,2147483647,-2147483648),t.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8,this[n+2]=e>>>16,this[n+3]=e>>>24):R(this,e,n,!0),n+4},t.prototype.writeInt32BE=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),t.TYPED_ARRAY_SUPPORT?(this[n]=e>>>24,this[n+1]=e>>>16,this[n+2]=e>>>8,this[n+3]=255&e):R(this,e,n,!1),n+4},t.prototype.writeFloatLE=function(t,e,n){return N(this,t,e,!0,n)},t.prototype.writeFloatBE=function(t,e,n){return N(this,t,e,!1,n)},t.prototype.writeDoubleLE=function(t,e,n){return I(this,t,e,!0,n)},t.prototype.writeDoubleBE=function(t,e,n){return I(this,t,e,!1,n)},t.prototype.copy=function(e,n,r,i){if(r||(r=0),i||0===i||(i=this.length),n>=e.length&&(n=e.length),n||(n=0),i>0&&i=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-n=0;o--)e[o+n]=this[o+r];else if(a<1e3||!t.TYPED_ARRAY_SUPPORT)for(o=0;o=this.length)throw new RangeError("start out of bounds");if(n<0||n>this.length)throw new RangeError("end out of bounds");var r;if("number"==typeof t)for(r=e;r1?arguments[1]:"utf8"):u(this,e)):arguments.length>1?new t(e,arguments[1]):new t(e)}function a(e,n){if(e=m(e,n<0?0:0|_(n)),!t.TYPED_ARRAY_SUPPORT)for(var r=0;r>>1;return r&&(e.parent=G),e}function _(t){if(t>=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|t}function y(e,n){if(!(this instanceof y))return new y(e,n);var r=new t(e,n);return delete r.parent,r}function v(t,e){"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case"ascii":case"binary":case"raw":case"raws":return n;case"utf8":case"utf-8":return z(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return V(t).length;default:if(r)return z(t).length;e=(""+e).toLowerCase(),r=!0}}function g(t,e,n){var r=!1;if(e|=0,n=void 0===n||n===1/0?this.length:0|n,t||(t="utf8"),e<0&&(e=0),n>this.length&&(n=this.length),n<=e)return"";for(;;)switch(t){case"hex":return E(this,e,n);case"utf8":case"utf-8":return S(this,e,n);case"ascii":return Y(this,e,n);case"binary":return C(this,e,n);case"base64":return D(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function M(t,e,n,r){n=Number(n)||0;var i=t.length-n;r?(r=Number(r),r>i&&(r=i)):r=i;var o=e.length;if(o%2!==0)throw new Error("Invalid hex string");r>o/2&&(r=o/2);for(var a=0;a239?4:o>223?3:o>191?2:1;if(i+s<=n){var u,l,c,d;switch(s){case 1:o<128&&(a=o);break;case 2:u=t[i+1],128===(192&u)&&(d=(31&o)<<6|63&u,d>127&&(a=d));break;case 3:u=t[i+1],l=t[i+2],128===(192&u)&&128===(192&l)&&(d=(15&o)<<12|(63&u)<<6|63&l,d>2047&&(d<55296||d>57343)&&(a=d));break;case 4:u=t[i+1],l=t[i+2],c=t[i+3],128===(192&u)&&128===(192&l)&&128===(192&c)&&(d=(15&o)<<18|(63&u)<<12|(63&l)<<6|63&c,d>65535&&d<1114112&&(a=d))}}null===a?(a=65533,s=1):a>65535&&(a-=65536,r.push(a>>>10&1023|55296),a=56320|1023&a),r.push(a),i+=s}return x(r)}function x(t){var e=t.length;if(e<=Q)return String.fromCharCode.apply(String,t);for(var n="",r=0;rr)&&(n=r);for(var i="",o=e;on)throw new RangeError("Trying to access beyond buffer length")}function A(e,n,r,i,o,a){if(!t.isBuffer(e))throw new TypeError("buffer must be a Buffer instance");if(n>o||ne.length)throw new RangeError("index out of range")}function j(t,e,n,r){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-n,2);i>>8*(r?i:1-i)}function R(t,e,n,r){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-n,4);i>>8*(r?i:3-i)&255}function H(t,e,n,r,i,o){if(n+r>t.length)throw new RangeError("index out of range");if(n<0)throw new RangeError("index out of range")}function N(t,e,n,r,i){return i||H(t,e,n,4,3.4028234663852886e38,-3.4028234663852886e38),J.write(t,e,n,r,23,4),n+4}function I(t,e,n,r,i){return i||H(t,e,n,8,1.7976931348623157e308,-1.7976931348623157e308),J.write(t,e,n,r,52,8),n+8}function W(t){if(t=U(t).replace(Z,""),t.length<2)return"";for(;t.length%4!==0;)t+="=";return t}function U(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function F(t){return t<16?"0"+t.toString(16):t.toString(16)}function z(t,e){e=e||1/0;for(var n,r=t.length,i=null,o=[],a=0;a55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===r){(e-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),i=n;continue}n=(i-55296<<10|n-56320)+65536}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function B(t){for(var e=[],n=0;n>8,i=n%256,o.push(i),o.push(r);return o}function V(t){return K.toByteArray(W(t))}function $(t,e,n,r){for(var i=0;i=e.length||i>=t.length);i++)e[i+n]=t[i];return i}var K=n(425),J=n(426),X=n(427);e.Buffer=t,e.SlowBuffer=y,e.INSPECT_MAX_BYTES=50,t.poolSize=8192;var G={};t.TYPED_ARRAY_SUPPORT=void 0!==r.TYPED_ARRAY_SUPPORT?r.TYPED_ARRAY_SUPPORT:i(),t._augment=function(e){return e.__proto__=t.prototype,e},t.TYPED_ARRAY_SUPPORT?(t.prototype.__proto__=Uint8Array.prototype,t.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&t[Symbol.species]===t&&Object.defineProperty(t,Symbol.species,{value:null,configurable:!0})):(t.prototype.length=void 0,t.prototype.parent=void 0),t.isBuffer=function(t){return!(null==t||!t._isBuffer)},t.compare=function(e,n){if(!t.isBuffer(e)||!t.isBuffer(n))throw new TypeError("Arguments must be Buffers");if(e===n)return 0;for(var r=e.length,i=n.length,o=0,a=Math.min(r,i);o0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),""},t.prototype.compare=function(e){if(!t.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e?0:t.compare(this,e)},t.prototype.indexOf=function(e,n){function r(t,e,n){for(var r=-1,i=0;n+i2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n>>=0,0===this.length)return-1;if(n>=this.length)return-1;if(n<0&&(n=Math.max(this.length+n,0)),"string"==typeof e)return 0===e.length?-1:String.prototype.indexOf.call(this,e,n);if(t.isBuffer(e))return r(this,e,n);if("number"==typeof e)return t.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,e,n):r(this,[e],n);throw new TypeError("val must be string, number or Buffer")},t.prototype.write=function(t,e,n,r){if(void 0===e)r="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)r=e,n=this.length,e=0;else if(isFinite(e))e|=0,isFinite(n)?(n|=0,void 0===r&&(r="utf8")):(r=n,n=void 0);else{var i=r;r=e,e=0|n,n=i}var o=this.length-e;if((void 0===n||n>o)&&(n=o),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("attempt to write outside buffer bounds");r||(r="utf8");for(var a=!1;;)switch(r){case"hex":return M(this,t,e,n);case"utf8":case"utf-8":return b(this,t,e,n);case"ascii":return w(this,t,e,n);case"binary":return L(this,t,e,n);case"base64":return k(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,t,e,n);default:if(a)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),a=!0}},t.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Q=4096;t.prototype.slice=function(e,n){var r=this.length;e=~~e,n=void 0===n?r:~~n,e<0?(e+=r,e<0&&(e=0)):e>r&&(e=r),n<0?(n+=r,n<0&&(n=0)):n>r&&(n=r),n0&&(i*=256);)r+=this[t+--e]*i;return r},t.prototype.readUInt8=function(t,e){return e||O(t,1,this.length),this[t]},t.prototype.readUInt16LE=function(t,e){return e||O(t,2,this.length),this[t]|this[t+1]<<8},t.prototype.readUInt16BE=function(t,e){return e||O(t,2,this.length),this[t]<<8|this[t+1]},t.prototype.readUInt32LE=function(t,e){return e||O(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},t.prototype.readUInt32BE=function(t,e){return e||O(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},t.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||O(t,e,this.length);for(var r=this[t],i=1,o=0;++o=i&&(r-=Math.pow(2,8*e)),r},t.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||O(t,e,this.length);for(var r=e,i=1,o=this[t+--r];r>0&&(i*=256);)o+=this[t+--r]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},t.prototype.readInt8=function(t,e){return e||O(t,1,this.length),128&this[t]?(255-this[t]+1)*-1:this[t]},t.prototype.readInt16LE=function(t,e){e||O(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},t.prototype.readInt16BE=function(t,e){e||O(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},t.prototype.readInt32LE=function(t,e){return e||O(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},t.prototype.readInt32BE=function(t,e){return e||O(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},t.prototype.readFloatLE=function(t,e){return e||O(t,4,this.length),J.read(this,t,!0,23,4)},t.prototype.readFloatBE=function(t,e){return e||O(t,4,this.length),J.read(this,t,!1,23,4)},t.prototype.readDoubleLE=function(t,e){return e||O(t,8,this.length),J.read(this,t,!0,52,8)},t.prototype.readDoubleBE=function(t,e){return e||O(t,8,this.length),J.read(this,t,!1,52,8)},t.prototype.writeUIntLE=function(t,e,n,r){t=+t,e|=0,n|=0,r||A(this,t,e,n,Math.pow(2,8*n),0);var i=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+i]=t/o&255;return e+n},t.prototype.writeUInt8=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,1,255,0),t.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[n]=255&e,n+1},t.prototype.writeUInt16LE=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8):j(this,e,n,!0),n+2},t.prototype.writeUInt16BE=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[n]=e>>>8,this[n+1]=255&e):j(this,e,n,!1),n+2},t.prototype.writeUInt32LE=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[n+3]=e>>>24,this[n+2]=e>>>16,this[n+1]=e>>>8,this[n]=255&e):R(this,e,n,!0),n+4},t.prototype.writeUInt32BE=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[n]=e>>>24,this[n+1]=e>>>16,this[n+2]=e>>>8,this[n+3]=255&e):R(this,e,n,!1),n+4},t.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);A(this,t,e,n,i-1,-i)}var o=0,a=1,s=t<0?1:0;for(this[e]=255&t;++o>0)-s&255;return e+n},t.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);A(this,t,e,n,i-1,-i)}var o=n-1,a=1,s=t<0?1:0;for(this[e+o]=255&t;--o>=0&&(a*=256);)this[e+o]=(t/a>>0)-s&255;return e+n},t.prototype.writeInt8=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,1,127,-128),t.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[n]=255&e,n+1},t.prototype.writeInt16LE=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8):j(this,e,n,!0),n+2},t.prototype.writeInt16BE=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[n]=e>>>8,this[n+1]=255&e):j(this,e,n,!1),n+2},t.prototype.writeInt32LE=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,4,2147483647,-2147483648),t.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8,this[n+2]=e>>>16,this[n+3]=e>>>24):R(this,e,n,!0),n+4},t.prototype.writeInt32BE=function(e,n,r){return e=+e,n|=0,r||A(this,e,n,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),t.TYPED_ARRAY_SUPPORT?(this[n]=e>>>24,this[n+1]=e>>>16,this[n+2]=e>>>8,this[n+3]=255&e):R(this,e,n,!1),n+4},t.prototype.writeFloatLE=function(t,e,n){return N(this,t,e,!0,n)},t.prototype.writeFloatBE=function(t,e,n){return N(this,t,e,!1,n)},t.prototype.writeDoubleLE=function(t,e,n){return I(this,t,e,!0,n)},t.prototype.writeDoubleBE=function(t,e,n){return I(this,t,e,!1,n)},t.prototype.copy=function(e,n,r,i){if(r||(r=0),i||0===i||(i=this.length),n>=e.length&&(n=e.length),n||(n=0),i>0&&i=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-n=0;o--)e[o+n]=this[o+r];else if(a<1e3||!t.TYPED_ARRAY_SUPPORT)for(o=0;o=this.length)throw new RangeError("start out of bounds");if(n<0||n>this.length)throw new RangeError("end out of bounds");var r;if("number"==typeof t)for(r=e;r * @license MIT */ -"use strict";function r(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}function i(){return a.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function o(t,e){if(i()=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|t}function _(t){return+t!=t&&(t=0),a.alloc(+t)}function y(t,e){if(a.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return q(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return K(t).length;default:if(r)return q(t).length;e=(""+e).toLowerCase(),r=!0}}function v(t,e,n){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if(n>>>=0,e>>>=0,n<=e)return"";for(t||(t="utf8");;)switch(t){case"hex":return O(this,e,n);case"utf8":case"utf-8":return Y(this,e,n);case"ascii":return E(this,e,n);case"latin1":case"binary":return P(this,e,n);case"base64":return x(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function g(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function M(t,e,n,r,i){if(0===t.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof e&&(e=a.from(e,r)),a.isBuffer(e))return 0===e.length?-1:b(t,e,n,r,i);if("number"==typeof e)return e&=255,a.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):b(t,[e],n,r,i);throw new TypeError("val must be string, number or Buffer")}function b(t,e,n,r,i){function o(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}var a=1,s=t.length,u=e.length;if(void 0!==r&&(r=String(r).toLowerCase(),"ucs2"===r||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;a=2,s/=2,u/=2,n/=2}var l;if(i){var c=-1;for(l=n;ls&&(n=s-u),l=n;l>=0;l--){for(var d=!0,h=0;hi&&(r=i)):r=i;var o=e.length;if(o%2!==0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var a=0;a239?4:o>223?3:o>191?2:1;if(i+s<=n){var u,l,c,d;switch(s){case 1:o<128&&(a=o);break;case 2:u=t[i+1],128===(192&u)&&(d=(31&o)<<6|63&u,d>127&&(a=d));break;case 3:u=t[i+1],l=t[i+2],128===(192&u)&&128===(192&l)&&(d=(15&o)<<12|(63&u)<<6|63&l,d>2047&&(d<55296||d>57343)&&(a=d));break;case 4:u=t[i+1],l=t[i+2],c=t[i+3],128===(192&u)&&128===(192&l)&&128===(192&c)&&(d=(15&o)<<18|(63&u)<<12|(63&l)<<6|63&c,d>65535&&d<1114112&&(a=d))}}null===a?(a=65533,s=1):a>65535&&(a-=65536,r.push(a>>>10&1023|55296),a=56320|1023&a),r.push(a),i+=s}return C(r)}function C(t){var e=t.length;if(e<=tt)return String.fromCharCode.apply(String,t);for(var n="",r=0;rr)&&(n=r);for(var i="",o=e;on)throw new RangeError("Trying to access beyond buffer length")}function R(t,e,n,r,i,o){if(!a.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function H(t,e,n,r){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-n,2);i>>8*(r?i:1-i)}function N(t,e,n,r){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-n,4);i>>8*(r?i:3-i)&255}function I(t,e,n,r,i,o){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function W(t,e,n,r,i){return i||I(t,e,n,4,3.4028234663852886e38,-3.4028234663852886e38),Q.write(t,e,n,r,23,4),n+4}function U(t,e,n,r,i){return i||I(t,e,n,8,1.7976931348623157e308,-1.7976931348623157e308),Q.write(t,e,n,r,52,8),n+8}function F(t){if(t=z(t).replace(et,""),t.length<2)return"";for(;t.length%4!==0;)t+="=";return t}function z(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function B(t){return t<16?"0"+t.toString(16):t.toString(16)}function q(t,e){e=e||1/0;for(var n,r=t.length,i=null,o=[],a=0;a55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===r){(e-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),i=n;continue}n=(i-55296<<10|n-56320)+65536}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function V(t){for(var e=[],n=0;n>8,i=n%256,o.push(i),o.push(r);return o}function K(t){return G.toByteArray(F(t))}function J(t,e,n,r){for(var i=0;i=e.length||i>=t.length);++i)e[i+n]=t[i];return i}function X(t){return t!==t}var G=n(538),Q=n(539),Z=n(540);e.Buffer=a,e.SlowBuffer=_,e.INSPECT_MAX_BYTES=50,a.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:r(),e.kMaxLength=i(),a.poolSize=8192,a._augment=function(t){return t.__proto__=a.prototype,t},a.from=function(t,e,n){return s(null,t,e,n)},a.TYPED_ARRAY_SUPPORT&&(a.prototype.__proto__=Uint8Array.prototype,a.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&a[Symbol.species]===a&&Object.defineProperty(a,Symbol.species,{value:null,configurable:!0})),a.alloc=function(t,e,n){return l(null,t,e,n)},a.allocUnsafe=function(t){return c(null,t)},a.allocUnsafeSlow=function(t){return c(null,t)},a.isBuffer=function(t){return!(null==t||!t._isBuffer)},a.compare=function(t,e){if(!a.isBuffer(t)||!a.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,r=e.length,i=0,o=Math.min(n,r);i0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),""},a.prototype.compare=function(t,e,n,r,i){if(!a.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),e<0||n>t.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&e>=n)return 0;if(r>=i)return-1;if(e>=n)return 1;if(e>>>=0,n>>>=0,r>>>=0,i>>>=0,this===t)return 0;for(var o=i-r,s=n-e,u=Math.min(o,s),l=this.slice(r,i),c=t.slice(e,n),d=0;di)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return w(this,t,e,n);case"utf8":case"utf-8":return L(this,t,e,n);case"ascii":return k(this,t,e,n);case"latin1":case"binary":return T(this,t,e,n);case"base64":return D(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var tt=4096;a.prototype.slice=function(t,e){var n=this.length;t=~~t,e=void 0===e?n:~~e,t<0?(t+=n,t<0&&(t=0)):t>n&&(t=n),e<0?(e+=n,e<0&&(e=0)):e>n&&(e=n),e0&&(i*=256);)r+=this[t+--e]*i;return r},a.prototype.readUInt8=function(t,e){return e||j(t,1,this.length),this[t]},a.prototype.readUInt16LE=function(t,e){return e||j(t,2,this.length),this[t]|this[t+1]<<8},a.prototype.readUInt16BE=function(t,e){return e||j(t,2,this.length),this[t]<<8|this[t+1]},a.prototype.readUInt32LE=function(t,e){return e||j(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},a.prototype.readUInt32BE=function(t,e){return e||j(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},a.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||j(t,e,this.length);for(var r=this[t],i=1,o=0;++o=i&&(r-=Math.pow(2,8*e)),r},a.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||j(t,e,this.length);for(var r=e,i=1,o=this[t+--r];r>0&&(i*=256);)o+=this[t+--r]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},a.prototype.readInt8=function(t,e){return e||j(t,1,this.length),128&this[t]?(255-this[t]+1)*-1:this[t]},a.prototype.readInt16LE=function(t,e){e||j(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt16BE=function(t,e){e||j(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt32LE=function(t,e){return e||j(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},a.prototype.readInt32BE=function(t,e){return e||j(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},a.prototype.readFloatLE=function(t,e){return e||j(t,4,this.length),Q.read(this,t,!0,23,4)},a.prototype.readFloatBE=function(t,e){return e||j(t,4,this.length),Q.read(this,t,!1,23,4)},a.prototype.readDoubleLE=function(t,e){return e||j(t,8,this.length),Q.read(this,t,!0,52,8)},a.prototype.readDoubleBE=function(t,e){return e||j(t,8,this.length),Q.read(this,t,!1,52,8)},a.prototype.writeUIntLE=function(t,e,n,r){if(t=+t,e|=0,n|=0,!r){var i=Math.pow(2,8*n)-1;R(this,t,e,n,i,0)}var o=1,a=0;for(this[e]=255&t;++a=0&&(a*=256);)this[e+o]=t/a&255;return e+n},a.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,1,255,0),a.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},a.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):H(this,t,e,!0),e+2},a.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):H(this,t,e,!1),e+2},a.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):N(this,t,e,!0),e+4},a.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):N(this,t,e,!1),e+4},a.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);R(this,t,e,n,i-1,-i)}var o=0,a=1,s=0;for(this[e]=255&t;++o>0)-s&255;return e+n},a.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);R(this,t,e,n,i-1,-i)}var o=n-1,a=1,s=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+n},a.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,1,127,-128),a.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},a.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):H(this,t,e,!0),e+2},a.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):H(this,t,e,!1),e+2},a.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,4,2147483647,-2147483648),a.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):N(this,t,e,!0),e+4},a.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):N(this,t,e,!1),e+4},a.prototype.writeFloatLE=function(t,e,n){return W(this,t,e,!0,n)},a.prototype.writeFloatBE=function(t,e,n){return W(this,t,e,!1,n)},a.prototype.writeDoubleLE=function(t,e,n){return U(this,t,e,!0,n)},a.prototype.writeDoubleBE=function(t,e,n){return U(this,t,e,!1,n)},a.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;--i)t[i+e]=this[i+n];else if(o<1e3||!a.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,n=void 0===n?this.length:n>>>0,t||(t=0);var o;if("number"==typeof t)for(o=e;o0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");n===-1&&(n=e);var r=n===e?0:4-n%4;return[n,r]}function r(t){var e=n(t),r=e[0],i=e[1];return 3*(r+i)/4-i}function i(t,e,n){return 3*(e+n)/4-n}function o(t){for(var e,r=n(t),o=r[0],a=r[1],s=new d(i(t,o,a)),u=0,l=a>0?o-4:o,h=0;h>16&255,s[u++]=e>>8&255,s[u++]=255&e;return 2===a&&(e=c[t.charCodeAt(h)]<<2|c[t.charCodeAt(h+1)]>>4,s[u++]=255&e),1===a&&(e=c[t.charCodeAt(h)]<<10|c[t.charCodeAt(h+1)]<<4|c[t.charCodeAt(h+2)]>>2,s[u++]=e>>8&255,s[u++]=255&e),s}function a(t){return l[t>>18&63]+l[t>>12&63]+l[t>>6&63]+l[63&t]}function s(t,e,n){for(var r,i=[],o=e;ou?u:a+o));return 1===r?(e=t[n-1],i.push(l[e>>2]+l[e<<4&63]+"==")):2===r&&(e=(t[n-2]<<8)+t[n-1],i.push(l[e>>10]+l[e>>4&63]+l[e<<2&63]+"=")),i.join("")}e.byteLength=r,e.toByteArray=o,e.fromByteArray=u;for(var l=[],c=[],d="undefined"!=typeof Uint8Array?Uint8Array:Array,h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=0,p=h.length;f>1,c=-7,d=n?i-1:0,h=n?-1:1,f=t[e+d];for(d+=h,o=f&(1<<-c)-1,f>>=-c,c+=s;c>0;o=256*o+t[e+d],d+=h,c-=8);for(a=o&(1<<-c)-1,o>>=-c,c+=r;c>0;a=256*a+t[e+d],d+=h,c-=8);if(0===o)o=1-l;else{if(o===u)return a?NaN:(f?-1:1)*(1/0);a+=Math.pow(2,r),o-=l}return(f?-1:1)*a*Math.pow(2,o-r)},e.write=function(t,e,n,r,i,o){var a,s,u,l=8*o-i-1,c=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:o-1,p=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=c):(a=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-a))<1&&(a--,u*=2),e+=a+d>=1?h/u:h*Math.pow(2,1-d),e*u>=2&&(a++,u/=2),a+d>=c?(s=0,a=c):a+d>=1?(s=(e*u-1)*Math.pow(2,i),a+=d):(s=e*Math.pow(2,d-1)*Math.pow(2,i),a=0));i>=8;t[n+f]=255&s,f+=p,s/=256,i-=8);for(a=a<0;t[n+f]=255&a,f+=p,a/=256,l-=8);t[n+f-p]|=128*m}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,n){"use strict";n(229),n(512),n(422),n(275),n(583),n(237),n(584),n(536),n(257),n(291),n(234),n(2),n(586),n(437),n(31),n(164),n(534),n(457)},function(t,e){/*! +"use strict";function r(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}function i(){return a.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function o(t,e){if(i()=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|t}function _(t){return+t!=t&&(t=0),a.alloc(+t)}function y(t,e){if(a.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return q(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return K(t).length;default:if(r)return q(t).length;e=(""+e).toLowerCase(),r=!0}}function v(t,e,n){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if(n>>>=0,e>>>=0,n<=e)return"";for(t||(t="utf8");;)switch(t){case"hex":return O(this,e,n);case"utf8":case"utf-8":return Y(this,e,n);case"ascii":return E(this,e,n);case"latin1":case"binary":return P(this,e,n);case"base64":return x(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function g(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function M(t,e,n,r,i){if(0===t.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof e&&(e=a.from(e,r)),a.isBuffer(e))return 0===e.length?-1:b(t,e,n,r,i);if("number"==typeof e)return e&=255,a.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):b(t,[e],n,r,i);throw new TypeError("val must be string, number or Buffer")}function b(t,e,n,r,i){function o(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}var a=1,s=t.length,u=e.length;if(void 0!==r&&(r=String(r).toLowerCase(),"ucs2"===r||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;a=2,s/=2,u/=2,n/=2}var l;if(i){var c=-1;for(l=n;ls&&(n=s-u),l=n;l>=0;l--){for(var d=!0,h=0;hi&&(r=i)):r=i;var o=e.length;if(o%2!==0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var a=0;a239?4:o>223?3:o>191?2:1;if(i+s<=n){var u,l,c,d;switch(s){case 1:o<128&&(a=o);break;case 2:u=t[i+1],128===(192&u)&&(d=(31&o)<<6|63&u,d>127&&(a=d));break;case 3:u=t[i+1],l=t[i+2],128===(192&u)&&128===(192&l)&&(d=(15&o)<<12|(63&u)<<6|63&l,d>2047&&(d<55296||d>57343)&&(a=d));break;case 4:u=t[i+1],l=t[i+2],c=t[i+3],128===(192&u)&&128===(192&l)&&128===(192&c)&&(d=(15&o)<<18|(63&u)<<12|(63&l)<<6|63&c,d>65535&&d<1114112&&(a=d))}}null===a?(a=65533,s=1):a>65535&&(a-=65536,r.push(a>>>10&1023|55296),a=56320|1023&a),r.push(a),i+=s}return C(r)}function C(t){var e=t.length;if(e<=tt)return String.fromCharCode.apply(String,t);for(var n="",r=0;rr)&&(n=r);for(var i="",o=e;on)throw new RangeError("Trying to access beyond buffer length")}function R(t,e,n,r,i,o){if(!a.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function H(t,e,n,r){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-n,2);i>>8*(r?i:1-i)}function N(t,e,n,r){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-n,4);i>>8*(r?i:3-i)&255}function I(t,e,n,r,i,o){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function W(t,e,n,r,i){return i||I(t,e,n,4,3.4028234663852886e38,-3.4028234663852886e38),Q.write(t,e,n,r,23,4),n+4}function U(t,e,n,r,i){return i||I(t,e,n,8,1.7976931348623157e308,-1.7976931348623157e308),Q.write(t,e,n,r,52,8),n+8}function F(t){if(t=z(t).replace(et,""),t.length<2)return"";for(;t.length%4!==0;)t+="=";return t}function z(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function B(t){return t<16?"0"+t.toString(16):t.toString(16)}function q(t,e){e=e||1/0;for(var n,r=t.length,i=null,o=[],a=0;a55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===r){(e-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),i=n;continue}n=(i-55296<<10|n-56320)+65536}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function V(t){for(var e=[],n=0;n>8,i=n%256,o.push(i),o.push(r);return o}function K(t){return G.toByteArray(F(t))}function J(t,e,n,r){for(var i=0;i=e.length||i>=t.length);++i)e[i+n]=t[i];return i}function X(t){return t!==t}var G=n(425),Q=n(426),Z=n(427);e.Buffer=a,e.SlowBuffer=_,e.INSPECT_MAX_BYTES=50,a.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:r(),e.kMaxLength=i(),a.poolSize=8192,a._augment=function(t){return t.__proto__=a.prototype,t},a.from=function(t,e,n){return s(null,t,e,n)},a.TYPED_ARRAY_SUPPORT&&(a.prototype.__proto__=Uint8Array.prototype,a.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&a[Symbol.species]===a&&Object.defineProperty(a,Symbol.species,{value:null,configurable:!0})),a.alloc=function(t,e,n){return l(null,t,e,n)},a.allocUnsafe=function(t){return c(null,t)},a.allocUnsafeSlow=function(t){return c(null,t)},a.isBuffer=function(t){return!(null==t||!t._isBuffer)},a.compare=function(t,e){if(!a.isBuffer(t)||!a.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,r=e.length,i=0,o=Math.min(n,r);i0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),""},a.prototype.compare=function(t,e,n,r,i){if(!a.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),e<0||n>t.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&e>=n)return 0;if(r>=i)return-1;if(e>=n)return 1;if(e>>>=0,n>>>=0,r>>>=0,i>>>=0,this===t)return 0;for(var o=i-r,s=n-e,u=Math.min(o,s),l=this.slice(r,i),c=t.slice(e,n),d=0;di)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return w(this,t,e,n);case"utf8":case"utf-8":return L(this,t,e,n);case"ascii":return k(this,t,e,n);case"latin1":case"binary":return T(this,t,e,n);case"base64":return D(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var tt=4096;a.prototype.slice=function(t,e){var n=this.length;t=~~t,e=void 0===e?n:~~e,t<0?(t+=n,t<0&&(t=0)):t>n&&(t=n),e<0?(e+=n,e<0&&(e=0)):e>n&&(e=n),e0&&(i*=256);)r+=this[t+--e]*i;return r},a.prototype.readUInt8=function(t,e){return e||j(t,1,this.length),this[t]},a.prototype.readUInt16LE=function(t,e){return e||j(t,2,this.length),this[t]|this[t+1]<<8},a.prototype.readUInt16BE=function(t,e){return e||j(t,2,this.length),this[t]<<8|this[t+1]},a.prototype.readUInt32LE=function(t,e){return e||j(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},a.prototype.readUInt32BE=function(t,e){return e||j(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},a.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||j(t,e,this.length);for(var r=this[t],i=1,o=0;++o=i&&(r-=Math.pow(2,8*e)),r},a.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||j(t,e,this.length);for(var r=e,i=1,o=this[t+--r];r>0&&(i*=256);)o+=this[t+--r]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},a.prototype.readInt8=function(t,e){return e||j(t,1,this.length),128&this[t]?(255-this[t]+1)*-1:this[t]},a.prototype.readInt16LE=function(t,e){e||j(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt16BE=function(t,e){e||j(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt32LE=function(t,e){return e||j(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},a.prototype.readInt32BE=function(t,e){return e||j(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},a.prototype.readFloatLE=function(t,e){return e||j(t,4,this.length),Q.read(this,t,!0,23,4)},a.prototype.readFloatBE=function(t,e){return e||j(t,4,this.length),Q.read(this,t,!1,23,4)},a.prototype.readDoubleLE=function(t,e){return e||j(t,8,this.length),Q.read(this,t,!0,52,8)},a.prototype.readDoubleBE=function(t,e){return e||j(t,8,this.length),Q.read(this,t,!1,52,8)},a.prototype.writeUIntLE=function(t,e,n,r){if(t=+t,e|=0,n|=0,!r){var i=Math.pow(2,8*n)-1;R(this,t,e,n,i,0)}var o=1,a=0;for(this[e]=255&t;++a=0&&(a*=256);)this[e+o]=t/a&255;return e+n},a.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,1,255,0),a.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},a.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):H(this,t,e,!0),e+2},a.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):H(this,t,e,!1),e+2},a.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):N(this,t,e,!0),e+4},a.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):N(this,t,e,!1),e+4},a.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);R(this,t,e,n,i-1,-i)}var o=0,a=1,s=0;for(this[e]=255&t;++o>0)-s&255;return e+n},a.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);R(this,t,e,n,i-1,-i)}var o=n-1,a=1,s=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+n},a.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,1,127,-128),a.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},a.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):H(this,t,e,!0),e+2},a.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):H(this,t,e,!1),e+2},a.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,4,2147483647,-2147483648),a.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):N(this,t,e,!0),e+4},a.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):N(this,t,e,!1),e+4},a.prototype.writeFloatLE=function(t,e,n){return W(this,t,e,!0,n)},a.prototype.writeFloatBE=function(t,e,n){return W(this,t,e,!1,n)},a.prototype.writeDoubleLE=function(t,e,n){return U(this,t,e,!0,n)},a.prototype.writeDoubleBE=function(t,e,n){return U(this,t,e,!1,n)},a.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;--i)t[i+e]=this[i+n];else if(o<1e3||!a.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,n=void 0===n?this.length:n>>>0,t||(t=0);var o;if("number"==typeof t)for(o=e;o0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");n===-1&&(n=e);var r=n===e?0:4-n%4;return[n,r]}function r(t){var e=n(t),r=e[0],i=e[1];return 3*(r+i)/4-i}function i(t,e,n){return 3*(e+n)/4-n}function o(t){for(var e,r=n(t),o=r[0],a=r[1],s=new d(i(t,o,a)),u=0,l=a>0?o-4:o,h=0;h>16&255,s[u++]=e>>8&255,s[u++]=255&e;return 2===a&&(e=c[t.charCodeAt(h)]<<2|c[t.charCodeAt(h+1)]>>4,s[u++]=255&e),1===a&&(e=c[t.charCodeAt(h)]<<10|c[t.charCodeAt(h+1)]<<4|c[t.charCodeAt(h+2)]>>2,s[u++]=e>>8&255,s[u++]=255&e),s}function a(t){return l[t>>18&63]+l[t>>12&63]+l[t>>6&63]+l[63&t]}function s(t,e,n){for(var r,i=[],o=e;ou?u:a+o));return 1===r?(e=t[n-1],i.push(l[e>>2]+l[e<<4&63]+"==")):2===r&&(e=(t[n-2]<<8)+t[n-1],i.push(l[e>>10]+l[e>>4&63]+l[e<<2&63]+"=")),i.join("")}e.byteLength=r,e.toByteArray=o,e.fromByteArray=u;for(var l=[],c=[],d="undefined"!=typeof Uint8Array?Uint8Array:Array,h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=0,p=h.length;f>1,c=-7,d=n?i-1:0,h=n?-1:1,f=t[e+d];for(d+=h,o=f&(1<<-c)-1,f>>=-c,c+=s;c>0;o=256*o+t[e+d],d+=h,c-=8);for(a=o&(1<<-c)-1,o>>=-c,c+=r;c>0;a=256*a+t[e+d],d+=h,c-=8);if(0===o)o=1-l;else{if(o===u)return a?NaN:(f?-1:1)*(1/0);a+=Math.pow(2,r),o-=l}return(f?-1:1)*a*Math.pow(2,o-r)},e.write=function(t,e,n,r,i,o){var a,s,u,l=8*o-i-1,c=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:o-1,p=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=c):(a=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-a))<1&&(a--,u*=2),e+=a+d>=1?h/u:h*Math.pow(2,1-d),e*u>=2&&(a++,u/=2),a+d>=c?(s=0,a=c):a+d>=1?(s=(e*u-1)*Math.pow(2,i),a+=d):(s=e*Math.pow(2,d-1)*Math.pow(2,i),a=0));i>=8;t[n+f]=255&s,f+=p,s/=256,i-=8);for(a=a<0;t[n+f]=255&a,f+=p,a/=256,l-=8);t[n+f-p]|=128*m}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},,,,,,,,,,,,,,function(t,e,n){t.exports=n(442)},function(t,e,n){"use strict";function r(t){var e="transition"+t+"Timeout",n="transition"+t;return function(t){if(t[n]){if(null==t[e])return new Error(e+" wasn't supplied to ReactCSSTransitionGroup: this can cause unreliable animations and won't be supported in a future version of React. See https://fb.me/react-animation-transition-group-timeout for more information.");if("number"!=typeof t[e])return new Error(e+" must be a number (in milliseconds)")}}}var i=n(4),o=n(3),a=n(443),s=n(445),u=o.createClass({displayName:"ReactCSSTransitionGroup",propTypes:{transitionName:s.propTypes.name,transitionAppear:o.PropTypes.bool,transitionEnter:o.PropTypes.bool,transitionLeave:o.PropTypes.bool,transitionAppearTimeout:r("Appear"),transitionEnterTimeout:r("Enter"),transitionLeaveTimeout:r("Leave")},getDefaultProps:function(){return{transitionAppear:!1,transitionEnter:!0,transitionLeave:!0}},_wrapChild:function(t){return o.createElement(s,{name:this.props.transitionName,appear:this.props.transitionAppear,enter:this.props.transitionEnter,leave:this.props.transitionLeave,appearTimeout:this.props.transitionAppearTimeout,enterTimeout:this.props.transitionEnterTimeout,leaveTimeout:this.props.transitionLeaveTimeout},t)},render:function(){return o.createElement(a,i({},this.props,{childFactory:this._wrapChild}))}});t.exports=u},function(t,e,n){"use strict";var r=n(4),i=n(3),o=(n(110),n(444)),a=n(12),s=i.createClass({displayName:"ReactTransitionGroup",propTypes:{component:i.PropTypes.any,childFactory:i.PropTypes.func},getDefaultProps:function(){return{component:"span",childFactory:a.thatReturnsArgument}},getInitialState:function(){return{children:o.getChildMapping(this.props.children)}},componentWillMount:function(){this.currentlyTransitioningKeys={},this.keysToEnter=[],this.keysToLeave=[]},componentDidMount:function(){var t=this.state.children;for(var e in t)t[e]&&this.performAppear(e)},componentWillReceiveProps:function(t){var e;e=o.getChildMapping(t.children);var n=this.state.children;this.setState({children:o.mergeChildMappings(n,e)});var r;for(r in e){var i=n&&n.hasOwnProperty(r);!e[r]||i||this.currentlyTransitioningKeys[r]||this.keysToEnter.push(r)}for(r in n){var a=e&&e.hasOwnProperty(r);!n[r]||a||this.currentlyTransitioningKeys[r]||this.keysToLeave.push(r)}},componentDidUpdate:function(){var t=this.keysToEnter;this.keysToEnter=[],t.forEach(this.performEnter);var e=this.keysToLeave;this.keysToLeave=[],e.forEach(this.performLeave)},performAppear:function(t){this.currentlyTransitioningKeys[t]=!0;var e=this.refs[t];e.componentWillAppear?e.componentWillAppear(this._handleDoneAppearing.bind(this,t)):this._handleDoneAppearing(t)},_handleDoneAppearing:function(t){var e=this.refs[t];e.componentDidAppear&&e.componentDidAppear(),delete this.currentlyTransitioningKeys[t];var n;n=o.getChildMapping(this.props.children),n&&n.hasOwnProperty(t)||this.performLeave(t)},performEnter:function(t){this.currentlyTransitioningKeys[t]=!0;var e=this.refs[t];e.componentWillEnter?e.componentWillEnter(this._handleDoneEntering.bind(this,t)):this._handleDoneEntering(t)},_handleDoneEntering:function(t){var e=this.refs[t];e.componentDidEnter&&e.componentDidEnter(),delete this.currentlyTransitioningKeys[t];var n;n=o.getChildMapping(this.props.children),n&&n.hasOwnProperty(t)||this.performLeave(t)},performLeave:function(t){this.currentlyTransitioningKeys[t]=!0;var e=this.refs[t];e.componentWillLeave?e.componentWillLeave(this._handleDoneLeaving.bind(this,t)):this._handleDoneLeaving(t)},_handleDoneLeaving:function(t){var e=this.refs[t];e.componentDidLeave&&e.componentDidLeave(),delete this.currentlyTransitioningKeys[t];var n;n=o.getChildMapping(this.props.children),n&&n.hasOwnProperty(t)?this.performEnter(t):this.setState(function(e){var n=r({},e.children);return delete n[t],{children:n}})},render:function(){var t=[];for(var e in this.state.children){var n=this.state.children[e];n&&t.push(i.cloneElement(this.props.childFactory(n),{ref:e,key:e}))}var o=r({},this.props);return delete o.transitionLeave,delete o.transitionName,delete o.transitionAppear,delete o.transitionEnter,delete o.childFactory,delete o.transitionLeaveTimeout,delete o.transitionEnterTimeout,delete o.transitionAppearTimeout,delete o.component,i.createElement(this.props.component,o,t)}});t.exports=s},function(t,e,n){"use strict";var r=n(122),i={getChildMapping:function(t,e){return t?r(t):t},mergeChildMappings:function(t,e){function n(n){return e.hasOwnProperty(n)?e[n]:t[n]}t=t||{},e=e||{};var r={},i=[];for(var o in t)e.hasOwnProperty(o)?i.length&&(r[o]=i,i=[]):i.push(o);var a,s={};for(var u in e){if(r.hasOwnProperty(u))for(a=0;a-1},matchesSelector:function(t,e){var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.msMatchesSelector||function(e){return r(t,e)};return n.call(t,e)}};t.exports=o},function(t,e,n){"use strict";function r(){var t=s("animationend"),e=s("transitionend");t&&u.push(t),e&&u.push(e)}function i(t,e,n){t.addEventListener(e,n,!1)}function o(t,e,n){t.removeEventListener(e,n,!1)}var a=n(46),s=n(100),u=[];a.canUseDOM&&r();var l={addEndEventListener:function(t,e){return 0===u.length?void window.setTimeout(e,0):void u.forEach(function(n){i(t,n,e)})},removeEndEventListener:function(t,e){0!==u.length&&u.forEach(function(n){o(t,n,e)})}};t.exports=l},,,,,,,,,,,,,,function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.RootCloseWrapper=e.Transition=e.Position=e.Portal=e.Overlay=e.Modal=e.AutoAffix=e.Affix=void 0;var i=n(462),o=r(i),a=n(488),s=r(a),u=n(492),l=r(u),c=n(505),d=r(c),h=n(494),f=r(h),p=n(506),m=r(p),_=n(511),y=r(_),v=n(510),g=r(v);e.Affix=o.default,e.AutoAffix=s.default,e.Modal=l.default,e.Overlay=d.default,e.Portal=f.default,e.Position=m.default,e.Transition=y.default,e.RootCloseWrapper=g.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var s=Object.assign||function(t){for(var e=1;ethis.getPositionTopMax()?void("bottom"===this.state.affixed?this.updateStateAtBottom():this.setState({affixed:"bottom",position:"absolute",top:null},function(){t._isMounted&&t.updateStateAtBottom()})):void this.updateState("affix","fixed",r)}}},{key:"getPositionTopMax",value:function(){var t=(0,x.default)((0,C.default)(this)),e=(0,h.default)(k.default.findDOMNode(this));return t-e-this.props.offsetBottom}},{key:"updateState",value:function(t,e,n){var r=this;if(t!==this.state.affixed||e!==this.state.position||n!==this.state.top){var i="affix"===t?"":t.charAt(0).toUpperCase()+t.substr(1);this.props["onAffix"+i]&&this.props["onAffix"+i](),this.setState({affixed:t,position:e,top:n},function(){r.props["onAffixed"+i]&&r.props["onAffixed"+i]()})}}},{key:"updateStateAtBottom",value:function(){var t=this.getPositionTopMax(),e=(0,_.default)(k.default.findDOMNode(this)),n=(0,p.default)(e).top;this.updateState("bottom","absolute",t-n)}},{key:"render",value:function(){var t=w.default.Children.only(this.props.children),e=t.props,n=e.className,r=e.style,i=this.state,o=i.affixed,a=i.position,u=i.top,l={position:a,top:u},d=void 0,h=void 0;return"top"===o?(d=this.props.topClassName,h=this.props.topStyle):"bottom"===o?(d=this.props.bottomClassName,h=this.props.bottomStyle):(d=this.props.affixClassName,h=this.props.affixStyle),w.default.cloneElement(t,{className:(0,c.default)(d,n),style:s({},l,h,r)})}}]),e}(w.default.Component);O.propTypes={offsetTop:w.default.PropTypes.number,viewportOffsetTop:w.default.PropTypes.number,offsetBottom:w.default.PropTypes.number,topClassName:w.default.PropTypes.string,topStyle:w.default.PropTypes.object,affixClassName:w.default.PropTypes.string,affixStyle:w.default.PropTypes.object,bottomClassName:w.default.PropTypes.string,bottomStyle:w.default.PropTypes.object,onAffix:w.default.PropTypes.func,onAffixed:w.default.PropTypes.func,onAffixTop:w.default.PropTypes.func,onAffixedTop:w.default.PropTypes.func,onAffixBottom:w.default.PropTypes.func,onAffixedBottom:w.default.PropTypes.func},O.defaultProps={offsetTop:0,viewportOffsetTop:null,offsetBottom:0},e.default=O,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){var n=(0,u.default)(t);return n?n.innerHeight:e?t.clientHeight:(0,a.default)(t).height}Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var o=n(464),a=r(o),s=n(467),u=r(s);t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){var e=(0,c.default)(t),n=(0,u.default)(e),r=e&&e.documentElement,i={top:0,left:0,height:0,width:0};if(e)return(0,a.default)(r,t)?(void 0!==t.getBoundingClientRect&&(i=t.getBoundingClientRect()),i={top:i.top+(n.pageYOffset||r.scrollTop)-(r.clientTop||0),left:i.left+(n.pageXOffset||r.scrollLeft)-(r.clientLeft||0),width:(null==i.width?t.offsetWidth:i.width)||0,height:(null==i.height?t.offsetHeight:i.height)||0}):i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var o=n(465),a=r(o),s=n(467),u=r(s),l=n(468),c=r(l);t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){if(e)do if(e===t)return!0;while(e=e.parentNode);return!1}Object.defineProperty(e,"__esModule",{value:!0});var o=n(466),a=r(o);e.default=function(){return a.default?function(t,e){return t.contains?t.contains(e):t.compareDocumentPosition?t===e||!!(16&t.compareDocumentPosition(e)):i(t,e)}:i}(),t.exports=e.default},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=!("undefined"==typeof window||!window.document||!window.document.createElement),t.exports=e.default},function(t,e){"use strict";function n(t){return t===t.window?t:9===t.nodeType&&(t.defaultView||t.parentWindow)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n,t.exports=e.default},function(t,e){"use strict";function n(t){return t&&t.ownerDocument||document}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return t.nodeName&&t.nodeName.toLowerCase()}function o(t){for(var e=(0,s.default)(t),n=t&&t.offsetParent;n&&"html"!==i(t)&&"static"===(0,l.default)(n,"position");)n=n.offsetParent;return n||e.documentElement}Object.defineProperty(e,"__esModule",{value:!0}),e.default=o;var a=n(468),s=r(a),u=n(470),l=r(u);t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e,n){var r="",i="",o=e;if("string"==typeof e){if(void 0===n)return t.style[(0,a.default)(e)]||(0,c.default)(t).getPropertyValue((0,u.default)(e));(o={})[e]=n}Object.keys(o).forEach(function(e){var n=o[e];n||0===n?(0,m.default)(e)?i+=e+"("+n+") ":r+=(0,u.default)(e)+": "+n+";":(0,h.default)(t,(0,u.default)(e))}),i&&(r+=f.transform+": "+i+";"),t.style.cssText+=";"+r}Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var o=n(471),a=r(o),s=n(473),u=r(s),l=n(475),c=r(l),d=n(476),h=r(d),f=n(477),p=n(478),m=r(p);t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return(0,a.default)(t.replace(s,"ms-"))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var o=n(472),a=r(o),s=/^-ms-/;t.exports=e.default},function(t,e){"use strict";function n(t){return t.replace(r,function(t,e){return e.toUpperCase()})}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n;var r=/-(.)/g;t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return(0,a.default)(t).replace(s,"-ms-")}Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var o=n(474),a=r(o),s=/^ms-/;t.exports=e.default},function(t,e){"use strict";function n(t){return t.replace(r,"-$1").toLowerCase()}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n;var r=/([A-Z])/g;t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){if(!t)throw new TypeError("No Element passed to `getComputedStyle()`");var e=t.ownerDocument;return"defaultView"in e?e.defaultView.opener?t.ownerDocument.defaultView.getComputedStyle(t,null):window.getComputedStyle(t,null):{getPropertyValue:function(e){var n=t.style;e=(0,a.default)(e),"float"==e&&(e="styleFloat");var r=t.currentStyle[e]||null;if(null==r&&n&&n[e]&&(r=n[e]),u.test(r)&&!s.test(e)){var i=n.left,o=t.runtimeStyle,l=o&&o.left;l&&(o.left=t.currentStyle.left),n.left="fontSize"===e?"1em":r,r=n.pixelLeft+"px",n.left=i,l&&(o.left=l)}return r}}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var o=n(471),a=r(o),s=/^(top|right|bottom|left)$/,u=/^([+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/i;t.exports=e.default},function(t,e){"use strict";function n(t,e){return"removeProperty"in t.style?t.style.removeProperty(e):t.style.removeAttribute(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(){for(var t=document.createElement("div").style,e={O:function(t){return"o"+t.toLowerCase()},Moz:function(t){return t.toLowerCase()},Webkit:function(t){return"webkit"+t},ms:function(t){return"MS"+t}},n=Object.keys(e),r=void 0,i=void 0,o="",a=0;a=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var u=Object.assign||function(t){for(var e=1;e>",u=a||r;if(null==n[r])return e?new Error("Required "+o+" `"+u+"` was not specified "+("in `"+s+"`.")):null;for(var l=arguments.length,c=Array(l>6?l-6:0),d=6;d0&&void 0!==arguments[0]?arguments[0]:{},n=e.hideSiblingNodes,r=void 0===n||n,o=e.handleContainerOverflow,a=void 0===o||o;i(this,t),this.hideSiblingNodes=r,this.handleContainerOverflow=a,this.modals=[],this.containers=[],this.data=[]}return l(t,[{key:"add",value:function(t,e,n){var r=this.modals.indexOf(t),i=this.containers.indexOf(e);if(r!==-1)return r;if(r=this.modals.length,this.modals.push(t),this.hideSiblingNodes&&(0,v.hideSiblings)(e,t.mountNode),i!==-1)return this.data[i].modals.push(t),r;var o={modals:[t],classes:n?n.split(/\s+/):[],overflowing:(0,y.default)(e)};return this.handleContainerOverflow&&s(o,e),o.classes.forEach(f.default.addClass.bind(null,e)),this.containers.push(e),this.data.push(o),r}},{key:"remove",value:function(t){var e=this.modals.indexOf(t);if(e!==-1){var n=a(this.data,t),r=this.data[n],i=this.containers[n];r.modals.splice(r.modals.indexOf(t),1),this.modals.splice(e,1),0===r.modals.length?(r.classes.forEach(f.default.removeClass.bind(null,i)),this.handleContainerOverflow&&u(r,i),this.hideSiblingNodes&&(0,v.showSiblings)(i,t.mountNode),this.containers.splice(n,1),this.data.splice(n,1)):this.hideSiblingNodes&&(0,v.ariaHidden)(!1,r.modals[r.modals.length-1].mountNode)}}},{key:"isTopModal",value:function(t){return!!this.modals.length&&this.modals[this.modals.length-1]===t}}]),t}();e.default=g,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.hasClass=e.removeClass=e.addClass=void 0;var i=n(497),o=r(i),a=n(499),s=r(a),u=n(498),l=r(u);e.addClass=o.default,e.removeClass=s.default,e.hasClass=l.default,e.default={addClass:o.default,removeClass:s.default,hasClass:l.default}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){t.classList?t.classList.add(e):(0,a.default)(t,e)||("string"==typeof t.className?t.className=t.className+" "+e:t.setAttribute("class",(t.className&&t.className.baseVal||"")+" "+e))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var o=n(498),a=r(o);t.exports=e.default},function(t,e){"use strict";function n(t,e){return t.classList?!!e&&t.classList.contains(e):(" "+(t.className.baseVal||t.className)+" ").indexOf(" "+e+" ")!==-1}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n,t.exports=e.default},function(t,e){"use strict";function n(t,e){return t.replace(new RegExp("(^|\\s)"+e+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}t.exports=function(t,e){t.classList?t.classList.remove(e):"string"==typeof t.className?t.className=n(t.className,e):t.setAttribute("class",n(t.className&&t.className.baseVal||"",e))}},function(t,e,n){"use strict"; +function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){if((!a&&0!==a||t)&&o.default){var e=document.createElement("div");e.style.position="absolute",e.style.top="-9999px",e.style.width="50px",e.style.height="50px",e.style.overflow="scroll",document.body.appendChild(e),a=e.offsetWidth-e.clientWidth,document.body.removeChild(e)}return a};var i=n(466),o=r(i),a=void 0;t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return t&&"body"===t.tagName.toLowerCase()}function o(t){var e=(0,c.default)(t),n=(0,u.default)(e),r=n.innerWidth;if(!r){var i=e.documentElement.getBoundingClientRect();r=i.right-Math.abs(i.left)}return e.body.clientWidtht.clientHeight}Object.defineProperty(e,"__esModule",{value:!0}),e.default=a;var s=n(467),u=r(s),l=n(468),c=r(l);t.exports=e.default},function(t,e){"use strict";function n(t,e){e&&(t?e.setAttribute("aria-hidden","true"):e.removeAttribute("aria-hidden"))}function r(t,e){s(t,e,function(t){return n(!0,t)})}function i(t,e){s(t,e,function(t){return n(!1,t)})}Object.defineProperty(e,"__esModule",{value:!0}),e.ariaHidden=n,e.hideSiblings=r,e.showSiblings=i;var o=["template","script","style"],a=function(t){var e=t.nodeType,n=t.tagName;return 1===e&&o.indexOf(n.toLowerCase())===-1},s=function(t,e,n){e=[].concat(e),[].forEach.call(t.children,function(t){e.indexOf(t)===-1&&a(t)&&n(t)})}},function(t,e){"use strict";function n(t){var e=!document.addEventListener,n=void 0;return e?(document.attachEvent("onfocusin",t),n=function(){return document.detachEvent("onfocusin",t)}):(document.addEventListener("focus",t,!0),n=function(){return document.removeEventListener("focus",t,!0)}),{remove:n}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:(0,a.default)();try{return t.activeElement}catch(t){}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var o=n(468),a=r(o);t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){var n={};for(var r in t)e.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var u=Object.assign||function(t){for(var e=1;e1?n-1:0),i=1;i=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var u=Object.assign||function(t){for(var e=1;es?s-l:0}function a(t,e,n,r){var o=i(n),a=o.width,s=t-r,u=t+r+e;return s<0?-s:u>a?a-u:0}function s(t,e,n,r,i){var s="BODY"===r.tagName?(0,l.default)(n):(0,d.default)(n,r),u=(0,l.default)(e),c=u.height,h=u.width,f=void 0,p=void 0,m=void 0,_=void 0;if("left"===t||"right"===t){p=s.top+(s.height-c)/2,f="left"===t?s.left-h:s.left+s.width;var y=o(p,c,r,i);p+=y,_=50*(1-2*y/c)+"%",m=void 0}else{if("top"!==t&&"bottom"!==t)throw new Error('calcOverlayPosition(): No such placement of "'+t+'" found.');f=s.left+(s.width-h)/2,p="top"===t?s.top-c:s.top+s.height;var v=a(f,h,r,i);f+=v,m=50*(1-2*v/h)+"%",_=void 0}return{positionLeft:f,positionTop:p,arrowOffsetLeft:m,arrowOffsetTop:_}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=s;var u=n(464),l=r(u),c=n(508),d=r(c),h=n(479),f=r(h),p=n(485),m=r(p);t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return t.nodeName&&t.nodeName.toLowerCase()}function o(t,e){var n,r={top:0,left:0};return"fixed"===(0,_.default)(t,"position")?n=t.getBoundingClientRect():(e=e||(0,c.default)(t),n=(0,u.default)(t),"html"!==i(e)&&(r=(0,u.default)(e)),r.top+=parseInt((0,_.default)(e,"borderTopWidth"),10)-(0,h.default)(e)||0,r.left+=parseInt((0,_.default)(e,"borderLeftWidth"),10)-(0,p.default)(e)||0),a({},n,{top:n.top-r.top-(parseInt((0,_.default)(t,"marginTop"),10)||0),left:n.left-r.left-(parseInt((0,_.default)(t,"marginLeft"),10)||0)})}Object.defineProperty(e,"__esModule",{value:!0});var a=Object.assign||function(t){for(var e=1;e=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function u(){}Object.defineProperty(e,"__esModule",{value:!0}),e.EXITING=e.ENTERED=e.ENTERING=e.EXITED=e.UNMOUNTED=void 0;var l=Object.assign||function(t){for(var e=1;e=0&&n.splice(r,1),t.className=n.join(" ")}e.add=function(t,e){t.classList?t.classList.add(e):n(t,e)},e.remove=function(t,e){t.classList?t.classList.remove(e):r(t,e)},e.list=function(t){return t.classList?Array.prototype.slice.apply(t.classList):t.className.split(" ")}},function(t,e){"use strict";function n(t,e){return window.getComputedStyle(t)[e]}function r(t,e,n){return"number"==typeof n&&(n=n.toString()+"px"),t.style[e]=n,t}function i(t,e){for(var n in e){var r=e[n];"number"==typeof r&&(r=r.toString()+"px"),t.style[n]=r}return t}var o={};o.e=function(t,e){var n=document.createElement(t);return n.className=e,n},o.appendTo=function(t,e){return e.appendChild(t),t},o.css=function(t,e,o){return"object"==typeof e?i(t,e):"undefined"==typeof o?n(t,e):r(t,e,o)},o.matches=function(t,e){return"undefined"!=typeof t.matches?t.matches(e):"undefined"!=typeof t.matchesSelector?t.matchesSelector(e):"undefined"!=typeof t.webkitMatchesSelector?t.webkitMatchesSelector(e):"undefined"!=typeof t.mozMatchesSelector?t.mozMatchesSelector(e):"undefined"!=typeof t.msMatchesSelector?t.msMatchesSelector(e):void 0},o.remove=function(t){"undefined"!=typeof t.remove?t.remove():t.parentNode&&t.parentNode.removeChild(t)},o.queryChildren=function(t,e){return Array.prototype.filter.call(t.childNodes,function(t){return o.matches(t,e)})},t.exports=o},function(t,e,n){"use strict";function r(t){function e(){u.add(t,"ps-focus")}function n(){u.remove(t,"ps-focus")}var r=this;r.settings=s.clone(l),r.containerWidth=null,r.containerHeight=null,r.contentWidth=null,r.contentHeight=null,r.isRtl="rtl"===c.css(t,"direction"),r.isNegativeScroll=function(){var e=t.scrollLeft,n=null;return t.scrollLeft=-1,n=t.scrollLeft<0,t.scrollLeft=e,n}(),r.negativeScrollAdjustment=r.isNegativeScroll?t.scrollWidth-t.clientWidth:0,r.event=new d,r.ownerDocument=t.ownerDocument||document,r.scrollbarXRail=c.appendTo(c.e("div","ps-scrollbar-x-rail"),t),r.scrollbarX=c.appendTo(c.e("div","ps-scrollbar-x"),r.scrollbarXRail),r.scrollbarX.setAttribute("tabindex",0),r.event.bind(r.scrollbarX,"focus",e),r.event.bind(r.scrollbarX,"blur",n),r.scrollbarXActive=null,r.scrollbarXWidth=null,r.scrollbarXLeft=null,r.scrollbarXBottom=s.toInt(c.css(r.scrollbarXRail,"bottom")),r.isScrollbarXUsingBottom=r.scrollbarXBottom===r.scrollbarXBottom,r.scrollbarXTop=r.isScrollbarXUsingBottom?null:s.toInt(c.css(r.scrollbarXRail,"top")),r.railBorderXWidth=s.toInt(c.css(r.scrollbarXRail,"borderLeftWidth"))+s.toInt(c.css(r.scrollbarXRail,"borderRightWidth")),c.css(r.scrollbarXRail,"display","block"),r.railXMarginWidth=s.toInt(c.css(r.scrollbarXRail,"marginLeft"))+s.toInt(c.css(r.scrollbarXRail,"marginRight")),c.css(r.scrollbarXRail,"display",""),r.railXWidth=null,r.railXRatio=null,r.scrollbarYRail=c.appendTo(c.e("div","ps-scrollbar-y-rail"),t),r.scrollbarY=c.appendTo(c.e("div","ps-scrollbar-y"),r.scrollbarYRail),r.scrollbarY.setAttribute("tabindex",0),r.event.bind(r.scrollbarY,"focus",e),r.event.bind(r.scrollbarY,"blur",n),r.scrollbarYActive=null,r.scrollbarYHeight=null,r.scrollbarYTop=null,r.scrollbarYRight=s.toInt(c.css(r.scrollbarYRail,"right")),r.isScrollbarYUsingRight=r.scrollbarYRight===r.scrollbarYRight,r.scrollbarYLeft=r.isScrollbarYUsingRight?null:s.toInt(c.css(r.scrollbarYRail,"left")),r.scrollbarYOuterWidth=r.isRtl?s.outerWidth(r.scrollbarY):null,r.railBorderYWidth=s.toInt(c.css(r.scrollbarYRail,"borderTopWidth"))+s.toInt(c.css(r.scrollbarYRail,"borderBottomWidth")),c.css(r.scrollbarYRail,"display","block"),r.railYMarginHeight=s.toInt(c.css(r.scrollbarYRail,"marginTop"))+s.toInt(c.css(r.scrollbarYRail,"marginBottom")),c.css(r.scrollbarYRail,"display",""),r.railYHeight=null,r.railYRatio=null}function i(t){return t.getAttribute("data-ps-id")}function o(t,e){t.setAttribute("data-ps-id",e)}function a(t){t.removeAttribute("data-ps-id")}var s=n(520),u=n(521),l=n(524),c=n(522),d=n(525),h=n(526),f={};e.add=function(t){var e=h();return o(t,e),f[e]=new r(t),f[e]},e.remove=function(t){delete f[i(t)],a(t)},e.get=function(t){return f[i(t)]}},function(t,e){"use strict";t.exports={handlers:["click-rail","drag-scrollbar","keyboard","wheel","touch"],maxScrollbarLength:null,minScrollbarLength:null,scrollXMarginOffset:0,scrollYMarginOffset:0,suppressScrollX:!1,suppressScrollY:!1,swipePropagation:!0,useBothWheelAxes:!1,wheelPropagation:!1,wheelSpeed:1,theme:"default"}},function(t,e){"use strict";var n=function(t){this.element=t,this.events={}};n.prototype.bind=function(t,e){"undefined"==typeof this.events[t]&&(this.events[t]=[]),this.events[t].push(e),this.element.addEventListener(t,e,!1)},n.prototype.unbind=function(t,e){var n="undefined"!=typeof e;this.events[t]=this.events[t].filter(function(r){return!(!n||r===e)||(this.element.removeEventListener(t,r,!1),!1)},this)},n.prototype.unbindAll=function(){for(var t in this.events)this.unbind(t)};var r=function(){this.eventElements=[]};r.prototype.eventElement=function(t){var e=this.eventElements.filter(function(e){return e.element===t})[0];return"undefined"==typeof e&&(e=new n(t),this.eventElements.push(e)),e},r.prototype.bind=function(t,e,n){this.eventElement(t).bind(e,n)},r.prototype.unbind=function(t,e,n){this.eventElement(t).unbind(e,n)},r.prototype.unbindAll=function(){for(var t=0;t0&&n.forEach(function(t){s.remove(t)}),s.appendTo(e.scrollbarXRail,t)),t.contains(e.scrollbarYRail)||(n=s.queryChildren(t,".ps-scrollbar-y-rail"),n.length>0&&n.forEach(function(t){s.remove(t)}),s.appendTo(e.scrollbarYRail,t)),!e.settings.suppressScrollX&&e.containerWidth+e.settings.scrollXMarginOffset=e.railXWidth-e.scrollbarXWidth&&(e.scrollbarXLeft=e.railXWidth-e.scrollbarXWidth),e.scrollbarYTop>=e.railYHeight-e.scrollbarYHeight&&(e.scrollbarYTop=e.railYHeight-e.scrollbarYHeight),i(t,e),e.scrollbarXActive?a.add(t,"ps-active-x"):(a.remove(t,"ps-active-x"),e.scrollbarXWidth=0,e.scrollbarXLeft=0,l(t,"left",0)),e.scrollbarYActive?a.add(t,"ps-active-y"):(a.remove(t,"ps-active-y"),e.scrollbarYHeight=0,e.scrollbarYTop=0,l(t,"top",0))}},function(t,e,n){"use strict";var r,i,o=n(523),a=function(t){var e=document.createEvent("Event");return e.initEvent(t,!0,!0),e};t.exports=function(t,e,n){if("undefined"==typeof t)throw"You must provide an element to the update-scroll function";if("undefined"==typeof e)throw"You must provide an axis to the update-scroll function";if("undefined"==typeof n)throw"You must provide a value to the update-scroll function";"top"===e&&n<=0&&(t.scrollTop=n=0,t.dispatchEvent(a("ps-y-reach-start"))),"left"===e&&n<=0&&(t.scrollLeft=n=0,t.dispatchEvent(a("ps-x-reach-start")));var s=o.get(t);"top"===e&&n>=s.contentHeight-s.containerHeight&&(n=s.contentHeight-s.containerHeight,n-t.scrollTop<=1?n=t.scrollTop:t.scrollTop=n,t.dispatchEvent(a("ps-y-reach-end"))),"left"===e&&n>=s.contentWidth-s.containerWidth&&(n=s.contentWidth-s.containerWidth,n-t.scrollLeft<=1?n=t.scrollLeft:t.scrollLeft=n,t.dispatchEvent(a("ps-x-reach-end"))),r||(r=t.scrollTop),i||(i=t.scrollLeft),"top"===e&&nr&&t.dispatchEvent(a("ps-scroll-down")),"left"===e&&ni&&t.dispatchEvent(a("ps-scroll-right")),"top"===e&&(t.scrollTop=r=n,t.dispatchEvent(a("ps-scroll-y"))),"left"===e&&(t.scrollLeft=i=n,t.dispatchEvent(a("ps-scroll-x")))}},function(t,e,n){"use strict";function r(t,e){function n(t){return t.getBoundingClientRect()}var r=function(t){t.stopPropagation()};e.event.bind(e.scrollbarY,"click",r),e.event.bind(e.scrollbarYRail,"click",function(r){var i=r.pageY-window.pageYOffset-n(e.scrollbarYRail).top,s=i>e.scrollbarYTop?1:-1;a(t,"top",t.scrollTop+s*e.containerHeight),o(t),r.stopPropagation()}), +e.event.bind(e.scrollbarX,"click",r),e.event.bind(e.scrollbarXRail,"click",function(r){var i=r.pageX-window.pageXOffset-n(e.scrollbarXRail).left,s=i>e.scrollbarXLeft?1:-1;a(t,"left",t.scrollLeft+s*e.containerWidth),o(t),r.stopPropagation()})}var i=n(523),o=n(528),a=n(529);t.exports=function(t){var e=i.get(t);r(t,e)}},function(t,e,n){"use strict";function r(t,e){function n(n){var i=r+n*e.railXRatio,a=Math.max(0,e.scrollbarXRail.getBoundingClientRect().left)+e.railXRatio*(e.railXWidth-e.scrollbarXWidth);i<0?e.scrollbarXLeft=0:i>a?e.scrollbarXLeft=a:e.scrollbarXLeft=i;var s=o.toInt(e.scrollbarXLeft*(e.contentWidth-e.containerWidth)/(e.containerWidth-e.railXRatio*e.scrollbarXWidth))-e.negativeScrollAdjustment;l(t,"left",s)}var r=null,i=null,s=function(e){n(e.pageX-i),u(t),e.stopPropagation(),e.preventDefault()},c=function(){o.stopScrolling(t,"x"),e.event.unbind(e.ownerDocument,"mousemove",s)};e.event.bind(e.scrollbarX,"mousedown",function(n){i=n.pageX,r=o.toInt(a.css(e.scrollbarX,"left"))*e.railXRatio,o.startScrolling(t,"x"),e.event.bind(e.ownerDocument,"mousemove",s),e.event.once(e.ownerDocument,"mouseup",c),n.stopPropagation(),n.preventDefault()})}function i(t,e){function n(n){var i=r+n*e.railYRatio,a=Math.max(0,e.scrollbarYRail.getBoundingClientRect().top)+e.railYRatio*(e.railYHeight-e.scrollbarYHeight);i<0?e.scrollbarYTop=0:i>a?e.scrollbarYTop=a:e.scrollbarYTop=i;var s=o.toInt(e.scrollbarYTop*(e.contentHeight-e.containerHeight)/(e.containerHeight-e.railYRatio*e.scrollbarYHeight));l(t,"top",s)}var r=null,i=null,s=function(e){n(e.pageY-i),u(t),e.stopPropagation(),e.preventDefault()},c=function(){o.stopScrolling(t,"y"),e.event.unbind(e.ownerDocument,"mousemove",s)};e.event.bind(e.scrollbarY,"mousedown",function(n){i=n.pageY,r=o.toInt(a.css(e.scrollbarY,"top"))*e.railYRatio,o.startScrolling(t,"y"),e.event.bind(e.ownerDocument,"mousemove",s),e.event.once(e.ownerDocument,"mouseup",c),n.stopPropagation(),n.preventDefault()})}var o=n(520),a=n(522),s=n(523),u=n(528),l=n(529);t.exports=function(t){var e=s.get(t);r(t,e),i(t,e)}},function(t,e,n){"use strict";function r(t,e){function n(n,r){var i=t.scrollTop;if(0===n){if(!e.scrollbarYActive)return!1;if(0===i&&r>0||i>=e.contentHeight-e.containerHeight&&r<0)return!e.settings.wheelPropagation}var o=t.scrollLeft;if(0===r){if(!e.scrollbarXActive)return!1;if(0===o&&n<0||o>=e.contentWidth-e.containerWidth&&n>0)return!e.settings.wheelPropagation}return!0}var r=!1;e.event.bind(t,"mouseenter",function(){r=!0}),e.event.bind(t,"mouseleave",function(){r=!1});var a=!1;e.event.bind(e.ownerDocument,"keydown",function(l){if(!(l.isDefaultPrevented&&l.isDefaultPrevented()||l.defaultPrevented)){var c=o.matches(e.scrollbarX,":focus")||o.matches(e.scrollbarY,":focus");if(r||c){var d=document.activeElement?document.activeElement:e.ownerDocument.activeElement;if(d){if("IFRAME"===d.tagName)d=d.contentDocument.activeElement;else for(;d.shadowRoot;)d=d.shadowRoot.activeElement;if(i.isEditable(d))return}var h=0,f=0;switch(l.which){case 37:h=l.metaKey?-e.contentWidth:l.altKey?-e.containerWidth:-30;break;case 38:f=l.metaKey?e.contentHeight:l.altKey?e.containerHeight:30;break;case 39:h=l.metaKey?e.contentWidth:l.altKey?e.containerWidth:30;break;case 40:f=l.metaKey?-e.contentHeight:l.altKey?-e.containerHeight:-30;break;case 33:f=90;break;case 32:f=l.shiftKey?90:-90;break;case 34:f=-90;break;case 35:f=l.ctrlKey?-e.contentHeight:-e.containerHeight;break;case 36:f=l.ctrlKey?t.scrollTop:e.containerHeight;break;default:return}u(t,"top",t.scrollTop-f),u(t,"left",t.scrollLeft+h),s(t),a=n(h,f),a&&l.preventDefault()}}})}var i=n(520),o=n(522),a=n(523),s=n(528),u=n(529);t.exports=function(t){var e=a.get(t);r(t,e)}},function(t,e,n){"use strict";function r(t,e){function n(n,r){var i=t.scrollTop;if(0===n){if(!e.scrollbarYActive)return!1;if(0===i&&r>0||i>=e.contentHeight-e.containerHeight&&r<0)return!e.settings.wheelPropagation}var o=t.scrollLeft;if(0===r){if(!e.scrollbarXActive)return!1;if(0===o&&n<0||o>=e.contentWidth-e.containerWidth&&n>0)return!e.settings.wheelPropagation}return!0}function r(t){var e=t.deltaX,n=-1*t.deltaY;return"undefined"!=typeof e&&"undefined"!=typeof n||(e=-1*t.wheelDeltaX/6,n=t.wheelDeltaY/6),t.deltaMode&&1===t.deltaMode&&(e*=10,n*=10),e!==e&&n!==n&&(e=0,n=t.wheelDelta),t.shiftKey?[-n,-e]:[e,n]}function i(e,n){var r=t.querySelector("textarea:hover, select[multiple]:hover, .ps-child:hover");if(r){if(!window.getComputedStyle(r).overflow.match(/(scroll|auto)/))return!1;var i=r.scrollHeight-r.clientHeight;if(i>0&&!(0===r.scrollTop&&n>0||r.scrollTop===i&&n<0))return!0;var o=r.scrollLeft-r.clientWidth;if(o>0&&!(0===r.scrollLeft&&e<0||r.scrollLeft===o&&e>0))return!0}return!1}function s(s){var l=r(s),c=l[0],d=l[1];i(c,d)||(u=!1,e.settings.useBothWheelAxes?e.scrollbarYActive&&!e.scrollbarXActive?(d?a(t,"top",t.scrollTop-d*e.settings.wheelSpeed):a(t,"top",t.scrollTop+c*e.settings.wheelSpeed),u=!0):e.scrollbarXActive&&!e.scrollbarYActive&&(c?a(t,"left",t.scrollLeft+c*e.settings.wheelSpeed):a(t,"left",t.scrollLeft-d*e.settings.wheelSpeed),u=!0):(a(t,"top",t.scrollTop-d*e.settings.wheelSpeed),a(t,"left",t.scrollLeft+c*e.settings.wheelSpeed)),o(t),u=u||n(c,d),u&&(s.stopPropagation(),s.preventDefault()))}var u=!1;"undefined"!=typeof window.onwheel?e.event.bind(t,"wheel",s):"undefined"!=typeof window.onmousewheel&&e.event.bind(t,"mousewheel",s)}var i=n(523),o=n(528),a=n(529);t.exports=function(t){var e=i.get(t);r(t,e)}},function(t,e,n){"use strict";function r(t,e,n,r){function i(n,r){var i=t.scrollTop,o=t.scrollLeft,a=Math.abs(n),s=Math.abs(r);if(s>a){if(r<0&&i===e.contentHeight-e.containerHeight||r>0&&0===i)return!e.settings.swipePropagation}else if(a>s&&(n<0&&o===e.contentWidth-e.containerWidth||n>0&&0===o))return!e.settings.swipePropagation;return!0}function u(e,n){s(t,"top",t.scrollTop-n),s(t,"left",t.scrollLeft-e),a(t)}function l(){M=!0}function c(){M=!1}function d(t){return t.targetTouches?t.targetTouches[0]:t}function h(t){return!(!t.targetTouches||1!==t.targetTouches.length)||!(!t.pointerType||"mouse"===t.pointerType||t.pointerType===t.MSPOINTER_TYPE_MOUSE)}function f(t){if(h(t)){b=!0;var e=d(t);_.pageX=e.pageX,_.pageY=e.pageY,y=(new Date).getTime(),null!==g&&clearInterval(g),t.stopPropagation()}}function p(t){if(!b&&e.settings.swipePropagation&&f(t),!M&&b&&h(t)){var n=d(t),r={pageX:n.pageX,pageY:n.pageY},o=r.pageX-_.pageX,a=r.pageY-_.pageY;u(o,a),_=r;var s=(new Date).getTime(),l=s-y;l>0&&(v.x=o/l,v.y=a/l,y=s),i(o,a)&&(t.stopPropagation(),t.preventDefault())}}function m(){!M&&b&&(b=!1,clearInterval(g),g=setInterval(function(){return o.get(t)&&(v.x||v.y)?Math.abs(v.x)<.01&&Math.abs(v.y)<.01?void clearInterval(g):(u(30*v.x,30*v.y),v.x*=.8,void(v.y*=.8)):void clearInterval(g)},10))}var _={},y=0,v={},g=null,M=!1,b=!1;n?(e.event.bind(window,"touchstart",l),e.event.bind(window,"touchend",c),e.event.bind(t,"touchstart",f),e.event.bind(t,"touchmove",p),e.event.bind(t,"touchend",m)):r&&(window.PointerEvent?(e.event.bind(window,"pointerdown",l),e.event.bind(window,"pointerup",c),e.event.bind(t,"pointerdown",f),e.event.bind(t,"pointermove",p),e.event.bind(t,"pointerup",m)):window.MSPointerEvent&&(e.event.bind(window,"MSPointerDown",l),e.event.bind(window,"MSPointerUp",c),e.event.bind(t,"MSPointerDown",f),e.event.bind(t,"MSPointerMove",p),e.event.bind(t,"MSPointerUp",m)))}var i=n(520),o=n(523),a=n(528),s=n(529);t.exports=function(t){if(i.env.supportsTouch||i.env.supportsIePointer){var e=o.get(t);r(t,e,i.env.supportsTouch,i.env.supportsIePointer)}}},function(t,e,n){"use strict";function r(t,e){function n(){var t=window.getSelection?window.getSelection():document.getSelection?document.getSelection():"";return 0===t.toString().length?null:t.getRangeAt(0).commonAncestorContainer}function r(){l||(l=setInterval(function(){return o.get(t)?(s(t,"top",t.scrollTop+c.top),s(t,"left",t.scrollLeft+c.left),void a(t)):void clearInterval(l)},50))}function u(){l&&(clearInterval(l),l=null),i.stopScrolling(t)}var l=null,c={top:0,left:0},d=!1;e.event.bind(e.ownerDocument,"selectionchange",function(){t.contains(n())?d=!0:(d=!1,u())}),e.event.bind(window,"mouseup",function(){d&&(d=!1,u())}),e.event.bind(window,"keyup",function(){d&&(d=!1,u())}),e.event.bind(window,"mousemove",function(e){if(d){var n={x:e.pageX,y:e.pageY},o={left:t.offsetLeft,right:t.offsetLeft+t.offsetWidth,top:t.offsetTop,bottom:t.offsetTop+t.offsetHeight};n.xo.right-3?(c.left=5,i.startScrolling(t,"x")):c.left=0,n.yo.bottom-3?(n.y-o.bottom+3<5?c.top=5:c.top=20,i.startScrolling(t,"y")):c.top=0,0===c.top&&0===c.left?u():r()}})}var i=n(520),o=n(523),a=n(528),s=n(529);t.exports=function(t){var e=o.get(t);r(t,e)}},function(t,e,n){"use strict";function r(t,e){e.event.bind(t,"scroll",function(){o(t)})}var i=n(523),o=n(528);t.exports=function(t){var e=i.get(t);r(t,e)}},function(t,e,n){"use strict";var r=n(520),i=n(522),o=n(523),a=n(528),s=n(529);t.exports=function(t){var e=o.get(t);e&&(e.negativeScrollAdjustment=e.isNegativeScroll?t.scrollWidth-t.clientWidth:0,i.css(e.scrollbarXRail,"display","block"),i.css(e.scrollbarYRail,"display","block"),e.railXMarginWidth=r.toInt(i.css(e.scrollbarXRail,"marginLeft"))+r.toInt(i.css(e.scrollbarXRail,"marginRight")),e.railYMarginHeight=r.toInt(i.css(e.scrollbarYRail,"marginTop"))+r.toInt(i.css(e.scrollbarYRail,"marginBottom")),i.css(e.scrollbarXRail,"display","none"),i.css(e.scrollbarYRail,"display","none"),a(t),s(t,"top",t.scrollTop),s(t,"left",t.scrollLeft),i.css(e.scrollbarXRail,"display",""),i.css(e.scrollbarYRail,"display",""))}},function(t,e,n){var r,i,o;!function(a,s){i=[n(2)],r=s,o="function"==typeof r?r.apply(e,i):r,!(void 0!==o&&(t.exports=o))}(this,function(t){function e(t){return t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.cancelBubble=!0,t.returnValue=!1,!1}function n(t){t.stopPropagation&&t.stopPropagation(),t.cancelBubble=!0}function r(t,e,n){for(var r=(e-t)/(n-1),i=[],o=0;oe.length&&(this.state.value.length=e.length),0===this.state.upperBound&&this._handleResize()},_or:function(e,n){var i=t.Children.count(this.props.children);switch(i){case 0:return e.length>0?e:n;case e.length:return e;case n.length:return n;default:return e.length===i&&n.length===i||console.warn(this.constructor.displayName+": Number of values does not match number of children."),r(this.props.min,this.props.max,i)}},componentDidMount:function(){window.addEventListener("resize",this._handleResize),this._handleResize()},componentWillUnmount:function(){this._clearPendingResizeTimeouts(),window.removeEventListener("resize",this._handleResize)},getValue:function(){return o(this.state.value)},_handleResize:function(){var t=window.setTimeout(function(){this.pendingResizeTimeouts.shift();var t=this.refs.slider,e=this.refs.handle0,n=t.getBoundingClientRect(),r=this._sizeKey(),i=n[this._posMaxKey()],o=n[this._posMinKey()];this.setState({upperBound:t[r]-e[r],sliderLength:Math.abs(i-o),handleSize:e[r],sliderStart:this.props.invert?i:o})}.bind(this),0);this.pendingResizeTimeouts.push(t)},_clearPendingResizeTimeouts:function(){do{var t=this.pendingResizeTimeouts.shift();clearTimeout(t)}while(this.pendingResizeTimeouts.length)},_calcOffset:function(t){var e=(t-this.props.min)/(this.props.max-this.props.min);return e*this.state.upperBound},_calcValue:function(t){var e=t/this.state.upperBound;return e*(this.props.max-this.props.min)+this.props.min},_buildHandleStyle:function(t,e){var n={position:"absolute",willChange:this.state.index>=0?this._posMinKey():"",zIndex:this.state.zIndices.indexOf(e)+1};return n[this._posMinKey()]=t+"px",n},_buildBarStyle:function(t,e){var n={position:"absolute",willChange:this.state.index>=0?this._posMinKey()+","+this._posMaxKey():""};return n[this._posMinKey()]=t,n[this._posMaxKey()]=e,n},_getClosestIndex:function(t){for(var e=Number.MAX_VALUE,n=-1,r=this.state.value,i=r.length,o=0;o1)){var r=this._getTouchPosition(e);this.startPosition=r,this.isScrolling=void 0,this._start(t,r[0]),this._addHandlers(this._getTouchEventMap()),n(e)}}.bind(this)},_addHandlers:function(t){for(var e in t)document.addEventListener(e,t[e],!1)},_removeHandlers:function(t){for(var e in t)document.removeEventListener(e,t[e],!1)},_start:function(t,e){document.activeElement&&document.activeElement!=document.body&&document.activeElement.blur(),this.hasMoved=!1,this._fireChangeEvent("onBeforeChange");var n=this.state.zIndices;n.splice(n.indexOf(t),1),n.push(t),this.setState({startValue:this.state.value[t],startPosition:e,index:t,zIndices:n})},_onMouseUp:function(){this._onEnd(this._getMouseEventMap())},_onTouchEnd:function(){this._onEnd(this._getTouchEventMap())},_onEnd:function(t){this._removeHandlers(t),this.setState({index:-1},this._fireChangeEvent.bind(this,"onAfterChange"))},_onMouseMove:function(t){var e=this._getMousePosition(t);this._move(e[0])},_onTouchMove:function(t){if(!(t.touches.length>1)){var n=this._getTouchPosition(t);if("undefined"==typeof this.isScrolling){var r=n[0]-this.startPosition[0],i=n[1]-this.startPosition[1];this.isScrolling=Math.abs(i)>Math.abs(r)}if(this.isScrolling)return void this.setState({index:-1});e(t),this._move(n[0])}},_move:function(t){this.hasMoved=!0;var e=this.props,n=this.state,r=n.index,i=n.value,o=i.length,a=i[r],s=t-n.startPosition;e.invert&&(s*=-1);var u=s/(n.sliderLength-n.handleSize)*(e.max-e.min),l=this._trimAlignValue(n.startValue+u),c=e.minDistance;if(!e.pearling){if(r>0){var d=i[r-1];lh-c&&(l=h-c)}}i[r]=l,e.pearling&&o>1&&(l>a?(this._pushSucceeding(i,c,r),this._trimSucceeding(o,i,c,e.max)):lt[r+1];r++,i=t[r]+e)t[r+1]=this._alignValue(i)},_trimSucceeding:function(t,e,n,r){for(var i=0;io&&(e[t-1-i]=o)}},_pushPreceding:function(t,e,n){var r,i;for(r=n,i=t[r]-e;null!=t[r-1]&&i=e.max&&(t=e.max),t},_alignValue:function(t,e){e=e||this.props;var n=(t-e.min)%e.step,r=t-n;return 2*Math.abs(n)>=e.step&&(r+=n>0?e.step:-e.step),parseFloat(r.toFixed(5))},_renderHandle:function(e,n,r){var i=this.props.handleClassName+" "+(this.props.handleClassName+"-"+r)+" "+(this.state.index===r?this.props.handleActiveClassName:"");return t.createElement("div",{ref:"handle"+r,key:"handle"+r,className:i,style:e,onMouseDown:this._createOnMouseDown(r),onTouchStart:this._createOnTouchStart(r)},n)},_renderHandles:function(e){for(var n=e.length,r=this.tempArray,i=0;i0)t.Children.forEach(this.props.children,function(t,e){o[e]=a(r[e],t,e)});else for(i=0;i3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in e)if(void 0!==t.style[n])return{end:e[n]};return!1}t.fn.emulateTransitionEnd=function(e){var n=!1,r=this;t(this).one("bsTransitionEnd",function(){n=!0});var i=function(){n||t(r).trigger(t.support.transition.end)};return setTimeout(i,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var n=t(this),i=n.data("bs.alert");i||n.data("bs.alert",i=new r(this)),"string"==typeof e&&i[e].call(n)})}var n='[data-dismiss="alert"]',r=function(e){t(e).on("click",n,this.close)};r.VERSION="3.3.7",r.TRANSITION_DURATION=150,r.prototype.close=function(e){function n(){a.detach().trigger("closed.bs.alert").remove()}var i=t(this),o=i.attr("data-target");o||(o=i.attr("href"),o=o&&o.replace(/.*(?=#[^\s]*$)/,""));var a=t("#"===o?[]:o);e&&e.preventDefault(),a.length||(a=i.closest(".alert")),a.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",n).emulateTransitionEnd(r.TRANSITION_DURATION):n())};var i=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=r,t.fn.alert.noConflict=function(){return t.fn.alert=i,this},t(document).on("click.bs.alert.data-api",n,r.prototype.close)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var r=t(this),i=r.data("bs.button"),o="object"==typeof e&&e;i||r.data("bs.button",i=new n(this,o)),"toggle"==e?i.toggle():e&&i.setState(e)})}var n=function(e,r){this.$element=t(e),this.options=t.extend({},n.DEFAULTS,r),this.isLoading=!1};n.VERSION="3.3.7",n.DEFAULTS={loadingText:"loading..."},n.prototype.setState=function(e){var n="disabled",r=this.$element,i=r.is("input")?"val":"html",o=r.data();e+="Text",null==o.resetText&&r.data("resetText",r[i]()),setTimeout(t.proxy(function(){r[i](null==o[e]?this.options[e]:o[e]),"loadingText"==e?(this.isLoading=!0,r.addClass(n).attr(n,n).prop(n,!0)):this.isLoading&&(this.isLoading=!1,r.removeClass(n).removeAttr(n).prop(n,!1))},this),0)},n.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var n=this.$element.find("input");"radio"==n.prop("type")?(n.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==n.prop("type")&&(n.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),n.prop("checked",this.$element.hasClass("active")),t&&n.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var r=t.fn.button;t.fn.button=e,t.fn.button.Constructor=n,t.fn.button.noConflict=function(){return t.fn.button=r,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(n){var r=t(n.target).closest(".btn");e.call(r,"toggle"),t(n.target).is('input[type="radio"], input[type="checkbox"]')||(n.preventDefault(),r.is("input,button")?r.trigger("focus"):r.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var r=t(this),i=r.data("bs.carousel"),o=t.extend({},n.DEFAULTS,r.data(),"object"==typeof e&&e),a="string"==typeof e?e:o.slide;i||r.data("bs.carousel",i=new n(this,o)),"number"==typeof e?i.to(e):a?i[a]():o.interval&&i.pause().cycle()})}var n=function(e,n){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};n.VERSION="3.3.7",n.TRANSITION_DURATION=600,n.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},n.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},n.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},n.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},n.prototype.getItemForDirection=function(t,e){var n=this.getItemIndex(e),r="prev"==t&&0===n||"next"==t&&n==this.$items.length-1;if(r&&!this.options.wrap)return e;var i="prev"==t?-1:1,o=(n+i)%this.$items.length;return this.$items.eq(o)},n.prototype.to=function(t){var e=this,n=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",this.$items.eq(t))},n.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},n.prototype.next=function(){if(!this.sliding)return this.slide("next")},n.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},n.prototype.slide=function(e,r){var i=this.$element.find(".item.active"),o=r||this.getItemForDirection(e,i),a=this.interval,s="next"==e?"left":"right",u=this;if(o.hasClass("active"))return this.sliding=!1;var l=o[0],c=t.Event("slide.bs.carousel",{relatedTarget:l,direction:s});if(this.$element.trigger(c),!c.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var d=t(this.$indicators.children()[this.getItemIndex(o)]);d&&d.addClass("active")}var h=t.Event("slid.bs.carousel",{relatedTarget:l,direction:s});return t.support.transition&&this.$element.hasClass("slide")?(o.addClass(e),o[0].offsetWidth,i.addClass(s),o.addClass(s),i.one("bsTransitionEnd",function(){o.removeClass([e,s].join(" ")).addClass("active"),i.removeClass(["active",s].join(" ")),u.sliding=!1,setTimeout(function(){u.$element.trigger(h)},0)}).emulateTransitionEnd(n.TRANSITION_DURATION)):(i.removeClass("active"),o.addClass("active"),this.sliding=!1,this.$element.trigger(h)),a&&this.cycle(),this}};var r=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=n,t.fn.carousel.noConflict=function(){return t.fn.carousel=r,this};var i=function(n){var r,i=t(this),o=t(i.attr("data-target")||(r=i.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""));if(o.hasClass("carousel")){var a=t.extend({},o.data(),i.data()),s=i.attr("data-slide-to");s&&(a.interval=!1),e.call(o,a),s&&o.data("bs.carousel").to(s),n.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",i).on("click.bs.carousel.data-api","[data-slide-to]",i),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var n=t(this);e.call(n,n.data())})})}(jQuery),+function(t){"use strict";function e(e){var n,r=e.attr("data-target")||(n=e.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,"");return t(r)}function n(e){return this.each(function(){var n=t(this),i=n.data("bs.collapse"),o=t.extend({},r.DEFAULTS,n.data(),"object"==typeof e&&e);!i&&o.toggle&&/show|hide/.test(e)&&(o.toggle=!1),i||n.data("bs.collapse",i=new r(this,o)),"string"==typeof e&&i[e]()})}var r=function(e,n){this.$element=t(e),this.options=t.extend({},r.DEFAULTS,n),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};r.VERSION="3.3.7",r.TRANSITION_DURATION=350,r.DEFAULTS={toggle:!0},r.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},r.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,i=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(i&&i.length&&(e=i.data("bs.collapse"),e&&e.transitioning))){var o=t.Event("show.bs.collapse");if(this.$element.trigger(o),!o.isDefaultPrevented()){i&&i.length&&(n.call(i,"hide"),e||i.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var s=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return s.call(this);var u=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(s,this)).emulateTransitionEnd(r.TRANSITION_DURATION)[a](this.$element[0][u])}}}},r.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var i=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[n](0).one("bsTransitionEnd",t.proxy(i,this)).emulateTransitionEnd(r.TRANSITION_DURATION):i.call(this)}}},r.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},r.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(n,r){var i=t(r);this.addAriaAndCollapsedClass(e(i),i)},this)).end()},r.prototype.addAriaAndCollapsedClass=function(t,e){var n=t.hasClass("in");t.attr("aria-expanded",n),e.toggleClass("collapsed",!n).attr("aria-expanded",n)};var i=t.fn.collapse;t.fn.collapse=n,t.fn.collapse.Constructor=r,t.fn.collapse.noConflict=function(){return t.fn.collapse=i,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(r){var i=t(this);i.attr("data-target")||r.preventDefault();var o=e(i),a=o.data("bs.collapse"),s=a?"toggle":i.data();n.call(o,s)})}(jQuery),+function(t){"use strict";function e(e){var n=e.attr("data-target");n||(n=e.attr("href"),n=n&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var r=n&&t(n);return r&&r.length?r:e.parent()}function n(n){n&&3===n.which||(t(i).remove(),t(o).each(function(){var r=t(this),i=e(r),o={relatedTarget:this};i.hasClass("open")&&(n&&"click"==n.type&&/input|textarea/i.test(n.target.tagName)&&t.contains(i[0],n.target)||(i.trigger(n=t.Event("hide.bs.dropdown",o)),n.isDefaultPrevented()||(r.attr("aria-expanded","false"),i.removeClass("open").trigger(t.Event("hidden.bs.dropdown",o)))))}))}function r(e){return this.each(function(){var n=t(this),r=n.data("bs.dropdown");r||n.data("bs.dropdown",r=new a(this)),"string"==typeof e&&r[e].call(n)})}var i=".dropdown-backdrop",o='[data-toggle="dropdown"]',a=function(e){t(e).on("click.bs.dropdown",this.toggle)};a.VERSION="3.3.7",a.prototype.toggle=function(r){var i=t(this);if(!i.is(".disabled, :disabled")){var o=e(i),a=o.hasClass("open");if(n(),!a){"ontouchstart"in document.documentElement&&!o.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",n);var s={relatedTarget:this};if(o.trigger(r=t.Event("show.bs.dropdown",s)),r.isDefaultPrevented())return;i.trigger("focus").attr("aria-expanded","true"),o.toggleClass("open").trigger(t.Event("shown.bs.dropdown",s))}return!1}},a.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var r=t(this);if(n.preventDefault(),n.stopPropagation(),!r.is(".disabled, :disabled")){var i=e(r),a=i.hasClass("open");if(!a&&27!=n.which||a&&27==n.which)return 27==n.which&&i.find(o).trigger("focus"),r.trigger("click");var s=" li:not(.disabled):visible a",u=i.find(".dropdown-menu"+s);if(u.length){var l=u.index(n.target);38==n.which&&l>0&&l--,40==n.which&&ldocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},n.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},n.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},n.prototype.init=function(e,n,r){if(this.enabled=!0,this.type=e,this.$element=t(n),this.options=this.getOptions(r),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var i=this.options.trigger.split(" "),o=i.length;o--;){var a=i[o];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var s="hover"==a?"mouseenter":"focusin",u="hover"==a?"mouseleave":"focusout";this.$element.on(s+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(u+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},n.prototype.getDelegateOptions=function(){var e={},n=this.getDefaults();return this._options&&t.each(this._options,function(t,r){n[t]!=r&&(e[t]=r)}),e},n.prototype.enter=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusin"==e.type?"focus":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState?void(n.hoverState="in"):(clearTimeout(n.timeout),n.hoverState="in",n.options.delay&&n.options.delay.show?void(n.timeout=setTimeout(function(){"in"==n.hoverState&&n.show()},n.options.delay.show)):n.show())},n.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},n.prototype.leave=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusout"==e.type?"focus":"hover"]=!1),!n.isInStateTrue())return clearTimeout(n.timeout),n.hoverState="out",n.options.delay&&n.options.delay.hide?void(n.timeout=setTimeout(function(){"out"==n.hoverState&&n.hide()},n.options.delay.hide)):n.hide()},n.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var r=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!r)return;var i=this,o=this.tip(),a=this.getUID(this.type);this.setContent(),o.attr("id",a),this.$element.attr("aria-describedby",a),this.options.animation&&o.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,u=/\s?auto?\s?/i,l=u.test(s);l&&(s=s.replace(u,"")||"top"),o.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?o.appendTo(this.options.container):o.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var c=this.getPosition(),d=o[0].offsetWidth,h=o[0].offsetHeight;if(l){var f=s,p=this.getPosition(this.$viewport);s="bottom"==s&&c.bottom+h>p.bottom?"top":"top"==s&&c.top-hp.width?"left":"left"==s&&c.left-da.top+a.height&&(i.top=a.top+a.height-u)}else{var l=e.left-o,c=e.left+o+n;la.right&&(i.left=a.left+a.width-c)}return i},n.prototype.getTitle=function(){var t,e=this.$element,n=this.options;return t=e.attr("data-original-title")||("function"==typeof n.title?n.title.call(e[0]):n.title)},n.prototype.getUID=function(t){do t+=~~(1e6*Math.random());while(document.getElementById(t));return t},n.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},n.prototype.enable=function(){this.enabled=!0},n.prototype.disable=function(){this.enabled=!1},n.prototype.toggleEnabled=function(){this.enabled=!this.enabled},n.prototype.toggle=function(e){var n=this;e&&(n=t(e.currentTarget).data("bs."+this.type),n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n))),e?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},n.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})};var r=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=n,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=r,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var r=t(this),i=r.data("bs.popover"),o="object"==typeof e&&e;!i&&/destroy|hide/.test(e)||(i||r.data("bs.popover",i=new n(this,o)),"string"==typeof e&&i[e]())})}var n=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");n.VERSION="3.3.7",n.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),n.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),n.prototype.constructor=n,n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),n=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof n?"html":"append":"text"](n),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},n.prototype.hasContent=function(){return this.getTitle()||this.getContent()},n.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var r=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=n,t.fn.popover.noConflict=function(){return t.fn.popover=r,this}}(jQuery),+function(t){"use strict";function e(n,r){this.$body=t(document.body),this.$scrollElement=t(t(n).is(document.body)?window:n),this.options=t.extend({},e.DEFAULTS,r),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each(function(){var r=t(this),i=r.data("bs.scrollspy"),o="object"==typeof n&&n;i||r.data("bs.scrollspy",i=new e(this,o)),"string"==typeof n&&i[n]()})}e.VERSION="3.3.7",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,n="offset",r=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(n="position",r=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),i=e.data("target")||e.attr("href"),o=/^#./.test(i)&&t(i);return o&&o.length&&o.is(":visible")&&[[o[n]().top+r,i]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),r=this.options.offset+n-this.$scrollElement.height(),i=this.offsets,o=this.targets,a=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),e>=r)return a!=(t=o[o.length-1])&&this.activate(t);if(a&&e=i[t]&&(void 0===i[t+1]||e .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),s?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),i&&i()}var a=r.find("> .active"),s=i&&t.support.transition&&(a.length&&a.hasClass("fade")||!!r.find("> .fade").length);a.length&&s?a.one("bsTransitionEnd",o).emulateTransitionEnd(n.TRANSITION_DURATION):o(),a.removeClass("in")};var r=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=n,t.fn.tab.noConflict=function(){return t.fn.tab=r,this};var i=function(n){n.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',i).on("click.bs.tab.data-api",'[data-toggle="pill"]',i)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var r=t(this),i=r.data("bs.affix"),o="object"==typeof e&&e;i||r.data("bs.affix",i=new n(this,o)),"string"==typeof e&&i[e]()})}var n=function(e,r){this.options=t.extend({},n.DEFAULTS,r),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};n.VERSION="3.3.7",n.RESET="affix affix-top affix-bottom",n.DEFAULTS={offset:0,target:window},n.prototype.getState=function(t,e,n,r){var i=this.$target.scrollTop(),o=this.$element.offset(),a=this.$target.height();if(null!=n&&"top"==this.affixed)return i=t-r&&"bottom"},n.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(n.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},n.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},n.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),r=this.options.offset,i=r.top,o=r.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof r&&(o=i=r),"function"==typeof i&&(i=r.top(this.$element)),"function"==typeof o&&(o=r.bottom(this.$element));var s=this.getState(a,e,i,o);if(this.affixed!=s){null!=this.unpin&&this.$element.css("top","");var u="affix"+(s?"-"+s:""),l=t.Event(u+".bs.affix");if(this.$element.trigger(l),l.isDefaultPrevented())return;this.affixed=s,this.unpin="bottom"==s?this.getPinnedOffset():null,this.$element.removeClass(n.RESET).addClass(u).trigger(u.replace("affix","affixed")+".bs.affix")}"bottom"==s&&this.$element.offset({top:a-e-o})}};var r=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=n,t.fn.affix.noConflict=function(){return t.fn.affix=r,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var n=t(this),r=n.data();r.offset=r.offset||{},null!=r.offsetBottom&&(r.offset.bottom=r.offsetBottom),null!=r.offsetTop&&(r.offset.top=r.offsetTop),e.call(n,r)})})}(jQuery)},function(t,e,n){n(230),n(585)},function(t,e,n){var r,i,o;/*! +this.activeTarget=e,this.clear();var n=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',r=t(n).parents("li").addClass("active");r.parent(".dropdown-menu").length&&(r=r.closest("li.dropdown").addClass("active")),r.trigger("activate.bs.scrollspy")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var r=t.fn.scrollspy;t.fn.scrollspy=n,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=r,this},t(window).on("load.bs.scrollspy.data-api",function(){t('[data-spy="scroll"]').each(function(){var e=t(this);n.call(e,e.data())})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var r=t(this),i=r.data("bs.tab");i||r.data("bs.tab",i=new n(this)),"string"==typeof e&&i[e]()})}var n=function(e){this.element=t(e)};n.VERSION="3.3.7",n.TRANSITION_DURATION=150,n.prototype.show=function(){var e=this.element,n=e.closest("ul:not(.dropdown-menu)"),r=e.data("target");if(r||(r=e.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var i=n.find(".active:last a"),o=t.Event("hide.bs.tab",{relatedTarget:e[0]}),a=t.Event("show.bs.tab",{relatedTarget:i[0]});if(i.trigger(o),e.trigger(a),!a.isDefaultPrevented()&&!o.isDefaultPrevented()){var s=t(r);this.activate(e.closest("li"),n),this.activate(s,s.parent(),function(){i.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:i[0]})})}}},n.prototype.activate=function(e,r,i){function o(){a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),s?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),i&&i()}var a=r.find("> .active"),s=i&&t.support.transition&&(a.length&&a.hasClass("fade")||!!r.find("> .fade").length);a.length&&s?a.one("bsTransitionEnd",o).emulateTransitionEnd(n.TRANSITION_DURATION):o(),a.removeClass("in")};var r=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=n,t.fn.tab.noConflict=function(){return t.fn.tab=r,this};var i=function(n){n.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',i).on("click.bs.tab.data-api",'[data-toggle="pill"]',i)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var r=t(this),i=r.data("bs.affix"),o="object"==typeof e&&e;i||r.data("bs.affix",i=new n(this,o)),"string"==typeof e&&i[e]()})}var n=function(e,r){this.options=t.extend({},n.DEFAULTS,r),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};n.VERSION="3.3.7",n.RESET="affix affix-top affix-bottom",n.DEFAULTS={offset:0,target:window},n.prototype.getState=function(t,e,n,r){var i=this.$target.scrollTop(),o=this.$element.offset(),a=this.$target.height();if(null!=n&&"top"==this.affixed)return i=t-r&&"bottom"},n.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(n.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},n.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},n.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),r=this.options.offset,i=r.top,o=r.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof r&&(o=i=r),"function"==typeof i&&(i=r.top(this.$element)),"function"==typeof o&&(o=r.bottom(this.$element));var s=this.getState(a,e,i,o);if(this.affixed!=s){null!=this.unpin&&this.$element.css("top","");var u="affix"+(s?"-"+s:""),l=t.Event(u+".bs.affix");if(this.$element.trigger(l),l.isDefaultPrevented())return;this.affixed=s,this.unpin="bottom"==s?this.getPinnedOffset():null,this.$element.removeClass(n.RESET).addClass(u).trigger(u.replace("affix","affixed")+".bs.affix")}"bottom"==s&&this.$element.offset({top:a-e-o})}};var r=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=n,t.fn.affix.noConflict=function(){return t.fn.affix=r,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var n=t(this),r=n.data();r.offset=r.offset||{},null!=r.offsetBottom&&(r.offset.bottom=r.offsetBottom),null!=r.offsetTop&&(r.offset.top=r.offsetTop),e.call(n,r)})})}(jQuery)},function(t,e,n){n(230),n(584)},function(t,e,n){var r,i,o;/*! * Datepicker for Bootstrap v1.6.0 (https://github.com/eternicode/bootstrap-datepicker) * * Copyright 2012 Stefan Petre @@ -80,4 +80,4 @@ this.activeTarget=e,this.clear();var n=this.selector+'[data-target="'+e+'"],'+th * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) */ !function(a){i=[n(229)],r=a,o="function"==typeof r?r.apply(e,i):r,!(void 0!==o&&(t.exports=o))}(function(t,e){function n(){return new Date(Date.UTC.apply(Date,arguments))}function r(){var t=new Date;return n(t.getFullYear(),t.getMonth(),t.getDate())}function i(t,e){return t.getUTCFullYear()===e.getUTCFullYear()&&t.getUTCMonth()===e.getUTCMonth()&&t.getUTCDate()===e.getUTCDate()}function o(t){return function(){return this[t].apply(this,arguments)}}function a(t){return t&&!isNaN(t.getTime())}function s(e,n){function r(t,e){return e.toLowerCase()}var i,o=t(e).data(),a={},s=new RegExp("^"+n.toLowerCase()+"([A-Z])");n=new RegExp("^"+n.toLowerCase());for(var u in o)n.test(u)&&(i=u.replace(s,r),a[i]=o[u]);return a}function u(e){var n={};if(_[e]||(e=e.split("-")[0],_[e])){var r=_[e];return t.each(m,function(t,e){e in r&&(n[e]=r[e])}),n}}var l=function(){var e={get:function(t){return this.slice(t)[0]},contains:function(t){for(var e=t&&t.valueOf(),n=0,r=this.length;n]/g)||[]).length<=0)return!0;var r=t(n);return r.length>0}catch(t){return!1}},_process_options:function(e){this._o=t.extend({},this._o,e);var i=this.o=t.extend({},this._o),o=i.language;_[o]||(o=o.split("-")[0],_[o]||(o=p.language)),i.language=o,i.startView=this._resolveViewName(i.startView,0),i.minViewMode=this._resolveViewName(i.minViewMode,0),i.maxViewMode=this._resolveViewName(i.maxViewMode,4),i.startView=Math.min(i.startView,i.maxViewMode),i.startView=Math.max(i.startView,i.minViewMode),i.multidate!==!0&&(i.multidate=Number(i.multidate)||!1,i.multidate!==!1&&(i.multidate=Math.max(0,i.multidate))),i.multidateSeparator=String(i.multidateSeparator),i.weekStart%=7,i.weekEnd=(i.weekStart+6)%7;var a=y.parseFormat(i.format);if(i.startDate!==-(1/0)&&(i.startDate?i.startDate instanceof Date?i.startDate=this._local_to_utc(this._zero_time(i.startDate)):i.startDate=y.parseDate(i.startDate,a,i.language,i.assumeNearbyYear):i.startDate=-(1/0)),i.endDate!==1/0&&(i.endDate?i.endDate instanceof Date?i.endDate=this._local_to_utc(this._zero_time(i.endDate)):i.endDate=y.parseDate(i.endDate,a,i.language,i.assumeNearbyYear):i.endDate=1/0),i.daysOfWeekDisabled=i.daysOfWeekDisabled||[],t.isArray(i.daysOfWeekDisabled)||(i.daysOfWeekDisabled=i.daysOfWeekDisabled.split(/[,\s]*/)),i.daysOfWeekDisabled=t.map(i.daysOfWeekDisabled,function(t){return parseInt(t,10)}),i.daysOfWeekHighlighted=i.daysOfWeekHighlighted||[],t.isArray(i.daysOfWeekHighlighted)||(i.daysOfWeekHighlighted=i.daysOfWeekHighlighted.split(/[,\s]*/)),i.daysOfWeekHighlighted=t.map(i.daysOfWeekHighlighted,function(t){return parseInt(t,10)}),i.datesDisabled=i.datesDisabled||[],!t.isArray(i.datesDisabled)){var s=[];s.push(y.parseDate(i.datesDisabled,a,i.language,i.assumeNearbyYear)),i.datesDisabled=s}i.datesDisabled=t.map(i.datesDisabled,function(t){return y.parseDate(t,a,i.language,i.assumeNearbyYear)});var u=String(i.orientation).toLowerCase().split(/\s+/g),l=i.orientation.toLowerCase();if(u=t.grep(u,function(t){return/^auto|left|right|top|bottom$/.test(t)}),i.orientation={x:"auto",y:"auto"},l&&"auto"!==l)if(1===u.length)switch(u[0]){case"top":case"bottom":i.orientation.y=u[0];break;case"left":case"right":i.orientation.x=u[0]}else l=t.grep(u,function(t){return/^left|right$/.test(t)}),i.orientation.x=l[0]||"auto",l=t.grep(u,function(t){return/^top|bottom$/.test(t)}),i.orientation.y=l[0]||"auto";else;if(i.defaultViewDate){var c=i.defaultViewDate.year||(new Date).getFullYear(),d=i.defaultViewDate.month||0,h=i.defaultViewDate.day||1;i.defaultViewDate=n(c,d,h)}else i.defaultViewDate=r()},_events:[],_secondaryEvents:[],_applyEvents:function(t){for(var n,r,i,o=0;oo?(this.picker.addClass("datepicker-orient-right"),f+=h-e):this.picker.addClass("datepicker-orient-left");var m,_=this.o.orientation.y;if("auto"===_&&(m=-a+p-n,_=m<0?"bottom":"top"),this.picker.addClass("datepicker-orient-"+_),"top"===_?p-=n+parseInt(this.picker.css("padding-top")):p+=d,this.o.rtl){var y=o-(f+h);this.picker.css({top:p,right:y,zIndex:l})}else this.picker.css({top:p,left:f,zIndex:l});return this},_allow_update:!0,update:function(){if(!this._allow_update)return this;var e=this.dates.copy(),n=[],r=!1;return arguments.length?(t.each(arguments,t.proxy(function(t,e){e instanceof Date&&(e=this._local_to_utc(e)),n.push(e)},this)),r=!0):(n=this.isInput?this.element.val():this.element.data("date")||this.element.find("input").val(),n=n&&this.o.multidate?n.split(this.o.multidateSeparator):[n],delete this.element.data().date),n=t.map(n,t.proxy(function(t){return y.parseDate(t,this.o.format,this.o.language,this.o.assumeNearbyYear)},this)),n=t.grep(n,t.proxy(function(t){return!this.dateWithinRange(t)||!t},this),!0),this.dates.replace(n),this.dates.length?this.viewDate=new Date(this.dates.get(-1)):this.viewDatethis.o.endDate?this.viewDate=new Date(this.o.endDate):this.viewDate=this.o.defaultViewDate,r?this.setValue():n.length&&String(e)!==String(this.dates)&&this._trigger("changeDate"),!this.dates.length&&e.length&&this._trigger("clearDate"),this.fill(),this.element.change(),this},fillDow:function(){var e=this.o.weekStart,n="";for(this.o.calendarWeeks&&(this.picker.find(".datepicker-days .datepicker-switch").attr("colspan",function(t,e){return parseInt(e)+1}),n+=' ');e";n+="",this.picker.find(".datepicker-days thead").append(n)},fillMonths:function(){for(var t=this._utc_to_local(this.viewDate),e="",n=0;n<12;){var r=t&&t.getMonth()===n?" focused":"";e+=''+_[this.o.language].monthsShort[n++]+""}this.picker.find(".datepicker-months td").html(e)},setRange:function(e){e&&e.length?this.range=t.map(e,function(t){return t.valueOf()}):delete this.range,this.fill()},getClassNames:function(e){var n=[],r=this.viewDate.getUTCFullYear(),i=this.viewDate.getUTCMonth(),o=new Date;return e.getUTCFullYear()r||e.getUTCFullYear()===r&&e.getUTCMonth()>i)&&n.push("new"),this.focusDate&&e.valueOf()===this.focusDate.valueOf()&&n.push("focused"),this.o.todayHighlight&&e.getUTCFullYear()===o.getFullYear()&&e.getUTCMonth()===o.getMonth()&&e.getUTCDate()===o.getDate()&&n.push("today"),this.dates.contains(e)!==-1&&n.push("active"),this.dateWithinRange(e)&&!this.dateIsDisabled(e)||n.push("disabled"),t.inArray(e.getUTCDay(),this.o.daysOfWeekHighlighted)!==-1&&n.push("highlighted"),this.range&&(e>this.range[0]&&em)&&v.push("disabled"),_===this.viewDate.getFullYear()&&v.push("focused"),l!==t.noop&&(M=l(new Date(_,0,1)),M===e?M={}:"boolean"==typeof M?M={enabled:M}:"string"==typeof M&&(M={classes:M}),M.enabled===!1&&v.push("disabled"),M.classes&&(v=v.concat(M.classes.split(/\s+/))),M.tooltip&&(g=M.tooltip)),c+='"+_+"",_+=o;d.find("td").html(c)},fill:function(){var r,i,o=new Date(this.viewDate),a=o.getUTCFullYear(),s=o.getUTCMonth(),u=this.o.startDate!==-(1/0)?this.o.startDate.getUTCFullYear():-(1/0),l=this.o.startDate!==-(1/0)?this.o.startDate.getUTCMonth():-(1/0),c=this.o.endDate!==1/0?this.o.endDate.getUTCFullYear():1/0,d=this.o.endDate!==1/0?this.o.endDate.getUTCMonth():1/0,h=_[this.o.language].today||_.en.today||"",f=_[this.o.language].clear||_.en.clear||"",p=_[this.o.language].titleFormat||_.en.titleFormat;if(!isNaN(a)&&!isNaN(s)){this.picker.find(".datepicker-days .datepicker-switch").text(y.formatDate(o,p,this.o.language)),this.picker.find("tfoot .today").text(h).toggle(this.o.todayBtn!==!1),this.picker.find("tfoot .clear").text(f).toggle(this.o.clearBtn!==!1),this.picker.find("thead .datepicker-title").text(this.o.title).toggle(""!==this.o.title),this.updateNavArrows(),this.fillMonths();var m=n(a,s-1,28),v=y.getDaysInMonth(m.getUTCFullYear(),m.getUTCMonth());m.setUTCDate(v),m.setUTCDate(v-(m.getUTCDay()-this.o.weekStart+7)%7);var g=new Date(m);m.getUTCFullYear()<100&&g.setUTCFullYear(m.getUTCFullYear()),g.setUTCDate(g.getUTCDate()+42),g=g.valueOf();for(var M,b=[];m.valueOf()"),this.o.calendarWeeks)){var w=new Date(+m+(this.o.weekStart-m.getUTCDay()-7)%7*864e5),L=new Date(Number(w)+(11-w.getUTCDay())%7*864e5),k=new Date(Number(k=n(L.getUTCFullYear(),0,1))+(11-k.getUTCDay())%7*864e5),T=(L-k)/864e5/7+1;b.push(''+T+"")}M=this.getClassNames(m),M.push("day"),this.o.beforeShowDay!==t.noop&&(i=this.o.beforeShowDay(this._utc_to_local(m)),i===e?i={}:"boolean"==typeof i?i={enabled:i}:"string"==typeof i&&(i={classes:i}),i.enabled===!1&&M.push("disabled"),i.classes&&(M=M.concat(i.classes.split(/\s+/))),i.tooltip&&(r=i.tooltip)),M=t.unique(M),b.push('"+m.getUTCDate()+""),r=null,m.getUTCDay()===this.o.weekEnd&&b.push(""),m.setUTCDate(m.getUTCDate()+1)}this.picker.find(".datepicker-days tbody").empty().append(b.join(""));var D=_[this.o.language].monthsTitle||_.en.monthsTitle||"Months",S=this.picker.find(".datepicker-months").find(".datepicker-switch").text(this.o.maxViewMode<2?D:a).end().find("span").removeClass("active");if(t.each(this.dates,function(t,e){e.getUTCFullYear()===a&&S.eq(e.getUTCMonth()).addClass("active")}),(ac)&&S.addClass("disabled"),a===u&&S.slice(0,l).addClass("disabled"),a===c&&S.slice(d+1).addClass("disabled"),this.o.beforeShowMonth!==t.noop){var x=this;t.each(S,function(n,r){var i=new Date(a,n,1),o=x.o.beforeShowMonth(i);o===e?o={}:"boolean"==typeof o?o={enabled:o}:"string"==typeof o&&(o={classes:o}),o.enabled!==!1||t(r).hasClass("disabled")||t(r).addClass("disabled"),o.classes&&t(r).addClass(o.classes),o.tooltip&&t(r).prop("title",o.tooltip)})}this._fill_yearsView(".datepicker-years","year",10,1,a,u,c,this.o.beforeShowYear),this._fill_yearsView(".datepicker-decades","decade",100,10,a,u,c,this.o.beforeShowDecade),this._fill_yearsView(".datepicker-centuries","century",1e3,100,a,u,c,this.o.beforeShowCentury)}},updateNavArrows:function(){if(this._allow_update){var t=new Date(this.viewDate),e=t.getUTCFullYear(),n=t.getUTCMonth();switch(this.viewMode){case 0:this.o.startDate!==-(1/0)&&e<=this.o.startDate.getUTCFullYear()&&n<=this.o.startDate.getUTCMonth()?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}),this.o.endDate!==1/0&&e>=this.o.endDate.getUTCFullYear()&&n>=this.o.endDate.getUTCMonth()?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"});break;case 1:case 2:case 3:case 4:this.o.startDate!==-(1/0)&&e<=this.o.startDate.getUTCFullYear()||this.o.maxViewMode<2?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}),this.o.endDate!==1/0&&e>=this.o.endDate.getUTCFullYear()||this.o.maxViewMode<2?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"})}}},click:function(e){e.preventDefault(),e.stopPropagation();var i,o,a,s,u,l,c;i=t(e.target),i.hasClass("datepicker-switch")&&this.showMode(1);var d=i.closest(".prev, .next");d.length>0&&(o=y.modes[this.viewMode].navStep*(d.hasClass("prev")?-1:1),0===this.viewMode?(this.viewDate=this.moveMonth(this.viewDate,o),this._trigger("changeMonth",this.viewDate)):(this.viewDate=this.moveYear(this.viewDate,o),1===this.viewMode&&this._trigger("changeYear",this.viewDate)),this.fill()),i.hasClass("today")&&(this.showMode(-2),this._setDate(r(),"linked"===this.o.todayBtn?null:"view")),i.hasClass("clear")&&this.clearDates(),i.hasClass("disabled")||(i.hasClass("day")&&(a=parseInt(i.text(),10)||1,s=this.viewDate.getUTCFullYear(),u=this.viewDate.getUTCMonth(),i.hasClass("old")&&(0===u?(u=11,s-=1,l=!0,c=!0):(u-=1,l=!0)),i.hasClass("new")&&(11===u?(u=0,s+=1,l=!0,c=!0):(u+=1,l=!0)),this._setDate(n(s,u,a)),c&&this._trigger("changeYear",this.viewDate),l&&this._trigger("changeMonth",this.viewDate)),i.hasClass("month")&&(this.viewDate.setUTCDate(1),a=1,u=i.parent().find("span").index(i),s=this.viewDate.getUTCFullYear(),this.viewDate.setUTCMonth(u),this._trigger("changeMonth",this.viewDate),1===this.o.minViewMode?(this._setDate(n(s,u,a)),this.showMode()):this.showMode(-1),this.fill()),(i.hasClass("year")||i.hasClass("decade")||i.hasClass("century"))&&(this.viewDate.setUTCDate(1),a=1,u=0,s=parseInt(i.text(),10)||0,this.viewDate.setUTCFullYear(s),i.hasClass("year")&&(this._trigger("changeYear",this.viewDate),2===this.o.minViewMode&&this._setDate(n(s,u,a))),i.hasClass("decade")&&(this._trigger("changeDecade",this.viewDate),3===this.o.minViewMode&&this._setDate(n(s,u,a))),i.hasClass("century")&&(this._trigger("changeCentury",this.viewDate),4===this.o.minViewMode&&this._setDate(n(s,u,a))),this.showMode(-1),this.fill())),this.picker.is(":visible")&&this._focused_from&&t(this._focused_from).focus(),delete this._focused_from},_toggle_multidate:function(t){var e=this.dates.contains(t);if(t||this.dates.clear(),e!==-1?(this.o.multidate===!0||this.o.multidate>1||this.o.toggleActive)&&this.dates.remove(e):this.o.multidate===!1?(this.dates.clear(),this.dates.push(t)):this.dates.push(t),"number"==typeof this.o.multidate)for(;this.dates.length>this.o.multidate;)this.dates.remove(0)},_setDate:function(t,e){e&&"date"!==e||this._toggle_multidate(t&&new Date(t)),e&&"view"!==e||(this.viewDate=t&&new Date(t)),this.fill(),this.setValue(),e&&"view"===e||this._trigger("changeDate");var n;this.isInput?n=this.element:this.component&&(n=this.element.find("input")),n&&n.change(),!this.o.autoclose||e&&"date"!==e||this.hide()},moveDay:function(t,e){var n=new Date(t);return n.setUTCDate(t.getUTCDate()+e),n},moveWeek:function(t,e){return this.moveDay(t,7*e)},moveMonth:function(t,e){if(!a(t))return this.o.defaultViewDate;if(!e)return t;var n,r,i=new Date(t.valueOf()),o=i.getUTCDate(),s=i.getUTCMonth(),u=Math.abs(e);if(e=e>0?1:-1,1===u)r=e===-1?function(){return i.getUTCMonth()===s}:function(){return i.getUTCMonth()!==n},n=s+e,i.setUTCMonth(n),(n<0||n>11)&&(n=(n+12)%12);else{for(var l=0;l0},dateWithinRange:function(t){return t>=this.o.startDate&&t<=this.o.endDate},keydown:function(t){if(!this.picker.is(":visible"))return void(40!==t.keyCode&&27!==t.keyCode||(this.show(),t.stopPropagation()));var e,n,r=!1,i=this.focusDate||this.viewDate;switch(t.keyCode){case 27:this.focusDate?(this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill()):this.hide(),t.preventDefault(),t.stopPropagation();break;case 37:case 38:case 39:case 40:if(!this.o.keyboardNavigation||7===this.o.daysOfWeekDisabled.length)break;e=37===t.keyCode||38===t.keyCode?-1:1,0===this.viewMode?t.ctrlKey?(n=this.moveAvailableDate(i,e,"moveYear"),n&&this._trigger("changeYear",this.viewDate)):t.shiftKey?(n=this.moveAvailableDate(i,e,"moveMonth"),n&&this._trigger("changeMonth",this.viewDate)):37===t.keyCode||39===t.keyCode?n=this.moveAvailableDate(i,e,"moveDay"):this.weekOfDateIsDisabled(i)||(n=this.moveAvailableDate(i,e,"moveWeek")):1===this.viewMode?(38!==t.keyCode&&40!==t.keyCode||(e*=4),n=this.moveAvailableDate(i,e,"moveMonth")):2===this.viewMode&&(38!==t.keyCode&&40!==t.keyCode||(e*=4),n=this.moveAvailableDate(i,e,"moveYear")),n&&(this.focusDate=this.viewDate=n,this.setValue(),this.fill(),t.preventDefault());break;case 13:if(!this.o.forceParse)break;i=this.focusDate||this.dates.get(-1)||this.viewDate,this.o.keyboardNavigation&&(this._toggle_multidate(i),r=!0),this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.setValue(),this.fill(),this.picker.is(":visible")&&(t.preventDefault(),t.stopPropagation(),this.o.autoclose&&this.hide());break;case 9:this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill(),this.hide()}if(r){this.dates.length?this._trigger("changeDate"):this._trigger("clearDate");var o;this.isInput?o=this.element:this.component&&(o=this.element.find("input")),o&&o.change()}},showMode:function(t){t&&(this.viewMode=Math.max(this.o.minViewMode,Math.min(this.o.maxViewMode,this.viewMode+t))),this.picker.children("div").hide().filter(".datepicker-"+y.modes[this.viewMode].clsName).show(),this.updateNavArrows()}};var d=function(e,n){t(e).data("datepicker",this),this.element=t(e),this.inputs=t.map(n.inputs,function(t){return t.jquery?t[0]:t}),delete n.inputs,f.call(t(this.inputs),n).on("changeDate",t.proxy(this.dateUpdated,this)),this.pickers=t.map(this.inputs,function(e){return t(e).data("datepicker")}),this.updateDates()};d.prototype={updateDates:function(){this.dates=t.map(this.pickers,function(t){return t.getUTCDate()}),this.updateRanges()},updateRanges:function(){var e=t.map(this.dates,function(t){return t.valueOf()});t.each(this.pickers,function(t,n){n.setRange(e)})},dateUpdated:function(e){if(!this.updating){this.updating=!0;var n=t(e.target).data("datepicker");if("undefined"!=typeof n){var r=n.getUTCDate(),i=t.inArray(e.target,this.inputs),o=i-1,a=i+1,s=this.inputs.length;if(i!==-1){if(t.each(this.pickers,function(t,e){e.getUTCDate()||e.setUTCDate(r)}),r=0&&rthis.dates[a])for(;athis.dates[a];)this.pickers[a++].setUTCDate(r);this.updateDates(),delete this.updating}}}},remove:function(){t.map(this.pickers,function(t){t.remove()}),delete this.element.data().datepicker}};var h=t.fn.datepicker,f=function(n){var r=Array.apply(null,arguments);r.shift();var i;if(this.each(function(){var e=t(this),o=e.data("datepicker"),a="object"==typeof n&&n;if(!o){var l=s(this,"date"),h=t.extend({},p,l,a),f=u(h.language),m=t.extend({},p,f,l,a);e.hasClass("input-daterange")||m.inputs?(t.extend(m,{inputs:m.inputs||e.find("input").toArray()}),o=new d(this,m)):o=new c(this,m),e.data("datepicker",o)}"string"==typeof n&&"function"==typeof o[n]&&(i=o[n].apply(o,r))}),i===e||i instanceof c||i instanceof d)return this;if(this.length>1)throw new Error("Using only allowed for the collection of a single element ("+n+" function)");return i};t.fn.datepicker=f;var p=t.fn.datepicker.defaults={assumeNearbyYear:!1,autoclose:!1,beforeShowDay:t.noop,beforeShowMonth:t.noop,beforeShowYear:t.noop,beforeShowDecade:t.noop,beforeShowCentury:t.noop,calendarWeeks:!1,clearBtn:!1,toggleActive:!1,daysOfWeekDisabled:[],daysOfWeekHighlighted:[],datesDisabled:[],endDate:1/0,forceParse:!0,format:"mm/dd/yyyy",keyboardNavigation:!0,language:"en",minViewMode:0,maxViewMode:4,multidate:!1,multidateSeparator:",",orientation:"auto",rtl:!1,startDate:-(1/0),startView:0,todayBtn:!1,todayHighlight:!1,weekStart:0,disableTouchKeyboard:!1,enableOnReadonly:!0,showOnFocus:!0,zIndexOffset:10,container:"body",immediateUpdates:!1,title:"",templates:{leftArrow:"«",rightArrow:"»"}},m=t.fn.datepicker.locale_opts=["format","rtl","weekStart"];t.fn.datepicker.Constructor=c;var _=t.fn.datepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",clear:"Clear",titleFormat:"MM yyyy"}},y={modes:[{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10},{clsName:"decades",navFnc:"FullDecade",navStep:100},{clsName:"centuries",navFnc:"FullCentury",navStep:1e3}],isLeapYear:function(t){return t%4===0&&t%100!==0||t%400===0},getDaysInMonth:function(t,e){return[31,y.isLeapYear(t)?29:28,31,30,31,30,31,31,30,31,30,31][e]},validParts:/dd?|DD?|mm?|MM?|yy(?:yy)?/g,nonpunctuation:/[^ -\/:-@\u5e74\u6708\u65e5\[-`{-~\t\n\r]+/g,parseFormat:function(t){if("function"==typeof t.toValue&&"function"==typeof t.toDisplay)return t;var e=t.replace(this.validParts,"\0").split("\0"),n=t.match(this.validParts);if(!e||!e.length||!n||0===n.length)throw new Error("Invalid date format.");return{separators:e,parts:n}},parseDate:function(i,o,a,s){function u(t,e){return e===!0&&(e=10),t<100&&(t+=2e3,t>(new Date).getFullYear()+e&&(t-=100)),t}function l(){var t=this.slice(0,v[f].length),e=v[f].slice(0,t.length);return t.toLowerCase()===e.toLowerCase()}if(!i)return e;if(i instanceof Date)return i;if("string"==typeof o&&(o=y.parseFormat(o)),o.toValue)return o.toValue(i,o,a);var d,h,f,p,m=/([\-+]\d+)([dmwy])/,v=i.match(/([\-+]\d+)([dmwy])/g),g={d:"moveDay",m:"moveMonth",w:"moveWeek",y:"moveYear"},M={yesterday:"-1d",today:"+0d",tomorrow:"+1d"};if(/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(i)){for(i=new Date,f=0;f«»',contTemplate:'',footTemplate:''};y.template='
'+y.headTemplate+""+y.footTemplate+'
'+y.headTemplate+y.contTemplate+y.footTemplate+'
'+y.headTemplate+y.contTemplate+y.footTemplate+'
'+y.headTemplate+y.contTemplate+y.footTemplate+'
'+y.headTemplate+y.contTemplate+y.footTemplate+"
",t.fn.datepicker.DPGlobal=y,t.fn.datepicker.noConflict=function(){return t.fn.datepicker=h,this},t.fn.datepicker.version="1.6.0",t(document).on("focus.datepicker.data-api click.datepicker.data-api",'[data-provide="datepicker"]',function(e){var n=t(this);n.data("datepicker")||(e.preventDefault(),f.call(n,"show"))}),t(function(){f.call(t('[data-provide="datepicker-inline"]'))})})},function(t,e,n){t.exports=n(439)}]); \ No newline at end of file +for(f=0;f«»',contTemplate:'',footTemplate:''};y.template='
'+y.headTemplate+""+y.footTemplate+'
'+y.headTemplate+y.contTemplate+y.footTemplate+'
'+y.headTemplate+y.contTemplate+y.footTemplate+'
'+y.headTemplate+y.contTemplate+y.footTemplate+'
'+y.headTemplate+y.contTemplate+y.footTemplate+"
",t.fn.datepicker.DPGlobal=y,t.fn.datepicker.noConflict=function(){return t.fn.datepicker=h,this},t.fn.datepicker.version="1.6.0",t(document).on("focus.datepicker.data-api click.datepicker.data-api",'[data-provide="datepicker"]',function(e){var n=t(this);n.data("datepicker")||(e.preventDefault(),f.call(n,"show"))}),t(function(){f.call(t('[data-provide="datepicker-inline"]'))})})},function(t,e,n){t.exports=n(443)}]); \ No newline at end of file diff --git a/web/dist/app/vendor.ef05e364314287d37e7b0c161a904a27.css b/web/dist/app/vendor.aefd2bf857785c3666cbdc029b496d91.css similarity index 99% rename from web/dist/app/vendor.ef05e364314287d37e7b0c161a904a27.css rename to web/dist/app/vendor.aefd2bf857785c3666cbdc029b496d91.css index c2d3955c0252b..c64a2c72eaefc 100644 --- a/web/dist/app/vendor.ef05e364314287d37e7b0c161a904a27.css +++ b/web/dist/app/vendor.aefd2bf857785c3666cbdc029b496d91.css @@ -17,4 +17,4 @@ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{background:transparent!important;color:#000!important;box-shadow:none!important;text-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}}*,:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;line-height:1.42857;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}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857;background-color:#fff;border:1px solid #ddd;border-radius:4px;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #f3f3f3}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;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:400;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:#919191}.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{background-color:#fcf8e3;padding:.2em}.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-capitalize{text-transform:capitalize}.grv-invite-login-error .grv-invite-login-error-u2f-codes,.text-muted{color:#919191}.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 #f3f3f3}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857}dt{font-weight:700}dd{margin-left:0}.dl-horizontal dd:after,.dl-horizontal dd:before{content:" ";display:table}.dl-horizontal dd:after{clear:both}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #919191}.initialism{font-size:90%}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #f3f3f3}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.42857;color:#919191}blockquote .small:before,blockquote footer:before,blockquote small:before{content:"\2014 \A0"}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #f3f3f3;border-left:0;text-align:right}.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:"\A0 \2014"}address{margin-bottom:20px;font-style:normal;line-height:1.42857}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Courier New,monospace}code{color:#c7254e}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857;word-break:break-all;word-wrap:break-word;color:#4d4d4d;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{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container:after,.container:before{content:" ";display:table}.container:after{clear:both}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container-fluid:after,.container-fluid:before{content:" ";display:table}.container-fluid:after{clear:both}.row{margin-left:-15px;margin-right:-15px}.row:after,.row:before{content:" ";display:table}.row:after{clear:both}.col-lg-1,.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-lg-10,.col-lg-11,.col-lg-12,.col-md-1,.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-md-10,.col-md-11,.col-md-12,.col-sm-1,.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-sm-10,.col-sm-11,.col-sm-12,.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-1{width:8.33333%}.col-xs-2{width:16.66667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333%}.col-xs-5{width:41.66667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333%}.col-xs-8{width:66.66667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333%}.col-xs-11{width:91.66667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.33333%}.col-xs-pull-2{right:16.66667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.33333%}.col-xs-pull-5{right:41.66667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.33333%}.col-xs-pull-8{right:66.66667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.33333%}.col-xs-pull-11{right:91.66667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.33333%}.col-xs-push-2{left:16.66667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.33333%}.col-xs-push-5{left:41.66667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.33333%}.col-xs-push-8{left:66.66667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.33333%}.col-xs-push-11{left:91.66667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.33333%}.col-xs-offset-2{margin-left:16.66667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333%}.col-xs-offset-5{margin-left:41.66667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333%}.col-xs-offset-8{margin-left:66.66667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333%}.col-xs-offset-11{margin-left:91.66667%}.col-xs-offset-12{margin-left:100%}@media (min-width:768px){.col-sm-1,.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-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-1{width:8.33333%}.col-sm-2{width:16.66667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333%}.col-sm-5{width:41.66667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333%}.col-sm-8{width:66.66667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333%}.col-sm-11{width:91.66667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.33333%}.col-sm-pull-2{right:16.66667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333%}.col-sm-pull-5{right:41.66667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333%}.col-sm-pull-8{right:66.66667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333%}.col-sm-pull-11{right:91.66667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.33333%}.col-sm-push-2{left:16.66667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333%}.col-sm-push-5{left:41.66667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333%}.col-sm-push-8{left:66.66667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333%}.col-sm-push-11{left:91.66667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.33333%}.col-sm-offset-2{margin-left:16.66667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333%}.col-sm-offset-5{margin-left:41.66667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333%}.col-sm-offset-8{margin-left:66.66667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333%}.col-sm-offset-11{margin-left:91.66667%}.col-sm-offset-12{margin-left:100%}}@media (min-width:992px){.col-md-1,.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-md-10,.col-md-11,.col-md-12{float:left}.col-md-1{width:8.33333%}.col-md-2{width:16.66667%}.col-md-3{width:25%}.col-md-4{width:33.33333%}.col-md-5{width:41.66667%}.col-md-6{width:50%}.col-md-7{width:58.33333%}.col-md-8{width:66.66667%}.col-md-9{width:75%}.col-md-10{width:83.33333%}.col-md-11{width:91.66667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333%}.col-md-pull-2{right:16.66667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333%}.col-md-pull-5{right:41.66667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333%}.col-md-pull-8{right:66.66667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333%}.col-md-pull-11{right:91.66667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333%}.col-md-push-2{left:16.66667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333%}.col-md-push-5{left:41.66667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333%}.col-md-push-8{left:66.66667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333%}.col-md-push-11{left:91.66667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333%}.col-md-offset-2{margin-left:16.66667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333%}.col-md-offset-5{margin-left:41.66667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333%}.col-md-offset-8{margin-left:66.66667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333%}.col-md-offset-11{margin-left:91.66667%}.col-md-offset-12{margin-left:100%}}@media (min-width:1200px){.col-lg-1,.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-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-1{width:8.33333%}.col-lg-2{width:16.66667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333%}.col-lg-5{width:41.66667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333%}.col-lg-8{width:66.66667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333%}.col-lg-11{width:91.66667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333%}.col-lg-pull-2{right:16.66667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333%}.col-lg-pull-5{right:41.66667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333%}.col-lg-pull-8{right:66.66667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333%}.col-lg-pull-11{right:91.66667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333%}.col-lg-push-2{left:16.66667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333%}.col-lg-push-5{left:41.66667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333%}.col-lg-push-8{left:66.66667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333%}.col-lg-push-11{left:91.66667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333%}.col-lg-offset-2{margin-left:16.66667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333%}.col-lg-offset-5{margin-left:41.66667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333%}.col-lg-offset-8{margin-left:66.66667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333%}.col-lg-offset-11{margin-left:91.66667%}.col-lg-offset-12{margin-left:100%}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#919191}caption,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{border-top:1px solid #ddd}.table>thead>tr>th{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,.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;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.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{overflow-x:auto;min-height:.01%}@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{margin:0;min-width:0}fieldset,legend{padding:0;border:0}legend{display:block;width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;color:#4d4d4d;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;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{padding-top:7px}.form-control,output{display:block;font-size:14px;line-height:1.42857;color:#6f6f6f}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control:focus{border-color:#66afe9;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#aaa;opacity:1}.form-control:-ms-input-placeholder{color:#aaa}.form-control::-webkit-input-placeholder{color:#aaa}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#f3f3f3;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-group-btn>input.btn[type=date],.input-group-sm>.input-group-btn>input.btn[type=datetime-local],.input-group-sm>.input-group-btn>input.btn[type=month],.input-group-sm>.input-group-btn>input.btn[type=time],.input-group-sm>input.form-control[type=date],.input-group-sm>input.form-control[type=datetime-local],.input-group-sm>input.form-control[type=month],.input-group-sm>input.form-control[type=time],.input-group-sm>input.input-group-addon[type=date],.input-group-sm>input.input-group-addon[type=datetime-local],.input-group-sm>input.input-group-addon[type=month],.input-group-sm>input.input-group-addon[type=time],.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-group-btn>input.btn[type=date],.input-group-lg>.input-group-btn>input.btn[type=datetime-local],.input-group-lg>.input-group-btn>input.btn[type=month],.input-group-lg>.input-group-btn>input.btn[type=time],.input-group-lg>input.form-control[type=date],.input-group-lg>input.form-control[type=datetime-local],.input-group-lg>input.form-control[type=month],.input-group-lg>input.form-control[type=time],.input-group-lg>input.input-group-addon[type=date],.input-group-lg>input.input-group-addon[type=datetime-local],.input-group-lg>input.input-group-addon[type=month],.input-group-lg>input.input-group-addon[type=time],.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-inline input[type=checkbox],.checkbox input[type=checkbox],.radio-inline input[type=radio],.radio input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .checkbox label,fieldset[disabled] .radio-inline,fieldset[disabled] .radio label,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}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.input-group-sm>.input-group-btn>select.btn,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,select.input-sm{height:30px;line-height:30px}.input-group-sm>.input-group-btn>select.btn[multiple],.input-group-sm>.input-group-btn>textarea.btn,.input-group-sm>select.form-control[multiple],.input-group-sm>select.input-group-addon[multiple],.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,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-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.input-group-lg>.input-group-btn>select.btn,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,select.input-lg{height:46px;line-height:46px}.input-group-lg>.input-group-btn>select.btn[multiple],.input-group-lg>.input-group-btn>textarea.btn,.input-group-lg>select.form-control[multiple],.input-group-lg>select.input-group-addon[multiple],.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,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.33333;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.33333}.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-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.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-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success.checkbox-inline label,.has-success.checkbox label,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.radio-inline label,.has-success.radio label{color:#3c763d}.has-success .form-control{border-color:#3c763d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning.checkbox-inline label,.has-warning.checkbox label,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.radio-inline label,.has-warning.radio label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error.checkbox-inline label,.has-error.checkbox label,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.radio-inline label,.has-error.radio label{color:#a94442}.has-error .form-control{border-color:#a94442;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.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:#8d8d8d}@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{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.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}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.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;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.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{outline:0;background-image:none;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);box-shadow:none}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.active,.btn-default:active,.btn-default:hover,.open>.btn-default.dropdown-toggle{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>.btn-default.dropdown-toggle.focus,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.btn-default.dropdown-toggle{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{background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.btn-primary.dropdown-toggle{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>.btn-primary.dropdown-toggle.focus,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.btn-primary.dropdown-toggle{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{background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.btn-success.dropdown-toggle{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>.btn-success.dropdown-toggle.focus,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.btn-success.dropdown-toggle{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{background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.btn-info.dropdown-toggle{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>.btn-info.dropdown-toggle.focus,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.btn-info.dropdown-toggle{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{background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.btn-warning.dropdown-toggle{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>.btn-warning.dropdown-toggle.focus,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.btn-warning.dropdown-toggle{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{background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.btn-danger.dropdown-toggle{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>.btn-danger.dropdown-toggle.focus,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.btn-danger.dropdown-toggle{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{color:#337ab7;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;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:#919191;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33333;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%}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.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;line-height:1.42857;color:#4d4d4d;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#404040;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#919191}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857;color:#919191;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9;content:""}.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{left:0;right:auto}}.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:after,.btn-toolbar:before{content:" ";display:table}.btn-toolbar:after{clear:both}.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-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-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-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn .caret{margin-left:0}.btn-group-lg>.btn .caret,.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-group-lg>.btn .caret,.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:after,.btn-group-vertical>.btn-group:before{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.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-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-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-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio],[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.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-left:0;padding-right: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-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control: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{color:#6f6f6f;background-color:#f3f3f3;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{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-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),.input-group .form-control:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.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,.input-group .form-control:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn,.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{margin-bottom:0;padding-left:0;list-style:none}.nav:after,.nav:before{content:" ";display:table}.nav:after{clear:both}.nav>li,.nav>li>a{position:relative;display:block}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#f3f3f3}.nav>li.disabled>a{color:#919191}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#919191;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#f3f3f3;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.42857;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#f3f3f3 #f3f3f3 #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#6f6f6f;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.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,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-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,.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-justified>li>a,.nav-tabs.nav-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,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-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-right-radius:0;border-top-left-radius:0}.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}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#919191}.label-default[href]:focus,.label-default[href]:hover{background-color:#787878}.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}.modal,.modal-open{overflow:hidden}.modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{transform:translateY(-25%);transition:transform .3s ease-out}.modal.in .modal-dialog{transform:translate(0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header:after,.modal-header:before{content:" ";display:table}.modal-header:after{clear:both}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:after,.modal-footer:before{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.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{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.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-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;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{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;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{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,.2)}.btn-adn.active,.btn-adn.focus,.btn-adn:active,.btn-adn:focus,.btn-adn:hover,.open>.btn-adn.dropdown-toggle{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,.2)}.btn-adn.active.focus,.btn-adn.active:focus,.btn-adn.active:hover,.btn-adn:active.focus,.btn-adn:active:focus,.btn-adn:active:hover,.open>.btn-adn.dropdown-toggle.focus,.open>.btn-adn.dropdown-toggle:focus,.open>.btn-adn.dropdown-toggle:hover{color:#fff;background-color:#b94630;border-color:rgba(0,0,0,.2)}.btn-adn.active,.btn-adn:active,.open>.btn-adn.dropdown-toggle{background-image:none}.btn-adn.disabled.focus,.btn-adn.disabled:focus,.btn-adn.disabled:hover,.btn-adn[disabled].focus,.btn-adn[disabled]:focus,.btn-adn[disabled]:hover,fieldset[disabled] .btn-adn.focus,fieldset[disabled] .btn-adn:focus,fieldset[disabled] .btn-adn:hover{background-color:#d87a68;border-color:rgba(0,0,0,.2)}.btn-adn .badge{color:#d87a68;background-color:#fff}.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,.2)}.btn-bitbucket.active,.btn-bitbucket.focus,.btn-bitbucket:active,.btn-bitbucket:focus,.btn-bitbucket:hover,.open>.btn-bitbucket.dropdown-toggle{color:#fff;background-color:#163758;border-color:rgba(0,0,0,.2)}.btn-bitbucket.active.focus,.btn-bitbucket.active:focus,.btn-bitbucket.active:hover,.btn-bitbucket:active.focus,.btn-bitbucket:active:focus,.btn-bitbucket:active:hover,.open>.btn-bitbucket.dropdown-toggle.focus,.open>.btn-bitbucket.dropdown-toggle:focus,.open>.btn-bitbucket.dropdown-toggle:hover{color:#fff;background-color:#0f253c;border-color:rgba(0,0,0,.2)}.btn-bitbucket.active,.btn-bitbucket:active,.open>.btn-bitbucket.dropdown-toggle{background-image:none}.btn-bitbucket.disabled.focus,.btn-bitbucket.disabled:focus,.btn-bitbucket.disabled:hover,.btn-bitbucket[disabled].focus,.btn-bitbucket[disabled]:focus,.btn-bitbucket[disabled]:hover,fieldset[disabled] .btn-bitbucket.focus,fieldset[disabled] .btn-bitbucket:focus,fieldset[disabled] .btn-bitbucket:hover{background-color:#205081;border-color:rgba(0,0,0,.2)}.btn-bitbucket .badge{color:#205081;background-color:#fff}.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,.2)}.btn-dropbox.active,.btn-dropbox.focus,.btn-dropbox:active,.btn-dropbox:focus,.btn-dropbox:hover,.open>.btn-dropbox.dropdown-toggle{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,.2)}.btn-dropbox.active.focus,.btn-dropbox.active:focus,.btn-dropbox.active:hover,.btn-dropbox:active.focus,.btn-dropbox:active:focus,.btn-dropbox:active:hover,.open>.btn-dropbox.dropdown-toggle.focus,.open>.btn-dropbox.dropdown-toggle:focus,.open>.btn-dropbox.dropdown-toggle:hover{color:#fff;background-color:#0a568c;border-color:rgba(0,0,0,.2)}.btn-dropbox.active,.btn-dropbox:active,.open>.btn-dropbox.dropdown-toggle{background-image:none}.btn-dropbox.disabled.focus,.btn-dropbox.disabled:focus,.btn-dropbox.disabled:hover,.btn-dropbox[disabled].focus,.btn-dropbox[disabled]:focus,.btn-dropbox[disabled]:hover,fieldset[disabled] .btn-dropbox.focus,fieldset[disabled] .btn-dropbox:focus,fieldset[disabled] .btn-dropbox:hover{background-color:#1087dd;border-color:rgba(0,0,0,.2)}.btn-dropbox .badge{color:#1087dd;background-color:#fff}.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,.2)}.btn-facebook.active,.btn-facebook.focus,.btn-facebook:active,.btn-facebook:focus,.btn-facebook:hover,.open>.btn-facebook.dropdown-toggle{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,.2)}.btn-facebook.active.focus,.btn-facebook.active:focus,.btn-facebook.active:hover,.btn-facebook:active.focus,.btn-facebook:active:focus,.btn-facebook:active:hover,.open>.btn-facebook.dropdown-toggle.focus,.open>.btn-facebook.dropdown-toggle:focus,.open>.btn-facebook.dropdown-toggle:hover{color:#fff;background-color:#23345a;border-color:rgba(0,0,0,.2)}.btn-facebook.active,.btn-facebook:active,.open>.btn-facebook.dropdown-toggle{background-image:none}.btn-facebook.disabled.focus,.btn-facebook.disabled:focus,.btn-facebook.disabled:hover,.btn-facebook[disabled].focus,.btn-facebook[disabled]:focus,.btn-facebook[disabled]:hover,fieldset[disabled] .btn-facebook.focus,fieldset[disabled] .btn-facebook:focus,fieldset[disabled] .btn-facebook:hover{background-color:#3b5998;border-color:rgba(0,0,0,.2)}.btn-facebook .badge{color:#3b5998;background-color:#fff}.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,.2)}.btn-flickr.active,.btn-flickr.focus,.btn-flickr:active,.btn-flickr:focus,.btn-flickr:hover,.open>.btn-flickr.dropdown-toggle{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,.2)}.btn-flickr.active.focus,.btn-flickr.active:focus,.btn-flickr.active:hover,.btn-flickr:active.focus,.btn-flickr:active:focus,.btn-flickr:active:hover,.open>.btn-flickr.dropdown-toggle.focus,.open>.btn-flickr.dropdown-toggle:focus,.open>.btn-flickr.dropdown-toggle:hover{color:#fff;background-color:#a80057;border-color:rgba(0,0,0,.2)}.btn-flickr.active,.btn-flickr:active,.open>.btn-flickr.dropdown-toggle{background-image:none}.btn-flickr.disabled.focus,.btn-flickr.disabled:focus,.btn-flickr.disabled:hover,.btn-flickr[disabled].focus,.btn-flickr[disabled]:focus,.btn-flickr[disabled]:hover,fieldset[disabled] .btn-flickr.focus,fieldset[disabled] .btn-flickr:focus,fieldset[disabled] .btn-flickr:hover{background-color:#ff0084;border-color:rgba(0,0,0,.2)}.btn-flickr .badge{color:#ff0084;background-color:#fff}.btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,.2)}.btn-foursquare.active,.btn-foursquare.focus,.btn-foursquare:active,.btn-foursquare:focus,.btn-foursquare:hover,.open>.btn-foursquare.dropdown-toggle{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,.2)}.btn-foursquare.active.focus,.btn-foursquare.active:focus,.btn-foursquare.active:hover,.btn-foursquare:active.focus,.btn-foursquare:active:focus,.btn-foursquare:active:hover,.open>.btn-foursquare.dropdown-toggle.focus,.open>.btn-foursquare.dropdown-toggle:focus,.open>.btn-foursquare.dropdown-toggle:hover{color:#fff;background-color:#e30742;border-color:rgba(0,0,0,.2)}.btn-foursquare.active,.btn-foursquare:active,.open>.btn-foursquare.dropdown-toggle{background-image:none}.btn-foursquare.disabled.focus,.btn-foursquare.disabled:focus,.btn-foursquare.disabled:hover,.btn-foursquare[disabled].focus,.btn-foursquare[disabled]:focus,.btn-foursquare[disabled]:hover,fieldset[disabled] .btn-foursquare.focus,fieldset[disabled] .btn-foursquare:focus,fieldset[disabled] .btn-foursquare:hover{background-color:#f94877;border-color:rgba(0,0,0,.2)}.btn-foursquare .badge{color:#f94877;background-color:#fff}.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,.2)}.btn-github.active,.btn-github.focus,.btn-github:active,.btn-github:focus,.btn-github:hover,.open>.btn-github.dropdown-toggle{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,.2)}.btn-github.active.focus,.btn-github.active:focus,.btn-github.active:hover,.btn-github:active.focus,.btn-github:active:focus,.btn-github:active:hover,.open>.btn-github.dropdown-toggle.focus,.open>.btn-github.dropdown-toggle:focus,.open>.btn-github.dropdown-toggle:hover{color:#fff;background-color:#191919;border-color:rgba(0,0,0,.2)}.btn-github.active,.btn-github:active,.open>.btn-github.dropdown-toggle{background-image:none}.btn-github.disabled.focus,.btn-github.disabled:focus,.btn-github.disabled:hover,.btn-github[disabled].focus,.btn-github[disabled]:focus,.btn-github[disabled]:hover,fieldset[disabled] .btn-github.focus,fieldset[disabled] .btn-github:focus,fieldset[disabled] .btn-github:hover{background-color:#444;border-color:rgba(0,0,0,.2)}.btn-github .badge{color:#444;background-color:#fff}.btn-google{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,.2)}.btn-google.active,.btn-google.focus,.btn-google:active,.btn-google:focus,.btn-google:hover,.open>.btn-google.dropdown-toggle{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,.2)}.btn-google.active.focus,.btn-google.active:focus,.btn-google.active:hover,.btn-google:active.focus,.btn-google:active:focus,.btn-google:active:hover,.open>.btn-google.dropdown-toggle.focus,.open>.btn-google.dropdown-toggle:focus,.open>.btn-google.dropdown-toggle:hover{color:#fff;background-color:#a32b1c;border-color:rgba(0,0,0,.2)}.btn-google.active,.btn-google:active,.open>.btn-google.dropdown-toggle{background-image:none}.btn-google.disabled.focus,.btn-google.disabled:focus,.btn-google.disabled:hover,.btn-google[disabled].focus,.btn-google[disabled]:focus,.btn-google[disabled]:hover,fieldset[disabled] .btn-google.focus,fieldset[disabled] .btn-google:focus,fieldset[disabled] .btn-google:hover{background-color:#dd4b39;border-color:rgba(0,0,0,.2)}.btn-google .badge{color:#dd4b39;background-color:#fff}.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,.2)}.btn-instagram.active,.btn-instagram.focus,.btn-instagram:active,.btn-instagram:focus,.btn-instagram:hover,.open>.btn-instagram.dropdown-toggle{color:#fff;background-color:#305777;border-color:rgba(0,0,0,.2)}.btn-instagram.active.focus,.btn-instagram.active:focus,.btn-instagram.active:hover,.btn-instagram:active.focus,.btn-instagram:active:focus,.btn-instagram:active:hover,.open>.btn-instagram.dropdown-toggle.focus,.open>.btn-instagram.dropdown-toggle:focus,.open>.btn-instagram.dropdown-toggle:hover{color:#fff;background-color:#26455d;border-color:rgba(0,0,0,.2)}.btn-instagram.active,.btn-instagram:active,.open>.btn-instagram.dropdown-toggle{background-image:none}.btn-instagram.disabled.focus,.btn-instagram.disabled:focus,.btn-instagram.disabled:hover,.btn-instagram[disabled].focus,.btn-instagram[disabled]:focus,.btn-instagram[disabled]:hover,fieldset[disabled] .btn-instagram.focus,fieldset[disabled] .btn-instagram:focus,fieldset[disabled] .btn-instagram:hover{background-color:#3f729b;border-color:rgba(0,0,0,.2)}.btn-instagram .badge{color:#3f729b;background-color:#fff}.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,.2)}.btn-linkedin.active,.btn-linkedin.focus,.btn-linkedin:active,.btn-linkedin:focus,.btn-linkedin:hover,.open>.btn-linkedin.dropdown-toggle{color:#fff;background-color:#005983;border-color:rgba(0,0,0,.2)}.btn-linkedin.active.focus,.btn-linkedin.active:focus,.btn-linkedin.active:hover,.btn-linkedin:active.focus,.btn-linkedin:active:focus,.btn-linkedin:active:hover,.open>.btn-linkedin.dropdown-toggle.focus,.open>.btn-linkedin.dropdown-toggle:focus,.open>.btn-linkedin.dropdown-toggle:hover{color:#fff;background-color:#00405f;border-color:rgba(0,0,0,.2)}.btn-linkedin.active,.btn-linkedin:active,.open>.btn-linkedin.dropdown-toggle{background-image:none}.btn-linkedin.disabled.focus,.btn-linkedin.disabled:focus,.btn-linkedin.disabled:hover,.btn-linkedin[disabled].focus,.btn-linkedin[disabled]:focus,.btn-linkedin[disabled]:hover,fieldset[disabled] .btn-linkedin.focus,fieldset[disabled] .btn-linkedin:focus,fieldset[disabled] .btn-linkedin:hover{background-color:#007bb6;border-color:rgba(0,0,0,.2)}.btn-linkedin .badge{color:#007bb6;background-color:#fff}.btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,.2)}.btn-microsoft.active,.btn-microsoft.focus,.btn-microsoft:active,.btn-microsoft:focus,.btn-microsoft:hover,.open>.btn-microsoft.dropdown-toggle{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,.2)}.btn-microsoft.active.focus,.btn-microsoft.active:focus,.btn-microsoft.active:hover,.btn-microsoft:active.focus,.btn-microsoft:active:focus,.btn-microsoft:active:hover,.open>.btn-microsoft.dropdown-toggle.focus,.open>.btn-microsoft.dropdown-toggle:focus,.open>.btn-microsoft.dropdown-toggle:hover{color:#fff;background-color:#0f4bac;border-color:rgba(0,0,0,.2)}.btn-microsoft.active,.btn-microsoft:active,.open>.btn-microsoft.dropdown-toggle{background-image:none}.btn-microsoft.disabled.focus,.btn-microsoft.disabled:focus,.btn-microsoft.disabled:hover,.btn-microsoft[disabled].focus,.btn-microsoft[disabled]:focus,.btn-microsoft[disabled]:hover,fieldset[disabled] .btn-microsoft.focus,fieldset[disabled] .btn-microsoft:focus,fieldset[disabled] .btn-microsoft:hover{background-color:#2672ec;border-color:rgba(0,0,0,.2)}.btn-microsoft .badge{color:#2672ec;background-color:#fff}.btn-odnoklassniki{color:#fff;background-color:#f4731c;border-color:rgba(0,0,0,.2)}.btn-odnoklassniki.active,.btn-odnoklassniki.focus,.btn-odnoklassniki:active,.btn-odnoklassniki:focus,.btn-odnoklassniki:hover,.open>.btn-odnoklassniki.dropdown-toggle{color:#fff;background-color:#d35b0a;border-color:rgba(0,0,0,.2)}.btn-odnoklassniki.active.focus,.btn-odnoklassniki.active:focus,.btn-odnoklassniki.active:hover,.btn-odnoklassniki:active.focus,.btn-odnoklassniki:active:focus,.btn-odnoklassniki:active:hover,.open>.btn-odnoklassniki.dropdown-toggle.focus,.open>.btn-odnoklassniki.dropdown-toggle:focus,.open>.btn-odnoklassniki.dropdown-toggle:hover{color:#fff;background-color:#b14c09;border-color:rgba(0,0,0,.2)}.btn-odnoklassniki.active,.btn-odnoklassniki:active,.open>.btn-odnoklassniki.dropdown-toggle{background-image:none}.btn-odnoklassniki.disabled.focus,.btn-odnoklassniki.disabled:focus,.btn-odnoklassniki.disabled:hover,.btn-odnoklassniki[disabled].focus,.btn-odnoklassniki[disabled]:focus,.btn-odnoklassniki[disabled]:hover,fieldset[disabled] .btn-odnoklassniki.focus,fieldset[disabled] .btn-odnoklassniki:focus,fieldset[disabled] .btn-odnoklassniki:hover{background-color:#f4731c;border-color:rgba(0,0,0,.2)}.btn-odnoklassniki .badge{color:#f4731c;background-color:#fff}.btn-openid,.grv-user-btn-sso.\--unknown{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,.2)}.active.grv-user-btn-sso.\--unknown,.btn-openid.active,.btn-openid.focus,.btn-openid:active,.btn-openid:focus,.btn-openid:hover,.focus.grv-user-btn-sso.\--unknown,.grv-user-btn-sso.\--unknown:active,.grv-user-btn-sso.\--unknown:focus,.grv-user-btn-sso.\--unknown:hover,.open>.btn-openid.dropdown-toggle,.open>.dropdown-toggle.grv-user-btn-sso.\--unknown{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,.2)}.active.focus.grv-user-btn-sso.\--unknown,.active.grv-user-btn-sso.\--unknown:focus,.active.grv-user-btn-sso.\--unknown:hover,.btn-openid.active.focus,.btn-openid.active:focus,.btn-openid.active:hover,.btn-openid:active.focus,.btn-openid:active:focus,.btn-openid:active:hover,.grv-user-btn-sso.\--unknown:active.focus,.grv-user-btn-sso.\--unknown:active:focus,.grv-user-btn-sso.\--unknown:active:hover,.open>.btn-openid.dropdown-toggle.focus,.open>.btn-openid.dropdown-toggle:focus,.open>.btn-openid.dropdown-toggle:hover,.open>.dropdown-toggle.focus.grv-user-btn-sso.\--unknown,.open>.dropdown-toggle.grv-user-btn-sso.\--unknown:focus,.open>.dropdown-toggle.grv-user-btn-sso.\--unknown:hover{color:#fff;background-color:#b86607;border-color:rgba(0,0,0,.2)}.active.grv-user-btn-sso.\--unknown,.btn-openid.active,.btn-openid:active,.grv-user-btn-sso.\--unknown:active,.open>.btn-openid.dropdown-toggle,.open>.dropdown-toggle.grv-user-btn-sso.\--unknown{background-image:none}.btn-openid.disabled.focus,.btn-openid.disabled:focus,.btn-openid.disabled:hover,.btn-openid[disabled].focus,.btn-openid[disabled]:focus,.btn-openid[disabled]:hover,.disabled.focus.grv-user-btn-sso.\--unknown,.disabled.grv-user-btn-sso.\--unknown:focus,.disabled.grv-user-btn-sso.\--unknown:hover,.grv-user-btn-sso.\--unknown[disabled].focus,.grv-user-btn-sso.\--unknown[disabled]:focus,.grv-user-btn-sso.\--unknown[disabled]:hover,fieldset[disabled] .btn-openid.focus,fieldset[disabled] .btn-openid:focus,fieldset[disabled] .btn-openid:hover,fieldset[disabled] .focus.grv-user-btn-sso.\--unknown,fieldset[disabled] .grv-user-btn-sso.\--unknown:focus,fieldset[disabled] .grv-user-btn-sso.\--unknown:hover{background-color:#f7931e;border-color:rgba(0,0,0,.2)}.btn-openid .badge,.grv-user-btn-sso.\--unknown .badge{color:#f7931e;background-color:#fff}.btn-saml{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,.2)}.btn-saml.active,.btn-saml.focus,.btn-saml:active,.btn-saml:focus,.btn-saml:hover,.open>.btn-saml.dropdown-toggle{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,.2)}.btn-saml.active.focus,.btn-saml.active:focus,.btn-saml.active:hover,.btn-saml:active.focus,.btn-saml:active:focus,.btn-saml:active:hover,.open>.btn-saml.dropdown-toggle.focus,.open>.btn-saml.dropdown-toggle:focus,.open>.btn-saml.dropdown-toggle:hover{color:#fff;background-color:#b86607;border-color:rgba(0,0,0,.2)}.btn-saml.active,.btn-saml:active,.open>.btn-saml.dropdown-toggle{background-image:none}.btn-saml.disabled.focus,.btn-saml.disabled:focus,.btn-saml.disabled:hover,.btn-saml[disabled].focus,.btn-saml[disabled]:focus,.btn-saml[disabled]:hover,fieldset[disabled] .btn-saml.focus,fieldset[disabled] .btn-saml:focus,fieldset[disabled] .btn-saml:hover{background-color:#f7931e;border-color:rgba(0,0,0,.2)}.btn-saml .badge{color:#f7931e;background-color:#fff}.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,.2)}.btn-pinterest.active,.btn-pinterest.focus,.btn-pinterest:active,.btn-pinterest:focus,.btn-pinterest:hover,.open>.btn-pinterest.dropdown-toggle{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,.2)}.btn-pinterest.active.focus,.btn-pinterest.active:focus,.btn-pinterest.active:hover,.btn-pinterest:active.focus,.btn-pinterest:active:focus,.btn-pinterest:active:hover,.open>.btn-pinterest.dropdown-toggle.focus,.open>.btn-pinterest.dropdown-toggle:focus,.open>.btn-pinterest.dropdown-toggle:hover{color:#fff;background-color:#801419;border-color:rgba(0,0,0,.2)}.btn-pinterest.active,.btn-pinterest:active,.open>.btn-pinterest.dropdown-toggle{background-image:none}.btn-pinterest.disabled.focus,.btn-pinterest.disabled:focus,.btn-pinterest.disabled:hover,.btn-pinterest[disabled].focus,.btn-pinterest[disabled]:focus,.btn-pinterest[disabled]:hover,fieldset[disabled] .btn-pinterest.focus,fieldset[disabled] .btn-pinterest:focus,fieldset[disabled] .btn-pinterest:hover{background-color:#cb2027;border-color:rgba(0,0,0,.2)}.btn-pinterest .badge{color:#cb2027;background-color:#fff}.btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,.2)}.btn-reddit.active,.btn-reddit.focus,.btn-reddit:active,.btn-reddit:focus,.btn-reddit:hover,.open>.btn-reddit.dropdown-toggle{color:#000;background-color:#bcdeff;border-color:rgba(0,0,0,.2)}.btn-reddit.active.focus,.btn-reddit.active:focus,.btn-reddit.active:hover,.btn-reddit:active.focus,.btn-reddit:active:focus,.btn-reddit:active:hover,.open>.btn-reddit.dropdown-toggle.focus,.open>.btn-reddit.dropdown-toggle:focus,.open>.btn-reddit.dropdown-toggle:hover{color:#000;background-color:#98ccff;border-color:rgba(0,0,0,.2)}.btn-reddit.active,.btn-reddit:active,.open>.btn-reddit.dropdown-toggle{background-image:none}.btn-reddit.disabled.focus,.btn-reddit.disabled:focus,.btn-reddit.disabled:hover,.btn-reddit[disabled].focus,.btn-reddit[disabled]:focus,.btn-reddit[disabled]:hover,fieldset[disabled] .btn-reddit.focus,fieldset[disabled] .btn-reddit:focus,fieldset[disabled] .btn-reddit:hover{background-color:#eff7ff;border-color:rgba(0,0,0,.2)}.btn-reddit .badge{color:#eff7ff;background-color:#000}.btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,.2)}.btn-soundcloud.active,.btn-soundcloud.focus,.btn-soundcloud:active,.btn-soundcloud:focus,.btn-soundcloud:hover,.open>.btn-soundcloud.dropdown-toggle{color:#fff;background-color:#c40;border-color:rgba(0,0,0,.2)}.btn-soundcloud.active.focus,.btn-soundcloud.active:focus,.btn-soundcloud.active:hover,.btn-soundcloud:active.focus,.btn-soundcloud:active:focus,.btn-soundcloud:active:hover,.open>.btn-soundcloud.dropdown-toggle.focus,.open>.btn-soundcloud.dropdown-toggle:focus,.open>.btn-soundcloud.dropdown-toggle:hover{color:#fff;background-color:#a83800;border-color:rgba(0,0,0,.2)}.btn-soundcloud.active,.btn-soundcloud:active,.open>.btn-soundcloud.dropdown-toggle{background-image:none}.btn-soundcloud.disabled.focus,.btn-soundcloud.disabled:focus,.btn-soundcloud.disabled:hover,.btn-soundcloud[disabled].focus,.btn-soundcloud[disabled]:focus,.btn-soundcloud[disabled]:hover,fieldset[disabled] .btn-soundcloud.focus,fieldset[disabled] .btn-soundcloud:focus,fieldset[disabled] .btn-soundcloud:hover{background-color:#f50;border-color:rgba(0,0,0,.2)}.btn-soundcloud .badge{color:#f50;background-color:#fff}.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,.2)}.btn-tumblr.active,.btn-tumblr.focus,.btn-tumblr:active,.btn-tumblr:focus,.btn-tumblr:hover,.open>.btn-tumblr.dropdown-toggle{color:#fff;background-color:#1c2e3f;border-color:rgba(0,0,0,.2)}.btn-tumblr.active.focus,.btn-tumblr.active:focus,.btn-tumblr.active:hover,.btn-tumblr:active.focus,.btn-tumblr:active:focus,.btn-tumblr:active:hover,.open>.btn-tumblr.dropdown-toggle.focus,.open>.btn-tumblr.dropdown-toggle:focus,.open>.btn-tumblr.dropdown-toggle:hover{color:#fff;background-color:#111c26;border-color:rgba(0,0,0,.2)}.btn-tumblr.active,.btn-tumblr:active,.open>.btn-tumblr.dropdown-toggle{background-image:none}.btn-tumblr.disabled.focus,.btn-tumblr.disabled:focus,.btn-tumblr.disabled:hover,.btn-tumblr[disabled].focus,.btn-tumblr[disabled]:focus,.btn-tumblr[disabled]:hover,fieldset[disabled] .btn-tumblr.focus,fieldset[disabled] .btn-tumblr:focus,fieldset[disabled] .btn-tumblr:hover{background-color:#2c4762;border-color:rgba(0,0,0,.2)}.btn-tumblr .badge{color:#2c4762;background-color:#fff}.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,.2)}.btn-twitter.active,.btn-twitter.focus,.btn-twitter:active,.btn-twitter:focus,.btn-twitter:hover,.open>.btn-twitter.dropdown-toggle{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,.2)}.btn-twitter.active.focus,.btn-twitter.active:focus,.btn-twitter.active:hover,.btn-twitter:active.focus,.btn-twitter:active:focus,.btn-twitter:active:hover,.open>.btn-twitter.dropdown-toggle.focus,.open>.btn-twitter.dropdown-toggle:focus,.open>.btn-twitter.dropdown-toggle:hover{color:#fff;background-color:#1583d7;border-color:rgba(0,0,0,.2)}.btn-twitter.active,.btn-twitter:active,.open>.btn-twitter.dropdown-toggle{background-image:none}.btn-twitter.disabled.focus,.btn-twitter.disabled:focus,.btn-twitter.disabled:hover,.btn-twitter[disabled].focus,.btn-twitter[disabled]:focus,.btn-twitter[disabled]:hover,fieldset[disabled] .btn-twitter.focus,fieldset[disabled] .btn-twitter:focus,fieldset[disabled] .btn-twitter:hover{background-color:#55acee;border-color:rgba(0,0,0,.2)}.btn-twitter .badge{color:#55acee;background-color:#fff}.btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,.2)}.btn-vimeo.active,.btn-vimeo.focus,.btn-vimeo:active,.btn-vimeo:focus,.btn-vimeo:hover,.open>.btn-vimeo.dropdown-toggle{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,.2)}.btn-vimeo.active.focus,.btn-vimeo.active:focus,.btn-vimeo.active:hover,.btn-vimeo:active.focus,.btn-vimeo:active:focus,.btn-vimeo:active:hover,.open>.btn-vimeo.dropdown-toggle.focus,.open>.btn-vimeo.dropdown-toggle:focus,.open>.btn-vimeo.dropdown-toggle:hover{color:#fff;background-color:#0f7b9f;border-color:rgba(0,0,0,.2)}.btn-vimeo.active,.btn-vimeo:active,.open>.btn-vimeo.dropdown-toggle{background-image:none}.btn-vimeo.disabled.focus,.btn-vimeo.disabled:focus,.btn-vimeo.disabled:hover,.btn-vimeo[disabled].focus,.btn-vimeo[disabled]:focus,.btn-vimeo[disabled]:hover,fieldset[disabled] .btn-vimeo.focus,fieldset[disabled] .btn-vimeo:focus,fieldset[disabled] .btn-vimeo:hover{background-color:#1ab7ea;border-color:rgba(0,0,0,.2)}.btn-vimeo .badge{color:#1ab7ea;background-color:#fff}.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,.2)}.btn-vk.active,.btn-vk.focus,.btn-vk:active,.btn-vk:focus,.btn-vk:hover,.open>.btn-vk.dropdown-toggle{color:#fff;background-color:#466482;border-color:rgba(0,0,0,.2)}.btn-vk.active.focus,.btn-vk.active:focus,.btn-vk.active:hover,.btn-vk:active.focus,.btn-vk:active:focus,.btn-vk:active:hover,.open>.btn-vk.dropdown-toggle.focus,.open>.btn-vk.dropdown-toggle:focus,.open>.btn-vk.dropdown-toggle:hover{color:#fff;background-color:#3a526b;border-color:rgba(0,0,0,.2)}.btn-vk.active,.btn-vk:active,.open>.btn-vk.dropdown-toggle{background-image:none}.btn-vk.disabled.focus,.btn-vk.disabled:focus,.btn-vk.disabled:hover,.btn-vk[disabled].focus,.btn-vk[disabled]:focus,.btn-vk[disabled]:hover,fieldset[disabled] .btn-vk.focus,fieldset[disabled] .btn-vk:focus,fieldset[disabled] .btn-vk:hover{background-color:#587ea3;border-color:rgba(0,0,0,.2)}.btn-vk .badge{color:#587ea3;background-color:#fff}.btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,.2)}.btn-yahoo.active,.btn-yahoo.focus,.btn-yahoo:active,.btn-yahoo:focus,.btn-yahoo:hover,.open>.btn-yahoo.dropdown-toggle{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,.2)}.btn-yahoo.active.focus,.btn-yahoo.active:focus,.btn-yahoo.active:hover,.btn-yahoo:active.focus,.btn-yahoo:active:focus,.btn-yahoo:active:hover,.open>.btn-yahoo.dropdown-toggle.focus,.open>.btn-yahoo.dropdown-toggle:focus,.open>.btn-yahoo.dropdown-toggle:hover{color:#fff;background-color:#39074e;border-color:rgba(0,0,0,.2)}.btn-yahoo.active,.btn-yahoo:active,.open>.btn-yahoo.dropdown-toggle{background-image:none}.btn-yahoo.disabled.focus,.btn-yahoo.disabled:focus,.btn-yahoo.disabled:hover,.btn-yahoo[disabled].focus,.btn-yahoo[disabled]:focus,.btn-yahoo[disabled]:hover,fieldset[disabled] .btn-yahoo.focus,fieldset[disabled] .btn-yahoo:focus,fieldset[disabled] .btn-yahoo:hover{background-color:#720e9e;border-color:rgba(0,0,0,.2)}.btn-yahoo .badge{color:#720e9e;background-color:#fff}h1{font-size:30px}h2{font-size:24px}h3{font-size:16px}h4{font-size:14px}h5{font-size:12px}h6{font-size:10px}h3,h4,h5{margin-top:5px;font-weight:600}.btn{border-radius:3px}.float-e-margins .btn{margin-bottom:5px}.btn-w-m{min-width:120px}.btn-primary.btn-outline{color:#4e988b}.btn-success.btn-outline{color:#4f8aaf}.btn-info.btn-outline{color:#4e988b}.btn-warning.btn-outline{color:#ff9800}.btn-danger.btn-outline{color:#ed5565}.btn-danger.btn-outline:hover,.btn-info.btn-outline:hover,.btn-primary.btn-outline:hover,.btn-success.btn-outline:hover,.btn-warning.btn-outline:hover{color:#fff}.btn-primary{background-color:#4e988b;border-color:#4e988b;color:#fff}.btn-primary.active,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active,.btn-primary:active:focus,.btn-primary:active:hover,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{background-color:#498e82;border-color:#498e82;color:#fff}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.active[disabled],.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]: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:#55a597;border-color:#55a597}.btn-success{background-color:#4f8aaf;border-color:#4f8aaf;color:#fff}.btn-success.active,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active,.btn-success:active:focus,.btn-success:active:hover,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{background-color:#4a82a4;border-color:#4a82a4;color:#fff}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.active[disabled],.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]: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:#5d93b6;border-color:#5d93b6}.btn-info{background-color:#4e988b;border-color:#4e988b;color:#fff}.btn-info.active,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active,.btn-info:active:focus,.btn-info:active:hover,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{background-color:#498e82;border-color:#498e82;color:#fff}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.active[disabled],.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]: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:#55a597;border-color:#55a597}.btn-default{color:inherit;background:#fff;border:1px solid #e7eaec}.btn-default.active,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active,.btn-default:active:focus,.btn-default:active:hover,.btn-default:focus,.btn-default:hover,.open .dropdown-toggle.btn-default{color:inherit;border:1px solid #d2d2d2}.btn-default.active,.btn-default:active,.open .dropdown-toggle.btn-default{box-shadow:inset 0 2px 5px rgba(0,0,0,.15)}.btn-default.active[disabled],.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]: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{color:#cacaca}.btn-warning{background-color:#ff9800;border-color:#ff9800;color:#fff}.btn-warning.active,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active,.btn-warning:active:focus,.btn-warning:active:hover,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{background-color:#f08f00;border-color:#f08f00;color:#fff}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.active[disabled],.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]: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:#ffa014;border-color:#ffa014}.btn-danger{background-color:#ed5565;border-color:#ed5565;color:#fff}.btn-danger.active,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active,.btn-danger:active:focus,.btn-danger:active:hover,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{background-color:#ec4758;border-color:#ec4758;color:#fff}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.active[disabled],.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]: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:#ef6776;border-color:#ef6776}.btn-link{color:inherit}.btn-link.active,.btn-link:active,.btn-link:focus,.btn-link:hover,.open .dropdown-toggle.btn-link{color:#4e988b;text-decoration:none}.btn-link.active,.btn-link:active,.open .dropdown-toggle.btn-link{background-image:none}.btn-link.active[disabled],.btn-link.disabled,.btn-link.disabled.active,.btn-link.disabled:active,.btn-link.disabled:focus,.btn-link.disabled:hover,.btn-link[disabled],.btn-link[disabled]:active,.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link,fieldset[disabled] .btn-link.active,fieldset[disabled] .btn-link:active,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#cacaca}.btn-white{color:inherit;background:#fff;border:1px solid #e7eaec}.btn-white.active,.btn-white.active:focus,.btn-white.active:hover,.btn-white:active,.btn-white:active:focus,.btn-white:active:hover,.btn-white:focus,.btn-white:hover,.open .dropdown-toggle.btn-white{color:inherit;border:1px solid #d2d2d2}.btn-white.active,.btn-white:active{box-shadow:inset 0 2px 5px rgba(0,0,0,.15)}.btn-white.active,.btn-white:active,.open .dropdown-toggle.btn-white{background-image:none}.btn-white.active[disabled],.btn-white.disabled,.btn-white.disabled.active,.btn-white.disabled:active,.btn-white.disabled:focus,.btn-white.disabled:hover,.btn-white[disabled],.btn-white[disabled]:active,.btn-white[disabled]:focus,.btn-white[disabled]:hover,fieldset[disabled] .btn-white,fieldset[disabled] .btn-white.active,fieldset[disabled] .btn-white:active,fieldset[disabled] .btn-white:focus,fieldset[disabled] .btn-white:hover{color:#cacaca}.form-control,.form-control:focus,.has-error .form-control:focus,.has-success .form-control:focus,.has-warning .form-control:focus,.navbar-collapse,.navbar-form,.navbar-form-custom .form-control:focus,.navbar-form-custom .form-control:hover,.open .btn.dropdown-toggle,.panel,.popover,.progress,.progress-bar{box-shadow:none}.btn-outline{color:inherit;background-color:transparent;transition:all .5s}.btn-rounded{border-radius:50px}.btn-large-dim{width:90px;height:90px;font-size:42px}button.dim{display:inline-block;text-decoration:none;text-transform:uppercase;text-align:center;padding-top:6px;margin-right:10px;position:relative;cursor:pointer;border-radius:5px;font-weight:600;margin-bottom:20px!important}button.dim:active{top:3px}button.btn-primary.dim{box-shadow:inset 0 0 0 #448479,0 5px 0 0 #448479,0 10px 5px #999}button.btn-primary.dim:active{box-shadow:inset 0 0 0 #448479,0 2px 0 0 #448479,0 5px 3px #999}button.btn-default.dim{box-shadow:inset 0 0 0 #b3b3b3,0 5px 0 0 #b3b3b3,0 10px 5px #999}button.btn-default.dim:active{box-shadow:inset 0 0 0 #b3b3b3,0 2px 0 0 #b3b3b3,0 5px 3px #999}button.btn-warning.dim{box-shadow:inset 0 0 0 #e08600,0 5px 0 0 #e08600,0 10px 5px #999}button.btn-warning.dim:active{box-shadow:inset 0 0 0 #e08600,0 2px 0 0 #e08600,0 5px 3px #999}button.btn-info.dim{box-shadow:inset 0 0 0 #448479,0 5px 0 0 #448479,0 10px 5px #999}button.btn-info.dim:active{box-shadow:inset 0 0 0 #448479,0 2px 0 0 #448479,0 5px 3px #999}button.btn-success.dim{box-shadow:inset 0 0 0 #45799a,0 5px 0 0 #45799a,0 10px 5px #999}button.btn-success.dim:active{box-shadow:inset 0 0 0 #45799a,0 2px 0 0 #45799a,0 5px 3px #999}button.btn-danger.dim{box-shadow:inset 0 0 0 #ea394c,0 5px 0 0 #ea394c,0 10px 5px #999}button.btn-danger.dim:active{box-shadow:inset 0 0 0 #ea394c,0 2px 0 0 #ea394c,0 5px 3px #999}button.dim:before{font-size:50px;line-height:1em;font-weight:400;color:#fff;display:block;padding-top:10px}button.dim:active:before{top:7px;font-size:50px}.btn:focus{outline:none!important}.inline{display:inline-block!important}.input-s-sm{width:120px}.input-s{width:200px}.input-s-lg{width:250px}.form-control,.single-line{background-color:#fff;background-image:none;border:1px solid #e5e6e7;border-radius:1px;color:inherit;display:block;padding:6px 12px;transition:border-color .15s ease-in-out 0s,box-shadow .15s ease-in-out 0s;width:100%;font-size:14px}.form-control:focus,.single-line:focus{border-color:#4e988b!important}.input-group-addon{background-color:#fff;border:1px solid #e5e6e7;border-radius:1px;color:inherit;font-size:14px;font-weight:400;line-height:1;padding:6px 12px;text-align:center}label.error,label.grv-invite-login-error{color:#cc5965;display:inline-block;margin-left:5px}.form-control.error,.form-control.grv-invite-login-error{border:1px dotted #cc5965}.dropdown-menu{border:medium none;border-radius:3px;box-shadow:0 0 3px rgba(86,96,117,.7);display:none;float:left;font-size:13px;left:0;list-style:none outside none;padding:0;position:absolute;text-shadow:none;top:100%;z-index:1000}.dropdown-menu>li>a{border-radius:3px;color:inherit;line-height:25px;margin:4px;text-align:left;font-weight:400}body{font-family:-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;background-color:#2f4050;font-size:14px;color:#4d4d4d;overflow-x:hidden}body,body.full-height-layout #page-wrapper,body.full-height-layout #wrapper,html{height:100%}#page-wrapper{min-height:auto}body.boxed-layout #wrapper{background-color:#2f4050;max-width:1200px;margin:0 auto;box-shadow:0 0 5px 0 rgba(0,0,0,.75)}.boxed-layout #wrapper.top-navigation,.top-navigation.boxed-layout #wrapper{max-width:1300px!important}.block,.clear{display:block}.clear{overflow:hidden}a{cursor:pointer}a:focus,a:hover{text-decoration:none}.border-bottom{border-bottom:1px solid #e7eaec!important}.font-bold{font-weight:600}.font-noraml{font-weight:400}.initialism,.text-uppercase{text-transform:uppercase}.b-r{border-right:1px solid #e7eaec}.hr-line-dashed{border-top:1px dashed #e7eaec;color:#fff;background-color:#fff;height:1px;margin:20px 0}.hr-line-solid{border-bottom:1px solid #e7eaec;background-color:transparent;border-style:solid!important;margin-top:15px;margin-bottom:15px}.modal-content{background-clip:padding-box;background-color:#fff;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 3px rgba(0,0,0,.3);outline:0 none;position:relative}.modal-dialog{z-index:2200}.modal-body{padding:20px 30px 30px}.inmodal .modal-body{background:#f8fafb}.inmodal .modal-header{padding:30px 15px;text-align:center}.animated.modal.fade .modal-dialog{transform:none}.inmodal .modal-title{font-size:26px}.inmodal .modal-icon{font-size:84px;color:#e2e3e3}.modal-footer{margin-top:0}#wrapper{width:100%;overflow-x:hidden}.wrapper{padding:0 20px}.wrapper-content{padding:20px 10px 40px}#page-wrapper{padding:0 15px;min-height:568px;position:relative!important}@media (min-width:768px){#page-wrapper{position:inherit;margin:0 0 0 240px;min-height:2002px}}ol.unstyled,ul.unstyled{list-style:none outside none;margin-left:0}.page-heading{border-top:0;padding:0 10px 20px}.panel-heading h1,.panel-heading h2{margin-bottom:5px}.table-bordered{border:1px solid #ebebeb}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{background-color:#f5f5f6;border-bottom-width:1px}.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 #e7e7e7}.table>thead>tr>th{border-bottom:1px solid #ddd;vertical-align:bottom}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{border-top:1px solid #e7eaec;line-height:1.42857;padding:8px;vertical-align:top}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{-moz-border-bottom-colors:none;-moz-border-left-colors:none;-moz-border-right-colors:none;-moz-border-top-colors:none;background:none;border-color:#ddd #ddd transparent;border-bottom:#6f6f6f;border-image:none;border-style:solid;border-width:1px;color:#555;cursor:default}.nav.nav-tabs li{background:none;border:none}.nav-tabs>li>a{color:#a7b1c2;font-weight:600;padding:10px 20px 10px 25px}.nav-tabs>li>a:focus,.nav-tabs>li>a:hover{background-color:#e6e6e6;color:#4d4d4d}.ui-tab .tab-content{padding:20px 0}.no-padding{padding:0!important}.no-borders{border:none!important}.no-margins{margin:0!important}.no-top-border{border-top:0!important}.border-left-right{border-right:1px solid #e7eaec}.border-left,.border-left-right{border-left:1px solid #e7eaec;border-top:none;border-bottom:none}.border-left{border-right:none}.border-right{border-left:none;border-right:1px solid #e7eaec;border-top:none;border-bottom:none}.full-width{width:100%!important}code{background-color:#f9f2f4;border-radius:4px;color:#ca4440;font-size:90%;padding:2px 4px;white-space:nowrap}.gray-bg{background-color:#6f6f6f}.white-bg{background-color:#fff}.navy-bg{background-color:#4e988b;color:#fff}.blue-bg{background-color:#4f8aaf;color:#fff}.lazur-bg{background-color:#4e988b;color:#fff}.yellow-bg{background-color:#ff9800;color:#fff}.red-bg{background-color:#ed5565;color:#fff}.black-bg{background-color:#262626}.text-navy{color:#4e988b}.text-primary{color:inherit}.text-success{color:#4f8aaf}.text-info{color:#4e988b}.text-warning{color:#ff9800}.text-danger{color:#ed5565}.grv-invite-login-error .grv-invite-login-error-u2f-codes,.text-muted{color:#888}.text-white{color:#fff}.img-shadow{box-shadow:0 0 3px 0 #919191}.full-height{height:100%}.modal-backdrop{z-index:2040!important}.modal{z-index:2050!important}.p-xxs{padding:5px}.p-xs{padding:10px}.p-sm{padding:15px}.p-m{padding:20px}.p-md{padding:25px}.p-lg{padding:30px}.p-xl{padding:40px}.p-w-xs{padding:0 10px}.p-w-sm{padding:0 15px}.p-w-m{padding:0 20px}.p-w-md{padding:0 25px}.p-w-lg{padding:0 30px}.p-w-xl{padding:0 40px}.m-xxs{margin:2px 4px}.m-xs{margin:5px}.m-sm{margin:10px}.m{margin:15px}.m-md{margin:20px}.m-lg{margin:30px}.m-xl{margin:50px}.m-n{margin:0!important}.m-l-none{margin-left:0}.m-l-xs{margin-left:5px}.m-l-sm{margin-left:10px}.m-l{margin-left:15px}.m-l-md{margin-left:20px}.m-l-lg{margin-left:30px}.m-l-xl{margin-left:40px}.m-l-n-xxs{margin-left:-1px}.m-l-n-xs{margin-left:-5px}.m-l-n-sm{margin-left:-10px}.m-l-n{margin-left:-15px}.m-l-n-md{margin-left:-20px}.m-l-n-lg{margin-left:-30px}.m-l-n-xl{margin-left:-40px}.m-t-none{margin-top:0}.m-t-xxs{margin-top:1px}.m-t-xs{margin-top:5px}.grv-invite-login-error .grv-invite-login-error-u2f-codes,.m-t-sm{margin-top:10px}.m-t{margin-top:15px}.m-t-md{margin-top:20px}.m-t-lg{margin-top:30px}.m-t-xl{margin-top:40px}.m-t-n-xxs{margin-top:-1px}.m-t-n-xs{margin-top:-5px}.m-t-n-sm{margin-top:-10px}.m-t-n{margin-top:-15px}.m-t-n-md{margin-top:-20px}.m-t-n-lg{margin-top:-30px}.m-t-n-xl{margin-top:-40px}.m-r-none{margin-right:0}.m-r-xxs{margin-right:1px}.m-r-xs{margin-right:5px}.m-r-sm{margin-right:10px}.m-r{margin-right:15px}.m-r-md{margin-right:20px}.m-r-lg{margin-right:30px}.m-r-xl{margin-right:40px}.m-r-n-xxs{margin-right:-1px}.m-r-n-xs{margin-right:-5px}.m-r-n-sm{margin-right:-10px}.m-r-n{margin-right:-15px}.m-r-n-md{margin-right:-20px}.m-r-n-lg{margin-right:-30px}.m-r-n-xl{margin-right:-40px}.m-b-none{margin-bottom:0}.m-b-xxs{margin-bottom:1px}.m-b-xs{margin-bottom:5px}.m-b-sm{margin-bottom:10px}.m-b{margin-bottom:15px}.m-b-md{margin-bottom:20px}.m-b-lg{margin-bottom:30px}.m-b-xl{margin-bottom:40px}.m-b-n-xxs{margin-bottom:-1px}.m-b-n-xs{margin-bottom:-5px}.m-b-n-sm{margin-bottom:-10px}.m-b-n{margin-bottom:-15px}.m-b-n-md{margin-bottom:-20px}.m-b-n-lg{margin-bottom:-30px}.m-b-n-xl{margin-bottom:-40px}.space-15{margin:15px 0}.space-20{margin:20px 0}.space-25{margin:25px 0}.space-30{margin:30px 0}.sk-spinner-rotating-plane.sk-spinner{width:30px;height:30px;background-color:#4e988b;margin:0 auto;animation:sk-rotatePlane 1.2s infinite ease-in-out}@keyframes sk-rotatePlane{0%{transform:perspective(120px) rotateX(0deg) rotateY(0deg)}50%{transform:perspective(120px) rotateX(-180.1deg) rotateY(0deg)}to{transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg)}}.sk-spinner-double-bounce.sk-spinner{width:40px;height:40px;position:relative;margin:0 auto}.sk-spinner-double-bounce .sk-double-bounce1,.sk-spinner-double-bounce .sk-double-bounce2{width:100%;height:100%;border-radius:50%;background-color:#4e988b;opacity:.6;position:absolute;top:0;left:0;animation:sk-doubleBounce 2s infinite ease-in-out}.sk-spinner-double-bounce .sk-double-bounce2{animation-delay:-1s}@keyframes sk-doubleBounce{0%,to{transform:scale(0)}50%{transform:scale(1)}}.sk-spinner-wave.sk-spinner{margin:0 auto;width:50px;height:30px;text-align:center;font-size:10px}.sk-spinner-wave div{background-color:#4e988b;height:100%;width:6px;display:inline-block;animation:sk-waveStretchDelay 1.2s infinite ease-in-out}.sk-spinner-wave .sk-rect2{animation-delay:-1.1s}.sk-spinner-wave .sk-rect3{animation-delay:-1s}.sk-spinner-wave .sk-rect4{animation-delay:-.9s}.sk-spinner-wave .sk-rect5{animation-delay:-.8s}@keyframes sk-waveStretchDelay{0%,40%,to{transform:scaleY(.4)}20%{transform:scaleY(1)}}.sk-spinner-wandering-cubes.sk-spinner{margin:0 auto;width:32px;height:32px;position:relative}.sk-spinner-wandering-cubes .sk-cube1,.sk-spinner-wandering-cubes .sk-cube2{background-color:#4e988b;width:10px;height:10px;position:absolute;top:0;left:0;animation:sk-wanderingCubeMove 1.8s infinite ease-in-out}.sk-spinner-wandering-cubes .sk-cube2{animation-delay:-.9s}@keyframes sk-wanderingCubeMove{25%{transform:translateX(42px) rotate(-90deg) scale(.5)}50%{transform:translateX(42px) translateY(42px) rotate(-179deg)}50.1%{transform:translateX(42px) translateY(42px) rotate(-180deg)}75%{transform:translateX(0) translateY(42px) rotate(-270deg) scale(.5)}to{transform:rotate(-1turn)}}.sk-spinner-pulse.sk-spinner{width:40px;height:40px;margin:0 auto;background-color:#4e988b;border-radius:100%;animation:sk-pulseScaleOut 1s infinite ease-in-out}@keyframes sk-pulseScaleOut{0%{transform:scale(0)}to{transform:scale(1);opacity:0}}.sk-spinner-chasing-dots.sk-spinner{margin:0 auto;width:40px;height:40px;position:relative;text-align:center;animation:sk-chasingDotsRotate 2s infinite linear}.sk-spinner-chasing-dots .sk-dot1,.sk-spinner-chasing-dots .sk-dot2{width:60%;height:60%;display:inline-block;position:absolute;top:0;background-color:#4e988b;border-radius:100%;animation:sk-chasingDotsBounce 2s infinite ease-in-out}.sk-spinner-chasing-dots .sk-dot2{top:auto;bottom:0;animation-delay:-1s}@keyframes sk-chasingDotsRotate{to{transform:rotate(1turn)}}@keyframes sk-chasingDotsBounce{0%,to{transform:scale(0)}50%{transform:scale(1)}}.sk-spinner-three-bounce.sk-spinner{margin:0 auto;width:70px;text-align:center}.sk-spinner-three-bounce div{width:18px;height:18px;background-color:#4e988b;border-radius:100%;display:inline-block;animation:sk-threeBounceDelay 1.4s infinite ease-in-out;animation-fill-mode:both}.sk-spinner-three-bounce .sk-bounce1{animation-delay:-.32s}.sk-spinner-three-bounce .sk-bounce2{animation-delay:-.16s}@keyframes sk-threeBounceDelay{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}.sk-spinner-circle.sk-spinner{margin:0 auto;width:22px;height:22px;position:relative}.sk-spinner-circle .sk-circle{width:100%;height:100%;position:absolute;left:0;top:0}.sk-spinner-circle .sk-circle:before{content:"";display:block;margin:0 auto;width:20%;height:20%;background-color:#4e988b;border-radius:100%;animation:sk-circleBounceDelay 1.2s infinite ease-in-out;animation-fill-mode:both}.sk-spinner-circle .sk-circle2{transform:rotate(30deg)}.sk-spinner-circle .sk-circle3{transform:rotate(60deg)}.sk-spinner-circle .sk-circle4{transform:rotate(90deg)}.sk-spinner-circle .sk-circle5{transform:rotate(120deg)}.sk-spinner-circle .sk-circle6{transform:rotate(150deg)}.sk-spinner-circle .sk-circle7{transform:rotate(180deg)}.sk-spinner-circle .sk-circle8{transform:rotate(210deg)}.sk-spinner-circle .sk-circle9{transform:rotate(240deg)}.sk-spinner-circle .sk-circle10{transform:rotate(270deg)}.sk-spinner-circle .sk-circle11{transform:rotate(300deg)}.sk-spinner-circle .sk-circle12{transform:rotate(330deg)}.sk-spinner-circle .sk-circle2:before{animation-delay:-1.1s}.sk-spinner-circle .sk-circle3:before{animation-delay:-1s}.sk-spinner-circle .sk-circle4:before{animation-delay:-.9s}.sk-spinner-circle .sk-circle5:before{animation-delay:-.8s}.sk-spinner-circle .sk-circle6:before{animation-delay:-.7s}.sk-spinner-circle .sk-circle7:before{animation-delay:-.6s}.sk-spinner-circle .sk-circle8:before{animation-delay:-.5s}.sk-spinner-circle .sk-circle9:before{animation-delay:-.4s}.sk-spinner-circle .sk-circle10:before{animation-delay:-.3s}.sk-spinner-circle .sk-circle11:before{animation-delay:-.2s}.sk-spinner-circle .sk-circle12:before{animation-delay:-.1s}@keyframes sk-circleBounceDelay{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}.sk-spinner-cube-grid.sk-spinner{width:30px;height:30px;margin:0 auto}.sk-spinner-cube-grid .sk-cube{width:33%;height:33%;background-color:#4e988b;float:left;animation:sk-cubeGridScaleDelay 1.3s infinite ease-in-out}.sk-spinner-cube-grid .sk-cube:first-child{animation-delay:.2s}.sk-spinner-cube-grid .sk-cube:nth-child(2){animation-delay:.3s}.sk-spinner-cube-grid .sk-cube:nth-child(3){animation-delay:.4s}.sk-spinner-cube-grid .sk-cube:nth-child(4){animation-delay:.1s}.sk-spinner-cube-grid .sk-cube:nth-child(5){animation-delay:.2s}.sk-spinner-cube-grid .sk-cube:nth-child(6){animation-delay:.3s}.sk-spinner-cube-grid .sk-cube:nth-child(7){animation-delay:0s}.sk-spinner-cube-grid .sk-cube:nth-child(8){animation-delay:.1s}.sk-spinner-cube-grid .sk-cube:nth-child(9){animation-delay:.2s}@keyframes sk-cubeGridScaleDelay{0%,70%,to{transform:scale3D(1,1,1)}35%{transform:scale3D(0,0,1)}}.sk-spinner-wordpress.sk-spinner{background-color:#4e988b;width:30px;height:30px;border-radius:30px;position:relative;margin:0 auto;animation:sk-innerCircle 1s linear infinite}.sk-spinner-wordpress .sk-inner-circle{display:block;background-color:#fff;width:8px;height:8px;position:absolute;border-radius:8px;top:5px;left:5px}@keyframes sk-innerCircle{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.sk-spinner-fading-circle.sk-spinner{margin:0 auto;width:22px;height:22px;position:relative}.sk-spinner-fading-circle .sk-circle{width:100%;height:100%;position:absolute;left:0;top:0}.sk-spinner-fading-circle .sk-circle:before{content:"";display:block;margin:0 auto;width:18%;height:18%;background-color:#4e988b;border-radius:100%;animation:sk-circleFadeDelay 1.2s infinite ease-in-out;animation-fill-mode:both}.sk-spinner-fading-circle .sk-circle2{transform:rotate(30deg)}.sk-spinner-fading-circle .sk-circle3{transform:rotate(60deg)}.sk-spinner-fading-circle .sk-circle4{transform:rotate(90deg)}.sk-spinner-fading-circle .sk-circle5{transform:rotate(120deg)}.sk-spinner-fading-circle .sk-circle6{transform:rotate(150deg)}.sk-spinner-fading-circle .sk-circle7{transform:rotate(180deg)}.sk-spinner-fading-circle .sk-circle8{transform:rotate(210deg)}.sk-spinner-fading-circle .sk-circle9{transform:rotate(240deg)}.sk-spinner-fading-circle .sk-circle10{transform:rotate(270deg)}.sk-spinner-fading-circle .sk-circle11{transform:rotate(300deg)}.sk-spinner-fading-circle .sk-circle12{transform:rotate(330deg)}.sk-spinner-fading-circle .sk-circle2:before{animation-delay:-1.1s}.sk-spinner-fading-circle .sk-circle3:before{animation-delay:-1s}.sk-spinner-fading-circle .sk-circle4:before{animation-delay:-.9s}.sk-spinner-fading-circle .sk-circle5:before{animation-delay:-.8s}.sk-spinner-fading-circle .sk-circle6:before{animation-delay:-.7s}.sk-spinner-fading-circle .sk-circle7:before{animation-delay:-.6s}.sk-spinner-fading-circle .sk-circle8:before{animation-delay:-.5s}.sk-spinner-fading-circle .sk-circle9:before{animation-delay:-.4s}.sk-spinner-fading-circle .sk-circle10:before{animation-delay:-.3s}.sk-spinner-fading-circle .sk-circle11:before{animation-delay:-.2s}.sk-spinner-fading-circle .sk-circle12:before{animation-delay:-.1s}@keyframes sk-circleFadeDelay{0%,39%,to{opacity:0}40%{opacity:1}}.grv-invite-login-error{white-space:pre-wrap}.grv-invite-login-error .grv-invite-login-error-u2f-codes,.grv-invite-login-error a{font-weight:400}.grv-invite{background-color:#2f4050;padding-top:5%;height:100%;width:100%;position:fixed;overflow:auto}.grv-invite .grv-icon-logo-tlpt{height:75px}.grv-invite .grv-invite-content{padding:10px;max-width:350px;z-index:100;margin:0 auto;margin-top:10px;border-radius:6px;background-color:#fff}.grv-invite .grv-invite-content.\---with-2fa-data{max-width:600px}.grv-invite .grv-invite-content .grv-invite-input-form{margin-bottom:15px}.grv-invite .grv-invite-content .grv-invite-input-form h3{margin-bottom:20px}.grv-invite .grv-invite-content .grv-invite-barcode{min-width:1px}.grv-invite .grv-invite-content .grv-flex-column{padding:15px}.grv-login{background-color:#2f4050;padding-top:5%;height:100%;width:100%;position:fixed;overflow:auto}.grv-login .grv-icon-logo-tlpt{height:75px}.grv-login .grv-content{padding:10px;max-width:350px;z-index:100;margin:10px auto 30px;border-radius:6px;background-color:#fff}.grv-login .grv-content .grv-flex-column{padding:15px}.grv-login .grv-content .grv-login-input-form{margin-bottom:15px}.grv-login .grv-content .grv-login-input-form h3{margin-bottom:20px}.grv-login .grv-content .grv-login-info{text-align:left;position:relative;margin:15px 0 0;padding:0 0 0 60px}.grv-login .grv-content .grv-login-info .fa-question{position:absolute;left:7px;font-size:40px}.grv-user-btn-sso{max-width:400px;text-align:center;margin:0 auto;position:relative}.grv-user-btn-sso:not(:first-child){margin-top:15px}.grv-user-btn-sso.\--unknown .\--sso-icon{display:none}.grv-user-btn-sso .\--sso-icon{position:absolute;left:0;top:0;bottom:0;width:32px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,.2)}.grv-icon-logo-tlpt{fill:#fff;height:90px}.grv-icon-close{width:100%;height:100%}.grv-icon-close use{pointer-events:none}.grv-google-auth{text-align:initial;position:relative;margin:25px 0 0;padding:0 0 0 60px}.grv-google-auth .grv-icon-google-auth{position:absolute;left:0;height:40px;width:40px;background-size:contain;background-repeat:no-repeat;background-image:url(/web/app/assets/img/img-54ca7c.png)}.grv-icon-user{margin:0 auto;height:30px;width:30px;display:block;background:#1ab394;color:#fff;border-radius:50%;vertical-align:middle;text-align:center;text-transform:uppercase}.grv-icon-user span{line-height:30px;display:block;font-size:14px}.grv-icon-user.\--dark{background:#104137}.grv-table .label{margin:2px;float:left}.grv-table-indicator-sort{margin-left:5px}.grv-table-indicator-sort.fa-sort{color:#a1a3a5}.grv-table-indicator-empty{font-size:17px}.grv-table-header .grv-table-cell a{color:inherit}.grv-alert{padding:10px;border:1px solid transparent;max-height:100px;text-overflow:ellipsis;overflow:auto;text-align:left}.grv-alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1;text-overflow:ellipsis}.grv-alert-info,.grv-alert-success{background-color:#f0f0f0;text-overflow:ellipsis}.grv-alert-success{color:#0d5849}.grv-nodes .grv-header{align-items:center}.grv-nodes .grv-nodes-custom-login{padding:2px}.grv-nodes .grv-nodes-custom-login input{border-radius:0}.grv-nodes .grv-nodes-table tbody>tr>td{vertical-align:middle}.grv-nodes .grv-nodes-table .grv-nodes-table-label{margin-right:5px;max-width:100%;font-size:12px;font-weight:100;padding:3px 6px;text-shadow:none;color:#4d4d4d;background-color:#d1dade;display:inline;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:3px;max-width:200px;overflow:hidden;text-overflow:ellipsis}.grv-nodes .grv-nodes-table .grv-nodes-table-label .fa-long-arrow-right{font-size:10px}.grv-sessions h1{text-align:center}.grv-sessions .grv-calendar-nav{font-size:14px;text-align:center;min-width:200px}.grv-sessions h1{margin-bottom:25px}.grv-sessions .grv-divider{margin-top:25px;margin-bottom:25px}.grv-sessions .grv-header{margin-bottom:20px}.grv-sessions .grv-header h2{margin:0}.grv-sessions .grv-header .grv-flex{align-items:center}.grv-sessions .grv-footer{padding:15px 0 45px;text-align:center}.grv-sessions-user{margin-left:5px}.grv-sessions-stored{position:relative}.grv-sessions-stored .grv-sessions-stored-details{max-width:300px;width:300px;text-align:center}.grv-sessions-stored-col-ip{min-width:90px}.grv-sessions-col-sid{min-width:100px}.grv-nav{background-color:#2f4050;max-width:70px;overflow:hidden}.grv-nav .nav>li.active{border:none;background-color:#293846}.grv-nav .nav li a{color:#a7b1c2;font-weight:600;padding:14px 20px 14px 25px}.grv-nav .nav li a:focus,.grv-nav .nav li a:hover{background-color:#293846;color:#fff}.grv-nav .nav li a i{margin-right:6px}.grv-nav .nav li:first-child{margin:20px 0 15px}.grv-nav .nav .fa{font-size:20px}.grv-terminalhost-indicator-error{justify-content:center;display:flex;align-items:center;color:#f3f3f3;height:100%;margin-left:-40px;margin-top:-25px}.grv-terminalhost{padding:40px 25px 10px 90px;position:fixed;height:100%;width:100%;display:block;background-color:#252323;z-index:1}.grv-terminal-participans{margin-left:-70px;width:50px;position:absolute}.grv-terminal-participans .grv-icon-close{fill:#ed5565}.grv-terminal-participans .grv-icon-close:hover{fill:#ec4c5d;cursor:pointer}.grv-terminal-participans .grv-divider{background-color:#3b3838;border-color:#3b3838}.grv-terminal-participans .nav{text-align:center}.grv-terminal-participans .nav>li{margin:15px 0}.grv-terminalhost-server-info{height:30px;margin-top:-35px;text-align:center;overflow:hidden;color:#919191}.grv-terminalhost-server-info span{margin-left:5px}.grv-terminalhost-server-info .btn{padding:0 10px;margin-bottom:5px}.grv-msg-page{margin:25px auto;max-width:600px;text-align:center}.grv-msg-page h1{margin:0}.grv-msg-page .grv-icon-logo-tlpt{fill:#293846}.grv-msg-page .grv-header{font-size:60px}.grv-msg-page .contact-section{margin-top:20px}.grv-slider{height:30px;padding:3px}.grv-slider .bar{height:5px}.grv-slider .handle{width:14px;height:14px;left:-10px;top:-4px;z-index:1;border-radius:14px;background:#fff;box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ebebeb,0 3px 6px -3px #bbb}.grv-slider .bar-0{background:none repeat scroll 0 0 #bbb;box-shadow:none}.grv-slider .bar-1{background-color:#333}.grv-session-player{padding:15px 25px 50px 90px}.grv-session-player .grv-terminal{overflow:hidden;position:relative;height:100%}.grv-session-player .ps-container:hover>.ps-scrollbar-x-rail:hover,.grv-session-player .ps-container:hover>.ps-scrollbar-y-rail:hover{background-color:#676a6c}.grv-session-player .ps-container>.ps-scrollbar-y-rail{width:0}.grv-session-player .ps-container>.ps-scrollbar-x-rail{height:0}.grv-session-player .grv-session-player-content{height:100%}.grv-session-player .grv-session-player-controls{margin-top:10px;display:flex;color:#ddd}.grv-session-player .grv-session-player-controls .grv-flex-column{align-self:center}.grv-session-player .grv-session-player-controls .btn{width:15px;background-color:transparent;padding:0 12px 0 0}.grv-session-player .grv-session-player-controls .btn:focus,.grv-session-player .grv-session-player-controls .btn:hover{color:#ddd}.grv-session-player .grv-session-player-controls .grv-session-player-controls-time{min-width:40px;margin:2px 10px 0 7px;display:block;font-family:Liberation Mono,Andale Mono,Consolas,monospace}.grv-session-player .grv-session-player-controls .grv-slider{display:block;height:10px;padding:0;margin-top:4px}.grv-terminal{height:100%;width:100%}.grv-terminal .terminal{font-family:Liberation Mono,Andale Mono,Consolas,monospace;border:none;font-size:inherit;line-height:normal}.grv-terminal .terminal .xterm-viewport{overflow-y:hidden;background-color:#252323}.grv-terminal .terminal *{font-weight:400!important}.\--isLinux .grv-terminal .terminal{font-family:Liberation Mono,Droid Sans Mono,monospace,monospace,Droid Sans Fallback}.\--isWin .grv-terminal .terminal{font-family:Consolas,Courier New,monospace}.\--isMac .grv-terminal .terminal{font-family:Menlo,Monaco,Courier New,monospace}.grv-dialog-select-node .modal-header{border:none}.grv-dialog-select-node .modal-body{padding-bottom:0}.grv-dialog-select-node .modal-footer{border:none}.toast{width:300px!important}.grv-datepicker.input-daterange{max-width:250px}.datepicker table tr td.disabled,.datepicker table tr td.disabled:hover{color:#ccc;cursor:default}.datepicker table tr td.active.selected{background-color:#3276b1;border-color:#285e8e}.input-daterange .input-group-addon{width:auto;min-width:16px;padding:4px 5px;font-weight:400;line-height:1.428571429;text-align:center;text-shadow:0 1px 0 #fff;vertical-align:middle;background-color:#eee;border-width:1px 0;margin-left:-5px;margin-right:-5px}/*! * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(/web/app/assets/fonts/fontawesome-webfont.eot);src:url(/web/app/assets/fonts/fontawesome-webfont.eot?#iefix&v=4.5.0) format("embedded-opentype"),url(/web/app/assets/fonts/fontawesome-webfont.woff2) format("woff2"),url(/web/app/assets/fonts/fontawesome-webfont.woff) format("woff"),url(/web/app/assets/fonts/fontawesome-webfont.ttf) format("truetype"),url(/web/app/assets/fonts/fontawesome-webfont.svg#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);transform:scaleX(-1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\F000"}.fa-music:before{content:"\F001"}.fa-search:before{content:"\F002"}.fa-envelope-o:before{content:"\F003"}.fa-heart:before{content:"\F004"}.fa-star:before{content:"\F005"}.fa-star-o:before{content:"\F006"}.fa-user:before{content:"\F007"}.fa-film:before{content:"\F008"}.fa-th-large:before{content:"\F009"}.fa-th:before{content:"\F00A"}.fa-th-list:before{content:"\F00B"}.fa-check:before{content:"\F00C"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\F00D"}.fa-search-plus:before{content:"\F00E"}.fa-search-minus:before{content:"\F010"}.fa-power-off:before{content:"\F011"}.fa-signal:before{content:"\F012"}.fa-cog:before,.fa-gear:before{content:"\F013"}.fa-trash-o:before{content:"\F014"}.fa-home:before{content:"\F015"}.fa-file-o:before{content:"\F016"}.fa-clock-o:before{content:"\F017"}.fa-road:before{content:"\F018"}.fa-download:before{content:"\F019"}.fa-arrow-circle-o-down:before{content:"\F01A"}.fa-arrow-circle-o-up:before{content:"\F01B"}.fa-inbox:before{content:"\F01C"}.fa-play-circle-o:before{content:"\F01D"}.fa-repeat:before,.fa-rotate-right:before{content:"\F01E"}.fa-refresh:before{content:"\F021"}.fa-list-alt:before{content:"\F022"}.fa-lock:before{content:"\F023"}.fa-flag:before{content:"\F024"}.fa-headphones:before{content:"\F025"}.fa-volume-off:before{content:"\F026"}.fa-volume-down:before{content:"\F027"}.fa-volume-up:before{content:"\F028"}.fa-qrcode:before{content:"\F029"}.fa-barcode:before{content:"\F02A"}.fa-tag:before{content:"\F02B"}.fa-tags:before{content:"\F02C"}.fa-book:before{content:"\F02D"}.fa-bookmark:before{content:"\F02E"}.fa-print:before{content:"\F02F"}.fa-camera:before{content:"\F030"}.fa-font:before{content:"\F031"}.fa-bold:before{content:"\F032"}.fa-italic:before{content:"\F033"}.fa-text-height:before{content:"\F034"}.fa-text-width:before{content:"\F035"}.fa-align-left:before{content:"\F036"}.fa-align-center:before{content:"\F037"}.fa-align-right:before{content:"\F038"}.fa-align-justify:before{content:"\F039"}.fa-list:before{content:"\F03A"}.fa-dedent:before,.fa-outdent:before{content:"\F03B"}.fa-indent:before{content:"\F03C"}.fa-video-camera:before{content:"\F03D"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\F03E"}.fa-pencil:before{content:"\F040"}.fa-map-marker:before{content:"\F041"}.fa-adjust:before{content:"\F042"}.fa-tint:before{content:"\F043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\F044"}.fa-share-square-o:before{content:"\F045"}.fa-check-square-o:before{content:"\F046"}.fa-arrows:before{content:"\F047"}.fa-step-backward:before{content:"\F048"}.fa-fast-backward:before{content:"\F049"}.fa-backward:before{content:"\F04A"}.fa-play:before{content:"\F04B"}.fa-pause:before{content:"\F04C"}.fa-stop:before{content:"\F04D"}.fa-forward:before{content:"\F04E"}.fa-fast-forward:before{content:"\F050"}.fa-step-forward:before{content:"\F051"}.fa-eject:before{content:"\F052"}.fa-chevron-left:before{content:"\F053"}.fa-chevron-right:before{content:"\F054"}.fa-plus-circle:before{content:"\F055"}.fa-minus-circle:before{content:"\F056"}.fa-times-circle:before{content:"\F057"}.fa-check-circle:before{content:"\F058"}.fa-question-circle:before{content:"\F059"}.fa-info-circle:before{content:"\F05A"}.fa-crosshairs:before{content:"\F05B"}.fa-times-circle-o:before{content:"\F05C"}.fa-check-circle-o:before{content:"\F05D"}.fa-ban:before{content:"\F05E"}.fa-arrow-left:before{content:"\F060"}.fa-arrow-right:before{content:"\F061"}.fa-arrow-up:before{content:"\F062"}.fa-arrow-down:before{content:"\F063"}.fa-mail-forward:before,.fa-share:before{content:"\F064"}.fa-expand:before{content:"\F065"}.fa-compress:before{content:"\F066"}.fa-plus:before{content:"\F067"}.fa-minus:before{content:"\F068"}.fa-asterisk:before{content:"\F069"}.fa-exclamation-circle:before{content:"\F06A"}.fa-gift:before{content:"\F06B"}.fa-leaf:before{content:"\F06C"}.fa-fire:before{content:"\F06D"}.fa-eye:before{content:"\F06E"}.fa-eye-slash:before{content:"\F070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\F071"}.fa-plane:before{content:"\F072"}.fa-calendar:before{content:"\F073"}.fa-random:before{content:"\F074"}.fa-comment:before{content:"\F075"}.fa-magnet:before{content:"\F076"}.fa-chevron-up:before{content:"\F077"}.fa-chevron-down:before{content:"\F078"}.fa-retweet:before{content:"\F079"}.fa-shopping-cart:before{content:"\F07A"}.fa-folder:before{content:"\F07B"}.fa-folder-open:before{content:"\F07C"}.fa-arrows-v:before{content:"\F07D"}.fa-arrows-h:before{content:"\F07E"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\F080"}.fa-twitter-square:before{content:"\F081"}.fa-facebook-square:before{content:"\F082"}.fa-camera-retro:before{content:"\F083"}.fa-key:before{content:"\F084"}.fa-cogs:before,.fa-gears:before{content:"\F085"}.fa-comments:before{content:"\F086"}.fa-thumbs-o-up:before{content:"\F087"}.fa-thumbs-o-down:before{content:"\F088"}.fa-star-half:before{content:"\F089"}.fa-heart-o:before{content:"\F08A"}.fa-sign-out:before{content:"\F08B"}.fa-linkedin-square:before{content:"\F08C"}.fa-thumb-tack:before{content:"\F08D"}.fa-external-link:before{content:"\F08E"}.fa-sign-in:before{content:"\F090"}.fa-trophy:before{content:"\F091"}.fa-github-square:before{content:"\F092"}.fa-upload:before{content:"\F093"}.fa-lemon-o:before{content:"\F094"}.fa-phone:before{content:"\F095"}.fa-square-o:before{content:"\F096"}.fa-bookmark-o:before{content:"\F097"}.fa-phone-square:before{content:"\F098"}.fa-twitter:before{content:"\F099"}.fa-facebook-f:before,.fa-facebook:before{content:"\F09A"}.fa-github:before,.grv-user-btn-sso.btn-github .\--sso-icon .fa:before{content:"\F09B"}.fa-unlock:before{content:"\F09C"}.fa-credit-card:before{content:"\F09D"}.fa-feed:before,.fa-rss:before{content:"\F09E"}.fa-hdd-o:before{content:"\F0A0"}.fa-bullhorn:before{content:"\F0A1"}.fa-bell:before{content:"\F0F3"}.fa-certificate:before{content:"\F0A3"}.fa-hand-o-right:before{content:"\F0A4"}.fa-hand-o-left:before{content:"\F0A5"}.fa-hand-o-up:before{content:"\F0A6"}.fa-hand-o-down:before{content:"\F0A7"}.fa-arrow-circle-left:before{content:"\F0A8"}.fa-arrow-circle-right:before{content:"\F0A9"}.fa-arrow-circle-up:before{content:"\F0AA"}.fa-arrow-circle-down:before{content:"\F0AB"}.fa-globe:before{content:"\F0AC"}.fa-wrench:before{content:"\F0AD"}.fa-tasks:before{content:"\F0AE"}.fa-filter:before{content:"\F0B0"}.fa-briefcase:before{content:"\F0B1"}.fa-arrows-alt:before{content:"\F0B2"}.fa-group:before,.fa-users:before{content:"\F0C0"}.fa-chain:before,.fa-link:before{content:"\F0C1"}.fa-cloud:before{content:"\F0C2"}.fa-flask:before{content:"\F0C3"}.fa-cut:before,.fa-scissors:before{content:"\F0C4"}.fa-copy:before,.fa-files-o:before{content:"\F0C5"}.fa-paperclip:before{content:"\F0C6"}.fa-floppy-o:before,.fa-save:before{content:"\F0C7"}.fa-square:before{content:"\F0C8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\F0C9"}.fa-list-ul:before{content:"\F0CA"}.fa-list-ol:before{content:"\F0CB"}.fa-strikethrough:before{content:"\F0CC"}.fa-underline:before{content:"\F0CD"}.fa-table:before{content:"\F0CE"}.fa-magic:before{content:"\F0D0"}.fa-truck:before{content:"\F0D1"}.fa-pinterest:before{content:"\F0D2"}.fa-pinterest-square:before{content:"\F0D3"}.fa-google-plus-square:before{content:"\F0D4"}.fa-google-plus:before{content:"\F0D5"}.fa-money:before{content:"\F0D6"}.fa-caret-down:before{content:"\F0D7"}.fa-caret-up:before{content:"\F0D8"}.fa-caret-left:before{content:"\F0D9"}.fa-caret-right:before{content:"\F0DA"}.fa-columns:before{content:"\F0DB"}.fa-sort:before,.fa-unsorted:before{content:"\F0DC"}.fa-sort-desc:before,.fa-sort-down:before{content:"\F0DD"}.fa-sort-asc:before,.fa-sort-up:before{content:"\F0DE"}.fa-envelope:before{content:"\F0E0"}.fa-linkedin:before{content:"\F0E1"}.fa-rotate-left:before,.fa-undo:before{content:"\F0E2"}.fa-gavel:before,.fa-legal:before{content:"\F0E3"}.fa-dashboard:before,.fa-tachometer:before{content:"\F0E4"}.fa-comment-o:before{content:"\F0E5"}.fa-comments-o:before{content:"\F0E6"}.fa-bolt:before,.fa-flash:before{content:"\F0E7"}.fa-sitemap:before{content:"\F0E8"}.fa-umbrella:before{content:"\F0E9"}.fa-clipboard:before,.fa-paste:before{content:"\F0EA"}.fa-lightbulb-o:before{content:"\F0EB"}.fa-exchange:before{content:"\F0EC"}.fa-cloud-download:before{content:"\F0ED"}.fa-cloud-upload:before{content:"\F0EE"}.fa-user-md:before{content:"\F0F0"}.fa-stethoscope:before{content:"\F0F1"}.fa-suitcase:before{content:"\F0F2"}.fa-bell-o:before{content:"\F0A2"}.fa-coffee:before{content:"\F0F4"}.fa-cutlery:before{content:"\F0F5"}.fa-file-text-o:before{content:"\F0F6"}.fa-building-o:before{content:"\F0F7"}.fa-hospital-o:before{content:"\F0F8"}.fa-ambulance:before{content:"\F0F9"}.fa-medkit:before{content:"\F0FA"}.fa-fighter-jet:before{content:"\F0FB"}.fa-beer:before{content:"\F0FC"}.fa-h-square:before{content:"\F0FD"}.fa-plus-square:before{content:"\F0FE"}.fa-angle-double-left:before{content:"\F100"}.fa-angle-double-right:before{content:"\F101"}.fa-angle-double-up:before{content:"\F102"}.fa-angle-double-down:before{content:"\F103"}.fa-angle-left:before{content:"\F104"}.fa-angle-right:before{content:"\F105"}.fa-angle-up:before{content:"\F106"}.fa-angle-down:before{content:"\F107"}.fa-desktop:before{content:"\F108"}.fa-laptop:before{content:"\F109"}.fa-tablet:before{content:"\F10A"}.fa-mobile-phone:before,.fa-mobile:before{content:"\F10B"}.fa-circle-o:before{content:"\F10C"}.fa-quote-left:before{content:"\F10D"}.fa-quote-right:before{content:"\F10E"}.fa-spinner:before{content:"\F110"}.fa-circle:before{content:"\F111"}.fa-mail-reply:before,.fa-reply:before{content:"\F112"}.fa-github-alt:before{content:"\F113"}.fa-folder-o:before{content:"\F114"}.fa-folder-open-o:before{content:"\F115"}.fa-smile-o:before{content:"\F118"}.fa-frown-o:before{content:"\F119"}.fa-meh-o:before{content:"\F11A"}.fa-gamepad:before{content:"\F11B"}.fa-keyboard-o:before{content:"\F11C"}.fa-flag-o:before{content:"\F11D"}.fa-flag-checkered:before{content:"\F11E"}.fa-terminal:before{content:"\F120"}.fa-code:before{content:"\F121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\F122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\F123"}.fa-location-arrow:before{content:"\F124"}.fa-crop:before{content:"\F125"}.fa-code-fork:before{content:"\F126"}.fa-chain-broken:before,.fa-unlink:before{content:"\F127"}.fa-question:before{content:"\F128"}.fa-info:before{content:"\F129"}.fa-exclamation:before{content:"\F12A"}.fa-superscript:before{content:"\F12B"}.fa-subscript:before{content:"\F12C"}.fa-eraser:before{content:"\F12D"}.fa-puzzle-piece:before{content:"\F12E"}.fa-microphone:before{content:"\F130"}.fa-microphone-slash:before{content:"\F131"}.fa-shield:before{content:"\F132"}.fa-calendar-o:before{content:"\F133"}.fa-fire-extinguisher:before{content:"\F134"}.fa-rocket:before{content:"\F135"}.fa-maxcdn:before{content:"\F136"}.fa-chevron-circle-left:before{content:"\F137"}.fa-chevron-circle-right:before{content:"\F138"}.fa-chevron-circle-up:before{content:"\F139"}.fa-chevron-circle-down:before{content:"\F13A"}.fa-html5:before{content:"\F13B"}.fa-css3:before{content:"\F13C"}.fa-anchor:before{content:"\F13D"}.fa-unlock-alt:before{content:"\F13E"}.fa-bullseye:before{content:"\F140"}.fa-ellipsis-h:before{content:"\F141"}.fa-ellipsis-v:before{content:"\F142"}.fa-rss-square:before{content:"\F143"}.fa-play-circle:before{content:"\F144"}.fa-ticket:before{content:"\F145"}.fa-minus-square:before{content:"\F146"}.fa-minus-square-o:before{content:"\F147"}.fa-level-up:before{content:"\F148"}.fa-level-down:before{content:"\F149"}.fa-check-square:before{content:"\F14A"}.fa-pencil-square:before{content:"\F14B"}.fa-external-link-square:before{content:"\F14C"}.fa-share-square:before{content:"\F14D"}.fa-compass:before{content:"\F14E"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\F150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\F151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\F152"}.fa-eur:before,.fa-euro:before{content:"\F153"}.fa-gbp:before{content:"\F154"}.fa-dollar:before,.fa-usd:before{content:"\F155"}.fa-inr:before,.fa-rupee:before{content:"\F156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\F157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\F158"}.fa-krw:before,.fa-won:before{content:"\F159"}.fa-bitcoin:before,.fa-btc:before{content:"\F15A"}.fa-file:before{content:"\F15B"}.fa-file-text:before{content:"\F15C"}.fa-sort-alpha-asc:before{content:"\F15D"}.fa-sort-alpha-desc:before{content:"\F15E"}.fa-sort-amount-asc:before{content:"\F160"}.fa-sort-amount-desc:before{content:"\F161"}.fa-sort-numeric-asc:before{content:"\F162"}.fa-sort-numeric-desc:before{content:"\F163"}.fa-thumbs-up:before{content:"\F164"}.fa-thumbs-down:before{content:"\F165"}.fa-youtube-square:before{content:"\F166"}.fa-youtube:before{content:"\F167"}.fa-xing:before{content:"\F168"}.fa-xing-square:before{content:"\F169"}.fa-youtube-play:before{content:"\F16A"}.fa-dropbox:before{content:"\F16B"}.fa-stack-overflow:before{content:"\F16C"}.fa-instagram:before{content:"\F16D"}.fa-flickr:before{content:"\F16E"}.fa-adn:before{content:"\F170"}.fa-bitbucket:before,.grv-user-btn-sso.btn-bitbucket .\--sso-icon .fa:before{content:"\F171"}.fa-bitbucket-square:before{content:"\F172"}.fa-tumblr:before{content:"\F173"}.fa-tumblr-square:before{content:"\F174"}.fa-long-arrow-down:before{content:"\F175"}.fa-long-arrow-up:before{content:"\F176"}.fa-long-arrow-left:before{content:"\F177"}.fa-long-arrow-right:before{content:"\F178"}.fa-apple:before{content:"\F179"}.fa-windows:before,.grv-user-btn-sso.btn-microsoft .\--sso-icon .fa:before{content:"\F17A"}.fa-android:before{content:"\F17B"}.fa-linux:before{content:"\F17C"}.fa-dribbble:before{content:"\F17D"}.fa-skype:before{content:"\F17E"}.fa-foursquare:before{content:"\F180"}.fa-trello:before{content:"\F181"}.fa-female:before{content:"\F182"}.fa-male:before{content:"\F183"}.fa-gittip:before,.fa-gratipay:before{content:"\F184"}.fa-sun-o:before{content:"\F185"}.fa-moon-o:before{content:"\F186"}.fa-archive:before{content:"\F187"}.fa-bug:before{content:"\F188"}.fa-vk:before{content:"\F189"}.fa-weibo:before{content:"\F18A"}.fa-renren:before{content:"\F18B"}.fa-pagelines:before{content:"\F18C"}.fa-stack-exchange:before{content:"\F18D"}.fa-arrow-circle-o-right:before{content:"\F18E"}.fa-arrow-circle-o-left:before{content:"\F190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\F191"}.fa-dot-circle-o:before{content:"\F192"}.fa-wheelchair:before{content:"\F193"}.fa-vimeo-square:before{content:"\F194"}.fa-try:before,.fa-turkish-lira:before{content:"\F195"}.fa-plus-square-o:before{content:"\F196"}.fa-space-shuttle:before{content:"\F197"}.fa-slack:before{content:"\F198"}.fa-envelope-square:before{content:"\F199"}.fa-wordpress:before{content:"\F19A"}.fa-openid:before,.grv-user-btn-sso.\--unknown .\--sso-icon .fa:before,.grv-user-btn-sso.btn-openid .\--sso-icon .fa:before{content:"\F19B"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\F19C"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\F19D"}.fa-yahoo:before{content:"\F19E"}.fa-google:before,.grv-user-btn-sso.btn-google .\--sso-icon .fa:before{content:"\F1A0"}.fa-reddit:before{content:"\F1A1"}.fa-reddit-square:before{content:"\F1A2"}.fa-stumbleupon-circle:before{content:"\F1A3"}.fa-stumbleupon:before{content:"\F1A4"}.fa-delicious:before{content:"\F1A5"}.fa-digg:before{content:"\F1A6"}.fa-pied-piper:before{content:"\F1A7"}.fa-pied-piper-alt:before{content:"\F1A8"}.fa-drupal:before{content:"\F1A9"}.fa-joomla:before{content:"\F1AA"}.fa-language:before{content:"\F1AB"}.fa-fax:before{content:"\F1AC"}.fa-building:before{content:"\F1AD"}.fa-child:before{content:"\F1AE"}.fa-paw:before{content:"\F1B0"}.fa-spoon:before{content:"\F1B1"}.fa-cube:before{content:"\F1B2"}.fa-cubes:before{content:"\F1B3"}.fa-behance:before{content:"\F1B4"}.fa-behance-square:before{content:"\F1B5"}.fa-steam:before{content:"\F1B6"}.fa-steam-square:before{content:"\F1B7"}.fa-recycle:before{content:"\F1B8"}.fa-automobile:before,.fa-car:before{content:"\F1B9"}.fa-cab:before,.fa-taxi:before{content:"\F1BA"}.fa-tree:before{content:"\F1BB"}.fa-spotify:before{content:"\F1BC"}.fa-deviantart:before{content:"\F1BD"}.fa-soundcloud:before{content:"\F1BE"}.fa-database:before{content:"\F1C0"}.fa-file-pdf-o:before{content:"\F1C1"}.fa-file-word-o:before{content:"\F1C2"}.fa-file-excel-o:before{content:"\F1C3"}.fa-file-powerpoint-o:before{content:"\F1C4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\F1C5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\F1C6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\F1C7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\F1C8"}.fa-file-code-o:before{content:"\F1C9"}.fa-vine:before{content:"\F1CA"}.fa-codepen:before{content:"\F1CB"}.fa-jsfiddle:before{content:"\F1CC"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\F1CD"}.fa-circle-o-notch:before{content:"\F1CE"}.fa-ra:before,.fa-rebel:before{content:"\F1D0"}.fa-empire:before,.fa-ge:before{content:"\F1D1"}.fa-git-square:before{content:"\F1D2"}.fa-git:before{content:"\F1D3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\F1D4"}.fa-tencent-weibo:before{content:"\F1D5"}.fa-qq:before{content:"\F1D6"}.fa-wechat:before,.fa-weixin:before{content:"\F1D7"}.fa-paper-plane:before,.fa-send:before{content:"\F1D8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\F1D9"}.fa-history:before{content:"\F1DA"}.fa-circle-thin:before{content:"\F1DB"}.fa-header:before{content:"\F1DC"}.fa-paragraph:before{content:"\F1DD"}.fa-sliders:before{content:"\F1DE"}.fa-share-alt:before{content:"\F1E0"}.fa-share-alt-square:before{content:"\F1E1"}.fa-bomb:before{content:"\F1E2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\F1E3"}.fa-tty:before{content:"\F1E4"}.fa-binoculars:before{content:"\F1E5"}.fa-plug:before{content:"\F1E6"}.fa-slideshare:before{content:"\F1E7"}.fa-twitch:before{content:"\F1E8"}.fa-yelp:before{content:"\F1E9"}.fa-newspaper-o:before{content:"\F1EA"}.fa-wifi:before{content:"\F1EB"}.fa-calculator:before{content:"\F1EC"}.fa-paypal:before{content:"\F1ED"}.fa-google-wallet:before{content:"\F1EE"}.fa-cc-visa:before{content:"\F1F0"}.fa-cc-mastercard:before{content:"\F1F1"}.fa-cc-discover:before{content:"\F1F2"}.fa-cc-amex:before{content:"\F1F3"}.fa-cc-paypal:before{content:"\F1F4"}.fa-cc-stripe:before{content:"\F1F5"}.fa-bell-slash:before{content:"\F1F6"}.fa-bell-slash-o:before{content:"\F1F7"}.fa-trash:before{content:"\F1F8"}.fa-copyright:before{content:"\F1F9"}.fa-at:before{content:"\F1FA"}.fa-eyedropper:before{content:"\F1FB"}.fa-paint-brush:before{content:"\F1FC"}.fa-birthday-cake:before{content:"\F1FD"}.fa-area-chart:before{content:"\F1FE"}.fa-pie-chart:before{content:"\F200"}.fa-line-chart:before{content:"\F201"}.fa-lastfm:before{content:"\F202"}.fa-lastfm-square:before{content:"\F203"}.fa-toggle-off:before{content:"\F204"}.fa-toggle-on:before{content:"\F205"}.fa-bicycle:before{content:"\F206"}.fa-bus:before{content:"\F207"}.fa-ioxhost:before{content:"\F208"}.fa-angellist:before{content:"\F209"}.fa-cc:before{content:"\F20A"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\F20B"}.fa-meanpath:before{content:"\F20C"}.fa-buysellads:before{content:"\F20D"}.fa-connectdevelop:before{content:"\F20E"}.fa-dashcube:before{content:"\F210"}.fa-forumbee:before{content:"\F211"}.fa-leanpub:before{content:"\F212"}.fa-sellsy:before{content:"\F213"}.fa-shirtsinbulk:before{content:"\F214"}.fa-simplybuilt:before{content:"\F215"}.fa-skyatlas:before{content:"\F216"}.fa-cart-plus:before{content:"\F217"}.fa-cart-arrow-down:before{content:"\F218"}.fa-diamond:before{content:"\F219"}.fa-ship:before{content:"\F21A"}.fa-user-secret:before{content:"\F21B"}.fa-motorcycle:before{content:"\F21C"}.fa-street-view:before{content:"\F21D"}.fa-heartbeat:before{content:"\F21E"}.fa-venus:before{content:"\F221"}.fa-mars:before{content:"\F222"}.fa-mercury:before{content:"\F223"}.fa-intersex:before,.fa-transgender:before{content:"\F224"}.fa-transgender-alt:before{content:"\F225"}.fa-venus-double:before{content:"\F226"}.fa-mars-double:before{content:"\F227"}.fa-venus-mars:before{content:"\F228"}.fa-mars-stroke:before{content:"\F229"}.fa-mars-stroke-v:before{content:"\F22A"}.fa-mars-stroke-h:before{content:"\F22B"}.fa-neuter:before{content:"\F22C"}.fa-genderless:before{content:"\F22D"}.fa-facebook-official:before{content:"\F230"}.fa-pinterest-p:before{content:"\F231"}.fa-whatsapp:before{content:"\F232"}.fa-server:before{content:"\F233"}.fa-user-plus:before{content:"\F234"}.fa-user-times:before{content:"\F235"}.fa-bed:before,.fa-hotel:before{content:"\F236"}.fa-viacoin:before{content:"\F237"}.fa-train:before{content:"\F238"}.fa-subway:before{content:"\F239"}.fa-medium:before{content:"\F23A"}.fa-y-combinator:before,.fa-yc:before{content:"\F23B"}.fa-optin-monster:before{content:"\F23C"}.fa-opencart:before{content:"\F23D"}.fa-expeditedssl:before{content:"\F23E"}.fa-battery-4:before,.fa-battery-full:before{content:"\F240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\F241"}.fa-battery-2:before,.fa-battery-half:before{content:"\F242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\F243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\F244"}.fa-mouse-pointer:before{content:"\F245"}.fa-i-cursor:before{content:"\F246"}.fa-object-group:before{content:"\F247"}.fa-object-ungroup:before{content:"\F248"}.fa-sticky-note:before{content:"\F249"}.fa-sticky-note-o:before{content:"\F24A"}.fa-cc-jcb:before{content:"\F24B"}.fa-cc-diners-club:before{content:"\F24C"}.fa-clone:before{content:"\F24D"}.fa-balance-scale:before{content:"\F24E"}.fa-hourglass-o:before{content:"\F250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\F251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\F252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\F253"}.fa-hourglass:before{content:"\F254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\F255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\F256"}.fa-hand-scissors-o:before{content:"\F257"}.fa-hand-lizard-o:before{content:"\F258"}.fa-hand-spock-o:before{content:"\F259"}.fa-hand-pointer-o:before{content:"\F25A"}.fa-hand-peace-o:before{content:"\F25B"}.fa-trademark:before{content:"\F25C"}.fa-registered:before{content:"\F25D"}.fa-creative-commons:before{content:"\F25E"}.fa-gg:before{content:"\F260"}.fa-gg-circle:before{content:"\F261"}.fa-tripadvisor:before{content:"\F262"}.fa-odnoklassniki:before{content:"\F263"}.fa-odnoklassniki-square:before{content:"\F264"}.fa-get-pocket:before{content:"\F265"}.fa-wikipedia-w:before{content:"\F266"}.fa-safari:before{content:"\F267"}.fa-chrome:before{content:"\F268"}.fa-firefox:before{content:"\F269"}.fa-opera:before{content:"\F26A"}.fa-internet-explorer:before{content:"\F26B"}.fa-television:before,.fa-tv:before{content:"\F26C"}.fa-contao:before{content:"\F26D"}.fa-500px:before{content:"\F26E"}.fa-amazon:before{content:"\F270"}.fa-calendar-plus-o:before{content:"\F271"}.fa-calendar-minus-o:before{content:"\F272"}.fa-calendar-times-o:before{content:"\F273"}.fa-calendar-check-o:before{content:"\F274"}.fa-industry:before{content:"\F275"}.fa-map-pin:before{content:"\F276"}.fa-map-signs:before{content:"\F277"}.fa-map-o:before{content:"\F278"}.fa-map:before{content:"\F279"}.fa-commenting:before{content:"\F27A"}.fa-commenting-o:before{content:"\F27B"}.fa-houzz:before{content:"\F27C"}.fa-vimeo:before{content:"\F27D"}.fa-black-tie:before{content:"\F27E"}.fa-fonticons:before{content:"\F280"}.fa-reddit-alien:before{content:"\F281"}.fa-edge:before{content:"\F282"}.fa-credit-card-alt:before{content:"\F283"}.fa-codiepie:before{content:"\F284"}.fa-modx:before{content:"\F285"}.fa-fort-awesome:before{content:"\F286"}.fa-usb:before{content:"\F287"}.fa-product-hunt:before{content:"\F288"}.fa-mixcloud:before{content:"\F289"}.fa-scribd:before{content:"\F28A"}.fa-pause-circle:before{content:"\F28B"}.fa-pause-circle-o:before{content:"\F28C"}.fa-stop-circle:before{content:"\F28D"}.fa-stop-circle-o:before{content:"\F28E"}.fa-shopping-bag:before{content:"\F290"}.fa-shopping-basket:before{content:"\F291"}.fa-hashtag:before{content:"\F292"}.fa-bluetooth:before{content:"\F293"}.fa-bluetooth-b:before{content:"\F294"}.fa-percent:before{content:"\F295"}.grv-settings{padding:0 15px;width:100%;height:100%;margin:0 auto}.grv-settings .grv-line-solid{border-bottom:1px solid #e7eaec;background-color:transparent}.grv-settings .grv-settings-tab{width:100%;margin:10px 0 15px;flex:1;display:flex}.grv-settings .grv-settings-header-line-solid{background-color:#e7eaec;height:1px}.grv-settings .grv-alert-danger,.grv-settings .grv-alert-info,.grv-settings .grv-alert-success{padding:5px 10px}.grv-settings .grv-settings-header-menu{padding-left:0;margin:18px 0 0;list-style:none;min-width:700px}.grv-settings .grv-settings-header-menu h2{margin:0;padding:0 20px}.grv-settings .grv-settings-header-menu a{color:#919191}.grv-settings .grv-settings-header-menu a:hover{color:#3c3c3c}.grv-settings .grv-settings-header-menu li{display:inline-block;position:relative}.grv-settings .grv-settings-header-menu li .grv-settings-header-line-solid{display:none;position:absolute;width:100%}.grv-settings .grv-settings-header-menu li:first-child{margin-right:20px}.grv-settings .grv-settings-header-menu li:first-child h2{padding:0}.grv-settings .grv-settings-header-menu li.active .grv-settings-header-line-solid{display:block;top:100%;border-bottom:2px solid #4e988b}.grv-settings .grv-settings-header-menu li.active a{color:#3c3c3c}.grv-settings .grv-settings-header-menu li:not(:first-child){margin-left:20px}.grv{background-color:#fff}.grv .grv-tlpt{height:100%}.grv .grv-tlpt h2{font-size:20px}.grv .grv-page{padding:0 5%;display:flex;overflow:auto;flex:1;flex-direction:column}#app{height:100%;position:absolute;top:0;bottom:0;width:100%;min-width:600px;display:block;overflow:auto}.grv-rounded{border-radius:10px}.grv-flex{display:flex}.grv-flex-column{flex-direction:column;flex:1}.grv-flex-row{flex-direction:row;flex:1}.grv-search{max-width:200px;float:right}.\--isLinux .grv-sshserver-input input{font-family:Liberation Mono,Droid Sans Mono,monospace,monospace,Droid Sans Fallback}.\--isWin .grv-sshserver-input input{font-family:Consolas,Courier New,monospace}.\--isMac .grv-sshserver-input input{font-family:Menlo,Monaco,Courier New,monospace}.grv-sshserver-input{position:relative;width:300px;float:right}.grv-sshserver-input .grv-sshserver-input-errors{display:none;font-size:10px}.grv-sshserver-input.\--error .grv-sshserver-input-errors{display:block;position:absolute;color:#cc5965}.grv-clusters-selector{min-width:220px;align-self:flex-end;display:flex;align-items:baseline;justify-content:flex-end}.grv-clusters-selector .grv-dropdown{min-width:120px}.grv-btn-details{display:inline-block;height:12px;padding:0 4px 4px;font-size:12px;font-weight:600;line-height:5px;color:#444d56;text-decoration:none;vertical-align:middle;background:#dfe2e5;border:0;border-radius:1px}.grv-btn-details span{vertical-align:super}.grv-msg-page-details-text{word-break:break-word}.grv-spinner.sk-spinner-three-bounce{z-index:1;position:absolute;top:50%;left:50%}.grv-divider{height:1px;width:40%;display:block;margin:9px auto;background-color:#e5e6e7}.grv-dropdown .grv-dropdown-value{display:flex;align-items:center;justify-content:space-between}.grv-dropdown .grv-dropdown-value .caret{margin-left:5px}.dropdown-menu .divider{margin:3px 0}.dropdown-menu>li>a{margin:0;padding:5px 10px} \ No newline at end of file + */@font-face{font-family:FontAwesome;src:url(/web/app/assets/fonts/fontawesome-webfont.eot);src:url(/web/app/assets/fonts/fontawesome-webfont.eot?#iefix&v=4.5.0) format("embedded-opentype"),url(/web/app/assets/fonts/fontawesome-webfont.woff2) format("woff2"),url(/web/app/assets/fonts/fontawesome-webfont.woff) format("woff"),url(/web/app/assets/fonts/fontawesome-webfont.ttf) format("truetype"),url(/web/app/assets/fonts/fontawesome-webfont.svg#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);transform:scaleX(-1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\F000"}.fa-music:before{content:"\F001"}.fa-search:before{content:"\F002"}.fa-envelope-o:before{content:"\F003"}.fa-heart:before{content:"\F004"}.fa-star:before{content:"\F005"}.fa-star-o:before{content:"\F006"}.fa-user:before{content:"\F007"}.fa-film:before{content:"\F008"}.fa-th-large:before{content:"\F009"}.fa-th:before{content:"\F00A"}.fa-th-list:before{content:"\F00B"}.fa-check:before{content:"\F00C"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\F00D"}.fa-search-plus:before{content:"\F00E"}.fa-search-minus:before{content:"\F010"}.fa-power-off:before{content:"\F011"}.fa-signal:before{content:"\F012"}.fa-cog:before,.fa-gear:before{content:"\F013"}.fa-trash-o:before{content:"\F014"}.fa-home:before{content:"\F015"}.fa-file-o:before{content:"\F016"}.fa-clock-o:before{content:"\F017"}.fa-road:before{content:"\F018"}.fa-download:before{content:"\F019"}.fa-arrow-circle-o-down:before{content:"\F01A"}.fa-arrow-circle-o-up:before{content:"\F01B"}.fa-inbox:before{content:"\F01C"}.fa-play-circle-o:before{content:"\F01D"}.fa-repeat:before,.fa-rotate-right:before{content:"\F01E"}.fa-refresh:before{content:"\F021"}.fa-list-alt:before{content:"\F022"}.fa-lock:before{content:"\F023"}.fa-flag:before{content:"\F024"}.fa-headphones:before{content:"\F025"}.fa-volume-off:before{content:"\F026"}.fa-volume-down:before{content:"\F027"}.fa-volume-up:before{content:"\F028"}.fa-qrcode:before{content:"\F029"}.fa-barcode:before{content:"\F02A"}.fa-tag:before{content:"\F02B"}.fa-tags:before{content:"\F02C"}.fa-book:before{content:"\F02D"}.fa-bookmark:before{content:"\F02E"}.fa-print:before{content:"\F02F"}.fa-camera:before{content:"\F030"}.fa-font:before{content:"\F031"}.fa-bold:before{content:"\F032"}.fa-italic:before{content:"\F033"}.fa-text-height:before{content:"\F034"}.fa-text-width:before{content:"\F035"}.fa-align-left:before{content:"\F036"}.fa-align-center:before{content:"\F037"}.fa-align-right:before{content:"\F038"}.fa-align-justify:before{content:"\F039"}.fa-list:before{content:"\F03A"}.fa-dedent:before,.fa-outdent:before{content:"\F03B"}.fa-indent:before{content:"\F03C"}.fa-video-camera:before{content:"\F03D"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\F03E"}.fa-pencil:before{content:"\F040"}.fa-map-marker:before{content:"\F041"}.fa-adjust:before{content:"\F042"}.fa-tint:before{content:"\F043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\F044"}.fa-share-square-o:before{content:"\F045"}.fa-check-square-o:before{content:"\F046"}.fa-arrows:before{content:"\F047"}.fa-step-backward:before{content:"\F048"}.fa-fast-backward:before{content:"\F049"}.fa-backward:before{content:"\F04A"}.fa-play:before{content:"\F04B"}.fa-pause:before{content:"\F04C"}.fa-stop:before{content:"\F04D"}.fa-forward:before{content:"\F04E"}.fa-fast-forward:before{content:"\F050"}.fa-step-forward:before{content:"\F051"}.fa-eject:before{content:"\F052"}.fa-chevron-left:before{content:"\F053"}.fa-chevron-right:before{content:"\F054"}.fa-plus-circle:before{content:"\F055"}.fa-minus-circle:before{content:"\F056"}.fa-times-circle:before{content:"\F057"}.fa-check-circle:before{content:"\F058"}.fa-question-circle:before{content:"\F059"}.fa-info-circle:before{content:"\F05A"}.fa-crosshairs:before{content:"\F05B"}.fa-times-circle-o:before{content:"\F05C"}.fa-check-circle-o:before{content:"\F05D"}.fa-ban:before{content:"\F05E"}.fa-arrow-left:before{content:"\F060"}.fa-arrow-right:before{content:"\F061"}.fa-arrow-up:before{content:"\F062"}.fa-arrow-down:before{content:"\F063"}.fa-mail-forward:before,.fa-share:before{content:"\F064"}.fa-expand:before{content:"\F065"}.fa-compress:before{content:"\F066"}.fa-plus:before{content:"\F067"}.fa-minus:before{content:"\F068"}.fa-asterisk:before{content:"\F069"}.fa-exclamation-circle:before{content:"\F06A"}.fa-gift:before{content:"\F06B"}.fa-leaf:before{content:"\F06C"}.fa-fire:before{content:"\F06D"}.fa-eye:before{content:"\F06E"}.fa-eye-slash:before{content:"\F070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\F071"}.fa-plane:before{content:"\F072"}.fa-calendar:before{content:"\F073"}.fa-random:before{content:"\F074"}.fa-comment:before{content:"\F075"}.fa-magnet:before{content:"\F076"}.fa-chevron-up:before{content:"\F077"}.fa-chevron-down:before{content:"\F078"}.fa-retweet:before{content:"\F079"}.fa-shopping-cart:before{content:"\F07A"}.fa-folder:before{content:"\F07B"}.fa-folder-open:before{content:"\F07C"}.fa-arrows-v:before{content:"\F07D"}.fa-arrows-h:before{content:"\F07E"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\F080"}.fa-twitter-square:before{content:"\F081"}.fa-facebook-square:before{content:"\F082"}.fa-camera-retro:before{content:"\F083"}.fa-key:before{content:"\F084"}.fa-cogs:before,.fa-gears:before{content:"\F085"}.fa-comments:before{content:"\F086"}.fa-thumbs-o-up:before{content:"\F087"}.fa-thumbs-o-down:before{content:"\F088"}.fa-star-half:before{content:"\F089"}.fa-heart-o:before{content:"\F08A"}.fa-sign-out:before{content:"\F08B"}.fa-linkedin-square:before{content:"\F08C"}.fa-thumb-tack:before{content:"\F08D"}.fa-external-link:before{content:"\F08E"}.fa-sign-in:before{content:"\F090"}.fa-trophy:before{content:"\F091"}.fa-github-square:before{content:"\F092"}.fa-upload:before{content:"\F093"}.fa-lemon-o:before{content:"\F094"}.fa-phone:before{content:"\F095"}.fa-square-o:before{content:"\F096"}.fa-bookmark-o:before{content:"\F097"}.fa-phone-square:before{content:"\F098"}.fa-twitter:before{content:"\F099"}.fa-facebook-f:before,.fa-facebook:before{content:"\F09A"}.fa-github:before,.grv-user-btn-sso.btn-github .\--sso-icon .fa:before{content:"\F09B"}.fa-unlock:before{content:"\F09C"}.fa-credit-card:before{content:"\F09D"}.fa-feed:before,.fa-rss:before{content:"\F09E"}.fa-hdd-o:before{content:"\F0A0"}.fa-bullhorn:before{content:"\F0A1"}.fa-bell:before{content:"\F0F3"}.fa-certificate:before{content:"\F0A3"}.fa-hand-o-right:before{content:"\F0A4"}.fa-hand-o-left:before{content:"\F0A5"}.fa-hand-o-up:before{content:"\F0A6"}.fa-hand-o-down:before{content:"\F0A7"}.fa-arrow-circle-left:before{content:"\F0A8"}.fa-arrow-circle-right:before{content:"\F0A9"}.fa-arrow-circle-up:before{content:"\F0AA"}.fa-arrow-circle-down:before{content:"\F0AB"}.fa-globe:before{content:"\F0AC"}.fa-wrench:before{content:"\F0AD"}.fa-tasks:before{content:"\F0AE"}.fa-filter:before{content:"\F0B0"}.fa-briefcase:before{content:"\F0B1"}.fa-arrows-alt:before{content:"\F0B2"}.fa-group:before,.fa-users:before{content:"\F0C0"}.fa-chain:before,.fa-link:before{content:"\F0C1"}.fa-cloud:before{content:"\F0C2"}.fa-flask:before{content:"\F0C3"}.fa-cut:before,.fa-scissors:before{content:"\F0C4"}.fa-copy:before,.fa-files-o:before{content:"\F0C5"}.fa-paperclip:before{content:"\F0C6"}.fa-floppy-o:before,.fa-save:before{content:"\F0C7"}.fa-square:before{content:"\F0C8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\F0C9"}.fa-list-ul:before{content:"\F0CA"}.fa-list-ol:before{content:"\F0CB"}.fa-strikethrough:before{content:"\F0CC"}.fa-underline:before{content:"\F0CD"}.fa-table:before{content:"\F0CE"}.fa-magic:before{content:"\F0D0"}.fa-truck:before{content:"\F0D1"}.fa-pinterest:before{content:"\F0D2"}.fa-pinterest-square:before{content:"\F0D3"}.fa-google-plus-square:before{content:"\F0D4"}.fa-google-plus:before{content:"\F0D5"}.fa-money:before{content:"\F0D6"}.fa-caret-down:before{content:"\F0D7"}.fa-caret-up:before{content:"\F0D8"}.fa-caret-left:before{content:"\F0D9"}.fa-caret-right:before{content:"\F0DA"}.fa-columns:before{content:"\F0DB"}.fa-sort:before,.fa-unsorted:before{content:"\F0DC"}.fa-sort-desc:before,.fa-sort-down:before{content:"\F0DD"}.fa-sort-asc:before,.fa-sort-up:before{content:"\F0DE"}.fa-envelope:before{content:"\F0E0"}.fa-linkedin:before{content:"\F0E1"}.fa-rotate-left:before,.fa-undo:before{content:"\F0E2"}.fa-gavel:before,.fa-legal:before{content:"\F0E3"}.fa-dashboard:before,.fa-tachometer:before{content:"\F0E4"}.fa-comment-o:before{content:"\F0E5"}.fa-comments-o:before{content:"\F0E6"}.fa-bolt:before,.fa-flash:before{content:"\F0E7"}.fa-sitemap:before{content:"\F0E8"}.fa-umbrella:before{content:"\F0E9"}.fa-clipboard:before,.fa-paste:before{content:"\F0EA"}.fa-lightbulb-o:before{content:"\F0EB"}.fa-exchange:before{content:"\F0EC"}.fa-cloud-download:before{content:"\F0ED"}.fa-cloud-upload:before{content:"\F0EE"}.fa-user-md:before{content:"\F0F0"}.fa-stethoscope:before{content:"\F0F1"}.fa-suitcase:before{content:"\F0F2"}.fa-bell-o:before{content:"\F0A2"}.fa-coffee:before{content:"\F0F4"}.fa-cutlery:before{content:"\F0F5"}.fa-file-text-o:before{content:"\F0F6"}.fa-building-o:before{content:"\F0F7"}.fa-hospital-o:before{content:"\F0F8"}.fa-ambulance:before{content:"\F0F9"}.fa-medkit:before{content:"\F0FA"}.fa-fighter-jet:before{content:"\F0FB"}.fa-beer:before{content:"\F0FC"}.fa-h-square:before{content:"\F0FD"}.fa-plus-square:before{content:"\F0FE"}.fa-angle-double-left:before{content:"\F100"}.fa-angle-double-right:before{content:"\F101"}.fa-angle-double-up:before{content:"\F102"}.fa-angle-double-down:before{content:"\F103"}.fa-angle-left:before{content:"\F104"}.fa-angle-right:before{content:"\F105"}.fa-angle-up:before{content:"\F106"}.fa-angle-down:before{content:"\F107"}.fa-desktop:before{content:"\F108"}.fa-laptop:before{content:"\F109"}.fa-tablet:before{content:"\F10A"}.fa-mobile-phone:before,.fa-mobile:before{content:"\F10B"}.fa-circle-o:before{content:"\F10C"}.fa-quote-left:before{content:"\F10D"}.fa-quote-right:before{content:"\F10E"}.fa-spinner:before{content:"\F110"}.fa-circle:before{content:"\F111"}.fa-mail-reply:before,.fa-reply:before{content:"\F112"}.fa-github-alt:before{content:"\F113"}.fa-folder-o:before{content:"\F114"}.fa-folder-open-o:before{content:"\F115"}.fa-smile-o:before{content:"\F118"}.fa-frown-o:before{content:"\F119"}.fa-meh-o:before{content:"\F11A"}.fa-gamepad:before{content:"\F11B"}.fa-keyboard-o:before{content:"\F11C"}.fa-flag-o:before{content:"\F11D"}.fa-flag-checkered:before{content:"\F11E"}.fa-terminal:before{content:"\F120"}.fa-code:before{content:"\F121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\F122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\F123"}.fa-location-arrow:before{content:"\F124"}.fa-crop:before{content:"\F125"}.fa-code-fork:before{content:"\F126"}.fa-chain-broken:before,.fa-unlink:before{content:"\F127"}.fa-question:before{content:"\F128"}.fa-info:before{content:"\F129"}.fa-exclamation:before{content:"\F12A"}.fa-superscript:before{content:"\F12B"}.fa-subscript:before{content:"\F12C"}.fa-eraser:before{content:"\F12D"}.fa-puzzle-piece:before{content:"\F12E"}.fa-microphone:before{content:"\F130"}.fa-microphone-slash:before{content:"\F131"}.fa-shield:before{content:"\F132"}.fa-calendar-o:before{content:"\F133"}.fa-fire-extinguisher:before{content:"\F134"}.fa-rocket:before{content:"\F135"}.fa-maxcdn:before{content:"\F136"}.fa-chevron-circle-left:before{content:"\F137"}.fa-chevron-circle-right:before{content:"\F138"}.fa-chevron-circle-up:before{content:"\F139"}.fa-chevron-circle-down:before{content:"\F13A"}.fa-html5:before{content:"\F13B"}.fa-css3:before{content:"\F13C"}.fa-anchor:before{content:"\F13D"}.fa-unlock-alt:before{content:"\F13E"}.fa-bullseye:before{content:"\F140"}.fa-ellipsis-h:before{content:"\F141"}.fa-ellipsis-v:before{content:"\F142"}.fa-rss-square:before{content:"\F143"}.fa-play-circle:before{content:"\F144"}.fa-ticket:before{content:"\F145"}.fa-minus-square:before{content:"\F146"}.fa-minus-square-o:before{content:"\F147"}.fa-level-up:before{content:"\F148"}.fa-level-down:before{content:"\F149"}.fa-check-square:before{content:"\F14A"}.fa-pencil-square:before{content:"\F14B"}.fa-external-link-square:before{content:"\F14C"}.fa-share-square:before{content:"\F14D"}.fa-compass:before{content:"\F14E"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\F150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\F151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\F152"}.fa-eur:before,.fa-euro:before{content:"\F153"}.fa-gbp:before{content:"\F154"}.fa-dollar:before,.fa-usd:before{content:"\F155"}.fa-inr:before,.fa-rupee:before{content:"\F156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\F157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\F158"}.fa-krw:before,.fa-won:before{content:"\F159"}.fa-bitcoin:before,.fa-btc:before{content:"\F15A"}.fa-file:before{content:"\F15B"}.fa-file-text:before{content:"\F15C"}.fa-sort-alpha-asc:before{content:"\F15D"}.fa-sort-alpha-desc:before{content:"\F15E"}.fa-sort-amount-asc:before{content:"\F160"}.fa-sort-amount-desc:before{content:"\F161"}.fa-sort-numeric-asc:before{content:"\F162"}.fa-sort-numeric-desc:before{content:"\F163"}.fa-thumbs-up:before{content:"\F164"}.fa-thumbs-down:before{content:"\F165"}.fa-youtube-square:before{content:"\F166"}.fa-youtube:before{content:"\F167"}.fa-xing:before{content:"\F168"}.fa-xing-square:before{content:"\F169"}.fa-youtube-play:before{content:"\F16A"}.fa-dropbox:before{content:"\F16B"}.fa-stack-overflow:before{content:"\F16C"}.fa-instagram:before{content:"\F16D"}.fa-flickr:before{content:"\F16E"}.fa-adn:before{content:"\F170"}.fa-bitbucket:before,.grv-user-btn-sso.btn-bitbucket .\--sso-icon .fa:before{content:"\F171"}.fa-bitbucket-square:before{content:"\F172"}.fa-tumblr:before{content:"\F173"}.fa-tumblr-square:before{content:"\F174"}.fa-long-arrow-down:before{content:"\F175"}.fa-long-arrow-up:before{content:"\F176"}.fa-long-arrow-left:before{content:"\F177"}.fa-long-arrow-right:before{content:"\F178"}.fa-apple:before{content:"\F179"}.fa-windows:before,.grv-user-btn-sso.btn-microsoft .\--sso-icon .fa:before{content:"\F17A"}.fa-android:before{content:"\F17B"}.fa-linux:before{content:"\F17C"}.fa-dribbble:before{content:"\F17D"}.fa-skype:before{content:"\F17E"}.fa-foursquare:before{content:"\F180"}.fa-trello:before{content:"\F181"}.fa-female:before{content:"\F182"}.fa-male:before{content:"\F183"}.fa-gittip:before,.fa-gratipay:before{content:"\F184"}.fa-sun-o:before{content:"\F185"}.fa-moon-o:before{content:"\F186"}.fa-archive:before{content:"\F187"}.fa-bug:before{content:"\F188"}.fa-vk:before{content:"\F189"}.fa-weibo:before{content:"\F18A"}.fa-renren:before{content:"\F18B"}.fa-pagelines:before{content:"\F18C"}.fa-stack-exchange:before{content:"\F18D"}.fa-arrow-circle-o-right:before{content:"\F18E"}.fa-arrow-circle-o-left:before{content:"\F190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\F191"}.fa-dot-circle-o:before{content:"\F192"}.fa-wheelchair:before{content:"\F193"}.fa-vimeo-square:before{content:"\F194"}.fa-try:before,.fa-turkish-lira:before{content:"\F195"}.fa-plus-square-o:before{content:"\F196"}.fa-space-shuttle:before{content:"\F197"}.fa-slack:before{content:"\F198"}.fa-envelope-square:before{content:"\F199"}.fa-wordpress:before{content:"\F19A"}.fa-openid:before,.grv-user-btn-sso.\--unknown .\--sso-icon .fa:before,.grv-user-btn-sso.btn-openid .\--sso-icon .fa:before{content:"\F19B"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\F19C"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\F19D"}.fa-yahoo:before{content:"\F19E"}.fa-google:before,.grv-user-btn-sso.btn-google .\--sso-icon .fa:before{content:"\F1A0"}.fa-reddit:before{content:"\F1A1"}.fa-reddit-square:before{content:"\F1A2"}.fa-stumbleupon-circle:before{content:"\F1A3"}.fa-stumbleupon:before{content:"\F1A4"}.fa-delicious:before{content:"\F1A5"}.fa-digg:before{content:"\F1A6"}.fa-pied-piper:before{content:"\F1A7"}.fa-pied-piper-alt:before{content:"\F1A8"}.fa-drupal:before{content:"\F1A9"}.fa-joomla:before{content:"\F1AA"}.fa-language:before{content:"\F1AB"}.fa-fax:before{content:"\F1AC"}.fa-building:before{content:"\F1AD"}.fa-child:before{content:"\F1AE"}.fa-paw:before{content:"\F1B0"}.fa-spoon:before{content:"\F1B1"}.fa-cube:before{content:"\F1B2"}.fa-cubes:before{content:"\F1B3"}.fa-behance:before{content:"\F1B4"}.fa-behance-square:before{content:"\F1B5"}.fa-steam:before{content:"\F1B6"}.fa-steam-square:before{content:"\F1B7"}.fa-recycle:before{content:"\F1B8"}.fa-automobile:before,.fa-car:before{content:"\F1B9"}.fa-cab:before,.fa-taxi:before{content:"\F1BA"}.fa-tree:before{content:"\F1BB"}.fa-spotify:before{content:"\F1BC"}.fa-deviantart:before{content:"\F1BD"}.fa-soundcloud:before{content:"\F1BE"}.fa-database:before{content:"\F1C0"}.fa-file-pdf-o:before{content:"\F1C1"}.fa-file-word-o:before{content:"\F1C2"}.fa-file-excel-o:before{content:"\F1C3"}.fa-file-powerpoint-o:before{content:"\F1C4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\F1C5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\F1C6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\F1C7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\F1C8"}.fa-file-code-o:before{content:"\F1C9"}.fa-vine:before{content:"\F1CA"}.fa-codepen:before{content:"\F1CB"}.fa-jsfiddle:before{content:"\F1CC"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\F1CD"}.fa-circle-o-notch:before{content:"\F1CE"}.fa-ra:before,.fa-rebel:before{content:"\F1D0"}.fa-empire:before,.fa-ge:before{content:"\F1D1"}.fa-git-square:before{content:"\F1D2"}.fa-git:before{content:"\F1D3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\F1D4"}.fa-tencent-weibo:before{content:"\F1D5"}.fa-qq:before{content:"\F1D6"}.fa-wechat:before,.fa-weixin:before{content:"\F1D7"}.fa-paper-plane:before,.fa-send:before{content:"\F1D8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\F1D9"}.fa-history:before{content:"\F1DA"}.fa-circle-thin:before{content:"\F1DB"}.fa-header:before{content:"\F1DC"}.fa-paragraph:before{content:"\F1DD"}.fa-sliders:before{content:"\F1DE"}.fa-share-alt:before{content:"\F1E0"}.fa-share-alt-square:before{content:"\F1E1"}.fa-bomb:before{content:"\F1E2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\F1E3"}.fa-tty:before{content:"\F1E4"}.fa-binoculars:before{content:"\F1E5"}.fa-plug:before{content:"\F1E6"}.fa-slideshare:before{content:"\F1E7"}.fa-twitch:before{content:"\F1E8"}.fa-yelp:before{content:"\F1E9"}.fa-newspaper-o:before{content:"\F1EA"}.fa-wifi:before{content:"\F1EB"}.fa-calculator:before{content:"\F1EC"}.fa-paypal:before{content:"\F1ED"}.fa-google-wallet:before{content:"\F1EE"}.fa-cc-visa:before{content:"\F1F0"}.fa-cc-mastercard:before{content:"\F1F1"}.fa-cc-discover:before{content:"\F1F2"}.fa-cc-amex:before{content:"\F1F3"}.fa-cc-paypal:before{content:"\F1F4"}.fa-cc-stripe:before{content:"\F1F5"}.fa-bell-slash:before{content:"\F1F6"}.fa-bell-slash-o:before{content:"\F1F7"}.fa-trash:before{content:"\F1F8"}.fa-copyright:before{content:"\F1F9"}.fa-at:before{content:"\F1FA"}.fa-eyedropper:before{content:"\F1FB"}.fa-paint-brush:before{content:"\F1FC"}.fa-birthday-cake:before{content:"\F1FD"}.fa-area-chart:before{content:"\F1FE"}.fa-pie-chart:before{content:"\F200"}.fa-line-chart:before{content:"\F201"}.fa-lastfm:before{content:"\F202"}.fa-lastfm-square:before{content:"\F203"}.fa-toggle-off:before{content:"\F204"}.fa-toggle-on:before{content:"\F205"}.fa-bicycle:before{content:"\F206"}.fa-bus:before{content:"\F207"}.fa-ioxhost:before{content:"\F208"}.fa-angellist:before{content:"\F209"}.fa-cc:before{content:"\F20A"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\F20B"}.fa-meanpath:before{content:"\F20C"}.fa-buysellads:before{content:"\F20D"}.fa-connectdevelop:before{content:"\F20E"}.fa-dashcube:before{content:"\F210"}.fa-forumbee:before{content:"\F211"}.fa-leanpub:before{content:"\F212"}.fa-sellsy:before{content:"\F213"}.fa-shirtsinbulk:before{content:"\F214"}.fa-simplybuilt:before{content:"\F215"}.fa-skyatlas:before{content:"\F216"}.fa-cart-plus:before{content:"\F217"}.fa-cart-arrow-down:before{content:"\F218"}.fa-diamond:before{content:"\F219"}.fa-ship:before{content:"\F21A"}.fa-user-secret:before{content:"\F21B"}.fa-motorcycle:before{content:"\F21C"}.fa-street-view:before{content:"\F21D"}.fa-heartbeat:before{content:"\F21E"}.fa-venus:before{content:"\F221"}.fa-mars:before{content:"\F222"}.fa-mercury:before{content:"\F223"}.fa-intersex:before,.fa-transgender:before{content:"\F224"}.fa-transgender-alt:before{content:"\F225"}.fa-venus-double:before{content:"\F226"}.fa-mars-double:before{content:"\F227"}.fa-venus-mars:before{content:"\F228"}.fa-mars-stroke:before{content:"\F229"}.fa-mars-stroke-v:before{content:"\F22A"}.fa-mars-stroke-h:before{content:"\F22B"}.fa-neuter:before{content:"\F22C"}.fa-genderless:before{content:"\F22D"}.fa-facebook-official:before{content:"\F230"}.fa-pinterest-p:before{content:"\F231"}.fa-whatsapp:before{content:"\F232"}.fa-server:before{content:"\F233"}.fa-user-plus:before{content:"\F234"}.fa-user-times:before{content:"\F235"}.fa-bed:before,.fa-hotel:before{content:"\F236"}.fa-viacoin:before{content:"\F237"}.fa-train:before{content:"\F238"}.fa-subway:before{content:"\F239"}.fa-medium:before{content:"\F23A"}.fa-y-combinator:before,.fa-yc:before{content:"\F23B"}.fa-optin-monster:before{content:"\F23C"}.fa-opencart:before{content:"\F23D"}.fa-expeditedssl:before{content:"\F23E"}.fa-battery-4:before,.fa-battery-full:before{content:"\F240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\F241"}.fa-battery-2:before,.fa-battery-half:before{content:"\F242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\F243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\F244"}.fa-mouse-pointer:before{content:"\F245"}.fa-i-cursor:before{content:"\F246"}.fa-object-group:before{content:"\F247"}.fa-object-ungroup:before{content:"\F248"}.fa-sticky-note:before{content:"\F249"}.fa-sticky-note-o:before{content:"\F24A"}.fa-cc-jcb:before{content:"\F24B"}.fa-cc-diners-club:before{content:"\F24C"}.fa-clone:before{content:"\F24D"}.fa-balance-scale:before{content:"\F24E"}.fa-hourglass-o:before{content:"\F250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\F251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\F252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\F253"}.fa-hourglass:before{content:"\F254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\F255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\F256"}.fa-hand-scissors-o:before{content:"\F257"}.fa-hand-lizard-o:before{content:"\F258"}.fa-hand-spock-o:before{content:"\F259"}.fa-hand-pointer-o:before{content:"\F25A"}.fa-hand-peace-o:before{content:"\F25B"}.fa-trademark:before{content:"\F25C"}.fa-registered:before{content:"\F25D"}.fa-creative-commons:before{content:"\F25E"}.fa-gg:before{content:"\F260"}.fa-gg-circle:before{content:"\F261"}.fa-tripadvisor:before{content:"\F262"}.fa-odnoklassniki:before{content:"\F263"}.fa-odnoklassniki-square:before{content:"\F264"}.fa-get-pocket:before{content:"\F265"}.fa-wikipedia-w:before{content:"\F266"}.fa-safari:before{content:"\F267"}.fa-chrome:before{content:"\F268"}.fa-firefox:before{content:"\F269"}.fa-opera:before{content:"\F26A"}.fa-internet-explorer:before{content:"\F26B"}.fa-television:before,.fa-tv:before{content:"\F26C"}.fa-contao:before{content:"\F26D"}.fa-500px:before{content:"\F26E"}.fa-amazon:before{content:"\F270"}.fa-calendar-plus-o:before{content:"\F271"}.fa-calendar-minus-o:before{content:"\F272"}.fa-calendar-times-o:before{content:"\F273"}.fa-calendar-check-o:before{content:"\F274"}.fa-industry:before{content:"\F275"}.fa-map-pin:before{content:"\F276"}.fa-map-signs:before{content:"\F277"}.fa-map-o:before{content:"\F278"}.fa-map:before{content:"\F279"}.fa-commenting:before{content:"\F27A"}.fa-commenting-o:before{content:"\F27B"}.fa-houzz:before{content:"\F27C"}.fa-vimeo:before{content:"\F27D"}.fa-black-tie:before{content:"\F27E"}.fa-fonticons:before{content:"\F280"}.fa-reddit-alien:before{content:"\F281"}.fa-edge:before{content:"\F282"}.fa-credit-card-alt:before{content:"\F283"}.fa-codiepie:before{content:"\F284"}.fa-modx:before{content:"\F285"}.fa-fort-awesome:before{content:"\F286"}.fa-usb:before{content:"\F287"}.fa-product-hunt:before{content:"\F288"}.fa-mixcloud:before{content:"\F289"}.fa-scribd:before{content:"\F28A"}.fa-pause-circle:before{content:"\F28B"}.fa-pause-circle-o:before{content:"\F28C"}.fa-stop-circle:before{content:"\F28D"}.fa-stop-circle-o:before{content:"\F28E"}.fa-shopping-bag:before{content:"\F290"}.fa-shopping-basket:before{content:"\F291"}.fa-hashtag:before{content:"\F292"}.fa-bluetooth:before{content:"\F293"}.fa-bluetooth-b:before{content:"\F294"}.fa-percent:before{content:"\F295"}.grv-settings{padding:0 15px;width:100%;height:100%;margin:0 auto}.grv-settings .grv-line-solid{border-bottom:1px solid #e7eaec;background-color:transparent}.grv-settings .grv-settings-tab{width:100%;margin:10px 0 15px;flex:1;display:flex}.grv-settings .grv-settings-header-line-solid{background-color:#e7eaec;height:1px}.grv-settings .grv-alert-danger,.grv-settings .grv-alert-info,.grv-settings .grv-alert-success{padding:5px 10px}.grv-settings .grv-settings-header-menu{padding-left:0;margin:18px 0 0;list-style:none;min-width:700px}.grv-settings .grv-settings-header-menu h2{margin:0;padding:0 20px}.grv-settings .grv-settings-header-menu a{color:#919191}.grv-settings .grv-settings-header-menu a:hover{color:#3c3c3c}.grv-settings .grv-settings-header-menu li{display:inline-block;position:relative}.grv-settings .grv-settings-header-menu li .grv-settings-header-line-solid{display:none;position:absolute;width:100%}.grv-settings .grv-settings-header-menu li:first-child{margin-right:20px}.grv-settings .grv-settings-header-menu li:first-child h2{padding:0}.grv-settings .grv-settings-header-menu li.active .grv-settings-header-line-solid{display:block;top:100%;border-bottom:2px solid #4e988b}.grv-settings .grv-settings-header-menu li.active a{color:#3c3c3c}.grv-settings .grv-settings-header-menu li:not(:first-child){margin-left:20px}.grv{background-color:#fff}.grv .grv-tlpt{height:100%}.grv .grv-tlpt h2{font-size:20px}.grv .grv-page{padding:0 5%;display:flex;overflow:auto;flex:1;flex-direction:column}#app{height:100%;position:absolute;top:0;bottom:0;width:100%;min-width:600px;display:block;overflow:auto}.grv-rounded{border-radius:10px}.grv-flex{display:flex}.grv-flex-column{flex-direction:column;flex:1}.grv-flex-row{flex-direction:row;flex:1}.grv-search{max-width:200px;float:right}.\--isLinux .grv-sshserver-input input{font-family:Liberation Mono,Droid Sans Mono,monospace,monospace,Droid Sans Fallback}.\--isWin .grv-sshserver-input input{font-family:Consolas,Courier New,monospace}.\--isMac .grv-sshserver-input input{font-family:Menlo,Monaco,Courier New,monospace}.grv-sshserver-input{position:relative;width:300px;float:right}.grv-sshserver-input input{padding-top:7px!important}.grv-sshserver-input .grv-sshserver-input-errors{display:none;font-size:10px}.grv-sshserver-input.\--error .grv-sshserver-input-errors{display:block;position:absolute;color:#cc5965}.grv-clusters-selector{min-width:220px;align-self:flex-end;display:flex;align-items:baseline;justify-content:flex-end}.grv-clusters-selector .grv-dropdown{min-width:120px}.grv-btn-details{display:inline-block;height:12px;padding:0 4px 4px;font-size:12px;font-weight:600;line-height:5px;color:#444d56;text-decoration:none;vertical-align:middle;background:#dfe2e5;border:0;border-radius:1px}.grv-btn-details span{vertical-align:super}.grv-msg-page-details-text{word-break:break-word}.grv-spinner.sk-spinner-three-bounce{z-index:1;position:absolute;top:50%;left:50%}.grv-divider{height:1px;width:40%;display:block;margin:9px auto;background-color:#e5e6e7}.grv-dropdown .grv-dropdown-value{display:flex;align-items:center;justify-content:space-between}.grv-dropdown .grv-dropdown-value .caret{margin-left:5px}.dropdown-menu .divider{margin:3px 0}.dropdown-menu>li>a{margin:0;padding:5px 10px} \ No newline at end of file diff --git a/web/dist/index.html b/web/dist/index.html index a821c8b6017ef..b29d744536461 100644 --- a/web/dist/index.html +++ b/web/dist/index.html @@ -8,8 +8,8 @@ Teleport by Gravitational - +
- +