From 4eaa25eb2cd95597a34979b8b1f89982d82e17db Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 16:25:38 -0700 Subject: [PATCH 01/26] vault: can pass in the backends --- vault/core.go | 16 ++++++++++ vault/logical_system_test.go | 2 +- vault/mount.go | 61 +++++++++++++++++------------------- 3 files changed, 45 insertions(+), 34 deletions(-) diff --git a/vault/core.go b/vault/core.go index 3df91faa0e..ebcabc9e6e 100644 --- a/vault/core.go +++ b/vault/core.go @@ -96,6 +96,9 @@ type Core struct { // router is responsible for managing the mount points for logical backends. router *Router + // backends is the mapping of backends to use for this core + backends map[string]logical.Factory + // stateLock protects mutable state stateLock sync.RWMutex sealed bool @@ -121,6 +124,7 @@ type Core struct { // CoreConfig is used to parameterize a core type CoreConfig struct { + Backends map[string]logical.Factory Physical physical.Backend Logger *log.Logger } @@ -146,6 +150,18 @@ func NewCore(conf *CoreConfig) (*Core, error) { sealed: true, logger: conf.Logger, } + + // Setup the backends + backends := make(map[string]logical.Factory) + for k, f := range conf.Backends { + backends[k] = f + } + backends["generic"] = PassthroughBackendFactory + backends["system"] = func(map[string]string) (logical.Backend, error) { + return &SystemBackend{Core: c}, nil + } + + c.backends = backends return c, nil } diff --git a/vault/logical_system_test.go b/vault/logical_system_test.go index 6a6e9f93f7..28221057ff 100644 --- a/vault/logical_system_test.go +++ b/vault/logical_system_test.go @@ -71,7 +71,7 @@ func TestSystemBackend_mount_invalid(t *testing.T) { if err != logical.ErrInvalidRequest { t.Fatalf("err: %v", err) } - if resp.Data["error"] != "unknown logical backend type: nope" { + if resp.Data["error"] != "unknown backend type: nope" { t.Fatalf("bad: %v", resp) } } diff --git a/vault/mount.go b/vault/mount.go index b90aa82bc0..0cd5bdca8d 100644 --- a/vault/mount.go +++ b/vault/mount.go @@ -9,25 +9,6 @@ import ( "github.com/hashicorp/vault/logical" ) -// TEMPORARY! - -// BuiltinBackends contains all of the available backends -var BuiltinBackends = map[string]logical.Factory{ - "generic": PassthroughBackendFactory, -} - -// NewBackend returns a new logical Backend with the given type and configuration. -// The backend is looked up in the BuiltinBackends variable. -func NewBackend(t string, conf map[string]string) (logical.Backend, error) { - f, ok := BuiltinBackends[t] - if !ok { - return nil, fmt.Errorf("unknown logical backend type: %s", t) - } - return f(conf) -} - -// TEMPORARY! - const ( // coreMountConfigPath is used to store the mount configuration. // Mounts are protected within the Vault itself, which means they @@ -103,7 +84,7 @@ func (c *Core) mount(me *MountEntry) error { } // Lookup the new backend - backend, err := NewBackend(me.Type, nil) + backend, err := c.newBackend(me.Type, nil) if err != nil { return err } @@ -288,24 +269,29 @@ func (c *Core) setupMounts() error { var err error for _, entry := range c.mounts.Entries { // Initialize the backend, special casing for system + barrierPrefix := backendBarrierPrefix + if entry.Type == "system" { + barrierPrefix = systemBarrierPrefix + } + + backend, err = c.newBackend(entry.Type, nil) + if err != nil { + c.logger.Printf( + "[ERR] core: failed to create mount entry %#v: %v", + entry, err) + return loadMountsFailed + } + + // Create a barrier view using the UUID + view = NewBarrierView(c.barrier, barrierPrefix+entry.UUID+"/") + if entry.Type == "system" { - backend = &SystemBackend{Core: c} - view = NewBarrierView(c.barrier, systemBarrierPrefix+entry.UUID+"/") c.systemView = view - - } else { - backend, err = NewBackend(entry.Type, nil) - if err != nil { - c.logger.Printf("[ERR] core: failed to create mount entry %#v: %v", entry, err) - return loadMountsFailed - } - - // Create a barrier view using the UUID - view = NewBarrierView(c.barrier, backendBarrierPrefix+entry.UUID+"/") } // Mount the backend - if err := c.router.Mount(backend, entry.Type, entry.Path, view); err != nil { + err = c.router.Mount(backend, entry.Type, entry.Path, view) + if err != nil { c.logger.Printf("[ERR] core: failed to mount entry %#v: %v", entry, err) return loadMountsFailed } @@ -322,6 +308,15 @@ func (c *Core) unloadMounts() error { return nil } +func (c *Core) newBackend(t string, conf map[string]string) (logical.Backend, error) { + f, ok := c.backends[t] + if !ok { + return nil, fmt.Errorf("unknown backend type: %s", t) + } + + return f(conf) +} + // defaultMountTable creates a default mount table func defaultMountTable() *MountTable { table := &MountTable{} From 12566c645cea5635c8ff76c70f1aad0054252bdb Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 16:39:49 -0700 Subject: [PATCH 02/26] logical/framework, logical/testing --- .../backend => logical/framework}/backend.go | 2 +- .../framework}/backend_test.go | 2 +- .../framework}/field_data.go | 2 +- .../framework}/field_data_test.go | 2 +- .../framework}/field_type.go | 2 +- .../framework}/fieldtype_string.go | 2 +- .../backend => logical/testing}/testing.go | 33 ++++++++++++++++++- .../testing}/testing_test.go | 2 +- 8 files changed, 39 insertions(+), 8 deletions(-) rename {helper/backend => logical/framework}/backend.go (99%) rename {helper/backend => logical/framework}/backend_test.go (99%) rename {helper/backend => logical/framework}/field_data.go (99%) rename {helper/backend => logical/framework}/field_data_test.go (98%) rename {helper/backend => logical/framework}/field_type.go (94%) rename {helper/backend => logical/framework}/fieldtype_string.go (95%) rename {helper/backend => logical/testing}/testing.go (78%) rename {helper/backend => logical/testing}/testing_test.go (98%) diff --git a/helper/backend/backend.go b/logical/framework/backend.go similarity index 99% rename from helper/backend/backend.go rename to logical/framework/backend.go index 7edf05407a..88ffe4853f 100644 --- a/helper/backend/backend.go +++ b/logical/framework/backend.go @@ -1,4 +1,4 @@ -package backend +package framework import ( "bytes" diff --git a/helper/backend/backend_test.go b/logical/framework/backend_test.go similarity index 99% rename from helper/backend/backend_test.go rename to logical/framework/backend_test.go index 7304c6ae07..c6cae67ef0 100644 --- a/helper/backend/backend_test.go +++ b/logical/framework/backend_test.go @@ -1,4 +1,4 @@ -package backend +package framework import ( "reflect" diff --git a/helper/backend/field_data.go b/logical/framework/field_data.go similarity index 99% rename from helper/backend/field_data.go rename to logical/framework/field_data.go index 44fc2d6402..97835597a3 100644 --- a/helper/backend/field_data.go +++ b/logical/framework/field_data.go @@ -1,4 +1,4 @@ -package backend +package framework import ( "fmt" diff --git a/helper/backend/field_data_test.go b/logical/framework/field_data_test.go similarity index 98% rename from helper/backend/field_data_test.go rename to logical/framework/field_data_test.go index bce9a15a46..2692b74211 100644 --- a/helper/backend/field_data_test.go +++ b/logical/framework/field_data_test.go @@ -1,4 +1,4 @@ -package backend +package framework import ( "reflect" diff --git a/helper/backend/field_type.go b/logical/framework/field_type.go similarity index 94% rename from helper/backend/field_type.go rename to logical/framework/field_type.go index 80289170fb..b4e2dddae7 100644 --- a/helper/backend/field_type.go +++ b/logical/framework/field_type.go @@ -1,4 +1,4 @@ -package backend +package framework //go:generate stringer -type=FieldType field_type.go diff --git a/helper/backend/fieldtype_string.go b/logical/framework/fieldtype_string.go similarity index 95% rename from helper/backend/fieldtype_string.go rename to logical/framework/fieldtype_string.go index 3f537a9377..3b2175897f 100644 --- a/helper/backend/fieldtype_string.go +++ b/logical/framework/fieldtype_string.go @@ -1,6 +1,6 @@ // generated by stringer -type=FieldType field_type.go; DO NOT EDIT -package backend +package framework import "fmt" diff --git a/helper/backend/testing.go b/logical/testing/testing.go similarity index 78% rename from helper/backend/testing.go rename to logical/testing/testing.go index e16d2aa7bc..6699eb1fa8 100644 --- a/helper/backend/testing.go +++ b/logical/testing/testing.go @@ -1,4 +1,4 @@ -package backend +package testing import ( "fmt" @@ -6,6 +6,8 @@ import ( "testing" "github.com/hashicorp/vault/logical" + "github.com/hashicorp/vault/physical" + "github.com/hashicorp/vault/vault" ) // TestEnvVar must be set to a non-empty value for acceptance tests to run. @@ -86,6 +88,35 @@ func Test(t TestT, c TestCase) { if c.PreCheck != nil { c.PreCheck() } + + // Create an in-memory Vault core + core, err := vault.NewCore(&vault.CoreConfig{ + Physical: physical.NewInmem(), + Backends: map[string]logical.Factory{ + "test": func(map[string]string) (logical.Backend, error) { + return c.Backend, nil + }, + }, + }) + if err != nil { + t.Fatal("error initializing core: ", err) + } + + // Initialize the core + init, err := core.Initialize(&vault.SealConfig{ + SecretShares: 1, + SecretThreshold: 1, + }) + if err != nil { + t.Fatal("error initializing core: ", err) + } + + // Unseal the core + if sealed, err := core.Unseal(init.SecretShares[0]); err != nil { + t.Fatal("error unsealing core: ", err) + } else if sealed { + t.Fatal("vault shouldn't be sealed") + } } // TestT is the interface used to handle the test lifecycle of a test. diff --git a/helper/backend/testing_test.go b/logical/testing/testing_test.go similarity index 98% rename from helper/backend/testing_test.go rename to logical/testing/testing_test.go index 3e2cac86d1..d0e4dbc60f 100644 --- a/helper/backend/testing_test.go +++ b/logical/testing/testing_test.go @@ -1,4 +1,4 @@ -package backend +package testing import ( "os" From 1f88dd2d9218533a0b7ff4807f493210f4d8707c Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 16:52:19 -0700 Subject: [PATCH 03/26] logical/testing: acceptance testttttttt --- http/testing.go | 10 +++++++- logical/testing/testing.go | 50 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/http/testing.go b/http/testing.go index ca687128bf..e653cb4f17 100644 --- a/http/testing.go +++ b/http/testing.go @@ -1,6 +1,7 @@ package http import ( + "fmt" "net" "net/http" "testing" @@ -9,9 +10,16 @@ import ( ) func TestServer(t *testing.T, core *vault.Core) (net.Listener, string) { + fail := func(format string, args ...interface{}) { + panic(fmt.Sprintf(format, args...)) + } + if t != nil { + fail = t.Fatalf + } + ln, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { - t.Fatalf("err: %s", err) + fail("err: %s", err) } addr := "http://" + ln.Addr().String() diff --git a/logical/testing/testing.go b/logical/testing/testing.go index 6699eb1fa8..a66d36953b 100644 --- a/logical/testing/testing.go +++ b/logical/testing/testing.go @@ -2,9 +2,12 @@ package testing import ( "fmt" + "log" "os" "testing" + "github.com/hashicorp/vault/api" + "github.com/hashicorp/vault/http" "github.com/hashicorp/vault/logical" "github.com/hashicorp/vault/physical" "github.com/hashicorp/vault/vault" @@ -117,6 +120,53 @@ func Test(t TestT, c TestCase) { } else if sealed { t.Fatal("vault shouldn't be sealed") } + + // Create an HTTP API server and client + ln, addr := http.TestServer(nil, core) + defer ln.Close() + clientConfig := api.DefaultConfig() + clientConfig.Address = addr + client, err := api.NewClient(clientConfig) + if err != nil { + t.Fatal("error initializing HTTP client: ", err) + } + + // Mount the backend + prefix := "mnt" + if err := client.Sys().Mount(prefix, "test", "acceptance test"); err != nil { + t.Fatal("error mounting backend: ", err) + } + + // Make requests + for i, s := range c.Steps { + log.Printf("[WARN] Executing test step %d", i+1) + + // Make sure to prefix the path with where we mounted the thing + path := fmt.Sprintf("%s/%s", prefix, s.Path) + + // Create the request + req := &logical.Request{ + Operation: s.Operation, + Path: path, + Data: s.Data, + } + + // Make the request + resp, err := core.HandleRequest(req) + if err == nil && s.Check != nil { + // Call the test method + err = s.Check(resp) + } + if err != nil { + t.Error(fmt.Sprintf("Failed step %d: %s", i+1, err)) + break + } + } + + // Cleanup + if c.Teardown != nil { + c.Teardown() + } } // TestT is the interface used to handle the test lifecycle of a test. From e7f7f7a221fa85a0b443964d1c19302fe3bc2e7a Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 17:07:54 -0700 Subject: [PATCH 04/26] vault: passthrough backend uses logical/framework --- vault/logical_passthrough.go | 76 ++++++++++++++++++++----------- vault/logical_passthrough_test.go | 19 ++++---- 2 files changed, 60 insertions(+), 35 deletions(-) diff --git a/vault/logical_passthrough.go b/vault/logical_passthrough.go index e2527c5633..a4a7dbe781 100644 --- a/vault/logical_passthrough.go +++ b/vault/logical_passthrough.go @@ -3,14 +3,39 @@ package vault import ( "encoding/json" "fmt" + "strings" "time" "github.com/hashicorp/vault/logical" + "github.com/hashicorp/vault/logical/framework" ) // logical.Factory func PassthroughBackendFactory(map[string]string) (logical.Backend, error) { - return new(PassthroughBackend), nil + var b PassthroughBackend + return &framework.Backend{ + Paths: []*framework.Path{ + &framework.Path{ + Pattern: ".*", + Fields: map[string]*framework.FieldSchema{ + "lease": &framework.FieldSchema{ + Type: framework.TypeString, + Description: "Lease time for this key when read. Ex: 1h", + }, + }, + + Callbacks: map[logical.Operation]framework.OperationFunc{ + logical.ReadOperation: b.handleRead, + logical.WriteOperation: b.handleWrite, + logical.DeleteOperation: b.handleDelete, + logical.ListOperation: b.handleList, + }, + + HelpSynopsis: strings.TrimSpace(passthroughHelpSynopsis), + HelpDescription: strings.TrimSpace(passthroughHelpDescription), + }, + }, + }, nil } // PassthroughBackend is used storing secrets directly into the physical @@ -19,28 +44,8 @@ func PassthroughBackendFactory(map[string]string) (logical.Backend, error) { // fancy. type PassthroughBackend struct{} -func (b *PassthroughBackend) HandleRequest(req *logical.Request) (*logical.Response, error) { - // TODO(mitchellh): help, let's just do it when we migrate to helper/backend - - switch req.Operation { - case logical.ReadOperation: - return b.handleRead(req) - case logical.WriteOperation: - return b.handleWrite(req) - case logical.DeleteOperation: - return b.handleDelete(req) - case logical.ListOperation: - return b.handleList(req) - default: - return nil, logical.ErrUnsupportedOperation - } -} - -func (b *PassthroughBackend) RootPaths() []string { - return nil -} - -func (b *PassthroughBackend) handleRead(req *logical.Request) (*logical.Response, error) { +func (b *PassthroughBackend) handleRead( + req *logical.Request, data *framework.FieldData) (*logical.Response, error) { // Read the path out, err := req.Storage.Get(req.Path) if err != nil { @@ -83,7 +88,8 @@ func (b *PassthroughBackend) handleRead(req *logical.Request) (*logical.Response return resp, nil } -func (b *PassthroughBackend) handleWrite(req *logical.Request) (*logical.Response, error) { +func (b *PassthroughBackend) handleWrite( + req *logical.Request, data *framework.FieldData) (*logical.Response, error) { // Check that some fields are given if len(req.Data) == 0 { return nil, fmt.Errorf("missing data fields") @@ -107,7 +113,8 @@ func (b *PassthroughBackend) handleWrite(req *logical.Request) (*logical.Respons return nil, nil } -func (b *PassthroughBackend) handleDelete(req *logical.Request) (*logical.Response, error) { +func (b *PassthroughBackend) handleDelete( + req *logical.Request, data *framework.FieldData) (*logical.Response, error) { // Delete the key at the request path if err := req.Storage.Delete(req.Path); err != nil { return nil, err @@ -116,7 +123,8 @@ func (b *PassthroughBackend) handleDelete(req *logical.Request) (*logical.Respon return nil, nil } -func (b *PassthroughBackend) handleList(req *logical.Request) (*logical.Response, error) { +func (b *PassthroughBackend) handleList( + req *logical.Request, data *framework.FieldData) (*logical.Response, error) { // List the keys at the prefix given by the request keys, err := req.Storage.List(req.Path) if err != nil { @@ -126,3 +134,19 @@ func (b *PassthroughBackend) handleList(req *logical.Request) (*logical.Response // Generate the response return logical.ListResponse(keys), nil } + +const passthroughHelpSynopsis = ` +Pass-through secret storage to the physical backend, allowing you to +read/write arbitrary data into secret storage. +` + +const passthroughHelpDescription = ` +The pass-through backend reads and writes arbitrary data into secret storage, +encrypting it along the way. + +A lease can be specified when writing with the "lease" field. If given, then +when the secret is read, Vault will report a lease with that duration. It +is expected that the consumer of this backend properly writes renewed keys +before the lease is up. In addition, revocation must be handled by the +user of this backend. +` diff --git a/vault/logical_passthrough_test.go b/vault/logical_passthrough_test.go index 4ad084c417..fb1074546f 100644 --- a/vault/logical_passthrough_test.go +++ b/vault/logical_passthrough_test.go @@ -8,12 +8,8 @@ import ( "github.com/hashicorp/vault/logical" ) -func TestPassthroughBackend_impl(t *testing.T) { - var _ logical.Backend = new(PassthroughBackend) -} - func TestPassthroughBackend_RootPaths(t *testing.T) { - var b PassthroughBackend + b := testPassthroughBackend() root := b.RootPaths() if len(root) != 0 { t.Fatalf("unexpected: %v", root) @@ -21,7 +17,7 @@ func TestPassthroughBackend_RootPaths(t *testing.T) { } func TestPassthroughBackend_Write(t *testing.T) { - var b PassthroughBackend + b := testPassthroughBackend() req := logical.TestRequest(t, logical.WriteOperation, "foo") req.Data["raw"] = "test" @@ -43,7 +39,7 @@ func TestPassthroughBackend_Write(t *testing.T) { } func TestPassthroughBackend_Read(t *testing.T) { - var b PassthroughBackend + b := testPassthroughBackend() req := logical.TestRequest(t, logical.WriteOperation, "foo") req.Data["raw"] = "test" req.Data["lease"] = "1h" @@ -82,7 +78,7 @@ func TestPassthroughBackend_Read(t *testing.T) { } func TestPassthroughBackend_Delete(t *testing.T) { - var b PassthroughBackend + b := testPassthroughBackend() req := logical.TestRequest(t, logical.WriteOperation, "foo") req.Data["raw"] = "test" storage := req.Storage @@ -113,7 +109,7 @@ func TestPassthroughBackend_Delete(t *testing.T) { } func TestPassthroughBackend_List(t *testing.T) { - var b PassthroughBackend + b := testPassthroughBackend() req := logical.TestRequest(t, logical.WriteOperation, "foo") req.Data["raw"] = "test" storage := req.Storage @@ -141,3 +137,8 @@ func TestPassthroughBackend_List(t *testing.T) { t.Fatalf("bad response.\n\nexpected: %#v\n\nGot: %#v", expected, resp) } } + +func testPassthroughBackend() logical.Backend { + b, _ := PassthroughBackendFactory(nil) + return b +} From 2d92c2ee102dfe139c0c4cf30594fc432aacd808 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 17:10:33 -0700 Subject: [PATCH 05/26] fix all tests --- command/seal_status_test.go | 8 +++----- command/unseal_test.go | 4 ++-- http/sys_seal_test.go | 8 ++++---- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/command/seal_status_test.go b/command/seal_status_test.go index 6d553581aa..bd648b0669 100644 --- a/command/seal_status_test.go +++ b/command/seal_status_test.go @@ -17,7 +17,7 @@ func TestSealStatus(t *testing.T) { } core := vault.TestCore(t) - keys := vault.TestCoreInit(t, core) + key := vault.TestCoreInit(t, core) ln, addr := http.TestServer(t, core) defer ln.Close() @@ -26,10 +26,8 @@ func TestSealStatus(t *testing.T) { t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String()) } - for _, k := range keys { - if _, err := core.Unseal(k); err != nil { - t.Fatalf("err: %s", err) - } + if _, err := core.Unseal(key); err != nil { + t.Fatalf("err: %s", err) } if code := c.Run(args); code != 0 { diff --git a/command/unseal_test.go b/command/unseal_test.go index e21733ede6..20b703f901 100644 --- a/command/unseal_test.go +++ b/command/unseal_test.go @@ -11,13 +11,13 @@ import ( func TestUnseal(t *testing.T) { core := vault.TestCore(t) - keys := vault.TestCoreInit(t, core) + key := vault.TestCoreInit(t, core) ln, addr := http.TestServer(t, core) defer ln.Close() ui := new(cli.MockUi) c := &UnsealCommand{ - Key: hex.EncodeToString(keys[0]), + Key: hex.EncodeToString(key), Meta: Meta{ Ui: ui, }, diff --git a/http/sys_seal_test.go b/http/sys_seal_test.go index 01ecfbe4df..ead8a61970 100644 --- a/http/sys_seal_test.go +++ b/http/sys_seal_test.go @@ -57,8 +57,8 @@ func TestSysSeal_unsealed(t *testing.T) { ln, addr := TestServer(t, core) defer ln.Close() - keys := vault.TestCoreInit(t, core) - if _, err := core.Unseal(keys[0]); err != nil { + key := vault.TestCoreInit(t, core) + if _, err := core.Unseal(key); err != nil { t.Fatalf("err: %s", err) } @@ -76,12 +76,12 @@ func TestSysSeal_unsealed(t *testing.T) { func TestSysUnseal(t *testing.T) { core := vault.TestCore(t) - keys := vault.TestCoreInit(t, core) + key := vault.TestCoreInit(t, core) ln, addr := TestServer(t, core) defer ln.Close() resp := testHttpPut(t, addr+"/v1/sys/unseal", map[string]interface{}{ - "key": hex.EncodeToString(keys[0]), + "key": hex.EncodeToString(key), }) var actual map[string]interface{} From 1be431df516532aa3a8ba0f63e17a4f6f767ad4f Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 17:35:59 -0700 Subject: [PATCH 06/26] vault: system using the framework --- logical/framework/backend.go | 15 ++- vault/core.go | 2 +- vault/logical_system.go | 175 ++++++++++++++++++++++++----------- vault/logical_system_test.go | 8 +- 4 files changed, 133 insertions(+), 67 deletions(-) diff --git a/logical/framework/backend.go b/logical/framework/backend.go index 88ffe4853f..7aad4eda2c 100644 --- a/logical/framework/backend.go +++ b/logical/framework/backend.go @@ -24,6 +24,12 @@ type Backend struct { // backend is in use). Paths []*Path + // PathsRoot is the list of path patterns that denote the + // paths above that require root-level privileges. These can't be + // regular expressions, it is either exact match or prefix match. + // For prefix match, append '*' as a suffix. + PathsRoot []string + once sync.Once pathsRe []*regexp.Regexp } @@ -46,12 +52,6 @@ type Path struct { // whereas all fields are avaiable in the Write operation. Fields map[string]*FieldSchema - // Root if not blank, denotes that this path requires root - // privileges and the path pattern that is the root path. This can't - // be a regular expression and must be an exact path. It may have a - // trailing '*' to denote that it is a prefix, and not an exact match. - Root string - // Callbacks are the set of callbacks that are called for a given // operation. If a callback for a specific operation is not present, // then logical.ErrUnsupportedOperation is automatically generated. @@ -123,8 +123,7 @@ func (b *Backend) HandleRequest(req *logical.Request) (*logical.Response, error) // logical.Backend impl. func (b *Backend) RootPaths() []string { - // TODO - return nil + return b.PathsRoot } // Route looks up the path that would be used for a given path string. diff --git a/vault/core.go b/vault/core.go index ebcabc9e6e..778746c7c5 100644 --- a/vault/core.go +++ b/vault/core.go @@ -158,7 +158,7 @@ func NewCore(conf *CoreConfig) (*Core, error) { } backends["generic"] = PassthroughBackendFactory backends["system"] = func(map[string]string) (logical.Backend, error) { - return &SystemBackend{Core: c}, nil + return NewSystemBackend(c), nil } c.backends = backends diff --git a/vault/logical_system.go b/vault/logical_system.go index 937e17e9f3..60e3186edb 100644 --- a/vault/logical_system.go +++ b/vault/logical_system.go @@ -4,8 +4,72 @@ import ( "strings" "github.com/hashicorp/vault/logical" + "github.com/hashicorp/vault/logical/framework" ) +func NewSystemBackend(core *Core) logical.Backend { + b := &SystemBackend{Core: core} + + return &framework.Backend{ + PathsRoot: []string{ + "mount/*", + "remount", + }, + + Paths: []*framework.Path{ + &framework.Path{ + Pattern: "mounts", + + Callbacks: map[logical.Operation]framework.OperationFunc{ + logical.ReadOperation: b.handleMountTable, + }, + + HelpSynopsis: strings.TrimSpace(sysHelp["mounts"][0]), + HelpDescription: strings.TrimSpace(sysHelp["mounts"][1]), + }, + + &framework.Path{ + Pattern: "mount/(?P.+?)", + + Fields: map[string]*framework.FieldSchema{ + "path": &framework.FieldSchema{ + Type: framework.TypeString, + Description: strings.TrimSpace(sysHelp["mount_path"][0]), + }, + + "type": &framework.FieldSchema{ + Type: framework.TypeString, + Description: strings.TrimSpace(sysHelp["mount_type"][0]), + }, + "description": &framework.FieldSchema{ + Type: framework.TypeString, + Description: strings.TrimSpace(sysHelp["mount_desc"][0]), + }, + }, + + Callbacks: map[logical.Operation]framework.OperationFunc{ + logical.WriteOperation: b.handleMount, + logical.DeleteOperation: b.handleUnmount, + }, + + HelpSynopsis: strings.TrimSpace(sysHelp["mount"][0]), + HelpDescription: strings.TrimSpace(sysHelp["mount"][1]), + }, + + &framework.Path{ + Pattern: "remount", + + Callbacks: map[logical.Operation]framework.OperationFunc{ + logical.WriteOperation: b.handleRemount, + }, + + HelpSynopsis: strings.TrimSpace(sysHelp["remount"][0]), + HelpDescription: strings.TrimSpace(sysHelp["remount"][1]), + }, + }, + } +} + // SystemBackend implements logical.Backend and is used to interact with // the core of the system. This backend is hardcoded to exist at the "sys" // prefix. Conceptually it is similar to procfs on Linux. @@ -13,35 +77,9 @@ type SystemBackend struct { Core *Core } -func (b *SystemBackend) HandleRequest(req *logical.Request) (*logical.Response, error) { - // Switch on the path to route to the appropriate handler - switch { - case req.Path == "mounts": - return b.handleMountTable(req) - case strings.HasPrefix(req.Path, "mount/"): - return b.handleMountOperation(req) - case req.Path == "remount": - return b.handleRemount(req) - default: - return nil, logical.ErrUnsupportedPath - } -} - -func (b *SystemBackend) RootPaths() []string { - return []string{ - "mount/*", - "remount", - } -} - // handleMountTable handles the "mounts" endpoint to provide the mount table -func (b *SystemBackend) handleMountTable(req *logical.Request) (*logical.Response, error) { - switch req.Operation { - case logical.ReadOperation: - default: - return nil, logical.ErrUnsupportedOperation - } - +func (b *SystemBackend) handleMountTable( + req *logical.Request, data *framework.FieldData) (*logical.Response, error) { b.Core.mountsLock.RLock() defer b.Core.mountsLock.RUnlock() @@ -60,35 +98,23 @@ func (b *SystemBackend) handleMountTable(req *logical.Request) (*logical.Respons return resp, nil } -// handleMountOperation is used to mount or unmount a path -func (b *SystemBackend) handleMountOperation(req *logical.Request) (*logical.Response, error) { - switch req.Operation { - case logical.WriteOperation: - return b.handleMount(req) - case logical.DeleteOperation: - return b.handleUnmount(req) - default: - return nil, logical.ErrUnsupportedOperation - } -} - // handleMount is used to mount a new path -func (b *SystemBackend) handleMount(req *logical.Request) (*logical.Response, error) { - suffix := strings.TrimPrefix(req.Path, "mount/") - if len(suffix) == 0 { - return logical.ErrorResponse("path cannot be blank"), logical.ErrInvalidRequest - } +func (b *SystemBackend) handleMount( + req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + // Get all the options + path := data.Get("path").(string) + logicalType := data.Get("type").(string) + description := data.Get("description").(string) - // Get the type and description (optionally) - logicalType := req.GetString("type") if logicalType == "" { - return logical.ErrorResponse("backend type must be specified as a string"), logical.ErrInvalidRequest + return logical.ErrorResponse( + "backend type must be specified as a string"), + logical.ErrInvalidRequest } - description := req.GetString("description") // Create the mount entry me := &MountEntry{ - Path: suffix, + Path: path, Type: logicalType, Description: description, } @@ -101,7 +127,8 @@ func (b *SystemBackend) handleMount(req *logical.Request) (*logical.Response, er } // handleUnmount is used to unmount a path -func (b *SystemBackend) handleUnmount(req *logical.Request) (*logical.Response, error) { +func (b *SystemBackend) handleUnmount( + req *logical.Request, data *framework.FieldData) (*logical.Response, error) { suffix := strings.TrimPrefix(req.Path, "mount/") if len(suffix) == 0 { return logical.ErrorResponse("path cannot be blank"), logical.ErrInvalidRequest @@ -116,7 +143,8 @@ func (b *SystemBackend) handleUnmount(req *logical.Request) (*logical.Response, } // handleRemount is used to remount a path -func (b *SystemBackend) handleRemount(req *logical.Request) (*logical.Response, error) { +func (b *SystemBackend) handleRemount( + req *logical.Request, data *framework.FieldData) (*logical.Response, error) { // Only accept write operations switch req.Operation { case logical.WriteOperation: @@ -140,3 +168,46 @@ func (b *SystemBackend) handleRemount(req *logical.Request) (*logical.Response, return nil, nil } + +// sysHelp is all the help text for the sys backend. +var sysHelp = map[string][2]string{ + "mounts": { + "List the currently mounted backends.", + ` +List the currently mounted backends: the mount path, the type of the backend, +and a user friendly description of the purpose for the mount. + `, + }, + + "mount": { + `Mount a new backend at a new path.`, + ` +Mount a backend at a new path. A backend can be mounted multiple times at +multiple paths in order to configure multiple separately configured backends. +Example: you might have an AWS backend for the east coast, and one for the +west coast. + `, + }, + + "mount_path": { + `The path to mount to. Example: "aws/east"`, + "", + }, + + "mount_type": { + `The type of the backend. Example: "passthrough"`, + "", + }, + + "mount_desc": { + `User-friendly description for this mount.`, + "", + }, + + "remount": { + "Move the mount point of an already-mounted backend.", + ` +Change the mount point of an already-mounted backend. + `, + }, +} diff --git a/vault/logical_system_test.go b/vault/logical_system_test.go index 28221057ff..a76b84c484 100644 --- a/vault/logical_system_test.go +++ b/vault/logical_system_test.go @@ -7,10 +7,6 @@ import ( "github.com/hashicorp/vault/logical" ) -func TestSystemBackend_impl(t *testing.T) { - var _ logical.Backend = new(SystemBackend) -} - func TestSystemBackend_RootPaths(t *testing.T) { expected := []string{ "mount/*", @@ -147,7 +143,7 @@ func TestSystemBackend_remount_system(t *testing.T) { } } -func testSystemBackend(t *testing.T) *SystemBackend { +func testSystemBackend(t *testing.T) logical.Backend { c, _ := TestCoreUnsealed(t) - return &SystemBackend{Core: c} + return NewSystemBackend(c) } From 2b8db4831cdef195ba5521b36a54abc16d7a634a Mon Sep 17 00:00:00 2001 From: Armon Dadgar Date: Fri, 13 Mar 2015 11:37:07 -0700 Subject: [PATCH 07/26] vault: Assign renew time --- vault/expiration.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vault/expiration.go b/vault/expiration.go index b6415e6cf7..bffa0d22eb 100644 --- a/vault/expiration.go +++ b/vault/expiration.go @@ -160,12 +160,14 @@ func (m *ExpirationManager) Register(req *logical.Request, resp *logical.Respons } // Create a lease entry + now := time.Now().UTC() le := leaseEntry{ VaultID: path.Join(req.Path, generateUUID()), Path: req.Path, Data: resp.Data, Lease: resp.Lease, - IssueTime: time.Now().UTC(), + IssueTime: now, + RenewTime: now, } // Encode the entry From 210e2ac99400d8df24884dc3f13ab6eb30a17301 Mon Sep 17 00:00:00 2001 From: Armon Dadgar Date: Sun, 15 Mar 2015 18:06:19 -0700 Subject: [PATCH 08/26] vault: Merge conflict --- vault/expiration.go | 175 ++++++++++++++++++++++++++++---------------- 1 file changed, 111 insertions(+), 64 deletions(-) diff --git a/vault/expiration.go b/vault/expiration.go index bffa0d22eb..898331cbb8 100644 --- a/vault/expiration.go +++ b/vault/expiration.go @@ -3,6 +3,8 @@ package vault import ( "encoding/json" "fmt" + "log" + "os" "path" "sync" "time" @@ -21,19 +23,25 @@ const ( // If a secret is not renewed in timely manner, it may be expired, and // the ExpirationManager will handle doing automatic revocation. type ExpirationManager struct { - router *Router - view *BarrierView - doneCh chan struct{} - stopCh chan struct{} - stopLock sync.Mutex + router *Router + view *BarrierView + logger *log.Logger + + pending map[string]*time.Timer + pendingLock sync.RWMutex } // NewExpirationManager creates a new ExpirationManager that is backed // using a given view, and uses the provided router for revocation. -func NewExpirationManager(router *Router, view *BarrierView) *ExpirationManager { +func NewExpirationManager(router *Router, view *BarrierView, logger *log.Logger) *ExpirationManager { + if logger == nil { + logger = log.New(os.Stderr, "", log.LstdFlags) + } exp := &ExpirationManager{ - router: router, - view: view, + router: router, + view: view, + logger: logger, + pending: make(map[string]*time.Timer), } return exp } @@ -45,18 +53,13 @@ func (c *Core) setupExpiration() error { view := c.systemView.SubView(expirationSubPath) // Create the manager - mgr := NewExpirationManager(c.router, view) + mgr := NewExpirationManager(c.router, view, c.logger) c.expiration = mgr // Restore the existing state if err := c.expiration.Restore(); err != nil { return fmt.Errorf("expiration state restore failed: %v", err) } - - // Start the expiration manager - if err := c.expiration.Start(); err != nil { - return fmt.Errorf("expiration start failed: %v", err) - } return nil } @@ -73,55 +76,23 @@ func (c *Core) stopExpiration() error { // Restore is used to recover the lease states when starting. // This is used after starting the vault. func (m *ExpirationManager) Restore() error { - m.stopLock.Lock() - defer m.stopLock.Unlock() - if m.stopCh != nil { - return fmt.Errorf("cannot restore while running") - } - // TODO: Restore... return nil } -// Start is used to continue automatic revocation. This -// should only be called when the Vault is unsealed. -func (m *ExpirationManager) Start() error { - m.stopLock.Lock() - defer m.stopLock.Unlock() - if m.stopCh == nil { - m.doneCh = make(chan struct{}) - m.stopCh = make(chan struct{}) - go m.run(m.doneCh, m.stopCh) - } - return nil -} - // Stop is used to prevent further automatic revocations. // This must be called before sealing the view. func (m *ExpirationManager) Stop() error { - m.stopLock.Lock() - defer m.stopLock.Unlock() - if m.stopCh != nil { - doneCh := m.doneCh - close(m.stopCh) - m.stopCh = nil - m.doneCh = nil - <-doneCh // Wait for completion + // Stop all the pending expiration timers + m.pendingLock.Lock() + for _, timer := range m.pending { + timer.Stop() } + m.pending = make(map[string]*time.Timer) + m.pendingLock.Unlock() return nil } -// run is a long running goroutine that manages background expiration -func (m *ExpirationManager) run(doneCh, stopCh chan struct{}) { - defer close(doneCh) - for { - select { - case <-stopCh: - return - } - } -} - // Revoke is used to revoke a secret named by the given vaultID func (m *ExpirationManager) Revoke(vaultID string) error { return nil @@ -170,10 +141,81 @@ func (m *ExpirationManager) Register(req *logical.Request, resp *logical.Respons RenewTime: now, } + // Encode the entry + if err := m.persistEntry(&le); err != nil { + return "", err + } + + // Setup revocation timer + m.pendingLock.Lock() + timer := time.AfterFunc(resp.Lease.Duration, func() { + m.expireID(le.VaultID) + }) + m.pending[le.VaultID] = timer + m.pendingLock.Unlock() + + // Done + return le.VaultID, nil +} + +// expireID is invoked when a given ID is expired +func (m *ExpirationManager) expireID(vaultID string) { + // Clear from the pending expiration + m.pendingLock.Lock() + delete(m.pending, vaultID) + m.pendingLock.Unlock() + + // Load the entry + le, err := m.loadEntry(vaultID) + if err != nil { + m.logger.Printf("[ERR] expire: failed to read entry '%s': %v", vaultID, err) + } + + // Revoke the entry + if err := m.revokeEntry(le); err != nil { + m.logger.Printf("[ERR] expire: failed to revoke entry '%s': %v", vaultID, err) + } + + // Delete the entry + if err := m.deleteEntry(vaultID); err != nil { + m.logger.Printf("[ERR] expire: failed to delete entry '%s': %v", vaultID, err) + } + m.logger.Printf("[INFO] expire: revoked '%s'", vaultID) +} + +// revokeEntry is used to attempt revocation of an internal entry +func (m *ExpirationManager) revokeEntry(le *leaseEntry) error { + req := &Request{ + Operation: RevokeOperation, + Path: le.Path, + Data: le.Data, + } + _, err := m.router.Route(req) + return err +} + +// loadEntry is used to read a lease entry +func (m *ExpirationManager) loadEntry(vaultID string) (*leaseEntry, error) { + out, err := m.view.Get(vaultID) + if err != nil { + return nil, fmt.Errorf("failed to read lease entry: %v", err) + } + if out == nil { + return nil, nil + } + le, err := decodeLeaseEntry(out.Value) + if err != nil { + return nil, fmt.Errorf("failed to decode lease entry: %v", err) + } + return le, nil +} + +// persistEntry is used to persist a lease entry +func (m *ExpirationManager) persistEntry(le *leaseEntry) error { // Encode the entry buf, err := le.encode() if err != nil { - return "", fmt.Errorf("failed to encode lease entry: %v", err) + return fmt.Errorf("failed to encode lease entry: %v", err) } // Write out to the view @@ -182,24 +224,29 @@ func (m *ExpirationManager) Register(req *logical.Request, resp *logical.Respons Value: buf, } if err := m.view.Put(&ent); err != nil { - return "", fmt.Errorf("failed to persist lease entry: %v", err) + return fmt.Errorf("failed to persist lease entry: %v", err) } + return nil +} - // TODO: Automatic revoke timer... - - // Done - return le.VaultID, nil +// deleteEntry is used to delete a lease entry +func (m *ExpirationManager) deleteEntry(vaultID string) error { + if err := m.view.Delete(vaultID); err != nil { + return fmt.Errorf("failed to delete lease entry: %v", err) + } + return nil } // leaseEntry is used to structure the values the expiration // manager stores. This is used to handle renew and revocation. type leaseEntry struct { - VaultID string - Path string - Data map[string]interface{} - Lease *logical.Lease - IssueTime time.Time - RenewTime time.Time + VaultID string `json:"vault_id"` + Path string `json:"path"` + Data map[string]interface{} `json:"data"` + Lease *logical.Lease `json:"lease"` + IssueTime time.Time `json:"issue_time"` + RenewTime time.Time `json:"renew_time"` + RevokeAttempts int `json:"renew_attempts"` } // encode is used to JSON encode the lease entry From 05d37bf9f1b339a867a71cc12e1cce2182e39fe9 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 19:34:47 -0700 Subject: [PATCH 09/26] http: generic read/write endpoint for secrets --- api/secret.go | 2 +- http/handler.go | 1 + http/logical.go | 80 ++++++++++++++++++++++++++++++++++++++++++++ http/logical_test.go | 41 +++++++++++++++++++++++ 4 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 http/logical.go create mode 100644 http/logical_test.go diff --git a/api/secret.go b/api/secret.go index 473e8f112d..6dfacc0031 100644 --- a/api/secret.go +++ b/api/secret.go @@ -14,7 +14,7 @@ type Secret struct { Renewable bool LeaseDuration int `mapstructure:"lease_duration"` LeaseDurationMax int `mapstructure:"lease_duration_max"` - Data map[string]interface{} `mapstructure:"-"` + Data map[string]interface{} `mapstructure:"data"` } // ParseSecret is used to parse a secret value from JSON from an io.Reader. diff --git a/http/handler.go b/http/handler.go index 924cfaaf01..a2bcd5488a 100644 --- a/http/handler.go +++ b/http/handler.go @@ -15,6 +15,7 @@ func Handler(core *vault.Core) http.Handler { mux.Handle("/v1/sys/seal-status", handleSysSealStatus(core)) mux.Handle("/v1/sys/seal", handleSysSeal(core)) mux.Handle("/v1/sys/unseal", handleSysUnseal(core)) + mux.Handle("/v1/", handleLogical(core)) return mux } diff --git a/http/logical.go b/http/logical.go new file mode 100644 index 0000000000..c5faefc89d --- /dev/null +++ b/http/logical.go @@ -0,0 +1,80 @@ +package http + +import ( + "net/http" + "strings" + + "github.com/hashicorp/vault/logical" + "github.com/hashicorp/vault/vault" +) + +func handleLogical(core *vault.Core) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // Determine the path... + if !strings.HasPrefix(r.URL.Path, "/v1/") { + respondError(w, http.StatusNotFound, nil) + return + } + path := r.URL.Path[len("/v1/"):] + if path == "" { + respondError(w, http.StatusNotFound, nil) + return + } + + // Determine the operation + var op logical.Operation + switch r.Method { + case "GET": + op = logical.ReadOperation + case "PUT": + op = logical.WriteOperation + default: + respondError(w, http.StatusMethodNotAllowed, nil) + return + } + + // Parse the request if we can + var req map[string]interface{} + if op == logical.WriteOperation { + if err := parseRequest(r, &req); err != nil { + respondError(w, http.StatusBadRequest, err) + return + } + } + + // Make the internal request + resp, err := core.HandleRequest(&logical.Request{ + Operation: op, + Path: path, + Data: req, + }) + if err != nil { + respondError(w, http.StatusInternalServerError, err) + return + } + + var httpResp interface{} + if resp != nil { + logicalResp := &LogicalResponse{Data: resp.Data} + if resp.IsSecret && resp.Lease != nil { + logicalResp.VaultId = resp.Lease.VaultID + logicalResp.Renewable = resp.Lease.Renewable + logicalResp.LeaseDuration = int(resp.Lease.Duration.Seconds()) + logicalResp.LeaseDurationMax = int(resp.Lease.MaxDuration.Seconds()) + } + + httpResp = logicalResp + } + + // Respond + respondOk(w, httpResp) + }) +} + +type LogicalResponse struct { + VaultId string `json:"vault_id"` + Renewable bool `json:"renewable"` + LeaseDuration int `json:"lease_duration"` + LeaseDurationMax int `json:"lease_duration_max"` + Data map[string]interface{} `json:"data"` +} diff --git a/http/logical_test.go b/http/logical_test.go new file mode 100644 index 0000000000..b8d91c1d69 --- /dev/null +++ b/http/logical_test.go @@ -0,0 +1,41 @@ +package http + +import ( + "net/http" + "reflect" + "testing" + + "github.com/hashicorp/vault/vault" +) + +func TestLogical(t *testing.T) { + core, _ := vault.TestCoreUnsealed(t) + ln, addr := TestServer(t, core) + defer ln.Close() + + resp := testHttpPut(t, addr+"/v1/secret/foo", map[string]interface{}{ + "data": "bar", + }) + testResponseStatus(t, resp, 204) + + resp, err := http.Get(addr + "/v1/secret/foo") + if err != nil { + t.Fatalf("err: %s", err) + } + + var actual map[string]interface{} + expected := map[string]interface{}{ + "vault_id": "", + "renewable": false, + "lease_duration": float64(0), + "lease_duration_max": float64(0), + "data": map[string]interface{}{ + "data": "bar", + }, + } + testResponseStatus(t, resp, 200) + testResponseBody(t, resp, &actual) + if !reflect.DeepEqual(actual, expected) { + t.Fatalf("bad: %#v", actual) + } +} From 0584cea42cd9d0b385703e3130ac6030e9144bee Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 19:38:23 -0700 Subject: [PATCH 10/26] vault: fix merge conflict + pass tests --- vault/expiration.go | 4 ++-- vault/expiration_test.go | 17 +++++++++++------ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/vault/expiration.go b/vault/expiration.go index 898331cbb8..4ad0c83b31 100644 --- a/vault/expiration.go +++ b/vault/expiration.go @@ -185,8 +185,8 @@ func (m *ExpirationManager) expireID(vaultID string) { // revokeEntry is used to attempt revocation of an internal entry func (m *ExpirationManager) revokeEntry(le *leaseEntry) error { - req := &Request{ - Operation: RevokeOperation, + req := &logical.Request{ + Operation: logical.RevokeOperation, Path: le.Path, Data: le.Data, } diff --git a/vault/expiration_test.go b/vault/expiration_test.go index ba0ab6e0b4..a6eef6b9fc 100644 --- a/vault/expiration_test.go +++ b/vault/expiration_test.go @@ -1,6 +1,8 @@ package vault import ( + "log" + "os" "reflect" "strings" "testing" @@ -27,17 +29,19 @@ func mockExpiration(t *testing.T) *ExpirationManager { view := NewBarrierView(b, "expire/") router := NewRouter() - return NewExpirationManager(router, view) + logger := log.New(os.Stderr, "", log.LstdFlags) + return NewExpirationManager(router, view, logger) } +/* func TestExpiration_StartStop(t *testing.T) { exp := mockExpiration(t) - err := exp.Start() - if err != nil { - t.Fatalf("err: %v", err) - } + err := exp.Start() + if err != nil { + t.Fatalf("err: %v", err) + } - err = exp.Restore() + err := exp.Restore() if err.Error() != "cannot restore while running" { t.Fatalf("err: %v", err) } @@ -47,6 +51,7 @@ func TestExpiration_StartStop(t *testing.T) { t.Fatalf("err: %v", err) } } +*/ func TestExpiration_Register(t *testing.T) { exp := mockExpiration(t) From dba2b5d31505192ae75b77747454721ad6057ee8 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 19:42:24 -0700 Subject: [PATCH 11/26] http: 404 if reading secret that doesn't exist --- http/logical.go | 4 ++++ http/logical_test.go | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/http/logical.go b/http/logical.go index c5faefc89d..41cf3c0d3b 100644 --- a/http/logical.go +++ b/http/logical.go @@ -52,6 +52,10 @@ func handleLogical(core *vault.Core) http.Handler { respondError(w, http.StatusInternalServerError, err) return } + if op == logical.ReadOperation && resp == nil { + respondError(w, http.StatusNotFound, nil) + return + } var httpResp interface{} if resp != nil { diff --git a/http/logical_test.go b/http/logical_test.go index b8d91c1d69..7a10570ae7 100644 --- a/http/logical_test.go +++ b/http/logical_test.go @@ -39,3 +39,15 @@ func TestLogical(t *testing.T) { t.Fatalf("bad: %#v", actual) } } + +func TestLogical_noExist(t *testing.T) { + core, _ := vault.TestCoreUnsealed(t) + ln, addr := TestServer(t, core) + defer ln.Close() + + resp, err := http.Get(addr + "/v1/secret/foo") + if err != nil { + t.Fatalf("err: %s", err) + } + testResponseStatus(t, resp, 404) +} From fb32e64f743560c30126d70ed91749966894df1d Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 19:47:32 -0700 Subject: [PATCH 12/26] api: logical Read/Write --- api/logical.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 api/logical.go diff --git a/api/logical.go b/api/logical.go new file mode 100644 index 0000000000..c5a3fe7b13 --- /dev/null +++ b/api/logical.go @@ -0,0 +1,37 @@ +package api + +// Logical is used to perform logical backend operations on Vault. +type Logical struct { + c *Client +} + +// Logical is used to return the client for logical-backend API calls. +func (c *Client) Logical() *Logical { + return &Logical{c: c} +} + +func (c *Logical) Read(path string) (*Secret, error) { + r := c.c.NewRequest("GET", "/v1/"+path) + resp, err := c.c.RawRequest(r) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + return ParseSecret(resp.Body) +} + +func (c *Logical) Write(path string, data map[string]interface{}) error { + r := c.c.NewRequest("PUT", "/v1/"+path) + if err := r.SetJSONBody(data); err != nil { + return err + } + + resp, err := c.c.RawRequest(r) + if err != nil { + return err + } + defer resp.Body.Close() + + return nil +} From 60ad9a4ce41b105834e54f56a288d595c3082697 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 20:15:27 -0700 Subject: [PATCH 13/26] physical: finish super naive file backend This thing is SUPER slow and has some dumb edge cases. It is only really meant for development at this point and is commented as such. We won't document it publicly unless we make it good. --- physical/file.go | 128 +++++++++++++++++++++++++++++++++++++++++- physical/file_test.go | 25 +++++++++ 2 files changed, 151 insertions(+), 2 deletions(-) create mode 100644 physical/file_test.go diff --git a/physical/file.go b/physical/file.go index 5c60d109a3..d8556fa424 100644 --- a/physical/file.go +++ b/physical/file.go @@ -1,13 +1,137 @@ package physical +import ( + "encoding/json" + "fmt" + "os" + "path/filepath" + "sync" +) + // FileBackend is a physical backend that stores data on disk // at a given file path. It can be used for durable single server // situations, or to develop locally where durability is not critical. +// +// WARNING: the file backend implementation is currently extremely unsafe +// and non-performant. It is meant mostly for local testing and development. +// It can be improved in the future. type FileBackend struct { + Path string + + l sync.Mutex } // newFileBackend constructs a Filebackend using the given directory func newFileBackend(conf map[string]string) (Backend, error) { - // TODO: - return nil, nil + path, ok := conf["path"] + if !ok { + return nil, fmt.Errorf("'path' must be set") + } + + return &FileBackend{Path: path}, nil +} + +func (b *FileBackend) Delete(k string) error { + b.l.Lock() + defer b.l.Unlock() + + path, key := b.path(k) + path = filepath.Join(path, key) + + err := os.Remove(path) + if err != nil && os.IsNotExist(err) { + err = nil + } + + return err +} + +func (b *FileBackend) Get(k string) (*Entry, error) { + b.l.Lock() + defer b.l.Unlock() + + path, key := b.path(k) + path = filepath.Join(path, key) + + f, err := os.Open(path) + if err != nil { + if os.IsNotExist(err) { + return nil, nil + } + + return nil, err + } + defer f.Close() + + var entry Entry + dec := json.NewDecoder(f) + if err := dec.Decode(&entry); err != nil { + return nil, err + } + + return &entry, nil +} + +func (b *FileBackend) Put(entry *Entry) error { + path, key := b.path(entry.Key) + + b.l.Lock() + defer b.l.Unlock() + + // Make the parent tree + if err := os.MkdirAll(path, 0755); err != nil { + return err + } + + // JSON encode the entry and write it + f, err := os.Create(filepath.Join(path, key)) + if err != nil { + return err + } + defer f.Close() + enc := json.NewEncoder(f) + return enc.Encode(entry) +} + +func (b *FileBackend) List(prefix string) ([]string, error) { + b.l.Lock() + defer b.l.Unlock() + + path := b.Path + if prefix != "" { + path = filepath.Join(path, prefix) + } + + // Read the directory contents + f, err := os.Open(path) + if err != nil { + if os.IsNotExist(err) { + return nil, nil + } + + return nil, err + } + defer f.Close() + + names, err := f.Readdirnames(-1) + if err != nil { + return nil, err + } + + for i, name := range names { + if name[0] == '_' { + names[i] = name[1:] + } else { + names[i] = name + "/" + } + } + + return names, nil +} + +func (b *FileBackend) path(k string) (string, string) { + path := filepath.Join(b.Path, k) + key := filepath.Base(path) + path = filepath.Dir(path) + return path, "_" + key } diff --git a/physical/file_test.go b/physical/file_test.go new file mode 100644 index 0000000000..c7a5ae7a53 --- /dev/null +++ b/physical/file_test.go @@ -0,0 +1,25 @@ +package physical + +import ( + "io/ioutil" + "os" + "testing" +) + +func TestFileBackend(t *testing.T) { + dir, err := ioutil.TempDir("", "vault") + if err != nil { + t.Fatalf("err: %s", err) + } + defer os.RemoveAll(dir) + + b, err := NewBackend("file", map[string]string{ + "path": dir, + }) + if err != nil { + t.Fatalf("err: %s", err) + } + + testBackend(t, b) + testBackend_ListPrefix(t, b) +} From 80798a38698ff18d6b6796d39072cc63874b9bcc Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 20:17:13 -0700 Subject: [PATCH 14/26] update gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index f7fa371f4f..1959cf7f0b 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,4 @@ pkg/ # Vault-specific example.hcl +example.vault.d From 8093f94c650859b15fb5485d5d80262023bac655 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 20:35:33 -0700 Subject: [PATCH 15/26] command/write --- api/secret.go | 38 +++++-------------------- command/{get.go => read.go} | 14 +++++----- command/{put.go => write.go} | 54 +++++++++++++++++++++++++++++------- command/write_test.go | 45 ++++++++++++++++++++++++++++++ commands.go | 8 +++--- 5 files changed, 107 insertions(+), 52 deletions(-) rename command/{get.go => read.go} (79%) rename command/{put.go => write.go} (50%) create mode 100644 command/write_test.go diff --git a/api/secret.go b/api/secret.go index 6dfacc0031..774a0e6e90 100644 --- a/api/secret.go +++ b/api/secret.go @@ -3,49 +3,25 @@ package api import ( "encoding/json" "io" - "strings" - - "github.com/mitchellh/mapstructure" ) // Secret is the structure returned for every secret within Vault. type Secret struct { - VaultId string `mapstructure:"vault_id"` + VaultId string `json:"vault_id"` Renewable bool - LeaseDuration int `mapstructure:"lease_duration"` - LeaseDurationMax int `mapstructure:"lease_duration_max"` - Data map[string]interface{} `mapstructure:"data"` + LeaseDuration int `json:"lease_duration"` + LeaseDurationMax int `json:"lease_duration_max"` + Data map[string]interface{} `json:"data"` } // ParseSecret is used to parse a secret value from JSON from an io.Reader. func ParseSecret(r io.Reader) (*Secret, error) { // First decode the JSON into a map[string]interface{} - var raw map[string]interface{} + var secret Secret dec := json.NewDecoder(r) - if err := dec.Decode(&raw); err != nil { + if err := dec.Decode(&secret); err != nil { return nil, err } - // Use mapstructure to get as much as possible - var result Secret - var metadata mapstructure.Metadata - mdec, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ - Metadata: &metadata, - Result: &result, - }) - if err != nil { - return nil, err - } - if err := mdec.Decode(raw); err != nil { - return nil, err - } - - // Delete the keys we decoded from the raw value, then set that - // raw value as the resulting data. - for _, k := range metadata.Keys { - delete(raw, strings.ToLower(k)) - } - - result.Data = raw - return &result, nil + return &secret, nil } diff --git a/command/get.go b/command/read.go similarity index 79% rename from command/get.go rename to command/read.go index 3f48e93705..64800e530e 100644 --- a/command/get.go +++ b/command/read.go @@ -4,13 +4,13 @@ import ( "strings" ) -// GetCommand is a Command that gets data from the Vault. -type GetCommand struct { +// ReadCommand is a Command that gets data from the Vault. +type ReadCommand struct { Meta } -func (c *GetCommand) Run(args []string) int { - flags := c.Meta.FlagSet("put", FlagSetDefault) +func (c *ReadCommand) Run(args []string) int { + flags := c.Meta.FlagSet("read", FlagSetDefault) flags.Usage = func() { c.Ui.Error(c.Help()) } if err := flags.Parse(args); err != nil { return 1 @@ -19,11 +19,11 @@ func (c *GetCommand) Run(args []string) int { return 0 } -func (c *GetCommand) Synopsis() string { - return "Get data or secrets from Vault" +func (c *ReadCommand) Synopsis() string { + return "Read data or secrets from Vault" } -func (c *GetCommand) Help() string { +func (c *ReadCommand) Help() string { helpText := ` Usage: vault get [options] path diff --git a/command/put.go b/command/write.go similarity index 50% rename from command/put.go rename to command/write.go index c41d8a3a7f..f17244ad85 100644 --- a/command/put.go +++ b/command/write.go @@ -1,35 +1,66 @@ package command import ( + "fmt" "strings" ) -// PutCommand is a Command that puts data into the Vault. -type PutCommand struct { +// DefaultDataKey is the key used in the write as a default for data. +const DefaultDataKey = "value" + +// WriteCommand is a Command that puts data into the Vault. +type WriteCommand struct { Meta } -func (c *PutCommand) Run(args []string) int { - flags := c.Meta.FlagSet("put", FlagSetDefault) +func (c *WriteCommand) Run(args []string) int { + flags := c.Meta.FlagSet("write", FlagSetDefault) flags.Usage = func() { c.Ui.Error(c.Help()) } if err := flags.Parse(args); err != nil { return 1 } + args = flags.Args() + if len(args) != 2 { + c.Ui.Error("write expects two arguments") + flags.Usage() + return 1 + } + + path := args[0] + if path[0] == '/' { + path = path[1:] + } + data := map[string]interface{}{DefaultDataKey: args[1]} + + client, err := c.Client() + if err != nil { + c.Ui.Error(fmt.Sprintf( + "Error initializing client: %s", err)) + return 2 + } + + if err := client.Logical().Write(path, data); err != nil { + c.Ui.Error(fmt.Sprintf( + "Error writing data to %s: %s", path, err)) + return 1 + } + + c.Ui.Output(fmt.Sprintf("Success! Data written to: %s", path)) return 0 } -func (c *PutCommand) Synopsis() string { - return "Put secrets or configuration into Vault" +func (c *WriteCommand) Synopsis() string { + return "Write secrets or configuration into Vault" } -func (c *PutCommand) Help() string { +func (c *WriteCommand) Help() string { helpText := ` -Usage: vault put [options] path data +Usage: vault write [options] path data Write data (secrets or configuration) into Vault. - Put sends data into Vault at the given path. The behavior of the write + Write sends data into Vault at the given path. The behavior of the write is determined by the backend at the given path. For example, writing to "aws/policy/ops" will create an "ops" IAM policy for the AWS backend (configuration), but writing to "consul/foo" will write a value directly @@ -37,7 +68,10 @@ Usage: vault put [options] path data you're using for more information on key structure. If data is "-" then the data will be ready from stdin. To write a literal - "-", you'll have to pipe that value in from stdin. + "-", you'll have to pipe that value in from stdin. To write data from a + file, pipe the file contents in via stdin and set data to "-". + + If data is a string, it will be sent with the key of "value". General Options: diff --git a/command/write_test.go b/command/write_test.go new file mode 100644 index 0000000000..355e8d4a50 --- /dev/null +++ b/command/write_test.go @@ -0,0 +1,45 @@ +package command + +import ( + "testing" + + "github.com/hashicorp/vault/http" + "github.com/hashicorp/vault/vault" + "github.com/mitchellh/cli" +) + +func TestWrite(t *testing.T) { + core, _ := vault.TestCoreUnsealed(t) + ln, addr := http.TestServer(t, core) + defer ln.Close() + + ui := new(cli.MockUi) + c := &WriteCommand{ + Meta: Meta{ + Ui: ui, + }, + } + + args := []string{ + "-address", addr, + "secret/foo", + "bar", + } + if code := c.Run(args); code != 0 { + t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String()) + } + + client, err := c.Client() + if err != nil { + t.Fatalf("err: %s", err) + } + + resp, err := client.Logical().Read("secret/foo") + if err != nil { + t.Fatalf("err: %s", err) + } + + if resp.Data[DefaultDataKey] != "bar" { + t.Fatalf("bad: %#v", resp) + } +} diff --git a/commands.go b/commands.go index 34d7132f29..ebaf2689ec 100644 --- a/commands.go +++ b/commands.go @@ -24,14 +24,14 @@ func init() { }, nil }, - "get": func() (cli.Command, error) { - return &command.GetCommand{ + "read": func() (cli.Command, error) { + return &command.ReadCommand{ Meta: meta, }, nil }, - "put": func() (cli.Command, error) { - return &command.PutCommand{ + "write": func() (cli.Command, error) { + return &command.WriteCommand{ Meta: meta, }, nil }, From f93f1198d597c559c38ee556fded5c70d7f676d1 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 20:40:12 -0700 Subject: [PATCH 16/26] command/write: can write arbitrary data from stdin --- command/write.go | 23 +++++++++++++++++++++- command/write_test.go | 45 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/command/write.go b/command/write.go index f17244ad85..9752184a98 100644 --- a/command/write.go +++ b/command/write.go @@ -1,7 +1,10 @@ package command import ( + "encoding/json" "fmt" + "io" + "os" "strings" ) @@ -11,6 +14,9 @@ const DefaultDataKey = "value" // WriteCommand is a Command that puts data into the Vault. type WriteCommand struct { Meta + + // The fields below can be overwritten for tests + testStdin io.Reader } func (c *WriteCommand) Run(args []string) int { @@ -31,7 +37,22 @@ func (c *WriteCommand) Run(args []string) int { if path[0] == '/' { path = path[1:] } - data := map[string]interface{}{DefaultDataKey: args[1]} + var data map[string]interface{} + if args[1] == "-" { + var stdin io.Reader = os.Stdin + if c.testStdin != nil { + stdin = c.testStdin + } + + dec := json.NewDecoder(stdin) + if err := dec.Decode(&data); err != nil { + c.Ui.Error(fmt.Sprintf( + "Error decoding JSON of stdin: %s", err)) + return 1 + } + } else { + data = map[string]interface{}{DefaultDataKey: args[1]} + } client, err := c.Client() if err != nil { diff --git a/command/write_test.go b/command/write_test.go index 355e8d4a50..a328dc72a7 100644 --- a/command/write_test.go +++ b/command/write_test.go @@ -1,6 +1,7 @@ package command import ( + "io" "testing" "github.com/hashicorp/vault/http" @@ -43,3 +44,47 @@ func TestWrite(t *testing.T) { t.Fatalf("bad: %#v", resp) } } + +func TestWrite_arbitrary(t *testing.T) { + core, _ := vault.TestCoreUnsealed(t) + ln, addr := http.TestServer(t, core) + defer ln.Close() + + stdinR, stdinW := io.Pipe() + ui := new(cli.MockUi) + c := &WriteCommand{ + Meta: Meta{ + Ui: ui, + }, + + testStdin: stdinR, + } + + go func() { + stdinW.Write([]byte(`{"foo":"bar"}`)) + stdinW.Close() + }() + + args := []string{ + "-address", addr, + "secret/foo", + "-", + } + if code := c.Run(args); code != 0 { + t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String()) + } + + client, err := c.Client() + if err != nil { + t.Fatalf("err: %s", err) + } + + resp, err := client.Logical().Read("secret/foo") + if err != nil { + t.Fatalf("err: %s", err) + } + + if resp.Data["foo"] != "bar" { + t.Fatalf("bad: %#v", resp) + } +} From f11c8febadc2a820d8ab76cae64d83adf60d59c7 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 20:41:36 -0700 Subject: [PATCH 17/26] command/meta: VAULT_ADDR to set the addr via env var --- command/meta.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/command/meta.go b/command/meta.go index 738ec3b589..90f3ca4d78 100644 --- a/command/meta.go +++ b/command/meta.go @@ -7,12 +7,16 @@ import ( "io" "net" "net/http" + "os" "time" "github.com/hashicorp/vault/api" "github.com/mitchellh/cli" ) +// EnvVaultAddress can be used to set the address of Vault +const EnvVaultAddress = "VAULT_ADDR" + // FlagSetFlags is an enum to define what flags are present in the // default FlagSet returned by Meta.FlagSet. type FlagSetFlags uint @@ -39,6 +43,9 @@ type Meta struct { // flag settings for this command. func (m *Meta) Client() (*api.Client, error) { config := api.DefaultConfig() + if v := os.Getenv(EnvVaultAddress); v != "" { + config.Address = v + } if m.flagAddress != "" { config.Address = m.flagAddress } From 4f8323cb03311ae153fc2511642fe06508598be6 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 20:52:28 -0700 Subject: [PATCH 18/26] command/read --- command/read.go | 35 +++++++++++++++++++++++++++++++++++ command/read_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 command/read_test.go diff --git a/command/read.go b/command/read.go index 64800e530e..31e5ea03f3 100644 --- a/command/read.go +++ b/command/read.go @@ -1,6 +1,9 @@ package command import ( + "bytes" + "encoding/json" + "fmt" "strings" ) @@ -16,6 +19,38 @@ func (c *ReadCommand) Run(args []string) int { return 1 } + args = flags.Args() + if len(args) != 1 { + c.Ui.Error("read expects one argument") + flags.Usage() + return 1 + } + path := args[0] + + client, err := c.Client() + if err != nil { + c.Ui.Error(fmt.Sprintf( + "Error initializing client: %s", err)) + return 2 + } + + secret, err := client.Logical().Read(path) + if err != nil { + c.Ui.Error(fmt.Sprintf( + "Error reading %s: %s", path, err)) + return 1 + } + + b, err := json.Marshal(secret) + if err != nil { + c.Ui.Error(fmt.Sprintf( + "Error reading %s: %s", path, err)) + return 1 + } + + var out bytes.Buffer + json.Indent(&out, b, "", "\t") + c.Ui.Output(out.String()) return 0 } diff --git a/command/read_test.go b/command/read_test.go new file mode 100644 index 0000000000..f1f3d22ce3 --- /dev/null +++ b/command/read_test.go @@ -0,0 +1,30 @@ +package command + +import ( + "testing" + + "github.com/hashicorp/vault/http" + "github.com/hashicorp/vault/vault" + "github.com/mitchellh/cli" +) + +func TestRead(t *testing.T) { + core, _ := vault.TestCoreUnsealed(t) + ln, addr := http.TestServer(t, core) + defer ln.Close() + + ui := new(cli.MockUi) + c := &ReadCommand{ + Meta: Meta{ + Ui: ui, + }, + } + + args := []string{ + "-address", addr, + "sys/mounts", + } + if code := c.Run(args); code != 0 { + t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String()) + } +} From 52486b62e3db9c48127f47428d419932ac75b868 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 21:12:24 -0700 Subject: [PATCH 19/26] website: imageoptim --- website/source/assets/images/bg-icons.png | Bin 3304 -> 3303 bytes website/source/assets/images/hero.png | Bin 22387 -> 13935 bytes website/source/assets/images/hero@2x.png | Bin 55783 -> 34481 bytes .../source/assets/images/logo-lockup@2x.png | Bin 2495 -> 2485 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/website/source/assets/images/bg-icons.png b/website/source/assets/images/bg-icons.png index 86dd8559fe352ea6f954036a7e42a7a26c14a0e8..0a3e08b4cae6955b44d7c02677b523bec23ed5b6 100644 GIT binary patch delta 2382 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 d2%*WVri!UgI4;4J3G-vMTymwEsI diff --git a/website/source/assets/images/hero.png b/website/source/assets/images/hero.png index 62be7d53ae55480745feeaf246839a68d9da50a7..b54a727feb8e0db440af7a9dcc2d6ea849f130da 100644 GIT binary patch literal 13935 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�QZp=ZA@E3$5(1)ODcp|w)w-C<*03^YIuT19dK>Y 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ͧ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 literal 55783 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

HE|&4xz)I#mZuS9*v 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 diff --git a/website/source/assets/images/logo-lockup@2x.png b/website/source/assets/images/logo-lockup@2x.png index c8fd172a668d9447e0c8a87a5e571dabd6a77616..b80fc1e02957378fa927f03281430bb965a5096b 100644 GIT binary patch delta 1617 zcmV-X2Cn(P6SWhtcmsbZNklDs!PM5({JB}eqlcvnf%*@Q3eud{~ z!4QX;lQJ_iGcz;er|4>Syp}Xdrmyy*)AszXb!PTFSN}7!GIf(?ohC}wPBd#vv6QBt zL33t^Lb{MhNE|&*!pVq2`tKcRjrvS`BONCtatzJs7lm%1U1EPI04@3h`p>l5QR@@Q zoJ%vd7KI|fB#FUM#L*mZ{(EKFy(Jk9AQ>swCN)P8-}a&bp1yxy zbUg=hvJvMK+c|rRLML^Z|3~x*vN2l`*9oFA0kU~uQyX1m=PAUq#Xh1ifY&<-SsT4( z7vkAYw0kilJwShtjV`kLHpH>*DcZf*Cn7-7Mz1-DIQCF?ON&SwkhjrA22MxsqP;|8 z>|N9XblK=NhoiTfX!HZ^;_0ei)JD%=OxPojmVSqYi=P^XXKwhFu)U|L_o9fW18B3+ zYxX1T4`Wu1^1ACTX6a|;@=t{9C>j%i$x@fA_qWkok0gI&i7{r7KVA2B-Yb{OPZM;o zs7&&`L{mVIjb3vIA#+!m>tX(a?;hsGm&+f|BIp9qXax#V*I11<`m_@X8D0u7dk(-g zqXZo-Dg~fb#w38ejb3vYA>ZD)41RXM7=^)Ce<7$-^n0doF+6jB(5FF5Lt7R;z2d{{i#hLp1EW zt9~yQBW~Maqk9fu+=5c6w2;TD)yH|l81p0z$BRk^=#F|V_1fs3OOB)A*;47b5uUGB z7cuJvv+gCvTzZnIOa=xdtQ#oW=$-=^_u85jFudl?w_x7e@6h0gelJEZnuLw+>BthY zY>pu99fGb5O32f+8l9%#F$U3BdyK5P}6l0>sbY{eFL(KaT>l0MrcUf{c2re%rK3`?a}qW^x9B zEvfNTIvy~_GuYUP{5vm679B|+kc1!U>2tk~F6G5MmTLwbT?%N(+>vx#QtRjfi)cj2 z*!)$jLe=I3hjxP{(@V$cnvltB+K|Jo5(w?76uY;(s4nkqf39x zNfz3Lsh%dJ5D6U*Z_?MV_&cw!|4m*T3rp=v z{vDap)m zu3Ng4-hZ^Ej;=8xxhHR1#S}Qx|K5cI>G8t)VGRj=tlCrKgk&xkZFb>PI^KUp>*#SR zAuk$J*#?(UiLz2T#9pusd8Yz zsbA^u54quP3o8RHF9uXi6b8{g!%KUWj;BH$UC4`CY7_^|@Q-nx4LnQ#a3Ivtg}kVw z##DS>=4t#$mkC@;$IVC`UC4inDsv^61gVi#H*L5fbuRtmLw)QHo!v=HUUW8{*hW|NP~Aw|P-dje&8(A1rs;X^KA5 zqFT)vD9vuTvlt0f|4}-=qT9R}pkWoLGj3sb3cGZTz3!ze=y_3~H2q0lvn7vUPyn4t zKXbgLuZ15``^Y0gzuwLG6ZxQm9fS0N`Q4u5B+{>D^{TGx(RzwgPKojjhj+}KQ5zff P00000NkvXXu0mjftpF^x delta 1627 zcmV-h2Bi756TcI%cmsbjNkl9qq>Lf^xDXeXWf+g^)YJiE;MyfX)6;f1`~K>|w4Mg+EEEbLrK*$ncX4R>}JYWq!fyaY=$@eqELSZI;9OAKv;bT_09A; zQR@>)?v58rh(Z=ykF+7A2uE{=(7zCRhlnhT2jk<~Bp|UMg&vMIhb`7rIxn`Vv~L;F zU{s%9Lsve3T3XnXw(Yi>C={6|`Tqz#BCRY=yS5UI2&6JVR}i|$3gcki?)9+CZz&Yg3v`)S(0`vwVk#v_K64(3qrT8Pdips=T>Wrc_0&nE;6tq zdi$)d?TbBP3j?Jfblb-0tt=Y-V`l(LKsX3pB(pDW4?i;a8=QOolQZGz>wm#*jfv{M zD5DBMJ_y~mHg3OL)}^y~ty(>w3qKti`Vp7qM57xRC-Z-#Ar*vf%WZ*rom;FW&OZA!^1CgNwr!% zlR5|NA}T3}xX*p%gV1ZXrQYjbT3^A}!^7us!*|v1r&DJgQTN4ucWWmIy=K?R)I00f ztAIPt2IkDTmO4}R(D%i^U(bjKq1S9ry&G?`L!W1Hwe9EzbzQ^%;4a&vv_V~W6S!4dWVMfeK9J{0O=s~W&`V=S=MEq#?kwL?0lPKAqc%D zdl>a*T=2zQ{W!WK>8ghA))<67YBO3nTy%fBTKqfr7`H}!I8i|S6MFIpgK>0CUre{^ zHBrrszd{+(J_=oy^*oO5sI;soDdW~y(T0hV|TD~$Itj_wH4S_*$# z*)+tEcI3lfq05S1#?c*lOk~9X(5JjW824G|s~qKF9NmGDkYZufY!AA97P_qOZ5-X{ zd8J&Ul>#=?vk6Ht;mmmWE%bq-aXV)9cKTw%V5#j_TnRA*q{MHb%f?>D(Ve~+Gr3X3 z@WDc=r!M<1^vtp9adfwmQO%1P9({j-h-wAz_h0C;cKhS#PG3x!9r(+JpUulD_M;^H z7rJ|3eFM?T8-7d|vowo}NxTFQ5&wnm9#}t4v@q-&d9!^?5=be|>*jqKdU$Ib(?lx{ z^cink4O?KR`QJP1yU^VO>ywM3pg625T4M%C8xPv_ia$e_^Hw8~O>8 zshQF(T2a;4x|qg*@QVPG0r8 zI(uj$niU0Q=pFy<& Date: Sun, 15 Mar 2015 21:18:25 -0700 Subject: [PATCH 20/26] http: /sys/mounts --- http/handler.go | 1 + http/sys_mount.go | 28 ++++++++++++++++++++++++++++ http/sys_mount_test.go | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 http/sys_mount.go create mode 100644 http/sys_mount_test.go diff --git a/http/handler.go b/http/handler.go index a2bcd5488a..fbcae36a06 100644 --- a/http/handler.go +++ b/http/handler.go @@ -15,6 +15,7 @@ func Handler(core *vault.Core) http.Handler { mux.Handle("/v1/sys/seal-status", handleSysSealStatus(core)) mux.Handle("/v1/sys/seal", handleSysSeal(core)) mux.Handle("/v1/sys/unseal", handleSysUnseal(core)) + mux.Handle("/v1/sys/mounts", handleSysMounts(core)) mux.Handle("/v1/", handleLogical(core)) return mux } diff --git a/http/sys_mount.go b/http/sys_mount.go new file mode 100644 index 0000000000..85b5cd99a0 --- /dev/null +++ b/http/sys_mount.go @@ -0,0 +1,28 @@ +package http + +import ( + "net/http" + + "github.com/hashicorp/vault/logical" + "github.com/hashicorp/vault/vault" +) + +func handleSysMounts(core *vault.Core) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "GET" { + respondError(w, http.StatusMethodNotAllowed, nil) + return + } + + resp, err := core.HandleRequest(&logical.Request{ + Operation: logical.ReadOperation, + Path: "sys/mounts", + }) + if err != nil { + respondError(w, http.StatusInternalServerError, err) + return + } + + respondOk(w, resp.Data) + }) +} diff --git a/http/sys_mount_test.go b/http/sys_mount_test.go new file mode 100644 index 0000000000..04bda93955 --- /dev/null +++ b/http/sys_mount_test.go @@ -0,0 +1,37 @@ +package http + +import ( + "net/http" + "reflect" + "testing" + + "github.com/hashicorp/vault/vault" +) + +func TestSysMounts(t *testing.T) { + core, _ := vault.TestCoreUnsealed(t) + ln, addr := TestServer(t, core) + defer ln.Close() + + resp, err := http.Get(addr + "/v1/sys/mounts") + if err != nil { + t.Fatalf("err: %s", err) + } + + var actual map[string]interface{} + expected := map[string]interface{}{ + "secret/": map[string]interface{}{ + "description": "generic secret storage", + "type": "generic", + }, + "sys/": map[string]interface{}{ + "description": "system endpoints used for control, policy and debugging", + "type": "system", + }, + } + testResponseStatus(t, resp, 200) + testResponseBody(t, resp, &actual) + if !reflect.DeepEqual(actual, expected) { + t.Fatalf("bad: %#v", actual) + } +} From 92a7a763f41947e9324de127019c56bbc6a28180 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 15 Mar 2015 21:28:31 -0700 Subject: [PATCH 21/26] command/mounts --- command/mounts.go | 92 ++++++++++++++++++++++++++++++++++++++++++ command/mounts_test.go | 29 +++++++++++++ commands.go | 6 +++ 3 files changed, 127 insertions(+) create mode 100644 command/mounts.go create mode 100644 command/mounts_test.go diff --git a/command/mounts.go b/command/mounts.go new file mode 100644 index 0000000000..f6988f0ece --- /dev/null +++ b/command/mounts.go @@ -0,0 +1,92 @@ +package command + +import ( + "bufio" + "bytes" + "fmt" + "sort" + "strings" +) + +// MountsCommand is a Command that lists the mounts. +type MountsCommand struct { + Meta +} + +func (c *MountsCommand) Run(args []string) int { + flags := c.Meta.FlagSet("mounts", FlagSetDefault) + flags.Usage = func() { c.Ui.Error(c.Help()) } + if err := flags.Parse(args); err != nil { + return 1 + } + + client, err := c.Client() + if err != nil { + c.Ui.Error(fmt.Sprintf( + "Error initializing client: %s", err)) + return 2 + } + + mounts, err := client.Sys().ListMounts() + if err != nil { + c.Ui.Error(fmt.Sprintf( + "Error reading mounts: %s", err)) + return 2 + } + + paths := make([]string, 0, len(mounts)) + for path, _ := range mounts { + paths = append(paths, path) + } + sort.Strings(paths) + + for _, path := range paths { + mount := mounts[path] + + var desc bytes.Buffer + s := bufio.NewScanner(strings.NewReader(mount.Description)) + for s.Scan() { + desc.WriteString(" " + s.Text()) + } + + c.Ui.Output(fmt.Sprintf( + "%s (type: %s)\n%s\n", + path, + mount.Type, + desc.String())) + } + + return 0 +} + +func (c *MountsCommand) Synopsis() string { + return "Lists mounted backends in Vault" +} + +func (c *MountsCommand) Help() string { + helpText := ` +Usage: vault mounts [options] + + Outputs information about the mounted backends. + + This command lists the mounted backends, their mount points, and + a human-friendly description of the mount point. + +General Options: + + -address=TODO The address of the Vault server. + + -ca-cert=path Path to a PEM encoded CA cert file to use to + verify the Vault server SSL certificate. + + -ca-path=path Path to a directory of PEM encoded CA cert files + to verify the Vault server SSL certificate. If both + -ca-cert and -ca-path are specified, -ca-path is used. + + -insecure Do not verify TLS certificate. This is highly + not recommended. This is especially not recommended + for unsealing a vault. + +` + return strings.TrimSpace(helpText) +} diff --git a/command/mounts_test.go b/command/mounts_test.go new file mode 100644 index 0000000000..5cc60c82ed --- /dev/null +++ b/command/mounts_test.go @@ -0,0 +1,29 @@ +package command + +import ( + "testing" + + "github.com/hashicorp/vault/http" + "github.com/hashicorp/vault/vault" + "github.com/mitchellh/cli" +) + +func TestMounts(t *testing.T) { + core, _ := vault.TestCoreUnsealed(t) + ln, addr := http.TestServer(t, core) + defer ln.Close() + + ui := new(cli.MockUi) + c := &MountsCommand{ + Meta: Meta{ + Ui: ui, + }, + } + + args := []string{ + "-address", addr, + } + if code := c.Run(args); code != 0 { + t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String()) + } +} diff --git a/commands.go b/commands.go index ebaf2689ec..7931ce3d57 100644 --- a/commands.go +++ b/commands.go @@ -66,6 +66,12 @@ func init() { }, nil }, + "mounts": func() (cli.Command, error) { + return &command.MountsCommand{ + Meta: meta, + }, nil + }, + "version": func() (cli.Command, error) { ver := Version rel := VersionPrerelease From 145ad5d556ba039b6b0fa5ccca2e69eb419bc5ed Mon Sep 17 00:00:00 2001 From: Jack Pearkes Date: Sun, 15 Mar 2015 23:05:27 -0700 Subject: [PATCH 22/26] website: initial demo interface --- website/source/_ember_templates.html.erb | 31 +++++ .../source/assets/javascripts/application.js | 5 + website/source/assets/javascripts/demo.js | 9 ++ .../javascripts/demo/controllers/crud.js | 33 ++++++ .../javascripts/demo/controllers/demo.js | 13 ++ .../source/assets/javascripts/demo/router.js | 5 + .../assets/javascripts/demo/routes/crud.js | 2 + .../assets/javascripts/demo/views/demo.js | 111 ++++++++++++++++++ .../assets/javascripts/lib/ember-1-10.min.js | 12 ++ .../lib/ember-template-compiler.js | 4 + website/source/assets/stylesheets/_demo.scss | 38 ++++++ .../assets/stylesheets/application.scss | 6 +- website/source/index.html.erb | 4 +- website/source/layouts/layout.erb | 4 + website/source/package.json | 93 --------------- 15 files changed, 275 insertions(+), 95 deletions(-) create mode 100644 website/source/_ember_templates.html.erb create mode 100644 website/source/assets/javascripts/demo.js create mode 100644 website/source/assets/javascripts/demo/controllers/crud.js create mode 100644 website/source/assets/javascripts/demo/controllers/demo.js create mode 100644 website/source/assets/javascripts/demo/router.js create mode 100644 website/source/assets/javascripts/demo/routes/crud.js create mode 100644 website/source/assets/javascripts/demo/views/demo.js create mode 100644 website/source/assets/javascripts/lib/ember-1-10.min.js create mode 100644 website/source/assets/javascripts/lib/ember-template-compiler.js create mode 100644 website/source/assets/stylesheets/_demo.scss delete mode 100644 website/source/package.json diff --git a/website/source/_ember_templates.html.erb b/website/source/_ember_templates.html.erb new file mode 100644 index 0000000000..24ceeb8428 --- /dev/null +++ b/website/source/_ember_templates.html.erb @@ -0,0 +1,31 @@ + + + + + + + diff --git a/website/source/assets/javascripts/application.js b/website/source/assets/javascripts/application.js index 18d570c0a0..713b3467e2 100644 --- a/website/source/assets/javascripts/application.js +++ b/website/source/assets/javascripts/application.js @@ -1,6 +1,8 @@ //= require jquery //= require bootstrap //= require jquery.waypoints.min +//= require lib/ember-template-compiler +//= require lib/ember-1-10.min //= require lib/String.substitute //= require lib/Function.prototype.bind @@ -11,3 +13,6 @@ //= require docs //= require app/Sidebar //= require app/Init + +//= require demo +//= require_tree ./demo diff --git a/website/source/assets/javascripts/demo.js b/website/source/assets/javascripts/demo.js new file mode 100644 index 0000000000..24d4bfd144 --- /dev/null +++ b/website/source/assets/javascripts/demo.js @@ -0,0 +1,9 @@ +window.Demo = Ember.Application.create({ + rootElement: '#demo-app', +}); + +Demo.deferReadiness(); + +if (document.getElementById('demo-app')) { + Demo.advanceReadiness(); +} diff --git a/website/source/assets/javascripts/demo/controllers/crud.js b/website/source/assets/javascripts/demo/controllers/crud.js new file mode 100644 index 0000000000..c7d1c5af61 --- /dev/null +++ b/website/source/assets/javascripts/demo/controllers/crud.js @@ -0,0 +1,33 @@ +Demo.DemoCrudController = Ember.ObjectController.extend({ + needs: ['demo'], + currentText: Ember.computed.alias('controllers.demo.currentText'), + currentLog: Ember.computed.alias('controllers.demo.currentLog'), + logPrefix: Ember.computed.alias('controllers.demo.logPrefix'), + currentMarker: Ember.computed.alias('controllers.demo.currentMarker'), + notCleared: Ember.computed.alias('controllers.demo.notCleared'), + + actions: { + submitText: function() { + var command = this.getWithDefault('currentText', ''); + var currentLogs = this.get('currentLog').toArray(); + + // Add the last log item + currentLogs.push(command); + + // Clean the state + this.set('currentText', ''); + + // Push the new logs + this.set('currentLog', currentLogs); + + switch(command) { + case "clear": + this.set('currentLog', []); + this.set('notCleared', false); + break; + default: + console.log("Submitting: ", command); + } + } + } +}); diff --git a/website/source/assets/javascripts/demo/controllers/demo.js b/website/source/assets/javascripts/demo/controllers/demo.js new file mode 100644 index 0000000000..2b7fda5361 --- /dev/null +++ b/website/source/assets/javascripts/demo/controllers/demo.js @@ -0,0 +1,13 @@ +Demo.DemoController = Ember.ObjectController.extend({ + currentText: "vault help", + currentLog: [], + logPrefix: "$ ", + cursor: 0, + notCleared: true, + + setFromHistory: function() { + var index = this.get('currentLog.length') + this.get('cursor'); + + this.set('currentText', this.get('currentLog')[index]); + }.observes('cursor') +}); diff --git a/website/source/assets/javascripts/demo/router.js b/website/source/assets/javascripts/demo/router.js new file mode 100644 index 0000000000..33b58d6d15 --- /dev/null +++ b/website/source/assets/javascripts/demo/router.js @@ -0,0 +1,5 @@ +Demo.Router.map(function() { + this.route('demo', { path: '/demo' }, function() { + this.route('crud', { path: '/crud' }); + }); +}); diff --git a/website/source/assets/javascripts/demo/routes/crud.js b/website/source/assets/javascripts/demo/routes/crud.js new file mode 100644 index 0000000000..a3ffd89df7 --- /dev/null +++ b/website/source/assets/javascripts/demo/routes/crud.js @@ -0,0 +1,2 @@ +Demo.DemoCrudRoute = Ember.Route.extend({ +}); diff --git a/website/source/assets/javascripts/demo/views/demo.js b/website/source/assets/javascripts/demo/views/demo.js new file mode 100644 index 0000000000..91f380202d --- /dev/null +++ b/website/source/assets/javascripts/demo/views/demo.js @@ -0,0 +1,111 @@ +Demo.DemoView = Ember.View.extend({ + classNames: ['demo-overlay'], + + didInsertElement: function() { + var element = this.$(); + + element.hide().fadeIn(300); + + // Scroll to the bottom of the element + element.scrollTop(element[0].scrollHeight); + + // Focus + element.find('input.shell')[0].focus(); + + // Hijack scrolling to only work within terminal + // + $(element).on('DOMMouseScroll mousewheel', function(ev) { + var scrolledEl = $(this), + scrollTop = this.scrollTop, + scrollHeight = this.scrollHeight, + height = scrolledEl.height(), + delta = (ev.type == 'DOMMouseScroll' ? + ev.originalEvent.detail * -40 : + ev.originalEvent.wheelDelta), + up = delta > 0; + + var prevent = function() { + ev.stopPropagation(); + ev.preventDefault(); + ev.returnValue = false; + return false; + }; + + if (!up && -delta > scrollHeight - height - scrollTop) { + // Scrolling down, but this will take us past the bottom. + scrolledEl.scrollTop(scrollHeight); + return prevent(); + } else if (up && delta > scrollTop) { + // Scrolling up, but this will take us past the top. + scrolledEl.scrollTop(0); + return prevent(); + } + }); + }, + + willDestroyElement: function() { + var element = this.$(); + + element.fadeOut(400); + + // Allow scrolling + $('body').unbind('DOMMouseScroll mousewheel'); + }, + + click: function() { + var element = this.$(); + // Focus + element.find('input.shell')[0].focus(); + }, + + keyDown: function(ev) { + var cursor = this.get('controller.cursor'), + currentLength = this.get('controller.currentLog.length'); + + console.log(ev); + + switch(ev.keyCode) { + // Down arrow + case 40: + if (cursor === 0) { + return; + } + + this.incrementProperty('controller.cursor'); + break; + + // Up arrow + case 38: + if ((currentLength + cursor) === 0) { + return; + } + + this.decrementProperty('controller.cursor'); + break; + + // command + k + case 75: + if (ev.metaKey) { + this.set('controller.currentLog', []); + this.set('controller.notCleared', false); + } + break; + + // escape + case 27: + this.get('controller').transitionTo('index'); + break; + } + }, + + submitted: function() { + var element = this.$(); + + // Focus the input + element.find('input.shell')[0].focus(); + + // Scroll to the bottom of the element + element.scrollTop(element[0].scrollHeight); + + }.observes('controller.currentLog') +}); diff --git a/website/source/assets/javascripts/lib/ember-1-10.min.js b/website/source/assets/javascripts/lib/ember-1-10.min.js new file mode 100644 index 0000000000..2ad58cc2fb --- /dev/null +++ b/website/source/assets/javascripts/lib/ember-1-10.min.js @@ -0,0 +1,12 @@ +!function(){var e,t,r,n,i;!function(){function a(){}function s(e,t){if("."!==e.charAt(0))return e;for(var r=e.split("/"),n=t.split("/").slice(0,-1),i=0,a=r.length;a>i;i++){var s=r[i];if(".."===s)n.pop();else{if("."===s)continue;n.push(s)}}return n.join("/")}if(i=this.Ember=this.Ember||{},"undefined"==typeof i&&(i={}),"undefined"==typeof i.__loader){var o={},u={};e=function(e,t,r){o[e]={deps:t,callback:r}},n=r=t=function(e){var r=u[e];if(void 0!==r)return u[e];if(r===a)return void 0;if(u[e]={},!o[e])throw new Error("Could not find module "+e);for(var n,i=o[e],l=i.deps,c=i.callback,h=[],m=l.length,p=0;m>p;p++)h.push("exports"===l[p]?n={}:t(s(l[p],e)));var f=0===m?c.call(this):c.apply(this,h);return u[e]=n||(void 0===f?a:f)},n._eak_seen=o,i.__loader={define:e,require:r,registry:o}}else e=i.__loader.define,n=r=t=i.__loader.require}(),e("backburner",["backburner/utils","backburner/platform","backburner/binary-search","backburner/deferred-action-queues","exports"],function(e,t,r,n,i){"use strict";function a(e,t){this.queueNames=e,this.options=t||{},this.options.defaultQueue||(this.options.defaultQueue=e[0]),this.instanceStack=[],this._debouncees=[],this._throttlers=[],this._timers=[]}function s(e){return e.onError||e.onErrorTarget&&e.onErrorTarget[e.onErrorMethod]}function o(e){e.begin(),e._autorun=O.setTimeout(function(){e._autorun=null,e.end()})}function u(e,t,r){var n=y();(!e._laterTimer||tr;r+=2)e.schedule(e.options.defaultQueue,null,t[r])}),e._timers.length&&u(e,e._timers[0],e._timers[0]-i)}function c(e,t,r){return m(e,t,r)}function h(e,t,r){return m(e,t,r)}function m(e,t,r){for(var n,i=-1,a=0,s=r.length;s>a;a++)if(n=r[a],n[0]===e&&n[1]===t){i=a;break}return i}var p=e.each,f=e.isString,d=e.isFunction,v=e.isNumber,b=e.isCoercableNumber,g=e.wrapInTryCatch,y=e.now,_=t.needsIETryCatchFix,w=r["default"],x=n["default"],C=[].slice,E=[].pop,O=this;if(a.prototype={begin:function(){var e=this.options,t=e&&e.onBegin,r=this.currentInstance;r&&this.instanceStack.push(r),this.currentInstance=new x(this.queueNames,e),t&&t(this.currentInstance,r)},end:function(){var e=this.options,t=e&&e.onEnd,r=this.currentInstance,n=null,i=!1;try{r.flush()}finally{i||(i=!0,this.currentInstance=null,this.instanceStack.length&&(n=this.instanceStack.pop(),this.currentInstance=n),t&&t(r,n))}},run:function(e,t){var r=s(this.options);this.begin(),t||(t=e,e=null),f(t)&&(t=e[t]);var n=C.call(arguments,2),i=!1;if(r)try{return t.apply(e,n)}catch(a){r(a)}finally{i||(i=!0,this.end())}else try{return t.apply(e,n)}finally{i||(i=!0,this.end())}},join:function(e,t){return this.currentInstance?(t||(t=e,e=null),f(t)&&(t=e[t]),t.apply(e,C.call(arguments,2))):this.run.apply(this,arguments)},defer:function(e,t,r){r||(r=t,t=null),f(r)&&(r=t[r]);var n,i=this.DEBUG?new Error:void 0,a=arguments.length;if(a>3){n=new Array(a-3);for(var s=3;a>s;s++)n[s-3]=arguments[s]}else n=void 0;return this.currentInstance||o(this),this.currentInstance.schedule(e,t,r,n,!1,i)},deferOnce:function(e,t,r){r||(r=t,t=null),f(r)&&(r=t[r]);var n,i=this.DEBUG?new Error:void 0,a=arguments.length;if(a>3){n=new Array(a-3);for(var s=3;a>s;s++)n[s-3]=arguments[s]}else n=void 0;return this.currentInstance||o(this),this.currentInstance.schedule(e,t,r,n,!0,i)},setTimeout:function(){function e(){if(g)try{i.apply(o,r)}catch(e){g(e)}else i.apply(o,r)}for(var t=arguments.length,r=new Array(t),n=0;t>n;n++)r[n]=arguments[n];var i,a,o,l,c,h,m=r.length;if(0!==m){if(1===m)i=r.shift(),a=0;else if(2===m)l=r[0],c=r[1],d(c)||d(l[c])?(o=r.shift(),i=r.shift(),a=0):b(c)?(i=r.shift(),a=r.shift()):(i=r.shift(),a=0);else{var p=r[r.length-1];a=b(p)?r.pop():0,l=r[0],h=r[1],d(h)||f(h)&&null!==l&&h in l?(o=r.shift(),i=r.shift()):i=r.shift()}var v=y()+parseInt(a,10);f(i)&&(i=o[i]);var g=s(this.options),_=w(v,this._timers);return this._timers.splice(_,0,v,e),u(this,v,a),e}},throttle:function(e,t){var r,n,i,a,s=this,o=arguments,u=E.call(o);return v(u)||f(u)?(r=u,u=!0):r=E.call(o),r=parseInt(r,10),i=h(e,t,this._throttlers),i>-1?this._throttlers[i]:(a=O.setTimeout(function(){u||s.run.apply(s,o);var r=h(e,t,s._throttlers);r>-1&&s._throttlers.splice(r,1)},r),u&&this.run.apply(this,o),n=[e,t,a],this._throttlers.push(n),n)},debounce:function(e,t){var r,n,i,a,s=this,o=arguments,u=E.call(o);return v(u)||f(u)?(r=u,u=!1):r=E.call(o),r=parseInt(r,10),n=c(e,t,this._debouncees),n>-1&&(i=this._debouncees[n],this._debouncees.splice(n,1),clearTimeout(i[2])),a=O.setTimeout(function(){u||s.run.apply(s,o);var r=c(e,t,s._debouncees);r>-1&&s._debouncees.splice(r,1)},r),u&&-1===n&&s.run.apply(s,o),i=[e,t,a],s._debouncees.push(i),i},cancelTimers:function(){var e=function(e){clearTimeout(e[2])};p(this._throttlers,e),this._throttlers=[],p(this._debouncees,e),this._debouncees=[],this._laterTimer&&(clearTimeout(this._laterTimer),this._laterTimer=null),this._timers=[],this._autorun&&(clearTimeout(this._autorun),this._autorun=null)},hasTimers:function(){return!!this._timers.length||!!this._debouncees.length||!!this._throttlers.length||this._autorun},cancel:function(e){var t=typeof e;if(e&&"object"===t&&e.queue&&e.method)return e.queue.cancel(e);if("function"!==t)return"[object Array]"===Object.prototype.toString.call(e)?this._cancelItem(h,this._throttlers,e)||this._cancelItem(c,this._debouncees,e):void 0;for(var r=0,n=this._timers.length;n>r;r+=2)if(this._timers[r+1]===e)return this._timers.splice(r,2),0===r&&(this._laterTimer&&(clearTimeout(this._laterTimer),this._laterTimer=null),this._timers.length>0&&u(this,this._timers[0],this._timers[0]-y())),!0},_cancelItem:function(e,t,r){var n,i;return r.length<3?!1:(i=e(r[0],r[1],t),i>-1&&(n=t[i],n[2]===r[2])?(t.splice(i,1),clearTimeout(r[2]),!0):!1)}},a.prototype.schedule=a.prototype.defer,a.prototype.scheduleOnce=a.prototype.deferOnce,a.prototype.later=a.prototype.setTimeout,_){var P=a.prototype.run;a.prototype.run=g(P);var A=a.prototype.end;a.prototype.end=g(A)}i["default"]=a}),e("backburner.umd",["./backburner"],function(t){"use strict";var r=t["default"];"function"==typeof e&&e.amd?e(function(){return r}):"undefined"!=typeof module&&module.exports?module.exports=r:"undefined"!=typeof this&&(this.Backburner=r)}),e("backburner/binary-search",["exports"],function(e){"use strict";e["default"]=function(e,t){for(var r,n,i=0,a=t.length-2;a>i;)n=(a-i)/2,r=i+n-n%2,e>=t[r]?i=r+2:a=r;return e>=t[i]?i+2:i}}),e("backburner/deferred-action-queues",["./utils","./queue","exports"],function(e,t,r){"use strict";function n(e,t){var r=this.queues=Object.create(null);this.queueNames=e=e||[],this.options=t,a(e,function(e){r[e]=new s(e,t[e],t)})}function i(e){throw new Error("You attempted to schedule an action in a queue ("+e+") that doesn't exist")}var a=e.each,s=t["default"];n.prototype={schedule:function(e,t,r,n,a,s){var o=this.queues,u=o[e];return u||i(e),a?u.pushUnique(t,r,n,s):u.push(t,r,n,s)},flush:function(){var e,t,r=this.queues,n=this.queueNames,i=0,a=n.length;for(this.options;a>i;){e=n[i],t=r[e];var s=t._queue.length;0===s?i++:(t.flush(!1),i=0)}}},r["default"]=n}),e("backburner/platform",["exports"],function(e){"use strict";var t=function(e,t){try{t()}catch(e){}return!!e}();e.needsIETryCatchFix=t}),e("backburner/queue",["./utils","exports"],function(e,t){"use strict";function r(e,t,r){this.name=e,this.globalOptions=r||{},this.options=t,this._queue=[],this.targetQueues=Object.create(null),this._queueBeingFlushed=void 0}var n=e.isString;r.prototype={push:function(e,t,r,n){var i=this._queue;return i.push(e,t,r,n),{queue:this,target:e,method:t}},pushUniqueWithoutGuid:function(e,t,r,n){for(var i=this._queue,a=0,s=i.length;s>a;a+=4){var o=i[a],u=i[a+1];if(o===e&&u===t)return i[a+2]=r,void(i[a+3]=n)}i.push(e,t,r,n)},targetQueue:function(e,t,r,n,i){for(var a=this._queue,s=0,o=e.length;o>s;s+=4){var u=e[s],l=e[s+1];if(u===r)return a[l+2]=n,void(a[l+3]=i)}e.push(r,a.push(t,r,n,i)-4)},pushUniqueWithGuid:function(e,t,r,n,i){var a=this.targetQueues[e];return a?this.targetQueue(a,t,r,n,i):this.targetQueues[e]=[r,this._queue.push(t,r,n,i)-4],{queue:this,target:t,method:r}},pushUnique:function(e,t,r,n){var i=(this._queue,this.globalOptions.GUID_KEY);if(e&&i){var a=e[i];if(a)return this.pushUniqueWithGuid(a,e,t,r,n)}return this.pushUniqueWithoutGuid(e,t,r,n),{queue:this,target:e,method:t}},invoke:function(e,t,r){r&&r.length>0?t.apply(e,r):t.call(e)},invokeWithOnError:function(e,t,r,n,i){try{r&&r.length>0?t.apply(e,r):t.call(e)}catch(a){n(a,i)}},flush:function(e){var t=this._queue,r=t.length;if(0!==r){var i,a,s,o,u=this.globalOptions,l=this.options,c=l&&l.before,h=l&&l.after,m=u.onError||u.onErrorTarget&&u.onErrorTarget[u.onErrorMethod],p=m?this.invokeWithOnError:this.invoke;this.targetQueues=Object.create(null);var f=this._queueBeingFlushed=this._queue.slice();this._queue=[],c&&c();for(var d=0;r>d;d+=4)i=f[d],a=f[d+1],s=f[d+2],o=f[d+3],n(a)&&(a=i[a]),a&&p(i,a,s,m,o);h&&h(),this._queueBeingFlushed=void 0,e!==!1&&this._queue.length>0&&this.flush(!0)}},cancel:function(e){var t,r,n,i,a=this._queue,s=e.target,o=e.method,u=this.globalOptions.GUID_KEY;if(u&&this.targetQueues&&s){var l=this.targetQueues[s[u]];if(l)for(n=0,i=l.length;i>n;n++)l[n]===o&&l.splice(n,1)}for(n=0,i=a.length;i>n;n+=4)if(t=a[n],r=a[n+1],t===s&&r===o)return a.splice(n,4),!0;if(a=this._queueBeingFlushed)for(n=0,i=a.length;i>n;n+=4)if(t=a[n],r=a[n+1],t===s&&r===o)return a[n+1]=null,!0}},t["default"]=r}),e("backburner/utils",["exports"],function(e){"use strict";function t(e,t){for(var r=0;r-1){try{if(e.existsSync(s)){var o,u=e.readFileSync(s,{encoding:"utf8"}),l=u.split("/").slice(-1)[0].trim(),c=u.split(" ")[1];if(c){var h=t.join(a,c.trim());o=e.readFileSync(h)}else o=l;i.push(o.slice(0,10))}}catch(m){console.error(m.stack)}return i.join(".")}return n}}),e("container",["container/container","exports"],function(e,t){"use strict";i.MODEL_FACTORY_INJECTIONS=!1,i.ENV&&"undefined"!=typeof i.ENV.MODEL_FACTORY_INJECTIONS&&(i.MODEL_FACTORY_INJECTIONS=!!i.ENV.MODEL_FACTORY_INJECTIONS);var r=e["default"];t["default"]=r}),e("container/container",["ember-metal/core","ember-metal/keys","ember-metal/dictionary","exports"],function(e,t,r,n){"use strict";function i(e){this.parent=e,this.children=[],this.resolver=e&&e.resolver||function(){},this.registry=P(e?e.registry:null),this.cache=P(e?e.cache:null),this.factoryCache=P(e?e.factoryCache:null),this.resolveCache=P(e?e.resolveCache:null),this.typeInjections=P(e?e.typeInjections:null),this.injections=P(null),this.normalizeCache=P(null),this.validationCache=P(e?e.validationCache:null),this.factoryTypeInjections=P(e?e.factoryTypeInjections:null),this.factoryInjections=P(null),this._options=P(e?e._options:null),this._typeOptions=P(e?e._typeOptions:null)}function a(e,t){var r=e.resolveCache[t];if(r)return r;var n=e.resolver(t)||e.registry[t];return e.resolveCache[t]=n,n}function s(e,t){return e.cache[t]?!0:void 0!==e.resolve(t)}function o(e,t,r){if(r=r||{},e.cache[t]&&r.singleton!==!1)return e.cache[t];var n=b(e,t);return void 0!==n?(l(e,t)&&r.singleton!==!1&&(e.cache[t]=n),n):void 0}function u(e){throw new Error(e+" is not currently supported on child containers")}function l(e,t){var r=m(e,t,"singleton");return r!==!1}function c(e,t){var r={};if(!t)return r;h(e,t);for(var n,i=0,a=t.length;a>i;i++)n=t[i],r[n.property]=o(e,n.fullName);return r}function h(e,t){if(t)for(var r,n=0,i=t.length;i>n;n++)if(r=t[n].fullName,!e.has(r))throw new Error("Attempting to inject an unknown injection: `"+r+"`")}function m(e,t,r){var n=e._options[t];if(n&&void 0!==n[r])return n[r];var i=t.split(":")[0];return n=e._typeOptions[i],n?n[r]:void 0}function p(e,t){var r=e.factoryCache;if(r[t])return r[t];var n=e.resolve(t);if(void 0!==n){var i=t.split(":")[0];if(!n||"function"!=typeof n.extend||!E.MODEL_FACTORY_INJECTIONS&&"model"===i)return n&&"function"==typeof n._onLookup&&n._onLookup(t),r[t]=n,n;var a=f(e,t),s=d(e,t);s._toString=e.makeToString(n,t);var o=n.extend(a);return o.reopenClass(s),n&&"function"==typeof n._onLookup&&n._onLookup(t),r[t]=o,o}}function f(e,t){var r=t.split(":"),n=r[0],i=[];return i=i.concat(e.typeInjections[n]||[]),i=i.concat(e.injections[t]||[]),i=c(e,i),i._debugContainerKey=t,i.container=e,i}function d(e,t){var r=t.split(":"),n=r[0],i=[];return i=i.concat(e.factoryTypeInjections[n]||[]),i=i.concat(e.factoryInjections[t]||[]),i=c(e,i),i._debugContainerKey=t,i}function v(e){var t=[];for(var r in e)e.hasOwnProperty(r)&&C(t,r,e[r]);return t}function b(e,t){var r,n,i=p(e,t);if(m(e,t,"instantiate")===!1)return i;if(i){if("function"!=typeof i.create)throw new Error("Failed to create an instance of '"+t+"'. Most likely an improperly defined class or an invalid module export.");return n=e.validationCache,n[t]||"function"!=typeof i._lazyInjections||(r=i._lazyInjections(),h(e,v(r))),n[t]=!0,"function"==typeof i.extend?i.create():i.create(f(e,t))}}function g(e,t){for(var r,n,i=e.cache,a=O(i),s=0,o=a.length;o>s;s++)r=a[s],n=i[r],m(e,r,"instantiate")!==!1&&t(n)}function y(e){g(e,function(e){e.destroy()}),e.cache.dict=P(null)}function _(e,t,r,n){var i=e[t];i||(i=[],e[t]=i),i.push({property:r,fullName:n})}function w(e){if(!A.test(e))throw new TypeError("Invalid Fullname, expected: `type:name` got: "+e);return!0}function x(e,t){return e[t]||(e[t]=[])}function C(e,t,r){e.push({property:t,fullName:r})}var E=e["default"],O=t["default"],P=r["default"];i.prototype={parent:null,children:null,resolver:null,registry:null,cache:null,typeInjections:null,injections:null,_options:null,_typeOptions:null,child:function(){var e=new i(this);return this.children.push(e),e},register:function(e,t,r){if(void 0===t)throw new TypeError("Attempting to register an unknown factory: `"+e+"`");var n=this.normalize(e);if(n in this.cache)throw new Error("Cannot re-register: `"+e+"`, as it has already been looked up.");this.registry[n]=t,this._options[n]=r||{}},unregister:function(e){var t=this.normalize(e);delete this.registry[t],delete this.cache[t],delete this.factoryCache[t],delete this.resolveCache[t],delete this._options[t],delete this.validationCache[t]},resolve:function(e){return a(this,this.normalize(e))},describe:function(e){return e},normalizeFullName:function(e){return e},normalize:function(e){return this.normalizeCache[e]||(this.normalizeCache[e]=this.normalizeFullName(e))},makeToString:function(e){return e.toString()},lookup:function(e,t){return o(this,this.normalize(e),t)},lookupFactory:function(e){return p(this,this.normalize(e))},has:function(e){return s(this,this.normalize(e))},optionsForType:function(e,t){this.parent&&u("optionsForType"),this._typeOptions[e]=t},options:function(e,t){t=t||{};var r=this.normalize(e);this._options[r]=t},typeInjection:function(e,t,r){this.parent&&u("typeInjection");var n=r.split(":")[0];if(n===e)throw new Error("Cannot inject a `"+r+"` on other "+e+"(s). Register the `"+r+"` as a different type and perform the typeInjection.");_(this.typeInjections,e,t,r)},injection:function(e,t,r){this.parent&&u("injection"),w(r);var n=this.normalize(r);if(-1===e.indexOf(":"))return this.typeInjection(e,t,n);var i=this.normalize(e);if(this.cache[i])throw new Error("Attempted to register an injection for a type that has already been looked up. ('"+i+"', '"+t+"', '"+r+"')");C(x(this.injections,i),t,n)},factoryTypeInjection:function(e,t,r){this.parent&&u("factoryTypeInjection"),_(this.factoryTypeInjections,e,t,this.normalize(r))},factoryInjection:function(e,t,r){this.parent&&u("injection");var n=this.normalize(e),i=this.normalize(r);if(w(r),-1===e.indexOf(":"))return this.factoryTypeInjection(n,t,i);if(this.factoryCache[n])throw new Error("Attempted to register a factoryInjection for a type that has already been looked up. ('"+n+"', '"+t+"', '"+r+"')");C(x(this.factoryInjections,n),t,i)},destroy:function(){for(var e=0,t=this.children.length;t>e;e++)this.children[e].destroy();this.children=[],g(this,function(e){e.destroy()}),this.parent=void 0,this.isDestroyed=!0},reset:function(){for(var e=0,t=this.children.length;t>e;e++)y(this.children[e]);y(this)}};var A=/^[^:]+.+:[^:]+$/;n["default"]=i}),e("dag-map",["exports"],function(e){"use strict";function t(e,r,n,i){var a,s=e.name,o=e.incoming,u=e.incomingNames,l=u.length;if(n||(n={}),i||(i=[]),!n.hasOwnProperty(s)){for(i.push(s),n[s]=!0,a=0;l>a;a++)t(o[u[a]],r,n,i);r(e,i),i.pop()}}function r(){this.names=[],this.vertices=Object.create(null)}function n(e){this.name=e,this.incoming={},this.incomingNames=[],this.hasOutgoing=!1,this.value=null}r.prototype.add=function(e){if(!e)throw new Error("Can't add Vertex without name");if(void 0!==this.vertices[e])return this.vertices[e];var t=new n(e);return this.vertices[e]=t,this.names.push(e),t},r.prototype.map=function(e,t){this.add(e).value=t},r.prototype.addEdge=function(e,r){function n(e,t){if(e.name===r)throw new Error("cycle detected: "+r+" <- "+t.join(" <- "))}if(e&&r&&e!==r){var i=this.add(e),a=this.add(r);a.incoming.hasOwnProperty(e)||(t(i,n),i.hasOutgoing=!0,a.incoming[e]=i,a.incomingNames.push(e))}},r.prototype.topsort=function(e){var r,n,i={},a=this.vertices,s=this.names,o=s.length;for(r=0;o>r;r++)n=a[s[r]],n.hasOutgoing||t(n,e,i)},r.prototype.addEdges=function(e,t,r,n){var i;if(this.map(e,t),r)if("string"==typeof r)this.addEdge(e,r);else for(i=0;ii;i++)n=r[i],-1===n.indexOf(":")&&(n="controller:"+n),t.has(n)||s.push(n);if(s.length)throw new c(h(e)+" needs [ "+s.join(", ")+" ] but "+(s.length>1?"they":"it")+" could not be found")}var l=(e["default"],t.get),c=r["default"],h=n.inspect,m=i.computed,p=a["default"],f=(n.meta,s["default"]),d=m(function(){var e=this;return{needs:l(e,"needs"),container:l(e,"container"),unknownProperty:function(t){var r,n,i,a=this.needs;for(n=0,i=a.length;i>n;n++)if(r=a[n],r===t)return this.container.lookup("controller:"+t);var s=h(e)+"#needs does not include `"+t+"`. To access the "+t+" controller from "+h(e)+", "+h(e)+" should have a `needs` property that is an array of the controllers it has access to.";throw new ReferenceError(s)},setUnknownProperty:function(t){throw new Error("You cannot overwrite the value of `controllers."+t+"` of "+h(e))}}});p.reopen({concatenatedProperties:["needs"],needs:[],init:function(){var e=l(this,"needs"),t=l(e,"length");t>0&&(this.container&&u(this,this.container,e),l(this,"controllers")),this._super.apply(this,arguments)},controllerFor:function(e){return f(l(this,"container"),e)},controllers:d}),o["default"]=p}),e("ember-application/system/application",["dag-map","container/container","ember-metal","ember-metal/property_get","ember-metal/property_set","ember-runtime/system/lazy_load","ember-runtime/system/namespace","ember-runtime/mixins/deferred","ember-application/system/resolver","ember-metal/platform","ember-metal/run_loop","ember-metal/utils","ember-runtime/controllers/controller","ember-metal/enumerable_utils","ember-runtime/controllers/object_controller","ember-runtime/controllers/array_controller","ember-views/views/select","ember-views/system/event_dispatcher","ember-views/system/jquery","ember-routing/system/route","ember-routing/system/router","ember-routing/location/hash_location","ember-routing/location/history_location","ember-routing/location/auto_location","ember-routing/location/none_location","ember-routing/system/cache","ember-extension-support/container_debug_adapter","ember-metal/core","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h,m,p,f,d,v,b,g,y,_,w,x,C,E,O,P,A,N){"use strict";function S(e){var t=[];for(var r in e)t.push(r);return t}function T(e){function t(e){return n.resolve(e)}var r=e.get("resolver")||e.get("Resolver")||F,n=r.create({namespace:e});return t.describe=function(e){return n.lookupDescription(e)},t.makeToString=function(e,t){return n.makeToString(e,t)},t.normalize=function(e){return n.normalize?n.normalize(e):e},t.__resolver__=n,t}var k=e["default"],V=t["default"],I=r["default"],j=n.get,M=i.set,R=a.runLoadHooks,D=s["default"],L=o["default"],F=u["default"],B=l.create,H=c["default"],z=(h.canInvoke,m["default"]),q=p["default"],U=f["default"],W=d["default"],K=v["default"],G=b["default"],Q=g["default"],$=y["default"],Y=_["default"],X=w["default"],Z=x["default"],J=C["default"],et=E["default"],tt=O["default"],rt=P["default"],nt=A.K,it=!1,at=D.extend(L,{_suppressDeferredDeprecation:!0,rootElement:"body",eventDispatcher:null,customEvents:null,init:function(){if(this._readinessDeferrals=1,this.$||(this.$=Q),this.__container__=this.buildContainer(),this.Router=this.defaultRouter(),this._super(),this.scheduleInitialize(),it||(it=!0,I.libraries.registerCoreLibrary("jQuery",Q().jquery)),I.LOG_VERSION){I.LOG_VERSION=!1;for(var e=I.libraries._registry,t=q.map(e,function(e){return j(e,"name.length")}),r=Math.max.apply(this,t),n=0,i=e.length;i>n;n++){var a=e[n];new Array(r-a.name.length+1).join(" ")}}},buildContainer:function(){var e=this.__container__=at.buildContainer(this);return e},defaultRouter:function(){if(this.Router!==!1){var e=this.__container__;return this.Router&&(e.unregister("router:main"),e.register("router:main",this.Router)),e.lookupFactory("router:main")}},scheduleInitialize:function(){!this.$||this.$.isReady?H.schedule("actions",this,"_initialize"):this.$().ready(I.run.bind(this,"_initialize"))},deferReadiness:function(){this._readinessDeferrals++},advanceReadiness:function(){this._readinessDeferrals--,0===this._readinessDeferrals&&H.once(this,this.didBecomeReady)},register:function(){var e=this.__container__;e.register.apply(e,arguments)},inject:function(){var e=this.__container__;e.injection.apply(e,arguments)},initialize:function(){},_initialize:function(){if(!this.isDestroyed){if(this.Router){var e=this.__container__;e.unregister("router:main"),e.register("router:main",this.Router)}return this.runInitializers(),R("application",this),this.advanceReadiness(),this}},reset:function(){function e(){var e=this.__container__.lookup("router:main");e.reset(),H(this.__container__,"destroy"),this.buildContainer(),H.schedule("actions",this,"_initialize")}this._readinessDeferrals=1,H.join(this,e)},runInitializers:function(){for(var e,t=j(this.constructor,"initializers"),r=S(t),n=this.__container__,i=new k,a=this,s=0;s-1&&(i=i.replace(/\.(.)/g,function(e){return e.charAt(1).toUpperCase()})),n.indexOf("_")>-1&&(i=i.replace(/_(.)/g,function(e){return e.charAt(1).toUpperCase()})),r+":"+i}return e},resolve:function(e){var t,r=this.parseName(e),n=r.resolveMethodName;if(!r.name||!r.type)throw new TypeError("Invalid fullName: `"+e+"`, must be of the form `type:name` ");return this[n]&&(t=this[n](r)),t||(t=this.resolveOther(r)),r.root&&r.root.LOG_RESOLVER&&this._logLookup(t,r),t},parseName:function(e){return this._parseNameCache[e]||(this._parseNameCache[e]=this._parseName(e))},_parseName:function(e){var t=e.split(":"),r=t[0],n=t[1],i=n,a=c(this,"namespace"),s=a;if("template"!==r&&-1!==i.indexOf("/")){var o=i.split("/");i=o[o.length-1];var u=p(o.slice(0,-1).join("."));s=v.byName(u)}return{fullName:e,type:r,fullNameWithoutType:n,name:i,root:s,resolveMethodName:"resolve"+m(r)}},lookupDescription:function(e){var t,r=this.parseName(e);return"template"===r.type?"template at "+r.fullNameWithoutType.replace(/\./g,"/"):(t=r.root+"."+m(r.name).replace(/\./g,""),"model"!==r.type&&(t+=m(r.type)),t)},makeToString:function(e){return e.toString()},useRouterNaming:function(e){e.name=e.name.replace(/\./g,"_"),"basic"===e.name&&(e.name="")},resolveTemplate:function(e){var t=e.fullNameWithoutType.replace(/\./g,"/");return l.TEMPLATES[t]?l.TEMPLATES[t]:(t=f(t),l.TEMPLATES[t]?l.TEMPLATES[t]:void 0)},resolveView:function(e){return this.useRouterNaming(e),this.resolveOther(e)},resolveController:function(e){return this.useRouterNaming(e),this.resolveOther(e)},resolveRoute:function(e){return this.useRouterNaming(e),this.resolveOther(e)},resolveModel:function(e){var t=m(e.name),r=c(e.root,t);return r?r:void 0},resolveHelper:function(e){return this.resolveOther(e)||b[e.fullNameWithoutType]},resolveOther:function(e){var t=m(e.name)+m(e.type),r=c(e.root,t);return r?r:void 0},_logLookup:function(e,t){var r,n;r=e?"[✓]":"[ ]",n=t.fullName.length>60?".":new Array(60-t.fullName.length).join("."),h.info(r,t.fullName,n,this.lookupDescription(t.fullName))}})}),e("ember-extension-support",["ember-metal/core","ember-extension-support/data_adapter","ember-extension-support/container_debug_adapter"],function(e,t,r){"use strict";var n=e["default"],i=t["default"],a=r["default"];n.DataAdapter=i,n.ContainerDebugAdapter=a}),e("ember-extension-support/container_debug_adapter",["ember-metal/core","ember-runtime/system/native_array","ember-metal/utils","ember-runtime/system/string","ember-runtime/system/namespace","ember-runtime/system/object","exports"],function(e,t,r,n,i,a,s){"use strict";var o=e["default"],u=t.A,l=r.typeOf,c=n.dasherize,h=n.classify,m=i["default"],p=a["default"];s["default"]=p.extend({container:null,resolver:null,canCatalogEntriesByType:function(e){return"model"===e||"template"===e?!1:!0},catalogEntriesByType:function(e){var t=u(m.NAMESPACES),r=u(),n=new RegExp(h(e)+"$");return t.forEach(function(e){if(e!==o)for(var t in e)if(e.hasOwnProperty(t)&&n.test(t)){var i=e[t];"class"===l(i)&&r.push(c(t.replace(n,"")))}}),r}})}),e("ember-extension-support/data_adapter",["ember-metal/property_get","ember-metal/run_loop","ember-runtime/system/string","ember-runtime/system/namespace","ember-runtime/system/object","ember-runtime/system/native_array","ember-application/system/application","exports"],function(e,t,r,n,i,a,s,o){"use strict";var u=e.get,l=t["default"],c=r.dasherize,h=n["default"],m=i["default"],p=a.A,f=s["default"];o["default"]=m.extend({init:function(){this._super(),this.releaseMethods=p()},container:null,containerDebugAdapter:void 0,attributeLimit:3,releaseMethods:p(),getFilters:function(){return p()},watchModelTypes:function(e,t){var r,n=this.getModelTypes(),i=this,a=p();r=n.map(function(e){var r=e.klass,n=i.wrapModelType(r,e.name);return a.push(i.observeModelType(r,t)),n}),e(r);var s=function(){a.forEach(function(e){e()}),i.releaseMethods.removeObject(s)};return this.releaseMethods.pushObject(s),s},_nameToClass:function(e){return"string"==typeof e&&(e=this.container.lookupFactory("model:"+e)),e},watchRecords:function(e,t,r,n){var i,a=this,s=p(),o=this.getRecords(e),u=function(e){r([e])},l=o.map(function(e){return s.push(a.observeRecord(e,u)),a.wrapRecord(e)}),c=function(e,r,i,o){for(var l=r;r+o>l;l++){var c=e.objectAt(l),h=a.wrapRecord(c); +s.push(a.observeRecord(c,u)),t([h])}i&&n(r,i)},h={didChange:c,willChange:function(){return this}};return o.addArrayObserver(a,h),i=function(){s.forEach(function(e){e()}),o.removeArrayObserver(a,h),a.releaseMethods.removeObject(i)},t(l),this.releaseMethods.pushObject(i),i},willDestroy:function(){this._super(),this.releaseMethods.forEach(function(e){e()})},detect:function(){return!1},columnsForType:function(){return p()},observeModelType:function(e,t){var r=this,n=this.getRecords(e),i=function(){t([r.wrapModelType(e)])},a={didChange:function(){l.scheduleOnce("actions",this,i)},willChange:function(){return this}};n.addArrayObserver(this,a);var s=function(){n.removeArrayObserver(r,a)};return s},wrapModelType:function(e,t){var r,n=this.getRecords(e);return r={name:t||e.toString(),count:u(n,"length"),columns:this.columnsForType(e),object:e}},getModelTypes:function(){var e,t=this,r=this.get("containerDebugAdapter");return e=r.canCatalogEntriesByType("model")?r.catalogEntriesByType("model"):this._getObjectsOnNamespaces(),e=p(e).map(function(e){return{klass:t._nameToClass(e),name:e}}),e=p(e).filter(function(e){return t.detect(e.klass)}),p(e)},_getObjectsOnNamespaces:function(){var e=p(h.NAMESPACES),t=p(),r=this;return e.forEach(function(e){for(var n in e)if(e.hasOwnProperty(n)&&r.detect(e[n])){var i=c(n);e instanceof f||!e.toString()||(i=e+"/"+i),t.push(i)}}),t},getRecords:function(){return p()},wrapRecord:function(e){var t={object:e};return t.columnValues=this.getRecordColumnValues(e),t.searchKeywords=this.getRecordKeywords(e),t.filterValues=this.getRecordFilterValues(e),t.color=this.getRecordColor(e),t},getRecordColumnValues:function(){return{}},getRecordKeywords:function(){return p()},getRecordFilterValues:function(){return{}},getRecordColor:function(){return null},observeRecord:function(){return function(){}}})}),e("ember-htmlbars",["ember-metal/core","ember-template-compiler","ember-htmlbars/hooks/inline","ember-htmlbars/hooks/content","ember-htmlbars/hooks/component","ember-htmlbars/hooks/block","ember-htmlbars/hooks/element","ember-htmlbars/hooks/subexpr","ember-htmlbars/hooks/attribute","ember-htmlbars/hooks/concat","ember-htmlbars/hooks/get","ember-htmlbars/hooks/set","morph","ember-htmlbars/system/make-view-helper","ember-htmlbars/system/make_bound_helper","ember-htmlbars/helpers","ember-htmlbars/helpers/binding","ember-htmlbars/helpers/view","ember-htmlbars/helpers/yield","ember-htmlbars/helpers/with","ember-htmlbars/helpers/log","ember-htmlbars/helpers/debugger","ember-htmlbars/helpers/bind-attr","ember-htmlbars/helpers/if_unless","ember-htmlbars/helpers/loc","ember-htmlbars/helpers/partial","ember-htmlbars/helpers/template","ember-htmlbars/helpers/input","ember-htmlbars/helpers/text_area","ember-htmlbars/helpers/collection","ember-htmlbars/helpers/each","ember-htmlbars/helpers/unbound","ember-htmlbars/system/bootstrap","ember-htmlbars/compat","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h,m,p,f,d,v,b,g,y,_,w,x,C,E,O,P,A,N,S,T,k,V,I,j){"use strict";var M=e["default"],R=t.precompile,D=t.compile,L=t.template,F=t.registerPlugin,B=r["default"],H=n["default"],z=i["default"],q=a["default"],U=s["default"],W=o["default"],K=u["default"],G=l["default"],Q=c["default"],$=h["default"],Y=m.DOMHelper,X=p["default"],Z=f["default"],J=d.registerHelper,et=d["default"],tt=v.bindHelper,rt=b.viewHelper,nt=g.yieldHelper,it=y.withHelper,at=_.logHelper,st=w.debuggerHelper,ot=x.bindAttrHelper,ut=x.bindAttrHelperDeprecated,lt=C.ifHelper,ct=C.unlessHelper,ht=C.unboundIfHelper,mt=C.boundIfHelper,pt=E.locHelper,ft=O.partialHelper,dt=P.templateHelper,vt=A.inputHelper,bt=N.textareaHelper,gt=S.collectionHelper,yt=T.eachHelper,_t=k.unboundHelper;J("bindHelper",tt),J("bind",tt),J("view",rt),J("yield",nt),J("with",it),J("if",lt),J("unless",ct),J("unboundIf",ht),J("boundIf",mt),J("log",at),J("debugger",st),J("loc",pt),J("partial",ft),J("template",dt),J("bind-attr",ot),J("bindAttr",ut),J("input",vt),J("textarea",bt),J("collection",gt),J("each",yt),J("unbound",_t),J("concat",G),M.HTMLBars={_registerHelper:J,template:L,compile:D,precompile:R,makeViewHelper:X,makeBoundHelper:Z,registerPlugin:F};var wt={dom:new Y,hooks:{get:Q,set:$,inline:B,content:H,block:q,element:U,subexpr:W,component:z,attribute:K,concat:G},helpers:et,useFragmentCache:!0};j.defaultEnv=wt}),e("ember-htmlbars/compat",["ember-metal/core","ember-htmlbars/helpers","ember-htmlbars/compat/helper","ember-htmlbars/compat/handlebars-get","ember-htmlbars/compat/make-bound-helper","ember-htmlbars/compat/register-bound-helper","ember-htmlbars/system/make-view-helper","ember-htmlbars/utils/string","exports"],function(e,t,r,n,i,a,s,o,u){"use strict";var l,c=e["default"],h=t["default"],m=r.registerHandlebarsCompatibleHelper,p=r.handlebarsHelper,f=n["default"],d=i["default"],v=a["default"],b=s["default"],g=o.SafeString,y=o.escapeExpression;l=c.Handlebars=c.Handlebars||{},l.helpers=h,l.helper=p,l.registerHelper=m,l.registerBoundHelper=v,l.makeBoundHelper=d,l.get=f,l.makeViewHelper=b,l.SafeString=g,l.Utils={escapeExpression:y},u["default"]=l}),e("ember-htmlbars/compat/handlebars-get",["exports"],function(e){"use strict";e["default"]=function(e,t,r){return r.data.view.getStream(t).value()}}),e("ember-htmlbars/compat/helper",["ember-metal/merge","ember-htmlbars/helpers","ember-views/views/view","ember-views/views/component","ember-htmlbars/system/make-view-helper","ember-htmlbars/compat/make-bound-helper","ember-metal/streams/utils","exports"],function(e,t,r,n,i,a,s,o){"use strict";function u(e){if(b(e))return"ID";var t=typeof e;return t.toUpperCase()}function l(e){this.helperFunction=function(t,r,n,i){var a,s,o,l=this,c={hash:{},types:new Array(t.length),hashTypes:{}};m(c,n),m(c,i),c.hash={},n.isBlock&&(c.fn=function(){s=n.template.render(l,i,n.morph.contextualElement)});for(var h in r)a=r[h],c.hashTypes[h]=u(a),c.hash[h]=b(a)?a._label:a;for(var p=new Array(t.length),f=0,d=t.length;d>f;f++)a=t[f],c.types[f]=u(a),p[f]=b(a)?a._label:a;return p.push(c),o=e.apply(this,p),n.isBlock?s:o},this.isHTMLBars=!0}function c(e,t){var r;r=t&&t.isHTMLBars?t:new l(t),p[e]=r}function h(e,t){if(f.detect(t))p[e]=d(t);else{var r=g.call(arguments,1),n=v.apply(this,r);p[e]=n}}var m=e["default"],p=t["default"],f=r["default"],d=(n["default"],i["default"]),v=a["default"],b=s.isStream,g=[].slice;l.prototype={preprocessArguments:function(){}},o.registerHandlebarsCompatibleHelper=c,o.handlebarsHelper=h,o["default"]=l}),e("ember-htmlbars/compat/make-bound-helper",["ember-metal/core","ember-metal/mixin","ember-htmlbars/system/helper","ember-metal/streams/stream","ember-metal/streams/utils","exports"],function(e,t,r,n,i,a){"use strict";var s=(e["default"],t.IS_BINDING),o=r["default"],u=n["default"],l=i.readArray,c=i.scanArray,h=i.scanHash,m=i.readHash,p=i.isStream;a["default"]=function(e){function t(t,i,a,o){function f(){for(var r=l(t),n=new Array(t.length),a=0,s=t.length;s>a;a++)d=t[a],n[a]=p(d)?d._label:d;return r.push({hash:m(i),data:{properties:n}}),e.apply(v,r)}var d,v=this,b=t.length;for(var g in i)s.test(g)&&(i[g.slice(0,-7)]=v.getStream(i[g]),delete i[g]);var y=c(t)||h(i);if(o.data.isUnbound||!y)return f();var _=new u(f);for(n=0;b>n;n++)d=t[n],p(d)&&d.subscribe(_.notify,_);for(g in i)d=i[g],p(d)&&d.subscribe(_.notify,_);if(b>0){var w=t[0];if(p(w)){var x=function(e){e.value(),_.notify()};for(n=0;nb;b++)u=v[b],"class"!==u&&(l=t[u],c=g(l)?l:a.getStream(l),m=new f(u,c),m._morph=n.dom.createAttrMorph(i,u),a.appendChild(m))}function h(e,t){var r=e.split(" "),n=b(r,function(e){return _(t,e)}),i=y(n," ");return i}function m(){return v["bind-attr"].helperFunction.apply(this,arguments)}var p=(e["default"],t.fmt,r["default"]),f=n["default"],d=i["default"],v=a["default"],b=s.map,g=o.isStream,y=o.concat,_=u.streamifyClassNameBinding;l["default"]=c,l.bindAttrHelper=c,l.bindAttrHelperDeprecated=m}),e("ember-htmlbars/helpers/binding",["ember-metal/is_none","ember-metal/run_loop","ember-metal/property_get","ember-metal/streams/simple","ember-views/views/bound_view","ember-metal/streams/utils","exports"],function(e,t,r,n,i,a,s){"use strict";function o(e){return!c(e)}function u(e,t,r,n,i,a,s,o,u){var l,c=d(e)?e:this.getStream(e);if(o){l=new p(c);for(var v=function(e){e.value(),l.notify()},b=0;b=2){n.data.isUnbound=!0;for(var l=e[0]._label,c=[],h=1,m=e.length;m>h;h++){var p=s(e[h]);c.push(p)}var f=a(l,this,n);if(!f)throw new o("HTMLBars error: Could not find component or helper named "+l+".");i=f.helperFunction.call(this,c,t,r,n),delete n.data.isUnbound}return i}var a=e["default"],s=t.read,o=r["default"];n.unboundHelper=i}),e("ember-htmlbars/helpers/view",["ember-metal/core","ember-runtime/system/object","ember-metal/property_get","ember-metal/streams/simple","ember-metal/keys","ember-metal/mixin","ember-metal/streams/utils","ember-views/streams/utils","ember-views/views/view","ember-metal/enumerable_utils","ember-views/streams/class_name_binding","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h){"use strict";function m(e,t,r){for(var n in e){var i=e[n];"class"===n&&_(i)?(e.classBinding=i._label,delete e["class"]):"classBinding"!==n&&(g.test(n)?_(i)||"string"==typeof i&&(e[n]=r._getBindingForStream(i)):_(i)&&"id"!==n&&(e[n+"Binding"]=r._getBindingForStream(i),delete e[n]))}}function p(e,t,r,n){var i,a=this.container||y(this._keywords.view).container;if(0===e.length)i=a?a.lookupFactory("view:toplevel"):x;else{var s=e[0];i=w(s,a)}return r.helperName=r.helperName||"view",O.helper(i,t,r,n)}var f=(e["default"],t["default"]),d=r.get,v=n["default"],b=i["default"],g=a.IS_BINDING,y=s.read,_=s.isStream,w=o.readViewFactory,x=u["default"],C=l.map,E=c.streamifyClassNameBinding,O=f.create({propertiesFromHTMLOptions:function(e,t,r){var n=r.data.view,i=y(e["class"]),a={helperName:t.helperName||""};e.id&&(a.elementId=y(e.id)),e.tag&&(a.tagName=e.tag),i&&(i=i.split(" "),a.classNames=i),e.classBinding&&(a.classNameBindings=e.classBinding.split(" ")),e.classNameBindings&&(void 0===a.classNameBindings&&(a.classNameBindings=[]),a.classNameBindings=a.classNameBindings.concat(e.classNameBindings.split(" "))),e.attributeBindings&&(a.attributeBindings=null);for(var s=b(e),o=0,u=s.length;u>o;o++){var l=s[o];"classNameBindings"!==l&&(a[l]=e[l])}return a.classNameBindings&&(a.classNameBindings=C(a.classNameBindings,function(e){var t=E(n,e);return _(t)?t:new v(t)})),a},helper:function(e,t,r,n){var i,a=n.data,s=r.template;m(t,r,n.data.view);var o=this.propertiesFromHTMLOptions(t,r,n),u=a.view;i=x.detectInstance(e)?e:e.proto(),s&&(o.template=s),i.controller||i.controllerBinding||o.controller||o.controllerBinding||(o._context=d(u,"context")),o._morph=r.morph,u.appendChild(e,o)},instanceHelper:function(e,t,r,n){var i=n.data,a=r.template;m(t,r,n.data.view);var s=this.propertiesFromHTMLOptions(t,r,n),o=i.view;a&&(s.template=a),e.controller||e.controllerBinding||s.controller||s.controllerBinding||(s._context=d(o,"context")),s._morph=r.morph,o.appendChild(e,s)}});h.ViewHelper=O,h.viewHelper=p}),e("ember-htmlbars/helpers/with",["ember-metal/core","ember-metal/is_none","ember-htmlbars/helpers/binding","ember-views/views/with_view","exports"],function(e,t,r,n,i){"use strict";function a(e,t,r,n){var i;i=r.template.blockParams?!0:!1,u.call(this,e[0],t,r,n,i,s,void 0,void 0,l)}function s(e){return!o(e)}var o=(e["default"],t["default"]),u=r.bind,l=n["default"];i.withHelper=a}),e("ember-htmlbars/helpers/yield",["ember-metal/core","ember-metal/property_get","exports"],function(e,t,r){"use strict";function n(e,t,r,n){for(var a=this;a&&!i(a,"layout");)a=a._contextView?a._contextView:i(a,"_parentView");return a._yield(this,n,r.morph,e)}var i=(e["default"],t.get);r.yieldHelper=n}),e("ember-htmlbars/hooks/attribute",["ember-views/attr_nodes/attr_node","ember-metal/error","ember-metal/streams/utils","ember-views/system/sanitize_attribute_value","exports"],function(e,t,r,n,i){"use strict";var a=e["default"],s=t["default"],o=r.isStream,u=n["default"],l=!1;i["default"]=function(e,t,r,n,i){if(l){var c=new a(n,i);c._morph=t,e.data.view.appendChild(c)}else{if(o(i))throw new s("Bound attributes are not yet supported in Ember.js");var h=u(r,n,i);e.dom.setProperty(r,n,h)}}}),e("ember-htmlbars/hooks/block",["ember-views/views/simple_bound_view","ember-metal/streams/utils","ember-htmlbars/system/lookup-helper","exports"],function(e,t,r,n){"use strict";var i=e.appendSimpleBoundView,a=t.isStream,s=r["default"];n["default"]=function(e,t,r,n,o,u,l,c){var h=s(n,r,e),m={morph:t,template:l,inverse:c,isBlock:!0},p=h.helperFunction.call(r,o,u,m,e);a(p)?i(r,t,p):t.setContent(p)}}),e("ember-htmlbars/hooks/component",["ember-metal/core","ember-htmlbars/system/lookup-helper","exports"],function(e,t,r){"use strict";var n=(e["default"],t["default"]);r["default"]=function(e,t,r,i,a,s){var o=n(i,r,e);return o.helperFunction.call(r,[],a,{morph:t,template:s},e)}}),e("ember-htmlbars/hooks/concat",["ember-metal/streams/utils","exports"],function(e,t){"use strict";var r=e.concat;t["default"]=function(e,t){return r(t,"")}}),e("ember-htmlbars/hooks/content",["ember-views/views/simple_bound_view","ember-metal/streams/utils","ember-htmlbars/system/lookup-helper","exports"],function(e,t,r,n){"use strict";var i=e.appendSimpleBoundView,a=t.isStream,s=r["default"];n["default"]=function(e,t,r,n){var o,u=s(n,r,e);if(u){var l={morph:t,isInline:!0};o=u.helperFunction.call(r,[],{},l,e)}else o=r.getStream(n);a(o)?i(r,t,o):t.setContent(o)}}),e("ember-htmlbars/hooks/element",["ember-metal/core","ember-metal/streams/utils","ember-htmlbars/system/lookup-helper","exports"],function(e,t,r,n){"use strict";var i=(e["default"],t.read),a=r["default"];n["default"]=function(e,t,r,n,s,o){var u,l=a(n,r,e);if(l){var c={element:t};u=l.helperFunction.call(r,s,o,c,e)}else u=r.getStream(n);var h=i(u);if(h)for(var m=h.toString().split(/\s+/),p=0,f=m.length;f>p;p++){var d=m[p].split("="),v=d[0],b=d[1];b=b.replace(/^['"]/,"").replace(/['"]$/,""),e.dom.setAttribute(t,v,b)}}}),e("ember-htmlbars/hooks/get",["exports"],function(e){"use strict";e["default"]=function(e,t,r){return t.getStream(r)}}),e("ember-htmlbars/hooks/inline",["ember-views/views/simple_bound_view","ember-metal/streams/utils","ember-htmlbars/system/lookup-helper","exports"],function(e,t,r,n){"use strict";var i=e.appendSimpleBoundView,a=t.isStream,s=r["default"];n["default"]=function(e,t,r,n,o,u){var l=s(n,r,e),c=l.helperFunction.call(r,o,u,{morph:t},e);a(c)?i(r,t,c):t.setContent(c)}}),e("ember-htmlbars/hooks/set",["ember-metal/core","ember-metal/error","exports"],function(e,t,r){"use strict";e["default"],t["default"];r["default"]=function(e,t,r,n){t._keywords[r]=n}}),e("ember-htmlbars/hooks/subexpr",["ember-htmlbars/system/lookup-helper","exports"],function(e,t){"use strict";var r=e["default"];t["default"]=function(e,t,n,i,a){var s=r(n,t,e),o={isInline:!0};return s.helperFunction.call(t,i,a,o,e)}}),e("ember-htmlbars/system/bootstrap",["ember-metal/core","ember-views/component_lookup","ember-views/system/jquery","ember-metal/error","ember-runtime/system/lazy_load","ember-template-compiler/system/compile","exports"],function(e,t,r,n,i,a,s){"use strict";function o(e){var t='script[type="text/x-handlebars"], script[type="text/x-raw-handlebars"]';m(t,e).each(function(){var e=m(this),t="text/x-raw-handlebars"===e.attr("type")?m.proxy(Handlebars.compile,Handlebars):d,r=e.attr("data-template-name")||e.attr("id")||"application",n=t(e.html());if(void 0!==c.TEMPLATES[r])throw new p('Template named "'+r+'" already exists.');c.TEMPLATES[r]=n,e.remove()})}function u(){o(m(document))}function l(e){e.register("component-lookup:main",h)}var c=e["default"],h=t["default"],m=r["default"],p=n["default"],f=i.onLoad,d=a["default"];f("Ember.Application",function(e){e.initializer({name:"domTemplates",initialize:u}),e.initializer({name:"registerComponentLookup",after:"domTemplates",initialize:l})}),s["default"]=o}),e("ember-htmlbars/system/helper",["exports"],function(e){"use strict";function t(e){this.helperFunction=e,this.isHelper=!0,this.isHTMLBars=!0}e["default"]=t}),e("ember-htmlbars/system/lookup-helper",["ember-metal/core","ember-metal/cache","ember-htmlbars/system/make-view-helper","ember-htmlbars/compat/helper","exports"],function(e,t,r,n,i){"use strict";var a=(e["default"],t["default"]),s=r["default"],o=n["default"],u=new a(1e3,function(e){return-1===e.indexOf("-")});i.ISNT_HELPER_CACHE=u,i["default"]=function(e,t,r){var n=r.helpers[e];if(n)return n;var i=t.container;if(i&&!u.get(e)){var a="helper:"+e;if(n=i.lookup(a),!n){var l=i.lookup("component-lookup:main"),c=l.lookupFactory(e,i);c&&(n=s(c),i.register(a,n))}return n&&!n.isHTMLBars&&(n=new o(n),i.unregister(a),i.register(a,n)),n}}}),e("ember-htmlbars/system/make-view-helper",["ember-metal/core","ember-htmlbars/system/helper","exports"],function(e,t,r){"use strict";var n=(e["default"],t["default"]);r["default"]=function(e){function t(t,r,n,i){return i.helpers.view.helperFunction.call(this,[e],r,n,i)}return new n(t)}}),e("ember-htmlbars/system/make_bound_helper",["ember-metal/core","ember-htmlbars/system/helper","ember-metal/streams/stream","ember-metal/streams/utils","exports"],function(e,t,r,n,i){"use strict";var a=(e["default"],t["default"]),s=r["default"],o=n.readArray,u=n.readHash,l=n.subscribe,c=n.scanHash,h=n.scanArray;i["default"]=function(e){function t(t,r,n,i){function a(){return e.call(f,o(t),u(r),n,i)}var m,p,f=this,d=t.length,v=h(t)||c(r);if(i.data.isUnbound||!v)return a();for(var b=new s(a),g=0;d>g;g++)m=t[g],l(m,b.notify,b);for(p in r)m=r[p],l(m,b.notify,b);return b}return new a(t)}}),e("ember-htmlbars/templates/component",["ember-template-compiler/system/template","exports"],function(e,t){"use strict";var r=e["default"],n=function(){return{isHTMLBars:!0,blockParams:0,cachedFragment:null,hasRendered:!1,build:function(e){var t=e.createDocumentFragment(),r=e.createTextNode("");e.appendChild(t,r);var r=e.createTextNode("");return e.appendChild(t,r),t},render:function(e,t,r){var n=t.dom,i=t.hooks,a=i.content;n.detectNamespace(r);var s;t.useFragmentCache&&n.canClone?(null===this.cachedFragment&&(s=this.build(n),this.hasRendered?this.cachedFragment=s:this.hasRendered=!0),this.cachedFragment&&(s=n.cloneNode(this.cachedFragment,!0))):s=this.build(n),this.cachedFragment&&n.repairClonedNode(s,[0,1]);var o=n.createMorphAt(s,0,1,r);return a(t,o,e,"yield"),s}}}();t["default"]=r(n)}),e("ember-htmlbars/templates/link-to-escaped",["ember-template-compiler/system/template","exports"],function(e,t){"use strict";var r=e["default"],n=function(){return{isHTMLBars:!0,blockParams:0,cachedFragment:null,hasRendered:!1,build:function(e){var t=e.createDocumentFragment(),r=e.createTextNode("");e.appendChild(t,r);var r=e.createTextNode("");return e.appendChild(t,r),t},render:function(e,t,r){var n=t.dom,i=t.hooks,a=i.content;n.detectNamespace(r);var s;t.useFragmentCache&&n.canClone?(null===this.cachedFragment&&(s=this.build(n),this.hasRendered?this.cachedFragment=s:this.hasRendered=!0),this.cachedFragment&&(s=n.cloneNode(this.cachedFragment,!0))):s=this.build(n),this.cachedFragment&&n.repairClonedNode(s,[0,1]);var o=n.createMorphAt(s,0,1,r);return a(t,o,e,"linkTitle"),s}}}();t["default"]=r(n)}),e("ember-htmlbars/templates/link-to-unescaped",["ember-template-compiler/system/template","exports"],function(e,t){"use strict";var r=e["default"],n=function(){return{isHTMLBars:!0,blockParams:0,cachedFragment:null,hasRendered:!1,build:function(e){var t=e.createDocumentFragment(),r=e.createTextNode("");e.appendChild(t,r);var r=e.createTextNode("");return e.appendChild(t,r),t},render:function(e,t,r){var n=t.dom,i=t.hooks,a=i.content;n.detectNamespace(r);var s;t.useFragmentCache&&n.canClone?(null===this.cachedFragment&&(s=this.build(n),this.hasRendered?this.cachedFragment=s:this.hasRendered=!0),this.cachedFragment&&(s=n.cloneNode(this.cachedFragment,!0))):s=this.build(n),this.cachedFragment&&n.repairClonedNode(s,[0,1]);var o=n.createUnsafeMorphAt(s,0,1,r);return a(t,o,e,"linkTitle"),s}}}();t["default"]=r(n)}),e("ember-htmlbars/templates/select",["ember-template-compiler/system/template","exports"],function(e,t){"use strict";var r=e["default"],n=function(){var e=function(){return{isHTMLBars:!0,blockParams:0,cachedFragment:null,hasRendered:!1,build:function(e){var t=e.createElement("option");return e.setAttribute(t,"value",""),t},render:function(e,t,r){var n=t.dom,i=t.hooks,a=i.content;n.detectNamespace(r);var s;t.useFragmentCache&&n.canClone?(null===this.cachedFragment&&(s=this.build(n),this.hasRendered?this.cachedFragment=s:this.hasRendered=!0),this.cachedFragment&&(s=n.cloneNode(this.cachedFragment,!0))):s=this.build(n);var o=n.createMorphAt(s,-1,-1);return a(t,o,e,"view.prompt"),s}}}(),t=function(){var e=function(){return{isHTMLBars:!0,blockParams:0,cachedFragment:null,hasRendered:!1,build:function(e){var t=e.createDocumentFragment(),r=e.createTextNode("");e.appendChild(t,r);var r=e.createTextNode("");return e.appendChild(t,r),t},render:function(e,t,r){var n=t.dom,i=t.hooks,a=i.get,s=i.inline;n.detectNamespace(r);var o;t.useFragmentCache&&n.canClone?(null===this.cachedFragment&&(o=this.build(n),this.hasRendered?this.cachedFragment=o:this.hasRendered=!0),this.cachedFragment&&(o=n.cloneNode(this.cachedFragment,!0))):o=this.build(n),this.cachedFragment&&n.repairClonedNode(o,[0,1]);var u=n.createMorphAt(o,0,1,r);return s(t,u,e,"view",[a(t,e,"view.groupView")],{content:a(t,e,"group.content"),label:a(t,e,"group.label")}),o}}}();return{isHTMLBars:!0,blockParams:0,cachedFragment:null,hasRendered:!1,build:function(e){var t=e.createDocumentFragment(),r=e.createTextNode("");e.appendChild(t,r);var r=e.createTextNode("");return e.appendChild(t,r),t},render:function(t,r,n){var i=r.dom,a=r.hooks,s=a.get,o=a.block;i.detectNamespace(n);var u;r.useFragmentCache&&i.canClone?(null===this.cachedFragment&&(u=this.build(i),this.hasRendered?this.cachedFragment=u:this.hasRendered=!0),this.cachedFragment&&(u=i.cloneNode(this.cachedFragment,!0))):u=this.build(i),this.cachedFragment&&i.repairClonedNode(u,[0,1]);var l=i.createMorphAt(u,0,1,n);return o(r,l,t,"each",[s(r,t,"view.groupedContent")],{keyword:"group"},e,null),u}}}(),r=function(){var e=function(){return{isHTMLBars:!0,blockParams:0,cachedFragment:null,hasRendered:!1,build:function(e){var t=e.createDocumentFragment(),r=e.createTextNode("");e.appendChild(t,r);var r=e.createTextNode("");return e.appendChild(t,r),t},render:function(e,t,r){var n=t.dom,i=t.hooks,a=i.get,s=i.inline;n.detectNamespace(r);var o;t.useFragmentCache&&n.canClone?(null===this.cachedFragment&&(o=this.build(n),this.hasRendered?this.cachedFragment=o:this.hasRendered=!0),this.cachedFragment&&(o=n.cloneNode(this.cachedFragment,!0))):o=this.build(n),this.cachedFragment&&n.repairClonedNode(o,[0,1]);var u=n.createMorphAt(o,0,1,r);return s(t,u,e,"view",[a(t,e,"view.optionView")],{content:a(t,e,"item")}),o}}}();return{isHTMLBars:!0,blockParams:0,cachedFragment:null,hasRendered:!1,build:function(e){var t=e.createDocumentFragment(),r=e.createTextNode("");e.appendChild(t,r);var r=e.createTextNode("");return e.appendChild(t,r),t},render:function(t,r,n){var i=r.dom,a=r.hooks,s=a.get,o=a.block;i.detectNamespace(n);var u;r.useFragmentCache&&i.canClone?(null===this.cachedFragment&&(u=this.build(i),this.hasRendered?this.cachedFragment=u:this.hasRendered=!0),this.cachedFragment&&(u=i.cloneNode(this.cachedFragment,!0))):u=this.build(i),this.cachedFragment&&i.repairClonedNode(u,[0,1]);var l=i.createMorphAt(u,0,1,n);return o(r,l,t,"each",[s(r,t,"view.content")],{keyword:"item"},e,null),u}}}();return{isHTMLBars:!0,blockParams:0,cachedFragment:null,hasRendered:!1,build:function(e){var t=e.createDocumentFragment(),r=e.createTextNode("");e.appendChild(t,r);var r=e.createTextNode("");e.appendChild(t,r);var r=e.createTextNode("\n");return e.appendChild(t,r),t},render:function(n,i,a){var s=i.dom,o=i.hooks,u=o.get,l=o.block;s.detectNamespace(a);var c;i.useFragmentCache&&s.canClone?(null===this.cachedFragment&&(c=this.build(s),this.hasRendered?this.cachedFragment=c:this.hasRendered=!0),this.cachedFragment&&(c=s.cloneNode(this.cachedFragment,!0))):c=this.build(s),this.cachedFragment&&s.repairClonedNode(c,[0,1]); +var h=s.createMorphAt(c,0,1,a),m=s.createMorphAt(c,1,2,a);return l(i,h,n,"if",[u(i,n,"view.prompt")],{},e,null),l(i,m,n,"if",[u(i,n,"view.optionGroupPath")],{},t,r),c}}}();t["default"]=r(n)}),e("ember-htmlbars/utils/string",["htmlbars-util","ember-runtime/system/string","exports"],function(e,t,r){"use strict";function n(e){return null===e||void 0===e?"":("string"!=typeof e&&(e=""+e),new a(e))}var a=e.SafeString,s=e.escapeExpression,o=t["default"];o.htmlSafe=n,(i.EXTEND_PROTOTYPES===!0||i.EXTEND_PROTOTYPES.String)&&(String.prototype.htmlSafe=function(){return n(this)}),r.SafeString=a,r.htmlSafe=n,r.escapeExpression=s}),e("ember-metal-views",["ember-metal-views/renderer","exports"],function(e,t){"use strict";var r=e["default"];t.Renderer=r}),e("ember-metal-views/renderer",["morph","exports"],function(e,t){"use strict";function r(){this._uuid=0,this._views=new Array(2e3),this._queue=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this._parents=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this._elements=new Array(17),this._inserts={},this._dom=new u}function n(e,t,r){var n=this._views;n[0]=e;var i=void 0===r?-1:r,a=0,s=1,o=t?t._level+1:0,u=null==t?e:t._root,l=!!u._morph,c=this._queue;c[0]=0;for(var h,m,p,f=1,d=-1,v=this._parents,b=t||null,g=this._elements,y=null,_=null,w=0,x=e;f;){if(g[w]=y,x._morph||(x._morph=null),x._root=u,this.uuid(x),x._level=o+w,x._elementCreated&&this.remove(x,!1,!0),this.willCreateElement(x),_=x._morph&&x._morph.contextualElement,!_&&b&&b._childViewsMorph&&(_=b._childViewsMorph.contextualElement),!_&&x._didCreateElementWithoutMorph&&(_=document.body),y=this.createElement(x,_),v[w++]=d,d=a,b=x,c[f++]=a,h=this.childViews(x))for(m=h.length-1;m>=0;m--)p=h[m],a=s++,n[a]=p,c[f++]=a,x=p;for(a=c[--f],x=n[a];d===a;){if(w--,x._elementCreated=!0,this.didCreateElement(x),l&&this.willInsertElement(x),0===w){f--;break}d=v[w],b=-1===d?t:n[d],this.insertElement(x,b,y,-1),a=c[--f],x=n[a],y=g[w],g[w]=null}}for(this.insertElement(x,t,y,i),m=s-1;m>=0;m--)l&&(n[m]._elementInserted=!0,this.didInsertElement(n[m])),n[m]=null;return y}function i(e,t,r){var n=this.uuid(e);if(this._inserts[n]&&(this.cancelRender(this._inserts[n]),this._inserts[n]=void 0),e._elementCreated){var i,a,s,o,u,l,c,h=[],m=[],p=e._morph;for(h.push(e),i=0;il;l++)o.push(u[l]);for(i=0;il;l++)m.push(u[l]);for(p&&!r&&p.destroy(),i=0,a=h.length;a>i;i++)this.afterRemove(h[i],!1);for(i=0,a=m.length;a>i;i++)this.afterRemove(m[i],!0);r&&(e._morph=p)}}function a(e,t,r,n){null!==r&&void 0!==r&&(e._morph?e._morph.setContent(r):t&&(e._morph=-1===n?t._childViewsMorph.append(r):t._childViewsMorph.insert(n,r)))}function s(e){e._elementCreated&&this.willDestroyElement(e),e._elementInserted&&this.willRemoveElement(e)}function o(e,t){e._elementInserted=!1,e._morph=null,e._childViewsMorph=null,e._elementCreated&&(e._elementCreated=!1,this.didDestroyElement(e)),t&&this.destroyView(e)}var u=e.DOMHelper;r.prototype.uuid=function(e){return void 0===e._uuid&&(e._uuid=++this._uuid,e._renderer=this),e._uuid},r.prototype.scheduleInsert=function(e,t){if(e._morph||e._elementCreated)throw new Error("You cannot insert a View that has already been rendered");e._morph=t;var r=this.uuid(e);this._inserts[r]=this.scheduleRender(this,function(){this._inserts[r]=null,this.renderTree(e)})},r.prototype.appendTo=function(e,t){var r=this._dom.appendMorph(t);this.scheduleInsert(e,r)},r.prototype.replaceIn=function(e,t){var r=this._dom.createMorph(t,null,null);this.scheduleInsert(e,r)},r.prototype.remove=i,r.prototype.destroy=function(e){this.remove(e,!0)},r.prototype.renderTree=n,r.prototype.insertElement=a,r.prototype.beforeRemove=s,r.prototype.afterRemove=o;var l=function(){};r.prototype.willCreateElement=l,r.prototype.createElement=l,r.prototype.didCreateElement=l,r.prototype.willInsertElement=l,r.prototype.didInsertElement=l,r.prototype.willRemoveElement=l,r.prototype.willDestroyElement=l,r.prototype.didDestroyElement=l,r.prototype.destroyView=l,r.prototype.childViews=l,t["default"]=r}),e("ember-metal",["ember-metal/core","ember-metal/merge","ember-metal/instrumentation","ember-metal/utils","ember-metal/error","ember-metal/enumerable_utils","ember-metal/cache","ember-metal/platform","ember-metal/array","ember-metal/logger","ember-metal/property_get","ember-metal/events","ember-metal/observer_set","ember-metal/property_events","ember-metal/properties","ember-metal/property_set","ember-metal/map","ember-metal/get_properties","ember-metal/set_properties","ember-metal/watch_key","ember-metal/chains","ember-metal/watch_path","ember-metal/watching","ember-metal/expand_properties","ember-metal/computed","ember-metal/computed_macros","ember-metal/observer","ember-metal/mixin","ember-metal/binding","ember-metal/run_loop","ember-metal/libraries","ember-metal/is_none","ember-metal/is_empty","ember-metal/is_blank","ember-metal/is_present","ember-metal/keys","backburner","exports"],function(e,r,n,i,a,s,o,u,l,c,h,m,p,f,d,v,b,g,y,_,w,x,C,E,O,P,A,N,S,T,k,V,I,j,M,R,D,L){"use strict";var F=e["default"],B=r["default"],H=n.instrument,z=n.reset,q=n.subscribe,U=n.unsubscribe,W=i.EMPTY_META,K=i.GUID_KEY,G=i.META_DESC,Q=i.apply,$=i.applyStr,Y=i.canInvoke,X=i.generateGuid,Z=i.getMeta,J=i.guidFor,et=i.inspect,tt=i.isArray,rt=i.makeArray,nt=i.meta,it=i.metaPath,at=i.setMeta,st=i.tryCatchFinally,ot=i.tryFinally,ut=i.tryInvoke,lt=i.typeOf,ct=i.uuid,ht=i.wrap,mt=a["default"],pt=s["default"],ft=o["default"],dt=u.create,vt=u.hasPropertyAccessors,bt=l.filter,gt=l.forEach,yt=l.indexOf,_t=l.map,wt=c["default"],xt=h._getPath,Ct=h.get,Et=h.getWithDefault,Ot=h.normalizeTuple,Pt=m.accumulateListeners,At=m.addListener,Nt=m.hasListeners,St=m.listenersFor,Tt=m.on,kt=m.removeListener,Vt=m.sendEvent,It=m.suspendListener,jt=m.suspendListeners,Mt=m.watchedEvents,Rt=p["default"],Dt=f.beginPropertyChanges,Lt=f.changeProperties,Ft=f.endPropertyChanges,Bt=f.overrideChains,Ht=f.propertyDidChange,zt=f.propertyWillChange,qt=d.Descriptor,Ut=d.defineProperty,Wt=v.set,Kt=v.trySet,Gt=b.Map,Qt=b.MapWithDefault,$t=b.OrderedSet,Yt=g["default"],Xt=y["default"],Zt=_.watchKey,Jt=_.unwatchKey,er=w.ChainNode,tr=w.finishChains,rr=w.flushPendingChains,nr=w.removeChainWatcher,ir=x.watchPath,ar=x.unwatchPath,sr=C.destroy,or=C.isWatching,ur=C.rewatch,lr=C.unwatch,cr=C.watch,hr=E["default"],mr=O.ComputedProperty,pr=O.computed,fr=O.cacheFor,dr=A._suspendBeforeObserver,vr=A._suspendBeforeObservers,br=A._suspendObserver,gr=A._suspendObservers,yr=A.addBeforeObserver,_r=A.addObserver,wr=A.beforeObserversFor,xr=A.observersFor,Cr=A.removeBeforeObserver,Er=A.removeObserver,Or=N.IS_BINDING,Pr=N.Mixin,Ar=N.aliasMethod,Nr=N.beforeObserver,Sr=N.immediateObserver,Tr=N.mixin,kr=N.observer,Vr=N.required,Ir=S.Binding,jr=S.bind,Mr=S.isGlobalPath,Rr=S.oneWay,Dr=T["default"],Lr=k["default"],Fr=V["default"],Br=I["default"],Hr=j["default"],zr=M["default"],qr=R["default"],Ur=D["default"],Wr=F.Instrumentation={};Wr.instrument=H,Wr.subscribe=q,Wr.unsubscribe=U,Wr.reset=z,F.instrument=H,F.subscribe=q,F._Cache=ft,F.generateGuid=X,F.GUID_KEY=K,F.create=dt,F.keys=qr,F.platform={defineProperty:Ut,hasPropertyAccessors:vt};var Kr=F.ArrayPolyfills={};Kr.map=_t,Kr.forEach=gt,Kr.filter=bt,Kr.indexOf=yt,F.Error=mt,F.guidFor=J,F.META_DESC=G,F.EMPTY_META=W,F.meta=nt,F.getMeta=Z,F.setMeta=at,F.metaPath=it,F.inspect=et,F.typeOf=lt,F.tryCatchFinally=st,F.isArray=tt,F.makeArray=rt,F.canInvoke=Y,F.tryInvoke=ut,F.tryFinally=ot,F.wrap=ht,F.apply=Q,F.applyStr=$,F.uuid=ct,F.Logger=wt,F.get=Ct,F.getWithDefault=Et,F.normalizeTuple=Ot,F._getPath=xt,F.EnumerableUtils=pt,F.on=Tt,F.addListener=At,F.removeListener=kt,F._suspendListener=It,F._suspendListeners=jt,F.sendEvent=Vt,F.hasListeners=Nt,F.watchedEvents=Mt,F.listenersFor=St,F.accumulateListeners=Pt,F._ObserverSet=Rt,F.propertyWillChange=zt,F.propertyDidChange=Ht,F.overrideChains=Bt,F.beginPropertyChanges=Dt,F.endPropertyChanges=Ft,F.changeProperties=Lt,F.Descriptor=qt,F.defineProperty=Ut,F.set=Wt,F.trySet=Kt,F.OrderedSet=$t,F.Map=Gt,F.MapWithDefault=Qt,F.getProperties=Yt,F.setProperties=Xt,F.watchKey=Zt,F.unwatchKey=Jt,F.flushPendingChains=rr,F.removeChainWatcher=nr,F._ChainNode=er,F.finishChains=tr,F.watchPath=ir,F.unwatchPath=ar,F.watch=cr,F.isWatching=or,F.unwatch=lr,F.rewatch=ur,F.destroy=sr,F.expandProperties=hr,F.ComputedProperty=mr,F.computed=pr,F.cacheFor=fr,F.addObserver=_r,F.observersFor=xr,F.removeObserver=Er,F.addBeforeObserver=yr,F._suspendBeforeObserver=dr,F._suspendBeforeObservers=vr,F._suspendObserver=br,F._suspendObservers=gr,F.beforeObserversFor=wr,F.removeBeforeObserver=Cr,F.IS_BINDING=Or,F.required=Vr,F.aliasMethod=Ar,F.observer=kr,F.immediateObserver=Sr,F.beforeObserver=Nr,F.mixin=Tr,F.Mixin=Pr,F.oneWay=Rr,F.bind=jr,F.Binding=Ir,F.isGlobalPath=Mr,F.run=Dr,F.Backburner=Ur,F.libraries=new Lr,F.libraries.registerCoreLibrary("Ember",F.VERSION),F.isNone=Fr,F.isEmpty=Br,F.isBlank=Hr,F.isPresent=zr,F.merge=B,F.onerror=null,F.__loader.registry["ember-debug"]&&t("ember-debug"),L["default"]=F}),e("ember-metal/alias",["ember-metal/property_get","ember-metal/property_set","ember-metal/core","ember-metal/error","ember-metal/properties","ember-metal/computed","ember-metal/platform","ember-metal/utils","ember-metal/dependent_keys","exports"],function(e,t,r,n,i,a,s,o,u,l){"use strict";function c(e){this.altKey=e,this._dependentKeys=[e]}function h(e,t){throw new d('Cannot set read-only property "'+t+'" on object: '+w(e))}function m(e,t,r){return b(e,t,null),f(e,t,r)}var p=e.get,f=t.set,d=(r["default"],n["default"]),v=i.Descriptor,b=i.defineProperty,g=a.ComputedProperty,y=s.create,_=o.meta,w=o.inspect,x=u.addDependentKeys,C=u.removeDependentKeys;l["default"]=function(e){return new c(e)},l.AliasedProperty=c,c.prototype=y(v.prototype),c.prototype.get=function(e){return p(e,this.altKey)},c.prototype.set=function(e,t,r){return f(e,this.altKey,r)},c.prototype.willWatch=function(e,t){x(this,e,t,_(e))},c.prototype.didUnwatch=function(e,t){C(this,e,t,_(e))},c.prototype.setup=function(e,t){var r=_(e);r.watching[t]&&x(this,e,t,r)},c.prototype.teardown=function(e,t){var r=_(e);r.watching[t]&&C(this,e,t,r)},c.prototype.readOnly=function(){return this.set=h,this},c.prototype.oneWay=function(){return this.set=m,this},c.prototype._meta=void 0,c.prototype.meta=g.prototype.meta}),e("ember-metal/array",["exports"],function(e){"use strict";var t=Array.prototype,r=function(e){return e&&Function.prototype.toString.call(e).indexOf("[native code]")>-1},n=function(e,t){return r(e)?e:t},a=n(t.map,function(e){if(void 0===this||null===this||"function"!=typeof e)throw new TypeError;for(var t=Object(this),r=t.length>>>0,n=new Array(r),i=arguments[1],a=0;r>a;a++)a in t&&(n[a]=e.call(i,t[a],a,t));return n}),s=n(t.forEach,function(e){if(void 0===this||null===this||"function"!=typeof e)throw new TypeError;for(var t=Object(this),r=t.length>>>0,n=arguments[1],i=0;r>i;i++)i in t&&e.call(n,t[i],i,t)}),o=n(t.indexOf,function(e,t){null===t||void 0===t?t=0:0>t&&(t=Math.max(0,this.length+t));for(var r=t,n=this.length;n>r;r++)if(this[r]===e)return r;return-1}),u=n(t.lastIndexOf,function(e,t){var r,n=this.length;for(t=void 0===t?n-1:0>t?Math.ceil(t):Math.floor(t),0>t&&(t+=n),r=t;r>=0;r--)if(this[r]===e)return r;return-1}),l=n(t.filter,function(e,t){var r,n,i=[],a=this.length;for(r=0;a>r;r++)this.hasOwnProperty(r)&&(n=this[r],e.call(t,n,r,this)&&i.push(n));return i});i.SHIM_ES5&&(t.map=t.map||a,t.forEach=t.forEach||s,t.filter=t.filter||l,t.indexOf=t.indexOf||o,t.lastIndexOf=t.lastIndexOf||u),e.map=a,e.forEach=s,e.filter=l,e.indexOf=o,e.lastIndexOf=u}),e("ember-metal/binding",["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/observer","ember-metal/run_loop","ember-metal/path_cache","exports"],function(e,t,r,n,i,a,s,o){"use strict";function u(e,t){return f(w(t)?p.lookup:e,t)}function l(e,t){this._direction=void 0,this._from=t,this._to=e,this._readyToSync=void 0,this._oneWay=void 0}function c(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])}function h(e,t,r){return new l(t,r).connect(e)}function m(e,t,r){return new l(t,r).oneWay().connect(e)}var p=e["default"],f=t.get,d=r.trySet,v=n.guidFor,b=i.addObserver,g=i.removeObserver,y=i._suspendObserver,_=a["default"],w=s.isGlobal;p.LOG_BINDINGS=!1||!!p.ENV.LOG_BINDINGS,l.prototype={copy:function(){var e=new l(this._to,this._from);return this._oneWay&&(e._oneWay=!0),e},from:function(e){return this._from=e,this},to:function(e){return this._to=e,this},oneWay:function(){return this._oneWay=!0,this},toString:function(){var e=this._oneWay?"[oneWay]":"";return"Ember.Binding<"+v(this)+">("+this._from+" -> "+this._to+")"+e},connect:function(e){var t=this._from,r=this._to;return d(e,r,u(e,t)),b(e,t,this,this.fromDidChange),this._oneWay||b(e,r,this,this.toDidChange),this._readyToSync=!0,this},disconnect:function(e){var t=!this._oneWay;return g(e,this._from,this,this.fromDidChange),t&&g(e,this._to,this,this.toDidChange),this._readyToSync=!1,this},fromDidChange:function(e){this._scheduleSync(e,"fwd")},toDidChange:function(e){this._scheduleSync(e,"back")},_scheduleSync:function(e,t){var r=this._direction;void 0===r&&(_.schedule("sync",this,this._sync,e),this._direction=t),"back"===r&&"fwd"===t&&(this._direction="fwd")},_sync:function(e){var t=p.LOG_BINDINGS;if(!e.isDestroyed&&this._readyToSync){var r=this._direction,n=this._from,i=this._to;if(this._direction=void 0,"fwd"===r){var a=u(e,this._from);t&&p.Logger.log(" ",this.toString(),"->",a,e),this._oneWay?d(e,i,a):y(e,i,this,this.toDidChange,function(){d(e,i,a)})}else if("back"===r){var s=f(e,this._to);t&&p.Logger.log(" ",this.toString(),"<-",s,e),y(e,n,this,this.fromDidChange,function(){d(w(n)?p.lookup:e,n,s)})}}}},c(l,{from:function(e){var t=this;return new t(void 0,e)},to:function(e){var t=this;return new t(e,void 0)},oneWay:function(e,t){var r=this;return new r(void 0,e).oneWay(t)}}),o.bind=h,o.oneWay=m,o.Binding=l,o.isGlobalPath=w}),e("ember-metal/cache",["ember-metal/dictionary","exports"],function(e,t){"use strict";function r(e,t){this.store=n(null),this.size=0,this.misses=0,this.hits=0,this.limit=e,this.func=t}var n=e["default"];t["default"]=r;var i=function(){};r.prototype={set:function(e,t){return this.limit>this.size&&(this.size++,this.store[e]=void 0===t?i:t),t},get:function(e){var t=this.store[e];return void 0===t?(this.misses++,t=this.set(e,this.func(e))):t===i?(this.hits++,t=void 0):this.hits++,t},purge:function(){this.store=n(null),this.size=0,this.hits=0,this.misses=0}}}),e("ember-metal/chains",["ember-metal/core","ember-metal/property_get","ember-metal/utils","ember-metal/array","ember-metal/watch_key","exports"],function(e,t,r,n,i,a){"use strict";function s(e){return e.match(w)[0]}function o(){if(0!==x.length){var e=x;x=[],b.call(e,function(e){e[0].add(e[1])}),_("Watching an undefined global, Ember expects watched globals to be setup by the time the run loop is flushed, check for typos",0===x.length)}}function u(e,t,r){if(e&&"object"==typeof e){var n=v(e),i=n.chainWatchers;n.hasOwnProperty("chainWatchers")||(i=n.chainWatchers={}),i[t]||(i[t]=[]),i[t].push(r),g(e,t,n)}}function l(e,t,r){if(e&&"object"==typeof e){var n=e.__ember_meta__;if(!n||n.hasOwnProperty("chainWatchers")){var i=n&&n.chainWatchers;if(i&&i[t]){i=i[t];for(var a=0,s=i.length;s>a;a++)if(i[a]===r){i.splice(a,1);break}}y(e,t,n)}}}function c(e,t,r){this._parent=e,this._key=t,this._watching=void 0===r,this._value=r,this._paths={},this._watching&&(this._object=e.value(),this._object&&u(this._object,this._key,this)),this._parent&&"@each"===this._parent._key&&this.value()}function h(e,t){if(!e)return void 0;var r=e.__ember_meta__;if(r&&r.proto===e)return void 0;if("@each"===t)return f(e,t);var n=r&&r.descs[t];return n&&n._cacheable?t in r.cache?r.cache[t]:void 0:f(e,t)}function m(e){var t,r,n,i=e.__ember_meta__;if(i){if(r=i.chainWatchers)for(var a in r)if(r.hasOwnProperty(a)&&(n=r[a]))for(var s=0,o=n.length;o>s;s++)n[s].didChange(null);t=i.chains,t&&t.value()!==e&&(v(e).chains=t=t.copy(e))}}var p=e["default"],f=t.get,d=t.normalizeTuple,v=r.meta,b=n.forEach,g=i.watchKey,y=i.unwatchKey,_=p.warn,w=/^([^\.]+)/,x=[];a.flushPendingChains=o;var C=c.prototype;C.value=function(){if(void 0===this._value&&this._watching){var e=this._parent.value();this._value=h(e,this._key)}return this._value},C.destroy=function(){if(this._watching){var e=this._object;e&&l(e,this._key,this),this._watching=!1}},C.copy=function(e){var t,r=new c(null,null,e),n=this._paths;for(t in n)n[t]<=0||r.add(t);return r},C.add=function(e){var t,r,n,i,a;if(a=this._paths,a[e]=(a[e]||0)+1,t=this.value(),r=d(t,e),r[0]&&r[0]===t)e=r[1],n=s(e),e=e.slice(n.length+1);else{if(!r[0])return x.push([this,e]),void(r.length=0);i=r[0],n=e.slice(0,0-(r[1].length+1)),e=r[1]}r.length=0,this.chain(n,e,i)},C.remove=function(e){var t,r,n,i,a;a=this._paths,a[e]>0&&a[e]--,t=this.value(),r=d(t,e),r[0]===t?(e=r[1],n=s(e),e=e.slice(n.length+1)):(i=r[0],n=e.slice(0,0-(r[1].length+1)),e=r[1]),r.length=0,this.unchain(n,e)},C.count=0,C.chain=function(e,t,r){var n,i=this._chains;i||(i=this._chains={}),n=i[e],n||(n=i[e]=new c(this,e,r)),n.count++,t&&(e=s(t),t=t.slice(e.length+1),n.chain(e,t))},C.unchain=function(e,t){var r=this._chains,n=r[e];if(t&&t.length>1){var i=s(t),a=t.slice(i.length+1);n.unchain(i,a)}n.count--,n.count<=0&&(delete r[n._key],n.destroy())},C.willChange=function(e){var t=this._chains;if(t)for(var r in t)t.hasOwnProperty(r)&&t[r].willChange(e);this._parent&&this._parent.chainWillChange(this,this._key,1,e)},C.chainWillChange=function(e,t,r,n){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainWillChange(this,t,r+1,n):(r>1&&n.push(this.value(),t),t="this."+t,this._paths[t]>0&&n.push(this.value(),t))},C.chainDidChange=function(e,t,r,n){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainDidChange(this,t,r+1,n):(r>1&&n.push(this.value(),t),t="this."+t,this._paths[t]>0&&n.push(this.value(),t))},C.didChange=function(e){if(this._watching){var t=this._parent.value();t!==this._object&&(l(this._object,this._key,this),this._object=t,u(t,this._key,this)),this._value=void 0,this._parent&&"@each"===this._parent._key&&this.value()}var r=this._chains;if(r)for(var n in r)r.hasOwnProperty(n)&&r[n].didChange(e);null!==e&&this._parent&&this._parent.chainDidChange(this,this._key,1,e)},a.finishChains=m,a.removeChainWatcher=l,a.ChainNode=c}),e("ember-metal/computed",["ember-metal/property_set","ember-metal/utils","ember-metal/expand_properties","ember-metal/error","ember-metal/properties","ember-metal/property_events","ember-metal/dependent_keys","exports"],function(e,t,r,n,i,a,s,o){"use strict";function u(){}function l(e,t){e.__ember_arity__=e.length,this.func=e,this._dependentKeys=void 0,this._suspended=void 0,this._meta=void 0,this._cacheable=t&&void 0!==t.cacheable?t.cacheable:!0,this._dependentKeys=t&&t.dependentKeys,this._readOnly=t&&(void 0!==t.readOnly||!!t.readOnly)||!1}function c(e){for(var t=0,r=e.length;r>t;t++)e[t].didChange(null)}function h(e){var t;if(arguments.length>1&&(t=O.call(arguments),e=t.pop()),"function"!=typeof e)throw new b("Computed Property declared without a property function");var r=new l(e);return t&&r.property.apply(r,t),r}function m(e,t){var r=e.__ember_meta__,n=r&&r.cache,i=n&&n[t];return i===u?void 0:i}var p=e.set,f=t.meta,d=t.inspect,v=r["default"],b=n["default"],g=i.Descriptor,y=i.defineProperty,_=a.propertyWillChange,w=a.propertyDidChange,x=s.addDependentKeys,C=s.removeDependentKeys,E=f,O=[].slice;l.prototype=new g;var P=l.prototype;P.cacheable=function(e){return this._cacheable=e!==!1,this},P["volatile"]=function(){return this._cacheable=!1,this},P.readOnly=function(e){return this._readOnly=void 0===e||!!e,this},P.property=function(){var e,t=function(t){e.push(t)};e=[];for(var r=0,n=arguments.length;n>r;r++)v(arguments[r],t);return this._dependentKeys=e,this},P.meta=function(e){return 0===arguments.length?this._meta||{}:(this._meta=e,this)},P.didChange=function(e,t){if(this._cacheable&&this._suspended!==e){var r=E(e);void 0!==r.cache[t]&&(r.cache[t]=void 0,C(this,e,t,r))}},P.get=function(e,t){var r,n,i,a;if(this._cacheable){i=E(e),n=i.cache;var s=n[t];if(s===u)return void 0;if(void 0!==s)return s;r=this.func.call(e,t),n[t]=void 0===r?u:r,a=i.chainWatchers&&i.chainWatchers[t],a&&c(a),x(this,e,t,i)}else r=this.func.call(e,t);return r},P.set=function(e,t,r){var n=this._suspended;this._suspended=e;try{this._set(e,t,r)}finally{this._suspended=n}},P._set=function(e,t,r){var n,i,a,s=this._cacheable,o=this.func,l=E(e,s),c=l.cache,h=!1;if(this._readOnly)throw new b('Cannot set read-only property "'+t+'" on object: '+d(e));if(s&&void 0!==c[t]&&(c[t]!==u&&(i=c[t]),h=!0),n=o.wrappedFunction?o.wrappedFunction.__ember_arity__:o.__ember_arity__,3===n)a=o.call(e,t,r,i);else{if(2!==n)return y(e,t,null,i),void p(e,t,r);a=o.call(e,t,r)}if(!h||i!==a){var m=l.watching[t];return m&&_(e,t),h&&(c[t]=void 0),s&&(h||x(this,e,t,l),c[t]=void 0===a?u:a),m&&w(e,t),a}},P.teardown=function(e,t){var r=E(e);return t in r.cache&&C(this,e,t,r),this._cacheable&&delete r.cache[t],null},m.set=function(e,t,r){e[t]=void 0===r?u:r},m.get=function(e,t){var r=e[t];return r===u?void 0:r},m.remove=function(e,t){e[t]=void 0},o.ComputedProperty=l,o.computed=h,o.cacheFor=m}),e("ember-metal/computed_macros",["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/computed","ember-metal/is_empty","ember-metal/is_none","ember-metal/alias"],function(e,t,r,n,i,a,s){"use strict";function o(e,t){for(var r={},n=0;nt}),u("gte",function(e,t){return h(this,e)>=t}),u("lt",function(e,t){return h(this,e)1?(m(this,e,r),r):h(this,e)})}}),e("ember-metal/core",["exports"],function(e){"use strict";function t(){return this}"undefined"==typeof i&&(i={}),i.imports=i.imports||this,i.lookup=i.lookup||this;var r=i.exports=i.exports||this;r.Em=r.Ember=i,i.isNamespace=!0,i.toString=function(){return"Ember"},i.VERSION="1.10.0",i.ENV||(i.ENV="undefined"!=typeof EmberENV?EmberENV:"undefined"!=typeof ENV?ENV:{}),i.config=i.config||{},"undefined"==typeof i.ENV.DISABLE_RANGE_API&&(i.ENV.DISABLE_RANGE_API=!0),"undefined"==typeof MetamorphENV&&(r.MetamorphENV={}),MetamorphENV.DISABLE_RANGE_API=i.ENV.DISABLE_RANGE_API,i.FEATURES=i.ENV.FEATURES||{},i.FEATURES.isEnabled=function(e){var t=i.FEATURES[e];return i.ENV.ENABLE_ALL_FEATURES?!0:t===!0||t===!1||void 0===t?t:i.ENV.ENABLE_OPTIONAL_FEATURES?!0:!1},i.EXTEND_PROTOTYPES=i.ENV.EXTEND_PROTOTYPES,"undefined"==typeof i.EXTEND_PROTOTYPES&&(i.EXTEND_PROTOTYPES=!0),i.LOG_STACKTRACE_ON_DEPRECATION=i.ENV.LOG_STACKTRACE_ON_DEPRECATION!==!1,i.SHIM_ES5=i.ENV.SHIM_ES5===!1?!1:i.EXTEND_PROTOTYPES,i.LOG_VERSION=i.ENV.LOG_VERSION===!1?!1:!0,e.K=t,i.K=t,"undefined"==typeof i.assert&&(i.assert=t),"undefined"==typeof i.warn&&(i.warn=t),"undefined"==typeof i.debug&&(i.debug=t),"undefined"==typeof i.runInDebug&&(i.runInDebug=t),"undefined"==typeof i.deprecate&&(i.deprecate=t),"undefined"==typeof i.deprecateFunc&&(i.deprecateFunc=function(e,t){return t}),e["default"]=i}),e("ember-metal/dependent_keys",["ember-metal/platform","ember-metal/watching","exports"],function(e,t,r){function n(e,t){var r=e[t];return r?e.hasOwnProperty(t)||(r=e[t]=o(r)):r=e[t]={},r}function i(e){return n(e,"deps")}function a(e,t,r,a){var s,o,l,c,h,m=e._dependentKeys;if(m)for(s=i(a),o=0,l=m.length;l>o;o++)c=m[o],h=n(s,c),h[r]=(h[r]||0)+1,u(t,c,a)}function s(e,t,r,a){var s,o,u,c,h,m=e._dependentKeys;if(m)for(s=i(a),o=0,u=m.length;u>o;o++)c=m[o],h=n(s,c),h[r]=(h[r]||0)-1,l(t,c,a)}var o=e.create,u=t.watch,l=t.unwatch;r.addDependentKeys=a,r.removeDependentKeys=s}),e("ember-metal/deprecate_property",["ember-metal/core","ember-metal/platform","ember-metal/properties","ember-metal/property_get","ember-metal/property_set","exports"],function(e,t,r,n,i,a){"use strict";function s(e,t,r){function n(){}o&&u(e,t,{configurable:!0,enumerable:!1,set:function(e){n(),c(this,r,e)},get:function(){return n(),l(this,r)}})}var o=(e["default"],t.hasPropertyAccessors),u=r.defineProperty,l=n.get,c=i.set;a.deprecateProperty=s}),e("ember-metal/dictionary",["ember-metal/platform","exports"],function(e,t){"use strict";var r=e.create;t["default"]=function(e){var t=r(e);return t._dict=null,delete t._dict,t}}),e("ember-metal/enumerable_utils",["ember-metal/array","exports"],function(e,t){"use strict";function r(e,t,r){return e.map?e.map(t,r):d.call(e,t,r)}function n(e,t,r){return e.forEach?e.forEach(t,r):p.call(e,t,r)}function i(e,t,r){return e.filter?e.filter(t,r):m.call(e,t,r)}function a(e,t,r){return e.indexOf?e.indexOf(t,r):f.call(e,t,r)}function s(e,t){return void 0===t?[]:r(t,function(t){return a(e,t)})}function o(e,t){var r=a(e,t);-1===r&&e.push(t)}function u(e,t){var r=a(e,t);-1!==r&&e.splice(r,1)}function l(e,t,r,n){for(var i,a,s=[].concat(n),o=[],u=6e4,l=t,c=r;s.length;)i=c>u?u:c,0>=i&&(i=0),a=s.splice(0,u),a=[l,i].concat(a),l+=u,c-=i,o=o.concat(v.apply(e,a));return o}function c(e,t,r,n){return e.replace?e.replace(t,r,n):l(e,t,r,n)}function h(e,t){var r=[];return n(e,function(e){a(t,e)>=0&&r.push(e)}),r}var m=e.filter,p=e.forEach,f=e.indexOf,d=e.map,v=Array.prototype.splice;t.map=r,t.forEach=n,t.filter=i,t.indexOf=a,t.indexesOf=s,t.addObject=o,t.removeObject=u,t._replace=l,t.replace=c,t.intersection=h,t["default"]={_replace:l,addObject:o,filter:i,forEach:n,indexOf:a,indexesOf:s,intersection:h,map:r,removeObject:u,replace:c}}),e("ember-metal/error",["ember-metal/platform","exports"],function(e,t){"use strict";function r(){var e=Error.apply(this,arguments);Error.captureStackTrace&&Error.captureStackTrace(this,i.Error);for(var t=0;t=0;i-=3)if(t===e[i]&&r===e[i+1]){n=i;break}return n}function a(e,t){var r,n=b(e,!0),i=n.listeners;return i?i.__source__!==e&&(i=n.listeners=w(i),i.__source__=e):(i=n.listeners=w(null),i.__source__=e),r=i[t],r&&r.__source__!==e?(r=i[t]=i[t].slice(),r.__source__=e):r||(r=i[t]=[],r.__source__=e),r}function s(e,t,r){var n=e.__ember_meta__,a=n&&n.listeners&&n.listeners[t];if(a){for(var s=[],o=a.length-3;o>=0;o-=3){var u=a[o],l=a[o+1],c=a[o+2],h=i(r,u,l);-1===h&&(r.push(u,l,c),s.push(u,l,c))}return s}}function o(e,t,r,n,s){n||"function"!=typeof r||(n=r,r=null);var o=a(e,t),u=i(o,r,n),l=0;s&&(l|=C),-1===u&&(o.push(r,n,l),"function"==typeof e.didAddListener&&e.didAddListener(t,r,n))}function u(e,t,r,n){function s(r,n){var s=a(e,t),o=i(s,r,n);-1!==o&&(s.splice(o,3),"function"==typeof e.didRemoveListener&&e.didRemoveListener(t,r,n))}if(n||"function"!=typeof r||(n=r,r=null),n)s(r,n);else{var o=e.__ember_meta__,u=o&&o.listeners&&o.listeners[t];if(!u)return;for(var l=u.length-3;l>=0;l-=3)s(u[l],u[l+1])}}function l(e,t,r,n,s){function o(){return s.call(r)}function u(){-1!==c&&(l[c+2]&=~E)}n||"function"!=typeof r||(n=r,r=null);var l=a(e,t),c=i(l,r,n);return-1!==c&&(l[c+2]|=E),g(o,u)}function c(e,t,r,n,s){function o(){return s.call(r)}function u(){for(var e=0,t=p.length;t>e;e++){var r=p[e];f[e][r+2]&=~E}}n||"function"!=typeof r||(n=r,r=null);var l,c,h,m,p=[],f=[];for(h=0,m=t.length;m>h;h++){l=t[h],c=a(e,l);var d=i(c,r,n);-1!==d&&(c[d+2]|=E,p.push(d),f.push(c))}return g(o,u)}function h(e){var t=e.__ember_meta__.listeners,r=[];if(t)for(var n in t)"__source__"!==n&&t[n]&&r.push(n);return r}function m(e,t,r,n){if(e!==v&&"function"==typeof e.sendEvent&&e.sendEvent(t,r),!n){var i=e.__ember_meta__;n=i&&i.listeners&&i.listeners[t]}if(n){for(var a=n.length-3;a>=0;a-=3){var s=n[a],o=n[a+1],l=n[a+2];o&&(l&E||(l&C&&u(e,t,s,o),s||(s=e),"string"==typeof o?r?_(s,o,r):s[o]():r?y(s,o,r):o.call(s)))}return!0}}function p(e,t){var r=e.__ember_meta__,n=r&&r.listeners&&r.listeners[t];return!(!n||!n.length)}function f(e,t){var r=[],n=e.__ember_meta__,i=n&&n.listeners&&n.listeners[t];if(!i)return r;for(var a=0,s=i.length;s>a;a+=3){var o=i[a],u=i[a+1];r.push([o,u])}return r}function d(){var e=x.call(arguments,-1)[0],t=x.call(arguments,0,-1);return e.__ember_listens__=t,e}var v=e["default"],b=t.meta,g=t.tryFinally,y=t.apply,_=t.applyStr,w=r.create,x=[].slice,C=1,E=2;n.accumulateListeners=s,n.addListener=o,n.suspendListener=l,n.suspendListeners=c,n.watchedEvents=h,n.sendEvent=m,n.hasListeners=p,n.listenersFor=f,n.on=d,n.removeListener=u}),e("ember-metal/expand_properties",["ember-metal/core","ember-metal/error","ember-metal/enumerable_utils","exports"],function(e,t,r,n){"use strict";function i(e,t){if("string"===s.typeOf(e)){var r=e.split(l),n=[r];u(r,function(e,t){e.indexOf(",")>=0&&(n=a(n,e.split(","),t))}),u(n,function(e){t(e.join(""))})}else t(e)}function a(e,t,r){var n=[];return u(e,function(e){u(t,function(t){var i=e.slice(0);i[r]=t,n.push(i)})}),n}var s=e["default"],o=t["default"],u=r.forEach,l=/\{|\}/;n["default"]=function(e,t){if(e.indexOf(" ")>-1)throw new o("Brace expanded properties cannot contain spaces, e.g. `user.{firstName, lastName}` should be `user.{firstName,lastName}`");return i(e,t)}}),e("ember-metal/get_properties",["ember-metal/property_get","ember-metal/utils","exports"],function(e,t,r){"use strict";var n=e.get,i=t.typeOf;r["default"]=function(e){var t={},r=arguments,a=1;2===arguments.length&&"array"===i(arguments[1])&&(a=0,r=arguments[1]);for(var s=r.length;s>a;a++)t[r[a]]=n(e,r[a]);return t}}),e("ember-metal/injected_property",["ember-metal/core","ember-metal/computed","ember-metal/alias","ember-metal/properties","ember-metal/platform","ember-metal/utils","exports"],function(e,t,r,n,i,a,s){"use strict";function o(e,t){this.type=e,this.name=t,this._super$Constructor(u),v.oneWay.call(this)}function u(e){var t=p(this).descs[e];return this.container.lookup(t.type+":"+(t.name||e))}var l=(e["default"],t.ComputedProperty),c=r.AliasedProperty,h=n.Descriptor,m=i.create,p=a.meta;o.prototype=m(h.prototype);var f=o.prototype,d=l.prototype,v=c.prototype;f._super$Constructor=l,f.get=d.get,f.readOnly=d.readOnly,f.teardown=d.teardown,s["default"]=o}),e("ember-metal/instrumentation",["ember-metal/core","ember-metal/utils","exports"],function(e,t,r){"use strict";function n(e,t,r,n){if(arguments.length<=3&&"function"==typeof t&&(n=r,r=t,t=void 0),0===c.length)return r.call(n);var a=t||{},s=i(e,function(){return a +});if(s){var o=function(){return r.call(n)},u=function(e){a.exception=e};return l(o,u,s)}return r.call(n)}function i(e,t){var r=h[e];if(r||(r=m(e)),0!==r.length){var n,i=t(),a=u.STRUCTURED_PROFILE;a&&(n=e+": "+i.object,console.time(n));var s,o,l=r.length,c=new Array(l),f=p();for(s=0;l>s;s++)o=r[s],c[s]=o.before(e,f,i);return function(){var t,s,o,u=p();for(t=0,s=r.length;s>t;t++)o=r[t],o.after(e,u,i,c[t]);a&&console.timeEnd(n)}}}function a(e,t){for(var r,n=e.split("."),i=[],a=0,s=n.length;s>a;a++)r=n[a],i.push("*"===r?"[^\\.]*":r);i=i.join("\\."),i+="(\\..*)?";var o={pattern:e,regex:new RegExp("^"+i+"$"),object:t};return c.push(o),h={},o}function s(e){for(var t,r=0,n=c.length;n>r;r++)c[r]===e&&(t=r);c.splice(t,1),h={}}function o(){c.length=0,h={}}var u=e["default"],l=t.tryCatchFinally,c=[];r.subscribers=c;var h={},m=function(e){for(var t,r=[],n=0,i=c.length;i>n;n++)t=c[n],t.regex.test(e)&&r.push(t.object);return h[e]=r,r},p=function(){var e="undefined"!=typeof window?window.performance||{}:{},t=e.now||e.mozNow||e.webkitNow||e.msNow||e.oNow;return t?t.bind(e):function(){return+new Date}}();r.instrument=n,r._instrumentStart=i,r.subscribe=a,r.unsubscribe=s,r.reset=o}),e("ember-metal/is_blank",["ember-metal/is_empty","exports"],function(e,t){"use strict";var r=e["default"];t["default"]=function(e){return r(e)||"string"==typeof e&&null===e.match(/\S/)}}),e("ember-metal/is_empty",["ember-metal/property_get","ember-metal/is_none","exports"],function(e,t,r){"use strict";function n(e){var t=a(e);if(t)return t;if("number"==typeof e.size)return!e.size;var r=typeof e;if("object"===r){var n=i(e,"size");if("number"==typeof n)return!n}if("number"==typeof e.length&&"function"!==r)return!e.length;if("object"===r){var s=i(e,"length");if("number"==typeof s)return!s}return!1}var i=e.get,a=t["default"];r["default"]=n}),e("ember-metal/is_none",["exports"],function(e){"use strict";function t(e){return null===e||void 0===e}e["default"]=t}),e("ember-metal/is_present",["ember-metal/is_blank","exports"],function(e,t){"use strict";var r,n=e["default"];r=function(e){return!n(e)},t["default"]=r}),e("ember-metal/keys",["ember-metal/platform","exports"],function(e,t){"use strict";var r=e.canDefineNonEnumerableProperties,n=Object.keys;n&&r||(n=function(){var e=Object.prototype.hasOwnProperty,t=!{toString:null}.propertyIsEnumerable("toString"),r=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],n=r.length;return function(i){if("object"!=typeof i&&("function"!=typeof i||null===i))throw new TypeError("Object.keys called on non-object");var a,s,o=[];for(a in i)"_super"!==a&&0!==a.lastIndexOf("__",0)&&e.call(i,a)&&o.push(a);if(t)for(s=0;n>s;s++)e.call(i,r[s])&&o.push(r[s]);return o}}()),t["default"]=n}),e("ember-metal/libraries",["ember-metal/core","ember-metal/enumerable_utils","exports"],function(e,t,r){"use strict";function n(){this._registry=[],this._coreLibIndex=0}var i=(e["default"],t.forEach),a=t.indexOf;n.prototype={constructor:n,_getLibraryByName:function(e){for(var t=this._registry,r=t.length,n=0;r>n;n++)if(t[n].name===e)return t[n]},register:function(e,t,r){var n=this._registry.length;this._getLibraryByName(e)||(r&&(n=this._coreLibIndex++),this._registry.splice(n,0,{name:e,version:t}))},registerCoreLibrary:function(e,t){this.register(e,t,!0)},deRegister:function(e){var t,r=this._getLibraryByName(e);r&&(t=a(this._registry,r),this._registry.splice(t,1))},each:function(e){i(this._registry,function(t){e(t.name,t.version)})}},r["default"]=n}),e("ember-metal/logger",["ember-metal/core","ember-metal/error","exports"],function(e,t,r){"use strict";function n(){return this}function i(e){var t,r;s.imports.console?t=s.imports.console:"undefined"!=typeof console&&(t=console);var n="object"==typeof t?t[e]:null;return n?"function"==typeof n.bind?(r=n.bind(t),r.displayName="console."+e,r):"function"==typeof n.apply?(r=function(){n.apply(t,arguments)},r.displayName="console."+e,r):function(){var e=Array.prototype.join.call(arguments,", ");n(e)}:void 0}function a(e,t){if(!e)try{throw new o("assertion failed: "+t)}catch(r){setTimeout(function(){throw r},0)}}var s=e["default"],o=t["default"];r["default"]={log:i("log")||n,warn:i("warn")||n,error:i("error")||n,info:i("info")||n,debug:i("debug")||i("info")||n,assert:i("assert")||a}}),e("ember-metal/map",["ember-metal/utils","ember-metal/array","ember-metal/platform","ember-metal/deprecate_property","exports"],function(e,t,r,n,a){"use strict";function s(e){throw new TypeError(""+Object.prototype.toString.call(e)+" is not a function")}function o(e){throw new TypeError("Constructor "+e+"requires 'new'")}function u(e){var t=d(null);for(var r in e)t[r]=e[r];return t}function l(e,t){var r=e.keys.copy(),n=u(e.values);return t.keys=r,t.values=n,t.size=e.size,t}function c(){this instanceof c?(this.clear(),this._silenceRemoveDeprecation=!1):o("OrderedSet")}function h(){this instanceof this.constructor?(this.keys=c.create(),this.keys._silenceRemoveDeprecation=!0,this.values=d(null),this.size=0):o("OrderedSet")}function m(e){this._super$constructor(),this.defaultValue=e.defaultValue}var p=e.guidFor,f=t.indexOf,d=r.create,v=n.deprecateProperty;c.create=function(){var e=this;return new e},c.prototype={constructor:c,clear:function(){this.presenceSet=d(null),this.list=[],this.size=0},add:function(e,t){var r=t||p(e),n=this.presenceSet,i=this.list;return n[r]!==!0?(n[r]=!0,this.size=i.push(e),this):void 0},remove:function(e,t){return this["delete"](e,t)},"delete":function(e,t){var r=t||p(e),n=this.presenceSet,i=this.list;if(n[r]===!0){delete n[r];var a=f.call(i,e);return a>-1&&i.splice(a,1),this.size=i.length,!0}return!1},isEmpty:function(){return 0===this.size},has:function(e){if(0===this.size)return!1;var t=p(e),r=this.presenceSet;return r[t]===!0},forEach:function(e){if("function"!=typeof e&&s(e),0!==this.size){var t,r=this.list,n=arguments.length;if(2===n)for(t=0;ts;s++)n=i[s],e[n]=t[n];return e}}),e("ember-metal/mixin",["ember-metal/core","ember-metal/merge","ember-metal/array","ember-metal/platform","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/expand_properties","ember-metal/properties","ember-metal/computed","ember-metal/binding","ember-metal/observer","ember-metal/events","ember-metal/streams/utils","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h,m,p,f){function d(){var e,t=this.__nextSuper;if(t){var r=arguments.length;return this.__nextSuper=null,e=0===r?t.call(this):1===r?t.call(this,arguments[0]):2===r?t.call(this,arguments[0],arguments[1]):t.apply(this,arguments),this.__nextSuper=t,e}}function v(e){var t=et(e,!0),r=t.mixins;return r?t.hasOwnProperty("mixins")||(r=t.mixins=$(r)):r=t.mixins={},r}function b(e){return"function"==typeof e&&e.isMethod!==!1&&e!==Boolean&&e!==Object&&e!==Number&&e!==Array&&e!==Date&&e!==String}function g(e,t){var r;return t instanceof M?(r=J(t),e[r]?gt:(e[r]=t,t.properties)):t}function y(e,t,r,n){var i;return i=r[e]||n[e],t[e]&&(i=i?i.concat(t[e]):t[e]),i}function _(e,t,r,n,i){var a;return void 0===n[t]&&(a=i[t]),a=a||e.descs[t],void 0!==a&&a instanceof st?(r=$(r),r.func=tt(r.func,a.func),r):r}function w(e,t,r,n,i){var a;if(void 0===i[t]&&(a=n[t]),a=a||e[t],void 0===a||"function"!=typeof a)return r;var s;return yt&&(s=r.__hasSuper,void 0===s&&(s=r.toString().indexOf("_super")>-1,r.__hasSuper=s)),yt===!1||s?tt(r,a):r}function x(e,t,r,n){var i=n[t]||e[t];return i?"function"==typeof i.concat?null===r||void 0===r?i:i.concat(r):rt(i).concat(r):rt(r)}function C(e,t,r,n){var i=n[t]||e[t];if(!i)return r;var a=K({},i),s=!1;for(var o in r)if(r.hasOwnProperty(o)){var u=r[o];b(u)?(s=!0,a[o]=w(e,o,u,i,{})):a[o]=u}return s&&(a._super=d),a}function E(e,t,r,n,i,a,s,o){if(r instanceof it){if(r===U&&i[t])return gt;r.func&&(r=_(n,t,r,a,i)),i[t]=r,a[t]=void 0}else s&&G.call(s,t)>=0||"concatenatedProperties"===t||"mergedProperties"===t?r=x(e,t,r,a):o&&G.call(o,t)>=0?r=C(e,t,r,a):b(r)&&(r=w(e,t,r,a,i)),i[t]=void 0,a[t]=r}function O(e,t,r,n,i,a){function s(e){delete r[e],delete n[e]}for(var o,u,l,c,h,m,p=0,f=e.length;f>p;p++)if(o=e[p],u=g(t,o),u!==gt)if(u){m=et(i),i.willMergeMixin&&i.willMergeMixin(u),c=y("concatenatedProperties",u,n,i),h=y("mergedProperties",u,n,i);for(l in u)u.hasOwnProperty(l)&&(a.push(l),E(i,l,u[l],m,r,n,c,h));u.hasOwnProperty("toString")&&(i.toString=u.toString)}else o.mixins&&(O(o.mixins,t,r,n,i,a),o._without&&Q.call(o._without,s))}function P(e,t,r,n){if(_t.test(t)){var i=n.bindings;i?n.hasOwnProperty("bindings")||(i=n.bindings=$(n.bindings)):i=n.bindings={},i[t]=r}}function A(e,t,r){var n=function(r){mt(e,t,null,i,function(){Z(e,t,r.value())})},i=function(){r.setValue(Y(e,t),n)};X(e,t,r.value()),ut(e,t,null,i),r.subscribe(n),void 0===e._streamBindingSubscriptions&&(e._streamBindingSubscriptions=$(null)),e._streamBindingSubscriptions[t]=n}function N(e,t){var r,n,i,a=t.bindings;if(a){for(r in a)if(n=a[r]){if(i=r.slice(0,-7),dt(n)){A(e,i,n);continue}n instanceof ot?(n=n.copy(),n.to(i)):n=new ot(i,n),n.connect(e),e[r]=n}t.bindings={}}}function S(e,t){return N(e,t||et(e)),e}function T(e,t,r,n,i){var a,s=t.methodName;return n[s]||i[s]?(a=i[s],t=n[s]):r.descs[s]?(t=r.descs[s],a=void 0):(t=void 0,a=e[s]),{desc:t,value:a}}function k(e,t,r,n,i){var a=r[n];if(a)for(var s=0,o=a.length;o>s;s++)i(e,a[s],null,t)}function V(e,t,r){var n=e[t];"function"==typeof n&&(k(e,t,n,"__ember_observesBefore__",ht),k(e,t,n,"__ember_observes__",lt),k(e,t,n,"__ember_listens__",ft)),"function"==typeof r&&(k(e,t,r,"__ember_observesBefore__",ct),k(e,t,r,"__ember_observes__",ut),k(e,t,r,"__ember_listens__",pt))}function I(e,t,r){var n,i,a,s={},o={},u=et(e),l=[];e._super=d,O(t,v(e),s,o,e,l);for(var c=0,h=l.length;h>c;c++)if(n=l[c],"constructor"!==n&&o.hasOwnProperty(n)&&(a=s[n],i=o[n],a!==U)){for(;a&&a instanceof F;){var m=T(e,a,u,s,o);a=m.desc,i=m.value}(void 0!==a||void 0!==i)&&(V(e,n,i),P(e,n,i,u),at(e,n,a,i,u))}return r||S(e,u),e}function j(e){var t=vt.call(arguments,1);return I(e,t,!1),e}function M(e,t){this.properties=t;var r=e&&e.length;if(r>0){for(var n=new Array(r),i=0;r>i;i++){var a=e[i];n[i]=a instanceof M?a:new M(void 0,a)}this.mixins=n}else this.mixins=void 0;this.ownerConstructor=void 0}function R(e,t,r){var n=J(e);if(r[n])return!1;if(r[n]=!0,e===t)return!0;for(var i=e.mixins,a=i?i.length:0;--a>=0;)if(R(i[a],t,r))return!0;return!1}function D(e,t,r){if(!r[J(t)])if(r[J(t)]=!0,t.properties){var n=t.properties;for(var i in n)n.hasOwnProperty(i)&&(e[i]=!0)}else t.mixins&&Q.call(t.mixins,function(t){D(e,t,r)})}function L(){return U}function F(e){this.methodName=e}function B(e){return new F(e)}function H(){var e,t=vt.call(arguments,-1)[0],r=function(t){e.push(t)},n=vt.call(arguments,0,-1);"function"!=typeof t&&(t=arguments[0],n=vt.call(arguments,1)),e=[];for(var i=0;ie;e++){arguments[e]}return H.apply(this,arguments)}function q(){var e,t=vt.call(arguments,-1)[0],r=function(t){e.push(t)},n=vt.call(arguments,0,-1);"function"!=typeof t&&(t=arguments[0],n=vt.call(arguments,1)),e=[];for(var i=0;i-1,_t=/^.+Binding$/;f.mixin=j,f["default"]=M,M._apply=I,M.applyPartial=function(e){var t=vt.call(arguments,1);return I(e,t,!0)},M.finishPartial=S,W.anyUnprocessedMixins=!1,M.create=function(){W.anyUnprocessedMixins=!0;for(var e=this,t=arguments.length,r=new Array(t),n=0;t>n;n++)r[n]=arguments[n];return new e(r,void 0)};var wt=M.prototype;wt.reopen=function(){var e;this.properties?(e=new M(void 0,this.properties),this.properties=void 0,this.mixins=[e]):this.mixins||(this.mixins=[]);var t,r=arguments.length,n=this.mixins;for(t=0;r>t;t++)e=arguments[t],n.push(e instanceof M?e:new M(void 0,e));return this},wt.apply=function(e){return I(e,[this],!1)},wt.applyPartial=function(e){return I(e,[this],!0)},wt.detect=function(e){if(!e)return!1;if(e instanceof M)return R(e,this,{});var t=e.__ember_meta__,r=t&&t.mixins;return r?!!r[J(this)]:!1},wt.without=function(){var e=new M([this]);return e._without=vt.call(arguments),e},wt.keys=function(){var e={},t={},r=[];D(e,this,t);for(var n in e)e.hasOwnProperty(n)&&r.push(n);return r},M.mixins=function(e){var t=e.__ember_meta__,r=t&&t.mixins,n=[];if(!r)return n;for(var i in r){var a=r[i];a.properties||n.push(a)}return n},U=new it,U.toString=function(){return"(Required Property)"},f.required=L,F.prototype=new it,f.aliasMethod=B,f.observer=H,f.immediateObserver=z,f.beforeObserver=q,f.IS_BINDING=_t,f.Mixin=M}),e("ember-metal/observer",["ember-metal/watching","ember-metal/array","ember-metal/events","exports"],function(e,t,r,n){"use strict";function i(e){return e+E}function a(e){return e+O}function s(e,t,r,n){return _(e,i(t),r,n),v(e,t),this}function o(e,t){return y(e,i(t))}function u(e,t,r,n){return b(e,t),w(e,i(t),r,n),this}function l(e,t,r,n){return _(e,a(t),r,n),v(e,t),this}function c(e,t,r,n,i){return C(e,a(t),r,n,i)}function h(e,t,r,n,a){return C(e,i(t),r,n,a)}function m(e,t,r,n,i){var s=g.call(t,a);return x(e,s,r,n,i)}function p(e,t,r,n,a){var s=g.call(t,i);return x(e,s,r,n,a)}function f(e,t){return y(e,a(t))}function d(e,t,r,n){return b(e,t),w(e,a(t),r,n),this}var v=e.watch,b=e.unwatch,g=t.map,y=r.listenersFor,_=r.addListener,w=r.removeListener,x=r.suspendListeners,C=r.suspendListener,E=":change",O=":before";n.addObserver=s,n.observersFor=o,n.removeObserver=u,n.addBeforeObserver=l,n._suspendBeforeObserver=c,n._suspendObserver=h,n._suspendBeforeObservers=m,n._suspendObservers=p,n.beforeObserversFor=f,n.removeBeforeObserver=d}),e("ember-metal/observer_set",["ember-metal/utils","ember-metal/events","exports"],function(e,t,r){"use strict";function n(){this.clear()}var i=e.guidFor,a=t.sendEvent;r["default"]=n,n.prototype.add=function(e,t,r){var n,a=this.observerSet,s=this.observers,o=i(e),u=a[o];return u||(a[o]=u={}),n=u[t],void 0===n&&(n=s.push({sender:e,keyName:t,eventName:r,listeners:[]})-1,u[t]=n),s[n].listeners},n.prototype.flush=function(){var e,t,r,n,i=this.observers;for(this.clear(),e=0,t=i.length;t>e;++e)r=i[e],n=r.sender,n.isDestroying||n.isDestroyed||a(n,r.eventName,[n,r.keyName],r.listeners)},n.prototype.clear=function(){this.observerSet={},this.observers=[]}}),e("ember-metal/path_cache",["ember-metal/cache","exports"],function(e,t){"use strict";function r(e){return m.get(e)}function n(e){return p.get(e)}function i(e){return f.get(e)}function a(e){return-1!==d.get(e)}function s(e){return v.get(e)}function o(e){return b.get(e)}var u=e["default"],l=/^([A-Z$]|([0-9][A-Z$]))/,c=/^([A-Z$]|([0-9][A-Z$])).*[\.]/,h="this.",m=new u(1e3,function(e){return l.test(e)}),p=new u(1e3,function(e){return c.test(e)}),f=new u(1e3,function(e){return 0===e.lastIndexOf(h,0)}),d=new u(1e3,function(e){return e.indexOf(".")}),v=new u(1e3,function(e){var t=d.get(e);return-1===t?e:e.slice(0,t)}),b=new u(1e3,function(e){var t=d.get(e);return-1!==t?e.slice(t+1):void 0}),g={isGlobalCache:m,isGlobalPathCache:p,hasThisCache:f,firstDotIndexCache:d,firstKeyCache:v,tailPathCache:b};t.caches=g,t.isGlobal=r,t.isGlobalPath=n,t.hasThis=i,t.isPath=a,t.getFirstKey=s,t.getTailPath=o}),e("ember-metal/platform",["ember-metal/platform/define_property","ember-metal/platform/define_properties","ember-metal/platform/create","exports"],function(e,t,r,n){"use strict";var i=e.hasES5CompliantDefineProperty,a=e.defineProperty,s=t["default"],o=r["default"],u=i,l=i;n.create=o,n.defineProperty=a,n.defineProperties=s,n.hasPropertyAccessors=u,n.canDefineNonEnumerableProperties=l}),e("ember-metal/platform/create",["ember-metal/platform/define_properties","exports"],function(e,t){var r,n=e["default"];if(!Object.create||Object.create(null).hasOwnProperty){var i,a=!({__proto__:null}instanceof Object);i=a||"undefined"==typeof document?function(){return{__proto__:null}}:function(){function e(){}var t=document.createElement("iframe"),r=document.body||document.documentElement;t.style.display="none",r.appendChild(t),t.src="javascript:";var n=t.contentWindow.Object.prototype;return r.removeChild(t),t=null,delete n.constructor,delete n.hasOwnProperty,delete n.propertyIsEnumerable,delete n.isPrototypeOf,delete n.toLocaleString,delete n.toString,delete n.valueOf,e.prototype=n,i=function(){return new e},new e},r=Object.create=function(e,t){function r(){}var a;if(null===e)a=i();else{if("object"!=typeof e&&"function"!=typeof e)throw new TypeError("Object prototype may only be an Object or null");r.prototype=e,a=new r}return void 0!==t&&n(a,t),a}}else r=Object.create;t["default"]=r}),e("ember-metal/platform/define_properties",["ember-metal/platform/define_property","exports"],function(e,t){"use strict";var r=e.defineProperty,n=Object.defineProperties;n||(n=function(e,t){for(var n in t)t.hasOwnProperty(n)&&"__proto__"!==n&&r(e,n,t[n]);return e},Object.defineProperties=n),t["default"]=n}),e("ember-metal/platform/define_property",["exports"],function(e){"use strict";var t=function(e){if(e)try{var t=5,r={};if(e(r,"a",{configurable:!0,enumerable:!0,get:function(){return t},set:function(e){t=e}}),5!==r.a)return;if(r.a=10,10!==t)return;e(r,"a",{configurable:!0,enumerable:!1,writable:!0,value:!0});for(var n in r)if("a"===n)return;if(r.a!==!0)return;if(e(r,"a",{enumerable:!1}),r.a!==!0)return;return e}catch(i){return}}(Object.defineProperty),r=!!t;if(r&&"undefined"!=typeof document){var n=function(){try{return t(document.createElement("div"),"definePropertyOnDOM",{}),!0}catch(e){}return!1}();n||(t=function(e,t,r){var n;return n="object"==typeof Node?e instanceof Node:"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName,n?e[t]=r.value:Object.defineProperty(e,t,r)})}r||(t=function(e,t,r){r.get||(e[t]=r.value)}),e.hasES5CompliantDefineProperty=r,e.defineProperty=t}),e("ember-metal/properties",["ember-metal/core","ember-metal/utils","ember-metal/platform","ember-metal/property_events","exports"],function(e,t,r,n,i){"use strict";function a(){}function s(){return function(){}}function o(e){return function(){var t=this.__ember_meta__;return t&&t.values[e]}}function u(e,t,r,n,i){var s,o,u,m;i||(i=l(e)),s=i.descs,o=i.descs[t];var p=i.watching[t];return u=void 0!==p&&p>0,o instanceof a&&o.teardown(e,t),r instanceof a?(m=r,s[t]=r,e[t]=void 0,r.setup&&r.setup(e,t)):(s[t]=void 0,null==r?(m=n,e[t]=n):(m=r,c(e,t,r))),u&&h(e,t,i),e.didDefineProperty&&e.didDefineProperty(e,t,m),this}var l=(e["default"],t.meta),c=r.defineProperty,h=(r.hasPropertyAccessors,n.overrideChains);i.Descriptor=a,i.MANDATORY_SETTER_FUNCTION=s,i.DEFAULT_GETTER_FUNCTION=o,i.defineProperty=u}),e("ember-metal/property_events",["ember-metal/utils","ember-metal/events","ember-metal/observer_set","exports"],function(e,t,r,n){"use strict";function i(e,t){var r=e.__ember_meta__,n=r&&r.watching[t]>0||"length"===t,i=r&&r.proto,a=r&&r.descs[t];n&&i!==e&&(a&&a.willChange&&a.willChange(e,t),s(e,t,r),c(e,t,r),v(e,t))}function a(e,t){var r=e.__ember_meta__,n=r&&r.watching[t]>0||"length"===t,i=r&&r.proto,a=r&&r.descs[t];i!==e&&(a&&a.didChange&&a.didChange(e,t),(n||"length"===t)&&(r&&r.deps&&r.deps[t]&&o(e,t,r),h(e,t,r,!1),b(e,t)))}function s(e,t,r){if(!e.isDestroying){var n;if(r&&r.deps&&(n=r.deps[t])){var a=g,s=!a;s&&(a=g={}),l(i,e,n,t,a,r),s&&(g=null)}}}function o(e,t,r){if(!e.isDestroying){var n;if(r&&r.deps&&(n=r.deps[t])){var i=y,s=!i;s&&(i=y={}),l(a,e,n,t,i,r),s&&(y=null)}}}function u(e){var t=[];for(var r in e)t.push(r);return t}function l(e,t,r,n,i,a){var s,o,l,c,h=_(t),m=i[h];if(m||(m=i[h]={}),!m[n]&&(m[n]=!0,r)){s=u(r);var p=a.descs;for(l=0;ln;n++)s[n].willChange(o);for(n=0,a=o.length;a>n;n+=2)i(o[n],o[n+1])}}function h(e,t,r,n){if(r&&r.hasOwnProperty("chainWatchers")&&r.chainWatchers[t]){var i,s,o=r.chainWatchers[t],u=n?null:[];for(i=0,s=o.length;s>i;i++)o[i].didChange(u);if(!n)for(i=0,s=u.length;s>i;i+=2)a(u[i],u[i+1])}}function m(e,t,r){h(e,t,r,!0)}function p(){A++}function f(){A--,0>=A&&(O.clear(),P.flush())}function d(e,t){p(),w(e,f,t)}function v(e,t){if(!e.isDestroying){var r,n,i=t+":before";A?(r=O.add(e,t,i),n=C(e,i,r),x(e,i,[e,t],n)):x(e,i,[e,t])}}function b(e,t){if(!e.isDestroying){var r,n=t+":change";A?(r=P.add(e,t,n),C(e,n,r)):x(e,n,[e,t])}}var g,y,_=e.guidFor,w=e.tryFinally,x=t.sendEvent,C=t.accumulateListeners,E=r["default"],O=new E,P=new E,A=0;n.propertyWillChange=i,n.propertyDidChange=a,n.overrideChains=m,n.beginPropertyChanges=p,n.endPropertyChanges=f,n.changeProperties=d}),e("ember-metal/property_get",["ember-metal/core","ember-metal/error","ember-metal/path_cache","ember-metal/platform","exports"],function(e,t,r,n,i){"use strict";function a(e,t){var r,n=m(t),i=!n&&c(t);if((!e||i)&&(e=u.lookup),n&&(t=t.slice(5)),e===u.lookup&&(r=t.match(p)[0],e=f(e,r),t=t.slice(r.length+1)),!t||0===t.length)throw new l("Path cannot be empty");return[e,t]}function s(e,t){var r,n,i,s,o;if(null===e&&!h(t))return f(u.lookup,t);for(r=m(t),(!e||r)&&(i=a(e,t),e=i[0],t=i[1],i.length=0),n=t.split("."),o=n.length,s=0;null!=e&&o>s;s++)if(e=f(e,n[s],!0),e&&e.isDestroyed)return void 0;return e}function o(e,t,r){var n=f(e,t);return void 0===n?r:n}var u=e["default"],l=t["default"],c=r.isGlobalPath,h=r.isPath,m=r.hasThis,p=(n.hasPropertyAccessors,/^([^\.]+)/),f=function(e,t){if(""===t)return e;if(t||"string"!=typeof e||(t=e,e=null),null===e){var r=s(e,t);return r}var n,i=e.__ember_meta__,a=i&&i.descs[t];return void 0===a&&h(t)?s(e,t):a?a.get(e,t):(n=e[t],void 0!==n||"object"!=typeof e||t in e||"function"!=typeof e.unknownProperty?n:e.unknownProperty(t))};i.getWithDefault=o,i["default"]=f,i.get=f,i.normalizeTuple=a,i._getPath=s}),e("ember-metal/property_set",["ember-metal/core","ember-metal/property_get","ember-metal/property_events","ember-metal/properties","ember-metal/error","ember-metal/path_cache","ember-metal/platform","exports"],function(e,t,r,n,i,a,s,o){"use strict";function u(e,t,r,n){var i;if(i=t.slice(t.lastIndexOf(".")+1),t=t===i?i:t.slice(0,t.length-(i.length+1)),"this"!==t&&(e=c(e,t)),!i||0===i.length)throw new p("Property set failed: You passed an empty path");if(!e){if(n)return;throw new p('Property set failed: object in path "'+t+'" could not be found or was destroyed.')}return d(e,i,r)}function l(e,t,r){return d(e,t,r,!0)}var c=(e["default"],t._getPath),h=r.propertyWillChange,m=r.propertyDidChange,p=(n.defineProperty,i["default"]),f=a.isPath,d=(s.hasPropertyAccessors,function(e,t,r,n){if("string"==typeof e&&(r=t,t=e,e=null),!e)return u(e,t,r,n);var i,a,s=e.__ember_meta__,o=s&&s.descs[t];if(void 0===o&&f(t))return u(e,t,r,n);if(void 0!==o)o.set(e,t,r);else{if("object"==typeof e&&null!==e&&void 0!==r&&e[t]===r)return r;i="object"==typeof e&&!(t in e),i&&"function"==typeof e.setUnknownProperty?e.setUnknownProperty(t,r):s&&s.watching[t]>0?(s.proto!==e&&(a=e[t]),r!==a&&(h(e,t),e[t]=r,m(e,t))):e[t]=r}return r});o.trySet=l,o.set=d}),e("ember-metal/run_loop",["ember-metal/core","ember-metal/utils","ember-metal/array","ember-metal/property_events","backburner","exports"],function(e,t,r,n,i,a){"use strict";function s(e){u.currentRunLoop=e}function o(e,t){u.currentRunLoop=t}function u(){return b.run.apply(b,arguments)}function l(){!u.currentRunLoop}var c=e["default"],h=t.apply,m=t.GUID_KEY,p=r.indexOf,f=n.beginPropertyChanges,d=n.endPropertyChanges,v=i["default"],b=new v(["sync","actions","destroy"],{GUID_KEY:m,sync:{before:f,after:d},defaultQueue:"actions",onBegin:s,onEnd:o,onErrorTarget:c,onErrorMethod:"onerror"}),g=[].slice;a["default"]=u,u.join=function(){return b.join.apply(b,arguments)},u.bind=function(){var e=g.call(arguments);return function(){return u.join.apply(u,e.concat(g.call(arguments)))}},u.backburner=b,u.currentRunLoop=null,u.queues=b.queueNames,u.begin=function(){b.begin()},u.end=function(){b.end()},u.schedule=function(){l(),b.schedule.apply(b,arguments)},u.hasScheduledTimers=function(){return b.hasTimers()},u.cancelTimers=function(){b.cancelTimers()},u.sync=function(){b.currentInstance&&b.currentInstance.queues.sync.flush()},u.later=function(){return b.later.apply(b,arguments)},u.once=function(){l();var e=arguments.length,t=new Array(e);t[0]="actions";for(var r=0;e>r;r++)t[r+1]=arguments[r];return h(b,b.scheduleOnce,t)},u.scheduleOnce=function(){return l(),b.scheduleOnce.apply(b,arguments)},u.next=function(){var e=g.call(arguments);return e.push(1),h(b,b.later,e)},u.cancel=function(e){return b.cancel(e)},u.debounce=function(){return b.debounce.apply(b,arguments)},u.throttle=function(){return b.throttle.apply(b,arguments)},u._addQueue=function(e,t){-1===p.call(u.queues,e)&&u.queues.splice(p.call(u.queues,t)+1,0,e)}}),e("ember-metal/set_properties",["ember-metal/property_events","ember-metal/property_set","ember-metal/keys","exports"],function(e,t,r,n){"use strict";var i=e.changeProperties,a=t.set,s=r["default"];n["default"]=function(e,t){return t&&"object"==typeof t?(i(function(){for(var r,n=s(t),i=0,o=n.length;o>i;i++)r=n[i],a(e,r,t[r])}),e):e}}),e("ember-metal/streams/simple",["ember-metal/merge","ember-metal/streams/stream","ember-metal/platform","ember-metal/streams/utils","exports"],function(e,t,r,n,i){"use strict";function a(e){this.init(),this.source=e,c(e)&&e.subscribe(this._didChange,this)}var s=e["default"],o=t["default"],u=r.create,l=n.read,c=n.isStream;a.prototype=u(o.prototype),s(a.prototype,{valueFn:function(){return l(this.source)},setValue:function(e){var t=this.source;c(t)&&t.setValue(e)},setSource:function(e){var t=this.source;e!==t&&(c(t)&&t.unsubscribe(this._didChange,this),c(e)&&e.subscribe(this._didChange,this),this.source=e,this.notify())},_didChange:function(){this.notify()},_super$destroy:o.prototype.destroy,destroy:function(){return this._super$destroy()?(c(this.source)&&this.source.unsubscribe(this._didChange,this),this.source=void 0,!0):void 0}}),i["default"]=a}),e("ember-metal/streams/stream",["ember-metal/platform","ember-metal/path_cache","exports"],function(e,t,r){"use strict";function n(e){this.init(),this.valueFn=e}var i=e.create,a=t.getFirstKey,s=t.getTailPath;n.prototype={isStream:!0,init:function(){this.state="dirty",this.cache=void 0,this.subscribers=void 0,this.children=void 0,this._label=void 0},get:function(e){var t=a(e),r=s(e);void 0===this.children&&(this.children=i(null));var n=this.children[t];return void 0===n&&(n=this._makeChildStream(t,e),this.children[t]=n),void 0===r?n:n.get(r)},value:function(){return"clean"===this.state?this.cache:"dirty"===this.state?(this.state="clean",this.cache=this.valueFn()):void 0},valueFn:function(){throw new Error("Stream error: valueFn not implemented")},setValue:function(){throw new Error("Stream error: setValue not implemented")},notify:function(){this.notifyExcept()},notifyExcept:function(e,t){"clean"===this.state&&(this.state="dirty",this._notifySubscribers(e,t))},subscribe:function(e,t){void 0===this.subscribers?this.subscribers=[e,t]:this.subscribers.push(e,t)},unsubscribe:function(e,t){var r=this.subscribers;if(void 0!==r)for(var n=0,i=r.length;i>n;n+=2)if(r[n]===e&&r[n+1]===t)return void r.splice(n,2)},_notifySubscribers:function(e,t){var r=this.subscribers;if(void 0!==r)for(var n=0,i=r.length;i>n;n+=2){var a=r[n],s=r[n+1];(a!==e||s!==t)&&(void 0===s?a(this):a.call(s,this))}},destroy:function(){if("destroyed"!==this.state){this.state="destroyed";var e=this.children;for(var t in e)e[t].destroy();return!0}},isGlobal:function(){for(var e=this;void 0!==e;){if(e._isRoot)return e._isGlobal;e=e.source}}},r["default"]=n}),e("ember-metal/streams/stream_binding",["ember-metal/platform","ember-metal/merge","ember-metal/run_loop","ember-metal/streams/stream","exports"],function(e,t,r,n,i){"use strict";function a(e){this.init(),this.stream=e,this.senderCallback=void 0,this.senderContext=void 0,this.senderValue=void 0,e.subscribe(this._onNotify,this)}var s=e.create,o=t["default"],u=r["default"],l=n["default"];a.prototype=s(l.prototype),o(a.prototype,{valueFn:function(){return this.stream.value()},_onNotify:function(){this._scheduleSync(void 0,void 0,this)},setValue:function(e,t,r){this._scheduleSync(e,t,r)},_scheduleSync:function(e,t,r){void 0===this.senderCallback&&void 0===this.senderContext?(this.senderCallback=t,this.senderContext=r,this.senderValue=e,u.schedule("sync",this,this._sync)):this.senderContext!==this&&(this.senderCallback=t,this.senderContext=r,this.senderValue=e)},_sync:function(){if("destroyed"!==this.state){this.senderContext!==this&&this.stream.setValue(this.senderValue);var e=this.senderCallback,t=this.senderContext;this.senderCallback=void 0,this.senderContext=void 0,this.senderValue=void 0,this.state="clean",this.notifyExcept(e,t)}},_super$destroy:l.prototype.destroy,destroy:function(){return this._super$destroy()?(this.stream.unsubscribe(this._onNotify,this),!0):void 0}}),i["default"]=a}),e("ember-metal/streams/utils",["./stream","exports"],function(e,t){"use strict";function r(e){return e&&e.isStream}function n(e,t,r){e&&e.isStream&&e.subscribe(t,r)}function i(e,t,r){e&&e.isStream&&e.unsubscribe(t,r)}function a(e){return e&&e.isStream?e.value():e}function s(e){for(var t=e.length,r=new Array(t),n=0;t>n;n++)r[n]=a(e[n]);return r}function o(e){var t={};for(var r in e)t[r]=a(e[r]);return t}function u(e){for(var t=e.length,n=!1,i=0;t>i;i++)if(r(e[i])){n=!0;break}return n}function l(e){var t=!1;for(var n in e)if(r(e[n])){t=!0;break}return t}function c(e,t){var r=u(e); +if(r){var i,a,o=new m(function(){return s(e).join(t)});for(i=0,a=e.length;a>i;i++)n(e[i],o.notify,o);return o}return e.join(t)}function h(e,t){if(r(e)){var i=new m(t);return n(e,i.notify,i),i}return t()}var m=e["default"];t.isStream=r,t.subscribe=n,t.unsubscribe=i,t.read=a,t.readArray=s,t.readHash=o,t.scanArray=u,t.scanHash=l,t.concat=c,t.chain=h}),e("ember-metal/utils",["ember-metal/core","ember-metal/platform","ember-metal/array","exports"],function(e,t,r,n){function i(){return++A}function a(e){var t={};t[e]=1;for(var r in t)if(r===e)return r;return e}function s(e,t){t||(t=N);var r=t+i();return e&&(null===e[k]?e[k]=r:(V.value=r,C(e,k,V))),r}function o(e){if(void 0===e)return"(undefined)";if(null===e)return"(null)";var t,r=typeof e;switch(r){case"number":return t=S[e],t||(t=S[e]="nu"+e),t;case"string":return t=T[e],t||(t=T[e]="st"+i()),t;case"boolean":return e?"(true)":"(false)";default:return e[k]?e[k]:e===Object?"(Object)":e===Array?"(Array)":(t=N+i(),null===e[k]?e[k]=t:(V.value=t,C(e,k,V)),t)}}function u(e){this.descs={},this.watching={},this.cache={},this.cacheMeta={},this.source=e,this.deps=void 0,this.listeners=void 0,this.mixins=void 0,this.bindings=void 0,this.chains=void 0,this.values=void 0,this.proto=void 0}function l(e,t){var r=e.__ember_meta__;return t===!1?r||j:(r?r.source!==e&&(E&&C(e,"__ember_meta__",I),r=O(r),r.descs=O(r.descs),r.watching=O(r.watching),r.cache={},r.cacheMeta={},r.source=e,e.__ember_meta__=r):(E&&C(e,"__ember_meta__",I),r=new u(e),e.__ember_meta__=r,r.descs.constructor=null),r)}function c(e,t){var r=l(e,!1);return r[t]}function h(e,t,r){var n=l(e,!0);return n[t]=r,r}function m(e,t,r){for(var n,i,a=l(e,r),s=0,o=t.length;o>s;s++){if(n=t[s],i=a[n]){if(i.__ember_source__!==e){if(!r)return void 0;i=a[n]=O(i),i.__ember_source__=e}}else{if(!r)return void 0;i=a[n]={__ember_source__:e}}a=i}return i}function p(e,t){function r(){var r,n=this&&this.__nextSuper,i=arguments.length;if(this&&(this.__nextSuper=t),0===i)r=e.call(this);else if(1===i)r=e.call(this,arguments[0]);else if(2===i)r=e.call(this,arguments[0],arguments[1]);else{for(var a=new Array(i),s=0;i>s;s++)a[s]=arguments[s];r=_(this,e,a)}return this&&(this.__nextSuper=n),r}return r.wrappedFunction=e,r.wrappedFunction.__ember_arity__=e.length,r.__ember_observes__=e.__ember_observes__,r.__ember_observesBefore__=e.__ember_observesBefore__,r.__ember_listens__=e.__ember_listens__,r}function f(e){var t,r;return"undefined"==typeof M&&(t="ember-runtime/mixins/array",x.__loader.registry[t]&&(M=x.__loader.require(t)["default"])),!e||e.setInterval?!1:Array.isArray&&Array.isArray(e)?!0:M&&M.detect(e)?!0:(r=g(e),"array"===r?!0:void 0!==e.length&&"object"===r?!0:!1)}function d(e){return null===e||void 0===e?[]:f(e)?e:[e]}function v(e,t){return!(!e||"function"!=typeof e[t])}function b(e,t,r){return v(e,t)?r?w(e,t,r):w(e,t):void 0}function g(e){var t,r;return"undefined"==typeof H&&(r="ember-runtime/system/object",x.__loader.registry[r]&&(H=x.__loader.require(r)["default"])),t=null===e||void 0===e?String(e):F[z.call(e)]||"object","function"===t?H&&H.detect(e)&&(t="class"):"object"===t&&(e instanceof Error?t="error":H&&e instanceof H?t="instance":e instanceof Date&&(t="date")),t}function y(e){var t=g(e);if("array"===t)return"["+e+"]";if("object"!==t)return e+"";var r,n=[];for(var i in e)if(e.hasOwnProperty(i)){if(r=e[i],"toString"===r)continue;"function"===g(r)&&(r="function() { ... }"),n.push(r&&"function"!=typeof r.toString?i+": "+z.call(r):i+": "+r)}return"{"+n.join(", ")+"}"}function _(e,t,r){var n=r&&r.length;if(!r||!n)return t.call(e);switch(n){case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2]);case 4:return t.call(e,r[0],r[1],r[2],r[3]);case 5:return t.call(e,r[0],r[1],r[2],r[3],r[4]);default:return t.apply(e,r)}}function w(e,t,r){var n=r&&r.length;if(!r||!n)return e[t]();switch(n){case 1:return e[t](r[0]);case 2:return e[t](r[0],r[1]);case 3:return e[t](r[0],r[1],r[2]);case 4:return e[t](r[0],r[1],r[2],r[3]);case 5:return e[t](r[0],r[1],r[2],r[3],r[4]);default:return e[t].apply(e,r)}}var x=e["default"],C=t.defineProperty,E=t.canDefineNonEnumerableProperties,O=(t.hasPropertyAccessors,t.create),P=r.forEach,A=0;n.uuid=i;var N="ember",S=[],T={},k=a("__ember"+ +new Date),V={writable:!1,configurable:!1,enumerable:!1,value:null};n.generateGuid=s,n.guidFor=o;var I={writable:!0,configurable:!1,enumerable:!1,value:null};u.prototype={chainWatchers:null},E||(u.prototype.__preventPlainObject__=!0,u.prototype.toJSON=function(){});var j=new u(null);n.getMeta=c,n.setMeta=h,n.metaPath=m,n.wrap=p;var M;n.makeArray=d,n.tryInvoke=b;var R,D=function(){var e=0;try{try{}finally{throw e++,new Error("needsFinallyFixTest")}}catch(t){}return 1!==e}();R=D?function(e,t,r){var n,i,a;r=r||this;try{n=e.call(r)}finally{try{i=t.call(r)}catch(s){a=s}}if(a)throw a;return void 0===i?n:i}:function(e,t,r){var n,i;r=r||this;try{n=e.call(r)}finally{i=t.call(r)}return void 0===i?n:i};var L;L=D?function(e,t,r,n){var i,a,s;n=n||this;try{i=e.call(n)}catch(o){i=t.call(n,o)}finally{try{a=r.call(n)}catch(u){s=u}}if(s)throw s;return void 0===a?i:a}:function(e,t,r,n){var i,a;n=n||this;try{i=e.call(n)}catch(s){i=t.call(n,s)}finally{a=r.call(n)}return void 0===a?i:a};var F={},B="Boolean Number String Function Array Date RegExp Object".split(" ");P.call(B,function(e){F["[object "+e+"]"]=e.toLowerCase()});var H,z=Object.prototype.toString;n.inspect=y,n.apply=_,n.applyStr=w,n.GUID_KEY=k,n.META_DESC=I,n.EMPTY_META=j,n.meta=l,n.typeOf=g,n.tryCatchFinally=L,n.isArray=f,n.canInvoke=v,n.tryFinally=R}),e("ember-metal/watch_key",["ember-metal/core","ember-metal/utils","ember-metal/platform","ember-metal/properties","exports"],function(e,t,r,n,i){"use strict";function a(e,t,r){if("length"!==t||"array"!==u(e)){var n=r||o(e),i=n.watching;if(i[t])i[t]=(i[t]||0)+1;else{i[t]=1;var a=n.descs[t];a&&a.willWatch&&a.willWatch(e,t),"function"==typeof e.willWatchProperty&&e.willWatchProperty(t)}}}function s(e,t,r){var n=r||o(e),i=n.watching;if(1===i[t]){i[t]=0;var a=n.descs[t];a&&a.didUnwatch&&a.didUnwatch(e,t),"function"==typeof e.didUnwatchProperty&&e.didUnwatchProperty(t)}else i[t]>1&&i[t]--}{var o=(e["default"],t.meta),u=t.typeOf;r.defineProperty,r.hasPropertyAccessors,n.MANDATORY_SETTER_FUNCTION,n.DEFAULT_GETTER_FUNCTION}i.watchKey=a,i.unwatchKey=s}),e("ember-metal/watch_path",["ember-metal/utils","ember-metal/chains","exports"],function(e,t,r){"use strict";function n(e,t){var r=t||s(e),n=r.chains;return n?n.value()!==e&&(n=r.chains=n.copy(e)):n=r.chains=new u(null,null,e),n}function i(e,t,r){if("length"!==t||"array"!==o(e)){var i=r||s(e),a=i.watching;a[t]?a[t]=(a[t]||0)+1:(a[t]=1,n(e,i).add(t))}}function a(e,t,r){var i=r||s(e),a=i.watching;1===a[t]?(a[t]=0,n(e,i).remove(t)):a[t]>1&&a[t]--}var s=e.meta,o=e.typeOf,u=t.ChainNode;r.watchPath=i,r.unwatchPath=a}),e("ember-metal/watching",["ember-metal/utils","ember-metal/chains","ember-metal/watch_key","ember-metal/watch_path","ember-metal/path_cache","exports"],function(e,t,r,n,i,a){"use strict";function s(e,t,r){("length"!==t||"array"!==c(e))&&(b(t)?d(e,t,r):p(e,t,r))}function o(e,t){var r=e.__ember_meta__;return(r&&r.watching[t])>0}function u(e,t,r){("length"!==t||"array"!==c(e))&&(b(t)?v(e,t,r):f(e,t,r))}function l(e){var t,r,n,i,a=e.__ember_meta__;if(a&&(e.__ember_meta__=null,t=a.chains))for(g.push(t);g.length>0;){if(t=g.pop(),r=t._chains)for(n in r)r.hasOwnProperty(n)&&g.push(r[n]);t._watching&&(i=t._object,i&&h(i,t._key,t))}}var c=e.typeOf,h=t.removeChainWatcher,m=t.flushPendingChains,p=r.watchKey,f=r.unwatchKey,d=n.watchPath,v=n.unwatchPath,b=i.isPath;a.watch=s,a.isWatching=o,s.flushPending=m,a.unwatch=u;var g=[];a.destroy=l}),e("ember-routing-htmlbars",["ember-metal/core","ember-htmlbars/helpers","ember-routing-htmlbars/helpers/outlet","ember-routing-htmlbars/helpers/render","ember-routing-htmlbars/helpers/link-to","ember-routing-htmlbars/helpers/action","ember-routing-htmlbars/helpers/query-params","exports"],function(e,t,r,n,i,a,s,o){"use strict";var u=e["default"],l=t.registerHelper,c=r.outletHelper,h=n.renderHelper,m=i.linkToHelper,p=i.deprecatedLinkToHelper,f=a.actionHelper,d=s.queryParamsHelper;l("outlet",c),l("render",h),l("link-to",m),l("linkTo",p),l("action",f),l("query-params",d),o["default"]=u}),e("ember-routing-htmlbars/helpers/action",["ember-metal/core","ember-metal/utils","ember-metal/run_loop","ember-views/streams/utils","ember-views/system/utils","ember-views/system/action_manager","ember-metal/array","ember-metal/streams/utils","exports"],function(e,t,r,n,i,a,s,o,u){"use strict";function l(e,t){var r,n,i;if(void 0===t)for(r=new Array(e.length),n=0,i=e.length;i>n;n++)r[n]=p(e[n]);else for(r=new Array(e.length+1),r[0]=t,n=0,i=e.length;i>n;n++)r[n+1]=p(e[n]);return r}function c(e,t,r,n){var i;i=t.target?v(t.target)?t.target:this.getStream(t.target):this.getStream("controller");var a={eventName:t.on||"click",parameters:e.slice(1),view:this,bubbles:t.bubbles,preventDefault:t.preventDefault,target:i,withKeyCode:t.withKeyCode},s=b.registerAction(e[0],a,t.allowedKeys);n.dom.setAttribute(r.element,"data-ember-action",s)}var h=(e["default"],t.uuid),m=r["default"],p=n.readUnwrappedModel,f=i.isSimpleClick,d=a["default"],v=(s.indexOf,o.isStream),b={};b.registeredActions=d.registeredActions,u.ActionHelper=b;var g=["alt","shift","meta","ctrl"],y=/^click|mouse|touch/,_=function(e,t){if("undefined"==typeof t){if(y.test(e.type))return f(e);t=""}if(t.indexOf("any")>=0)return!0;for(var r=0,n=g.length;n>r;r++)if(e[g[r]+"Key"]&&-1===t.indexOf(g[r]))return!1;return!0};b.registerAction=function(e,t,r){var n=h(),i=t.eventName,a=t.parameters;return d.registeredActions[n]={eventName:i,handler:function(n){if(!_(n,r))return!0;t.preventDefault!==!1&&n.preventDefault(),t.bubbles===!1&&n.stopPropagation();var i,s=t.target.value();i=v(e)?e.value():e,m(function(){s.send?s.send.apply(s,l(a,i)):s[i].apply(s,l(a))})}},t.view.on("willClearRender",function(){delete d.registeredActions[n]}),n},u.actionHelper=c}),e("ember-routing-htmlbars/helpers/link-to",["ember-metal/core","ember-routing-views/views/link","ember-metal/streams/utils","ember-runtime/mixins/controller","ember-htmlbars/templates/link-to-escaped","ember-htmlbars/templates/link-to-unescaped","ember-htmlbars","exports"],function(e,t,r,n,i,a,s,o){"use strict";function u(e,t,r,n){var i,a=!t.unescaped,s=e[e.length-1];if(s&&s.isQueryParams&&(t.queryParamsObject=i=e.pop()),t.disabledWhen&&(t.disabled=t.disabledWhen,delete t.disabledWhen),!r.template){var o=e.shift();t.layout=a?p:f,t.linkTitle=o}for(var u=0;u1){var y=i.lookupFactory(b)||c(i,v,p);s=y.create({modelBinding:d,parentController:g,target:g}),o.one("willDestroyElement",function(){s.destroy()})}else s=i.lookup(b)||h(i,v),s.setProperties({target:g,parentController:g});t.viewName=l(f);var _="template:"+f;t.template=i.lookup(_),t.controller=s,a&&!p&&a._connectActiveView(f,o),r.helperName=r.helperName||'render "'+f+'"',m.instanceHelper(o,t,r,n)}{var u=(e["default"],t["default"]),l=r.camelize,c=n.generateControllerFactory,h=n["default"],m=i.ViewHelper;a.isStream}s.renderHelper=o}),e("ember-routing-views",["ember-metal/core","ember-routing-views/views/link","ember-routing-views/views/outlet","exports"],function(e,t,r,n){"use strict";var i=e["default"],a=t.LinkView,s=r.OutletView;i.LinkView=a,i.OutletView=s,n["default"]=i}),e("ember-routing-views/views/link",["ember-metal/core","ember-metal/property_get","ember-metal/merge","ember-metal/run_loop","ember-metal/computed","ember-runtime/system/string","ember-metal/keys","ember-views/system/utils","ember-views/views/component","ember-routing/utils","ember-metal/streams/utils","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h){"use strict";function m(e){var t=e.queryParamsObject,r={};if(!t)return r;var n=t.values;for(var i in n)n.hasOwnProperty(i)&&(r[i]=C(n[i]));return r}function p(e){for(var t=0,r=e.length;r>t;++t){var n=e[t];if(null===n||"undefined"==typeof n)return!1}return!0}function f(e,t){var r;for(r in e)if(e.hasOwnProperty(r)&&e[r]!==t[r])return!1;for(r in t)if(t.hasOwnProperty(r)&&e[r]!==t[r])return!1;return!0}var d=e["default"],v=t.get,b=r["default"],g=n["default"],y=i.computed,_=(a.fmt,s["default"],o.isSimpleClick),w=u["default"],x=l.routeArgs,C=c.read,E=c.subscribe,O=function(e,t){for(var r=0,n=0,i=t.length;i>n&&(r+=t[n].names.length,t[n].handler!==e);n++);return r},P=d.LinkView=w.extend({tagName:"a",currentWhen:null,"current-when":null,title:null,rel:null,tabindex:null,target:null,activeClass:"active",loadingClass:"loading",disabledClass:"disabled",_isDisabled:!1,replace:!1,attributeBindings:["href","title","rel","tabindex"],classNameBindings:["active","loading","disabled"],eventName:"click",init:function(){this._super.apply(this,arguments);var e=v(this,"eventName");this.on(e,this,this._invoke)},_paramsChanged:function(){this.notifyPropertyChange("resolvedParams")},_setupPathObservers:function(){for(var e=this.params,t=this._wrapAsScheduled(this._paramsChanged),r=0;ro&&(e=s);var u=x(e,n,null),l=t.isActive.apply(t,u);if(!l)return!1;var c=d.isEmpty(d.keys(r.queryParams));if(!a&&!c&&l){var h={};b(h,r.queryParams),t._prepareQueryParams(r.targetRouteName,r.models,h),l=f(h,t.router.state.queryParams)}return l}if(v(this,"loading"))return!1;var t=v(this,"router"),r=v(this,"loadedParams"),n=r.models,i=this["current-when"]||this.currentWhen,a=Boolean(i);i=i||r.targetRouteName,i=i.split(" ");for(var s=0,o=i.length;o>s;s++)if(e(i[s]))return v(this,"activeClass")}),loading:y("loadedParams",function(){return v(this,"loadedParams")?void 0:v(this,"loadingClass")}),router:y(function(){var e=v(this,"controller");return e&&e.container?e.container.lookup("router:main"):void 0}),_invoke:function(e){if(!_(e))return!0;if(this.preventDefault!==!1){var t=v(this,"target");t&&"_self"!==t||e.preventDefault()}if(this.bubbles===!1&&e.stopPropagation(),v(this,"_isDisabled"))return!1;if(v(this,"loading"))return d.Logger.warn("This link-to is in an inactive loading state because at least one of its parameters presently has a null/undefined value, or the provided route name is invalid."),!1;var r=v(this,"target");if(r&&"_self"!==r)return!1;var n=v(this,"router"),i=v(this,"loadedParams"),a=n._doTransition(i.targetRouteName,i.models,i.queryParams);v(this,"replace")&&a.method("replace");var s=x(i.targetRouteName,i.models,a.state.queryParams),o=n.router.generate.apply(n.router,s);g.scheduleOnce("routerTransitions",this,this._eagerUpdateUrl,a,o)},_eagerUpdateUrl:function(e,t){if(e.isActive&&e.urlMethod){0===t.indexOf("#")&&(t=t.slice(1));var r=v(this,"router.router");"update"===e.urlMethod?r.updateURL(t):"replace"===e.urlMethod&&r.replaceURL(t),e.method(null)}},resolvedParams:y("router.url",function(){var e,t=this.params,r=[],n=0===t.length;if(n){var i=this.container.lookup("controller:application");e=v(i,"currentRouteName")}else{e=C(t[0]);for(var a=1;an;++n)u(t[n],r);return r}),_cacheMeta:m(function(){var e=f(this);if(e.proto!==this)return c(e.proto,"_cacheMeta");var t={},r=c(this,"_normalizedQueryParams");for(var n in r)if(r.hasOwnProperty(n)){var i,a=r[n],s=a.scope;"controller"===s&&(i=[]),t[n]={parts:i,values:null,scope:s,prefix:"",def:c(this,n)}}return t}),_updateCacheParams:function(e){var t=c(this,"_cacheMeta");for(var r in t)if(t.hasOwnProperty(r)){var n=t[r];n.values=e;var i=this._calculateCacheKey(n.prefix,n.parts,n.values),a=this._bucketCache;if(a){var s=a.lookup(i,r,n.def);h(this,r,s)}}},_qpChanged:function(e,t){var r=t.substr(0,t.length-3),n=c(e,"_cacheMeta"),i=n[r],a=e._calculateCacheKey(i.prefix||"",i.parts,i.values),s=c(e,r),o=this._bucketCache;o&&e._bucketCache.stash(a,r,s);var u=e._qpDelegate;u&&u(e,r)},_calculateCacheKey:function(e,t,r){for(var n=t||[],i="",a=0,s=n.length;s>a;++a){var o=n[a],u=c(r,o);i+="::"+o+":"+u}return e+i.replace(b,"-")},transitionToRoute:function(){var e=c(this,"target"),t=e.transitionToRoute||e.transitionTo;return t.apply(e,arguments)},transitionTo:function(){return this.transitionToRoute.apply(this,arguments)},replaceRoute:function(){var e=c(this,"target"),t=e.replaceRoute||e.replaceWith;return t.apply(e,arguments)},replaceWith:function(){return this.replaceRoute.apply(this,arguments)}});var b=/\./g;o["default"]=v}),e("ember-routing/ext/run_loop",["ember-metal/run_loop"],function(e){"use strict";var t=e["default"];t._addQueue("routerTransitions","actions")}),e("ember-routing/ext/view",["ember-metal/property_get","ember-metal/property_set","ember-metal/run_loop","ember-views/views/view","exports"],function(e,t,r,n,i){"use strict";var a=e.get,s=t.set,o=r["default"],u=n["default"];u.reopen({init:function(){this._outlets={},this._super()},connectOutlet:function(e,t){if(this._pendingDisconnections&&delete this._pendingDisconnections[e],this._hasEquivalentView(e,t))return void t.destroy();var r=a(this,"_outlets"),n=a(this,"container"),i=n&&n.lookup("router:main"),o=a(t,"renderedName");s(r,e,t),i&&o&&i._connectActiveView(o,t)},_hasEquivalentView:function(e,t){var r=a(this,"_outlets."+e);return r&&r.constructor===t.constructor&&r.get("template")===t.get("template")&&r.get("context")===t.get("context")},disconnectOutlet:function(e){this._pendingDisconnections||(this._pendingDisconnections={}),this._pendingDisconnections[e]=!0,o.once(this,"_finishDisconnections")},_finishDisconnections:function(){if(!this.isDestroyed){var e=a(this,"_outlets"),t=this._pendingDisconnections;this._pendingDisconnections=null;for(var r in t)s(e,r,null)}}}),i["default"]=u}),e("ember-routing/location/api",["ember-metal/core","exports"],function(e,t){"use strict";e["default"];t["default"]={create:function(e){var t=e&&e.implementation,r=this.implementations[t];return r.create.apply(r,arguments)},registerImplementation:function(e,t){this.implementations[e]=t},implementations:{},_location:window.location,_getHash:function(){var e=(this._location||this.location).href,t=e.indexOf("#");return-1===t?"":e.substr(t)}}}),e("ember-routing/location/auto_location",["ember-metal/core","ember-metal/property_set","ember-routing/location/api","ember-routing/location/history_location","ember-routing/location/hash_location","ember-routing/location/none_location","exports"],function(e,t,r,n,i,a,s){"use strict";var o=(e["default"],t.set),u=r["default"],l=n["default"],c=i["default"],h=a["default"];s["default"]={cancelRouterSetup:!1,rootURL:"/",_window:window,_location:window.location,_history:window.history,_HistoryLocation:l,_HashLocation:c,_NoneLocation:h,_getOrigin:function(){var e=this._location,t=e.origin;return t||(t=e.protocol+"//"+e.hostname,e.port&&(t+=":"+e.port)),t},_getSupportsHistory:function(){var e=this._window.navigator.userAgent;return-1!==e.indexOf("Android 2")&&-1!==e.indexOf("Mobile Safari")&&-1===e.indexOf("Chrome")?!1:!!(this._history&&"pushState"in this._history)},_getSupportsHashChange:function(){var e=this._window,t=e.document.documentMode;return"onhashchange"in e&&(void 0===t||t>7)},_replacePath:function(e){this._location.replace(this._getOrigin()+e)},_getRootURL:function(){return this.rootURL},_getPath:function(){var e=this._location.pathname;return"/"!==e.charAt(0)&&(e="/"+e),e},_getHash:u._getHash,_getQuery:function(){return this._location.search},_getFullPath:function(){return this._getPath()+this._getQuery()+this._getHash()},_getHistoryPath:function(){{var e,t,r=this._getRootURL(),n=this._getPath(),i=this._getHash(),a=this._getQuery();n.indexOf(r)}return"#/"===i.substr(0,2)?(t=i.substr(1).split("#"),e=t.shift(),"/"===n.slice(-1)&&(e=e.substr(1)),n+=e,n+=a,t.length&&(n+="#"+t.join("#"))):(n+=a,n+=i),n},_getHashPath:function(){var e=this._getRootURL(),t=e,r=this._getHistoryPath(),n=r.substr(e.length);return""!==n&&("/"!==n.charAt(0)&&(n="/"+n),t+="#"+n),t},create:function(e){e&&e.rootURL&&(this.rootURL=e.rootURL);var t,r,n=!1,i=this._NoneLocation,a=this._getFullPath();this._getSupportsHistory()?(t=this._getHistoryPath(),a===t?i=this._HistoryLocation:"/#"===a.substr(0,2)?(this._history.replaceState({path:t},null,t),i=this._HistoryLocation):(n=!0,this._replacePath(t))):this._getSupportsHashChange()&&(r=this._getHashPath(),a===r||"/"===a&&"/#/"===r?i=this._HashLocation:(n=!0,this._replacePath(r)));var s=i.create.apply(i,arguments);return n&&o(s,"cancelRouterSetup",!0),s}}}),e("ember-routing/location/hash_location",["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/run_loop","ember-metal/utils","ember-runtime/system/object","ember-routing/location/api","exports"],function(e,t,r,n,i,a,s,o){"use strict";var u=e["default"],l=t.get,c=r.set,h=n["default"],m=i.guidFor,p=a["default"],f=s["default"];o["default"]=p.extend({implementation:"hash",init:function(){c(this,"location",l(this,"_location")||window.location)},getHash:f._getHash,getURL:function(){var e=this.getHash().substr(1),t=e;return"/"!==t.charAt(0)&&(t="/",e&&(t+="#"+e)),t},setURL:function(e){l(this,"location").hash=e,c(this,"lastSetURL",e)},replaceURL:function(e){l(this,"location").replace("#"+e),c(this,"lastSetURL",e)},onUpdateURL:function(e){var t=this,r=m(this);u.$(window).on("hashchange.ember-location-"+r,function(){h(function(){var r=t.getURL();l(t,"lastSetURL")!==r&&(c(t,"lastSetURL",null),e(r))})})},formatURL:function(e){return"#"+e},willDestroy:function(){var e=m(this);u.$(window).off("hashchange.ember-location-"+e)}})}),e("ember-routing/location/history_location",["ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-runtime/system/object","ember-routing/location/api","ember-views/system/jquery","exports"],function(e,t,r,n,i,a,s){"use strict";var o=e.get,u=t.set,l=r.guidFor,c=n["default"],h=i["default"],m=a["default"],p=!1,f=window.history&&"state"in window.history;s["default"]=c.extend({implementation:"history",init:function(){u(this,"location",o(this,"location")||window.location),u(this,"baseURL",m("base").attr("href")||"")},initState:function(){u(this,"history",o(this,"history")||window.history),this.replaceState(this.formatURL(this.getURL()))},rootURL:"/",getURL:function(){var e=o(this,"rootURL"),t=o(this,"location"),r=t.pathname,n=o(this,"baseURL");e=e.replace(/\/$/,""),n=n.replace(/\/$/,"");var i=r.replace(n,"").replace(e,""),a=t.search||"";return i+=a,i+=this.getHash()},setURL:function(e){var t=this.getState();e=this.formatURL(e),t&&t.path===e||this.pushState(e)},replaceURL:function(e){var t=this.getState();e=this.formatURL(e),t&&t.path===e||this.replaceState(e)},getState:function(){return f?o(this,"history").state:this._historyState},pushState:function(e){var t={path:e};o(this,"history").pushState(t,null,e),f||(this._historyState=t),this._previousURL=this.getURL()},replaceState:function(e){var t={path:e};o(this,"history").replaceState(t,null,e),f||(this._historyState=t),this._previousURL=this.getURL()},onUpdateURL:function(e){var t=l(this),r=this;m(window).on("popstate.ember-location-"+t,function(){(p||(p=!0,r.getURL()!==r._previousURL))&&e(r.getURL())})},formatURL:function(e){var t=o(this,"rootURL"),r=o(this,"baseURL");return""!==e?(t=t.replace(/\/$/,""),r=r.replace(/\/$/,"")):r.match(/^\//)&&t.match(/^\//)&&(r=r.replace(/\/$/,"")),r+t+e},willDestroy:function(){var e=l(this);m(window).off("popstate.ember-location-"+e)},getHash:h._getHash})}),e("ember-routing/location/none_location",["ember-metal/property_get","ember-metal/property_set","ember-runtime/system/object","exports"],function(e,t,r,n){"use strict";var i=e.get,a=t.set,s=r["default"];n["default"]=s.extend({implementation:"none",path:"",getURL:function(){return i(this,"path")},setURL:function(e){a(this,"path",e)},onUpdateURL:function(e){this.updateCallback=e},handleURL:function(e){a(this,"path",e),this.updateCallback(e)},formatURL:function(e){return e}})}),e("ember-routing/system/cache",["ember-runtime/system/object","exports"],function(e,t){"use strict";var r=e["default"];t["default"]=r.extend({init:function(){this.cache={}},has:function(e){return e in this.cache},stash:function(e,t,r){var n=this.cache[e];n||(n=this.cache[e]={}),n[t]=r},lookup:function(e,t,r){var n=this.cache;if(!(e in n))return r;var i=n[e];return t in i?i[t]:r},cache:null})}),e("ember-routing/system/controller_for",["exports"],function(e){"use strict";e["default"]=function(e,t,r){return e.lookup("controller:"+t,r)}}),e("ember-routing/system/dsl",["ember-metal/core","exports"],function(e,t){"use strict";function r(e){this.parent=e,this.matches=[]}function n(e){return e.parent&&"application"!==e.parent}function i(e,t,r){return n(e)&&r!==!0?e.parent+"."+t:t}function a(e,t,r,n){r=r||{};var a=i(e,t,r.resetNamespace);"string"!=typeof r.path&&(r.path="/"+t),e.push(r.path,a,n)}e["default"];t["default"]=r,r.prototype={route:function(e,t,n){2===arguments.length&&"function"==typeof t&&(n=t,t={}),1===arguments.length&&(t={});t.resetNamespace===!0?"resource":"route";if(n){var s=i(this,e,t.resetNamespace),o=new r(s);a(o,"loading"),a(o,"error",{path:"/_unused_dummy_error_path_route_"+e+"/:error"}),n.call(o),a(this,e,t,o.generate())}else a(this,e,t)},push:function(e,t,r){var n=t.split(".");(""===e||"/"===e||"index"===n[n.length-1])&&(this.explicitIndex=!0),this.matches.push([e,t,r])},resource:function(e,t,r){2===arguments.length&&"function"==typeof t&&(r=t,t={}),1===arguments.length&&(t={}),t.resetNamespace=!0,this.route(e,t,r)},generate:function(){var e=this.matches;return this.explicitIndex||this.route("index",{path:"/"}),function(t){for(var r=0,n=e.length;n>r;r++){var i=e[r];t(i[0]).to(i[1],i[2])}}}},r.map=function(e){var t=new r;return e.call(t),t}}),e("ember-routing/system/generate_controller",["ember-metal/core","ember-metal/property_get","ember-metal/utils","exports"],function(e,t,r,n){"use strict";function i(e,t,r){var n,i,a,o;return o=r&&s(r)?"array":r?"object":"basic",a="controller:"+o,n=e.lookupFactory(a).extend({isGenerated:!0,toString:function(){return"(generated "+t+" controller)"}}),i="controller:"+t,e.register(i,n),n}var a=(e["default"],t.get),s=r.isArray;n.generateControllerFactory=i,n["default"]=function(e,t,r){i(e,t,r);var n="controller:"+t,s=e.lookup(n);return a(s,"namespace.LOG_ACTIVE_GENERATION"),s}}),e("ember-routing/system/query_params",["ember-runtime/system/object","exports"],function(e,t){"use strict";var r=e["default"];t["default"]=r.extend({isQueryParams:!0,values:null})}),e("ember-routing/system/route",["ember-metal/core","ember-metal/error","ember-metal/property_get","ember-metal/property_set","ember-metal/get_properties","ember-metal/enumerable_utils","ember-metal/is_none","ember-metal/computed","ember-metal/merge","ember-metal/utils","ember-metal/run_loop","ember-metal/keys","ember-runtime/copy","ember-runtime/system/string","ember-runtime/system/object","ember-runtime/mixins/evented","ember-runtime/mixins/action_handler","ember-routing/system/generate_controller","ember-routing/utils","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h,m,p,f,d,v,b,g,y){"use strict"; +function _(){return this}function w(e){var t=x(e,e.router.router.state.handlerInfos,-1);return t&&t.handler}function x(e,t,r){if(t)for(var n,i=r||0,a=0,s=t.length;s>a;a++)if(n=t[a].handler,n===e)return t[a+i]}function C(e){var t,r=w(e);return r?(t=r.lastRenderedTemplate)?t:C(r):void 0}function E(e,t,r,n){var i=n&&n.controller;if(i||(i=t?e.container.lookup("controller:"+r)||e.controllerName||e.routeName:e.controllerName||e.container.lookup("controller:"+r)),"string"==typeof i){var a=i;if(i=e.container.lookup("controller:"+a),!i)throw new I("You passed `controller: '"+a+"'` into the `render` method, but no such controller could be found.")}n&&n.model&&i.set("model",n.model);var s={into:n&&n.into?n.into.replace(/\//g,"."):C(e),outlet:n&&n.outlet||"main",name:r,controller:i};return s}function O(e,t){return e.create({_debugTemplateName:t.name,renderedName:t.name,controller:t.controller})}function P(e,t,r){if(r.into){var n=e.router._lookupActiveView(r.into),i=N(n,r.outlet);e.teardownOutletViews||(e.teardownOutletViews=[]),L(e.teardownOutletViews,0,0,[i]),n.connectOutlet(r.outlet,t)}else{var a=j(e.router,"namespace.rootElement");e.teardownTopLevelView&&e.teardownTopLevelView(),e.router._connectActiveView(r.name,t),e.teardownTopLevelView=A(t),t.appendTo(a)}}function A(e){return function(){e.destroy()}}function N(e,t){return function(){e.disconnectOutlet(t)}}function S(e,t){if(t.fullQueryParams)return t.fullQueryParams;t.fullQueryParams={},B(t.fullQueryParams,t.queryParams);var r=t.handlerInfos[t.handlerInfos.length-1].name;return e._deserializeQueryParams(r,t.fullQueryParams),t.fullQueryParams}function T(e,t){t.queryParamsFor=t.queryParamsFor||{};var r=e.routeName;if(t.queryParamsFor[r])return t.queryParamsFor[r];for(var n=S(e.router,t),i=t.queryParamsFor[r]={},a=j(e,"_qp"),s=a.qps,o=0,u=s.length;u>o;++o){var l=s[o],c=l.prop in n;i[l.prop]=c?n[l.prop]:k(l.def)}return i}function k(e){return H(e)?V.A(e.slice()):e}var V=e["default"],I=t["default"],j=r.get,M=n.set,R=i["default"],D=a.forEach,L=a.replace,F=(s["default"],o.computed),B=u["default"],H=l.isArray,z=l.typeOf,q=c["default"],U=h["default"],W=m["default"],K=(p.classify,f["default"]),G=d["default"],Q=v["default"],$=b["default"],Y=g.stashParamNames,X=Array.prototype.slice,Z=K.extend(Q,{queryParams:{},_qp:F(function(){var e=this.controllerName||this.routeName,t=this.container.lookupFactory("controller:"+e);if(!t)return J;var r=t.proto(),n=j(r,"_normalizedQueryParams"),i=j(r,"_cacheMeta"),a=[],s={},o=this;for(var u in n)if(n.hasOwnProperty(u)){var l=n[u],c=l.as||this.serializeQueryParamKey(u),h=j(r,u);H(h)&&(h=V.A(h.slice()));var m=z(h),p=this.serializeQueryParam(h,c,m),f=e+":"+u,d={def:h,sdef:p,type:m,urlKey:c,prop:u,fprop:f,ctrl:e,cProto:r,svalue:p,cacheType:l.scope,route:this,cacheMeta:i[u]};s[u]=s[c]=s[f]=d,a.push(d)}return{qps:a,map:s,states:{active:function(e,t){return o._activeQPChanged(e,s[t])},allowOverrides:function(e,t){return o._updatingQPChanged(e,s[t])},changingKeys:function(e,t){return o._updateSerializedQPValue(e,s[t])}}}}),_names:null,_stashNames:function(e,t){var r=e;if(!this._names){var n=this._names=r._names;n.length||(r=t,n=r&&r._names||[]);for(var i=j(this,"_qp.qps"),a=i.length,s=new Array(n.length),o=0,u=n.length;u>o;++o)s[o]=r.name+"."+n[o];for(var l=0;a>l;++l){var c=i[l],h=c.cacheMeta;"model"===h.scope&&(h.parts=s),h.prefix=c.ctrl}}},_updateSerializedQPValue:function(e,t){var r=j(e,t.prop);t.svalue=this.serializeQueryParam(r,t.urlKey,t.type)},_activeQPChanged:function(e,t){var r=j(e,t.prop);this.router._queuedQPChanges[t.fprop]=r,q.once(this,this._fireQueryParamTransition)},_updatingQPChanged:function(e,t){var r=this.router;r._qpUpdates||(r._qpUpdates={}),r._qpUpdates[t.urlKey]=!0},mergedProperties:["events","queryParams"],paramsFor:function(e){var t=this.container.lookup("route:"+e);if(!t)return{};var r=this.router.router.activeTransition,n=r?r.state:this.router.router.state,i={};return B(i,n.params[e]),B(i,T(t,n)),i},serializeQueryParamKey:function(e){return e},serializeQueryParam:function(e,t,r){return"array"===r?JSON.stringify(e):""+e},deserializeQueryParam:function(e,t,r){return"boolean"===r?"true"===e?!0:!1:"number"===r?Number(e).valueOf():"array"===r?V.A(JSON.parse(e)):e},_fireQueryParamTransition:function(){this.transitionTo({queryParams:this.router._queuedQPChanges}),this.router._queuedQPChanges={}},_optionsForQueryParam:function(e){return j(this,"queryParams."+e.urlKey)||j(this,"queryParams."+e.prop)||{}},resetController:_,exit:function(){this.deactivate(),this.trigger("deactivate"),this.teardownViews()},_reset:function(e,t){var r=this.controller;r._qpDelegate=j(this,"_qp.states.inactive"),this.resetController(r,e,t)},enter:function(){this.activate(),this.trigger("activate")},viewName:null,templateName:null,controllerName:null,_actions:{queryParamsDidChange:function(e,t,r){for(var n=j(this,"_qp").map,i=U(e).concat(U(r)),a=0,s=i.length;s>a;++a){var o=n[i[a]];o&&j(this._optionsForQueryParam(o),"refreshModel")&&this.refresh()}return!0},finalizeQueryParamChange:function(e,t,r){if("application"!==this.routeName)return!0;if(r){var n,i=r.state.handlerInfos,a=this.router,s=a._queryParamsFor(i[i.length-1].name),o=a._qpUpdates;Y(a,i);for(var u=0,l=s.qps.length;l>u;++u){var c,h,m=s.qps[u],p=m.route,f=p.controller,d=m.urlKey in e&&m.urlKey;o&&m.urlKey in o?(c=j(f,m.prop),h=p.serializeQueryParam(c,m.urlKey,m.type)):d?(h=e[d],c=p.deserializeQueryParam(h,m.urlKey,m.type)):(h=m.sdef,c=k(m.def)),f._qpDelegate=j(this,"_qp.states.inactive");var v=h!==m.svalue;if(v){if(r.queryParamsOnly&&n!==!1){var b=p._optionsForQueryParam(m),g=j(b,"replace");g?n=!0:g===!1&&(n=!1)}M(f,m.prop,c)}m.svalue=h;var y=m.sdef===h;y||t.push({value:h,visible:!0,key:d||m.urlKey})}n&&r.method("replace"),D(s.qps,function(e){var t=j(e.route,"_qp"),r=e.route.controller;r._qpDelegate=j(t,"states.active")}),a._qpUpdates=null}}},events:null,deactivate:_,activate:_,transitionTo:function(){var e=this.router;return e.transitionTo.apply(e,arguments)},intermediateTransitionTo:function(){var e=this.router;e.intermediateTransitionTo.apply(e,arguments)},refresh:function(){return this.router.router.refresh(this)},replaceWith:function(){var e=this.router;return e.replaceWith.apply(e,arguments)},send:function(){if(this.router||!V.testing)this.router.send.apply(this.router,arguments);else{var e=arguments[0],t=X.call(arguments,1),r=this._actions[e];if(r)return this._actions[e].apply(this,t)}},setup:function(e,t){var r=this.controllerName||this.routeName,n=this.controllerFor(r,!0);if(n||(n=this.generateController(r,e)),this.controller=n,this.setupControllers)this.setupControllers(n,e);else{var i=j(this,"_qp.states");if(t&&(Y(this.router,t.state.handlerInfos),n._qpDelegate=i.changingKeys,n._updateCacheParams(t.params)),n._qpDelegate=i.allowOverrides,t){var a=T(this,t.state);n.setProperties(a)}this.setupController(n,e,t)}this.renderTemplates?this.renderTemplates(e):this.renderTemplate(n,e)},beforeModel:_,afterModel:_,redirect:_,contextDidChange:function(){this.currentModel=this.context},model:function(e,t){var r,n,i,a,s=j(this,"_qp.map");for(var o in e)"queryParams"===o||s&&o in s||((r=o.match(/^(.*)_id$/))&&(n=r[1],a=e[o]),i=!0);if(!n&&i)return W(e);if(!n){if(t.resolveIndex<1)return;var u=t.state.handlerInfos[t.resolveIndex-1].context;return u}return this.findModel(n,a)},deserialize:function(e,t){return this.model(this.paramsFor(this.routeName),t)},findModel:function(){var e=j(this,"store");return e.find.apply(e,arguments)},store:F(function(){{var e=this.container;this.routeName,j(this,"router.namespace")}return{find:function(t,r){var n=e.lookupFactory("model:"+t);if(n)return n.find(r)}}}),serialize:function(e,t){if(!(t.length<1)&&e){var r=t[0],n={};return 1===t.length?r in e?n[r]=j(e,r):/_id$/.test(r)&&(n[r]=j(e,"id")):n=R(e,t),n}},setupController:function(e,t){e&&void 0!==t&&M(e,"model",t)},controllerFor:function(e){var t,r=this.container,n=r.lookup("route:"+e);return n&&n.controllerName&&(e=n.controllerName),t=r.lookup("controller:"+e)},generateController:function(e,t){var r=this.container;return t=t||this.modelFor(e),$(r,e,t)},modelFor:function(e){var t=this.container.lookup("route:"+e),r=this.router?this.router.router.activeTransition:null;if(r){var n=t&&t.routeName||e;if(r.resolvedModels.hasOwnProperty(n))return r.resolvedModels[n]}return t&&t.currentModel},renderTemplate:function(){this.render()},render:function(e,t){var r,n="string"==typeof e&&!!e;"object"!=typeof e||t?r=e:(r=this.routeName,t=e);var i;r?(r=r.replace(/\//g,"."),i=r):(r=this.routeName,i=this.templateName||r);var a,s,o=E(this,n,r,t),u=(j(this.router,"namespace.LOG_VIEW_LOOKUPS"),t&&t.view||n&&r||this.viewName||r),l=this.container.lookupFactory("view:"+u);if(l)a=O(l,o),j(a,"template")||a.set("template",this.container.lookup("template:"+i));else{if(s=this.container.lookup("template:"+i),!s)return;var c=o.into?"view:default":"view:toplevel";l=this.container.lookupFactory(c),a=O(l,o),j(a,"template")||a.set("template",s)}"main"===o.outlet&&(this.lastRenderedTemplate=r),P(this,a,o)},disconnectOutlet:function(e){if(!e||"string"==typeof e){var t=e;e={},e.outlet=t}e.parentView=e.parentView?e.parentView.replace(/\//g,"."):C(this),e.outlet=e.outlet||"main";var r=this.router._lookupActiveView(e.parentView);r&&r.disconnectOutlet(e.outlet)},willDestroy:function(){this.teardownViews()},teardownViews:function(){this.teardownTopLevelView&&this.teardownTopLevelView();var e=this.teardownOutletViews||[];D(e,function(e){e()}),delete this.teardownTopLevelView,delete this.teardownOutletViews,delete this.lastRenderedTemplate}});Z.reopen(G);var J={qps:[],map:{},states:{}};y["default"]=Z}),e("ember-routing/system/router",["ember-metal/core","ember-metal/error","ember-metal/property_get","ember-metal/property_set","ember-metal/properties","ember-metal/computed","ember-metal/merge","ember-metal/run_loop","ember-runtime/system/string","ember-runtime/system/object","ember-runtime/mixins/evented","ember-routing/system/dsl","ember-views/views/view","ember-routing/location/api","ember-views/views/metamorph_view","ember-routing/utils","ember-metal/platform","router","router/transition","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h,m,p,f,d,v,b,g,y){"use strict";function _(){return this}function w(e,t,r){for(var n,i,a=t.state.handlerInfos,s=!1,o=a.length-1;o>=0;--o)if(n=a[o],i=n.handler,s){if(r(i,a[o+1].handler)!==!0)return!1}else e===i&&(s=!0);return!0}function x(e,t){var r=[];t&&r.push(t),e&&(e.message&&r.push(e.message),e.stack&&r.push(e.stack),"string"==typeof e&&r.push(e)),k.Logger.error.apply(this,r)}function C(e,t,r){var n,i=e.router,a=(t.routeName.split(".").pop(),"application"===e.routeName?"":e.routeName+".");return n=a+r,E(i,n)?n:void 0}function E(e,t){var r=e.container;return e.hasRoute(t)&&(r.has("template:"+t)||r.has("route:"+t))}function O(e,t,r){var n=r.shift();if(!e){if(t)return;throw new V("Can't trigger action '"+n+"' because your app hasn't finished transitioning into its first route. To trigger an action on destination routes during a transition, you can call `.send()` on the `Transition` object passed to the `model/beforeModel/afterModel` hooks.")}for(var i,a,s=!1,o=e.length-1;o>=0;o--)if(i=e[o],a=i.handler,a._actions&&a._actions[n]){if(a._actions[n].apply(a,r)!==!0)return;s=!0}if(Z[n])return void Z[n].apply(null,r);if(!s&&!t)throw new V("Nothing handled the action '"+n+"'. If you did handle the action, this error can be caused by returning true from an action handler in a controller, causing the action to bubble.")}function P(e,t,r){for(var n=e.router,i=n.applyIntent(t,r),a=i.handlerInfos,s=i.params,o=0,u=a.length;u>o;++o){var l=a[o];l.isResolved||(l=l.becomeResolved(null,l.context)),s[l.name]=l.params}return i}function A(e){var t=e.container.lookup("controller:application");if(t){var r=e.router.currentHandlerInfos,n=X._routePath(r);"currentPath"in t||M(t,"currentPath"),j(t,"currentPath",n),"currentRouteName"in t||M(t,"currentRouteName"),j(t,"currentRouteName",r[r.length-1].name)}}function N(e){e.then(null,function(e){return e&&e.name?e:void 0},"Ember: Process errors from Router")}function S(e){return"string"==typeof e&&(""===e||"/"===e.charAt(0))}function T(e,t,r,n){var i=e._queryParamsFor(t);for(var a in r)if(r.hasOwnProperty(a)){var s=r[a],o=i.map[a];o&&n(a,s,o)}}var k=e["default"],V=t["default"],I=r.get,j=n.set,M=i.defineProperty,R=a.computed,D=s["default"],L=o["default"],F=(u.fmt,l["default"]),B=c["default"],H=h["default"],z=m["default"],q=p["default"],U=f["default"],W=d.routeArgs,K=d.getActiveTargetName,G=d.stashParamNames,Q=v.create,$=b["default"],Y=[].slice,X=F.extend(B,{location:"hash",rootURL:"/",init:function(){this.router=this.constructor.router||this.constructor.map(_),this._activeViews={},this._setupLocation(),this._qpCache={},this._queuedQPChanges={},I(this,"namespace.LOG_TRANSITIONS_INTERNAL")&&(this.router.log=k.Logger.debug)},url:R(function(){return I(this,"location").getURL()}),startRouting:function(){this.router=this.router||this.constructor.map(_);var e,t=this.router,r=I(this,"location"),n=this.container,i=this,a=I(this,"initialURL");if(!I(r,"cancelRouterSetup")&&(this._setupRouter(t,r),n.register("view:default",U),n.register("view:toplevel",z.extend()),r.onUpdateURL(function(e){i.handleURL(e)}),"undefined"==typeof a&&(a=r.getURL()),e=this.handleURL(a),e&&e.error))throw e.error},didTransition:function(e){A(this),this._cancelLoadingEvent(),this.notifyPropertyChange("url"),L.once(this,this.trigger,"didTransition"),I(this,"namespace").LOG_TRANSITIONS&&k.Logger.log("Transitioned into '"+X._routePath(e)+"'")},handleURL:function(e){return e=e.split(/#(.+)?/)[0],this._doURLTransition("handleURL",e)},_doURLTransition:function(e,t){var r=this.router[e](t||"/");return N(r),r},transitionTo:function(){var e,t=Y.call(arguments);if(S(t[0]))return this._doURLTransition("transitionTo",t[0]);var r=t[t.length-1];e=r&&r.hasOwnProperty("queryParams")?t.pop().queryParams:{};var n=t.shift();return this._doTransition(n,t,e)},intermediateTransitionTo:function(){this.router.intermediateTransitionTo.apply(this.router,arguments),A(this);var e=this.router.currentHandlerInfos;I(this,"namespace").LOG_TRANSITIONS&&k.Logger.log("Intermediate-transitioned into '"+X._routePath(e)+"'")},replaceWith:function(){return this.transitionTo.apply(this,arguments).method("replace")},generate:function(){var e=this.router.generate.apply(this.router,arguments);return this.location.formatURL(e)},isActive:function(){var e=this.router;return e.isActive.apply(e,arguments)},isActiveIntent:function(){var e=this.router;return e.isActive.apply(e,arguments)},send:function(){this.router.trigger.apply(this.router,arguments)},hasRoute:function(e){return this.router.hasRoute(e)},reset:function(){this.router.reset()},_lookupActiveView:function(e){var t=this._activeViews[e];return t&&t[0]},_connectActiveView:function(e,t){function r(){delete this._activeViews[e]}var n=this._activeViews[e];n&&n[0].off("willDestroyElement",this,n[1]),this._activeViews[e]=[t,r],t.one("willDestroyElement",this,r)},_setupLocation:function(){var e=I(this,"location"),t=I(this,"rootURL");if(t&&this.container&&!this.container.has("-location-setting:root-url")&&this.container.register("-location-setting:root-url",t,{instantiate:!1}),"string"==typeof e&&this.container){var r=this.container.lookup("location:"+e);if("undefined"!=typeof r)e=j(this,"location",r);else{var n={implementation:e};e=j(this,"location",q.create(n))}}null!==e&&"object"==typeof e&&(t&&"string"==typeof t&&(e.rootURL=t),"function"==typeof e.initState&&e.initState())},_getHandlerFunction:function(){var e=Q(null),t=this.container,r=t.lookupFactory("route:basic"),n=this;return function(i){var a="route:"+i,s=t.lookup(a);return e[i]?s:(e[i]=!0,s||(t.register(a,r.extend()),s=t.lookup(a),I(n,"namespace.LOG_ACTIVE_GENERATION")),s.routeName=i,s)}},_setupRouter:function(e,t){var r,n=this;e.getHandler=this._getHandlerFunction();var i=function(){t.setURL(r)};if(e.updateURL=function(e){r=e,L.once(i)},t.replaceURL){var a=function(){t.replaceURL(r)};e.replaceURL=function(e){r=e,L.once(a)}}e.didTransition=function(e){n.didTransition(e)}},_serializeQueryParams:function(e,t){var r={};T(this,e,t,function(e,n,i){var a=i.urlKey;r[a]||(r[a]=[]),r[a].push({qp:i,value:n}),delete t[e]});for(var n in r){var i=r[n],a=i[0].qp;t[a.urlKey]=a.route.serializeQueryParam(i[0].value,a.urlKey,a.type)}},_deserializeQueryParams:function(e,t){T(this,e,t,function(e,r,n){delete t[e],t[n.prop]=n.route.deserializeQueryParam(r,n.urlKey,n.type)})},_pruneDefaultQueryParamValues:function(e,t){var r=this._queryParamsFor(e);for(var n in t){var i=r.map[n];i&&i.sdef===t[n]&&delete t[n]}},_doTransition:function(e,t,r){var n=e||K(this.router),i={};D(i,r),this._prepareQueryParams(n,t,i);var a=W(n,t,i),s=this.router.transitionTo.apply(this.router,a);return N(s),s},_prepareQueryParams:function(e,t,r){this._hydrateUnsuppliedQueryParams(e,t,r),this._serializeQueryParams(e,r),this._pruneDefaultQueryParamValues(e,r)},_queryParamsFor:function(e){if(this._qpCache[e])return this._qpCache[e];var t={},r=[];this._qpCache[e]={map:t,qps:r};for(var n=this.router,i=n.recognizer.handlersFor(e),a=0,s=i.length;s>a;++a){var o=i[a],u=n.getHandler(o.handler),l=I(u,"_qp");l&&(D(t,l.map),r.push.apply(r,l.qps))}return{qps:r,map:t}},_hydrateUnsuppliedQueryParams:function(e,t,r){var n=P(this,e,t),i=n.handlerInfos,a=this._bucketCache;G(this,i);for(var s=0,o=i.length;o>s;++s)for(var u=i[s].handler,l=I(u,"_qp"),c=0,h=l.qps.length;h>c;++c){var m=l.qps[c],p=m.prop in r&&m.prop||m.fprop in r&&m.fprop;if(p)p!==m.fprop&&(r[m.fprop]=r[p],delete r[p]);else{var f=m.cProto,d=I(f,"_cacheMeta"),v=f._calculateCacheKey(m.ctrl,d[m.prop].parts,n.params);r[m.fprop]=a.lookup(v,m.prop,m.def)}}},_scheduleLoadingEvent:function(e,t){this._cancelLoadingEvent(),this._loadingStateTimer=L.scheduleOnce("routerTransitions",this,"_fireLoadingEvent",e,t)},_fireLoadingEvent:function(e,t){this.router.activeTransition&&e.trigger(!0,"loading",e,t)},_cancelLoadingEvent:function(){this._loadingStateTimer&&L.cancel(this._loadingStateTimer),this._loadingStateTimer=null}}),Z={willResolveModel:function(e,t){t.router._scheduleLoadingEvent(e,t)},error:function(e,t,r){var n=r.router,i=w(r,t,function(t,r){var i=C(t,r,"error");return i?void n.intermediateTransitionTo(i,e):!0});return i&&E(r.router,"application_error")?void n.intermediateTransitionTo("application_error",e):void x(e,"Error while processing route: "+t.targetName)},loading:function(e,t){var r=t.router,n=w(t,e,function(t,n){var i=C(t,n,"loading");return i?void r.intermediateTransitionTo(i):e.pivotHandler!==t?!0:void 0});return n&&E(t.router,"application_loading")?void r.intermediateTransitionTo("application_loading"):void 0}};X.reopenClass({router:null,map:function(e){var t=this.router;t||(t=new $,t._triggerWillChangeContext=_,t._triggerWillLeave=_,t.callbacks=[],t.triggerEvent=O,this.reopenClass({router:t}));var r=H.map(function(){this.resource("application",{path:"/"},function(){for(var r=0;rr;++r)if(e[r]!==t[r])return!1;return!0}for(var r,n,i,a=[],s=1,o=e.length;o>s;s++){for(r=e[s].name,n=r.split("."),i=Y.call(a);i.length&&!t(i,n);)i.shift();a.push.apply(a,n.slice(i.length))}return a.join(".")}}),y["default"]=X}),e("ember-routing/utils",["ember-metal/utils","exports"],function(e,t){"use strict";function r(e,t,r){var n=[];return"string"===a(e)&&n.push(""+e),n.push.apply(n,t),n.push({queryParams:r}),n}function n(e){var t=e.activeTransition?e.activeTransition.state.handlerInfos:e.state.handlerInfos;return t[t.length-1].name}function i(e,t){if(!t._namesStashed){for(var r=t[t.length-1].name,n=e.router.recognizer.handlersFor(r),i=null,a=0,s=t.length;s>a;++a){var o=t[a],u=n[a].names;u.length&&(i=o),o._names=u;var l=o.handler;l._stashNames(o,i)}t._namesStashed=!0}}var a=e.typeOf;t.routeArgs=r,t.getActiveTargetName=n,t.stashParamNames=i}),e("ember-runtime",["ember-metal","ember-runtime/core","ember-runtime/compare","ember-runtime/copy","ember-runtime/inject","ember-runtime/system/namespace","ember-runtime/system/object","ember-runtime/system/tracked_array","ember-runtime/system/subarray","ember-runtime/system/container","ember-runtime/system/array_proxy","ember-runtime/system/object_proxy","ember-runtime/system/core_object","ember-runtime/system/each_proxy","ember-runtime/system/native_array","ember-runtime/system/set","ember-runtime/system/string","ember-runtime/system/deferred","ember-runtime/system/lazy_load","ember-runtime/mixins/array","ember-runtime/mixins/comparable","ember-runtime/mixins/copyable","ember-runtime/mixins/enumerable","ember-runtime/mixins/freezable","ember-runtime/mixins/-proxy","ember-runtime/mixins/observable","ember-runtime/mixins/action_handler","ember-runtime/mixins/deferred","ember-runtime/mixins/mutable_enumerable","ember-runtime/mixins/mutable_array","ember-runtime/mixins/target_action_support","ember-runtime/mixins/evented","ember-runtime/mixins/promise_proxy","ember-runtime/mixins/sortable","ember-runtime/computed/array_computed","ember-runtime/computed/reduce_computed","ember-runtime/computed/reduce_computed_macros","ember-runtime/controllers/array_controller","ember-runtime/controllers/object_controller","ember-runtime/controllers/controller","ember-runtime/mixins/controller","ember-runtime/system/service","ember-runtime/ext/rsvp","ember-runtime/ext/string","ember-runtime/ext/function","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h,m,p,f,d,v,b,g,y,_,w,x,C,E,O,P,A,N,S,T,k,V,I,j,M,R,D,L,F,B,H,z,q,U,W){"use strict";var K=e["default"],G=t.isEqual,Q=r["default"],$=n["default"],Y=i["default"],X=a["default"],Z=s["default"],J=o["default"],et=u["default"],tt=l["default"],rt=c["default"],nt=h["default"],it=m["default"],at=p.EachArray,st=p.EachProxy,ot=f["default"],ut=d["default"],lt=v["default"],ct=b["default"],ht=g.onLoad,mt=g.runLoadHooks,pt=y["default"],ft=_["default"],dt=w["default"],vt=x["default"],bt=C.Freezable,gt=C.FROZEN_ERROR,yt=E["default"],_t=O["default"],wt=P["default"],xt=A["default"],Ct=N["default"],Et=S["default"],Ot=T["default"],Pt=k["default"],At=V["default"],Nt=I["default"],St=j.arrayComputed,Tt=j.ArrayComputedProperty,kt=M.reduceComputed,Vt=M.ReduceComputedProperty,It=R.sum,jt=R.min,Mt=R.max,Rt=R.map,Dt=R.sort,Lt=R.setDiff,Ft=R.mapBy,Bt=R.mapProperty,Ht=R.filter,zt=R.filterBy,qt=R.filterProperty,Ut=R.uniq,Wt=R.union,Kt=R.intersect,Gt=D["default"],Qt=L["default"],$t=F["default"],Yt=B["default"],Xt=H["default"],Zt=z["default"];K.compare=Q,K.copy=$,K.isEqual=G,K.inject=Y,K.Array=pt,K.Comparable=ft,K.Copyable=dt,K.SortableMixin=Nt,K.Freezable=bt,K.FROZEN_ERROR=gt,K.DeferredMixin=xt,K.MutableEnumerable=Ct,K.MutableArray=Et,K.TargetActionSupport=Ot,K.Evented=Pt,K.PromiseProxyMixin=At,K.Observable=_t,K.arrayComputed=St,K.ArrayComputedProperty=Tt,K.reduceComputed=kt,K.ReduceComputedProperty=Vt;var Jt=K.computed;Jt.sum=It,Jt.min=jt,Jt.max=Mt,Jt.map=Rt,Jt.sort=Dt,Jt.setDiff=Lt,Jt.mapBy=Ft,Jt.mapProperty=Bt,Jt.filter=Ht,Jt.filterBy=zt,Jt.filterProperty=qt,Jt.uniq=Ut,Jt.union=Wt,Jt.intersect=Kt,K.String=lt,K.Object=Z,K.TrackedArray=J,K.SubArray=et,K.Container=tt,K.Namespace=X,K.Enumerable=vt,K.ArrayProxy=rt,K.ObjectProxy=nt,K.ActionHandler=wt,K.CoreObject=it,K.EachArray=at,K.EachProxy=st,K.NativeArray=ot,K.Set=ut,K.Deferred=ct,K.onLoad=ht,K.runLoadHooks=mt,K.ArrayController=Gt,K.ObjectController=Qt,K.Controller=$t,K.ControllerMixin=Yt,K.Service=Xt,K._ProxyMixin=yt,K.RSVP=Zt,W["default"]=K}),e("ember-runtime/compare",["ember-metal/utils","ember-runtime/mixins/comparable","exports"],function(e,t,r){"use strict";function n(e,t){var r=e-t;return(r>0)-(0>r)}var i=e.typeOf,a=t["default"],s={undefined:0,"null":1,"boolean":2,number:3,string:4,array:5,object:6,instance:7,"function":8,"class":9,date:10};r["default"]=function o(e,t){if(e===t)return 0;var r=i(e),u=i(t);if(a){if("instance"===r&&a.detect(e)&&e.constructor.compare)return e.constructor.compare(e,t);if("instance"===u&&a.detect(t)&&t.constructor.compare)return-1*t.constructor.compare(t,e)}var l=n(s[r],s[u]);if(0!==l)return l;switch(r){case"boolean":case"number":return n(e,t);case"string":return n(e.localeCompare(t),0);case"array":for(var c=e.length,h=t.length,m=Math.min(c,h),p=0;m>p;p++){var f=o(e[p],t[p]);if(0!==f)return f}return n(c,h);case"instance":return a&&a.detect(e)?e.compare(e,t):0;case"date":return n(e.getTime(),t.getTime());default:return 0}}}),e("ember-runtime/computed/array_computed",["ember-metal/core","ember-runtime/computed/reduce_computed","ember-metal/enumerable_utils","ember-metal/platform","ember-metal/observer","ember-metal/error","exports"],function(e,t,r,n,i,a,s){"use strict";function o(){var e=this;return c.apply(this,arguments),this.func=function(t){return function(r){return e._hasInstanceMeta(this,r)||h(e._dependentKeys,function(t){p(this,t,function(){e.recomputeOnce.call(this,r)})},this),t.apply(this,arguments)}}(this.func),this}function u(e){var t;if(arguments.length>1&&(t=d.call(arguments,0,-1),e=d.call(arguments,-1)[0]),"object"!=typeof e)throw new f("Array Computed Property declared without an options hash");var r=new o(e);return t&&r.property.apply(r,t),r}var l=e["default"],c=t.ReduceComputedProperty,h=r.forEach,m=n.create,p=i.addObserver,f=a["default"],d=[].slice;o.prototype=m(c.prototype),o.prototype.initialValue=function(){return l.A()},o.prototype.resetValue=function(e){return e.clear(),e},o.prototype.didChange=function(){},s.arrayComputed=u,s.ArrayComputedProperty=o}),e("ember-runtime/computed/reduce_computed",["ember-metal/core","ember-metal/property_get","ember-metal/utils","ember-metal/error","ember-metal/property_events","ember-metal/expand_properties","ember-metal/observer","ember-metal/computed","ember-metal/platform","ember-metal/enumerable_utils","ember-runtime/system/tracked_array","ember-runtime/mixins/array","ember-metal/run_loop","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h,m,p){"use strict";function f(e,t){return"@this"===t?e:A(e,t)}function d(e,t,r){this.callbacks=e,this.cp=t,this.instanceMeta=r,this.dependentKeysByGuid={},this.trackedArraysByGuid={},this.suspended=!1,this.changedItems={},this.changedItemCount=0}function v(e,t,r){this.dependentArray=e,this.index=t,this.item=e.objectAt(t),this.trackedArray=r,this.beforeObserver=null,this.observer=null,this.destroyed=!1}function b(e,t,r){return 0>e?Math.max(0,t+e):t>e?e:Math.min(t-r,e)}function g(e,t,r){return Math.min(r,t-e)}function y(e,t,r,n,i,a,s){this.arrayChanged=e,this.index=r,this.item=t,this.propertyName=n,this.property=i,this.changedCount=a,s&&(this.previousValues=s)}function _(e,t,r,n,i){H(e,function(a,s){i.setValue(t.addedItem.call(this,i.getValue(),a,new y(e,a,s,n,r,e.length),i.sugarMeta))},this),t.flushedChanges.call(this,i.getValue(),i.sugarMeta)}function w(e,t){var r=e._hasInstanceMeta(this,t),n=e._instanceMeta(this,t);r&&n.setValue(e.resetValue(n.getValue())),e.options.initialize&&e.options.initialize.call(this,n.getValue(),{property:e,propertyName:t},n.sugarMeta)}function x(e,t){if(X.test(t))return!1;var r=f(e,t);return q.detect(r)}function C(e,t,r){this.context=e,this.propertyName=t,this.cache=S(e).cache,this.dependentArrays={},this.sugarMeta={},this.initialValue=r}function E(e){var t=this;this.options=e,this._dependentKeys=null,this._cacheable=!0,this._itemPropertyKeys={},this._previousItemPropertyKeys={},this.readOnly(),this.recomputeOnce=function(e){U.once(this,r,e)};var r=function(e){var r=t._instanceMeta(this,e),n=t._callbacks();w.call(this,t,e),r.dependentArraysObserver.suspendArrayObservers(function(){H(t._dependentKeys,function(e){if(x(this,e)){var n=f(this,e),i=r.dependentArrays[e];n===i?t._previousItemPropertyKeys[e]&&(delete t._previousItemPropertyKeys[e],r.dependentArraysObserver.setupPropertyObservers(e,t._itemPropertyKeys[e])):(r.dependentArrays[e]=n,i&&r.dependentArraysObserver.teardownObservers(i,e),n&&r.dependentArraysObserver.setupObservers(n,e))}},this)},this),H(t._dependentKeys,function(i){if(x(this,i)){var a=f(this,i);a&&_.call(this,a,n,t,e,r)}},this)};this.func=function(e){return r.call(this,e),t._instanceMeta(this,e).getValue()}}function O(e){return e}function P(e){var t;if(arguments.length>1&&(t=Q.call(arguments,0,-1),e=Q.call(arguments,-1)[0]),"object"!=typeof e)throw new T("Reduce Computed Property declared without an options hash");if(!("initialValue"in e))throw new T("Reduce Computed Property declared without an initial value");var r=new E(e);return t&&r.property.apply(r,t),r}var A=(e["default"],t.get),N=r.guidFor,S=r.meta,T=n["default"],k=i.propertyWillChange,V=i.propertyDidChange,I=a["default"],j=s.addObserver,M=s.removeObserver,R=s.addBeforeObserver,D=s.removeBeforeObserver,L=o.ComputedProperty,F=o.cacheFor,B=u.create,H=l.forEach,z=c["default"],q=h["default"],U=m["default"],W=(r.isArray,F.set),K=F.get,G=F.remove,Q=[].slice,$=/^(.*)\.@each\.(.*)/,Y=/(.*\.@each){2,}/,X=/\.\[\]$/;d.prototype={setValue:function(e){this.instanceMeta.setValue(e,!0)},getValue:function(){return this.instanceMeta.getValue()},setupObservers:function(e,t){this.dependentKeysByGuid[N(e)]=t,e.addArrayObserver(this,{willChange:"dependentArrayWillChange",didChange:"dependentArrayDidChange"}),this.cp._itemPropertyKeys[t]&&this.setupPropertyObservers(t,this.cp._itemPropertyKeys[t])},teardownObservers:function(e,t){var r=this.cp._itemPropertyKeys[t]||[];delete this.dependentKeysByGuid[N(e)],this.teardownPropertyObservers(t,r),e.removeArrayObserver(this,{willChange:"dependentArrayWillChange",didChange:"dependentArrayDidChange"})},suspendArrayObservers:function(e,t){var r=this.suspended;this.suspended=!0,e.call(t),this.suspended=r},setupPropertyObservers:function(e,t){var r=f(this.instanceMeta.context,e),n=f(r,"length"),i=new Array(n);this.resetTransformations(e,i),H(r,function(n,a){var s=this.createPropertyObserverContext(r,a,this.trackedArraysByGuid[e]);i[a]=s,H(t,function(e){R(n,e,this,s.beforeObserver),j(n,e,this,s.observer)},this)},this)},teardownPropertyObservers:function(e,t){var r,n,i,a=this,s=this.trackedArraysByGuid[e];s&&s.apply(function(e,s,o){o!==z.DELETE&&H(e,function(e){e.destroyed=!0,r=e.beforeObserver,n=e.observer,i=e.item,H(t,function(e){D(i,e,a,r),M(i,e,a,n)})})})},createPropertyObserverContext:function(e,t,r){var n=new v(e,t,r);return this.createPropertyObserver(n),n},createPropertyObserver:function(e){var t=this;e.beforeObserver=function(r,n){return t.itemPropertyWillChange(r,n,e.dependentArray,e)},e.observer=function(r,n){return t.itemPropertyDidChange(r,n,e.dependentArray,e)}},resetTransformations:function(e,t){this.trackedArraysByGuid[e]=new z(t)},trackAdd:function(e,t,r){var n=this.trackedArraysByGuid[e];n&&n.addItems(t,r)},trackRemove:function(e,t,r){var n=this.trackedArraysByGuid[e];return n?n.removeItems(t,r):[]},updateIndexes:function(e,t){var r=f(t,"length");e.apply(function(e,t,n,i){n!==z.DELETE&&(0!==i||n!==z.RETAIN||e.length!==r||0!==t)&&H(e,function(e,r){e.index=r+t})})},dependentArrayWillChange:function(e,t,r){function n(e){u[o].destroyed=!0,D(a,e,this,u[o].beforeObserver),M(a,e,this,u[o].observer)}if(!this.suspended){var i,a,s,o,u,l=this.callbacks.removedItem,c=N(e),h=this.dependentKeysByGuid[c],m=this.cp._itemPropertyKeys[h]||[],p=f(e,"length"),d=b(t,p,0),v=g(d,p,r);for(u=this.trackRemove(h,d,v),o=v-1;o>=0&&(s=d+o,!(s>=p));--o)a=e.objectAt(s),H(m,n,this),i=new y(e,a,s,this.instanceMeta.propertyName,this.cp,v),this.setValue(l.call(this.instanceMeta.context,this.getValue(),a,i,this.instanceMeta.sugarMeta));this.callbacks.flushedChanges.call(this.instanceMeta.context,this.getValue(),this.instanceMeta.sugarMeta)}},dependentArrayDidChange:function(e,t,r,n){if(!this.suspended){var i,a,s=this.callbacks.addedItem,o=N(e),u=this.dependentKeysByGuid[o],l=new Array(n),c=this.cp._itemPropertyKeys[u],h=f(e,"length"),m=b(t,h,n),p=m+n;H(e.slice(m,p),function(t,r){c&&(a=this.createPropertyObserverContext(e,m+r,this.trackedArraysByGuid[u]),l[r]=a,H(c,function(e){R(t,e,this,a.beforeObserver),j(t,e,this,a.observer) +},this)),i=new y(e,t,m+r,this.instanceMeta.propertyName,this.cp,n),this.setValue(s.call(this.instanceMeta.context,this.getValue(),t,i,this.instanceMeta.sugarMeta))},this),this.callbacks.flushedChanges.call(this.instanceMeta.context,this.getValue(),this.instanceMeta.sugarMeta),this.trackAdd(u,m,l)}},itemPropertyWillChange:function(e,t,r,n){var i=N(e);this.changedItems[i]||(this.changedItems[i]={array:r,observerContext:n,obj:e,previousValues:{}}),++this.changedItemCount,this.changedItems[i].previousValues[t]=f(e,t)},itemPropertyDidChange:function(){0===--this.changedItemCount&&this.flushChanges()},flushChanges:function(){var e,t,r,n=this.changedItems;for(e in n)t=n[e],t.observerContext.destroyed||(this.updateIndexes(t.observerContext.trackedArray,t.observerContext.dependentArray),r=new y(t.array,t.obj,t.observerContext.index,this.instanceMeta.propertyName,this.cp,n.length,t.previousValues),this.setValue(this.callbacks.removedItem.call(this.instanceMeta.context,this.getValue(),t.obj,r,this.instanceMeta.sugarMeta)),this.setValue(this.callbacks.addedItem.call(this.instanceMeta.context,this.getValue(),t.obj,r,this.instanceMeta.sugarMeta)));this.changedItems={},this.callbacks.flushedChanges.call(this.instanceMeta.context,this.getValue(),this.instanceMeta.sugarMeta)}},C.prototype={getValue:function(){var e=K(this.cache,this.propertyName);return void 0!==e?e:this.initialValue},setValue:function(e,t){e!==K(this.cache,this.propertyName)&&(t&&k(this.context,this.propertyName),void 0===e?G(this.cache,this.propertyName):W(this.cache,this.propertyName,e),t&&V(this.context,this.propertyName))}},p.ReduceComputedProperty=E,E.prototype=B(L.prototype),E.prototype._callbacks=function(){if(!this.callbacks){var e=this.options;this.callbacks={removedItem:e.removedItem||O,addedItem:e.addedItem||O,flushedChanges:e.flushedChanges||O}}return this.callbacks},E.prototype._hasInstanceMeta=function(e,t){return!!S(e).cacheMeta[t]},E.prototype._instanceMeta=function(e,t){var r=S(e).cacheMeta,n=r[t];return n||(n=r[t]=new C(e,t,this.initialValue()),n.dependentArraysObserver=new d(this._callbacks(),this,n,e,t,n.sugarMeta)),n},E.prototype.initialValue=function(){return"function"==typeof this.options.initialValue?this.options.initialValue():this.options.initialValue},E.prototype.resetValue=function(){return this.initialValue()},E.prototype.itemPropertyKey=function(e,t){this._itemPropertyKeys[e]=this._itemPropertyKeys[e]||[],this._itemPropertyKeys[e].push(t)},E.prototype.clearItemPropertyKeys=function(e){this._itemPropertyKeys[e]&&(this._previousItemPropertyKeys[e]=this._itemPropertyKeys[e],this._itemPropertyKeys[e]=[])},E.prototype.property=function(){var e,t,r=this,n=Q.call(arguments),i={};H(n,function(n){if(Y.test(n))throw new T("Nested @each properties not supported: "+n);if(e=$.exec(n)){t=e[1];var a=e[2],s=function(e){r.itemPropertyKey(t,e)};I(a,s),i[N(t)]=t}else i[N(n)]=n});var a=[];for(var s in i)a.push(i[s]);return L.prototype.property.apply(this,a)},p.reduceComputed=P}),e("ember-runtime/computed/reduce_computed_macros",["ember-metal/core","ember-metal/property_get","ember-metal/utils","ember-metal/error","ember-metal/enumerable_utils","ember-metal/run_loop","ember-metal/observer","ember-runtime/computed/array_computed","ember-runtime/computed/reduce_computed","ember-runtime/system/subarray","ember-metal/keys","ember-runtime/compare","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h,m){"use strict";function p(e){return M(e,{initialValue:0,addedItem:function(e,t){return e+t},removedItem:function(e,t){return e-t}})}function f(e){return M(e,{initialValue:-1/0,addedItem:function(e,t){return Math.max(e,t)},removedItem:function(e,t){return e>t?e:void 0}})}function d(e){return M(e,{initialValue:1/0,addedItem:function(e,t){return Math.min(e,t)},removedItem:function(e,t){return t>e?e:void 0}})}function v(e,t){var r={addedItem:function(e,r,n){var i=t.call(this,r,n.index);return e.insertAt(n.index,i),e},removedItem:function(e,t,r){return e.removeAt(r.index,1),e}};return j(e,r)}function b(e,t){var r=function(e){return N(e,t)};return v(e+".@each."+t,r)}function g(e,t){var r={initialize:function(e,t,r){r.filteredArrayIndexes=new R},addedItem:function(e,r,n,i){var a=!!t.call(this,r,n.index,n.arrayChanged),s=i.filteredArrayIndexes.addItem(n.index,a);return a&&e.insertAt(s,r),e},removedItem:function(e,t,r,n){var i=n.filteredArrayIndexes.removeItem(r.index);return i>-1&&e.removeAt(i),e}};return j(e,r)}function y(e,t,r){var n;return n=2===arguments.length?function(e){return N(e,t)}:function(e){return N(e,t)===r},g(e+".@each."+t,n)}function _(){var e=F.call(arguments);return e.push({initialize:function(e,t,r){r.itemCounts={}},addedItem:function(e,t,r,n){var i=S(t);return n.itemCounts[i]?++n.itemCounts[i]:(n.itemCounts[i]=1,e.pushObject(t)),e},removedItem:function(e,t,r,n){var i=S(t),a=n.itemCounts;return 0===--a[i]&&e.removeObject(t),e}}),j.apply(null,e)}function w(){var e=F.call(arguments);return e.push({initialize:function(e,t,r){r.itemCounts={}},addedItem:function(e,t,r,n){var i=S(t),a=S(r.arrayChanged),s=r.property._dependentKeys.length,o=n.itemCounts;return o[i]||(o[i]={}),void 0===o[i][a]&&(o[i][a]=0),1===++o[i][a]&&s===D(o[i]).length&&e.addObject(t),e},removedItem:function(e,t,r,n){var i,a=S(t),s=S(r.arrayChanged),o=n.itemCounts;return void 0===o[a][s]&&(o[a][s]=0),0===--o[a][s]&&(delete o[a][s],i=D(o[a]).length,0===i&&delete o[a],e.removeObject(t)),e}}),j.apply(null,e)}function x(e,t){if(2!==arguments.length)throw new T("setDiff requires exactly two dependent arrays.");return j(e,t,{addedItem:function(r,n,i){var a=N(this,e),s=N(this,t);return i.arrayChanged===a?s.contains(n)||r.addObject(n):r.removeObject(n),r},removedItem:function(r,n,i){var a=N(this,e),s=N(this,t);return i.arrayChanged===s?a.contains(n)&&r.addObject(n):r.removeObject(n),r}})}function C(e,t,r,n){var i,a,s,o,u;return arguments.length<4&&(n=N(e,"length")),arguments.length<3&&(r=0),r===n?r:(i=r+Math.floor((n-r)/2),a=e.objectAt(i),o=S(a),u=S(t),o===u?i:(s=this.order(a,t),0===s&&(s=u>o?-1:1),0>s?this.binarySearch(e,t,i+1,n):s>0?this.binarySearch(e,t,r,i):i))}function E(e,t){return"function"==typeof t?O(e,t):P(e,t)}function O(e,t){return j(e,{initialize:function(e,r,n){n.order=t,n.binarySearch=C,n.waitingInsertions=[],n.insertWaiting=function(){var t,r,i=n.waitingInsertions;n.waitingInsertions=[];for(var a=0;a=0&&r>e&&(t=this.lookupItemController(i))?this.controllerAt(e,i,t):i},arrangedContentDidChange:function(){this._super(),this._resetSubControllers()},arrayContentDidChange:function(e,t,r){var n=this._subControllers;if(n.length){var i=n.slice(e,e+t);h(i,function(e){e&&e.destroy()}),m(n,e,t,new Array(r))}this._super(e,t,r)},init:function(){this._super(),this._subControllers=[]},model:v(function(){return l.A()}),_isVirtual:!1,controllerAt:function(e,t,r){var n,i,a,s=c(this,"container"),o=this._subControllers;if(o.length>e&&(i=o[e]))return i;if(a=this._isVirtual?c(this,"parentController"):this,n="controller:"+r,!s.has(n))throw new b('Could not resolve itemController: "'+r+'"');return i=s.lookupFactory(n).create({target:a,parentController:a,model:t}),o[e]=i,i},_subControllers:null,_resetSubControllers:function(){var e,t=this._subControllers;if(t.length){for(var r=0,n=t.length;n>r;r++)e=t[r],e&&e.destroy();t.length=0}},willDestroy:function(){this._resetSubControllers(),this._super()}})}),e("ember-runtime/controllers/controller",["ember-metal/core","ember-runtime/system/object","ember-runtime/mixins/controller","ember-runtime/inject","exports"],function(e,t,r,n,i){"use strict";function a(){}var s=(e["default"],t["default"]),o=r["default"],u=n.createInjectionHelper,l=s.extend(o);u("controller",a),i["default"]=l}),e("ember-runtime/controllers/object_controller",["ember-runtime/mixins/controller","ember-runtime/system/object_proxy","exports"],function(e,t,r){"use strict";var n=e["default"],i=t["default"];r["default"]=i.extend(n)}),e("ember-runtime/copy",["ember-metal/enumerable_utils","ember-metal/utils","ember-runtime/system/object","ember-runtime/mixins/copyable","exports"],function(e,t,r,n,i){"use strict";function a(e,t,r,n){var i,l,c;if("object"!=typeof e||null===e)return e;if(t&&(l=s(r,e))>=0)return n[l];if("array"===o(e)){if(i=e.slice(),t)for(l=i.length;--l>=0;)i[l]=a(i[l],t,r,n)}else if(u&&u.detect(e))i=e.copy(t,r,n);else if(e instanceof Date)i=new Date(e.getTime());else{i={};for(c in e)Object.prototype.hasOwnProperty.call(e,c)&&"__"!==c.substring(0,2)&&(i[c]=t?a(e[c],t,r,n):e[c])}return t&&(r.push(e),n.push(i)),i}var s=e.indexOf,o=t.typeOf,u=(r["default"],n["default"]);i["default"]=function(e,t){return"object"!=typeof e||null===e?e:u&&u.detect(e)?e.copy(t):a(e,t,t?[]:null,t?[]:null)}}),e("ember-runtime/core",["exports"],function(e){"use strict";var t=function(e,t){return e&&"function"==typeof e.isEqual?e.isEqual(t):e instanceof Date&&t instanceof Date?e.getTime()===t.getTime():e===t};e.isEqual=t}),e("ember-runtime/ext/function",["ember-metal/core","ember-metal/expand_properties","ember-metal/computed","ember-metal/mixin"],function(e,t,r,n){"use strict";var i=e["default"],a=t["default"],s=r.computed,o=n.observer,u=Array.prototype.slice,l=Function.prototype;(i.EXTEND_PROTOTYPES===!0||i.EXTEND_PROTOTYPES.Function)&&(l.property=function(){var e=s(this);return e.property.apply(e,arguments)},l.observes=function(){for(var e=arguments.length,t=new Array(e),r=0;e>r;r++)t[r]=arguments[r];return o.apply(this,t.concat(this))},l.observesImmediately=function(){return this.observes.apply(this,arguments)},l.observesBefore=function(){for(var e=[],t=function(t){e.push(t)},r=0,n=arguments.length;n>r;++r)a(arguments[r],t);return this.__ember_observesBefore__=e,this},l.on=function(){var e=u.call(arguments);return this.__ember_listens__=e,this})}),e("ember-runtime/ext/rsvp",["ember-metal/core","ember-metal/logger","ember-metal/run_loop","rsvp","exports"],function(e,r,n,i,a){"use strict";var s,o=e["default"],u=r["default"],l=n["default"],c=i,h="ember-testing/test",m=function(){o.Test&&o.Test.adapter&&o.Test.adapter.asyncStart()},p=function(){o.Test&&o.Test.adapter&&o.Test.adapter.asyncEnd()};c.configure("async",function(e,t){var r=!l.currentRunLoop;o.testing&&r&&m(),l.backburner.schedule("actions",function(){o.testing&&r&&p(),e(t)})}),c.Promise.prototype.fail=function(e,t){return this["catch"](e,t)},c.onerrorDefault=function(e){var r;if(e&&e.errorThrown?(r=e.errorThrown,"string"==typeof r&&(r=new Error(r)),r.__reason_with_error_thrown__=e):r=e,r&&"TransitionAborted"!==r.name)if(o.testing){if(!s&&o.__loader.registry[h]&&(s=t(h)["default"]),!s||!s.adapter)throw r;s.adapter.exception(r),u.error(r.stack)}else o.onerror?o.onerror(r):u.error(r.stack)},c.on("error",c.onerrorDefault),a["default"]=c}),e("ember-runtime/ext/string",["ember-metal/core","ember-runtime/system/string"],function(e,t){"use strict";var r=e["default"],n=t.fmt,i=t.w,a=t.loc,s=t.camelize,o=t.decamelize,u=t.dasherize,l=t.underscore,c=t.capitalize,h=t.classify,m=String.prototype;(r.EXTEND_PROTOTYPES===!0||r.EXTEND_PROTOTYPES.String)&&(m.fmt=function(){return n(this,arguments)},m.w=function(){return i(this)},m.loc=function(){return a(this,arguments)},m.camelize=function(){return s(this)},m.decamelize=function(){return o(this)},m.dasherize=function(){return u(this)},m.underscore=function(){return l(this)},m.classify=function(){return h(this)},m.capitalize=function(){return c(this)})}),e("ember-runtime/inject",["ember-metal/core","ember-metal/enumerable_utils","ember-metal/utils","ember-metal/injected_property","ember-metal/keys","exports"],function(e,t,r,n,i,a){"use strict";function s(){}function o(e,t){m[e]=t,s[e]=function(t){return new h(e,t)}}function u(e){var t,r,n,i,a,s=e.proto(),o=c(s).descs,u=[];for(t in o)r=o[t],r instanceof h&&-1===l(u,r.type)&&u.push(r.type);if(u.length)for(i=0,a=u.length;a>i;i++)n=m[u[i]],"function"==typeof n&&n(e);return!0}var l=(e["default"],t.indexOf),c=r.meta,h=n["default"],m=(i["default"],{});a.createInjectionHelper=o,a.validatePropertyInjections=u,a["default"]=s}),e("ember-runtime/mixins/-proxy",["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/observer","ember-metal/property_events","ember-metal/computed","ember-metal/properties","ember-metal/mixin","ember-runtime/system/string","exports"],function(e,t,r,n,i,a,s,o,u,l,c){"use strict";function h(e,t){var r=t.slice(8);r in this||_(this,r)}function m(e,t){var r=t.slice(8);r in this||w(this,r)}{var p=(e["default"],t.get),f=r.set,d=n.meta,v=i.addObserver,b=i.removeObserver,g=i.addBeforeObserver,y=i.removeBeforeObserver,_=a.propertyWillChange,w=a.propertyDidChange,x=s.computed,C=o.defineProperty,E=u.Mixin,O=u.observer;l.fmt}c["default"]=E.create({content:null,_contentDidChange:O("content",function(){}),isTruthy:x.bool("content"),_debugContainerKey:null,willWatchProperty:function(e){var t="content."+e;g(this,t,null,h),v(this,t,null,m)},didUnwatchProperty:function(e){var t="content."+e;y(this,t,null,h),b(this,t,null,m)},unknownProperty:function(e){var t=p(this,"content");return t?p(t,e):void 0},setUnknownProperty:function(e,t){var r=d(this);if(r.proto===this)return C(this,e,null,t),t;var n=p(this,"content");return f(n,e,t)}})}),e("ember-runtime/mixins/action_handler",["ember-metal/merge","ember-metal/mixin","ember-metal/property_get","ember-metal/utils","exports"],function(e,t,r,n,i){"use strict";var a=e["default"],s=t.Mixin,o=r.get,u=n.typeOf,l=s.create({mergedProperties:["_actions"],willMergeMixin:function(e){var t;e._actions||("object"===u(e.actions)?t="actions":"object"===u(e.events)&&(t="events"),t&&(e._actions=a(e._actions||{},e[t])),delete e[t])},send:function(e){var t,r=[].slice.call(arguments,1);this._actions&&this._actions[e]&&this._actions[e].apply(this,r)!==!0||(t=o(this,"target"))&&t.send.apply(t,arguments)}});i["default"]=l}),e("ember-runtime/mixins/array",["ember-metal/core","ember-metal/property_get","ember-metal/computed","ember-metal/is_none","ember-runtime/mixins/enumerable","ember-metal/enumerable_utils","ember-metal/mixin","ember-metal/property_events","ember-metal/events","ember-metal/watching","exports"],function(e,r,n,i,a,s,o,u,l,c,h){"use strict";function m(e,t,r,n,i){var a=r&&r.willChange||"arrayWillChange",s=r&&r.didChange||"arrayDidChange",o=f(e,"hasArrayObservers");return o===i&&x(e,"hasArrayObservers"),n(e,"@array:before",t,a),n(e,"@array:change",t,s),o===i&&C(e,"hasArrayObservers"),e}var p=e["default"],f=r.get,d=n.computed,v=n.cacheFor,b=i["default"],g=a["default"],y=s.map,_=o.Mixin,w=o.required,x=u.propertyWillChange,C=u.propertyDidChange,E=l.addListener,O=l.removeListener,P=l.sendEvent,A=l.hasListeners,N=c.isWatching;h["default"]=_.create(g,{length:w(),objectAt:function(e){return 0>e||e>=f(this,"length")?void 0:f(this,e)},objectsAt:function(e){var t=this;return y(e,function(e){return t.objectAt(e)})},nextObject:function(e){return this.objectAt(e)},"[]":d(function(e,t){return void 0!==t&&this.replace(0,f(this,"length"),t),this}),firstObject:d(function(){return this.objectAt(0)}),lastObject:d(function(){return this.objectAt(f(this,"length")-1)}),contains:function(e){return this.indexOf(e)>=0},slice:function(e,t){var r=p.A(),n=f(this,"length");for(b(e)&&(e=0),(b(t)||t>n)&&(t=n),0>e&&(e=n+e),0>t&&(t=n+t);t>e;)r[r.length]=this.objectAt(e++);return r},indexOf:function(e,t){var r,n=f(this,"length");for(void 0===t&&(t=0),0>t&&(t+=n),r=t;n>r;r++)if(this.objectAt(r)===e)return r;return-1},lastIndexOf:function(e,t){var r,n=f(this,"length");for((void 0===t||t>=n)&&(t=n-1),0>t&&(t+=n),r=t;r>=0;r--)if(this.objectAt(r)===e)return r;return-1},addArrayObserver:function(e,t){return m(this,e,t,E,!1)},removeArrayObserver:function(e,t){return m(this,e,t,O,!0)},hasArrayObservers:d(function(){return A(this,"@array:change")||A(this,"@array:before")}),arrayContentWillChange:function(e,t,r){var n,i;if(void 0===e?(e=0,t=r=-1):(void 0===t&&(t=-1),void 0===r&&(r=-1)),N(this,"@each")&&f(this,"@each"),P(this,"@array:before",[this,e,t,r]),e>=0&&t>=0&&f(this,"hasEnumerableObservers")){n=[],i=e+t;for(var a=e;i>a;a++)n.push(this.objectAt(a))}else n=t;return this.enumerableContentWillChange(n,r),this},arrayContentDidChange:function(e,t,r){var n,i;if(void 0===e?(e=0,t=r=-1):(void 0===t&&(t=-1),void 0===r&&(r=-1)),e>=0&&r>=0&&f(this,"hasEnumerableObservers")){n=[],i=e+r;for(var a=e;i>a;a++)n.push(this.objectAt(a))}else n=r;this.enumerableContentDidChange(t,n),P(this,"@array:change",[this,e,t,r]);var s=f(this,"length"),o=v(this,"firstObject"),u=v(this,"lastObject");return this.objectAt(0)!==o&&(x(this,"firstObject"),C(this,"firstObject")),this.objectAt(s-1)!==u&&(x(this,"lastObject"),C(this,"lastObject")),this},"@each":d(function(){if(!this.__each){var e=t("ember-runtime/system/each_proxy").EachProxy;this.__each=new e(this)}return this.__each})})}),e("ember-runtime/mixins/comparable",["ember-metal/mixin","exports"],function(e,t){"use strict";var r=e.Mixin,n=e.required;t["default"]=r.create({compare:n(Function)})}),e("ember-runtime/mixins/controller",["ember-metal/mixin","ember-metal/computed","ember-runtime/mixins/action_handler","ember-runtime/mixins/controller_content_model_alias_deprecation","exports"],function(e,t,r,n,i){"use strict";var a=e.Mixin,s=t.computed,o=r["default"],u=n["default"];i["default"]=a.create(o,u,{isController:!0,target:null,container:null,parentController:null,store:null,model:null,content:s.alias("model")})}),e("ember-runtime/mixins/controller_content_model_alias_deprecation",["ember-metal/core","ember-metal/mixin","exports"],function(e,t,r){"use strict";var n=(e["default"],t.Mixin);r["default"]=n.create({willMergeMixin:function(e){this._super.apply(this,arguments);var t=!!e.model;e.content&&!t&&(e.model=e.content,delete e.content)}})}),e("ember-runtime/mixins/copyable",["ember-metal/property_get","ember-metal/mixin","ember-runtime/mixins/freezable","ember-runtime/system/string","ember-metal/error","exports"],function(e,t,r,n,i,a){"use strict";var s=e.get,o=t.required,u=r.Freezable,l=t.Mixin,c=n.fmt,h=i["default"];a["default"]=l.create({copy:o(Function),frozenCopy:function(){if(u&&u.detect(this))return s(this,"isFrozen")?this:this.copy().freeze();throw new h(c("%@ does not support freezing",[this]))}})}),e("ember-runtime/mixins/deferred",["ember-metal/core","ember-metal/property_get","ember-metal/mixin","ember-metal/computed","ember-runtime/ext/rsvp","exports"],function(e,t,r,n,i,a){"use strict";var s=(e["default"],t.get),o=r.Mixin,u=n.computed,l=i["default"];a["default"]=o.create({then:function(e,t,r){function n(t){return e(t===a?o:t)}var i,a,o;return o=this,i=s(this,"_deferred"),a=i.promise,a.then(e&&n,t,r)},resolve:function(e){var t,r;t=s(this,"_deferred"),r=t.promise,t.resolve(e===this?r:e)},reject:function(e){s(this,"_deferred").reject(e)},_deferred:u(function(){return l.defer("Ember: DeferredMixin - "+this)})})}),e("ember-runtime/mixins/enumerable",["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/mixin","ember-metal/enumerable_utils","ember-metal/computed","ember-metal/property_events","ember-metal/events","ember-runtime/compare","exports"],function(e,t,r,n,i,a,s,o,u,l,c){"use strict";function h(){return 0===k.length?{}:k.pop()}function m(e){return k.push(e),null}function p(e,t){function r(r){var i=d(r,e);return n?t===i:!!i}var n=2===arguments.length;return r}var f=e["default"],d=t.get,v=r.set,b=n.apply,g=i.Mixin,y=i.required,_=i.aliasMethod,w=a.indexOf,x=s.computed,C=o.propertyWillChange,E=o.propertyDidChange,O=u.addListener,P=u.removeListener,A=u.sendEvent,N=u.hasListeners,S=l["default"],T=Array.prototype.slice,k=[];c["default"]=g.create({nextObject:y(Function),firstObject:x("[]",function(){if(0===d(this,"length"))return void 0;var e=h(),t=this.nextObject(0,null,e);return m(e),t}),lastObject:x("[]",function(){var e=d(this,"length");if(0===e)return void 0;var t,r=h(),n=0,i=null;do i=t,t=this.nextObject(n++,i,r);while(void 0!==t);return m(r),i}),contains:function(e){var t=this.find(function(t){return t===e});return void 0!==t},forEach:function(e,t){if("function"!=typeof e)throw new TypeError;var r=h(),n=d(this,"length"),i=null;void 0===t&&(t=null);for(var a=0;n>a;a++){var s=this.nextObject(a,i,r);e.call(t,s,a,this),i=s}return i=null,r=m(r),this},getEach:function(e){return this.mapBy(e)},setEach:function(e,t){return this.forEach(function(r){v(r,e,t)})},map:function(e,t){var r=f.A();return this.forEach(function(n,i,a){r[i]=e.call(t,n,i,a)}),r},mapBy:function(e){return this.map(function(t){return d(t,e)})},mapProperty:_("mapBy"),filter:function(e,t){var r=f.A();return this.forEach(function(n,i,a){e.call(t,n,i,a)&&r.push(n)}),r},reject:function(e,t){return this.filter(function(){return!b(t,e,arguments)})},filterBy:function(){return this.filter(b(this,p,arguments))},filterProperty:_("filterBy"),rejectBy:function(e,t){var r=function(r){return d(r,e)===t},n=function(t){return!!d(t,e)},i=2===arguments.length?r:n;return this.reject(i)},rejectProperty:_("rejectBy"),find:function(e,t){var r=d(this,"length");void 0===t&&(t=null);for(var n,i,a=h(),s=!1,o=null,u=0;r>u&&!s;u++)n=this.nextObject(u,o,a),(s=e.call(t,n,u,this))&&(i=n),o=n;return n=o=null,a=m(a),i},findBy:function(){return this.find(b(this,p,arguments))},findProperty:_("findBy"),every:function(e,t){return!this.find(function(r,n,i){return!e.call(t,r,n,i)})},everyBy:_("isEvery"),everyProperty:_("isEvery"),isEvery:function(){return this.every(b(this,p,arguments))},any:function(e,t){var r,n,i=d(this,"length"),a=h(),s=!1,o=null;for(void 0===t&&(t=null),n=0;i>n&&!s;n++)r=this.nextObject(n,o,a),s=e.call(t,r,n,this),o=r;return r=o=null,a=m(a),s},some:_("any"),isAny:function(){return this.any(b(this,p,arguments))},anyBy:_("isAny"),someProperty:_("isAny"),reduce:function(e,t,r){if("function"!=typeof e)throw new TypeError;var n=t;return this.forEach(function(t,i){n=e(n,t,i,this,r)},this),n},invoke:function(e){var t,r=f.A();return arguments.length>1&&(t=T.call(arguments,1)),this.forEach(function(n,i){var a=n&&n[e];"function"==typeof a&&(r[i]=t?b(n,a,t):n[e]())},this),r},toArray:function(){var e=f.A();return this.forEach(function(t,r){e[r]=t}),e},compact:function(){return this.filter(function(e){return null!=e})},without:function(e){if(!this.contains(e))return this;var t=f.A();return this.forEach(function(r){r!==e&&(t[t.length]=r)}),t},uniq:function(){var e=f.A();return this.forEach(function(t){w(e,t)<0&&e.push(t)}),e},"[]":x(function(){return this}),addEnumerableObserver:function(e,t){var r=t&&t.willChange||"enumerableWillChange",n=t&&t.didChange||"enumerableDidChange",i=d(this,"hasEnumerableObservers");return i||C(this,"hasEnumerableObservers"),O(this,"@enumerable:before",e,r),O(this,"@enumerable:change",e,n),i||E(this,"hasEnumerableObservers"),this},removeEnumerableObserver:function(e,t){var r=t&&t.willChange||"enumerableWillChange",n=t&&t.didChange||"enumerableDidChange",i=d(this,"hasEnumerableObservers");return i&&C(this,"hasEnumerableObservers"),P(this,"@enumerable:before",e,r),P(this,"@enumerable:change",e,n),i&&E(this,"hasEnumerableObservers"),this},hasEnumerableObservers:x(function(){return N(this,"@enumerable:change")||N(this,"@enumerable:before")}),enumerableContentWillChange:function(e,t){var r,n,i;return r="number"==typeof e?e:e?d(e,"length"):e=-1,n="number"==typeof t?t:t?d(t,"length"):t=-1,i=0>n||0>r||n-r!==0,-1===e&&(e=null),-1===t&&(t=null),C(this,"[]"),i&&C(this,"length"),A(this,"@enumerable:before",[this,e,t]),this},enumerableContentDidChange:function(e,t){var r,n,i;return r="number"==typeof e?e:e?d(e,"length"):e=-1,n="number"==typeof t?t:t?d(t,"length"):t=-1,i=0>n||0>r||n-r!==0,-1===e&&(e=null),-1===t&&(t=null),A(this,"@enumerable:change",[this,e,t]),i&&E(this,"length"),E(this,"[]"),this},sortBy:function(){var e=arguments;return this.toArray().sort(function(t,r){for(var n=0;nn;n++)r[n-1]=arguments[n];o(this,e,r)},off:function(e,t,r){return a(this,e,t,r),this},has:function(e){return s(this,e)}})}),e("ember-runtime/mixins/freezable",["ember-metal/mixin","ember-metal/property_get","ember-metal/property_set","exports"],function(e,t,r,n){"use strict";var i=e.Mixin,a=t.get,s=r.set,o=i.create({isFrozen:!1,freeze:function(){return a(this,"isFrozen")?this:(s(this,"isFrozen",!0),this)}});n.Freezable=o;var u="Frozen object cannot be modified.";n.FROZEN_ERROR=u}),e("ember-runtime/mixins/mutable_array",["ember-metal/property_get","ember-metal/utils","ember-metal/error","ember-metal/mixin","ember-runtime/mixins/array","ember-runtime/mixins/mutable_enumerable","ember-runtime/mixins/enumerable","exports"],function(e,t,r,n,i,a,s,o){"use strict";var u="Index out of range",l=[],c=e.get,h=t.isArray,m=r["default"],p=n.Mixin,f=n.required,d=i["default"],v=a["default"],b=s["default"];o["default"]=p.create(d,v,{replace:f(),clear:function(){var e=c(this,"length");return 0===e?this:(this.replace(0,e,l),this)},insertAt:function(e,t){if(e>c(this,"length"))throw new m(u);return this.replace(e,0,[t]),this},removeAt:function(e,t){if("number"==typeof e){if(0>e||e>=c(this,"length"))throw new m(u);void 0===t&&(t=1),this.replace(e,t,l)}return this},pushObject:function(e){return this.insertAt(c(this,"length"),e),e},pushObjects:function(e){if(!b.detect(e)&&!h(e))throw new TypeError("Must pass Ember.Enumerable to Ember.MutableArray#pushObjects");return this.replace(c(this,"length"),0,e),this},popObject:function(){var e=c(this,"length");if(0===e)return null;var t=this.objectAt(e-1);return this.removeAt(e-1,1),t},shiftObject:function(){if(0===c(this,"length"))return null;var e=this.objectAt(0);return this.removeAt(0),e},unshiftObject:function(e){return this.insertAt(0,e),e},unshiftObjects:function(e){return this.replace(0,0,e),this},reverseObjects:function(){var e=c(this,"length");if(0===e)return this;var t=this.toArray().reverse();return this.replace(0,e,t),this},setObjects:function(e){if(0===e.length)return this.clear();var t=c(this,"length");return this.replace(0,t,e),this},removeObject:function(e){for(var t=c(this,"length")||0;--t>=0;){var r=this.objectAt(t);r===e&&this.removeAt(t)}return this},addObject:function(e){return this.contains(e)||this.pushObject(e),this}})}),e("ember-runtime/mixins/mutable_enumerable",["ember-metal/enumerable_utils","ember-runtime/mixins/enumerable","ember-metal/mixin","ember-metal/property_events","exports"],function(e,t,r,n,i){"use strict";var a=e.forEach,s=t["default"],o=r.Mixin,u=r.required,l=n.beginPropertyChanges,c=n.endPropertyChanges;i["default"]=o.create(s,{addObject:u(Function),addObjects:function(e){return l(this),a(e,function(e){this.addObject(e)},this),c(this),this},removeObject:u(Function),removeObjects:function(e){l(this);for(var t=e.length-1;t>=0;t--)this.removeObject(e[t]);return c(this),this}})}),e("ember-runtime/mixins/observable",["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/get_properties","ember-metal/set_properties","ember-metal/mixin","ember-metal/events","ember-metal/property_events","ember-metal/observer","ember-metal/computed","ember-metal/is_none","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h,m){"use strict";var p=(e["default"],t.get),f=t.getWithDefault,d=r.set,v=n.apply,b=i["default"],g=a["default"],y=s.Mixin,_=o.hasListeners,w=u.beginPropertyChanges,x=u.propertyWillChange,C=u.propertyDidChange,E=u.endPropertyChanges,O=l.addObserver,P=l.addBeforeObserver,A=l.removeObserver,N=l.observersFor,S=c.cacheFor,T=h["default"],k=Array.prototype.slice;m["default"]=y.create({get:function(e){return p(this,e)},getProperties:function(){return v(null,b,[this].concat(k.call(arguments)))},set:function(e,t){return d(this,e,t),this},setProperties:function(e){return g(this,e)},beginPropertyChanges:function(){return w(),this},endPropertyChanges:function(){return E(),this},propertyWillChange:function(e){return x(this,e),this},propertyDidChange:function(e){return C(this,e),this},notifyPropertyChange:function(e){return this.propertyWillChange(e),this.propertyDidChange(e),this},addBeforeObserver:function(e,t,r){P(this,e,t,r)},addObserver:function(e,t,r){O(this,e,t,r)},removeObserver:function(e,t,r){A(this,e,t,r)},hasObserverFor:function(e){return _(this,e+":change")},getWithDefault:function(e,t){return f(this,e,t)},incrementProperty:function(e,t){return T(t)&&(t=1),d(this,e,(parseFloat(p(this,e))||0)+t),p(this,e)},decrementProperty:function(e,t){return T(t)&&(t=1),d(this,e,(p(this,e)||0)-t),p(this,e)},toggleProperty:function(e){return d(this,e,!p(this,e)),p(this,e)},cacheFor:function(e){return S(this,e)},observersForKey:function(e){return N(this,e)}})}),e("ember-runtime/mixins/promise_proxy",["ember-metal/property_get","ember-metal/set_properties","ember-metal/computed","ember-metal/mixin","ember-metal/error","exports"],function(e,t,r,n,i,a){"use strict";function s(e,t){return l(e,{isFulfilled:!1,isRejected:!1}),t.then(function(t){return l(e,{content:t,isFulfilled:!0}),t},function(t){throw l(e,{reason:t,isRejected:!0}),t},"Ember: PromiseProxy")}function o(e){return function(){var t=u(this,"promise");return t[e].apply(t,arguments)}}var u=e.get,l=t["default"],c=r.computed,h=n.Mixin,m=i["default"],p=c.not,f=c.or; +a["default"]=h.create({reason:null,isPending:p("isSettled").readOnly(),isSettled:f("isRejected","isFulfilled").readOnly(),isRejected:!1,isFulfilled:!1,promise:c(function(e,t){if(2===arguments.length)return s(this,t);throw new m("PromiseProxy's promise must be set")}),then:o("then"),"catch":o("catch"),"finally":o("finally")})}),e("ember-runtime/mixins/sortable",["ember-metal/core","ember-metal/property_get","ember-metal/enumerable_utils","ember-metal/mixin","ember-runtime/mixins/mutable_enumerable","ember-runtime/compare","ember-metal/observer","ember-metal/computed","exports"],function(e,t,r,n,i,a,s,o,u){"use strict";var l=e["default"],c=t.get,h=r.forEach,m=n.Mixin,p=i["default"],f=a["default"],d=s.addObserver,v=s.removeObserver,b=o.computed,g=n.beforeObserver,y=n.observer;u["default"]=m.create(p,{sortProperties:null,sortAscending:!0,sortFunction:f,orderBy:function(e,t){var r=0,n=c(this,"sortProperties"),i=c(this,"sortAscending"),a=c(this,"sortFunction");return h(n,function(n){0===r&&(r=a.call(this,c(e,n),c(t,n)),0===r||i||(r=-1*r))},this),r},destroy:function(){var e=c(this,"content"),t=c(this,"sortProperties");return e&&t&&h(e,function(e){h(t,function(t){v(e,t,this,"contentItemSortPropertyDidChange")},this)},this),this._super()},isSorted:b.notEmpty("sortProperties"),arrangedContent:b("content","sortProperties.@each",function(){var e=c(this,"content"),t=c(this,"isSorted"),r=c(this,"sortProperties"),n=this;return e&&t?(e=e.slice(),e.sort(function(e,t){return n.orderBy(e,t)}),h(e,function(e){h(r,function(t){d(e,t,this,"contentItemSortPropertyDidChange")},this)},this),l.A(e)):e}),_contentWillChange:g("content",function(){var e=c(this,"content"),t=c(this,"sortProperties");e&&t&&h(e,function(e){h(t,function(t){v(e,t,this,"contentItemSortPropertyDidChange")},this)},this),this._super()}),sortPropertiesWillChange:g("sortProperties",function(){this._lastSortAscending=void 0}),sortPropertiesDidChange:y("sortProperties",function(){this._lastSortAscending=void 0}),sortAscendingWillChange:g("sortAscending",function(){this._lastSortAscending=c(this,"sortAscending")}),sortAscendingDidChange:y("sortAscending",function(){if(void 0!==this._lastSortAscending&&c(this,"sortAscending")!==this._lastSortAscending){var e=c(this,"arrangedContent");e.reverseObjects()}}),contentArrayWillChange:function(e,t,r,n){var i=c(this,"isSorted");if(i){var a=c(this,"arrangedContent"),s=e.slice(t,t+r),o=c(this,"sortProperties");h(s,function(e){a.removeObject(e),h(o,function(t){v(e,t,this,"contentItemSortPropertyDidChange")},this)},this)}return this._super(e,t,r,n)},contentArrayDidChange:function(e,t,r,n){var i=c(this,"isSorted"),a=c(this,"sortProperties");if(i){var s=e.slice(t,t+n);h(s,function(e){this.insertItemSorted(e),h(a,function(t){d(e,t,this,"contentItemSortPropertyDidChange")},this)},this)}return this._super(e,t,r,n)},insertItemSorted:function(e){var t=c(this,"arrangedContent"),r=c(t,"length"),n=this._binarySearch(e,0,r);t.insertAt(n,e)},contentItemSortPropertyDidChange:function(e){var t=c(this,"arrangedContent"),r=t.indexOf(e),n=t.objectAt(r-1),i=t.objectAt(r+1),a=n&&this.orderBy(e,n),s=i&&this.orderBy(e,i);(0>a||s>0)&&(t.removeObject(e),this.insertItemSorted(e))},_binarySearch:function(e,t,r){var n,i,a,s;return t===r?t:(s=c(this,"arrangedContent"),n=t+Math.floor((r-t)/2),i=s.objectAt(n),a=this.orderBy(i,e),0>a?this._binarySearch(e,n+1,r):a>0?this._binarySearch(e,t,n):n)}})}),e("ember-runtime/mixins/target_action_support",["ember-metal/core","ember-metal/property_get","ember-metal/utils","ember-metal/mixin","ember-metal/computed","exports"],function(e,t,r,n,i,a){"use strict";var s=e["default"],o=t.get,u=r.typeOf,l=n.Mixin,c=i.computed,h=l.create({target:null,action:null,actionContext:null,targetObject:c(function(){var e=o(this,"target");if("string"===u(e)){var t=o(this,e);return void 0===t&&(t=o(s.lookup,e)),t}return e}).property("target"),actionContextObject:c(function(){var e=o(this,"actionContext");if("string"===u(e)){var t=o(this,e);return void 0===t&&(t=o(s.lookup,e)),t}return e}).property("actionContext"),triggerAction:function(e){function t(e,t){var r=[];return t&&r.push(t),r.concat(e)}e=e||{};var r=e.action||o(this,"action"),n=e.target||o(this,"targetObject"),i=e.actionContext;if("undefined"==typeof i&&(i=o(this,"actionContextObject")||this),n&&r){var a;return a=n.send?n.send.apply(n,t(i,r)):n[r].apply(n,t(i)),a!==!1&&(a=!0),a}return!1}});a["default"]=h}),e("ember-runtime/system/application",["ember-runtime/system/namespace","exports"],function(e,t){"use strict";var r=e["default"];t["default"]=r.extend()}),e("ember-runtime/system/array_proxy",["ember-metal/core","ember-metal/property_get","ember-metal/utils","ember-metal/computed","ember-metal/mixin","ember-metal/property_events","ember-metal/error","ember-runtime/system/object","ember-runtime/mixins/mutable_array","ember-runtime/mixins/enumerable","ember-runtime/system/string","ember-metal/alias","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h,m){"use strict";function p(){return this}var f=(e["default"],t.get),d=r.isArray,v=r.apply,b=n.computed,g=i.beforeObserver,y=i.observer,_=a.beginPropertyChanges,w=a.endPropertyChanges,x=s["default"],C=o["default"],E=u["default"],O=l["default"],P=(c.fmt,h["default"]),A="Index out of range",N=[],S=C.extend(E,{content:null,arrangedContent:P("content"),objectAtContent:function(e){return f(this,"arrangedContent").objectAt(e)},replaceContent:function(e,t,r){f(this,"content").replace(e,t,r)},_contentWillChange:g("content",function(){this._teardownContent()}),_teardownContent:function(){var e=f(this,"content");e&&e.removeArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},contentArrayWillChange:p,contentArrayDidChange:p,_contentDidChange:y("content",function(){f(this,"content");this._setupContent()}),_setupContent:function(){var e=f(this,"content");e&&e.addArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},_arrangedContentWillChange:g("arrangedContent",function(){var e=f(this,"arrangedContent"),t=e?f(e,"length"):0;this.arrangedContentArrayWillChange(this,0,t,void 0),this.arrangedContentWillChange(this),this._teardownArrangedContent(e)}),_arrangedContentDidChange:y("arrangedContent",function(){var e=f(this,"arrangedContent"),t=e?f(e,"length"):0;this._setupArrangedContent(),this.arrangedContentDidChange(this),this.arrangedContentArrayDidChange(this,0,void 0,t)}),_setupArrangedContent:function(){var e=f(this,"arrangedContent");e&&e.addArrayObserver(this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"})},_teardownArrangedContent:function(){var e=f(this,"arrangedContent");e&&e.removeArrayObserver(this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"})},arrangedContentWillChange:p,arrangedContentDidChange:p,objectAt:function(e){return f(this,"content")&&this.objectAtContent(e)},length:b(function(){var e=f(this,"arrangedContent");return e?f(e,"length"):0}),_replace:function(e,t,r){var n=f(this,"content");return n&&this.replaceContent(e,t,r),this},replace:function(){if(f(this,"arrangedContent")!==f(this,"content"))throw new x("Using replace on an arranged ArrayProxy is not allowed.");v(this,this._replace,arguments)},_insertAt:function(e,t){if(e>f(this,"content.length"))throw new x(A);return this._replace(e,0,[t]),this},insertAt:function(e,t){if(f(this,"arrangedContent")===f(this,"content"))return this._insertAt(e,t);throw new x("Using insertAt on an arranged ArrayProxy is not allowed.")},removeAt:function(e,t){if("number"==typeof e){var r,n=f(this,"content"),i=f(this,"arrangedContent"),a=[];if(0>e||e>=f(this,"length"))throw new x(A);for(void 0===t&&(t=1),r=e;e+t>r;r++)a.push(n.indexOf(i.objectAt(r)));for(a.sort(function(e,t){return t-e}),_(),r=0;rc;c++){var m=o[c];if("object"!=typeof m&&void 0!==m)throw new F("Ember.Object.create only accepts objects.");if(m)for(var p=H(m),f=0,d=p.length;d>f;f++){var v=p[f],b=m[v];if(M.test(v)){var g=i.bindings;g?i.hasOwnProperty("bindings")||(g=i.bindings=N(i.bindings)):g=i.bindings={},g[v]=b}var y=i.descs[v];if(u&&u.length>0&&L(u,v)>=0){var _=this[v];b=_?"function"==typeof _.concat?_.concat(b):V(_).concat(b):V(b)}if(l&&l.length&&L(l,v)>=0){var w=this[v];b=E(w,b)}y?y.set(this,v,b):"function"!=typeof this.setUnknownProperty||v in this?this[v]=b:this.setUnknownProperty(v,b)}}}X(this,i);var x=arguments.length;if(0===x)this.init();else if(1===x)this.init(arguments[0]);else{for(var C=new Array(x),O=0;x>O;O++)C[O]=arguments[O];this.init.apply(this,C)}i.proto=a,I(this),j(this,"init")};return n.toString=R.prototype.toString,n.willReopen=function(){r&&(n.PrototypeMixin=R.create(n.PrototypeMixin)),r=!1},n._initMixins=function(t){e=t},n._initProperties=function(e){t=e},n.proto=function(){var e=n.superclass;return e&&e.proto(),r||(r=!0,n.PrototypeMixin.applyPartial(n.prototype)),this.prototype},n}function w(e){return function(){return e}}function x(){}var C=e["default"],E=t["default"],O=r.get,P=n.guidFor,A=n.apply,N=i.create,S=n.generateGuid,T=n.GUID_KEY,k=n.meta,V=n.makeArray,I=a.finishChains,j=s.sendEvent,M=o.IS_BINDING,R=o.Mixin,D=o.required,L=u.indexOf,F=l["default"],B=i.defineProperty,H=c["default"],z=(h["default"],m.defineProperty,p.Binding),q=f.ComputedProperty,U=f.computed,W=d["default"],K=v["default"],G=b.destroy,Q=e.K,$=(i.hasPropertyAccessors,g.validatePropertyInjections,K.schedule),Y=R._apply,X=R.finishPartial,Z=R.prototype.reopen,J=!1,et={configurable:!0,writable:!0,enumerable:!1,value:void 0},tt={configurable:!0,writable:!0,enumerable:!1,value:null},rt=_();rt.toString=function(){return"Ember.CoreObject"},rt.PrototypeMixin=R.create({reopen:function(){for(var e=arguments.length,t=new Array(e),r=0;e>r;r++)t[r]=arguments[r];return Y(this,t,!0),this},init:function(){},concatenatedProperties:null,isDestroyed:!1,isDestroying:!1,destroy:function(){return this.isDestroying?void 0:(this.isDestroying=!0,$("actions",this,this.willDestroy),$("destroy",this,this._scheduledDestroy),this)},willDestroy:Q,_scheduledDestroy:function(){this.isDestroyed||(G(this),this.isDestroyed=!0)},bind:function(e,t){return t instanceof z||(t=z.from(t)),t.to(e).connect(this),t},toString:function(){var e="function"==typeof this.toStringExtension,t=e?":"+this.toStringExtension():"",r="<"+this.constructor.toString()+":"+P(this)+t+">";return this.toString=w(r),r}}),rt.PrototypeMixin.ownerConstructor=rt,rt.__super__=null;var nt={ClassMixin:D(),PrototypeMixin:D(),isClass:!0,isMethod:!1,extend:function(){var e,t=_();return t.ClassMixin=R.create(this.ClassMixin),t.PrototypeMixin=R.create(this.PrototypeMixin),t.ClassMixin.ownerConstructor=t,t.PrototypeMixin.ownerConstructor=t,Z.apply(t.PrototypeMixin,arguments),t.superclass=this,t.__super__=this.prototype,e=t.prototype=N(this.prototype),e.constructor=t,S(e),k(e).proto=e,t.ClassMixin.apply(t),t},createWithMixins:function(){var e=this,t=arguments.length;if(t>0){for(var r=new Array(t),n=0;t>n;n++)r[n]=arguments[n];this._initMixins(r)}return new e},create:function(){var e=this,t=arguments.length;if(t>0){for(var r=new Array(t),n=0;t>n;n++)r[n]=arguments[n];this._initProperties(r)}return new e},reopen:function(){this.willReopen();var e=arguments.length,t=new Array(e);if(e>0)for(var r=0;e>r;r++)t[r]=arguments[r];return A(this.PrototypeMixin,Z,t),this},reopenClass:function(){var e=arguments.length,t=new Array(e);if(e>0)for(var r=0;e>r;r++)t[r]=arguments[r];return A(this.ClassMixin,Z,t),Y(this,arguments,!1),this},detect:function(e){if("function"!=typeof e)return!1;for(;e;){if(e===this)return!0;e=e.superclass}return!1},detectInstance:function(e){return e instanceof this},metaForProperty:function(e){var t=this.proto().__ember_meta__,r=t&&t.descs[e];return r._meta||{}},_computedProperties:U(function(){J=!0;var e,t=this.proto(),r=k(t).descs,n=[];for(var i in r)e=r[i],e instanceof q&&n.push({name:i,meta:e._meta});return n}).readOnly(),eachComputedProperty:function(e,t){for(var r,n,i={},a=O(this,"_computedProperties"),s=0,o=a.length;o>s;s++)r=a[s],n=r.name,e.call(t||this,r.name,r.meta||i)}};x(),nt._lazyInjections=function(){var e,t,r={},n=this.proto(),i=k(n).descs;for(e in i)t=i[e],t instanceof W&&(r[e]=t.type+":"+(t.name||e));return r};var it=R.create(nt);it.ownerConstructor=rt,rt.ClassMixin=it,it.apply(rt),rt.reopen({didDefineProperty:function(e,t,r){if(J!==!1&&r instanceof C.ComputedProperty){var n=C.meta(this.constructor).cache;void 0!==n._computedProperties&&(n._computedProperties=void 0)}}}),y["default"]=rt}),e("ember-runtime/system/deferred",["ember-metal/core","ember-runtime/mixins/deferred","ember-runtime/system/object","exports"],function(e,t,r,n){"use strict";var i=(e["default"],t["default"]),a=r["default"],s=a.extend(i,{init:function(){this._super()}});s.reopenClass({promise:function(e,t){var r=s.create();return e.call(t,r),r}}),n["default"]=s}),e("ember-runtime/system/each_proxy",["ember-metal/core","ember-metal/property_get","ember-metal/utils","ember-metal/enumerable_utils","ember-metal/array","ember-runtime/mixins/array","ember-runtime/system/object","ember-metal/computed","ember-metal/observer","ember-metal/events","ember-metal/properties","ember-metal/property_events","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h,m){"use strict";function p(e,t,r,n,i){var a,s=r._objects;for(s||(s=r._objects={});--i>=n;){var o=e.objectAt(i);o&&(C(o,t,r,"contentKeyWillChange"),x(o,t,r,"contentKeyDidChange"),a=v(o),s[a]||(s[a]=[]),s[a].push(i))}}function f(e,t,r,n,i){var a=r._objects;a||(a=r._objects={});for(var s,o;--i>=n;){var u=e.objectAt(i);u&&(E(u,t,r,"contentKeyWillChange"),O(u,t,r,"contentKeyDidChange"),o=v(u),s=a[o],s[g.call(s,i)]=null)}}var d=(e["default"],t.get),v=r.guidFor,b=n.forEach,g=i.indexOf,y=a["default"],_=s["default"],w=o.computed,x=u.addObserver,C=u.addBeforeObserver,E=u.removeBeforeObserver,O=u.removeObserver,P=(r.typeOf,l.watchedEvents),A=c.defineProperty,N=h.beginPropertyChanges,S=h.propertyDidChange,T=h.propertyWillChange,k=h.endPropertyChanges,V=h.changeProperties,I=_.extend(y,{init:function(e,t,r){this._super(),this._keyName=t,this._owner=r,this._content=e},objectAt:function(e){var t=this._content.objectAt(e);return t&&d(t,this._keyName)},length:w(function(){var e=this._content;return e?d(e,"length"):0})}),j=/^.+:(before|change)$/,M=_.extend({init:function(e){this._super(),this._content=e,e.addArrayObserver(this),b(P(this),function(e){this.didAddListener(e)},this)},unknownProperty:function(e){var t;return t=new I(this._content,e,this),A(this,e,null,t),this.beginObservingContentKey(e),t},arrayWillChange:function(e,t,r){var n,i,a=this._keys;i=r>0?t+r:-1,N(this);for(n in a)a.hasOwnProperty(n)&&(i>0&&f(e,n,this,t,i),T(this,n));T(this._content,"@each"),k(this)},arrayDidChange:function(e,t,r,n){var i,a=this._keys;i=n>0?t+n:-1,V(function(){for(var r in a)a.hasOwnProperty(r)&&(i>0&&p(e,r,this,t,i),S(this,r));S(this._content,"@each")},this)},didAddListener:function(e){j.test(e)&&this.beginObservingContentKey(e.slice(0,-7))},didRemoveListener:function(e){j.test(e)&&this.stopObservingContentKey(e.slice(0,-7))},beginObservingContentKey:function(e){var t=this._keys;if(t||(t=this._keys={}),t[e])t[e]++;else{t[e]=1;var r=this._content,n=d(r,"length");p(r,e,this,0,n)}},stopObservingContentKey:function(e){var t=this._keys;if(t&&t[e]>0&&--t[e]<=0){var r=this._content,n=d(r,"length");f(r,e,this,0,n)}},contentKeyWillChange:function(e,t){T(this,t)},contentKeyDidChange:function(e,t){S(this,t)}});m.EachArray=I,m.EachProxy=M}),e("ember-runtime/system/lazy_load",["ember-metal/core","ember-metal/array","ember-runtime/system/native_array","exports"],function(e,t,r,n){"use strict";function i(e,t){var r;u[e]=u[e]||s.A(),u[e].pushObject(t),(r=l[e])&&t(r)}function a(e,t){if(l[e]=t,"object"==typeof window&&"function"==typeof window.dispatchEvent&&"function"==typeof CustomEvent){var r=new CustomEvent(e,{detail:t,name:e});window.dispatchEvent(r)}u[e]&&o.call(u[e],function(e){e(t)})}var s=e["default"],o=t.forEach,u=s.ENV.EMBER_LOAD_HOOKS||{},l={};n.onLoad=i,n.runLoadHooks=a}),e("ember-runtime/system/namespace",["ember-metal/core","ember-metal/property_get","ember-metal/array","ember-metal/utils","ember-metal/mixin","ember-runtime/system/object","exports"],function(e,t,r,n,i,a,s){"use strict";function o(e,t,r){var n=e.length;x[e.join(".")]=t;for(var i in t)if(C.call(t,i)){var a=t[i];if(e[n]=i,a&&a.toString===h)a.toString=p(e.join(".")),a[O]=e.join(".");else if(a&&a.isNamespace){if(r[g(a)])continue;r[g(a)]=!0,o(e,a,r)}}e.length=n}function u(e,t){try{var r=e[t];return r&&r.isNamespace&&r}catch(n){}}function l(){var e,t=f.lookup;if(!w.PROCESSED)for(var r in t)E.test(r)&&(!t.hasOwnProperty||t.hasOwnProperty(r))&&(e=u(t,r),e&&(e[O]=r))}function c(e){var t=e.superclass;return t?t[O]?t[O]:c(t):void 0}function h(){f.BOOTED||this[O]||m();var e;if(this[O])e=this[O];else if(this._toString)e=this._toString;else{var t=c(this);e=t?"(subclass of "+t+")":"(unknown mixin)",this.toString=p(e)}return e}function m(){var e=!w.PROCESSED,t=f.anyUnprocessedMixins;if(e&&(l(),w.PROCESSED=!0),e||t){for(var r,n=w.NAMESPACES,i=0,a=n.length;a>i;i++)r=n[i],o([r.toString()],r,{});f.anyUnprocessedMixins=!1}}function p(e){return function(){return e}}var f=e["default"],d=t.get,v=r.indexOf,b=n.GUID_KEY,g=n.guidFor,y=i.Mixin,_=a["default"],w=_.extend({isNamespace:!0,init:function(){w.NAMESPACES.push(this),w.PROCESSED=!1},toString:function(){var e=d(this,"name")||d(this,"modulePrefix");return e?e:(l(),this[O])},nameClasses:function(){o([this.toString()],this,{})},destroy:function(){var e=w.NAMESPACES,t=this.toString();t&&(f.lookup[t]=void 0,delete w.NAMESPACES_BY_ID[t]),e.splice(v.call(e,this),1),this._super()}});w.reopenClass({NAMESPACES:[f],NAMESPACES_BY_ID:{},PROCESSED:!1,processAll:m,byName:function(e){return f.BOOTED||m(),x[e]}});var x=w.NAMESPACES_BY_ID,C={}.hasOwnProperty,E=/^[A-Z]/,O=f.NAME_KEY=b+"_name";y.prototype.toString=h,s["default"]=w}),e("ember-runtime/system/native_array",["ember-metal/core","ember-metal/property_get","ember-metal/enumerable_utils","ember-metal/mixin","ember-metal/array","ember-runtime/mixins/array","ember-runtime/mixins/mutable_array","ember-runtime/mixins/observable","ember-runtime/mixins/copyable","ember-runtime/mixins/freezable","ember-runtime/copy","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h){"use strict";var m=e["default"],p=t.get,f=r._replace,d=r.forEach,v=n.Mixin,b=i.indexOf,g=i.lastIndexOf,y=a["default"],_=s["default"],w=o["default"],x=u["default"],C=l.FROZEN_ERROR,E=c["default"],O=v.create(_,w,x,{get:function(e){return"length"===e?this.length:"number"==typeof e?this[e]:this._super(e)},objectAt:function(e){return this[e]},replace:function(e,t,r){if(this.isFrozen)throw C;var n=r?p(r,"length"):0;return this.arrayContentWillChange(e,t,n),0===n?this.splice(e,t):f(this,e,t,r),this.arrayContentDidChange(e,t,n),this},unknownProperty:function(e,t){var r;return void 0!==t&&void 0===r&&(r=this[e]=t),r},indexOf:b,lastIndexOf:g,copy:function(e){return e?this.map(function(e){return E(e,!0)}):this.slice()}}),P=["length"];d(O.keys(),function(e){Array.prototype[e]&&P.push(e)}),P.length>0&&(O=O.without.apply(O,P));var A=function(e){return void 0===e&&(e=[]),y.detect(e)?e:O.apply(e)};O.activate=function(){O.apply(Array.prototype),A=function(e){return e||[]}},(m.EXTEND_PROTOTYPES===!0||m.EXTEND_PROTOTYPES.Array)&&O.activate(),m.A=A,h.A=A,h.NativeArray=O,h["default"]=O}),e("ember-runtime/system/object",["ember-runtime/system/core_object","ember-runtime/mixins/observable","exports"],function(e,t,r){"use strict";var n=e["default"],i=t["default"],a=n.extend(i);a.toString=function(){return"Ember.Object"},r["default"]=a}),e("ember-runtime/system/object_proxy",["ember-runtime/system/object","ember-runtime/mixins/-proxy","exports"],function(e,t,r){"use strict";var n=e["default"],i=t["default"];r["default"]=n.extend(i)}),e("ember-runtime/system/service",["ember-runtime/system/object","ember-runtime/inject","exports"],function(e,t,r){"use strict";var n,i=e["default"],a=t.createInjectionHelper;n=i.extend(),a("service"),r["default"]=n}),e("ember-runtime/system/set",["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/is_none","ember-runtime/system/string","ember-runtime/system/core_object","ember-runtime/mixins/mutable_enumerable","ember-runtime/mixins/enumerable","ember-runtime/mixins/copyable","ember-runtime/mixins/freezable","ember-metal/error","ember-metal/property_events","ember-metal/mixin","ember-metal/computed","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h,m,p,f,d){"use strict";var v=(e["default"],t.get),b=r.set,g=n.guidFor,y=i["default"],_=a.fmt,w=s["default"],x=o["default"],C=u["default"],E=l["default"],O=c.Freezable,P=c.FROZEN_ERROR,A=h["default"],N=m.propertyWillChange,S=m.propertyDidChange,T=p.aliasMethod,k=f.computed;d["default"]=w.extend(x,E,O,{length:0,clear:function(){if(this.isFrozen)throw new A(P);var e=v(this,"length");if(0===e)return this;var t;this.enumerableContentWillChange(e,0),N(this,"firstObject"),N(this,"lastObject");for(var r=0;e>r;r++)t=g(this[r]),delete this[t],delete this[r];return b(this,"length",0),S(this,"firstObject"),S(this,"lastObject"),this.enumerableContentDidChange(e,0),this},isEqual:function(e){if(!C.detect(e))return!1;var t=v(this,"length");if(v(e,"length")!==t)return!1;for(;--t>=0;)if(!e.contains(this[t]))return!1;return!0},add:T("addObject"),remove:T("removeObject"),pop:function(){if(v(this,"isFrozen"))throw new A(P);var e=this.length>0?this[this.length-1]:null;return this.remove(e),e},push:T("addObject"),shift:T("pop"),unshift:T("push"),addEach:T("addObjects"),removeEach:T("removeObjects"),init:function(e){this._super(),e&&this.addObjects(e)},nextObject:function(e){return this[e]},firstObject:k(function(){return this.length>0?this[0]:void 0}),lastObject:k(function(){return this.length>0?this[this.length-1]:void 0}),addObject:function(e){if(v(this,"isFrozen"))throw new A(P);if(y(e))return this;var t,r=g(e),n=this[r],i=v(this,"length");return n>=0&&i>n&&this[n]===e?this:(t=[e],this.enumerableContentWillChange(null,t),N(this,"lastObject"),i=v(this,"length"),this[r]=i,this[i]=e,b(this,"length",i+1),S(this,"lastObject"),this.enumerableContentDidChange(null,t),this)},removeObject:function(e){if(v(this,"isFrozen"))throw new A(P);if(y(e))return this;var t,r,n=g(e),i=this[n],a=v(this,"length"),s=0===i,o=i===a-1;return i>=0&&a>i&&this[i]===e&&(r=[e],this.enumerableContentWillChange(r,null),s&&N(this,"firstObject"),o&&N(this,"lastObject"),a-1>i&&(t=this[a-1],this[i]=t,this[g(t)]=i),delete this[n],delete this[a-1],b(this,"length",a-1),s&&S(this,"firstObject"),o&&S(this,"lastObject"),this.enumerableContentDidChange(r,null)),this},contains:function(e){return this[g(e)]>=0},copy:function(){var e=this.constructor,t=new e,r=v(this,"length");for(b(t,"length",r);--r>=0;)t[r]=this[r],t[g(this[r])]=r;return t},toString:function(){var e,t=this.length,r=[];for(e=0;t>e;e++)r[e]=this[e];return _("Ember.Set<%@>",[r.join(",")])}})}),e("ember-runtime/system/string",["ember-metal/core","ember-metal/utils","ember-metal/cache","exports"],function(e,t,r,n){"use strict";function i(e,t){var r=t;if(!f(r)||arguments.length>2){r=new Array(arguments.length-1);for(var n=1,i=arguments.length;i>n;n++)r[n-1]=arguments[n]}var a=0;return e.replace(/%@([0-9]+)?/g,function(e,t){return t=t?parseInt(t,10)-1:a++,e=r[t],null===e?"(null)":void 0===e?"":d(e)})}function a(e,t){return(!f(t)||arguments.length>2)&&(t=Array.prototype.slice.call(arguments,1)),e=p.STRINGS[e]||e,i(e,t)}function s(e){return e.split(/\s+/)}function o(e){return C.get(e)}function u(e){return g.get(e)}function l(e){return y.get(e)}function c(e){return _.get(e)}function h(e){return w.get(e)}function m(e){return x.get(e)}var p=e["default"],f=t.isArray,d=t.inspect,v=r["default"],b=/[ _]/g,g=new v(1e3,function(e){return o(e).replace(b,"-")}),y=new v(1e3,function(e){return e.replace(O,function(e,t,r){return r?r.toUpperCase():""}).replace(/^([A-Z])/,function(e){return e.toLowerCase()})}),_=new v(1e3,function(e){for(var t=e.split("."),r=[],n=0,i=t.length;i>n;n++){var a=l(t[n]);r.push(a.charAt(0).toUpperCase()+a.substr(1))}return r.join(".")}),w=new v(1e3,function(e){return e.replace(P,"$1_$2").replace(A,"_").toLowerCase()}),x=new v(1e3,function(e){return e.charAt(0).toUpperCase()+e.substr(1)}),C=new v(1e3,function(e){return e.replace(E,"$1_$2").toLowerCase()}),E=/([a-z\d])([A-Z])/g,O=/(\-|_|\.|\s)+(.)?/g,P=/([a-z\d])([A-Z]+)/g,A=/\-|\s+/g;p.STRINGS={},n["default"]={fmt:i,loc:a,w:s,decamelize:o,dasherize:u,camelize:l,classify:c,underscore:h,capitalize:m},n.fmt=i,n.loc=a,n.w=s,n.decamelize=o,n.dasherize=u,n.camelize=l,n.classify=c,n.underscore=h,n.capitalize=m}),e("ember-runtime/system/subarray",["ember-metal/error","ember-metal/enumerable_utils","exports"],function(e,t,r){"use strict";function n(e,t){this.type=e,this.count=t}function i(e){arguments.length<1&&(e=0),this._operations=e>0?[new n(o,e)]:[]}var a=e["default"],s=t["default"],o="r",u="f";r["default"]=i,i.prototype={addItem:function(e,t){var r=-1,i=t?o:u,a=this;return this._findOperation(e,function(s,u,l,c,h){var m,p;i===s.type?++s.count:e===l?a._operations.splice(u,0,new n(i,1)):(m=new n(i,1),p=new n(s.type,c-e+1),s.count=e-l,a._operations.splice(u+1,0,m,p)),t&&(r=s.type===o?h+(e-l):h),a._composeAt(u)},function(e){a._operations.push(new n(i,1)),t&&(r=e),a._composeAt(a._operations.length-1)}),r},removeItem:function(e){var t=-1,r=this;return this._findOperation(e,function(n,i,a,s,u){n.type===o&&(t=u+(e-a)),n.count>1?--n.count:(r._operations.splice(i,1),r._composeAt(i))},function(){throw new a("Can't remove an item that has never been added.")}),t},_findOperation:function(e,t,r){var n,i,a,s,u,l=0;for(n=s=0,i=this._operations.length;i>n;s=u+1,++n){if(a=this._operations[n],u=s+a.count-1,e>=s&&u>=e)return void t(a,n,s,u,l);a.type===o&&(l+=a.count)}r(l)},_composeAt:function(e){var t,r=this._operations[e];r&&(e>0&&(t=this._operations[e-1],t.type===r.type&&(r.count+=t.count,this._operations.splice(e-1,1),--e)),er)){var n,a,o=this._findArrayOperation(e),u=o.operation,c=o.index,h=o.rangeStart;a=new i(l,r,t),u?o.split?(this._split(c,e-h,a),n=c+1):(this._operations.splice(c,0,a),n=c):(this._operations.push(a),n=c),this._composeInsert(n)}},removeItems:function(e,t){if(!(1>t)){var r,n,a=this._findArrayOperation(e),s=a.index,o=a.rangeStart;return r=new i(c,t),a.split?(this._split(s,e-o,r),n=s+1):(this._operations.splice(s,0,r),n=s),this._composeDelete(n)}},apply:function(e){var t=[],r=0;o(this._operations,function(n,i){e(n.items,r,n.type,i),n.type!==c&&(r+=n.count,t=t.concat(n.items))}),this._operations=[new i(u,t.length,t)]},_findArrayOperation:function(e){var t,r,n,i,s,o=!1;for(t=n=0,s=this._operations.length;s>t;++t)if(r=this._operations[t],r.type!==c){if(i=n+r.count-1,e===n)break;if(e>n&&i>=e){o=!0;break}n=i+1}return new a(r,t,o,n)},_split:function(e,t,r){var n=this._operations[e],a=n.items.slice(t),s=new i(n.type,a.length,a);n.count=t,n.items=n.items.slice(0,t),this._operations.splice(e+1,0,r,s)},_composeInsert:function(e){var t=this._operations[e],r=this._operations[e-1],n=this._operations[e+1],i=r&&r.type,a=n&&n.type;i===l?(r.count+=t.count,r.items=r.items.concat(t.items),a===l?(r.count+=n.count,r.items=r.items.concat(n.items),this._operations.splice(e,2)):this._operations.splice(e,1)):a===l&&(t.count+=n.count,t.items=t.items.concat(n.items),this._operations.splice(e+1,1))},_composeDelete:function(e){var t,r,n,i=this._operations[e],a=i.count,s=this._operations[e-1],o=s&&s.type,u=!1,h=[];o===c&&(i=s,e-=1);for(var m=e+1;a>0;++m)t=this._operations[m],r=t.type,n=t.count,r!==c?(n>a?(h=h.concat(t.items.splice(0,a)),t.count-=a,m-=1,n=a,a=0):(n===a&&(u=!0),h=h.concat(t.items),a-=n),r===l&&(i.count-=n)):i.count+=n;return i.count>0?this._operations.splice(e+1,m-1-e):this._operations.splice(e,u?2:1),h},toString:function(){var e="";return o(this._operations,function(t){e+=" "+t.type+":"+t.count}),e.substring(1)}}}),e("ember-template-compiler",["ember-metal/core","ember-template-compiler/system/precompile","ember-template-compiler/system/compile","ember-template-compiler/system/template","ember-template-compiler/plugins","ember-template-compiler/plugins/transform-each-in-to-hash","ember-template-compiler/plugins/transform-with-as-to-hash","ember-template-compiler/compat","exports"],function(e,t,r,n,i,a,s,o,u){"use strict";var l=e["default"],c=t["default"],h=r["default"],m=n["default"],p=i.registerPlugin,f=a["default"],d=s["default"];p("ast",d),p("ast",f),u._Ember=l,u.precompile=c,u.compile=h,u.template=m,u.registerPlugin=p}),e("ember-template-compiler/compat",["ember-metal/core","ember-template-compiler/compat/precompile","ember-template-compiler/system/compile","ember-template-compiler/system/template"],function(e,t,r,n){"use strict";var i=e["default"],a=t["default"],s=r["default"],o=n["default"],u=i.Handlebars=i.Handlebars||{};u.precompile=a,u.compile=s,u.template=o}),e("ember-template-compiler/compat/precompile",["exports"],function(e){"use strict";var r,n;e["default"]=function(e){if((!r||!n)&&i.__loader.registry["htmlbars-compiler/compiler"]){var a=t("htmlbars-compiler/compiler");r=a.compile,n=a.compileSpec}if(!r||!n)throw new Error("Cannot call `precompile` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `precompile`.");var s=void 0===arguments[1]?!0:arguments[1],o=s?r:n; +return o(e)}}),e("ember-template-compiler/plugins",["exports"],function(e){"use strict";function t(e,t){if(!r[e])throw new Error('Attempting to register "'+t+'" as "'+e+'" which is not a valid HTMLBars plugin type.');r[e].push(t)}var r={ast:[]};e.registerPlugin=t,e["default"]=r}),e("ember-template-compiler/plugins/transform-each-in-to-hash",["exports"],function(e){"use strict";function t(){this.syntax=null}t.prototype.transform=function(e){var t=this,r=new t.syntax.Walker,n=t.syntax.builders;return r.visit(e,function(e){if(t.validate(e)){if(e.program&&e.program.blockParams.length)throw new Error("You cannot use keyword (`{{each foo in bar}}`) and block params (`{{each bar as |foo|}}`) at the same time.");var r=e.sexpr.params.splice(0,2),i=r[0].original;e.sexpr.hash||(e.sexpr.hash=n.hash()),e.sexpr.hash.pairs.push(n.pair("keyword",n.string(i)))}}),e},t.prototype.validate=function(e){return("BlockStatement"===e.type||"MustacheStatement"===e.type)&&"each"===e.sexpr.path.original&&3===e.sexpr.params.length&&"PathExpression"===e.sexpr.params[1].type&&"in"===e.sexpr.params[1].original},e["default"]=t}),e("ember-template-compiler/plugins/transform-with-as-to-hash",["exports"],function(e){"use strict";function t(){this.syntax=null}t.prototype.transform=function(e){var t=this,r=new t.syntax.Walker;return r.visit(e,function(e){if(t.validate(e)){if(e.program&&e.program.blockParams.length)throw new Error("You cannot use keyword (`{{with foo as bar}}`) and block params (`{{with foo as |bar|}}`) at the same time.");var r=e.sexpr.params.splice(1,2),n=r[1].original;e.program.blockParams=[n]}}),e},t.prototype.validate=function(e){return"BlockStatement"===e.type&&"with"===e.sexpr.path.original&&3===e.sexpr.params.length&&"PathExpression"===e.sexpr.params[1].type&&"as"===e.sexpr.params[1].original},e["default"]=t}),e("ember-template-compiler/system/compile",["ember-template-compiler/system/compile_options","ember-template-compiler/system/template","exports"],function(e,r,n){"use strict";var a,s=e["default"],o=r["default"];n["default"]=function(e){if(!a&&i.__loader.registry["htmlbars-compiler/compiler"]&&(a=t("htmlbars-compiler/compiler").compile),!a)throw new Error("Cannot call `compile` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `compile`.");var r=a(e,s());return o(r)}}),e("ember-template-compiler/system/compile_options",["ember-metal/core","ember-template-compiler/plugins","exports"],function(e,t,r){"use strict";var n=(e["default"],t["default"]);r["default"]=function(){var e=!0;return{disableComponentGeneration:e,plugins:n}}}),e("ember-template-compiler/system/precompile",["ember-template-compiler/system/compile_options","exports"],function(e,r){"use strict";var n,a=e["default"];r["default"]=function(e){if(!n&&i.__loader.registry["htmlbars-compiler/compiler"]&&(n=t("htmlbars-compiler/compiler").compileSpec),!n)throw new Error("Cannot call `compileSpec` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `compileSpec`.");return n(e,a())}}),e("ember-template-compiler/system/template",["exports"],function(e){"use strict";e["default"]=function(e){return e.isTop=!0,e.isMethod=!1,e}}),e("ember-views",["ember-runtime","ember-views/system/jquery","ember-views/system/utils","ember-views/system/render_buffer","ember-views/system/ext","ember-views/views/states","ember-views/views/core_view","ember-views/views/view","ember-views/views/container_view","ember-views/views/collection_view","ember-views/views/component","ember-views/system/event_dispatcher","ember-views/mixins/view_target_action_support","ember-views/component_lookup","ember-views/views/checkbox","ember-views/mixins/text_support","ember-views/views/text_field","ember-views/views/text_area","ember-views/views/bound_view","ember-views/views/simple_bound_view","ember-views/views/metamorph_view","ember-views/views/select","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h,m,p,f,d,v,b,g,y,_,w,x){"use strict";var C=e["default"],E=t["default"],O=r.isSimpleClick,P=r.getViewClientRects,A=r.getViewBoundingClientRect,N=n["default"],S=a.cloneStates,T=a.states,k=s["default"],V=o["default"],I=u["default"],j=l["default"],M=c["default"],R=h["default"],D=m["default"],L=p["default"],F=f["default"],B=d["default"],H=v["default"],z=b["default"],q=g["default"],U=y["default"],W=_["default"],K=_._SimpleMetamorphView,G=_._Metamorph,Q=w.Select,$=w.SelectOption,Y=w.SelectOptgroup;C.$=E,C.ViewTargetActionSupport=D,C.RenderBuffer=N;var X=C.ViewUtils={};X.isSimpleClick=O,X.getViewClientRects=P,X.getViewBoundingClientRect=A,C.CoreView=k,C.View=V,C.View.states=T,C.View.cloneStates=S,C.Checkbox=F,C.TextField=H,C.TextArea=z,C._SimpleBoundView=U,C._BoundView=q,C._SimpleMetamorphView=K,C._MetamorphView=W,C._Metamorph=G,C.Select=Q,C.SelectOption=$,C.SelectOptgroup=Y,C.TextSupport=B,C.ComponentLookup=L,C.ContainerView=I,C.CollectionView=j,C.Component=M,C.EventDispatcher=R,x["default"]=C}),e("ember-views/attr_nodes/attr_node",["ember-metal/streams/utils","ember-metal/run_loop","exports"],function(e,t,r){"use strict";function n(e,t){this.init(e,t)}var i=e.read,a=e.subscribe,s=e.unsubscribe,o=t["default"];n.prototype.init=function(e,t){this.isView=!0,this.tagName="",this.classNameBindings=[],this.attrName=e,this.attrValue=t,this.isDirty=!0,this.lastValue=null,a(this.attrValue,this.rerender,this)},n.prototype.renderIfDirty=function(){if(this.isDirty){var e=i(this.attrValue);e!==this.lastValue?this._renderer.renderTree(this,this._parentView):this.isDirty=!1}},n.prototype.render=function(){this.isDirty=!1;var e=i(this.attrValue);this._morph.setContent(e),this.lastValue=e},n.prototype.rerender=function(){this.isDirty=!0,o.schedule("render",this,this.renderIfDirty)},n.prototype.destroy=function(){this.isDirty=!1,s(this.attrValue,this.rerender,this);var e=this._parentView;e&&e.removeChild(this)},r["default"]=n}),e("ember-views/attr_nodes/legacy_bind",["./attr_node","ember-runtime/system/string","ember-metal/utils","ember-metal/streams/utils","ember-metal/platform/create","exports"],function(e,t,r,n,i,a){"use strict";function s(e,t){this.init(e,t)}var o=e["default"],u=(t.fmt,r.typeOf),l=n.read,c=i["default"];s.prototype=c(o.prototype),s.prototype.render=function(){this.isDirty=!1;{var e=l(this.attrValue);u(e)}void 0===e&&(e=null),"value"===this.attrName&&null===e&&(e=""),this._morph.setContent(e),this.lastValue=e},a["default"]=s}),e("ember-views/component_lookup",["ember-runtime/system/object","exports"],function(e,t){"use strict";var r=e["default"];t["default"]=r.extend({lookupFactory:function(e,t){t=t||this.container;var r="component:"+e,n="template:components/"+e,a=t&&t.has(n);a&&t.injection(r,"layout",n);var s=t.lookupFactory(r);return a||s?(s||(t.register(r,i.Component),s=t.lookupFactory(r)),s):void 0}})}),e("ember-views/mixins/component_template_deprecation",["ember-metal/core","ember-metal/property_get","ember-metal/mixin","exports"],function(e,t,r,n){"use strict";var i=(e["default"],t.get),a=r.Mixin;n["default"]=a.create({willMergeMixin:function(e){this._super.apply(this,arguments);var t,r,n=e.layoutName||e.layout||i(this,"layoutName");e.templateName&&!n&&(t="templateName",r="layoutName",e.layoutName=e.templateName,delete e.templateName),e.template&&!n&&(t="template",r="layout",e.layout=e.template,delete e.template)}})}),e("ember-views/mixins/text_support",["ember-metal/property_get","ember-metal/property_set","ember-metal/mixin","ember-runtime/mixins/target_action_support","exports"],function(e,t,r,n,i){"use strict";function a(e,t,r){var n=s(t,e),i=s(t,"onEvent"),a=s(t,"value");(i===e||"keyPress"===i&&"key-press"===e)&&t.sendAction("action",a),t.sendAction(e,a),(n||i===e)&&(s(t,"bubbles")||r.stopPropagation())}var s=e.get,o=t.set,u=r.Mixin,l=n["default"],c=u.create(l,{value:"",attributeBindings:["autocapitalize","autocorrect","autofocus","disabled","form","maxlength","placeholder","readonly","required","selectionDirection","spellcheck","tabindex","title"],placeholder:null,disabled:!1,maxlength:null,init:function(){this._super(),this.on("paste",this,this._elementValueDidChange),this.on("cut",this,this._elementValueDidChange),this.on("input",this,this._elementValueDidChange)},action:null,onEvent:"enter",bubbles:!1,interpretKeyEvents:function(e){var t=c.KEY_EVENTS,r=t[e.keyCode];return this._elementValueDidChange(),r?this[r](e):void 0},_elementValueDidChange:function(){o(this,"value",this.$().val())},change:function(e){this._elementValueDidChange(e)},insertNewline:function(e){a("enter",this,e),a("insert-newline",this,e)},cancel:function(e){a("escape-press",this,e)},focusIn:function(e){a("focus-in",this,e)},focusOut:function(e){this._elementValueDidChange(e),a("focus-out",this,e)},keyPress:function(e){a("key-press",this,e)},keyUp:function(e){this.interpretKeyEvents(e),this.sendAction("key-up",s(this,"value"),e)},keyDown:function(e){this.sendAction("key-down",s(this,"value"),e)}});c.KEY_EVENTS={13:"insertNewline",27:"cancel"},i["default"]=c}),e("ember-views/mixins/view_target_action_support",["ember-metal/mixin","ember-runtime/mixins/target_action_support","ember-metal/alias","exports"],function(e,t,r,n){"use strict";var i=e.Mixin,a=t["default"],s=r["default"];n["default"]=i.create(a,{target:s("controller"),actionContext:s("context")})}),e("ember-views/streams/class_name_binding",["ember-metal/streams/utils","ember-metal/property_get","ember-runtime/system/string","ember-metal/utils","exports"],function(e,t,r,n,i){"use strict";function a(e){var t,r,n=e.split(":"),i=n[0],a="";return n.length>1&&(t=n[1],3===n.length&&(r=n[2]),a=":"+t,r&&(a+=":"+r)),{path:i,classNames:a,className:""===t?void 0:t,falsyClassName:r}}function s(e,t,r,n){if(m(t)&&(t=0!==c(t,"length")),r||n)return r&&t?r:n&&!t?n:null;if(t===!0){var i=e.split(".");return h(i[i.length-1])}return t!==!1&&null!=t?t:null}function o(e,t,r){r=r||"";var n=a(t);if(""===n.path)return s(n.path,!0,n.className,n.falsyClassName);var i=e.getStream(r+n.path);return u(i,function(){return s(n.path,l(i),n.className,n.falsyClassName)})}var u=e.chain,l=e.read,c=t.get,h=r.dasherize,m=n.isArray;i.parsePropertyPath=a,i.classStringForValue=s,i.streamifyClassNameBinding=o}),e("ember-views/streams/conditional_stream",["ember-metal/streams/stream","ember-metal/streams/utils","ember-metal/platform","exports"],function(e,t,r,n){"use strict";function i(e,t,r){this.init(),this.oldTestResult=void 0,this.test=e,this.consequent=t,this.alternate=r}var a=e["default"],s=t.read,o=t.subscribe,u=t.unsubscribe,l=r.create;i.prototype=l(a.prototype),i.prototype.valueFn=function(){var e=this.oldTestResult,t=!!s(this.test);if(t!==e){switch(e){case!0:u(this.consequent,this.notify,this);break;case!1:u(this.alternate,this.notify,this);break;case void 0:o(this.test,this.notify,this)}switch(t){case!0:o(this.consequent,this.notify,this);break;case!1:o(this.alternate,this.notify,this)}this.oldTestResult=t}return s(t?this.consequent:this.alternate)},n["default"]=i}),e("ember-views/streams/context_stream",["ember-metal/core","ember-metal/merge","ember-metal/platform","ember-metal/path_cache","ember-metal/streams/stream","ember-metal/streams/simple","exports"],function(e,t,r,n,i,a,s){"use strict";function o(e){this.init(),this.view=e}var u=e["default"],l=t["default"],c=r.create,h=n.isGlobal,m=i["default"],p=a["default"];o.prototype=c(m.prototype),l(o.prototype,{value:function(){},_makeChildStream:function(e){var t;return""===e||"this"===e?t=this.view._baseContext:h(e)&&u.lookup[e]?(t=new p(u.lookup[e]),t._isGlobal=!0):t=new p(e in this.view._keywords?this.view._keywords[e]:this.view._baseContext.get(e)),t._isRoot=!0,"controller"===e&&(t._isController=!0),t}}),s["default"]=o}),e("ember-views/streams/key_stream",["ember-metal/core","ember-metal/merge","ember-metal/platform","ember-metal/property_get","ember-metal/property_set","ember-metal/observer","ember-metal/streams/stream","ember-metal/streams/utils","exports"],function(e,t,r,n,i,a,s,o,u){"use strict";function l(e,t){this.init(),this.source=e,this.obj=void 0,this.key=t,g(e)&&e.subscribe(this._didChange,this)}var c=(e["default"],t["default"]),h=r.create,m=n.get,p=i.set,f=a.addObserver,d=a.removeObserver,v=s["default"],b=o.read,g=o.isStream;l.prototype=h(v.prototype),c(l.prototype,{valueFn:function(){var e=this.obj,t=b(this.source);return t!==e&&(e&&"object"==typeof e&&d(e,this.key,this,this._didChange),t&&"object"==typeof t&&f(t,this.key,this,this._didChange),this.obj=t),t?m(t,this.key):void 0},setValue:function(e){this.obj&&p(this.obj,this.key,e)},setSource:function(e){var t=this.source;e!==t&&(g(t)&&t.unsubscribe(this._didChange,this),g(e)&&e.subscribe(this._didChange,this),this.source=e,this.notify())},_didChange:function(){this.notify()},_super$destroy:v.prototype.destroy,destroy:function(){return this._super$destroy()?(g(this.source)&&this.source.unsubscribe(this._didChange,this),this.obj&&"object"==typeof this.obj&&d(this.obj,this.key,this,this._didChange),this.source=void 0,this.obj=void 0,!0):void 0}}),u["default"]=l,v.prototype._makeChildStream=function(e){return new l(this,e)}}),e("ember-views/streams/utils",["ember-metal/core","ember-metal/property_get","ember-metal/path_cache","ember-runtime/system/string","ember-metal/streams/utils","ember-views/views/view","ember-runtime/mixins/controller","exports"],function(e,t,r,n,i,a,s,o){"use strict";function u(e,t){var r,n=m(e);return r="string"==typeof n?h(n)?c(null,n):t.lookupFactory("view:"+n):n}function l(e){if(p(e)){var t=e.value();if(!e._isController)for(;f.detect(t);)t=c(t,"model");return t}return e}var c=(e["default"],t.get),h=r.isGlobal,m=(n.fmt,i.read),p=i.isStream,f=(a["default"],s["default"]);o.readViewFactory=u,o.readUnwrappedModel=l}),e("ember-views/system/action_manager",["exports"],function(e){"use strict";function t(){}t.registeredActions={},e["default"]=t}),e("ember-views/system/event_dispatcher",["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/is_none","ember-metal/run_loop","ember-metal/utils","ember-runtime/system/string","ember-runtime/system/object","ember-views/system/jquery","ember-views/system/action_manager","ember-views/views/view","ember-metal/merge","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h,m){"use strict";var p=(e["default"],t.get),f=r.set,d=n["default"],v=i["default"],b=a.typeOf,g=(s.fmt,o["default"]),y=u["default"],_=l["default"],w=c["default"],x=h["default"];m["default"]=g.extend({events:{touchstart:"touchStart",touchmove:"touchMove",touchend:"touchEnd",touchcancel:"touchCancel",keydown:"keyDown",keyup:"keyUp",keypress:"keyPress",mousedown:"mouseDown",mouseup:"mouseUp",contextmenu:"contextMenu",click:"click",dblclick:"doubleClick",mousemove:"mouseMove",focusin:"focusIn",focusout:"focusOut",mouseenter:"mouseEnter",mouseleave:"mouseLeave",submit:"submit",input:"input",change:"change",dragstart:"dragStart",drag:"drag",dragenter:"dragEnter",dragleave:"dragLeave",dragover:"dragOver",drop:"drop",dragend:"dragEnd"},rootElement:"body",canDispatchToEventManager:!0,setup:function(e,t){var r,n=p(this,"events");x(n,e||{}),d(t)||f(this,"rootElement",t),t=y(p(this,"rootElement")),t.addClass("ember-application");for(r in n)n.hasOwnProperty(r)&&this.setupHandler(t,r,n[r])},setupHandler:function(e,t,r){var n=this;e.on(t+".ember",".ember-view",function(e,t){var i=w.views[this.id],a=!0,s=n.canDispatchToEventManager?n._findNearestEventManager(i,r):null;return s&&s!==t?a=n._dispatchEvent(s,e,r,i):i&&(a=n._bubbleEvent(i,e,r)),a}),e.on(t+".ember","[data-ember-action]",function(e){var t=y(e.currentTarget).attr("data-ember-action"),n=_.registeredActions[t];return n&&n.eventName===r?n.handler(e):void 0})},_findNearestEventManager:function(e,t){for(var r=null;e&&(r=p(e,"eventManager"),!r||!r[t]);)e=p(e,"parentView");return r},_dispatchEvent:function(e,t,r,n){var i=!0,a=e[r];return"function"===b(a)?(i=v(e,a,t,n),t.stopPropagation()):i=this._bubbleEvent(n,t,r),i},_bubbleEvent:function(e,t,r){return v.join(e,e.handleEvent,r,t)},destroy:function(){var e=p(this,"rootElement");return y(e).off(".ember","**").removeClass("ember-application"),this._super()},toString:function(){return"(EventDispatcher)"}})}),e("ember-views/system/ext",["ember-metal/run_loop"],function(e){"use strict";var t=e["default"];t._addQueue("render","actions"),t._addQueue("afterRender","render")}),e("ember-views/system/jquery",["ember-metal/core","ember-metal/enumerable_utils","exports"],function(e,t,n){"use strict";var i=e["default"],a=t.forEach,s=i.imports&&i.imports.jQuery||this&&this.jQuery;if(s||"function"!=typeof r||(s=r("jquery")),s){var o=["dragstart","drag","dragenter","dragleave","dragover","drop","dragend"];a(o,function(e){s.event.fixHooks[e]={props:["dataTransfer"]}})}n["default"]=s}),e("ember-views/system/render_buffer",["ember-views/system/jquery","morph","ember-metal/core","ember-metal/platform","morph/dom-helper/prop","exports"],function(e,t,r,n,i,a){"use strict";function s(e,t){if("TABLE"===t.tagName){var r=v.exec(e);if(r)return d[r[1].toLowerCase()]}}function o(){this.seen=p(null),this.list=[]}function u(e){return e&&b.test(e)?e.replace(g,""):e}function l(e){var t={"<":"<",">":">",'"':""","'":"'","`":"`"},r=function(e){return t[e]||"&"},n=e.toString();return _.test(n)?n.replace(y,r):n}function c(e,t){this.tagName=e,this._outerContextualElement=t,this.buffer=null,this.childViews=[],this.dom=new m}var h=e["default"],m=t.DOMHelper,p=(r["default"],n.create),f=i.normalizeProperty,d={tr:document.createElement("tbody"),col:document.createElement("colgroup")},v=/(?:"'`]/g,_=/[&<>"'`]/,w=function(){var e=document.createElement("div"),t=document.createElement("input");return t.setAttribute("name","foo"),e.appendChild(t),!!e.innerHTML.match("foo")}();a["default"]=function(e,t){return new c(e,t)},c.prototype={reset:function(e,t){this.tagName=e,this.buffer=null,this._element=null,this._outerContextualElement=t,this.elementClasses=null,this.elementId=null,this.elementAttributes=null,this.elementProperties=null,this.elementTag=null,this.elementStyle=null,this.childViews.length=0},_element:null,_outerContextualElement:null,elementClasses:null,classes:null,elementId:null,elementAttributes:null,elementProperties:null,elementTag:null,elementStyle:null,pushChildView:function(e){var t=this.childViews.length;this.childViews[t]=e,this.push("")},hydrateMorphs:function(e){for(var t=this.childViews,r=this._element,n=0,i=t.length;i>n;n++){var a=t[n],s=r.querySelector("#morph-"+n),o=s.parentNode;a._morph=this.dom.insertMorphBefore(o,s,1===o.nodeType?o:e),o.removeChild(s)}},push:function(e){return"string"==typeof e?(null===this.buffer&&(this.buffer=""),this.buffer+=e):this.buffer=e,this},addClass:function(e){return this.elementClasses=this.elementClasses||new o,this.elementClasses.add(e),this.classes=this.elementClasses.list,this},setClasses:function(e){this.elementClasses=null;var t,r=e.length;for(t=0;r>t;t++)this.addClass(e[t])},id:function(e){return this.elementId=e,this},attr:function(e,t){var r=this.elementAttributes=this.elementAttributes||{};return 1===arguments.length?r[e]:(r[e]=t,this)},removeAttr:function(e){var t=this.elementAttributes;return t&&delete t[e],this},prop:function(e,t){var r=this.elementProperties=this.elementProperties||{};return 1===arguments.length?r[e]:(r[e]=t,this)},removeProp:function(e){var t=this.elementProperties;return t&&delete t[e],this},style:function(e,t){return this.elementStyle=this.elementStyle||{},this.elementStyle[e]=t,this},generateElement:function(){var e,t,r,n=this.tagName,i=this.elementId,a=this.classes,s=this.elementAttributes,o=this.elementProperties,c=this.elementStyle,h="";r=s&&s.name&&!w?"<"+u(n)+' name="'+l(s.name)+'">':n;var m=this.dom.createElement(r,this.outerContextualElement());if(i&&(this.dom.setAttribute(m,"id",i),this.elementId=null),a&&(this.dom.setAttribute(m,"class",a.join(" ")),this.classes=null,this.elementClasses=null),c){for(t in c)h+=t+":"+c[t]+";";this.dom.setAttribute(m,"style",h),this.elementStyle=null}if(s){for(e in s)this.dom.setAttribute(m,e,s[e]);this.elementAttributes=null}if(o){for(t in o){var p=f(m,t.toLowerCase())||t;this.dom.setPropertyStrict(m,p,o[t])}this.elementProperties=null}this._element=m},element:function(){var e=this.innerContent();if(null===e)return this._element;var t=this.innerContextualElement(e);if(this.dom.detectNamespace(t),this._element||(this._element=document.createDocumentFragment()),e.nodeType)this._element.appendChild(e);else{var r;for(r=this.dom.parseHTML(e,t);r[0];)this._element.appendChild(r[0])}return this.childViews.length>0&&this.hydrateMorphs(t),this._element},string:function(){if(this._element){var e=this.element(),t=e.outerHTML;return"undefined"==typeof t?h("

").append(e).html():t}return this.innerString()},outerContextualElement:function(){return this._outerContextualElement||(this.outerContextualElement=document.body),this._outerContextualElement},innerContextualElement:function(e){var t;t=this._element&&1===this._element.nodeType?this._element:this.outerContextualElement();var r;return e&&(r=s(e,t)),r||t},innerString:function(){var e=this.innerContent();return e&&!e.nodeType?e:void 0},innerContent:function(){return this.buffer}}}),e("ember-views/system/renderer",["ember-metal/core","ember-metal-views/renderer","ember-metal/platform","ember-views/system/render_buffer","ember-metal/run_loop","ember-metal/property_set","ember-metal/property_get","ember-metal/instrumentation","exports"],function(e,t,r,n,i,a,s,o,u){"use strict";function l(){this.buffer=m(),this._super$constructor()}var c=(e["default"],t["default"]),h=r.create,m=n["default"],p=i["default"],f=a.set,d=s.get,v=o._instrumentStart,b=o.subscribers;l.prototype=h(c.prototype),l.prototype.constructor=l,l.prototype._super$constructor=c,l.prototype.scheduleRender=function(e,t){return p.scheduleOnce("render",e,t)},l.prototype.cancelRender=function(e){p.cancel(e)},l.prototype.createElement=function(e,t){var r=e.tagName;void 0===r&&(r=d(e,"tagName"));{var n=e.classNameBindings;""===r&&n&&n.length>0}(null===r||void 0===r)&&(r="div");var i=e.buffer=this.buffer;i.reset(r,t),e.beforeRender&&e.beforeRender(i),""!==r&&(e.applyAttributesToBuffer&&e.applyAttributesToBuffer(i),i.generateElement()),e.render&&e.render(i),e.afterRender&&e.afterRender(i);var a=i.element();return e.buffer=null,a&&1===a.nodeType&&(e.element=a),a},l.prototype.destroyView=function(e){e.removedFromDOM=!0,e.destroy()},l.prototype.childViews=function(e){return e._childViews},c.prototype.willCreateElement=function(e){b.length&&e.instrumentDetails&&(e._instrumentEnd=v("render."+e.instrumentName,function(){var t={};return e.instrumentDetails(t),t})),e._transitionTo&&e._transitionTo("inBuffer")},c.prototype.didCreateElement=function(e){e._transitionTo&&e._transitionTo("hasElement"),e._instrumentEnd&&e._instrumentEnd()},c.prototype.willInsertElement=function(e){e.trigger&&e.trigger("willInsertElement")},c.prototype.didInsertElement=function(e){e._transitionTo&&e._transitionTo("inDOM"),e.trigger&&e.trigger("didInsertElement")},c.prototype.willRemoveElement=function(){},c.prototype.willDestroyElement=function(e){e.trigger&&e.trigger("willDestroyElement"),e.trigger&&e.trigger("willClearRender")},c.prototype.didDestroyElement=function(e){f(e,"element",null),e._transitionTo&&e._transitionTo("preRender")},u["default"]=l}),e("ember-views/system/sanitize_attribute_value",["exports"],function(e){"use strict";var t,r={"javascript:":!0,"vbscript:":!0},n={A:!0,BODY:!0,LINK:!0,IMG:!0,IFRAME:!0},i={href:!0,src:!0,background:!0};e.badAttributes=i,e["default"]=function(e,a,s){var o;return t||(t=document.createElement("a")),o=e?e.tagName:null,s&&s.toHTML?s.toHTML():(null===o||n[o])&&i[a]&&(t.href=s,r[t.protocol]===!0)?"unsafe:"+s:s}}),e("ember-views/system/utils",["exports"],function(e){"use strict";function t(e){var t=e.shiftKey||e.metaKey||e.altKey||e.ctrlKey,r=e.which>1;return!t&&!r}function r(e){var t=document.createRange();return t.setStartAfter(e._morph.start),t.setEndBefore(e._morph.end),t}function n(e){var t=r(e);return t.getClientRects()}function i(e){var t=r(e);return t.getBoundingClientRect()}e.isSimpleClick=t,e.getViewClientRects=n,e.getViewBoundingClientRect=i}),e("ember-views/views/bound_view",["ember-metal/property_get","ember-metal/property_set","ember-metal/merge","ember-htmlbars/utils/string","ember-views/views/states","ember-views/views/metamorph_view","exports"],function(e,t,r,n,i,a,s){"use strict";function o(){return this}var u=e.get,l=t.set,c=r["default"],h=n.escapeExpression,m=n.SafeString,p=i.cloneStates,f=i.states,d=a["default"],v=p(f);c(v._default,{rerenderIfNeeded:o}),c(v.inDOM,{rerenderIfNeeded:function(e){e.normalizedValue()!==e._lastNormalizedValue&&e.rerender()}});var b=d.extend({instrumentName:"bound",_states:v,shouldDisplayFunc:null,preserveContext:!1,previousContext:null,displayTemplate:null,inverseTemplate:null,lazyValue:null,normalizedValue:function(){var e=this.lazyValue.value(),t=u(this,"valueNormalizerFunc");return t?t(e):e},rerenderIfNeeded:function(){this.currentState.rerenderIfNeeded(this)},render:function(e){var t=u(this,"isEscaped"),r=u(this,"shouldDisplayFunc"),n=u(this,"preserveContext"),i=u(this,"previousContext"),a=u(this,"inverseTemplate"),s=u(this,"displayTemplate"),o=this.normalizedValue();if(this._lastNormalizedValue=o,r(o))if(l(this,"template",s),n)l(this,"_context",i);else{if(!s)return null===o||void 0===o?o="":o instanceof m||(o=String(o)),t&&(o=h(o)),void e.push(o);l(this,"_context",o)}else a?(l(this,"template",a),n?l(this,"_context",i):l(this,"_context",o)):l(this,"template",function(){return""});return this._super(e)}});s["default"]=b}),e("ember-views/views/checkbox",["ember-metal/property_get","ember-metal/property_set","ember-views/views/view","exports"],function(e,t,r,n){"use strict";var i=e.get,a=t.set,s=r["default"];n["default"]=s.extend({instrumentDisplay:'{{input type="checkbox"}}',classNames:["ember-checkbox"],tagName:"input",attributeBindings:["type","checked","indeterminate","disabled","tabindex","name","autofocus","required","form"],type:"checkbox",checked:!1,disabled:!1,indeterminate:!1,init:function(){this._super(),this.on("change",this,this._updateElementValue)},didInsertElement:function(){this._super(),i(this,"element").indeterminate=!!i(this,"indeterminate")},_updateElementValue:function(){a(this,"checked",this.$().prop("checked"))}})}),e("ember-views/views/collection_view",["ember-metal/core","ember-metal/binding","ember-metal/property_get","ember-metal/property_set","ember-runtime/system/string","ember-views/views/container_view","ember-views/views/core_view","ember-views/views/view","ember-metal/mixin","ember-views/streams/utils","ember-runtime/mixins/array","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h){"use strict";var m=(e["default"],t.isGlobalPath),p=r.get,f=n.set,d=(i.fmt,a["default"]),v=s["default"],b=o["default"],g=u.observer,y=u.beforeObserver,_=l.readViewFactory,w=(c["default"],d.extend({content:null,emptyViewClass:b,emptyView:null,itemViewClass:b,init:function(){var e=this._super();return this._contentDidChange(),e},_contentWillChange:y("content",function(){var e=this.get("content");e&&e.removeArrayObserver(this);var t=e?p(e,"length"):0;this.arrayWillChange(e,0,t)}),_contentDidChange:g("content",function(){var e=p(this,"content");e&&(this._assertArrayLike(e),e.addArrayObserver(this));var t=e?p(e,"length"):0;this.arrayDidChange(e,0,null,t)}),_assertArrayLike:function(){},destroy:function(){if(this._super()){var e=p(this,"content");return e&&e.removeArrayObserver(this),this._createdEmptyView&&this._createdEmptyView.destroy(),this}},arrayWillChange:function(e,t,r){var n=p(this,"emptyView");n&&n instanceof b&&n.removeFromParent();var i,a,s=this._childViews;for(a=t+r-1;a>=t;a--)i=s[a],i.destroy()},arrayDidChange:function(e,t,r,n){var i,a,s,o,u,l,c,h=[];if(o=e?p(e,"length"):0)for(c=this._itemViewProps||{},u=p(this,"itemViewClass"),u=_(u,this.container),s=t;t+n>s;s++)a=e.objectAt(s),c.content=a,c._blockArguments=[a],c.contentIndex=s,i=this.createChildView(u,c),h.push(i);else{if(l=p(this,"emptyView"),!l)return;"string"==typeof l&&m(l)&&(l=p(l)||l),l=this.createChildView(l),h.push(l),f(this,"emptyView",l),v.detect(l)&&(this._createdEmptyView=l)}this.replace(t,0,h)},createChildView:function(e,t){e=this._super(e,t);var r=p(e,"tagName");return(null===r||void 0===r)&&(r=w.CONTAINER_MAP[p(this,"tagName")],f(e,"tagName",r)),e}}));w.CONTAINER_MAP={ul:"li",ol:"li",table:"tr",thead:"tr",tbody:"tr",tfoot:"tr",tr:"td",select:"option"},h["default"]=w}),e("ember-views/views/component",["ember-metal/core","ember-views/mixins/component_template_deprecation","ember-runtime/mixins/target_action_support","ember-views/views/view","ember-metal/property_get","ember-metal/property_set","ember-metal/is_none","ember-metal/computed","ember-htmlbars/templates/component","exports"],function(e,t,r,n,i,a,s,o,u,l){"use strict";var c=e["default"],h=t["default"],m=r["default"],p=n["default"],f=i.get,d=a.set,v=(s["default"],o.computed),b=u["default"],g=Array.prototype.slice,y=p.extend(m,h,{controller:null,context:null,instrumentName:"component",instrumentDisplay:v(function(){return this._debugContainerKey?"{{"+this._debugContainerKey.split(":")[1]+"}}":void 0}),init:function(){this._super(),this._keywords.view=this,d(this,"context",this),d(this,"controller",this)},defaultLayout:b,template:v(function(e,t){if(void 0!==t)return t;var r=f(this,"templateName"),n=this.templateForName(r,"template");return n||f(this,"defaultTemplate")}).property("templateName"),templateName:null,_setupKeywords:function(){},_yield:function(e,t,r,n){var i=t.data.view,a=this._parentView,s=f(this,"template");s&&i.appendChild(p,{isVirtual:!0,tagName:"",template:s,_blockArguments:n,_contextView:a,_morph:r,context:f(a,"context"),controller:f(a,"controller")})},targetObject:v(function(){var e=f(this,"_parentView");return e?f(e,"controller"):null}).property("_parentView"),sendAction:function(e){var t,r=g.call(arguments,1);t=void 0===e?f(this,"action"):f(this,e),void 0!==t&&this.triggerAction({action:t,actionContext:r})},send:function(e){var t,r=[].slice.call(arguments,1),n=this._actions&&this._actions[e];if(!n||this._actions[e].apply(this,r)===!0)if(t=f(this,"target"))t.send.apply(t,arguments);else if(!n)throw new Error(c.inspect(this)+" had no action handler for: "+e)}});l["default"]=y}),e("ember-views/views/container_view",["ember-metal/core","ember-metal/merge","ember-runtime/mixins/mutable_array","ember-metal/property_get","ember-metal/property_set","ember-views/views/view","ember-views/views/states","ember-metal/error","ember-metal/enumerable_utils","ember-metal/computed","ember-metal/run_loop","ember-metal/properties","ember-metal/mixin","ember-runtime/system/native_array","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h,m,p,f){"use strict";function d(){return this}var v=(e["default"],t["default"]),b=r["default"],g=n.get,y=i.set,_=a["default"],w=s.cloneStates,x=s.states,C=o["default"],E=u.forEach,O=l.computed,P=c["default"],A=h.defineProperty,N=m.observer,S=m.beforeObserver,T=(p.A,w(x)),k=_.extend(b,{_states:T,willWatchProperty:function(){},init:function(){this._super();var e=g(this,"childViews");A(this,"childViews",_.childViewsProperty);var t=this._childViews;E(e,function(e,r){var n;"string"==typeof e?(n=g(this,e),n=this.createChildView(n),y(this,e,n)):n=this.createChildView(e),t[r]=n},this);var r=g(this,"currentView");r&&(t.length||(t=this._childViews=this._childViews.slice()),t.push(this.createChildView(r)))},replace:function(e,t,r){var n=r?g(r,"length"):0;if(this.arrayContentWillChange(e,t,n),this.childViewsWillChange(this._childViews,e,t),0===n)this._childViews.splice(e,t);else{var i=[e,t].concat(r);r.length&&!this._childViews.length&&(this._childViews=this._childViews.slice()),this._childViews.splice.apply(this._childViews,i) +}return this.arrayContentDidChange(e,t,n),this.childViewsDidChange(this._childViews,e,t,n),this},objectAt:function(e){return this._childViews[e]},length:O(function(){return this._childViews.length})["volatile"](),render:function(e){var t=e.element(),r=e.dom;return""===this.tagName?(t=r.createDocumentFragment(),e._element=t,this._childViewsMorph=r.appendMorph(t,this._morph.contextualElement)):this._childViewsMorph=r.createMorph(t,t.lastChild,null),t},instrumentName:"container",childViewsWillChange:function(e,t,r){if(this.propertyWillChange("childViews"),r>0){var n=e.slice(t,t+r);this.currentState.childViewsWillChange(this,e,t,r),this.initializeViews(n,null,null)}},removeChild:function(e){return this.removeObject(e),this},childViewsDidChange:function(e,t,r,n){if(n>0){var i=e.slice(t,t+n);this.initializeViews(i,this),this.currentState.childViewsDidChange(this,e,t,n)}this.propertyDidChange("childViews")},initializeViews:function(e,t){E(e,function(e){y(e,"_parentView",t),!e.container&&t&&y(e,"container",t.container)})},currentView:null,_currentViewWillChange:S("currentView",function(){var e=g(this,"currentView");e&&e.destroy()}),_currentViewDidChange:N("currentView",function(){var e=g(this,"currentView");e&&this.pushObject(e)}),_ensureChildrenAreInDOM:function(){this.currentState.ensureChildrenAreInDOM(this)}});v(T._default,{childViewsWillChange:d,childViewsDidChange:d,ensureChildrenAreInDOM:d}),v(T.inBuffer,{childViewsDidChange:function(){throw new C("You cannot modify child views while in the inBuffer state")}}),v(T.hasElement,{childViewsWillChange:function(e,t,r,n){for(var i=r;r+n>i;i++){var a=t[i];a._unsubscribeFromStreamBindings(),a.remove()}},childViewsDidChange:function(e){P.scheduleOnce("render",e,"_ensureChildrenAreInDOM")},ensureChildrenAreInDOM:function(e){var t,r,n,i=e._childViews,a=e._renderer;for(t=0,r=i.length;r>t;t++)n=i[t],n._elementCreated||a.renderTree(n,e,t)}}),f["default"]=k}),e("ember-views/views/core_view",["ember-views/system/renderer","ember-views/views/states","ember-runtime/system/object","ember-runtime/mixins/evented","ember-runtime/mixins/action_handler","ember-metal/property_get","ember-metal/computed","ember-metal/utils","exports"],function(e,t,r,n,i,a,s,o,u){"use strict";function l(){return this}var c=e["default"],h=t.cloneStates,m=t.states,p=r["default"],f=n["default"],d=i["default"],v=a.get,b=s.computed,g=o.typeOf,y=p.extend(f,d,{isView:!0,isVirtual:!1,_states:h(m),init:function(){this._super(),this._state="preRender",this.currentState=this._states.preRender,this._isVisible=v(this,"isVisible")},parentView:b("_parentView",function(){var e=this._parentView;return e&&e.isVirtual?v(e,"parentView"):e}),_state:null,_parentView:null,concreteView:b("parentView",function(){return this.isVirtual?v(this,"parentView.concreteView"):this}),instrumentName:"core_view",instrumentDetails:function(e){e.object=this.toString(),e.containerKey=this._debugContainerKey,e.view=this},trigger:function(){this._super.apply(this,arguments);var e=arguments[0],t=this[e];if(t){for(var r=arguments.length,n=new Array(r-1),i=1;r>i;i++)n[i-1]=arguments[i];return t.apply(this,n)}},has:function(e){return"function"===g(this[e])||this._super(e)},destroy:function(){var e=this._parentView;if(this._super())return!this.removedFromDOM&&this._renderer&&this._renderer.remove(this,!0),e&&e.removeChild(this),this._transitionTo("destroying",!1),this},clearRenderedChildren:l,_transitionTo:l,destroyElement:l});y.reopenClass({renderer:new c}),u["default"]=y}),e("ember-views/views/each",["ember-metal/core","ember-runtime/system/string","ember-metal/property_get","ember-metal/property_set","ember-views/views/collection_view","ember-metal/binding","ember-runtime/mixins/controller","ember-runtime/controllers/array_controller","ember-runtime/mixins/array","ember-metal/observer","ember-views/views/metamorph_view","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h){"use strict";var m=(e["default"],t.fmt,r.get),p=n.set,f=i["default"],d=a.Binding,v=(s["default"],o["default"],u["default"],l.addObserver),b=l.removeObserver,g=l.addBeforeObserver,y=l.removeBeforeObserver,_=c["default"],w=c._Metamorph;h["default"]=f.extend(w,{init:function(){var e,t=m(this,"itemController");if(t){var r=m(this,"controller.container").lookupFactory("controller:array").create({_isVirtual:!0,parentController:m(this,"controller"),itemController:t,target:m(this,"controller"),_eachView:this});this.disableContentObservers(function(){p(this,"content",r),e=new d("content","_eachView.dataSource").oneWay(),e.connect(r)}),p(this,"_arrayController",r)}else this.disableContentObservers(function(){e=new d("content","dataSource").oneWay(),e.connect(this)});return this._super()},_assertArrayLike:function(){},disableContentObservers:function(e){y(this,"content",null,"_contentWillChange"),b(this,"content",null,"_contentDidChange"),e.call(this),g(this,"content",null,"_contentWillChange"),v(this,"content",null,"_contentDidChange")},itemViewClass:_,emptyViewClass:_,createChildView:function(e,t){e=this._super(e,t);var r=m(e,"content"),n=m(this,"keyword");return n&&(e._keywords[n]=r),r&&r.isController&&p(e,"controller",r),e},destroy:function(){if(this._super()){var e=m(this,"_arrayController");return e&&e.destroy(),this}}})}),e("ember-views/views/metamorph_view",["ember-metal/core","ember-views/views/core_view","ember-views/views/view","ember-metal/mixin","exports"],function(e,t,r,n,i){"use strict";var a=(e["default"],t["default"]),s=r["default"],o=n.Mixin,u=o.create({isVirtual:!0,tagName:"",instrumentName:"metamorph",init:function(){this._super()}});i._Metamorph=u,i["default"]=s.extend(u);var l=a.extend(u);i._SimpleMetamorphView=l}),e("ember-views/views/select",["ember-metal/enumerable_utils","ember-metal/property_get","ember-metal/property_set","ember-views/views/view","ember-views/views/collection_view","ember-metal/utils","ember-metal/is_none","ember-metal/computed","ember-runtime/system/native_array","ember-metal/mixin","ember-metal/properties","ember-metal/run_loop","ember-htmlbars/templates/select","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h,m,p){"use strict";var f=e.forEach,d=e.indexOf,v=e.indexesOf,b=e.replace,g=t.get,y=r.set,_=n["default"],w=i["default"],x=a.isArray,C=s["default"],E=o.computed,O=u.A,P=l.observer,A=c.defineProperty,N=h["default"],S=m["default"],T=S,k={isHTMLBars:!0,render:function(e){var t=e.getStream("view.label");return t.subscribe(e._wrapAsScheduled(function(){N.scheduleOnce("render",e,"rerender")})),t.value()}},V=_.extend({instrumentDisplay:"Ember.SelectOption",tagName:"option",attributeBindings:["value","selected"],defaultTemplate:k,init:function(){this.labelPathDidChange(),this.valuePathDidChange(),this._super()},selected:E(function(){var e=g(this,"content"),t=g(this,"parentView.selection");return g(this,"parentView.multiple")?t&&d(t,e.valueOf())>-1:e==t}).property("content","parentView.selection"),labelPathDidChange:P("parentView.optionLabelPath",function(){var e=g(this,"parentView.optionLabelPath");e&&A(this,"label",E(function(){return g(this,e)}).property(e))}),valuePathDidChange:P("parentView.optionValuePath",function(){var e=g(this,"parentView.optionValuePath");e&&A(this,"value",E(function(){return g(this,e)}).property(e))})}),I=w.extend({instrumentDisplay:"Ember.SelectOptgroup",tagName:"optgroup",attributeBindings:["label"],selectionBinding:"parentView.selection",multipleBinding:"parentView.multiple",optionLabelPathBinding:"parentView.optionLabelPath",optionValuePathBinding:"parentView.optionValuePath",itemViewClassBinding:"parentView.optionView"}),j=_.extend({instrumentDisplay:"Ember.Select",tagName:"select",classNames:["ember-select"],defaultTemplate:T,attributeBindings:["multiple","disabled","tabindex","name","required","autofocus","form","size"],multiple:!1,disabled:!1,required:!1,content:null,selection:null,value:E(function(e,t){if(2===arguments.length)return t;var r=g(this,"optionValuePath").replace(/^content\.?/,"");return r?g(this,"selection."+r):g(this,"selection")}).property("selection"),prompt:null,optionLabelPath:"content",optionValuePath:"content",optionGroupPath:null,groupView:I,groupedContent:E(function(){var e=g(this,"optionGroupPath"),t=O(),r=g(this,"content")||[];return f(r,function(r){var n=g(r,e);g(t,"lastObject.label")!==n&&t.pushObject({label:n,content:O()}),g(t,"lastObject.content").push(r)}),t}).property("optionGroupPath","content.@each"),optionView:V,_change:function(){g(this,"multiple")?this._changeMultiple():this._changeSingle()},selectionDidChange:P("selection.@each",function(){var e=g(this,"selection");if(g(this,"multiple")){if(!x(e))return void y(this,"selection",O([e]));this._selectionDidChangeMultiple()}else this._selectionDidChangeSingle()}),valueDidChange:P("value",function(){var e,t=g(this,"content"),r=g(this,"value"),n=g(this,"optionValuePath").replace(/^content\.?/,""),i=n?g(this,"selection."+n):g(this,"selection");r!==i&&(e=t?t.find(function(e){return r===(n?g(e,n):e)}):null,this.set("selection",e))}),_setDefaults:function(){var e=g(this,"selection"),t=g(this,"value");C(e)||this.selectionDidChange(),C(t)||this.valueDidChange(),C(e)&&this._change()},_changeSingle:function(){var e=this.$()[0].selectedIndex,t=g(this,"content"),r=g(this,"prompt");if(t&&g(t,"length")){if(r&&0===e)return void y(this,"selection",null);r&&(e-=1),y(this,"selection",t.objectAt(e))}},_changeMultiple:function(){var e=this.$("option:selected"),t=g(this,"prompt"),r=t?1:0,n=g(this,"content"),i=g(this,"selection");if(n&&e){var a=e.map(function(){return this.index-r}).toArray(),s=n.objectsAt(a);x(i)?b(i,0,g(i,"length"),s):y(this,"selection",s)}},_selectionDidChangeSingle:function(){var e=g(this,"content"),t=g(this,"selection"),r=this;t&&t.then?t.then(function(n){r.get("selection")===t&&r._setSelectionIndex(e,n)}):this._setSelectionIndex(e,t)},_setSelectionIndex:function(e,t){var r=g(this,"element");if(r){var n=e?d(e,t):-1,i=g(this,"prompt");i&&(n+=1),r&&(r.selectedIndex=n)}},_selectionDidChangeMultiple:function(){var e,t=g(this,"content"),r=g(this,"selection"),n=t?v(t,r):[-1],i=g(this,"prompt"),a=i?1:0,s=this.$("option");s&&s.each(function(){e=this.index>-1?this.index-a:-1,this.selected=d(n,e)>-1})},init:function(){this._super(),this.on("didInsertElement",this,this._setDefaults),this.on("change",this,this._change)}});p["default"]=j,p.Select=j,p.SelectOption=V,p.SelectOptgroup=I}),e("ember-views/views/simple_bound_view",["ember-metal/error","ember-metal/run_loop","ember-htmlbars/utils/string","ember-metal/utils","exports"],function(e,t,r,n,i){"use strict";function a(){return this}function s(e,t){this.lazyValue=e,this.isEscaped=t,this[m]=p(),this._lastNormalizedValue=void 0,this.state="preRender",this.updateId=null,this._parentView=null,this.buffer=null,this._morph=null}function o(e,t,r){var n=new s(r,t.escaped);n._morph=t,r.subscribe(e._wrapAsScheduled(function(){l.scheduleOnce("render",n,"rerender")})),e.appendChild(n)}var u=e["default"],l=t["default"],c=r.SafeString,h=r.htmlSafe,m=n.GUID_KEY,p=n.uuid,f=c,d=h;s.prototype={isVirtual:!0,isView:!0,tagName:"",destroy:function(){this.updateId&&(l.cancel(this.updateId),this.updateId=null),this._parentView&&this._parentView.removeChild(this),this.morph=null,this.state="destroyed"},propertyWillChange:a,propertyDidChange:a,normalizedValue:function(){var e=this.lazyValue.value();return null===e||void 0===e?e="":this.isEscaped||e instanceof f||(e=d(e)),e},render:function(e){var t=this.normalizedValue();this._lastNormalizedValue=t,e._element=t},rerender:function(){switch(this.state){case"preRender":case"destroyed":break;case"inBuffer":throw new u("Something you did tried to replace an {{expression}} before it was inserted into the DOM.");case"hasElement":case"inDOM":this.updateId=l.scheduleOnce("render",this,"update")}return this},update:function(){this.updateId=null;var e=this.normalizedValue();e!==this._lastNormalizedValue&&(this._lastNormalizedValue=e,this._morph.setContent(e))},_transitionTo:function(e){this.state=e}},i.appendSimpleBoundView=o,i["default"]=s}),e("ember-views/views/states",["ember-metal/platform","ember-metal/merge","ember-views/views/states/default","ember-views/views/states/pre_render","ember-views/views/states/in_buffer","ember-views/views/states/has_element","ember-views/views/states/in_dom","ember-views/views/states/destroying","exports"],function(e,t,r,n,i,a,s,o,u){"use strict";function l(e){var t={};t._default={},t.preRender=c(t._default),t.destroying=c(t._default),t.inBuffer=c(t._default),t.hasElement=c(t._default),t.inDOM=c(t.hasElement);for(var r in e)e.hasOwnProperty(r)&&h(t[r],e[r]);return t}var c=e.create,h=t["default"],m=r["default"],p=n["default"],f=i["default"],d=a["default"],v=s["default"],b=o["default"];u.cloneStates=l;var g={_default:m,preRender:p,inDOM:v,inBuffer:f,hasElement:d,destroying:b};u.states=g}),e("ember-views/views/states/default",["ember-metal/error","exports"],function(e,t){"use strict";function r(){return this}var n=e["default"];t["default"]={appendChild:function(){throw new n("You can't use appendChild outside of the rendering process")},$:function(){return void 0},getElement:function(){return null},handleEvent:function(){return!0},destroyElement:function(e){return e._renderer&&e._renderer.remove(e,!1),e},rerender:r,invokeObserver:r}}),e("ember-views/views/states/destroying",["ember-metal/merge","ember-metal/platform","ember-runtime/system/string","ember-views/views/states/default","ember-metal/error","exports"],function(e,t,r,n,i,a){"use strict";var s=e["default"],o=t.create,u=r.fmt,l=n["default"],c=i["default"],h="You can't call %@ on a view being destroyed",m=o(l);s(m,{appendChild:function(){throw new c(u(h,["appendChild"]))},rerender:function(){throw new c(u(h,["rerender"]))},destroyElement:function(){throw new c(u(h,["destroyElement"]))}}),a["default"]=m}),e("ember-views/views/states/has_element",["ember-views/views/states/default","ember-metal/run_loop","ember-metal/merge","ember-metal/platform","ember-views/system/jquery","ember-metal/error","ember-metal/property_get","exports"],function(e,t,r,n,i,a,s,o){"use strict";var u=e["default"],l=t["default"],c=r["default"],h=n.create,m=i["default"],p=a["default"],f=s.get,d=h(u);c(d,{$:function(e,t){var r=e.get("concreteView").element;return t?m(t,r):m(r)},getElement:function(e){var t=f(e,"parentView");return t&&(t=f(t,"element")),t?e.findElementInParentElement(t):m("#"+f(e,"elementId"))[0]},rerender:function(e){if(e._root._morph&&!e._elementInserted)throw new p("Something you did caused a view to re-render after it rendered but before it was inserted into the DOM.");l.scheduleOnce("render",function(){e.isDestroying||e._renderer.renderTree(e,e._parentView)})},destroyElement:function(e){return e._renderer.remove(e,!1),e},handleEvent:function(e,t,r){return e.has(t)?e.trigger(t,r):!0},invokeObserver:function(e,t){t.call(e)}}),o["default"]=d}),e("ember-views/views/states/in_buffer",["ember-views/views/states/default","ember-metal/error","ember-views/system/jquery","ember-metal/platform","ember-metal/merge","exports"],function(e,t,r,n,i,a){"use strict";var s=e["default"],o=t["default"],u=r["default"],l=n.create,c=i["default"],h=l(s);c(h,{$:function(e){return e.rerender(),u()},rerender:function(){throw new o("Something you did caused a view to re-render after it rendered but before it was inserted into the DOM.")},appendChild:function(e,t,r){var n=e.buffer,i=e._childViews;return t=e.createChildView(t,r),i.length||(i=e._childViews=i.slice()),i.push(t),t._morph||n.pushChildView(t),e.propertyDidChange("childViews"),t},invokeObserver:function(e,t){t.call(e)}}),a["default"]=h}),e("ember-views/views/states/in_dom",["ember-metal/core","ember-metal/platform","ember-metal/merge","ember-metal/error","ember-metal/observer","ember-views/views/states/has_element","exports"],function(e,r,n,i,a,s,o){"use strict";var u,l=(e["default"],r.create),c=n["default"],h=(i["default"],a.addBeforeObserver,s["default"]),m=l(h);c(m,{enter:function(e){u||(u=t("ember-views/views/view")["default"]),e.isVirtual||(u.views[e.elementId]=e)},exit:function(e){u||(u=t("ember-views/views/view")["default"]),this.isVirtual||delete u.views[e.elementId]}}),o["default"]=m}),e("ember-views/views/states/pre_render",["ember-views/views/states/default","ember-metal/platform","exports"],function(e,t,r){"use strict";var n=e["default"],i=t.create,a=i(n);r["default"]=a}),e("ember-views/views/text_area",["ember-metal/property_get","ember-views/views/component","ember-views/mixins/text_support","ember-metal/mixin","exports"],function(e,t,r,n,i){"use strict";var a=e.get,s=t["default"],o=r["default"],u=n.observer;i["default"]=s.extend(o,{instrumentDisplay:"{{textarea}}",classNames:["ember-text-area"],tagName:"textarea",attributeBindings:["rows","cols","name","selectionEnd","selectionStart","wrap","lang","dir"],rows:null,cols:null,_updateElementValue:u("value",function(){var e=a(this,"value"),t=this.$();t&&e!==t.val()&&t.val(e)}),init:function(){this._super(),this.on("didInsertElement",this,this._updateElementValue)}})}),e("ember-views/views/text_field",["ember-views/views/component","ember-views/mixins/text_support","exports"],function(e,t,r){"use strict";var n=e["default"],i=t["default"];r["default"]=n.extend(i,{instrumentDisplay:'{{input type="text"}}',classNames:["ember-text-field"],tagName:"input",attributeBindings:["accept","autocomplete","autosave","dir","formaction","formenctype","formmethod","formnovalidate","formtarget","height","inputmode","lang","list","max","min","multiple","name","pattern","size","step","type","value","width"],defaultLayout:null,value:"",type:"text",size:null,pattern:null,min:null,max:null})}),e("ember-views/views/view",["ember-metal/core","ember-metal/platform","ember-runtime/mixins/evented","ember-runtime/system/object","ember-metal/error","ember-metal/property_get","ember-metal/property_set","ember-metal/set_properties","ember-metal/run_loop","ember-metal/observer","ember-metal/properties","ember-metal/utils","ember-metal/computed","ember-metal/mixin","ember-views/streams/key_stream","ember-metal/streams/stream_binding","ember-views/streams/context_stream","ember-metal/is_none","ember-metal/deprecate_property","ember-runtime/system/native_array","ember-views/streams/class_name_binding","ember-metal/enumerable_utils","ember-metal/property_events","ember-views/system/jquery","ember-views/system/ext","ember-views/views/core_view","ember-metal/streams/utils","ember-views/system/sanitize_attribute_value","morph/dom-helper/prop","exports"],function(e,t,n,i,a,s,o,u,l,c,h,m,p,f,d,v,b,g,y,_,w,x,C,E,O,P,A,N,S,T){"use strict";function k(){return this}function V(){return I||(I=r("ember-htmlbars").defaultEnv),M(I)}var I,j=e["default"],M=t.create,R=n["default"],D=i["default"],L=a["default"],F=s.get,B=o.set,H=u["default"],z=l["default"],q=c.addObserver,U=c.removeObserver,W=h.defineProperty,K=m.guidFor,G=p.computed,Q=f.observer,$=d["default"],Y=v["default"],X=b["default"],Z=m.typeOf,J=g["default"],et=f.Mixin,tt=y.deprecateProperty,rt=_.A,nt=w.streamifyClassNameBinding,it=x.forEach,at=x.addObject,st=x.removeObject,ot=f.beforeObserver,ut=C.propertyWillChange,lt=C.propertyDidChange,ct=E["default"],ht=P["default"],mt=A.subscribe,pt=A.read,ft=A.isStream,dt=N["default"],vt=S.normalizeProperty,bt=G(function(){var e=this._childViews,t=rt();return it(e,function(e){var r;e.isVirtual?(r=F(e,"childViews"))&&t.pushObjects(r):t.push(e)}),t.replace=function(){throw new L("childViews is immutable")},t});j.TEMPLATES={};var gt=[],yt=ht.extend({concatenatedProperties:["classNames","classNameBindings","attributeBindings"],isView:!0,templateName:null,layoutName:null,instrumentDisplay:G(function(){return this.helperName?"{{"+this.helperName+"}}":void 0}),template:G("templateName",function(e,t){if(void 0!==t)return t;var r=F(this,"templateName"),n=this.templateForName(r,"template");return n||F(this,"defaultTemplate")}),_controller:null,controller:G(function(e,t){if(2===arguments.length)return this._controller=t,t;if(this._controller)return this._controller;var r=F(this,"_parentView");return r?F(r,"controller"):null}),layout:G(function(){var e=F(this,"layoutName"),t=this.templateForName(e,"layout");return t||F(this,"defaultLayout")}).property("layoutName"),_yield:function(e,t,r){var n=F(this,"template");if(n){var i=!1;return i=n.isHTMLBars,i?n.render(e,t,r.contextualElement):n(e,t)}},_blockArguments:gt,templateForName:function(e){if(e){if(!this.container)throw new L("Container was not found when looking up a views template. This is most likely due to manually instantiating an Ember.View. See: http://git.io/EKPpnA");return this.container.lookup("template:"+e)}},context:G(function(e,t){return 2===arguments.length?(B(this,"_context",t),t):F(this,"_context")})["volatile"](),_context:G(function(e,t){if(2===arguments.length)return t;var r,n;return(n=F(this,"controller"))?n:(r=this._parentView,r?F(r,"_context"):null)}),_contextDidChange:Q("context",function(){this.rerender()}),isVisible:!0,childViews:bt,_childViews:gt,_childViewsWillChange:ot("childViews",function(){if(this.isVirtual){var e=F(this,"parentView");e&&ut(e,"childViews")}}),_childViewsDidChange:Q("childViews",function(){if(this.isVirtual){var e=F(this,"parentView");e&<(e,"childViews")}}),nearestInstanceOf:function(e){for(var t=F(this,"parentView");t;){if(t instanceof e)return t;t=F(t,"parentView")}},nearestOfType:function(e){for(var t=F(this,"parentView"),r=e instanceof et?function(t){return e.detect(t)}:function(t){return e.detect(t.constructor)};t;){if(r(t))return t;t=F(t,"parentView")}},nearestWithProperty:function(e){for(var t=F(this,"parentView");t;){if(e in t)return t;t=F(t,"parentView")}},nearestChildOf:function(e){for(var t=F(this,"parentView");t;){if(F(t,"parentView")instanceof e)return t;t=F(t,"parentView")}},_parentViewDidChange:Q("_parentView",function(){this.isDestroying||(this._setupKeywords(),this.trigger("parentViewDidChange"),F(this,"parentView.controller")&&!F(this,"controller")&&this.notifyPropertyChange("controller"))}),_controllerDidChange:Q("controller",function(){this.isDestroying||(this.rerender(),this.forEachChildView(function(e){e.propertyDidChange("controller")}))}),_setupKeywords:function(){var e=this._keywords,t=this._contextView||this._parentView;if(t){var r=t._keywords;e.view=this.isVirtual?r.view:this;for(var n in r)e[n]||(e[n]=r[n])}else e.view=this.isVirtual?null:this},render:function(e){var t=F(this,"layout")||F(this,"template");if(t){var r,n=F(this,"context"),i={view:this,buffer:e,isRenderData:!0},a={data:i},s=!1;if(s=t.isHTMLBars){var o=j.merge(V(),a);r=t.render(this,o,e.innerContextualElement(),this._blockArguments)}else r=t(n,a);void 0!==r&&e.push(r)}},rerender:function(){return this.currentState.rerender(this)},_applyClassNameBindings:function(e){var t,r,n,i=this.classNames;it(e,function(e){var a;a=ft(e)?e:nt(this,e,"_view.");var s,o=this._wrapAsScheduled(function(){t=this.$(),r=pt(a),s&&(t.removeClass(s),i.removeObject(s)),r?(t.addClass(r),s=r):s=null});n=pt(a),n&&(at(i,n),s=n),mt(a,o,this),this.one("willClearRender",function(){s&&(i.removeObject(s),s=null)})},this)},_unspecifiedAttributeBindings:null,_applyAttributeBindings:function(e,t){var r,n=this._unspecifiedAttributeBindings=this._unspecifiedAttributeBindings||{};it(t,function(t){var i=t.split(":"),a=i[0],s=i[1]||a;a in this?(this._setupAttributeBindingObservation(a,s),r=F(this,a),yt.applyAttributeBindings(e,s,r)):n[a]=s},this),this.setUnknownProperty=this._setUnknownProperty},_setupAttributeBindingObservation:function(e,t){var r,n,i=function(){n=this.$(),r=F(this,e);var i=vt(n,t.toLowerCase())||t;yt.applyAttributeBindings(n,i,r)};this.registerObserver(this,e,i)},setUnknownProperty:null,_setUnknownProperty:function(e,t){var r=this._unspecifiedAttributeBindings&&this._unspecifiedAttributeBindings[e];return r&&this._setupAttributeBindingObservation(e,r),W(this,e),B(this,e,t)},_classStringForProperty:function(e){return yt._classStringForValue(e.path,e.stream.value(),e.className,e.falsyClassName)},element:null,$:function(e){return this.currentState.$(this,e)},mutateChildViews:function(e){for(var t,r=this._childViews,n=r.length;--n>=0;)t=r[n],e(this,t,n);return this},forEachChildView:function(e){var t=this._childViews;if(!t)return this;var r,n,i=t.length;for(n=0;i>n;n++)r=t[n],e(r);return this},appendTo:function(e){var t=ct(e);return this.constructor.renderer.appendTo(this,t[0]),this},replaceIn:function(e){var t=ct(e);return this.constructor.renderer.replaceIn(this,t[0]),this},append:function(){return this.appendTo(document.body)},remove:function(){this.removedFromDOM||this.destroyElement()},elementId:null,findElementInParentElement:function(e){var t="#"+this.elementId;return ct(t)[0]||ct(t,e)[0]},createElement:function(){return this.element?this:(this._didCreateElementWithoutMorph=!0,this.constructor.renderer.renderTree(this),this)},willInsertElement:k,didInsertElement:k,willClearRender:k,destroyElement:function(){return this.currentState.destroyElement(this)},willDestroyElement:k,parentViewDidChange:k,instrumentName:"view",instrumentDetails:function(e){e.template=F(this,"templateName"),this._super(e)},beforeRender:function(){},afterRender:function(){},applyAttributesToBuffer:function(e){var t=this.classNameBindings;t.length&&this._applyClassNameBindings(t);var r=this.attributeBindings;r.length&&this._applyAttributeBindings(e,r),e.setClasses(this.classNames),e.id(this.elementId);var n=F(this,"ariaRole");n&&e.attr("role",n),F(this,"isVisible")===!1&&e.style("display","none")},tagName:null,ariaRole:null,classNames:["ember-view"],classNameBindings:gt,attributeBindings:gt,init:function(){this.isVirtual||this.elementId||(this.elementId=K(this)),this._super(),this._childViews=this._childViews.slice(),this._baseContext=void 0,this._contextStream=void 0,this._streamBindings=void 0,this._keywords||(this._keywords=M(null)),this._keywords._view=this,this._keywords.view=void 0,this._keywords.controller=new $(this,"controller"),this._setupKeywords(),this.classNameBindings=rt(this.classNameBindings.slice()),this.classNames=rt(this.classNames.slice())},appendChild:function(e,t){return this.currentState.appendChild(this,e,t)},removeChild:function(e){if(!this.isDestroying){B(e,"_parentView",null);var t=this._childViews;return st(t,e),this.propertyDidChange("childViews"),this}},removeAllChildren:function(){return this.mutateChildViews(function(e,t){e.removeChild(t)})},destroyAllChildren:function(){return this.mutateChildViews(function(e,t){t.destroy()})},removeFromParent:function(){var e=this._parentView;return this.remove(),e&&e.removeChild(this),this},destroy:function(){var e=F(this,"parentView"),t=this.viewName;return this._super()?(t&&e&&e.set(t,null),this):void 0},createChildView:function(e,t){if(!e)throw new TypeError("createChildViews first argument must exist");if(e.isView&&e._parentView===this&&e.container===this.container)return e;if(t=t||{},t._parentView=this,ht.detect(e))t.container=this.container,e=e.create(t),e.viewName&&B(F(this,"concreteView"),e.viewName,e);else if("string"==typeof e){var r="view:"+e,n=this.container.lookupFactory(r);e=n.create(t)}else t.container=this.container,H(e,t);return e},becameVisible:k,becameHidden:k,_isVisibleDidChange:Q("isVisible",function(){this._isVisible!==F(this,"isVisible")&&z.scheduleOnce("render",this,this._toggleVisibility)}),_toggleVisibility:function(){var e=this.$(),t=F(this,"isVisible");this._isVisible!==t&&(this._isVisible=t,e&&(e.toggle(t),this._isAncestorHidden()||(t?this._notifyBecameVisible():this._notifyBecameHidden())))},_notifyBecameVisible:function(){this.trigger("becameVisible"),this.forEachChildView(function(e){var t=F(e,"isVisible");(t||null===t)&&e._notifyBecameVisible()})},_notifyBecameHidden:function(){this.trigger("becameHidden"),this.forEachChildView(function(e){var t=F(e,"isVisible");(t||null===t)&&e._notifyBecameHidden()})},_isAncestorHidden:function(){for(var e=F(this,"parentView");e;){if(F(e,"isVisible")===!1)return!0;e=F(e,"parentView")}return!1},transitionTo:function(e,t){this._transitionTo(e,t)},_transitionTo:function(e){var t=this.currentState,r=this.currentState=this._states[e];this._state=e,t&&t.exit&&t.exit(this),r.enter&&r.enter(this)},handleEvent:function(e,t){return this.currentState.handleEvent(this,e,t)},registerObserver:function(e,t,r,n){if(n||"function"!=typeof r||(n=r,r=null),e&&"object"==typeof e){var i=this._wrapAsScheduled(n);q(e,t,r,i),this.one("willClearRender",function(){U(e,t,r,i)})}},_wrapAsScheduled:function(e){var t=this,r=function(){t.currentState.invokeObserver(this,e)},n=function(){z.scheduleOnce("render",this,r)};return n},getStream:function(e){var t=this._getContextStream().get(e);return t._label=e,t},_getBindingForStream:function(e){void 0===this._streamBindings&&(this._streamBindings=M(null),this.one("willDestroyElement",this,this._destroyStreamBindings));var t=e;if(ft(e)&&(t=e._label,!t))return e;if(void 0!==this._streamBindings[t])return this._streamBindings[t];var r=this._getContextStream().get(t),n=new Y(r);return n._label=t,this._streamBindings[t]=n},_destroyStreamBindings:function(){var e=this._streamBindings;for(var t in e)e[t].destroy();this._streamBindings=void 0},_getContextStream:function(){return void 0===this._contextStream&&(this._baseContext=new $(this,"context"),this._contextStream=new X(this),this.one("willDestroyElement",this,this._destroyContextStream)),this._contextStream},_destroyContextStream:function(){this._baseContext.destroy(),this._baseContext=void 0,this._contextStream.destroy(),this._contextStream=void 0},_unsubscribeFromStreamBindings:function(){for(var e in this._streamBindingSubscriptions){var t=this[e+"Binding"],r=this._streamBindingSubscriptions[e];t.unsubscribe(r)}}});tt(yt.prototype,"state","_state"),tt(yt.prototype,"states","_states");var _t=D.extend(R).create();yt.addMutationListener=function(e){_t.on("change",e)},yt.removeMutationListener=function(e){_t.off("change",e)},yt.notifyMutationListeners=function(){_t.trigger("change")},yt.views={},yt.childViewsProperty=bt,yt.applyAttributeBindings=function(e,t,r){var n=dt(e[0],t,r),i=Z(n);"value"===t||"string"!==i&&("number"!==i||isNaN(n))?"value"===t||"boolean"===i?J(n)||n===!1?(e.removeAttr(t),"required"===t?e.removeProp(t):e.prop(t,"")):n!==e.prop(t)&&e.prop(t,n):n||e.removeAttr(t):n!==e.attr(t)&&e.attr(t,n)},T["default"]=yt}),e("ember-views/views/with_view",["ember-metal/property_set","ember-metal/utils","ember-views/views/bound_view","exports"],function(e,t,r,n){"use strict";var i=e.set,a=t.apply,s=r["default"];n["default"]=s.extend({init:function(){a(this,this._super,arguments);var e=this.templateHash.controller;if(e){var t=this.previousContext,r=this.container.lookupFactory("controller:"+e).create({parentController:t,target:t});this._generatedController=r,this.preserveContext?(this._blockArguments=[r],this.lazyValue.subscribe(function(e){i(r,"model",e.value())})):(i(this,"controller",r),this.valueNormalizerFunc=function(e){return r.set("model",e),r}),i(r,"model",this.lazyValue.value())}else this.preserveContext&&(this._blockArguments=[this.lazyValue])},willDestroy:function(){this._super(),this._generatedController&&this._generatedController.destroy()}})}),e("ember",["ember-metal","ember-runtime","ember-views","ember-routing","ember-application","ember-extension-support","ember-htmlbars","ember-routing-htmlbars","ember-runtime/system/lazy_load"],function(e,r,n,a,s,o,u,l,c){"use strict";var h=c.runLoadHooks;i.__loader.registry["ember-template-compiler"]&&t("ember-template-compiler"),i.__loader.registry["ember-testing"]&&t("ember-testing"),h("Ember")}),e("htmlbars-util",["./htmlbars-util/safe-string","./htmlbars-util/handlebars/utils","./htmlbars-util/namespaces","exports"],function(e,t,r,n){"use strict";var i=e["default"],a=t.escapeExpression,s=r.getAttrNamespace;n.SafeString=i,n.escapeExpression=a,n.getAttrNamespace=s}),e("htmlbars-util/array-utils",["exports"],function(e){"use strict";function t(e,t,r){var n,i;if(void 0===r)for(n=0,i=e.length;i>n;n++)t(e[n],n,e);else for(n=0,i=e.length;i>n;n++)t.call(r,e[n],n,e)}function r(e,t){var r,n,i=[]; +for(r=0,n=e.length;n>r;r++)i.push(t(e[r],r,e));return i}e.forEach=t,e.map=r;var n;n=Array.prototype.indexOf?function(e,t,r){return e.indexOf(t,r)}:function(e,t,r){void 0===r||null===r?r=0:0>r&&(r=Math.max(0,e.length+r));for(var n=r,i=e.length;i>n;n++)if(e[n]===t)return n;return-1};var i=n;e.indexOfArray=i}),e("htmlbars-util/handlebars/safe-string",["exports"],function(e){"use strict";function t(e){this.string=e}t.prototype.toString=t.prototype.toHTML=function(){return""+this.string},e["default"]=t}),e("htmlbars-util/handlebars/utils",["./safe-string","exports"],function(e,t){"use strict";function r(e){return o[e]}function n(e){for(var t=1;t":">",'"':""","'":"'","`":"`"}),u=/[&<>"'`]/g,l=/[&<>"'`]/;t.extend=n;var c=Object.prototype.toString;t.toString=c;var h=function(e){return"function"==typeof e};h(/x/)&&(h=function(e){return"function"==typeof e&&"[object Function]"===c.call(e)});var h;t.isFunction=h;var m=Array.isArray||function(e){return e&&"object"==typeof e?"[object Array]"===c.call(e):!1};t.isArray=m,t.escapeExpression=i,t.isEmpty=a,t.appendContextPath=s}),e("htmlbars-util/namespaces",["exports"],function(e){"use strict";function t(e){var t,n=e.indexOf(":");if(-1!==n){var i=e.slice(0,n);t=r[i]}return t||null}var r={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"};e.getAttrNamespace=t}),e("htmlbars-util/object-utils",["exports"],function(e){"use strict";function t(e,t){for(var r in t)e.hasOwnProperty(r)||(e[r]=t[r]);return e}e.merge=t}),e("htmlbars-util/quoting",["exports"],function(e){"use strict";function t(e){return e=e.replace(/\\/g,"\\\\"),e=e.replace(/"/g,'\\"'),e=e.replace(/\n/g,"\\n")}function r(e){return'"'+t(e)+'"'}function n(e){return"["+e+"]"}function i(e){return"{"+e.join(", ")+"}"}function a(e,t){for(var r="";t--;)r+=e;return r}e.escapeString=t,e.string=r,e.array=n,e.hash=i,e.repeat=a}),e("htmlbars-util/safe-string",["./handlebars/safe-string","exports"],function(e,t){"use strict";var r=e["default"];t["default"]=r}),e("morph",["./morph/morph","./morph/attr-morph","./morph/dom-helper","exports"],function(e,t,r,n){"use strict";var i=e["default"],a=t["default"],s=r["default"];n.Morph=i,n.AttrMorph=a,n.DOMHelper=s}),e("morph/attr-morph",["./attr-morph/sanitize-attribute-value","./dom-helper/prop","./dom-helper/build-html-dom","../htmlbars-util","exports"],function(e,t,r,n,i){"use strict";function a(e){this.domHelper.setPropertyStrict(this.element,this.attrName,e)}function s(e){c(e)?this.domHelper.removeAttribute(this.element,this.attrName):this.domHelper.setAttribute(this.element,this.attrName,e)}function o(e){c(e)?this.domHelper.removeAttribute(this.element,this.attrName):this.domHelper.setAttributeNS(this.element,this.namespace,this.attrName,e)}function u(e,t,r,n){this.element=e,this.domHelper=r,this.namespace=void 0!==n?n:p(t),this.escaped=!0;var i=h(this.element,t);this.namespace?(this._update=o,this.attrName=t):e.namespaceURI!==m&&"style"!==t&&i?(this.attrName=i,this._update=a):(this.attrName=t,this._update=s)}var l=e.sanitizeAttributeValue,c=t.isAttrRemovalValue,h=t.normalizeProperty,m=r.svgNamespace,p=n.getAttrNamespace;u.prototype.setContent=function(e){if(this.escaped){var t=l(this.element,this.attrName,e);this._update(t,this.namespace)}else this._update(e,this.namespace)},i["default"]=u}),e("morph/attr-morph/sanitize-attribute-value",["exports"],function(e){"use strict";function t(e,t,s){var o;return r||(r=document.createElement("a")),o=e?e.tagName:null,s&&s.toHTML?s.toHTML():(null===o||i[o])&&a[t]&&(r.href=s,n[r.protocol]===!0)?"unsafe:"+s:s}var r,n={"javascript:":!0,"vbscript:":!0},i={A:!0,BODY:!0,LINK:!0,IMG:!0,IFRAME:!0},a={href:!0,src:!0,background:!0};e.badAttributes=a,e.sanitizeAttributeValue=t}),e("morph/dom-helper",["../morph/morph","../morph/attr-morph","./dom-helper/build-html-dom","./dom-helper/classes","./dom-helper/prop","exports"],function(e,t,r,n,i,a){"use strict";function s(e){return e&&e.namespaceURI===p&&!f[e.tagName]?p:null}function o(e,t){if("TABLE"===t.tagName){var r=E.exec(e);if(r){var n=r[1];return"tr"===n||"col"===n}}}function u(e,t){var r=t.document.createElement("div");return r.innerHTML=""+e+"",r.firstChild.childNodes}function l(e){if(this.document=e||document,!this.document)throw new Error("A document object must be passed to the DOMHelper, or available on the global scope");this.canClone=C,this.namespace=null}var c=e["default"],h=t["default"],m=r.buildHTMLDOM,p=r.svgNamespace,f=r.svgHTMLIntegrationPoints,d=n.addClasses,v=n.removeClasses,b=i.normalizeProperty,g=i.isAttrRemovalValue,y="undefined"==typeof document?!1:document,_=y&&function(e){var t=e.createElement("div");t.appendChild(e.createTextNode(""));var r=t.cloneNode(!0);return 0===r.childNodes.length}(y),w=y&&function(e){var t=e.createElement("input");t.setAttribute("checked","checked");var r=t.cloneNode(!1);return!r.checked}(y),x=y&&(y.createElementNS?function(e){var t=e.createElementNS(p,"svg");return t.setAttribute("viewBox","0 0 100 100"),t.removeAttribute("viewBox"),!t.getAttribute("viewBox")}(y):!0),C=y&&function(e){var t=e.createElement("div");t.appendChild(e.createTextNode(" ")),t.appendChild(e.createTextNode(" "));var r=t.cloneNode(!0);return" "===r.childNodes[0].nodeValue}(y),E=/<([\w:]+)/,O=l.prototype;O.constructor=l,O.getElementById=function(e,t){return t=t||this.document,t.getElementById(e)},O.insertBefore=function(e,t,r){return e.insertBefore(t,r)},O.appendChild=function(e,t){return e.appendChild(t)},O.childAt=function(e,t){for(var r=e,n=0;nn;n++)r=r.nextSibling;return r},O.appendText=function(e,t){return e.appendChild(this.document.createTextNode(t))},O.setAttribute=function(e,t,r){e.setAttribute(t,String(r))},O.setAttributeNS=function(e,t,r,n){e.setAttributeNS(t,r,String(n))},O.removeAttribute=x?function(e,t){e.removeAttribute(t)}:function(e,t){"svg"===e.tagName&&"viewBox"===t?e.setAttribute(t,null):e.removeAttribute(t)},O.setPropertyStrict=function(e,t,r){e[t]=r},O.setProperty=function(e,t,r,n){var i=t.toLowerCase();if(e.namespaceURI===p||"style"===i)g(r)?e.removeAttribute(t):n?e.setAttributeNS(n,t,r):e.setAttribute(t,r);else{var a=b(e,t);a?e[a]=r:g(r)?e.removeAttribute(t):n&&e.setAttributeNS?e.setAttributeNS(n,t,r):e.setAttribute(t,r)}},y&&y.createElementNS?(O.createElement=function(e,t){var r=this.namespace;return t&&(r="svg"===e?p:s(t)),r?this.document.createElementNS(r,e):this.document.createElement(e)},O.setAttributeNS=function(e,t,r,n){e.setAttributeNS(t,r,String(n))}):(O.createElement=function(e){return this.document.createElement(e)},O.setAttributeNS=function(e,t,r,n){e.setAttribute(r,String(n))}),O.addClasses=d,O.removeClasses=v,O.setNamespace=function(e){this.namespace=e},O.detectNamespace=function(e){this.namespace=s(e)},O.createDocumentFragment=function(){return this.document.createDocumentFragment()},O.createTextNode=function(e){return this.document.createTextNode(e)},O.createComment=function(e){return this.document.createComment(e)},O.repairClonedNode=function(e,t,r){if(_&&t.length>0)for(var n=0,i=t.length;i>n;n++){var a=this.document.createTextNode(""),s=t[n],o=this.childAtIndex(e,s);o?e.insertBefore(a,o):e.appendChild(a)}w&&r&&e.setAttribute("checked","checked")},O.cloneNode=function(e,t){var r=e.cloneNode(!!t);return r},O.createAttrMorph=function(e,t,r){return new h(e,t,this,r)},O.createUnsafeAttrMorph=function(e,t,r){var n=this.createAttrMorph(e,t,r);return n.escaped=!1,n},O.createMorph=function(e,t,r,n){return n||1!==e.nodeType||(n=e),new c(e,t,r,this,n)},O.createUnsafeMorph=function(e,t,r,n){var i=this.createMorph(e,t,r,n);return i.escaped=!1,i},O.createMorphAt=function(e,t,r,n){var i=-1===t?null:this.childAtIndex(e,t),a=-1===r?null:this.childAtIndex(e,r);return this.createMorph(e,i,a,n)},O.createUnsafeMorphAt=function(e,t,r,n){var i=this.createMorphAt(e,t,r,n);return i.escaped=!1,i},O.insertMorphBefore=function(e,t,r){var n=this.document.createTextNode(""),i=this.document.createTextNode("");return e.insertBefore(n,t),e.insertBefore(i,t),this.createMorph(e,n,i,r)},O.appendMorph=function(e,t){var r=this.document.createTextNode(""),n=this.document.createTextNode("");return e.appendChild(r),e.appendChild(n),this.createMorph(e,r,n,t)},O.parseHTML=function(e,t){if(s(t)===p)return u(e,this);var r=m(e,t,this);if(o(e,t)){for(var n=r[0];n&&1!==n.nodeType;)n=n.nextSibling;return n.childNodes}return r};var P;O.protocolForURL=function(e){return P||(P=this.document.createElement("a")),P.href=e,P.protocol},a["default"]=l}),e("morph/dom-helper/build-html-dom",["exports"],function(e){"use strict";function t(e,t){t="­"+t,e.innerHTML=t;for(var r=e.childNodes,n=r[0];1===n.nodeType&&!n.nodeName;)n=n.firstChild;if(3===n.nodeType&&"­"===n.nodeValue.charAt(0)){var i=n.nodeValue.slice(1);i.length?n.nodeValue=n.nodeValue.slice(1):n.parentNode.removeChild(n)}return r}function r(e,r){var n=r.tagName,i=r.outerHTML||(new XMLSerializer).serializeToString(r);if(!i)throw"Can't set innerHTML on "+n+" in this browser";for(var a=p[n.toLowerCase()],s=i.match(new RegExp("<"+n+"([^>]*)>","i"))[0],o="",u=[s,e,o],l=a.length,c=1+l;l--;)u.unshift("<"+a[l]+">"),u.push("");var h=document.createElement("div");t(h,u.join(""));for(var m=h;c--;)for(m=m.firstChild;m&&1!==m.nodeType;)m=m.nextSibling;for(;m&&m.tagName!==n;)m=m.nextSibling;return m?m.childNodes:[]}function n(e,t,r){var n=f(e,t,r);if("SELECT"===t.tagName)for(var i=0;n[i];i++)if("OPTION"===n[i].tagName){s(n[i].parentNode,n[i],e)&&(n[i].parentNode.selectedIndex=-1);break}return n}var i={foreignObject:1,desc:1,title:1};e.svgHTMLIntegrationPoints=i;var a="http://www.w3.org/2000/svg";e.svgNamespace=a;var s,o="undefined"==typeof document?!1:document,u=o&&function(e){if(void 0!==e.createElementNS){var t=e.createElementNS(a,"title");return t.innerHTML="
",0===t.childNodes.length||1!==t.childNodes[0].nodeType}}(o),l=o&&function(e){var t=e.createElement("div");return t.innerHTML="
",t.firstChild.innerHTML="",""===t.firstChild.innerHTML}(o),c=o&&function(e){var t=e.createElement("div");return t.innerHTML="Test: Value","Test:"===t.childNodes[0].nodeValue&&" Value"===t.childNodes[2].nodeValue}(o),h=o&&function(e){var t=e.createElement("div");return t.innerHTML="","selected"===t.childNodes[0].childNodes[0].getAttribute("selected")}(o);s=h?function(){var e=/]*selected/;return function(t,r,n){return 0===t.selectedIndex&&!e.test(n)}}():function(e,t){var r=t.getAttribute("selected");return 0===e.selectedIndex&&(null===r||""!==r&&"selected"!==r.toLowerCase())};var m,p=o&&function(e){var t,r,n=e.createElement("table");try{n.innerHTML=""}catch(i){}finally{r=0===n.childNodes.length}r&&(t={colgroup:["table"],table:[],tbody:["table"],tfoot:["table"],thead:["table"],tr:["table","tbody"]});var a=e.createElement("select");return a.innerHTML="",a.childNodes[0]||(t=t||{},t.select=[]),t}(o);m=l?function(e,r,n){return r=n.cloneNode(r,!1),t(r,e),r.childNodes}:function(e,t,r){return t=r.cloneNode(t,!1),t.innerHTML=e,t.childNodes};var f;f=p||c?function(e,t,n){var i=[],a=[];"string"==typeof e&&(e=e.replace(/(\s*)()(\s*)/g,function(e,t,r){return a.push(r),t}));var s;s=p[t.tagName.toLowerCase()]?r(e,t):m(e,t,n);var o,u,l,c,h=[];for(o=0;o0&&(d=n.document.createTextNode(v),f.parentNode.insertBefore(d,f)),b=a[o],b&&b.length>0&&(d=n.document.createTextNode(b),f.parentNode.insertBefore(d,f.nextSibling));return s}:m;var d;d=u?function(e,t,r){return i[t.tagName]?n(e,document.createElement("div"),r):n(e,t,r)}:n,e.buildHTMLDOM=d}),e("morph/dom-helper/classes",["exports"],function(e){"use strict";function t(e){var t=e.getAttribute("class")||"";return""!==t&&" "!==t?t.split(" "):[]}function r(e,t){for(var r=0,n=e.length,i=0,a=t.length,s=new Array(a);n>r;r++)for(i=0;a>i;i++)if(t[i]===e[r]){s[i]=r;break}return s}function n(e,n){for(var i=t(e),a=r(i,n),s=!1,o=0,u=n.length;u>o;o++)void 0===a[o]&&(s=!0,i.push(n[o]));s&&e.setAttribute("class",i.length>0?i.join(" "):"")}function i(e,n){for(var i=t(e),a=r(n,i),s=!1,o=[],u=0,l=i.length;l>u;u++)void 0===a[u]?o.push(i[u]):s=!0;s&&e.setAttribute("class",o.length>0?o.join(" "):"")}var a,s,o="undefined"==typeof document?!1:document,u=o&&function(){var e=document.createElement("div");return e.classList?(e.classList.add("boo"),e.classList.add("boo","baz"),"boo baz"===e.className):!1}();u?(a=function(e,t){e.classList?1===t.length?e.classList.add(t[0]):2===t.length?e.classList.add(t[0],t[1]):e.classList.add.apply(e.classList,t):n(e,t)},s=function(e,t){e.classList?1===t.length?e.classList.remove(t[0]):2===t.length?e.classList.remove(t[0],t[1]):e.classList.remove.apply(e.classList,t):i(e,t)}):(a=n,s=i),e.addClasses=a,e.removeClasses=s}),e("morph/dom-helper/prop",["exports"],function(e){"use strict";function t(e){return null===e||void 0===e}function r(e,t){var r,i=e.tagName,a=n[i];if(!a){a={};for(r in e)a[r.toLowerCase()]=r;n[i]=a}return a[t]}e.isAttrRemovalValue=t;var n={};e.propertyCaches=n,e.normalizeProperty=r}),e("morph/morph",["exports"],function(e){"use strict";function t(e,t){if(null===e||null===t)throw new Error("a fragment parent must have boundary nodes in order to detect insertion")}function r(e){if(!e||1!==e.nodeType)throw new Error("An element node must be provided for a contextualElement, you provided "+(e?"nodeType "+e.nodeType:"nothing"))}function n(e,n,i,a,s){11===e.nodeType?(t(n,i),this.element=null):this.element=e,this._parent=e,this.start=n,this.end=i,this.domHelper=a,r(s),this.contextualElement=s,this.escaped=!0,this.reset()}function i(e,t,r){for(var n,i=t,a=r.length;a--;)n=r[a],e.insertBefore(n,i),i=n}function a(e,t,r){var n,i;for(n=null===r?e.lastChild:r.previousSibling;null!==n&&n!==t;)i=n.previousSibling,e.removeChild(n),n=i}var s=Array.prototype.splice;n.prototype.reset=function(){this.text=null,this.owner=null,this.morphs=null,this.before=null,this.after=null},n.prototype.parent=function(){if(!this.element){var e=this.start.parentNode;this._parent!==e&&(this._parent=e),1===e.nodeType&&(this.element=e)}return this._parent},n.prototype.destroy=function(){this.owner?this.owner.removeMorph(this):a(this.element||this.parent(),this.start,this.end)},n.prototype.removeMorph=function(e){for(var t=this.morphs,r=0,n=t.length;n>r;r++)if(t[r]===e){this.replace(r,1);break}},n.prototype.setContent=function(e){this._update(this.element||this.parent(),e)},n.prototype.updateNode=function(e){var t=this.element||this.parent();return e?void this._updateNode(t,e):this._updateText(t,"")},n.prototype.updateText=function(e){this._updateText(this.element||this.parent(),e)},n.prototype.updateHTML=function(e){var t=this.element||this.parent();return e?void this._updateHTML(t,e):this._updateText(t,"")},n.prototype._update=function(e,t){null===t||void 0===t?this._updateText(e,""):"string"==typeof t?this.escaped?this._updateText(e,t):this._updateHTML(e,t):t.nodeType?this._updateNode(e,t):t.string?this._updateHTML(e,t.string):this._updateText(e,t.toString())},n.prototype._updateNode=function(e,t){if(this.text){if(3===t.nodeType)return void(this.text.nodeValue=t.nodeValue);this.text=null}var r=this.start,n=this.end;a(e,r,n),e.insertBefore(t,n),null!==this.before&&(this.before.end=r.nextSibling),null!==this.after&&(this.after.start=n.previousSibling)},n.prototype._updateText=function(e,t){if(this.text)return void(this.text.nodeValue=t);var r=this.domHelper.createTextNode(t);this.text=r,a(e,this.start,this.end),e.insertBefore(r,this.end),null!==this.before&&(this.before.end=r),null!==this.after&&(this.after.start=r)},n.prototype._updateHTML=function(e,t){var r=this.start,n=this.end;a(e,r,n),this.text=null;var s=this.domHelper.parseHTML(t,this.contextualElement);i(e,n,s),null!==this.before&&(this.before.end=r.nextSibling),null!==this.after&&(this.after.start=n.previousSibling)},n.prototype.append=function(e){null===this.morphs&&(this.morphs=[]);var t=this.morphs.length;return this.insert(t,e)},n.prototype.insert=function(e,t){null===this.morphs&&(this.morphs=[]);var r=this.element||this.parent(),i=this.morphs,a=e>0?i[e-1]:null,s=e0?c[e-1]:null,m=e+t0&&a(l,p,f),0===d)return null!==h&&(h.after=m,h.end=f),null!==m&&(m.before=h,m.start=p),void c.splice(e,t);if(i=new Array(d+2),d>0){for(o=0;d>o;o++)i[o+2]=u=new n(l,p,f,this.domHelper,this.contextualElement),u._update(l,r[o]),u.owner=this,null!==h&&(u.before=h,h.end=p.nextSibling,h.after=u),h=u,p=null===f?l.lastChild:f.previousSibling;null!==m&&(u.after=m,m.before=u,m.start=f.previousSibling)}i[0]=e,i[1]=t,s.apply(c,i)},e["default"]=n}),e("route-recognizer",["./route-recognizer/dsl","exports"],function(e,t){"use strict";function r(e){return"[object Array]"===Object.prototype.toString.call(e)}function n(e){this.string=e}function i(e){this.name=e}function a(e){this.name=e}function s(){}function o(e,t,r){"/"===e.charAt(0)&&(e=e.substr(1));for(var o=e.split("/"),u=[],l=0,c=o.length;c>l;l++){var h,m=o[l];(h=m.match(/^:([^\/]+)$/))?(u.push(new i(h[1])),t.push(h[1]),r.dynamics++):(h=m.match(/^\*([^\/]+)$/))?(u.push(new a(h[1])),t.push(h[1]),r.stars++):""===m?u.push(new s):(u.push(new n(m)),r.statics++)}return u}function u(e){this.charSpec=e,this.nextStates=[]}function l(e){return e.sort(function(e,t){if(e.types.stars!==t.types.stars)return e.types.stars-t.types.stars;if(e.types.stars){if(e.types.statics!==t.types.statics)return t.types.statics-e.types.statics;if(e.types.dynamics!==t.types.dynamics)return t.types.dynamics-e.types.dynamics}return e.types.dynamics!==t.types.dynamics?e.types.dynamics-t.types.dynamics:e.types.statics!==t.types.statics?t.types.statics-e.types.statics:0})}function c(e,t){for(var r=[],n=0,i=e.length;i>n;n++){var a=e[n];r=r.concat(a.match(t))}return r}function h(e){this.queryParams=e||{}}function m(e,t,r){for(var n=e.handlers,i=e.regex,a=t.match(i),s=1,o=new h(r),u=0,l=n.length;l>u;u++){for(var c=n[u],m=c.names,p={},f=0,d=m.length;d>f;f++)p[m[f]]=a[s++];o.push({handler:c.handler,params:p,isDynamic:!!m.length})}return o}function p(e,t){return t.eachChar(function(t){e=e.put(t)}),e}function f(e){return e=e.replace(/\+/gm,"%20"),decodeURIComponent(e)}var d=e["default"],v=["/",".","*","+","?","|","(",")","[","]","{","}","\\"],b=new RegExp("(\\"+v.join("|\\")+")","g");n.prototype={eachChar:function(e){for(var t,r=this.string,n=0,i=r.length;i>n;n++)t=r.charAt(n),e({validChars:t})},regex:function(){return this.string.replace(b,"\\$1")},generate:function(){return this.string}},i.prototype={eachChar:function(e){e({invalidChars:"/",repeat:!0})},regex:function(){return"([^/]+)"},generate:function(e){return e[this.name]}},a.prototype={eachChar:function(e){e({invalidChars:"",repeat:!0})},regex:function(){return"(.+)"},generate:function(e){return e[this.name]}},s.prototype={eachChar:function(){},regex:function(){return""},generate:function(){return""}},u.prototype={get:function(e){for(var t=this.nextStates,r=0,n=t.length;n>r;r++){var i=t[r],a=i.charSpec.validChars===e.validChars;if(a=a&&i.charSpec.invalidChars===e.invalidChars)return i}},put:function(e){var t;return(t=this.get(e))?t:(t=new u(e),this.nextStates.push(t),e.repeat&&t.nextStates.push(t),t)},match:function(e){for(var t,r,n,i=this.nextStates,a=[],s=0,o=i.length;o>s;s++)t=i[s],r=t.charSpec,"undefined"!=typeof(n=r.validChars)?-1!==n.indexOf(e)&&a.push(t):"undefined"!=typeof(n=r.invalidChars)&&-1===n.indexOf(e)&&a.push(t);return a}};var g=Object.create||function(e){function t(){}return t.prototype=e,new t};h.prototype=g({splice:Array.prototype.splice,slice:Array.prototype.slice,push:Array.prototype.push,length:0,queryParams:null});var y=function(){this.rootState=new u,this.names={}};y.prototype={add:function(e,t){for(var r,n=this.rootState,i="^",a={statics:0,dynamics:0,stars:0},u=[],l=[],c=!0,h=0,m=e.length;m>h;h++){var f=e[h],d=[],v=o(f.path,d,a);l=l.concat(v);for(var b=0,g=v.length;g>b;b++){var y=v[b];y instanceof s||(c=!1,n=n.put({validChars:"/"}),i+="/",n=p(n,y),i+=y.regex())}var _={handler:f.handler,names:d};u.push(_)}c&&(n=n.put({validChars:"/"}),i+="/"),n.handlers=u,n.regex=new RegExp(i+"$"),n.types=a,(r=t&&t.as)&&(this.names[r]={segments:l,handlers:u})},handlersFor:function(e){var t=this.names[e],r=[];if(!t)throw new Error("There is no route named "+e);for(var n=0,i=t.handlers.length;i>n;n++)r.push(t.handlers[n]);return r},hasRoute:function(e){return!!this.names[e]},generate:function(e,t){var r=this.names[e],n="";if(!r)throw new Error("There is no route named "+e);for(var i=r.segments,a=0,o=i.length;o>a;a++){var u=i[a];u instanceof s||(n+="/",n+=u.generate(t))}return"/"!==n.charAt(0)&&(n="/"+n),t&&t.queryParams&&(n+=this.generateQueryString(t.queryParams,r.handlers)),n},generateQueryString:function(e){var t=[],n=[];for(var i in e)e.hasOwnProperty(i)&&n.push(i);n.sort();for(var a=0,s=n.length;s>a;a++){i=n[a];var o=e[i];if(null!=o){var u=encodeURIComponent(i);if(r(o))for(var l=0,c=o.length;c>l;l++){var h=i+"[]="+encodeURIComponent(o[l]);t.push(h)}else u+="="+encodeURIComponent(o),t.push(u)}}return 0===t.length?"":"?"+t.join("&")},parseQueryString:function(e){for(var t=e.split("&"),r={},n=0;n2&&"[]"===s.slice(o-2)&&(u=!0,s=s.slice(0,o-2),r[s]||(r[s]=[])),i=a[1]?f(a[1]):""),u?r[s].push(i):r[s]=i}return r},recognize:function(e){var t,r,n,i,a=[this.rootState],s={},o=!1;if(i=e.indexOf("?"),-1!==i){var u=e.substr(i+1,e.length);e=e.substr(0,i),s=this.parseQueryString(u)}for(e=decodeURI(e),"/"!==e.charAt(0)&&(e="/"+e),t=e.length,t>1&&"/"===e.charAt(t-1)&&(e=e.substr(0,t-1),o=!0),r=0,n=e.length;n>r&&(a=c(a,e.charAt(r)),a.length);r++);var h=[];for(r=0,n=a.length;n>r;r++)a[r].handlers&&h.push(a[r]);a=l(h);var p=h[0];return p&&p.handlers?(o&&"(.+)$"===p.regex.source.slice(-5)&&(e+="/"),m(p,e,s)):void 0}},y.prototype.map=d,y.VERSION="1.10.0",t["default"]=y}),e("route-recognizer.umd",["./route-recognizer"],function(t){"use strict";var r=t["default"];"function"==typeof e&&e.amd?e(function(){return r}):"undefined"!=typeof module&&module.exports?module.exports=r:"undefined"!=typeof this&&(this.RouteRecognizer=r)}),e("route-recognizer/dsl",["exports"],function(e){"use strict";function t(e,t,r){this.path=e,this.matcher=t,this.delegate=r}function r(e){this.routes={},this.children={},this.target=e}function n(e,r,i){return function(a,s){var o=e+a;return s?void s(n(o,r,i)):new t(e+a,r,i)}}function i(e,t,r){for(var n=0,i=0,a=e.length;a>i;i++)n+=e[i].path.length;t=t.substr(n);var s={path:t,handler:r};e.push(s)}function a(e,t,r,n){var s=t.routes;for(var o in s)if(s.hasOwnProperty(o)){var u=e.slice();i(u,o,s[o]),t.children[o]?a(u,t.children[o],r,n):r.call(n,u)}}t.prototype={to:function(e,t){var r=this.delegate;if(r&&r.willAddRoute&&(e=r.willAddRoute(this.matcher.target,e)),this.matcher.add(this.path,e),t){if(0===t.length)throw new Error("You must have an argument in the function passed to `to`");this.matcher.addChild(this.path,e,t,this.delegate)}return this}},r.prototype={add:function(e,t){this.routes[e]=t},addChild:function(e,t,i,a){var s=new r(t);this.children[e]=s;var o=n(e,s,a);a&&a.contextEntered&&a.contextEntered(t,o),i(o)}},e["default"]=function(e,t){var i=new r;e(n("",i,this.delegate)),a([],i,function(e){t?t(this,e):this.add(e)},this)}}),e("router",["./router/router","exports"],function(e,t){"use strict";var r=e["default"];t["default"]=r}),e("router/handler-info",["./utils","rsvp/promise","exports"],function(e,t,r){"use strict";function n(e){var t=e||{};s(this,t),this.initialize(t)}function i(e,t){if(!e^!t)return!1;if(!e)return!0;for(var r in e)if(e.hasOwnProperty(r)&&e[r]!==t[r])return!1;return!0}var a=e.bind,s=e.merge,o=(e.serialize,e.promiseLabel),u=e.applyHook,l=t["default"];n.prototype={name:null,handler:null,params:null,context:null,factory:null,initialize:function(){},log:function(e,t){e.log&&e.log(this.name+": "+t)},promiseLabel:function(e){return o("'"+this.name+"' "+e)},getUnresolved:function(){return this},serialize:function(){return this.params||{}},resolve:function(e,t){var r=a(this,this.checkForAbort,e),n=a(this,this.runBeforeModelHook,t),i=a(this,this.getModel,t),s=a(this,this.runAfterModelHook,t),o=a(this,this.becomeResolved,t);return l.resolve(void 0,this.promiseLabel("Start handler")).then(r,null,this.promiseLabel("Check for abort")).then(n,null,this.promiseLabel("Before model")).then(r,null,this.promiseLabel("Check if aborted during 'beforeModel' hook")).then(i,null,this.promiseLabel("Model")).then(r,null,this.promiseLabel("Check if aborted in 'model' hook")).then(s,null,this.promiseLabel("After model")).then(r,null,this.promiseLabel("Check if aborted in 'afterModel' hook")).then(o,null,this.promiseLabel("Become resolved"))},runBeforeModelHook:function(e){return e.trigger&&e.trigger(!0,"willResolveModel",e,this.handler),this.runSharedModelHook(e,"beforeModel",[])},runAfterModelHook:function(e,t){var r=this.name;return this.stashResolvedModel(e,t),this.runSharedModelHook(e,"afterModel",[t]).then(function(){return e.resolvedModels[r]},null,this.promiseLabel("Ignore fulfillment value and return model value"))},runSharedModelHook:function(e,t,r){this.log(e,"calling "+t+" hook"),this.queryParams&&r.push(this.queryParams),r.push(e);var n=u(this.handler,t,r);return n&&n.isTransition&&(n=null),l.resolve(n,this.promiseLabel("Resolve value returned from one of the model hooks"))},getModel:null,checkForAbort:function(e,t){return l.resolve(e(),this.promiseLabel("Check for abort")).then(function(){return t},null,this.promiseLabel("Ignore fulfillment value and continue"))},stashResolvedModel:function(e,t){e.resolvedModels=e.resolvedModels||{},e.resolvedModels[this.name]=t},becomeResolved:function(e,t){var r=this.serialize(t);return e&&(this.stashResolvedModel(e,t),e.params=e.params||{},e.params[this.name]=r),this.factory("resolved",{context:t,name:this.name,handler:this.handler,params:r})},shouldSupercede:function(e){if(!e)return!0;var t=e.context===this.context;return e.name!==this.name||this.hasOwnProperty("context")&&!t||this.hasOwnProperty("params")&&!i(this.params,e.params)}},r["default"]=n}),e("router/handler-info/factory",["router/handler-info/resolved-handler-info","router/handler-info/unresolved-handler-info-by-object","router/handler-info/unresolved-handler-info-by-param","exports"],function(e,t,r,n){"use strict";function i(e,t){var r=i.klasses[e],n=new r(t||{});return n.factory=i,n}var a=e["default"],s=t["default"],o=r["default"];i.klasses={resolved:a,param:o,object:s},n["default"]=i}),e("router/handler-info/resolved-handler-info",["../handler-info","router/utils","rsvp/promise","exports"],function(e,t,r,n){"use strict";var i=e["default"],a=t.subclass,s=(t.promiseLabel,r["default"]),o=a(i,{resolve:function(e,t){return t&&t.resolvedModels&&(t.resolvedModels[this.name]=this.context),s.resolve(this,this.promiseLabel("Resolve"))},getUnresolved:function(){return this.factory("param",{name:this.name,handler:this.handler,params:this.params})},isResolved:!0});n["default"]=o}),e("router/handler-info/unresolved-handler-info-by-object",["../handler-info","router/utils","rsvp/promise","exports"],function(e,t,r,n){"use strict";var i=e["default"],a=(t.merge,t.subclass),s=(t.promiseLabel,t.isParam),o=r["default"],u=a(i,{getModel:function(e){return this.log(e,this.name+": resolving provided model"),o.resolve(this.context)},initialize:function(e){this.names=e.names||[],this.context=e.context},serialize:function(e){var t=e||this.context,r=this.names,n=this.handler,i={};if(s(t))return i[r[0]]=t,i;if(n.serialize)return n.serialize(t,r);if(1===r.length){var a=r[0];return i[a]=/_id$/.test(a)?t.id:t,i}}});n["default"]=u}),e("router/handler-info/unresolved-handler-info-by-param",["../handler-info","router/utils","exports"],function(e,t,r){"use strict";var n=e["default"],i=t.resolveHook,a=t.merge,s=t.subclass,o=(t.promiseLabel,s(n,{initialize:function(e){this.params=e.params||{}},getModel:function(e){var t=this.params;e&&e.queryParams&&(t={},a(t,this.params),t.queryParams=e.queryParams);var r=this.handler,n=i(r,"deserialize")||i(r,"model");return this.runSharedModelHook(e,n,[t])}}));r["default"]=o}),e("router/router",["route-recognizer","rsvp/promise","./utils","./transition-state","./transition","./transition-intent/named-transition-intent","./transition-intent/url-transition-intent","./handler-info","exports"],function(e,t,r,n,i,a,s,o,u){"use strict";function l(){this.recognizer=new w,this.reset()}function c(e,t){var r,n=!!this.activeTransition,i=n?this.activeTransition.state:this.state,a=e.applyToState(i,this.recognizer,this.getHandler,t),s=S(i.queryParams,a.queryParams);return g(a.handlerInfos,i.handlerInfos)?s&&(r=this.queryParamsTransition(s,n,i,a))?r:new j(this):t?void m(this,a):(r=new j(this,e,a),this.activeTransition&&this.activeTransition.abort(),this.activeTransition=r,r.promise=r.promise.then(function(e){return v(r,e.state)},null,T("Settle transition promise when transition is finalized")),n||_(this,a,r),h(this,a,s),r)}function h(e,t,r){r&&(e._changedQueryParams=r.all,C(e,t.handlerInfos,!0,["queryParamsDidChange",r.changed,r.all,r.removed]),e._changedQueryParams=null)}function m(e,t,r){var n=f(e.state,t);P(n.exited,function(e){var t=e.handler;delete t.context,k(t,"reset",!0,r),k(t,"exit",r)});var i=e.oldState=e.state;e.state=t;var a=e.currentHandlerInfos=n.unchanged.slice();try{P(n.reset,function(e){var t=e.handler;k(t,"reset",!1,r)}),P(n.updatedContext,function(e){return p(a,e,!1,r)}),P(n.entered,function(e){return p(a,e,!0,r)})}catch(s){throw e.state=i,e.currentHandlerInfos=i.handlerInfos,s}e.state.queryParams=y(e,a,t.queryParams,r)}function p(e,t,r,n){var i=t.handler,a=t.context;if(r&&k(i,"enter",n),n&&n.isAborted)throw new M;if(i.context=a,k(i,"contextDidChange"),k(i,"setup",a,n),n&&n.isAborted)throw new M;return e.push(t),!0}function f(e,t){var r,n,i,a=e.handlerInfos,s=t.handlerInfos,o={updatedContext:[],exited:[],entered:[],unchanged:[]},u=!1;for(n=0,i=s.length;i>n;n++){var l=a[n],c=s[n];l&&l.handler===c.handler||(r=!0),r?(o.entered.push(c),l&&o.exited.unshift(l)):u||l.context!==c.context?(u=!0,o.updatedContext.push(c)):o.unchanged.push(l)}for(n=s.length,i=a.length;i>n;n++)o.exited.unshift(a[n]);return o.reset=o.updatedContext.slice(),o.reset.reverse(),o}function d(e,t){var r=e.urlMethod;if(r){for(var n=e.router,i=t.handlerInfos,a=i[i.length-1].name,s={},o=i.length-1;o>=0;--o){var u=i[o];A(s,u.params),u.handler.inaccessibleByURL&&(r=null)}if(r){s.queryParams=e._visibleQueryParams||t.queryParams; +var l=n.recognizer.generate(a,s);"replace"===r?n.replaceURL(l):n.updateURL(l)}}}function v(e,t){try{E(e.router,e.sequence,"Resolved all models on destination route; finalizing transition.");{var r=e.router,n=t.handlerInfos;e.sequence}return m(r,t,e),e.isAborted?(r.state.handlerInfos=r.currentHandlerInfos,x.reject(I(e))):(d(e,t,e.intent.url),e.isActive=!1,r.activeTransition=null,C(r,r.currentHandlerInfos,!0,["didTransition"]),r.didTransition&&r.didTransition(r.currentHandlerInfos),E(r,e.sequence,"TRANSITION COMPLETE."),n[n.length-1].handler)}catch(i){if(!(i instanceof M)){var a=e.state.handlerInfos;e.trigger(!0,"error",i,e,a[a.length-1].handler),e.abort()}throw i}}function b(e,t,r){var n=t[0]||"/",i=t[t.length-1],a={};i&&i.hasOwnProperty("queryParams")&&(a=L.call(t).queryParams);var s;if(0===t.length){E(e,"Updating query params");var o=e.state.handlerInfos;s=new R({name:o[o.length-1].name,contexts:[],queryParams:a})}else"/"===n.charAt(0)?(E(e,"Attempting URL transition to "+n),s=new D({url:n})):(E(e,"Attempting transition to "+n),s=new R({name:t[0],contexts:O.call(t,1),queryParams:a}));return e.transitionByIntent(s,r)}function g(e,t){if(e.length!==t.length)return!1;for(var r=0,n=e.length;n>r;++r)if(e[r]!==t[r])return!1;return!0}function y(e,t,r,n){for(var i in r)r.hasOwnProperty(i)&&null===r[i]&&delete r[i];var a=[];C(e,t,!0,["finalizeQueryParamChange",r,a,n]),n&&(n._visibleQueryParams={});for(var s={},o=0,u=a.length;u>o;++o){var l=a[o];s[l.key]=l.value,n&&l.visible!==!1&&(n._visibleQueryParams[l.key]=l.value)}return s}function _(e,t,r){var n,i,a,s,o,u,l=e.state.handlerInfos,c=[],h=null;for(s=l.length,a=0;s>a;a++){if(o=l[a],u=t.handlerInfos[a],!u||o.name!==u.name){h=a;break}u.isResolved||c.push(o)}null!==h&&(n=l.slice(h,s),i=function(e){for(var t=0,r=n.length;r>t;t++)if(n[t].name===e)return!0;return!1},e._triggerWillLeave(n,r,i)),c.length>0&&e._triggerWillChangeContext(c,r),C(e,l,!0,["willTransition",r])}var w=e["default"],x=t["default"],C=r.trigger,E=r.log,O=r.slice,P=r.forEach,A=r.merge,N=(r.serialize,r.extractQueryParams),S=r.getChangelist,T=r.promiseLabel,k=r.callHook,V=n["default"],I=i.logAbort,j=i.Transition,M=i.TransitionAborted,R=a["default"],D=s["default"],L=(o.ResolvedHandlerInfo,Array.prototype.pop);l.prototype={map:function(e){this.recognizer.delegate=this.delegate,this.recognizer.map(e,function(e,t){for(var r=t.length-1,n=!0;r>=0&&n;--r){var i=t[r];e.add(t,{as:i.handler}),n="/"===i.path||""===i.path||".index"===i.handler.slice(-6)}})},hasRoute:function(e){return this.recognizer.hasRoute(e)},queryParamsTransition:function(e,t,r,n){var i=this;if(h(this,n,e),!t&&this.activeTransition)return this.activeTransition;var a=new j(this);return a.queryParamsOnly=!0,r.queryParams=y(this,n.handlerInfos,n.queryParams,a),a.promise=a.promise.then(function(e){return d(a,r,!0),i.didTransition&&i.didTransition(i.currentHandlerInfos),e},null,T("Transition complete")),a},transitionByIntent:function(e){try{return c.apply(this,arguments)}catch(t){return new j(this,e,null,t)}},reset:function(){this.state&&P(this.state.handlerInfos.slice().reverse(),function(e){var t=e.handler;k(t,"exit")}),this.state=new V,this.currentHandlerInfos=null},activeTransition:null,handleURL:function(e){var t=O.call(arguments);return"/"!==e.charAt(0)&&(t[0]="/"+e),b(this,t).method(null)},updateURL:function(){throw new Error("updateURL is not implemented")},replaceURL:function(e){this.updateURL(e)},transitionTo:function(){return b(this,arguments)},intermediateTransitionTo:function(){return b(this,arguments,!0)},refresh:function(e){for(var t=this.activeTransition?this.activeTransition.state:this.state,r=t.handlerInfos,n={},i=0,a=r.length;a>i;++i){var s=r[i];n[s.name]=s.params||{}}E(this,"Starting a refresh transition");var o=new R({name:r[r.length-1].name,pivotHandler:e||r[0].handler,contexts:[],queryParams:this._changedQueryParams||t.queryParams||{}});return this.transitionByIntent(o,!1)},replaceWith:function(){return b(this,arguments).method("replace")},generate:function(e){for(var t=N(O.call(arguments,1)),r=t[0],n=t[1],i=new R({name:e,contexts:r}),a=i.applyToState(this.state,this.recognizer,this.getHandler),s={},o=0,u=a.handlerInfos.length;u>o;++o){var l=a.handlerInfos[o],c=l.serialize();A(s,c)}return s.queryParams=n,this.recognizer.generate(e,s)},applyIntent:function(e,t){var r=new R({name:e,contexts:t}),n=this.activeTransition&&this.activeTransition.state||this.state;return r.applyToState(n,this.recognizer,this.getHandler)},isActiveIntent:function(e,t,r){var n,i,a=this.state.handlerInfos;if(!a.length)return!1;var s=a[a.length-1].name,o=this.recognizer.handlersFor(s),u=0;for(i=o.length;i>u&&(n=a[u],n.name!==e);++u);if(u===o.length)return!1;var l=new V;l.handlerInfos=a.slice(0,u+1),o=o.slice(0,u+1);var c=new R({name:s,contexts:t}),h=c.applyToHandlers(l,o,this.getHandler,s,!0,!0),m=g(h.handlerInfos,l.handlerInfos);if(!r||!m)return m;var p={};A(p,r);var f=this.state.queryParams;for(var d in f)f.hasOwnProperty(d)&&p.hasOwnProperty(d)&&(p[d]=f[d]);return m&&!S(p,r)},isActive:function(e){var t=N(O.call(arguments,1));return this.isActiveIntent(e,t[0],t[1])},trigger:function(){var e=O.call(arguments);C(this,this.currentHandlerInfos,!1,e)},log:null,_willChangeContextEvent:"willChangeContext",_triggerWillChangeContext:function(e,t){C(this,e,!0,[this._willChangeContextEvent,t])},_triggerWillLeave:function(e,t,r){C(this,e,!0,["willLeave",t,r])}},u["default"]=l}),e("router/transition-intent",["./utils","exports"],function(e,t){"use strict";function r(e){this.initialize(e),this.data=this.data||{}}e.merge;r.prototype={initialize:null,applyToState:null},t["default"]=r}),e("router/transition-intent/named-transition-intent",["../transition-intent","../transition-state","../handler-info/factory","../utils","exports"],function(e,t,r,n,i){"use strict";var a=e["default"],s=t["default"],o=r["default"],u=n.isParam,l=n.extractQueryParams,c=n.merge,h=n.subclass;i["default"]=h(a,{name:null,pivotHandler:null,contexts:null,queryParams:null,initialize:function(e){this.name=e.name,this.pivotHandler=e.pivotHandler,this.contexts=e.contexts||[],this.queryParams=e.queryParams},applyToState:function(e,t,r,n){var i=l([this.name].concat(this.contexts)),a=i[0],s=(i[1],t.handlersFor(a[0])),o=s[s.length-1].handler;return this.applyToHandlers(e,s,r,o,n)},applyToHandlers:function(e,t,r,n,i,a){var o,u,l=new s,h=this.contexts.slice(0),m=t.length;if(this.pivotHandler)for(o=0,u=t.length;u>o;++o)if(r(t[o].handler)===this.pivotHandler){m=o;break}!this.pivotHandler;for(o=t.length-1;o>=0;--o){var p=t[o],f=p.handler,d=r(f),v=e.handlerInfos[o],b=null;if(b=p.names.length>0?o>=m?this.createParamHandlerInfo(f,d,p.names,h,v):this.getHandlerInfoForDynamicSegment(f,d,p.names,h,v,n,o):this.createParamHandlerInfo(f,d,p.names,h,v),a){b=b.becomeResolved(null,b.context);var g=v&&v.context;p.names.length>0&&b.context===g&&(b.params=v&&v.params),b.context=g}var y=v;(o>=m||b.shouldSupercede(v))&&(m=Math.min(o,m),y=b),i&&!a&&(y=y.becomeResolved(null,y.context)),l.handlerInfos.unshift(y)}if(h.length>0)throw new Error("More context objects were passed than there are dynamic segments for the route: "+n);return i||this.invalidateChildren(l.handlerInfos,m),c(l.queryParams,this.queryParams||{}),l},invalidateChildren:function(e,t){for(var r=t,n=e.length;n>r;++r){{e[r]}e[r]=e[r].getUnresolved()}},getHandlerInfoForDynamicSegment:function(e,t,r,n,i,a,s){{var l;r.length}if(n.length>0){if(l=n[n.length-1],u(l))return this.createParamHandlerInfo(e,t,r,n,i);n.pop()}else{if(i&&i.name===e)return i;if(!this.preTransitionState)return i;var c=this.preTransitionState.handlerInfos[s];l=c&&c.context}return o("object",{name:e,handler:t,context:l,names:r})},createParamHandlerInfo:function(e,t,r,n,i){for(var a={},s=r.length;s--;){var l=i&&e===i.name&&i.params||{},c=n[n.length-1],h=r[s];if(u(c))a[h]=""+n.pop();else{if(!l.hasOwnProperty(h))throw new Error("You didn't provide enough string/numeric parameters to satisfy all of the dynamic segments for route "+e);a[h]=l[h]}}return o("param",{name:e,handler:t,params:a})}})}),e("router/transition-intent/url-transition-intent",["../transition-intent","../transition-state","../handler-info/factory","../utils","exports"],function(e,t,r,n,i){"use strict";function a(e){this.message=e||"UnrecognizedURLError",this.name="UnrecognizedURLError"}var s=e["default"],o=t["default"],u=r["default"],l=(n.oCreate,n.merge),c=n.subclass;i["default"]=c(s,{url:null,initialize:function(e){this.url=e.url},applyToState:function(e,t,r){var n,i,s=new o,c=t.recognize(this.url);if(!c)throw new a(this.url);var h=!1;for(n=0,i=c.length;i>n;++n){var m=c[n],p=m.handler,f=r(p);if(f.inaccessibleByURL)throw new a(this.url);var d=u("param",{name:p,handler:f,params:m.params}),v=e.handlerInfos[n];h||d.shouldSupercede(v)?(h=!0,s.handlerInfos[n]=d):s.handlerInfos[n]=v}return l(s.queryParams,c.queryParams),s}})}),e("router/transition-state",["./handler-info","./utils","rsvp/promise","exports"],function(e,t,r,n){"use strict";function i(){this.handlerInfos=[],this.queryParams={},this.params={}}var a=(e.ResolvedHandlerInfo,t.forEach),s=t.promiseLabel,o=t.callHook,u=r["default"];i.prototype={handlerInfos:null,queryParams:null,params:null,promiseLabel:function(e){var t="";return a(this.handlerInfos,function(e){""!==t&&(t+="."),t+=e.name}),s("'"+t+"': "+e)},resolve:function(e,t){function r(){return u.resolve(e(),c.promiseLabel("Check if should continue"))["catch"](function(e){return h=!0,u.reject(e)},c.promiseLabel("Handle abort"))}function n(e){var r=c.handlerInfos,n=t.resolveIndex>=r.length?r.length-1:t.resolveIndex;return u.reject({error:e,handlerWithError:c.handlerInfos[n].handler,wasAborted:h,state:c})}function i(e){var n=c.handlerInfos[t.resolveIndex].isResolved;if(c.handlerInfos[t.resolveIndex++]=e,!n){var i=e.handler;o(i,"redirect",e.context,t)}return r().then(s,null,c.promiseLabel("Resolve handler"))}function s(){if(t.resolveIndex===c.handlerInfos.length)return{error:null,state:c};var e=c.handlerInfos[t.resolveIndex];return e.resolve(r,t).then(i,null,c.promiseLabel("Proceed"))}var l=this.params;a(this.handlerInfos,function(e){l[e.name]=e.params||{}}),t=t||{},t.resolveIndex=0;var c=this,h=!1;return u.resolve(null,this.promiseLabel("Start transition")).then(s,null,this.promiseLabel("Resolve handler"))["catch"](n,this.promiseLabel("Handle error"))}},n["default"]=i}),e("router/transition",["rsvp/promise","./handler-info","./utils","exports"],function(e,t,r,n){"use strict";function i(e,t,r,n){function s(){return u.isAborted?o.reject(void 0,h("Transition aborted - reject")):void 0}var u=this;if(this.state=r||e.state,this.intent=t,this.router=e,this.data=this.intent&&this.intent.data||{},this.resolvedModels={},this.queryParams={},n)return this.promise=o.reject(n),void(this.error=n);if(r){this.params=r.params,this.queryParams=r.queryParams,this.handlerInfos=r.handlerInfos;var l=r.handlerInfos.length;l&&(this.targetName=r.handlerInfos[l-1].name);for(var c=0;l>c;++c){var m=r.handlerInfos[c];if(!m.isResolved)break;this.pivotHandler=m.handler}this.sequence=i.currentSequence++,this.promise=r.resolve(s,this)["catch"](function(e){return e.wasAborted||u.isAborted?o.reject(a(u)):(u.trigger("error",e.error,u,e.handlerWithError),u.abort(),o.reject(e.error))},h("Handle Abort"))}else this.promise=o.resolve(this.state),this.params={}}function a(e){return c(e.router,e.sequence,"detected abort."),new s}function s(e){this.message=e||"TransitionAborted",this.name="TransitionAborted"}var o=e["default"],u=(t.ResolvedHandlerInfo,r.trigger),l=r.slice,c=r.log,h=r.promiseLabel;i.currentSequence=0,i.prototype={targetName:null,urlMethod:"update",intent:null,params:null,pivotHandler:null,resolveIndex:0,handlerInfos:null,resolvedModels:null,isActive:!0,state:null,queryParamsOnly:!1,isTransition:!0,isExiting:function(e){for(var t=this.handlerInfos,r=0,n=t.length;n>r;++r){var i=t[r];if(i.name===e||i.handler===e)return!1}return!0},promise:null,data:null,then:function(e,t,r){return this.promise.then(e,t,r)},"catch":function(e,t){return this.promise["catch"](e,t)},"finally":function(e,t){return this.promise["finally"](e,t)},abort:function(){return this.isAborted?this:(c(this.router,this.sequence,this.targetName+": transition was aborted"),this.intent.preTransitionState=this.router.state,this.isAborted=!0,this.isActive=!1,this.router.activeTransition=null,this)},retry:function(){return this.abort(),this.router.transitionByIntent(this.intent,!1)},method:function(e){return this.urlMethod=e,this},trigger:function(e){var t=l.call(arguments);"boolean"==typeof e?t.shift():e=!1,u(this.router,this.state.handlerInfos.slice(0,this.resolveIndex+1),e,t)},followRedirects:function(){var e=this.router;return this.promise["catch"](function(t){return e.activeTransition?e.activeTransition.followRedirects():o.reject(t)})},toString:function(){return"Transition (sequence "+this.sequence+")"},log:function(e){c(this.router,this.sequence,e)}},i.prototype.send=i.prototype.trigger,n.Transition=i,n.logAbort=a,n.TransitionAborted=s}),e("router/utils",["exports"],function(e){"use strict";function t(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])}function r(e){var t,r,n=e&&e.length;return n&&n>0&&e[n-1]&&e[n-1].hasOwnProperty("queryParams")?(r=e[n-1].queryParams,t=v.call(e,0,n-1),[t,r]):[e,null]}function n(e){for(var t in e)if("number"==typeof e[t])e[t]=""+e[t];else if(b(e[t]))for(var r=0,n=e[t].length;n>r;r++)e[t][r]=""+e[t][r]}function i(e,t,r){e.log&&(3===arguments.length?e.log("Transition #"+t+": "+r):(r=t,e.log(r)))}function a(e,t){var r=arguments;return function(n){var i=v.call(r,2);return i.push(n),t.apply(e,i)}}function s(e){return"string"==typeof e||e instanceof String||"number"==typeof e||e instanceof Number}function o(e,t){for(var r=0,n=e.length;n>r&&!1!==t(e[r]);r++);}function u(e,t,r,n){if(e.triggerEvent)return void e.triggerEvent(t,r,n);var i=n.shift();if(!t){if(r)return;throw new Error("Could not trigger event '"+i+"'. There are no active handlers")}for(var a=!1,s=t.length-1;s>=0;s--){var o=t[s],u=o.handler;if(u.events&&u.events[i]){if(u.events[i].apply(u,n)!==!0)return;a=!0}}if(!a&&!r)throw new Error("Nothing handled the event '"+i+"'.")}function l(e,r){var i,a={all:{},changed:{},removed:{}};t(a.all,r);var s=!1;n(e),n(r);for(i in e)e.hasOwnProperty(i)&&(r.hasOwnProperty(i)||(s=!0,a.removed[i]=e[i]));for(i in r)if(r.hasOwnProperty(i))if(b(e[i])&&b(r[i]))if(e[i].length!==r[i].length)a.changed[i]=r[i],s=!0;else for(var o=0,u=e[i].length;u>o;o++)e[i][o]!==r[i][o]&&(a.changed[i]=r[i],s=!0);else e[i]!==r[i]&&(a.changed[i]=r[i],s=!0);return s&&a}function c(e){return"Router: "+e}function h(e,r){function n(t){e.call(this,t||{})}return n.prototype=g(e.prototype),t(n.prototype,r),n}function m(e,t){if(e){var r="_"+t;return e[r]&&r||e[t]&&t}}function p(e,t){var r=v.call(arguments,2);return f(e,t,r)}function f(e,t,r){var n=m(e,t);return n?e[n].apply(e,r):void 0}var d,v=Array.prototype.slice;d=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var b=d;e.isArray=b;var g=Object.create||function(e){function t(){}return t.prototype=e,new t};e.oCreate=g,e.extractQueryParams=r,e.log=i,e.bind=a,e.forEach=o,e.trigger=u,e.getChangelist=l,e.promiseLabel=c,e.subclass=h,e.merge=t,e.slice=v,e.isParam=s,e.coerceQueryParamsToString=n,e.callHook=p,e.resolveHook=m,e.applyHook=f}),e("rsvp",["./rsvp/promise","./rsvp/events","./rsvp/node","./rsvp/all","./rsvp/all-settled","./rsvp/race","./rsvp/hash","./rsvp/hash-settled","./rsvp/rethrow","./rsvp/defer","./rsvp/config","./rsvp/map","./rsvp/resolve","./rsvp/reject","./rsvp/filter","./rsvp/asap","exports"],function(e,t,r,n,i,a,s,o,u,l,c,h,m,p,f,d,v){"use strict";function b(e,t){T.async(e,t)}function g(){T.on.apply(T,arguments)}function y(){T.off.apply(T,arguments)}var _=e["default"],w=t["default"],x=r["default"],C=n["default"],E=i["default"],O=a["default"],P=s["default"],A=o["default"],N=u["default"],S=l["default"],T=c.config,k=c.configure,V=h["default"],I=m["default"],j=p["default"],M=f["default"],R=d["default"];T.async=R;var D=I;if("undefined"!=typeof window&&"object"==typeof window.__PROMISE_INSTRUMENTATION__){var L=window.__PROMISE_INSTRUMENTATION__;k("instrument",!0);for(var F in L)L.hasOwnProperty(F)&&g(F,L[F])}v.cast=D,v.Promise=_,v.EventTarget=w,v.all=C,v.allSettled=E,v.race=O,v.hash=P,v.hashSettled=A,v.rethrow=N,v.defer=S,v.denodeify=x,v.configure=k,v.on=g,v.off=y,v.resolve=I,v.reject=j,v.async=b,v.map=V,v.filter=M}),e("rsvp.umd",["./rsvp"],function(t){"use strict";var r=t.Promise,n=t.allSettled,i=t.hash,a=t.hashSettled,s=t.denodeify,o=t.on,u=t.off,l=t.map,c=t.filter,h=t.resolve,m=t.reject,p=t.rethrow,f=t.all,d=t.defer,v=t.EventTarget,b=t.configure,g=t.race,y=t.async,_={race:g,Promise:r,allSettled:n,hash:i,hashSettled:a,denodeify:s,on:o,off:u,map:l,filter:c,resolve:h,reject:m,all:f,rethrow:p,defer:d,EventTarget:v,configure:b,async:y};"function"==typeof e&&e.amd?e(function(){return _}):"undefined"!=typeof module&&module.exports?module.exports=_:"undefined"!=typeof this&&(this.RSVP=_)}),e("rsvp/-internal",["./utils","./instrument","./config","exports"],function(e,t,r,n){"use strict";function i(){return new TypeError("A promises callback cannot return that same promise.")}function a(){}function s(e){try{return e.then}catch(t){return N.error=t,N}}function o(e,t,r,n){try{e.call(t,r,n)}catch(i){return i}}function u(e,t,r){E.async(function(e){var n=!1,i=o(r,t,function(r){n||(n=!0,t!==r?h(e,r):p(e,r))},function(t){n||(n=!0,f(e,t))},"Settle: "+(e._label||" unknown promise"));!n&&i&&(n=!0,f(e,i))},e)}function l(e,t){t._state===P?p(e,t._result):e._state===A?f(e,t._result):d(t,void 0,function(r){t!==r?h(e,r):p(e,r)},function(t){f(e,t)})}function c(e,t){if(t.constructor===e.constructor)l(e,t);else{var r=s(t);r===N?f(e,N.error):void 0===r?p(e,t):x(r)?u(e,t,r):p(e,t)}}function h(e,t){e===t?p(e,t):w(t)?c(e,t):p(e,t)}function m(e){e._onerror&&e._onerror(e._result),v(e)}function p(e,t){e._state===O&&(e._result=t,e._state=P,0===e._subscribers.length?E.instrument&&C("fulfilled",e):E.async(v,e))}function f(e,t){e._state===O&&(e._state=A,e._result=t,E.async(m,e))}function d(e,t,r,n){var i=e._subscribers,a=i.length;e._onerror=null,i[a]=t,i[a+P]=r,i[a+A]=n,0===a&&e._state&&E.async(v,e)}function v(e){var t=e._subscribers,r=e._state;if(E.instrument&&C(r===P?"fulfilled":"rejected",e),0!==t.length){for(var n,i,a=e._result,s=0;se;e+=2){var t=d[e],r=d[e+1];t(r),d[e]=void 0,d[e+1]=void 0}l=0}function u(){try{{var e=r("vertx");e.runOnLoop||e.runOnContext}return n()}catch(t){return s()}}var l=0;e["default"]=function(e,t){d[l]=e,d[l+1]=t,l+=2,2===l&&c()};var c,h="undefined"!=typeof window?window:void 0,m=h||{},p=m.MutationObserver||m.WebKitMutationObserver,f="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,d=new Array(1e3);c="undefined"!=typeof process&&"[object process]"==={}.toString.call(process)?t():p?i():f?a():void 0===h&&"function"==typeof r?u():s()}),e("rsvp/config",["./events","exports"],function(e,t){"use strict";function r(e,t){return"onerror"===e?void i.on("error",t):2!==arguments.length?i[e]:void(i[e]=t)}var n=e["default"],i={instrument:!1};n.mixin(i),t.config=i,t.configure=r}),e("rsvp/defer",["./promise","exports"],function(e,t){"use strict";var r=e["default"];t["default"]=function(e){var t={};return t.promise=new r(function(e,r){t.resolve=e,t.reject=r},e),t}}),e("rsvp/enumerator",["./utils","./-internal","exports"],function(e,t,r){"use strict";function n(e,t,r){return e===h?{state:"fulfilled",value:r}:{state:"rejected",reason:r}}function i(e,t,r,n){this._instanceConstructor=e,this.promise=new e(o,n),this._abortOnReject=r,this._validateInput(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._init(),0===this.length?l(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&l(this.promise,this._result))):u(this.promise,this._validationError())}var a=e.isArray,s=e.isMaybeThenable,o=t.noop,u=t.reject,l=t.fulfill,c=t.subscribe,h=t.FULFILLED,m=t.REJECTED,p=t.PENDING;r.makeSettledResult=n,i.prototype._validateInput=function(e){return a(e)},i.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},i.prototype._init=function(){this._result=new Array(this.length)},r["default"]=i,i.prototype._enumerate=function(){for(var e=this.length,t=this.promise,r=this._input,n=0;t._state===p&&e>n;n++)this._eachEntry(r[n],n)},i.prototype._eachEntry=function(e,t){var r=this._instanceConstructor;s(e)?e.constructor===r&&e._state!==p?(e._onerror=null,this._settledAt(e._state,t,e._result)):this._willSettleAt(r.resolve(e),t):(this._remaining--,this._result[t]=this._makeResult(h,t,e))},i.prototype._settledAt=function(e,t,r){var n=this.promise;n._state===p&&(this._remaining--,this._abortOnReject&&e===m?u(n,r):this._result[t]=this._makeResult(e,t,r)),0===this._remaining&&l(n,this._result)},i.prototype._makeResult=function(e,t,r){return r},i.prototype._willSettleAt=function(e,t){var r=this;c(e,void 0,function(e){r._settledAt(h,t,e)},function(e){r._settledAt(m,t,e)})}}),e("rsvp/events",["exports"],function(e){"use strict";function t(e,t){for(var r=0,n=e.length;n>r;r++)if(e[r]===t)return r;return-1}function r(e){var t=e._promiseCallbacks;return t||(t=e._promiseCallbacks={}),t}e["default"]={mixin:function(e){return e.on=this.on,e.off=this.off,e.trigger=this.trigger,e._promiseCallbacks=void 0,e},on:function(e,n){var i,a=r(this);i=a[e],i||(i=a[e]=[]),-1===t(i,n)&&i.push(n)},off:function(e,n){var i,a,s=r(this);return n?(i=s[e],a=t(i,n),void(-1!==a&&i.splice(a,1))):void(s[e]=[])},trigger:function(e,t){var n,i,a=r(this);if(n=a[e])for(var s=0;so;o++)s[o]=t(e[o]);return n.all(s,r).then(function(t){for(var r=new Array(a),n=0,i=0;a>i;i++)t[i]&&(r[n]=e[i],n++);return r.length=n,r})})}}),e("rsvp/hash-settled",["./promise","./enumerator","./promise-hash","./utils","exports"],function(e,t,r,n,i){"use strict";function a(e,t,r){this._superConstructor(e,t,!1,r)}var s=e["default"],o=t.makeSettledResult,u=r["default"],l=t["default"],c=n.o_create;a.prototype=c(u.prototype),a.prototype._superConstructor=l,a.prototype._makeResult=o,a.prototype._validationError=function(){return new Error("hashSettled must be called with an object")},i["default"]=function(e,t){return new a(s,e,t).promise}}),e("rsvp/hash",["./promise","./promise-hash","exports"],function(e,t,r){"use strict";var n=e["default"],i=t["default"];r["default"]=function(e,t){return new i(n,e,t).promise}}),e("rsvp/instrument",["./config","./utils","exports"],function(e,t,r){"use strict";function n(){setTimeout(function(){for(var e,t=0;to;o++)s[o]=t(e[o]);return n.all(s,r)})}}),e("rsvp/node",["./promise","./-internal","./utils","exports"],function(e,t,r,n){"use strict";function i(){this.value=void 0}function a(e){try{return e.then}catch(t){return g.value=t,g}}function s(e,t,r){try{e.apply(t,r)}catch(n){return g.value=n,g}}function o(e,t){for(var r,n,i={},a=e.length,s=new Array(a),o=0;a>o;o++)s[o]=e[o];for(n=0;nn;n++)r[n-1]=e[n];return r}function l(e,t){return{then:function(r,n){return e.call(t,r,n)}}}function c(e,t,r,n){var i=s(r,n,t);return i===g&&v(e,i.value),e}function h(e,t,r,n){return p.all(t).then(function(t){var i=s(r,n,t);return i===g&&v(e,i.value),e})}function m(e){return e&&"object"==typeof e?e.constructor===p?!0:a(e):!1}var p=e["default"],f=t.noop,d=t.resolve,v=t.reject,b=r.isArray,g=new i,y=new i;n["default"]=function(e,t){var r=function(){for(var r,n=this,i=arguments.length,a=new Array(i+1),s=!1,g=0;i>g;++g){if(r=arguments[g],!s){if(s=m(r),s===y){var _=new p(f);return v(_,y.value),_}s&&s!==!0&&(r=l(s,r))}a[g]=r}var w=new p(f);return a[i]=function(e,r){e?v(w,e):void 0===t?d(w,r):t===!0?d(w,u(arguments)):b(t)?d(w,o(arguments,t)):d(w,r)},s?h(w,a,e,n):c(w,a,e,n)};return r.__proto__=e,r}}),e("rsvp/promise-hash",["./enumerator","./-internal","./utils","exports"],function(e,t,r,n){"use strict";function i(e,t,r){this._superConstructor(e,t,!0,r)}var a=e["default"],s=t.PENDING,o=r.o_create;n["default"]=i,i.prototype=o(a.prototype),i.prototype._superConstructor=a,i.prototype._init=function(){this._result={}},i.prototype._validateInput=function(e){return e&&"object"==typeof e},i.prototype._validationError=function(){return new Error("Promise.hash must be called with an object")},i.prototype._enumerate=function(){var e=this.promise,t=this._input,r=[];for(var n in t)e._state===s&&t.hasOwnProperty(n)&&r.push({position:n,entry:t[n]});var i=r.length;this._remaining=i;for(var a,o=0;e._state===s&&i>o;o++)a=r[o],this._eachEntry(a.entry,a.position)}}),e("rsvp/promise",["./config","./instrument","./utils","./-internal","./promise/all","./promise/race","./promise/resolve","./promise/reject","exports"],function(e,t,r,n,i,a,s,o,u){"use strict";function l(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function c(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function h(e,t){this._id=A++,this._label=t,this._state=void 0,this._result=void 0,this._subscribers=[],m.instrument&&p("created",this),v!==e&&(f(e)||l(),this instanceof h||c(),g(this,e))}var m=e.config,p=t["default"],f=r.isFunction,d=r.now,v=n.noop,b=n.subscribe,g=n.initializePromise,y=n.invokeCallback,_=n.FULFILLED,w=n.REJECTED,x=i["default"],C=a["default"],E=s["default"],O=o["default"],P="rsvp_"+d()+"-",A=0;u["default"]=h,h.cast=E,h.all=x,h.race=C,h.resolve=E,h.reject=O,h.prototype={constructor:h,_guidKey:P,_onerror:function(e){m.trigger("error",e)},then:function(e,t,r){var n=this,i=n._state;if(i===_&&!e||i===w&&!t)return m.instrument&&p("chained",this,this),this;n._onerror=null;var a=new this.constructor(v,r),s=n._result;if(m.instrument&&p("chained",n,a),i){var o=arguments[i-1];m.async(function(){y(i,a,o,s)})}else b(n,a,e,t);return a},"catch":function(e,t){return this.then(null,e,t)},"finally":function(e,t){var r=this.constructor;return this.then(function(t){return r.resolve(e()).then(function(){return t})},function(t){return r.resolve(e()).then(function(){throw t})},t)}}}),e("rsvp/promise/all",["../enumerator","exports"],function(e,t){"use strict";var r=e["default"];t["default"]=function(e,t){return new r(this,e,!0,t).promise}}),e("rsvp/promise/race",["../utils","../-internal","exports"],function(e,t,r){"use strict";var n=e.isArray,i=t.noop,a=t.resolve,s=t.reject,o=t.subscribe,u=t.PENDING;r["default"]=function(e,t){function r(e){a(h,e)}function l(e){s(h,e)}var c=this,h=new c(i,t);if(!n(e))return s(h,new TypeError("You must pass an array to race.")),h;for(var m=e.length,p=0;h._state===u&&m>p;p++)o(c.resolve(e[p]),void 0,r,l);return h}}),e("rsvp/promise/reject",["../-internal","exports"],function(e,t){"use strict";var r=e.noop,n=e.reject;t["default"]=function(e,t){var i=this,a=new i(r,t);return n(a,e),a}}),e("rsvp/promise/resolve",["../-internal","exports"],function(e,t){"use strict";var r=e.noop,n=e.resolve;t["default"]=function(e,t){var i=this;if(e&&"object"==typeof e&&e.constructor===i)return e;var a=new i(r,t);return n(a,e),a}}),e("rsvp/race",["./promise","exports"],function(e,t){"use strict";var r=e["default"];t["default"]=function(e,t){return r.race(e,t)}}),e("rsvp/reject",["./promise","exports"],function(e,t){"use strict";var r=e["default"];t["default"]=function(e,t){return r.reject(e,t)}}),e("rsvp/resolve",["./promise","exports"],function(e,t){"use strict";var r=e["default"];t["default"]=function(e,t){return r.resolve(e,t)}}),e("rsvp/rethrow",["exports"],function(e){"use strict";e["default"]=function(e){throw setTimeout(function(){throw e}),e}}),e("rsvp/utils",["exports"],function(e){"use strict";function t(e){return"function"==typeof e||"object"==typeof e&&null!==e}function r(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function i(){}e.objectOrFunction=t,e.isFunction=r,e.isMaybeThenable=n;var a;a=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var s=a;e.isArray=s;var o=Date.now||function(){return(new Date).getTime()};e.now=o;var u=Object.create||function(e){if(arguments.length>1)throw new Error("Second argument not supported");if("object"!=typeof e)throw new TypeError("Argument must be an object");return i.prototype=e,new i};e.o_create=u}),t("ember")}(); \ No newline at end of file diff --git a/website/source/assets/javascripts/lib/ember-template-compiler.js b/website/source/assets/javascripts/lib/ember-template-compiler.js new file mode 100644 index 0000000000..213f5ad28d --- /dev/null +++ b/website/source/assets/javascripts/lib/ember-template-compiler.js @@ -0,0 +1,4 @@ +!function(){var t,e,r,n,i;!function(){function s(){}function o(t,e){if("."!==t.charAt(0))return t;for(var r=t.split("/"),n=e.split("/").slice(0,-1),i=0,s=r.length;s>i;i++){var o=r[i];if(".."===o)n.pop();else{if("."===o)continue;n.push(o)}}return n.join("/")}if(i=this.Ember=this.Ember||{},"undefined"==typeof i&&(i={}),"undefined"==typeof i.__loader){var a={},l={};t=function(t,e,r){a[t]={deps:e,callback:r}},n=r=e=function(t){var r=l[t];if(void 0!==r)return l[t];if(r===s)return void 0;if(l[t]={},!a[t])throw new Error("Could not find module "+t);for(var n,i=a[t],c=i.deps,u=i.callback,p=[],h=c.length,m=0;h>m;m++)p.push("exports"===c[m]?n={}:e(o(c[m],t)));var d=0===h?u.call(this):u.apply(this,p);return l[t]=n||(void 0===d?s:d)},n._eak_seen=a,i.__loader={define:t,require:r,registry:a}}else t=i.__loader.define,n=r=e=i.__loader.require}(),t("ember-metal/core",["exports"],function(t){"use strict";function e(){return this}"undefined"==typeof i&&(i={}),i.imports=i.imports||this,i.lookup=i.lookup||this;var r=i.exports=i.exports||this;r.Em=r.Ember=i,i.isNamespace=!0,i.toString=function(){return"Ember"},i.VERSION="1.10.0",i.ENV||(i.ENV="undefined"!=typeof EmberENV?EmberENV:"undefined"!=typeof ENV?ENV:{}),i.config=i.config||{},"undefined"==typeof i.ENV.DISABLE_RANGE_API&&(i.ENV.DISABLE_RANGE_API=!0),"undefined"==typeof MetamorphENV&&(r.MetamorphENV={}),MetamorphENV.DISABLE_RANGE_API=i.ENV.DISABLE_RANGE_API,i.FEATURES=i.ENV.FEATURES||{},i.FEATURES.isEnabled=function(t){var e=i.FEATURES[t];return i.ENV.ENABLE_ALL_FEATURES?!0:e===!0||e===!1||void 0===e?e:i.ENV.ENABLE_OPTIONAL_FEATURES?!0:!1},i.EXTEND_PROTOTYPES=i.ENV.EXTEND_PROTOTYPES,"undefined"==typeof i.EXTEND_PROTOTYPES&&(i.EXTEND_PROTOTYPES=!0),i.LOG_STACKTRACE_ON_DEPRECATION=i.ENV.LOG_STACKTRACE_ON_DEPRECATION!==!1,i.SHIM_ES5=i.ENV.SHIM_ES5===!1?!1:i.EXTEND_PROTOTYPES,i.LOG_VERSION=i.ENV.LOG_VERSION===!1?!1:!0,t.K=e,i.K=e,"undefined"==typeof i.assert&&(i.assert=e),"undefined"==typeof i.warn&&(i.warn=e),"undefined"==typeof i.debug&&(i.debug=e),"undefined"==typeof i.runInDebug&&(i.runInDebug=e),"undefined"==typeof i.deprecate&&(i.deprecate=e),"undefined"==typeof i.deprecateFunc&&(i.deprecateFunc=function(t,e){return e}),t["default"]=i}),t("ember-template-compiler",["ember-metal/core","ember-template-compiler/system/precompile","ember-template-compiler/system/compile","ember-template-compiler/system/template","ember-template-compiler/plugins","ember-template-compiler/plugins/transform-each-in-to-hash","ember-template-compiler/plugins/transform-with-as-to-hash","ember-template-compiler/compat","exports"],function(t,e,r,n,i,s,o,a,l){"use strict";var c=t["default"],u=e["default"],p=r["default"],h=n["default"],m=i.registerPlugin,d=s["default"],f=o["default"];m("ast",f),m("ast",d),l._Ember=c,l.precompile=u,l.compile=p,l.template=h,l.registerPlugin=m}),t("ember-template-compiler/compat",["ember-metal/core","ember-template-compiler/compat/precompile","ember-template-compiler/system/compile","ember-template-compiler/system/template"],function(t,e,r,n){"use strict";var i=t["default"],s=e["default"],o=r["default"],a=n["default"],l=i.Handlebars=i.Handlebars||{};l.precompile=s,l.compile=o,l.template=a}),t("ember-template-compiler/compat/precompile",["exports"],function(t){"use strict";var r,n;t["default"]=function(t){if((!r||!n)&&i.__loader.registry["htmlbars-compiler/compiler"]){var s=e("htmlbars-compiler/compiler");r=s.compile,n=s.compileSpec}if(!r||!n)throw new Error("Cannot call `precompile` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `precompile`.");var o=void 0===arguments[1]?!0:arguments[1],a=o?r:n;return a(t)}}),t("ember-template-compiler/plugins",["exports"],function(t){"use strict";function e(t,e){if(!r[t])throw new Error('Attempting to register "'+e+'" as "'+t+'" which is not a valid HTMLBars plugin type.');r[t].push(e)}var r={ast:[]};t.registerPlugin=e,t["default"]=r}),t("ember-template-compiler/plugins/transform-each-in-to-hash",["exports"],function(t){"use strict";function e(){this.syntax=null}e.prototype.transform=function(t){var e=this,r=new e.syntax.Walker,n=e.syntax.builders;return r.visit(t,function(t){if(e.validate(t)){if(t.program&&t.program.blockParams.length)throw new Error("You cannot use keyword (`{{each foo in bar}}`) and block params (`{{each bar as |foo|}}`) at the same time.");var r=t.sexpr.params.splice(0,2),i=r[0].original;t.sexpr.hash||(t.sexpr.hash=n.hash()),t.sexpr.hash.pairs.push(n.pair("keyword",n.string(i)))}}),t},e.prototype.validate=function(t){return("BlockStatement"===t.type||"MustacheStatement"===t.type)&&"each"===t.sexpr.path.original&&3===t.sexpr.params.length&&"PathExpression"===t.sexpr.params[1].type&&"in"===t.sexpr.params[1].original},t["default"]=e}),t("ember-template-compiler/plugins/transform-with-as-to-hash",["exports"],function(t){"use strict";function e(){this.syntax=null}e.prototype.transform=function(t){var e=this,r=new e.syntax.Walker;return r.visit(t,function(t){if(e.validate(t)){if(t.program&&t.program.blockParams.length)throw new Error("You cannot use keyword (`{{with foo as bar}}`) and block params (`{{with foo as |bar|}}`) at the same time.");var r=t.sexpr.params.splice(1,2),n=r[1].original;t.program.blockParams=[n]}}),t},e.prototype.validate=function(t){return"BlockStatement"===t.type&&"with"===t.sexpr.path.original&&3===t.sexpr.params.length&&"PathExpression"===t.sexpr.params[1].type&&"as"===t.sexpr.params[1].original},t["default"]=e}),t("ember-template-compiler/system/compile",["ember-template-compiler/system/compile_options","ember-template-compiler/system/template","exports"],function(t,r,n){"use strict";var s,o=t["default"],a=r["default"];n["default"]=function(t){if(!s&&i.__loader.registry["htmlbars-compiler/compiler"]&&(s=e("htmlbars-compiler/compiler").compile),!s)throw new Error("Cannot call `compile` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `compile`.");var r=s(t,o());return a(r)}}),t("ember-template-compiler/system/compile_options",["ember-metal/core","ember-template-compiler/plugins","exports"],function(t,e,r){"use strict";var n=(t["default"],e["default"]);r["default"]=function(){var t=!0;return{disableComponentGeneration:t,plugins:n}}}),t("ember-template-compiler/system/precompile",["ember-template-compiler/system/compile_options","exports"],function(t,r){"use strict";var n,s=t["default"];r["default"]=function(t){if(!n&&i.__loader.registry["htmlbars-compiler/compiler"]&&(n=e("htmlbars-compiler/compiler").compileSpec),!n)throw new Error("Cannot call `compileSpec` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `compileSpec`.");return n(t,s())}}),t("ember-template-compiler/system/template",["exports"],function(t){"use strict";t["default"]=function(t){return t.isTop=!0,t.isMethod=!1,t}}),t("htmlbars-compiler",["./htmlbars-compiler/compiler","exports"],function(t,e){"use strict";var r=t.compile,n=t.compilerSpec;e.compile=r,e.compilerSpec=n}),t("htmlbars-compiler/compiler",["../htmlbars-syntax/parser","./template-compiler","exports"],function(t,e,r){"use strict";function n(t,e){var r=i(t,e);return new Function("return "+r)()}function i(t,e){var r=s(t,e),n=new o(e),i=n.compile(r);return i}var s=t.preprocess,o=e["default"];r.compile=n,r.compileSpec=i}),t("htmlbars-compiler/fragment-javascript-compiler",["./utils","../htmlbars-util/quoting","exports"],function(t,e,r){"use strict";function n(){this.source=[],this.depth=-1}var i=t.processOpcodes,s=e.string,o="http://www.w3.org/2000/svg",a={foreignObject:!0,desc:!0,title:!0};r["default"]=n,n.prototype.compile=function(t,e){return this.source.length=0,this.depth=-1,this.indent=e&&e.indent||"",this.namespaceFrameStack=[{namespace:null,depth:null}],this.domNamespace=null,this.source.push("function build(dom) {\n"),i(this,t),this.source.push(this.indent+"}"),this.source.join("")},n.prototype.createFragment=function(){var t="el"+ ++this.depth;this.source.push(this.indent+" var "+t+" = dom.createDocumentFragment();\n")},n.prototype.createElement=function(t){var e="el"+ ++this.depth;"svg"===t&&this.pushNamespaceFrame({namespace:o,depth:this.depth}),this.ensureNamespace(),this.source.push(this.indent+" var "+e+" = dom.createElement("+s(t)+");\n"),a[t]&&this.pushNamespaceFrame({namespace:null,depth:this.depth})},n.prototype.createText=function(t){var e="el"+ ++this.depth;this.source.push(this.indent+" var "+e+" = dom.createTextNode("+s(t)+");\n")},n.prototype.createComment=function(t){var e="el"+ ++this.depth;this.source.push(this.indent+" var "+e+" = dom.createComment("+s(t)+");\n")},n.prototype.returnNode=function(){var t="el"+this.depth;this.source.push(this.indent+" return "+t+";\n")},n.prototype.setAttribute=function(t,e,r){var n="el"+this.depth;this.source.push(r?this.indent+" dom.setAttributeNS("+n+","+s(r)+","+s(t)+","+s(e)+");\n":this.indent+" dom.setAttribute("+n+","+s(t)+","+s(e)+");\n")},n.prototype.appendChild=function(){this.depth===this.getCurrentNamespaceFrame().depth&&this.popNamespaceFrame();var t="el"+this.depth--,e="el"+this.depth;this.source.push(this.indent+" dom.appendChild("+e+", "+t+");\n")},n.prototype.getCurrentNamespaceFrame=function(){return this.namespaceFrameStack[this.namespaceFrameStack.length-1]},n.prototype.pushNamespaceFrame=function(t){this.namespaceFrameStack.push(t)},n.prototype.popNamespaceFrame=function(){return this.namespaceFrameStack.pop()},n.prototype.ensureNamespace=function(){var t=this.getCurrentNamespaceFrame().namespace;this.domNamespace!==t&&(this.source.push(this.indent+" dom.setNamespace("+(t?s(t):"null")+");\n"),this.domNamespace=t)}}),t("htmlbars-compiler/fragment-opcode-compiler",["./template-visitor","./utils","../htmlbars-util","../htmlbars-util/array-utils","exports"],function(t,e,r,n,i){"use strict";function s(){this.opcodes=[]}var o=t["default"],a=e.processOpcodes,l=r.getAttrNamespace,c=n.forEach;i["default"]=s,s.prototype.compile=function(t){var e=new o;return e.visit(t),a(this,e.actions),this.opcodes},s.prototype.opcode=function(t,e){this.opcodes.push([t,e])},s.prototype.text=function(t,e,r,n){this.opcode("createText",[t.chars]),n||this.opcode("appendChild")},s.prototype.comment=function(t,e,r,n){this.opcode("createComment",[t.value]),n||this.opcode("appendChild")},s.prototype.openElement=function(t){this.opcode("createElement",[t.tag]),c(t.attributes,this.attribute,this)},s.prototype.closeElement=function(t,e,r,n){n||this.opcode("appendChild")},s.prototype.startProgram=function(t){this.opcodes.length=0,1!==t.body.length&&this.opcode("createFragment")},s.prototype.endProgram=function(){this.opcode("returnNode")},s.prototype.mustache=function(){},s.prototype.component=function(){},s.prototype.block=function(){},s.prototype.attribute=function(t){if("TextNode"===t.value.type){var e=l(t.name);this.opcode("setAttribute",[t.name,t.value.chars,e])}},s.prototype.setNamespace=function(t){this.opcode("setNamespace",[t])}}),t("htmlbars-compiler/hydration-javascript-compiler",["./utils","../htmlbars-util/quoting","exports"],function(t,e,r){"use strict";function n(){this.stack=[],this.source=[],this.mustaches=[],this.parents=[["fragment"]],this.parentCount=0,this.morphs=[],this.fragmentProcessing=[],this.hooks=void 0}var i=t.processOpcodes,s=e.string,o=e.array;r["default"]=n;var a=n.prototype;a.compile=function(t,e){this.stack.length=0,this.mustaches.length=0,this.source.length=0,this.parents.length=1,this.parents[0]=["fragment"],this.morphs.length=0,this.fragmentProcessing.length=0,this.parentCount=0,this.indent=e&&e.indent||"",this.hooks={},i(this,t);var r,n;if(this.morphs.length){var s="";for(r=0,n=this.morphs.length;n>r;++r){var o=this.morphs[r];s+=this.indent+" var "+o[0]+" = "+o[1]+";\n"}this.source.unshift(s)}if(this.fragmentProcessing.length){var a="";for(r=0,n=this.fragmentProcessing.length;n>r;++r)a+=this.indent+" "+this.fragmentProcessing[r]+"\n";this.source.unshift(a)}return this.source.join("")},a.prepareArray=function(t){for(var e=[],r=0;t>r;r++)e.push(this.stack.pop());this.stack.push("["+e.join(", ")+"]")},a.prepareObject=function(t){for(var e=[],r=0;t>r;r++)e.push(this.stack.pop()+": "+this.stack.pop());this.stack.push("{"+e.join(", ")+"}")},a.pushRaw=function(t){this.stack.push(t)},a.pushLiteral=function(t){this.stack.push("string"==typeof t?s(t):t.toString())},a.pushHook=function(t,e){this.hooks[t]=!0,this.stack.push(t+"("+e.join(", ")+")")},a.pushGetHook=function(t){this.pushHook("get",["env","context",s(t)])},a.pushSexprHook=function(){this.pushHook("subexpr",["env","context",this.stack.pop(),this.stack.pop(),this.stack.pop()])},a.pushConcatHook=function(){this.pushHook("concat",["env",this.stack.pop()])},a.printHook=function(t,e){this.hooks[t]=!0,this.source.push(this.indent+" "+t+"("+e.join(", ")+");\n")},a.printSetHook=function(t,e){this.printHook("set",["env","context",s(t),"blockArguments["+e+"]"])},a.printBlockHook=function(t,e,r){this.printHook("block",["env","morph"+t,"context",this.stack.pop(),this.stack.pop(),this.stack.pop(),null===e?"null":"child"+e,null===r?"null":"child"+r])},a.printInlineHook=function(t){this.printHook("inline",["env","morph"+t,"context",this.stack.pop(),this.stack.pop(),this.stack.pop()])},a.printContentHook=function(t){this.printHook("content",["env","morph"+t,"context",this.stack.pop()])},a.printComponentHook=function(t,e){this.printHook("component",["env","morph"+t,"context",this.stack.pop(),this.stack.pop(),null===e?"null":"child"+e])},a.printAttributeHook=function(t,e){this.printHook("attribute",["env","attrMorph"+t,"element"+e,this.stack.pop(),this.stack.pop()])},a.printElementHook=function(t){this.printHook("element",["env","element"+t,"context",this.stack.pop(),this.stack.pop(),this.stack.pop()])},a.createMorph=function(t,e,r,n,i){var s=0===e.length,o=this.getParent(),a=i?"createMorphAt":"createUnsafeMorphAt",l="dom."+a+"("+o+","+(null===r?"-1":r)+","+(null===n?"-1":n)+(s?",contextualElement)":")");this.morphs.push(["morph"+t,l])},a.createAttrMorph=function(t,e,r,n,i){var s=n?"createAttrMorph":"createUnsafeAttrMorph",o="dom."+s+"(element"+e+", '"+r+(i?"', '"+i:"")+"')";this.morphs.push(["attrMorph"+t,o])},a.repairClonedNode=function(t,e){var r=this.getParent(),n="if (this.cachedFragment) { dom.repairClonedNode("+r+","+o(t)+(e?",true":"")+"); }";this.fragmentProcessing.push(n)},a.shareElement=function(t){var e="element"+t;this.fragmentProcessing.push("var "+e+" = "+this.getParent()+";"),this.parents[this.parents.length-1]=[e]},a.consumeParent=function(t){var e=this.lastParent().slice();e.push(t),this.parents.push(e)},a.popParent=function(){this.parents.pop()},a.getParent=function(){var t=this.lastParent().slice(),e=t.shift();return t.length?"dom.childAt("+e+", ["+t.join(", ")+"])":e},a.lastParent=function(){return this.parents[this.parents.length-1]}}),t("htmlbars-compiler/hydration-opcode-compiler",["./template-visitor","./utils","../htmlbars-util","../htmlbars-util/array-utils","../htmlbars-syntax/utils","exports"],function(t,e,r,n,i,s){"use strict";function o(t){return y(t.sexpr)?t.sexpr:t.sexpr.path}function a(t){for(var e=0,r=t.attributes.length;r>e;e++)if("checked"===t.attributes[e].name)return!0;return!1}function l(){this.opcodes=[],this.paths=[],this.templateId=0,this.currentDOMChildIndex=0,this.morphs=[],this.morphNum=0,this.attrMorphNum=0,this.element=null,this.elementNum=-1}function c(t,e){t.opcode("pushLiteral",e.original)}function u(t,e){for(var r=e.length-1;r>=0;r--){var n=e[r];t[n.type](n)}t.opcode("prepareArray",e.length)}function p(t,e){for(var r=e.pairs,n=r.length-1;n>=0;n--){var i=r[n].key,s=r[n].value;t[s.type](s),t.opcode("pushLiteral",i)}t.opcode("prepareObject",r.length)}function h(t,e){p(t,e.hash),u(t,e.params),c(t,e.path)}function m(t,e){if(0!==t.length){var r;for(r=e.length-1;r>=0;--r){var n=e[r][0];if("shareElement"===n||"consumeParent"===n||"popParent"===n)break}for(var i=[r+1,0],s=0;s0&&this.opcode("repairClonedNode",r)},l.prototype.endProgram=function(){m(this.morphs,this.opcodes)},l.prototype.text=function(){++this.currentDOMChildIndex},l.prototype.comment=function(){++this.currentDOMChildIndex},l.prototype.openElement=function(t,e,r,n,i,s){m(this.morphs,this.opcodes),++this.currentDOMChildIndex,this.element=this.currentDOMChildIndex,n||(this.opcode("consumeParent",this.currentDOMChildIndex),i>1&&(this.opcode("shareElement",++this.elementNum),this.element=null));var o=a(t);(s.length>0||o)&&this.opcode("repairClonedNode",s,o),this.paths.push(this.currentDOMChildIndex),this.currentDOMChildIndex=-1,b(t.attributes,this.attribute,this),b(t.helpers,this.elementHelper,this)},l.prototype.closeElement=function(t,e,r,n){m(this.morphs,this.opcodes),n||this.opcode("popParent"),this.currentDOMChildIndex=this.paths.pop()},l.prototype.block=function(t,e,r){var n=t.sexpr,i=this.currentDOMChildIndex,s=0>i?null:i,o=e===r-1?null:i+1,a=this.morphNum++;this.morphs.push([a,this.paths.slice(),s,o,!0]);var l=this.templateId++,c=null===t.inverse?null:this.templateId++;h(this,n),this.opcode("printBlockHook",a,l,c)},l.prototype.component=function(t,e,r){var n=this.currentDOMChildIndex,i=t.program||{},s=i.blockParams||[],a=0>n?null:n,l=e===r-1?null:n+1,c=this.morphNum++;this.morphs.push([c,this.paths.slice(),a,l,!0]);for(var p=t.attributes,h=p.length-1;h>=0;h--){var m=p[h].name,d=p[h].value;"TextNode"===d.type?this.opcode("pushLiteral",d.chars):"MustacheStatement"===d.type?this.accept(o(d)):"ConcatStatement"===d.type&&(u(this,d.parts),this.opcode("pushConcatHook")),this.opcode("pushLiteral",m)}this.opcode("prepareObject",p.length),this.opcode("pushLiteral",t.tag),this.opcode("printComponentHook",c,this.templateId++,s.length)},l.prototype.attribute=function(t){var e=t.value,r=!0,n=g(t.name);if("TextNode"!==e.type){"MustacheStatement"===e.type?(r=e.escaped,this.accept(o(e))):"ConcatStatement"===e.type&&(u(this,e.parts),this.opcode("pushConcatHook")),this.opcode("pushLiteral",t.name),null!==this.element&&(this.opcode("shareElement",++this.elementNum),this.element=null);var i=this.attrMorphNum++;this.opcode("createAttrMorph",i,this.elementNum,t.name,r,n),this.opcode("printAttributeHook",i,this.elementNum)}},l.prototype.elementHelper=function(t){h(this,t),null!==this.element&&(this.opcode("shareElement",++this.elementNum),this.element=null),this.opcode("printElementHook",this.elementNum)},l.prototype.mustache=function(t,e,r){var n=t.sexpr,i=this.currentDOMChildIndex,s=i,o=e===r-1?-1:i+1,a=this.morphNum++;this.morphs.push([a,this.paths.slice(),s,o,t.escaped]),y(n)?(h(this,n),this.opcode("printInlineHook",a)):(c(this,n.path),this.opcode("printContentHook",a))},l.prototype.SubExpression=function(t){h(this,t),this.opcode("pushSexprHook")},l.prototype.PathExpression=function(t){this.opcode("pushGetHook",t.original)},l.prototype.StringLiteral=function(t){this.opcode("pushLiteral",t.value)},l.prototype.BooleanLiteral=function(t){this.opcode("pushLiteral",t.value)},l.prototype.NumberLiteral=function(t){this.opcode("pushLiteral",t.value)}}),t("htmlbars-compiler/template-compiler",["./fragment-opcode-compiler","./fragment-javascript-compiler","./hydration-opcode-compiler","./hydration-javascript-compiler","./template-visitor","./utils","../htmlbars-util/quoting","exports"],function(t,e,r,n,i,s,o,a){"use strict";function l(t){this.options=t||{},this.fragmentOpcodeCompiler=new c,this.fragmentCompiler=new u,this.hydrationOpcodeCompiler=new p,this.hydrationCompiler=new h,this.templates=[],this.childTemplates=[]}var c=t["default"],u=e["default"],p=r["default"],h=n["default"],m=i["default"],d=s.processOpcodes,f=o.repeat;a["default"]=l,l.prototype.compile=function(t){var e=new m;return e.visit(t),d(this,e.actions),this.templates.pop()},l.prototype.startProgram=function(t,e,r){for(this.fragmentOpcodeCompiler.startProgram(t,e,r),this.hydrationOpcodeCompiler.startProgram(t,e,r),this.childTemplates.length=0;e--;)this.childTemplates.push(this.templates.pop())},l.prototype.getChildTemplateVars=function(t){var e="";if(this.childTemplates)for(var r=0;r0?t+"var hooks = env.hooks, "+r.join(", ")+";\n":""},l.prototype.endProgram=function(t,e){this.fragmentOpcodeCompiler.endProgram(t),this.hydrationOpcodeCompiler.endProgram(t);var r=f(" ",e),n={indent:r+" "},i=this.fragmentCompiler.compile(this.fragmentOpcodeCompiler.opcodes,n),s=this.hydrationCompiler.compile(this.hydrationOpcodeCompiler.opcodes,n),o=t.blockParams||[],a="context, env, contextualElement";o.length>0&&(a+=", blockArguments");var l="(function() {\n"+this.getChildTemplateVars(r+" ")+r+" return {\n"+r+" isHTMLBars: true,\n"+r+" blockParams: "+o.length+",\n"+r+" cachedFragment: null,\n"+r+" hasRendered: false,\n"+r+" build: "+i+",\n"+r+" render: function render("+a+") {\n"+r+" var dom = env.dom;\n"+this.getHydrationHooks(r+" ",this.hydrationCompiler.hooks)+r+" dom.detectNamespace(contextualElement);\n"+r+" var fragment;\n"+r+" if (env.useFragmentCache && dom.canClone) {\n"+r+" if (this.cachedFragment === null) {\n"+r+" fragment = this.build(dom);\n"+r+" if (this.hasRendered) {\n"+r+" this.cachedFragment = fragment;\n"+r+" } else {\n"+r+" this.hasRendered = true;\n"+r+" }\n"+r+" }\n"+r+" if (this.cachedFragment) {\n"+r+" fragment = dom.cloneNode(this.cachedFragment, true);\n"+r+" }\n"+r+" } else {\n"+r+" fragment = this.build(dom);\n"+r+" }\n"+s+r+" return fragment;\n"+r+" }\n"+r+" };\n"+r+"}())";this.templates.push(l)},l.prototype.openElement=function(t,e,r,n,i,s){this.fragmentOpcodeCompiler.openElement(t,e,r,n,i,s),this.hydrationOpcodeCompiler.openElement(t,e,r,n,i,s)},l.prototype.closeElement=function(t,e,r,n){this.fragmentOpcodeCompiler.closeElement(t,e,r,n),this.hydrationOpcodeCompiler.closeElement(t,e,r,n)},l.prototype.component=function(t,e,r){this.fragmentOpcodeCompiler.component(t,e,r),this.hydrationOpcodeCompiler.component(t,e,r)},l.prototype.block=function(t,e,r){this.fragmentOpcodeCompiler.block(t,e,r),this.hydrationOpcodeCompiler.block(t,e,r)},l.prototype.text=function(t,e,r,n){this.fragmentOpcodeCompiler.text(t,e,r,n),this.hydrationOpcodeCompiler.text(t,e,r,n)},l.prototype.comment=function(t,e,r,n){this.fragmentOpcodeCompiler.comment(t,e,r,n),this.hydrationOpcodeCompiler.comment(t,e,r,n)},l.prototype.mustache=function(t,e,r){this.fragmentOpcodeCompiler.mustache(t,e,r),this.hydrationOpcodeCompiler.mustache(t,e,r)},l.prototype.setNamespace=function(t){this.fragmentOpcodeCompiler.setNamespace(t)}}),t("htmlbars-compiler/template-visitor",["exports"],function(t){"use strict";function e(){this.parentNode=null,this.children=null,this.childIndex=null,this.childCount=null,this.childTemplateCount=0,this.mustacheCount=0,this.actions=[]}function r(){this.frameStack=[],this.actions=[],this.programDepth=-1}function n(t,e){for(var r=-1,n=0;n=0;n--)r.childIndex=n,this.visit(t.body[n]);r.actions.push(["startProgram",[t,r.childTemplateCount,r.blankChildTextNodes.reverse()]]),this.popFrame(),this.programDepth--,e&&e.childTemplateCount++,i.apply(this.actions,r.actions.reverse())},r.prototype.ElementNode=function(t){var e=this.getCurrentFrame(),r=this.pushFrame(),n=e.parentNode;r.parentNode=t,r.children=t.children,r.childCount=t.children.length,r.mustacheCount+=t.helpers.length,r.blankChildTextNodes=[];var s=[t,e.childIndex,e.childCount,"Program"===n.type&&1===e.childCount];r.actions.push(["closeElement",s]);for(var o=t.attributes.length-1;o>=0;o--)this.visit(t.attributes[o]);for(o=t.children.length-1;o>=0;o--)r.childIndex=o,this.visit(t.children[o]);r.actions.push(["openElement",s.concat([r.mustacheCount,r.blankChildTextNodes.reverse()])]),this.popFrame(),r.mustacheCount>0&&e.mustacheCount++,e.childTemplateCount+=r.childTemplateCount,i.apply(e.actions,r.actions)},r.prototype.AttrNode=function(t){"TextNode"!==t.value.type&&this.getCurrentFrame().mustacheCount++},r.prototype.TextNode=function(t){var e=this.getCurrentFrame(),r="Program"===e.parentNode.type&&1===e.childCount;""===t.chars&&e.blankChildTextNodes.push(n(e.children,t)),e.actions.push(["text",[t,e.childIndex,e.childCount,r]])},r.prototype.BlockStatement=function(t){var e=this.getCurrentFrame();e.mustacheCount++,e.actions.push(["block",[t,e.childIndex,e.childCount]]),t.inverse&&this.visit(t.inverse),t.program&&this.visit(t.program)},r.prototype.ComponentNode=function(t){var e=this.getCurrentFrame();e.mustacheCount++,e.actions.push(["component",[t,e.childIndex,e.childCount]]),t.program&&this.visit(t.program)},r.prototype.PartialStatement=function(t){var e=this.getCurrentFrame();e.mustacheCount++,e.actions.push(["mustache",[t,e.childIndex,e.childCount]])},r.prototype.CommentStatement=function(t){var e=this.getCurrentFrame(),r="Program"===e.parentNode.type&&1===e.childCount;e.actions.push(["comment",[t,e.childIndex,e.childCount,r]])},r.prototype.MustacheStatement=function(t){var e=this.getCurrentFrame();e.mustacheCount++,e.actions.push(["mustache",[t,e.childIndex,e.childCount]])},r.prototype.getCurrentFrame=function(){return this.frameStack[this.frameStack.length-1]},r.prototype.pushFrame=function(){var t=new e;return this.frameStack.push(t),t},r.prototype.popFrame=function(){return this.frameStack.pop()},t["default"]=r}),t("htmlbars-compiler/utils",["exports"],function(t){"use strict";function e(t,e){for(var r=0,n=e.length;n>r;r++){var i=e[r][0],s=e[r][1];s?t[i].apply(t,s):t[i].call(t)}}t.processOpcodes=e}),t("htmlbars-syntax",["./htmlbars-syntax/walker","./htmlbars-syntax/builders","./htmlbars-syntax/parser","exports"],function(t,e,r,n){"use strict";var i=t["default"],s=e["default"],o=r.preprocess;n.Walker=i,n.builders=s,n.parse=o}),t("htmlbars-syntax/builders",["exports"],function(t){"use strict";function e(t,e){return{type:"MustacheStatement",sexpr:t,escaped:!e}}function r(t,e,r){return{type:"BlockStatement",sexpr:t,program:e||null,inverse:r||null}}function n(t,e){return{type:"PartialStatement",sexpr:t,indent:e}}function i(t){return{type:"CommentStatement",value:t}}function s(t){return{type:"ConcatStatement",parts:t||[]}}function o(t,e,r,n){return{type:"ElementNode",tag:t,attributes:e||[],helpers:r||[],children:n||[]}}function a(t,e,r){return{type:"ComponentNode",tag:t,attributes:e,program:r}}function l(t,e){return{type:"AttrNode",name:t,value:e}}function c(t){return{type:"TextNode",chars:t}}function u(t,e,r){return{type:"SubExpression",path:t,params:e||[],hash:r||f([])}}function p(t){return{type:"PathExpression",original:t,parts:t.split(".")}}function h(t){return{type:"StringLiteral",value:t,original:t}}function m(t){return{type:"BooleanLiteral",value:t,original:t}}function d(t){return{type:"NumberLiteral",value:t,original:t}}function f(t){return{type:"Hash",pairs:t||[]}}function g(t,e){return{type:"HashPair",key:t,value:e}}function b(t,e){return{type:"Program",body:t||[],blockParams:e||[]}}t.buildMustache=e,t.buildBlock=r,t.buildPartial=n,t.buildComment=i,t.buildConcat=s,t.buildElement=o,t.buildComponent=a,t.buildAttr=l,t.buildText=c,t.buildSexpr=u,t.buildPath=p,t.buildString=h,t.buildBoolean=m,t.buildNumber=d,t.buildHash=f,t.buildPair=g,t.buildProgram=b,t["default"]={mustache:e,block:r,partial:n,comment:i,element:o,component:a,attr:l,text:c,sexpr:u,path:p,string:h,"boolean":m,number:d,concat:s,hash:f,pair:g,program:b}}),t("htmlbars-syntax/handlebars/compiler/ast",["../exception","exports"],function(t,e){"use strict";var r=(t["default"],{Program:function(t,e,r,n){this.loc=n,this.type="Program",this.body=t,this.blockParams=e,this.strip=r},MustacheStatement:function(t,e,r,n){this.loc=n,this.type="MustacheStatement",this.sexpr=t,this.escaped=e,this.strip=r},BlockStatement:function(t,e,r,n,i,s,o){this.loc=o,this.type="BlockStatement",this.sexpr=t,this.program=e,this.inverse=r,this.openStrip=n,this.inverseStrip=i,this.closeStrip=s},PartialStatement:function(t,e,r){this.loc=r,this.type="PartialStatement",this.sexpr=t,this.indent="",this.strip=e},ContentStatement:function(t,e){this.loc=e,this.type="ContentStatement",this.original=this.value=t},CommentStatement:function(t,e,r){this.loc=r,this.type="CommentStatement",this.value=t,this.strip=e},SubExpression:function(t,e,r,n){this.loc=n,this.type="SubExpression",this.path=t,this.params=e||[],this.hash=r},PathExpression:function(t,e,r,n,i){this.loc=i,this.type="PathExpression",this.data=t,this.original=n,this.parts=r,this.depth=e},StringLiteral:function(t,e){this.loc=e,this.type="StringLiteral",this.original=this.value=t},NumberLiteral:function(t,e){this.loc=e,this.type="NumberLiteral",this.original=this.value=Number(t)},BooleanLiteral:function(t,e){this.loc=e,this.type="BooleanLiteral",this.original=this.value="true"===t},Hash:function(t,e){this.loc=e,this.type="Hash",this.pairs=t},HashPair:function(t,e,r){this.loc=r,this.type="HashPair",this.key=t,this.value=e}});e["default"]=r}),t("htmlbars-syntax/handlebars/compiler/base",["./parser","./ast","./whitespace-control","./helpers","../utils","exports"],function(t,e,r,n,i,s){"use strict";function o(t,e){if("Program"===t.type)return t;a.yy=h,h.locInfo=function(t){return new h.SourceLocation(e&&e.srcName,t)};var r=new c;return r.accept(a.parse(t))}var a=t["default"],l=e["default"],c=r["default"],u=n,p=i.extend;s.parser=a;var h={};p(h,u,l),s.parse=o}),t("htmlbars-syntax/handlebars/compiler/helpers",["../exception","exports"],function(t,e){"use strict";function r(t,e){this.source=t,this.start={line:e.first_line,column:e.first_column},this.end={line:e.last_line,column:e.last_column}}function n(t,e){return{open:"~"===t.charAt(2),close:"~"===e.charAt(e.length-3)}}function i(t){return t.replace(/^\{\{~?\!-?-?/,"").replace(/-?-?~?\}\}$/,"")}function s(t,e,r){r=this.locInfo(r);for(var n=t?"@":"",i=[],s=0,o="",a=0,l=e.length;l>a;a++){var u=e[a].part;if(n+=(e[a].separator||"")+u,".."===u||"."===u||"this"===u){if(i.length>0)throw new c("Invalid path: "+n,{loc:r});".."===u&&(s++,o+="../")}else i.push(u)}return new this.PathExpression(t,s,i,n,r)}function o(t,e,r,n){var i=e.charAt(3)||e.charAt(2),s="{"!==i&&"&"!==i;return new this.MustacheStatement(t,s,r,this.locInfo(n))}function a(t,e,r,n){if(t.sexpr.path.original!==r){var i={loc:t.sexpr.loc};throw new c(t.sexpr.path.original+" doesn't match "+r,i)}n=this.locInfo(n);var s=new this.Program([e],null,{},n);return new this.BlockStatement(t.sexpr,s,void 0,{},{},{},n)}function l(t,e,r,n,i,s){if(n&&n.path&&t.sexpr.path.original!==n.path.original){var o={loc:t.sexpr.loc};throw new c(t.sexpr.path.original+" doesn't match "+n.path.original,o)}e.blockParams=t.blockParams;var a,l;return r&&(r.chain&&(r.program.body[0].closeStrip=n.strip||n.openStrip),l=r.strip,a=r.program),i&&(i=a,a=e,e=i),new this.BlockStatement(t.sexpr,e,a,t.strip,l,n&&(n.strip||n.openStrip),this.locInfo(s)) +}var c=t["default"];e.SourceLocation=r,e.stripFlags=n,e.stripComment=i,e.preparePath=s,e.prepareMustache=o,e.prepareRawBlock=a,e.prepareBlock=l}),t("htmlbars-syntax/handlebars/compiler/parser",["exports"],function(t){"use strict";var e=function(){function t(){this.yy={}}var e={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,program_repetition0:6,statement:7,mustache:8,block:9,rawBlock:10,partial:11,content:12,COMMENT:13,CONTENT:14,openRawBlock:15,END_RAW_BLOCK:16,OPEN_RAW_BLOCK:17,sexpr:18,CLOSE_RAW_BLOCK:19,openBlock:20,block_option0:21,closeBlock:22,openInverse:23,block_option1:24,OPEN_BLOCK:25,openBlock_option0:26,CLOSE:27,OPEN_INVERSE:28,openInverse_option0:29,openInverseChain:30,OPEN_INVERSE_CHAIN:31,openInverseChain_option0:32,inverseAndProgram:33,INVERSE:34,inverseChain:35,inverseChain_option0:36,OPEN_ENDBLOCK:37,path:38,OPEN:39,OPEN_UNESCAPED:40,CLOSE_UNESCAPED:41,OPEN_PARTIAL:42,helperName:43,sexpr_repetition0:44,sexpr_option0:45,dataName:46,param:47,STRING:48,NUMBER:49,BOOLEAN:50,OPEN_SEXPR:51,CLOSE_SEXPR:52,hash:53,hash_repetition_plus0:54,hashSegment:55,ID:56,EQUALS:57,blockParams:58,OPEN_BLOCK_PARAMS:59,blockParams_repetition_plus0:60,CLOSE_BLOCK_PARAMS:61,DATA:62,pathSegments:63,SEP:64,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",13:"COMMENT",14:"CONTENT",16:"END_RAW_BLOCK",17:"OPEN_RAW_BLOCK",19:"CLOSE_RAW_BLOCK",25:"OPEN_BLOCK",27:"CLOSE",28:"OPEN_INVERSE",31:"OPEN_INVERSE_CHAIN",34:"INVERSE",37:"OPEN_ENDBLOCK",39:"OPEN",40:"OPEN_UNESCAPED",41:"CLOSE_UNESCAPED",42:"OPEN_PARTIAL",48:"STRING",49:"NUMBER",50:"BOOLEAN",51:"OPEN_SEXPR",52:"CLOSE_SEXPR",56:"ID",57:"EQUALS",59:"OPEN_BLOCK_PARAMS",61:"CLOSE_BLOCK_PARAMS",62:"DATA",64:"SEP"},productions_:[0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[12,1],[10,3],[15,3],[9,4],[9,4],[20,4],[23,4],[30,4],[33,2],[35,3],[35,1],[22,3],[8,3],[8,3],[11,3],[18,3],[18,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,3],[53,1],[55,3],[58,3],[43,1],[43,1],[43,1],[46,2],[38,1],[63,3],[63,1],[6,0],[6,2],[21,0],[21,1],[24,0],[24,1],[26,0],[26,1],[29,0],[29,1],[32,0],[32,1],[36,0],[36,1],[44,0],[44,2],[45,0],[45,1],[54,1],[54,2],[60,1],[60,2]],performAction:function(t,e,r,n,i,s){var o=s.length-1;switch(i){case 1:return s[o-1];case 2:this.$=new n.Program(s[o],null,{},n.locInfo(this._$));break;case 3:this.$=s[o];break;case 4:this.$=s[o];break;case 5:this.$=s[o];break;case 6:this.$=s[o];break;case 7:this.$=s[o];break;case 8:this.$=new n.CommentStatement(n.stripComment(s[o]),n.stripFlags(s[o],s[o]),n.locInfo(this._$));break;case 9:this.$=new n.ContentStatement(s[o],n.locInfo(this._$));break;case 10:this.$=n.prepareRawBlock(s[o-2],s[o-1],s[o],this._$);break;case 11:this.$={sexpr:s[o-1]};break;case 12:this.$=n.prepareBlock(s[o-3],s[o-2],s[o-1],s[o],!1,this._$);break;case 13:this.$=n.prepareBlock(s[o-3],s[o-2],s[o-1],s[o],!0,this._$);break;case 14:this.$={sexpr:s[o-2],blockParams:s[o-1],strip:n.stripFlags(s[o-3],s[o])};break;case 15:this.$={sexpr:s[o-2],blockParams:s[o-1],strip:n.stripFlags(s[o-3],s[o])};break;case 16:this.$={sexpr:s[o-2],blockParams:s[o-1],strip:n.stripFlags(s[o-3],s[o])};break;case 17:this.$={strip:n.stripFlags(s[o-1],s[o-1]),program:s[o]};break;case 18:var a=n.prepareBlock(s[o-2],s[o-1],s[o],s[o],!1,this._$),l=new n.Program([a],null,{},n.locInfo(this._$));l.chained=!0,this.$={strip:s[o-2].strip,program:l,chain:!0};break;case 19:this.$=s[o];break;case 20:this.$={path:s[o-1],strip:n.stripFlags(s[o-2],s[o])};break;case 21:this.$=n.prepareMustache(s[o-1],s[o-2],n.stripFlags(s[o-2],s[o]),this._$);break;case 22:this.$=n.prepareMustache(s[o-1],s[o-2],n.stripFlags(s[o-2],s[o]),this._$);break;case 23:this.$=new n.PartialStatement(s[o-1],n.stripFlags(s[o-2],s[o]),n.locInfo(this._$));break;case 24:this.$=new n.SubExpression(s[o-2],s[o-1],s[o],n.locInfo(this._$));break;case 25:this.$=new n.SubExpression(s[o],null,null,n.locInfo(this._$));break;case 26:this.$=s[o];break;case 27:this.$=new n.StringLiteral(s[o],n.locInfo(this._$));break;case 28:this.$=new n.NumberLiteral(s[o],n.locInfo(this._$));break;case 29:this.$=new n.BooleanLiteral(s[o],n.locInfo(this._$));break;case 30:this.$=s[o];break;case 31:this.$=s[o-1];break;case 32:this.$=new n.Hash(s[o],n.locInfo(this._$));break;case 33:this.$=new n.HashPair(s[o-2],s[o],n.locInfo(this._$));break;case 34:this.$=s[o-1];break;case 35:this.$=s[o];break;case 36:this.$=new n.StringLiteral(s[o],n.locInfo(this._$)),n.locInfo(this._$);break;case 37:this.$=new n.NumberLiteral(s[o],n.locInfo(this._$));break;case 38:this.$=n.preparePath(!0,s[o],this._$);break;case 39:this.$=n.preparePath(!1,s[o],this._$);break;case 40:s[o-2].push({part:s[o],separator:s[o-1]}),this.$=s[o-2];break;case 41:this.$=[{part:s[o]}];break;case 42:this.$=[];break;case 43:s[o-1].push(s[o]);break;case 56:this.$=[];break;case 57:s[o-1].push(s[o]);break;case 60:this.$=[s[o]];break;case 61:s[o-1].push(s[o]);break;case 62:this.$=[s[o]];break;case 63:s[o-1].push(s[o])}},table:[{3:1,4:2,5:[2,42],6:3,13:[2,42],14:[2,42],17:[2,42],25:[2,42],28:[2,42],39:[2,42],40:[2,42],42:[2,42]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:[1,11],14:[1,18],15:16,17:[1,21],20:14,23:15,25:[1,19],28:[1,20],31:[2,2],34:[2,2],37:[2,2],39:[1,12],40:[1,13],42:[1,17]},{1:[2,1]},{5:[2,43],13:[2,43],14:[2,43],17:[2,43],25:[2,43],28:[2,43],31:[2,43],34:[2,43],37:[2,43],39:[2,43],40:[2,43],42:[2,43]},{5:[2,3],13:[2,3],14:[2,3],17:[2,3],25:[2,3],28:[2,3],31:[2,3],34:[2,3],37:[2,3],39:[2,3],40:[2,3],42:[2,3]},{5:[2,4],13:[2,4],14:[2,4],17:[2,4],25:[2,4],28:[2,4],31:[2,4],34:[2,4],37:[2,4],39:[2,4],40:[2,4],42:[2,4]},{5:[2,5],13:[2,5],14:[2,5],17:[2,5],25:[2,5],28:[2,5],31:[2,5],34:[2,5],37:[2,5],39:[2,5],40:[2,5],42:[2,5]},{5:[2,6],13:[2,6],14:[2,6],17:[2,6],25:[2,6],28:[2,6],31:[2,6],34:[2,6],37:[2,6],39:[2,6],40:[2,6],42:[2,6]},{5:[2,7],13:[2,7],14:[2,7],17:[2,7],25:[2,7],28:[2,7],31:[2,7],34:[2,7],37:[2,7],39:[2,7],40:[2,7],42:[2,7]},{5:[2,8],13:[2,8],14:[2,8],17:[2,8],25:[2,8],28:[2,8],31:[2,8],34:[2,8],37:[2,8],39:[2,8],40:[2,8],42:[2,8]},{18:22,38:25,43:23,46:24,48:[1,26],49:[1,27],56:[1,30],62:[1,28],63:29},{18:31,38:25,43:23,46:24,48:[1,26],49:[1,27],56:[1,30],62:[1,28],63:29},{4:32,6:3,13:[2,42],14:[2,42],17:[2,42],25:[2,42],28:[2,42],31:[2,42],34:[2,42],37:[2,42],39:[2,42],40:[2,42],42:[2,42]},{4:33,6:3,13:[2,42],14:[2,42],17:[2,42],25:[2,42],28:[2,42],34:[2,42],37:[2,42],39:[2,42],40:[2,42],42:[2,42]},{12:34,14:[1,18]},{18:35,38:25,43:23,46:24,48:[1,26],49:[1,27],56:[1,30],62:[1,28],63:29},{5:[2,9],13:[2,9],14:[2,9],16:[2,9],17:[2,9],25:[2,9],28:[2,9],31:[2,9],34:[2,9],37:[2,9],39:[2,9],40:[2,9],42:[2,9]},{18:36,38:25,43:23,46:24,48:[1,26],49:[1,27],56:[1,30],62:[1,28],63:29},{18:37,38:25,43:23,46:24,48:[1,26],49:[1,27],56:[1,30],62:[1,28],63:29},{18:38,38:25,43:23,46:24,48:[1,26],49:[1,27],56:[1,30],62:[1,28],63:29},{27:[1,39]},{19:[2,56],27:[2,56],41:[2,56],44:40,48:[2,56],49:[2,56],50:[2,56],51:[2,56],52:[2,56],56:[2,56],59:[2,56],62:[2,56]},{19:[2,25],27:[2,25],41:[2,25],52:[2,25],59:[2,25]},{19:[2,35],27:[2,35],41:[2,35],48:[2,35],49:[2,35],50:[2,35],51:[2,35],52:[2,35],56:[2,35],59:[2,35],62:[2,35]},{19:[2,36],27:[2,36],41:[2,36],48:[2,36],49:[2,36],50:[2,36],51:[2,36],52:[2,36],56:[2,36],59:[2,36],62:[2,36]},{19:[2,37],27:[2,37],41:[2,37],48:[2,37],49:[2,37],50:[2,37],51:[2,37],52:[2,37],56:[2,37],59:[2,37],62:[2,37]},{56:[1,30],63:41},{19:[2,39],27:[2,39],41:[2,39],48:[2,39],49:[2,39],50:[2,39],51:[2,39],52:[2,39],56:[2,39],59:[2,39],62:[2,39],64:[1,42]},{19:[2,41],27:[2,41],41:[2,41],48:[2,41],49:[2,41],50:[2,41],51:[2,41],52:[2,41],56:[2,41],59:[2,41],62:[2,41],64:[2,41]},{41:[1,43]},{21:44,30:46,31:[1,48],33:47,34:[1,49],35:45,37:[2,44]},{24:50,33:51,34:[1,49],37:[2,46]},{16:[1,52]},{27:[1,53]},{26:54,27:[2,48],58:55,59:[1,56]},{27:[2,50],29:57,58:58,59:[1,56]},{19:[1,59]},{5:[2,21],13:[2,21],14:[2,21],17:[2,21],25:[2,21],28:[2,21],31:[2,21],34:[2,21],37:[2,21],39:[2,21],40:[2,21],42:[2,21]},{19:[2,58],27:[2,58],38:63,41:[2,58],45:60,46:67,47:61,48:[1,64],49:[1,65],50:[1,66],51:[1,68],52:[2,58],53:62,54:69,55:70,56:[1,71],59:[2,58],62:[1,28],63:29},{19:[2,38],27:[2,38],41:[2,38],48:[2,38],49:[2,38],50:[2,38],51:[2,38],52:[2,38],56:[2,38],59:[2,38],62:[2,38],64:[1,42]},{56:[1,72]},{5:[2,22],13:[2,22],14:[2,22],17:[2,22],25:[2,22],28:[2,22],31:[2,22],34:[2,22],37:[2,22],39:[2,22],40:[2,22],42:[2,22]},{22:73,37:[1,74]},{37:[2,45]},{4:75,6:3,13:[2,42],14:[2,42],17:[2,42],25:[2,42],28:[2,42],31:[2,42],34:[2,42],37:[2,42],39:[2,42],40:[2,42],42:[2,42]},{37:[2,19]},{18:76,38:25,43:23,46:24,48:[1,26],49:[1,27],56:[1,30],62:[1,28],63:29},{4:77,6:3,13:[2,42],14:[2,42],17:[2,42],25:[2,42],28:[2,42],37:[2,42],39:[2,42],40:[2,42],42:[2,42]},{22:78,37:[1,74]},{37:[2,47]},{5:[2,10],13:[2,10],14:[2,10],17:[2,10],25:[2,10],28:[2,10],31:[2,10],34:[2,10],37:[2,10],39:[2,10],40:[2,10],42:[2,10]},{5:[2,23],13:[2,23],14:[2,23],17:[2,23],25:[2,23],28:[2,23],31:[2,23],34:[2,23],37:[2,23],39:[2,23],40:[2,23],42:[2,23]},{27:[1,79]},{27:[2,49]},{56:[1,81],60:80},{27:[1,82]},{27:[2,51]},{14:[2,11]},{19:[2,24],27:[2,24],41:[2,24],52:[2,24],59:[2,24]},{19:[2,57],27:[2,57],41:[2,57],48:[2,57],49:[2,57],50:[2,57],51:[2,57],52:[2,57],56:[2,57],59:[2,57],62:[2,57]},{19:[2,59],27:[2,59],41:[2,59],52:[2,59],59:[2,59]},{19:[2,26],27:[2,26],41:[2,26],48:[2,26],49:[2,26],50:[2,26],51:[2,26],52:[2,26],56:[2,26],59:[2,26],62:[2,26]},{19:[2,27],27:[2,27],41:[2,27],48:[2,27],49:[2,27],50:[2,27],51:[2,27],52:[2,27],56:[2,27],59:[2,27],62:[2,27]},{19:[2,28],27:[2,28],41:[2,28],48:[2,28],49:[2,28],50:[2,28],51:[2,28],52:[2,28],56:[2,28],59:[2,28],62:[2,28]},{19:[2,29],27:[2,29],41:[2,29],48:[2,29],49:[2,29],50:[2,29],51:[2,29],52:[2,29],56:[2,29],59:[2,29],62:[2,29]},{19:[2,30],27:[2,30],41:[2,30],48:[2,30],49:[2,30],50:[2,30],51:[2,30],52:[2,30],56:[2,30],59:[2,30],62:[2,30]},{18:83,38:25,43:23,46:24,48:[1,26],49:[1,27],56:[1,30],62:[1,28],63:29},{19:[2,32],27:[2,32],41:[2,32],52:[2,32],55:84,56:[1,85],59:[2,32]},{19:[2,60],27:[2,60],41:[2,60],52:[2,60],56:[2,60],59:[2,60]},{19:[2,41],27:[2,41],41:[2,41],48:[2,41],49:[2,41],50:[2,41],51:[2,41],52:[2,41],56:[2,41],57:[1,86],59:[2,41],62:[2,41],64:[2,41]},{19:[2,40],27:[2,40],41:[2,40],48:[2,40],49:[2,40],50:[2,40],51:[2,40],52:[2,40],56:[2,40],59:[2,40],62:[2,40],64:[2,40]},{5:[2,12],13:[2,12],14:[2,12],17:[2,12],25:[2,12],28:[2,12],31:[2,12],34:[2,12],37:[2,12],39:[2,12],40:[2,12],42:[2,12]},{38:87,56:[1,30],63:29},{30:46,31:[1,48],33:47,34:[1,49],35:89,36:88,37:[2,54]},{27:[2,52],32:90,58:91,59:[1,56]},{37:[2,17]},{5:[2,13],13:[2,13],14:[2,13],17:[2,13],25:[2,13],28:[2,13],31:[2,13],34:[2,13],37:[2,13],39:[2,13],40:[2,13],42:[2,13]},{13:[2,14],14:[2,14],17:[2,14],25:[2,14],28:[2,14],31:[2,14],34:[2,14],37:[2,14],39:[2,14],40:[2,14],42:[2,14]},{56:[1,93],61:[1,92]},{56:[2,62],61:[2,62]},{13:[2,15],14:[2,15],17:[2,15],25:[2,15],28:[2,15],34:[2,15],37:[2,15],39:[2,15],40:[2,15],42:[2,15]},{52:[1,94]},{19:[2,61],27:[2,61],41:[2,61],52:[2,61],56:[2,61],59:[2,61]},{57:[1,86]},{38:63,46:67,47:95,48:[1,64],49:[1,65],50:[1,66],51:[1,68],56:[1,30],62:[1,28],63:29},{27:[1,96]},{37:[2,18]},{37:[2,55]},{27:[1,97]},{27:[2,53]},{27:[2,34]},{56:[2,63],61:[2,63]},{19:[2,31],27:[2,31],41:[2,31],48:[2,31],49:[2,31],50:[2,31],51:[2,31],52:[2,31],56:[2,31],59:[2,31],62:[2,31]},{19:[2,33],27:[2,33],41:[2,33],52:[2,33],56:[2,33],59:[2,33]},{5:[2,20],13:[2,20],14:[2,20],17:[2,20],25:[2,20],28:[2,20],31:[2,20],34:[2,20],37:[2,20],39:[2,20],40:[2,20],42:[2,20]},{13:[2,16],14:[2,16],17:[2,16],25:[2,16],28:[2,16],31:[2,16],34:[2,16],37:[2,16],39:[2,16],40:[2,16],42:[2,16]}],defaultActions:{4:[2,1],45:[2,45],47:[2,19],51:[2,47],55:[2,49],58:[2,51],59:[2,11],77:[2,17],88:[2,18],89:[2,55],91:[2,53],92:[2,34]},parseError:function(t){throw new Error(t)},parse:function(t){function e(){var t;return t=r.lexer.lex()||1,"number"!=typeof t&&(t=r.symbols_[t]||t),t}var r=this,n=[0],i=[null],s=[],o=this.table,a="",l=0,c=0,u=0;this.lexer.setInput(t),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var p=this.lexer.yylloc;s.push(p);var h=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var m,d,f,g,b,y,v,k,x,E={};;){if(f=n[n.length-1],this.defaultActions[f]?g=this.defaultActions[f]:((null===m||"undefined"==typeof m)&&(m=e()),g=o[f]&&o[f][m]),"undefined"==typeof g||!g.length||!g[0]){var w="";if(!u){x=[];for(y in o[f])this.terminals_[y]&&y>2&&x.push("'"+this.terminals_[y]+"'");w=this.lexer.showPosition?"Parse error on line "+(l+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+x.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(w,{text:this.lexer.match,token:this.terminals_[m]||m,line:this.lexer.yylineno,loc:p,expected:x})}}if(g[0]instanceof Array&&g.length>1)throw new Error("Parse Error: multiple actions possible at state: "+f+", token: "+m);switch(g[0]){case 1:n.push(m),i.push(this.lexer.yytext),s.push(this.lexer.yylloc),n.push(g[1]),m=null,d?(m=d,d=null):(c=this.lexer.yyleng,a=this.lexer.yytext,l=this.lexer.yylineno,p=this.lexer.yylloc,u>0&&u--);break;case 2:if(v=this.productions_[g[1]][1],E.$=i[i.length-v],E._$={first_line:s[s.length-(v||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(v||1)].first_column,last_column:s[s.length-1].last_column},h&&(E._$.range=[s[s.length-(v||1)].range[0],s[s.length-1].range[1]]),b=this.performAction.call(E,a,c,l,this.yy,g[1],i,s),"undefined"!=typeof b)return b;v&&(n=n.slice(0,-1*v*2),i=i.slice(0,-1*v),s=s.slice(0,-1*v)),n.push(this.productions_[g[1]][0]),i.push(E.$),s.push(E._$),k=o[n[n.length-2]][n[n.length-1]],n.push(k);break;case 3:return!0}}return!0}},r=function(){var t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t){return this._input=t,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t;var e=t.match(/(?:\r\n?|\n).*/g);return e?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,r=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e-1),this.offset-=e;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),r.length-1&&(this.yylineno-=r.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this},more:function(){return this._more=!0,this},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,r,n,i;this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),o=0;oe[0].length)||(e=r,n=o,this.options.flex));o++);return e?(i=e[0].match(/(?:\r\n?|\n).*/g),i&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],t=this.performAction.call(this,this.yy,this,s[n],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),t?t:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return"undefined"!=typeof t?t:this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(t){this.begin(t)}};return t.options={},t.performAction=function(t,e,r,n){function i(t,r){return e.yytext=e.yytext.substr(t,e.yyleng-r)}switch(r){case 0:if("\\\\"===e.yytext.slice(-2)?(i(0,1),this.begin("mu")):"\\"===e.yytext.slice(-1)?(i(0,1),this.begin("emu")):this.begin("mu"),e.yytext)return 14;break;case 1:return 14;case 2:return this.popState(),14;case 3:return e.yytext=e.yytext.substr(5,e.yyleng-9),this.popState(),16;case 4:return 14;case 5:return this.popState(),13;case 6:return 51;case 7:return 52;case 8:return 17;case 9:return this.popState(),this.begin("raw"),19;case 10:return 42;case 11:return 25;case 12:return 37;case 13:return this.popState(),34;case 14:return this.popState(),34;case 15:return 28;case 16:return 31;case 17:return 40;case 18:return 39;case 19:this.unput(e.yytext),this.popState(),this.begin("com");break;case 20:return this.popState(),13;case 21:return 39;case 22:return 57;case 23:return 56;case 24:return 56;case 25:return 64;case 26:break;case 27:return this.popState(),41;case 28:return this.popState(),27;case 29:return e.yytext=i(1,2).replace(/\\"/g,'"'),48;case 30:return e.yytext=i(1,2).replace(/\\'/g,"'"),48;case 31:return 62;case 32:return 50;case 33:return 50;case 34:return 49;case 35:return 59;case 36:return 61;case 37:return 56;case 38:return e.yytext=i(1,2),56;case 39:return"INVALID";case 40:return 5}},t.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{\/)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[[^\]]*\])/,/^(?:.)/,/^(?:$)/],t.conditions={mu:{rules:[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[5],inclusive:!1},raw:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,1,40],inclusive:!0}},t}();return e.lexer=r,t.prototype=e,e.Parser=t,new t}();t["default"]=e}),t("htmlbars-syntax/handlebars/compiler/visitor",["exports"],function(t){"use strict";function e(){}e.prototype={constructor:e,accept:function(t){return t&&this[t.type](t)},Program:function(t){var e,r,n=t.body;for(e=0,r=n.length;r>e;e++)this.accept(n[e])},MustacheStatement:function(t){this.accept(t.sexpr)},BlockStatement:function(t){this.accept(t.sexpr),this.accept(t.program),this.accept(t.inverse)},PartialStatement:function(t){this.accept(t.partialName),this.accept(t.context),this.accept(t.hash)},ContentStatement:function(){},CommentStatement:function(){},SubExpression:function(t){var e=t.params;this.accept(t.path);for(var r=0,n=e.length;n>r;r++)this.accept(e[r]);this.accept(t.hash)},PathExpression:function(){},StringLiteral:function(){},NumberLiteral:function(){},BooleanLiteral:function(){},Hash:function(t){for(var e=t.pairs,r=0,n=e.length;n>r;r++)this.accept(e[r])},HashPair:function(t){this.accept(t.value)}},t["default"]=e}),t("htmlbars-syntax/handlebars/compiler/whitespace-control",["./visitor","exports"],function(t,e){"use strict";function r(){}function n(t,e,r){void 0===e&&(e=t.length);var n=t[e-1],i=t[e-2];return n?"ContentStatement"===n.type?(i||!r?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(n.original):void 0:r}function i(t,e,r){void 0===e&&(e=-1);var n=t[e+1],i=t[e+2];return n?"ContentStatement"===n.type?(i||!r?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(n.original):void 0:r}function s(t,e,r){var n=t[null==e?0:e+1];if(n&&"ContentStatement"===n.type&&(r||!n.rightStripped)){var i=n.value;n.value=n.value.replace(r?/^\s+/:/^[ \t]*\r?\n?/,""),n.rightStripped=n.value!==i}}function o(t,e,r){var n=t[null==e?t.length-1:e-1];if(n&&"ContentStatement"===n.type&&(r||!n.leftStripped)){var i=n.value;return n.value=n.value.replace(r?/\s+$/:/[ \t]+$/,""),n.leftStripped=n.value!==i,n.leftStripped}}var a=t["default"];r.prototype=new a,r.prototype.Program=function(t){var e=!this.isRootSeen;this.isRootSeen=!0;for(var r=t.body,a=0,l=r.length;l>a;a++){var c=r[a],u=this.accept(c);if(u){var p=n(r,a,e),h=i(r,a,e),m=u.openStandalone&&p,d=u.closeStandalone&&h,f=u.inlineStandalone&&p&&h;u.close&&s(r,a,!0),u.open&&o(r,a,!0),f&&(s(r,a),o(r,a)&&"PartialStatement"===c.type&&(c.indent=/([ \t]+$)/.exec(r[a-1].original)[1])),m&&(s((c.program||c.inverse).body),o(r,a)),d&&(s(r,a),o((c.inverse||c.program).body))}}return t},r.prototype.BlockStatement=function(t){this.accept(t.program),this.accept(t.inverse);var e=t.program||t.inverse,r=t.program&&t.inverse,a=r,l=r;if(r&&r.chained)for(a=r.body[0].program;l.chained;)l=l.body[l.body.length-1].program;var c={open:t.openStrip.open,close:t.closeStrip.close,openStandalone:i(e.body),closeStandalone:n((a||e).body)};if(t.openStrip.close&&s(e.body,null,!0),r){var u=t.inverseStrip;u.open&&o(e.body,null,!0),u.close&&s(a.body,null,!0),t.closeStrip.open&&o(l.body,null,!0),n(e.body)&&i(a.body)&&(o(e.body),s(a.body))}else t.closeStrip.open&&o(e.body,null,!0);return c},r.prototype.MustacheStatement=function(t){return t.strip},r.prototype.PartialStatement=r.prototype.CommentStatement=function(t){var e=t.strip||{};return{inlineStandalone:!0,open:e.open,close:e.close}},e["default"]=r}),t("htmlbars-syntax/handlebars/exception",["exports"],function(t){"use strict";function e(t,e){var n,i,s=e&&e.loc;s&&(n=s.start.line,i=s.start.column,t+=" - "+n+":"+i);for(var o=Error.prototype.constructor.call(this,t),a=0;a":">",'"':""","'":"'","`":"`"}),l=/[&<>"'`]/g,c=/[&<>"'`]/;e.extend=n;var u=Object.prototype.toString;e.toString=u;var p=function(t){return"function"==typeof t};p(/x/)&&(p=function(t){return"function"==typeof t&&"[object Function]"===u.call(t)});var p;e.isFunction=p;var h=Array.isArray||function(t){return t&&"object"==typeof t?"[object Array]"===u.call(t):!1};e.isArray=h,e.escapeExpression=i,e.isEmpty=s,e.appendContextPath=o}),t("htmlbars-syntax/node-handlers",["./builders","../htmlbars-util/array-utils","./utils","exports"],function(t,e,r,n){"use strict";function i(t){var e=t.tokenizer.token;e&&"Chars"===e.type&&(t.acceptToken(e),t.tokenizer.token=null)}function s(t,e){if(""===e)return t.split("\n").length-1;var r=t.split(e)[0],n=r.split(/\n/);return n.length-1}var o=t.buildProgram,a=t.buildBlock,l=t.buildHash,c=e.forEach,u=r.appendChild,p=r.postprocessProgram,h={Program:function(t){var e,r=[],n=o(r,t.blockParams),i=t.body.length;if(this.elementStack.push(n),0===i)return this.elementStack.pop();for(e=0;i>e;e++)this.acceptNode(t.body[e]);this.acceptToken(this.tokenizer.tokenizeEOF()),p(n);var s=this.elementStack.pop();if(s!==n)throw new Error("Unclosed element `"+s.tag+"` (on line "+s.loc.start.line+").");return n},BlockStatement:function(t){if(delete t.inverseStrip,delete t.openString,delete t.closeStrip,"comment"===this.tokenizer.state)return void this.tokenizer.addChar("{{"+this.sourceForMustache(t)+"}}");i(this),this.acceptToken(t);var e=this.acceptNode(t.sexpr),r=t.program?this.acceptNode(t.program):null,n=t.inverse?this.acceptNode(t.inverse):null,s=a(e,r,n),o=this.currentElement();u(o,s)},MustacheStatement:function(t){return delete t.strip,"comment"===this.tokenizer.state?void this.tokenizer.addChar("{{"+this.sourceForMustache(t)+"}}"):(this.acceptNode(t.sexpr),i(this),this.acceptToken(t),t)},ContentStatement:function(t){var e=0;t.rightStripped&&(e=s(t.original,t.value)),this.tokenizer.line=this.tokenizer.line+e;var r=this.tokenizer.tokenizePart(t.value);return c(r,this.acceptToken,this)},CommentStatement:function(t){return t},PartialStatement:function(t){return u(this.currentElement(),t),t},SubExpression:function(t){if(delete t.isHelper,this.acceptNode(t.path),t.params)for(var e=0;ei;i++){var o=new e.plugins.ast[i];o.syntax=b,n=o.transform(n)}return n}function c(t,e){this.options=e||{},this.elementStack=[],this.tokenizer=new h("",new m(d)),this.nodeHandlers=f,this.tokenHandlers=g,"string"==typeof t&&(this.source=u(t))}var u,p=t.parse,h=e.Tokenizer,m=r["default"],d=n["default"],f=i["default"],g=s["default"],b=o;u=2==="foo\n\nbar".split(/\n/).length?function(t){var e=t.replace(/\r\n?/g,"\n");return e.split("\n")}:function(t){return t.split(/(?:\r\n?|\n)/g)},a.preprocess=l,c.prototype.acceptNode=function(t){return this.nodeHandlers[t.type].call(this,t)},c.prototype.acceptToken=function(t){return t?this.tokenHandlers[t.type].call(this,t):void 0},c.prototype.currentElement=function(){return this.elementStack[this.elementStack.length-1]},c.prototype.sourceForMustache=function(t){var e,r=t.loc.start.line-1,n=t.loc.end.line-1,i=r-1,s=t.loc.start.column+2,o=t.loc.end.column-2,a=[];if(!this.source)return"{{"+t.path.id.original+"}}";for(;n>i;)i++,e=this.source[i],a.push(i===r?r===n?e.slice(s,o):e.slice(s):i===n?e.slice(0,o):e);return a.join("\n")}}),t("htmlbars-syntax/token-handlers",["../htmlbars-util/array-utils","./builders","./utils","exports"],function(t,e,r,n){"use strict";function i(t,e){var r;if(g[t.tagName]&&void 0===e.tag?r="Invalid end tag "+s(t)+" (void elements cannot have end tags).":void 0===e.tag?r="Closing tag "+s(t)+" without an open tag.":e.tag!==t.tagName&&(r="Closing tag "+s(t)+" did not match last open tag `"+e.tag+"` (on line "+e.loc.start.line+")."),r)throw new Error(r)}function s(t){return"`"+t.tagName+"` (on line "+t.lastLine+")"}var o=t.forEach,a=e.buildProgram,l=e.buildComponent,c=e.buildElement,u=e.buildComment,p=e.buildText,h=r.appendChild,m=r.parseComponentBlockParams,d=r.postprocessProgram,f="area base br col command embed hr img input keygen link meta param source track wbr",g={};o(f.split(" "),function(t){g[t]=!0});var b={Comment:function(t){var e=this.currentElement(),r=u(t.chars);h(e,r)},Chars:function(t){var e=this.currentElement(),r=p(t.chars);h(e,r)},StartTag:function(t){var e=c(t.tagName,t.attributes,t.helpers||[],[]);e.loc={start:{line:t.firstLine,column:t.firstColumn},end:{line:null,column:null}},this.elementStack.push(e),(g.hasOwnProperty(t.tagName)||t.selfClosing)&&b.EndTag.call(this,t)},BlockStatement:function(){if("comment"!==this.tokenizer.state&&"data"!==this.tokenizer.state)throw new Error("A block may only be used inside an HTML element or another block.")},MustacheStatement:function(t){var e=this.tokenizer;switch(e.state){case"tagName":return e.addTagHelper(t.sexpr),void(e.state="beforeAttributeName");case"beforeAttributeName":return void e.addTagHelper(t.sexpr);case"attributeName":case"afterAttributeName":return e.finalizeAttributeValue(),e.addTagHelper(t.sexpr),void(e.state="beforeAttributeName");case"afterAttributeValueQuoted":return e.addTagHelper(t.sexpr),void(e.state="beforeAttributeName");case"beforeAttributeValue":return e.markAttributeQuoted(!1),e.addToAttributeValue(t),void(e.state="attributeValueUnquoted");case"attributeValueDoubleQuoted":case"attributeValueSingleQuoted":case"attributeValueUnquoted":return void e.addToAttributeValue(t);default:h(this.currentElement(),t)}},EndTag:function(t){var e=this.elementStack.pop(),r=this.currentElement(),n=this.options.disableComponentGeneration===!0;if(i(t,e),n||-1===e.tag.indexOf("-"))h(r,e);else{var s=a(e.children);m(e,s),d(s);var o=l(e.tag,e.attributes,s);h(r,o)}}};n["default"]=b}),t("htmlbars-syntax/tokenizer",["../simple-html-tokenizer","./utils","../htmlbars-util/array-utils","./builders","exports"],function(t,e,r,n,i){"use strict";function s(t){var e=t.value,r=e.length;return 0===r?h.text(""):1===r&&"TextNode"===e[0].type?e[0]:t.quoted?h.concat(p(e,o)):e[0]}function o(t){switch(t.type){case"TextNode":return h.string(t.chars);case"MustacheStatement":return l(t);default:throw new Error("Unsupported node in quoted attribute value: "+t.type)}}function a(t){return"`"+t.token.tagName+"` (on line "+t.line+")"}function l(t){return u(t.sexpr)?t.sexpr:t.sexpr.path}var c=t.Tokenizer,u=e.isHelper,p=r.map,h=n["default"];c.prototype.createAttribute=function(t){if("EndTag"===this.token.type)throw new Error("Invalid end tag: closing tag must not have attributes, in "+a(this)+".");this.currentAttribute=h.attr(t.toLowerCase(),[],null),this.token.attributes.push(this.currentAttribute),this.state="attributeName"},c.prototype.markAttributeQuoted=function(t){this.currentAttribute.quoted=t},c.prototype.addToAttributeName=function(t){this.currentAttribute.name+=t},c.prototype.addToAttributeValue=function(t){var e=this.currentAttribute.value;if(!this.currentAttribute.quoted&&"/"===t)throw new Error("A space is required between an unquoted attribute value and `/`, in "+a(this)+".");if(!this.currentAttribute.quoted&&e.length>0&&("MustacheStatement"===t.type||"MustacheStatement"===e[0].type))throw new Error("Unquoted attribute value must be a single string or mustache (on line "+this.line+")"); +if("object"==typeof t){if("MustacheStatement"!==t.type)throw new Error("Unsupported node in attribute value: "+t.type);e.push(t)}else e.length>0&&"TextNode"===e[e.length-1].type?e[e.length-1].chars+=t:e.push(h.text(t))},c.prototype.finalizeAttributeValue=function(){this.currentAttribute&&(this.currentAttribute.value=s(this.currentAttribute),delete this.currentAttribute.quoted,delete this.currentAttribute)},c.prototype.addTagHelper=function(t){var e=this.token.helpers=this.token.helpers||[];e.push(t)},i.unwrapMustache=l,i.Tokenizer=c}),t("htmlbars-syntax/utils",["./builders","../htmlbars-util/array-utils","exports"],function(t,e,r){"use strict";function n(t,e){for(var r=t.attributes.length,n=[],i=0;r>i;i++)n.push(t.attributes[i].name);var s=u(n,"as");if(-1!==s&&r>s&&"|"===n[s+1].charAt(0)){var o=n.slice(s).join(" ");if("|"!==o.charAt(o.length-1)||2!==o.match(/\|/g).length)throw new Error("Invalid block parameters syntax: '"+o+"'");var a=[];for(i=s+1;r>i;i++){var l=n[i].replace(/\|/g,"");if(""!==l){if(p.test(l))throw new Error("Invalid identifier for block parameters: '"+l+"' in '"+o+"'");a.push(l)}}if(0===a.length)throw new Error("Cannot use zero block parameters: '"+o+"'");t.attributes=t.attributes.slice(0,s),e.blockParams=a}}function i(t){var e=t.body;0!==e.length&&(o(e[0])&&e.unshift(c("")),o(e[e.length-1])&&e.push(c("")))}function s(t){return"Program"===t.type?t.body:"ElementNode"===t.type?t.children:void 0}function o(t){return"MustacheStatement"===t.type||"BlockStatement"===t.type||"ComponentNode"===t.type}function a(t,e){var r,n=s(t),i=n.length;i>0&&(r=n[i-1],o(r)&&o(e)&&n.push(c(""))),n.push(e)}function l(t){return t.params&&t.params.length>0||t.hash&&t.hash.pairs.length>0}var c=t.buildText,u=e.indexOfArray,p=/[!"#%-,\.\/;->@\[-\^`\{-~]/;r.parseComponentBlockParams=n,r.postprocessProgram=i,r.childrenFor=s,r.usesMorph=o,r.appendChild=a,r.isHelper=l}),t("htmlbars-syntax/walker",["exports"],function(t){"use strict";function e(t){this.order=t,this.stack=[]}t["default"]=e,e.prototype.visit=function(t,e){t&&(this.stack.push(t),"post"===this.order?(this.children(t,e),e(t,this)):(e(t,this),this.children(t,e)),this.stack.pop())};var r={Program:function(t,e,r){for(var n=0;n]+)/gi,function(t,e){return'id="'+e+'"'}),t=t.replace(/<(\/?):([^ >]+)/gi,function(t,e,r){return"<"+e+r}),t=t.replace(/style="(.+?)"/gi,function(t,e){return'style="'+e.toLowerCase()+';"'})),c&&(t=t.replace(/ xmlns="[^"]+"/,""),t=t.replace(/<([^ >]+) [^\/>]*\/>/gi,function(t,e){return t.slice(0,t.length-3)+">"})),t}function i(t){equal(t.outerHTML,p)}function s(t){return 3===t.nodeType?t.nodeValue:t[h]}function o(t){if("function"==typeof Object.create)return Object.create(t);var e=function(){};return e.prototype=t,new e}t.equalInnerHTML=e,t.equalHTML=r;var a=document.createElement("div");a.setAttribute("id","womp");var l=a.outerHTML.indexOf("id=womp")>-1,c=function(){if(!document.createElementNS)return!1;var t=document.createElement("div"),e=document.createElementNS("http://www.w3.org/2000/svg","svg");t.appendChild(e);var r=t.cloneNode(!0);return''===r.innerHTML}();t.normalizeInnerHTML=n;var u=document.createElement("input");u.setAttribute("checked","checked");var p=u.outerHTML;t.isCheckedInputHTML=i;var h=void 0===document.createElement("div").textContent?"innerText":"textContent";t.getTextContent=s,t.createObject=o}),t("htmlbars-util",["./htmlbars-util/safe-string","./htmlbars-util/handlebars/utils","./htmlbars-util/namespaces","exports"],function(t,e,r,n){"use strict";var i=t["default"],s=e.escapeExpression,o=r.getAttrNamespace;n.SafeString=i,n.escapeExpression=s,n.getAttrNamespace=o}),t("htmlbars-util/array-utils",["exports"],function(t){"use strict";function e(t,e,r){var n,i;if(void 0===r)for(n=0,i=t.length;i>n;n++)e(t[n],n,t);else for(n=0,i=t.length;i>n;n++)e.call(r,t[n],n,t)}function r(t,e){var r,n,i=[];for(r=0,n=t.length;n>r;r++)i.push(e(t[r],r,t));return i}t.forEach=e,t.map=r;var n;n=Array.prototype.indexOf?function(t,e,r){return t.indexOf(e,r)}:function(t,e,r){void 0===r||null===r?r=0:0>r&&(r=Math.max(0,t.length+r));for(var n=r,i=t.length;i>n;n++)if(t[n]===e)return n;return-1};var i=n;t.indexOfArray=i}),t("htmlbars-util/handlebars/safe-string",["exports"],function(t){"use strict";function e(t){this.string=t}e.prototype.toString=e.prototype.toHTML=function(){return""+this.string},t["default"]=e}),t("htmlbars-util/handlebars/utils",["./safe-string","exports"],function(t,e){"use strict";function r(t){return a[t]}function n(t){for(var e=1;e":">",'"':""","'":"'","`":"`"}),l=/[&<>"'`]/g,c=/[&<>"'`]/;e.extend=n;var u=Object.prototype.toString;e.toString=u;var p=function(t){return"function"==typeof t};p(/x/)&&(p=function(t){return"function"==typeof t&&"[object Function]"===u.call(t)});var p;e.isFunction=p;var h=Array.isArray||function(t){return t&&"object"==typeof t?"[object Array]"===u.call(t):!1};e.isArray=h,e.escapeExpression=i,e.isEmpty=s,e.appendContextPath=o}),t("htmlbars-util/namespaces",["exports"],function(t){"use strict";function e(t){var e,n=t.indexOf(":");if(-1!==n){var i=t.slice(0,n);e=r[i]}return e||null}var r={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"};t.getAttrNamespace=e}),t("htmlbars-util/object-utils",["exports"],function(t){"use strict";function e(t,e){for(var r in e)t.hasOwnProperty(r)||(t[r]=e[r]);return t}t.merge=e}),t("htmlbars-util/quoting",["exports"],function(t){"use strict";function e(t){return t=t.replace(/\\/g,"\\\\"),t=t.replace(/"/g,'\\"'),t=t.replace(/\n/g,"\\n")}function r(t){return'"'+e(t)+'"'}function n(t){return"["+t+"]"}function i(t){return"{"+t.join(", ")+"}"}function s(t,e){for(var r="";e--;)r+=t;return r}t.escapeString=e,t.string=r,t.array=n,t.hash=i,t.repeat=s}),t("htmlbars-util/safe-string",["./handlebars/safe-string","exports"],function(t,e){"use strict";var r=t["default"];e["default"]=r}),t("simple-html-tokenizer",["./simple-html-tokenizer/tokenizer","./simple-html-tokenizer/tokenize","./simple-html-tokenizer/generator","./simple-html-tokenizer/generate","./simple-html-tokenizer/tokens","exports"],function(t,e,r,n,i,s){"use strict";var o=t["default"],a=e["default"],l=r["default"],c=n["default"],u=i.StartTag,p=i.EndTag,h=i.Chars,m=i.Comment;s.Tokenizer=o,s.tokenize=a,s.Generator=l,s.generate=c,s.StartTag=u,s.EndTag=p,s.Chars=h,s.Comment=m}),t("simple-html-tokenizer/char-refs/full",["exports"],function(t){"use strict";t["default"]={AElig:[198],AMP:[38],Aacute:[193],Abreve:[258],Acirc:[194],Acy:[1040],Afr:[120068],Agrave:[192],Alpha:[913],Amacr:[256],And:[10835],Aogon:[260],Aopf:[120120],ApplyFunction:[8289],Aring:[197],Ascr:[119964],Assign:[8788],Atilde:[195],Auml:[196],Backslash:[8726],Barv:[10983],Barwed:[8966],Bcy:[1041],Because:[8757],Bernoullis:[8492],Beta:[914],Bfr:[120069],Bopf:[120121],Breve:[728],Bscr:[8492],Bumpeq:[8782],CHcy:[1063],COPY:[169],Cacute:[262],Cap:[8914],CapitalDifferentialD:[8517],Cayleys:[8493],Ccaron:[268],Ccedil:[199],Ccirc:[264],Cconint:[8752],Cdot:[266],Cedilla:[184],CenterDot:[183],Cfr:[8493],Chi:[935],CircleDot:[8857],CircleMinus:[8854],CirclePlus:[8853],CircleTimes:[8855],ClockwiseContourIntegral:[8754],CloseCurlyDoubleQuote:[8221],CloseCurlyQuote:[8217],Colon:[8759],Colone:[10868],Congruent:[8801],Conint:[8751],ContourIntegral:[8750],Copf:[8450],Coproduct:[8720],CounterClockwiseContourIntegral:[8755],Cross:[10799],Cscr:[119966],Cup:[8915],CupCap:[8781],DD:[8517],DDotrahd:[10513],DJcy:[1026],DScy:[1029],DZcy:[1039],Dagger:[8225],Darr:[8609],Dashv:[10980],Dcaron:[270],Dcy:[1044],Del:[8711],Delta:[916],Dfr:[120071],DiacriticalAcute:[180],DiacriticalDot:[729],DiacriticalDoubleAcute:[733],DiacriticalGrave:[96],DiacriticalTilde:[732],Diamond:[8900],DifferentialD:[8518],Dopf:[120123],Dot:[168],DotDot:[8412],DotEqual:[8784],DoubleContourIntegral:[8751],DoubleDot:[168],DoubleDownArrow:[8659],DoubleLeftArrow:[8656],DoubleLeftRightArrow:[8660],DoubleLeftTee:[10980],DoubleLongLeftArrow:[10232],DoubleLongLeftRightArrow:[10234],DoubleLongRightArrow:[10233],DoubleRightArrow:[8658],DoubleRightTee:[8872],DoubleUpArrow:[8657],DoubleUpDownArrow:[8661],DoubleVerticalBar:[8741],DownArrow:[8595],DownArrowBar:[10515],DownArrowUpArrow:[8693],DownBreve:[785],DownLeftRightVector:[10576],DownLeftTeeVector:[10590],DownLeftVector:[8637],DownLeftVectorBar:[10582],DownRightTeeVector:[10591],DownRightVector:[8641],DownRightVectorBar:[10583],DownTee:[8868],DownTeeArrow:[8615],Downarrow:[8659],Dscr:[119967],Dstrok:[272],ENG:[330],ETH:[208],Eacute:[201],Ecaron:[282],Ecirc:[202],Ecy:[1069],Edot:[278],Efr:[120072],Egrave:[200],Element:[8712],Emacr:[274],EmptySmallSquare:[9723],EmptyVerySmallSquare:[9643],Eogon:[280],Eopf:[120124],Epsilon:[917],Equal:[10869],EqualTilde:[8770],Equilibrium:[8652],Escr:[8496],Esim:[10867],Eta:[919],Euml:[203],Exists:[8707],ExponentialE:[8519],Fcy:[1060],Ffr:[120073],FilledSmallSquare:[9724],FilledVerySmallSquare:[9642],Fopf:[120125],ForAll:[8704],Fouriertrf:[8497],Fscr:[8497],GJcy:[1027],GT:[62],Gamma:[915],Gammad:[988],Gbreve:[286],Gcedil:[290],Gcirc:[284],Gcy:[1043],Gdot:[288],Gfr:[120074],Gg:[8921],Gopf:[120126],GreaterEqual:[8805],GreaterEqualLess:[8923],GreaterFullEqual:[8807],GreaterGreater:[10914],GreaterLess:[8823],GreaterSlantEqual:[10878],GreaterTilde:[8819],Gscr:[119970],Gt:[8811],HARDcy:[1066],Hacek:[711],Hat:[94],Hcirc:[292],Hfr:[8460],HilbertSpace:[8459],Hopf:[8461],HorizontalLine:[9472],Hscr:[8459],Hstrok:[294],HumpDownHump:[8782],HumpEqual:[8783],IEcy:[1045],IJlig:[306],IOcy:[1025],Iacute:[205],Icirc:[206],Icy:[1048],Idot:[304],Ifr:[8465],Igrave:[204],Im:[8465],Imacr:[298],ImaginaryI:[8520],Implies:[8658],Int:[8748],Integral:[8747],Intersection:[8898],InvisibleComma:[8291],InvisibleTimes:[8290],Iogon:[302],Iopf:[120128],Iota:[921],Iscr:[8464],Itilde:[296],Iukcy:[1030],Iuml:[207],Jcirc:[308],Jcy:[1049],Jfr:[120077],Jopf:[120129],Jscr:[119973],Jsercy:[1032],Jukcy:[1028],KHcy:[1061],KJcy:[1036],Kappa:[922],Kcedil:[310],Kcy:[1050],Kfr:[120078],Kopf:[120130],Kscr:[119974],LJcy:[1033],LT:[60],Lacute:[313],Lambda:[923],Lang:[10218],Laplacetrf:[8466],Larr:[8606],Lcaron:[317],Lcedil:[315],Lcy:[1051],LeftAngleBracket:[10216],LeftArrow:[8592],LeftArrowBar:[8676],LeftArrowRightArrow:[8646],LeftCeiling:[8968],LeftDoubleBracket:[10214],LeftDownTeeVector:[10593],LeftDownVector:[8643],LeftDownVectorBar:[10585],LeftFloor:[8970],LeftRightArrow:[8596],LeftRightVector:[10574],LeftTee:[8867],LeftTeeArrow:[8612],LeftTeeVector:[10586],LeftTriangle:[8882],LeftTriangleBar:[10703],LeftTriangleEqual:[8884],LeftUpDownVector:[10577],LeftUpTeeVector:[10592],LeftUpVector:[8639],LeftUpVectorBar:[10584],LeftVector:[8636],LeftVectorBar:[10578],Leftarrow:[8656],Leftrightarrow:[8660],LessEqualGreater:[8922],LessFullEqual:[8806],LessGreater:[8822],LessLess:[10913],LessSlantEqual:[10877],LessTilde:[8818],Lfr:[120079],Ll:[8920],Lleftarrow:[8666],Lmidot:[319],LongLeftArrow:[10229],LongLeftRightArrow:[10231],LongRightArrow:[10230],Longleftarrow:[10232],Longleftrightarrow:[10234],Longrightarrow:[10233],Lopf:[120131],LowerLeftArrow:[8601],LowerRightArrow:[8600],Lscr:[8466],Lsh:[8624],Lstrok:[321],Lt:[8810],Map:[10501],Mcy:[1052],MediumSpace:[8287],Mellintrf:[8499],Mfr:[120080],MinusPlus:[8723],Mopf:[120132],Mscr:[8499],Mu:[924],NJcy:[1034],Nacute:[323],Ncaron:[327],Ncedil:[325],Ncy:[1053],NegativeMediumSpace:[8203],NegativeThickSpace:[8203],NegativeThinSpace:[8203],NegativeVeryThinSpace:[8203],NestedGreaterGreater:[8811],NestedLessLess:[8810],NewLine:[10],Nfr:[120081],NoBreak:[8288],NonBreakingSpace:[160],Nopf:[8469],Not:[10988],NotCongruent:[8802],NotCupCap:[8813],NotDoubleVerticalBar:[8742],NotElement:[8713],NotEqual:[8800],NotEqualTilde:[8770,824],NotExists:[8708],NotGreater:[8815],NotGreaterEqual:[8817],NotGreaterFullEqual:[8807,824],NotGreaterGreater:[8811,824],NotGreaterLess:[8825],NotGreaterSlantEqual:[10878,824],NotGreaterTilde:[8821],NotHumpDownHump:[8782,824],NotHumpEqual:[8783,824],NotLeftTriangle:[8938],NotLeftTriangleBar:[10703,824],NotLeftTriangleEqual:[8940],NotLess:[8814],NotLessEqual:[8816],NotLessGreater:[8824],NotLessLess:[8810,824],NotLessSlantEqual:[10877,824],NotLessTilde:[8820],NotNestedGreaterGreater:[10914,824],NotNestedLessLess:[10913,824],NotPrecedes:[8832],NotPrecedesEqual:[10927,824],NotPrecedesSlantEqual:[8928],NotReverseElement:[8716],NotRightTriangle:[8939],NotRightTriangleBar:[10704,824],NotRightTriangleEqual:[8941],NotSquareSubset:[8847,824],NotSquareSubsetEqual:[8930],NotSquareSuperset:[8848,824],NotSquareSupersetEqual:[8931],NotSubset:[8834,8402],NotSubsetEqual:[8840],NotSucceeds:[8833],NotSucceedsEqual:[10928,824],NotSucceedsSlantEqual:[8929],NotSucceedsTilde:[8831,824],NotSuperset:[8835,8402],NotSupersetEqual:[8841],NotTilde:[8769],NotTildeEqual:[8772],NotTildeFullEqual:[8775],NotTildeTilde:[8777],NotVerticalBar:[8740],Nscr:[119977],Ntilde:[209],Nu:[925],OElig:[338],Oacute:[211],Ocirc:[212],Ocy:[1054],Odblac:[336],Ofr:[120082],Ograve:[210],Omacr:[332],Omega:[937],Omicron:[927],Oopf:[120134],OpenCurlyDoubleQuote:[8220],OpenCurlyQuote:[8216],Or:[10836],Oscr:[119978],Oslash:[216],Otilde:[213],Otimes:[10807],Ouml:[214],OverBar:[8254],OverBrace:[9182],OverBracket:[9140],OverParenthesis:[9180],PartialD:[8706],Pcy:[1055],Pfr:[120083],Phi:[934],Pi:[928],PlusMinus:[177],Poincareplane:[8460],Popf:[8473],Pr:[10939],Precedes:[8826],PrecedesEqual:[10927],PrecedesSlantEqual:[8828],PrecedesTilde:[8830],Prime:[8243],Product:[8719],Proportion:[8759],Proportional:[8733],Pscr:[119979],Psi:[936],QUOT:[34],Qfr:[120084],Qopf:[8474],Qscr:[119980],RBarr:[10512],REG:[174],Racute:[340],Rang:[10219],Rarr:[8608],Rarrtl:[10518],Rcaron:[344],Rcedil:[342],Rcy:[1056],Re:[8476],ReverseElement:[8715],ReverseEquilibrium:[8651],ReverseUpEquilibrium:[10607],Rfr:[8476],Rho:[929],RightAngleBracket:[10217],RightArrow:[8594],RightArrowBar:[8677],RightArrowLeftArrow:[8644],RightCeiling:[8969],RightDoubleBracket:[10215],RightDownTeeVector:[10589],RightDownVector:[8642],RightDownVectorBar:[10581],RightFloor:[8971],RightTee:[8866],RightTeeArrow:[8614],RightTeeVector:[10587],RightTriangle:[8883],RightTriangleBar:[10704],RightTriangleEqual:[8885],RightUpDownVector:[10575],RightUpTeeVector:[10588],RightUpVector:[8638],RightUpVectorBar:[10580],RightVector:[8640],RightVectorBar:[10579],Rightarrow:[8658],Ropf:[8477],RoundImplies:[10608],Rrightarrow:[8667],Rscr:[8475],Rsh:[8625],RuleDelayed:[10740],SHCHcy:[1065],SHcy:[1064],SOFTcy:[1068],Sacute:[346],Sc:[10940],Scaron:[352],Scedil:[350],Scirc:[348],Scy:[1057],Sfr:[120086],ShortDownArrow:[8595],ShortLeftArrow:[8592],ShortRightArrow:[8594],ShortUpArrow:[8593],Sigma:[931],SmallCircle:[8728],Sopf:[120138],Sqrt:[8730],Square:[9633],SquareIntersection:[8851],SquareSubset:[8847],SquareSubsetEqual:[8849],SquareSuperset:[8848],SquareSupersetEqual:[8850],SquareUnion:[8852],Sscr:[119982],Star:[8902],Sub:[8912],Subset:[8912],SubsetEqual:[8838],Succeeds:[8827],SucceedsEqual:[10928],SucceedsSlantEqual:[8829],SucceedsTilde:[8831],SuchThat:[8715],Sum:[8721],Sup:[8913],Superset:[8835],SupersetEqual:[8839],Supset:[8913],THORN:[222],TRADE:[8482],TSHcy:[1035],TScy:[1062],Tab:[9],Tau:[932],Tcaron:[356],Tcedil:[354],Tcy:[1058],Tfr:[120087],Therefore:[8756],Theta:[920],ThickSpace:[8287,8202],ThinSpace:[8201],Tilde:[8764],TildeEqual:[8771],TildeFullEqual:[8773],TildeTilde:[8776],Topf:[120139],TripleDot:[8411],Tscr:[119983],Tstrok:[358],Uacute:[218],Uarr:[8607],Uarrocir:[10569],Ubrcy:[1038],Ubreve:[364],Ucirc:[219],Ucy:[1059],Udblac:[368],Ufr:[120088],Ugrave:[217],Umacr:[362],UnderBar:[95],UnderBrace:[9183],UnderBracket:[9141],UnderParenthesis:[9181],Union:[8899],UnionPlus:[8846],Uogon:[370],Uopf:[120140],UpArrow:[8593],UpArrowBar:[10514],UpArrowDownArrow:[8645],UpDownArrow:[8597],UpEquilibrium:[10606],UpTee:[8869],UpTeeArrow:[8613],Uparrow:[8657],Updownarrow:[8661],UpperLeftArrow:[8598],UpperRightArrow:[8599],Upsi:[978],Upsilon:[933],Uring:[366],Uscr:[119984],Utilde:[360],Uuml:[220],VDash:[8875],Vbar:[10987],Vcy:[1042],Vdash:[8873],Vdashl:[10982],Vee:[8897],Verbar:[8214],Vert:[8214],VerticalBar:[8739],VerticalLine:[124],VerticalSeparator:[10072],VerticalTilde:[8768],VeryThinSpace:[8202],Vfr:[120089],Vopf:[120141],Vscr:[119985],Vvdash:[8874],Wcirc:[372],Wedge:[8896],Wfr:[120090],Wopf:[120142],Wscr:[119986],Xfr:[120091],Xi:[926],Xopf:[120143],Xscr:[119987],YAcy:[1071],YIcy:[1031],YUcy:[1070],Yacute:[221],Ycirc:[374],Ycy:[1067],Yfr:[120092],Yopf:[120144],Yscr:[119988],Yuml:[376],ZHcy:[1046],Zacute:[377],Zcaron:[381],Zcy:[1047],Zdot:[379],ZeroWidthSpace:[8203],Zeta:[918],Zfr:[8488],Zopf:[8484],Zscr:[119989],aacute:[225],abreve:[259],ac:[8766],acE:[8766,819],acd:[8767],acirc:[226],acute:[180],acy:[1072],aelig:[230],af:[8289],afr:[120094],agrave:[224],alefsym:[8501],aleph:[8501],alpha:[945],amacr:[257],amalg:[10815],amp:[38],and:[8743],andand:[10837],andd:[10844],andslope:[10840],andv:[10842],ang:[8736],ange:[10660],angle:[8736],angmsd:[8737],angmsdaa:[10664],angmsdab:[10665],angmsdac:[10666],angmsdad:[10667],angmsdae:[10668],angmsdaf:[10669],angmsdag:[10670],angmsdah:[10671],angrt:[8735],angrtvb:[8894],angrtvbd:[10653],angsph:[8738],angst:[197],angzarr:[9084],aogon:[261],aopf:[120146],ap:[8776],apE:[10864],apacir:[10863],ape:[8778],apid:[8779],apos:[39],approx:[8776],approxeq:[8778],aring:[229],ascr:[119990],ast:[42],asymp:[8776],asympeq:[8781],atilde:[227],auml:[228],awconint:[8755],awint:[10769],bNot:[10989],backcong:[8780],backepsilon:[1014],backprime:[8245],backsim:[8765],backsimeq:[8909],barvee:[8893],barwed:[8965],barwedge:[8965],bbrk:[9141],bbrktbrk:[9142],bcong:[8780],bcy:[1073],bdquo:[8222],becaus:[8757],because:[8757],bemptyv:[10672],bepsi:[1014],bernou:[8492],beta:[946],beth:[8502],between:[8812],bfr:[120095],bigcap:[8898],bigcirc:[9711],bigcup:[8899],bigodot:[10752],bigoplus:[10753],bigotimes:[10754],bigsqcup:[10758],bigstar:[9733],bigtriangledown:[9661],bigtriangleup:[9651],biguplus:[10756],bigvee:[8897],bigwedge:[8896],bkarow:[10509],blacklozenge:[10731],blacksquare:[9642],blacktriangle:[9652],blacktriangledown:[9662],blacktriangleleft:[9666],blacktriangleright:[9656],blank:[9251],blk12:[9618],blk14:[9617],blk34:[9619],block:[9608],bne:[61,8421],bnequiv:[8801,8421],bnot:[8976],bopf:[120147],bot:[8869],bottom:[8869],bowtie:[8904],boxDL:[9559],boxDR:[9556],boxDl:[9558],boxDr:[9555],boxH:[9552],boxHD:[9574],boxHU:[9577],boxHd:[9572],boxHu:[9575],boxUL:[9565],boxUR:[9562],boxUl:[9564],boxUr:[9561],boxV:[9553],boxVH:[9580],boxVL:[9571],boxVR:[9568],boxVh:[9579],boxVl:[9570],boxVr:[9567],boxbox:[10697],boxdL:[9557],boxdR:[9554],boxdl:[9488],boxdr:[9484],boxh:[9472],boxhD:[9573],boxhU:[9576],boxhd:[9516],boxhu:[9524],boxminus:[8863],boxplus:[8862],boxtimes:[8864],boxuL:[9563],boxuR:[9560],boxul:[9496],boxur:[9492],boxv:[9474],boxvH:[9578],boxvL:[9569],boxvR:[9566],boxvh:[9532],boxvl:[9508],boxvr:[9500],bprime:[8245],breve:[728],brvbar:[166],bscr:[119991],bsemi:[8271],bsim:[8765],bsime:[8909],bsol:[92],bsolb:[10693],bsolhsub:[10184],bull:[8226],bullet:[8226],bump:[8782],bumpE:[10926],bumpe:[8783],bumpeq:[8783],cacute:[263],cap:[8745],capand:[10820],capbrcup:[10825],capcap:[10827],capcup:[10823],capdot:[10816],caps:[8745,65024],caret:[8257],caron:[711],ccaps:[10829],ccaron:[269],ccedil:[231],ccirc:[265],ccups:[10828],ccupssm:[10832],cdot:[267],cedil:[184],cemptyv:[10674],cent:[162],centerdot:[183],cfr:[120096],chcy:[1095],check:[10003],checkmark:[10003],chi:[967],cir:[9675],cirE:[10691],circ:[710],circeq:[8791],circlearrowleft:[8634],circlearrowright:[8635],circledR:[174],circledS:[9416],circledast:[8859],circledcirc:[8858],circleddash:[8861],cire:[8791],cirfnint:[10768],cirmid:[10991],cirscir:[10690],clubs:[9827],clubsuit:[9827],colon:[58],colone:[8788],coloneq:[8788],comma:[44],commat:[64],comp:[8705],compfn:[8728],complement:[8705],complexes:[8450],cong:[8773],congdot:[10861],conint:[8750],copf:[120148],coprod:[8720],copy:[169],copysr:[8471],crarr:[8629],cross:[10007],cscr:[119992],csub:[10959],csube:[10961],csup:[10960],csupe:[10962],ctdot:[8943],cudarrl:[10552],cudarrr:[10549],cuepr:[8926],cuesc:[8927],cularr:[8630],cularrp:[10557],cup:[8746],cupbrcap:[10824],cupcap:[10822],cupcup:[10826],cupdot:[8845],cupor:[10821],cups:[8746,65024],curarr:[8631],curarrm:[10556],curlyeqprec:[8926],curlyeqsucc:[8927],curlyvee:[8910],curlywedge:[8911],curren:[164],curvearrowleft:[8630],curvearrowright:[8631],cuvee:[8910],cuwed:[8911],cwconint:[8754],cwint:[8753],cylcty:[9005],dArr:[8659],dHar:[10597],dagger:[8224],daleth:[8504],darr:[8595],dash:[8208],dashv:[8867],dbkarow:[10511],dblac:[733],dcaron:[271],dcy:[1076],dd:[8518],ddagger:[8225],ddarr:[8650],ddotseq:[10871],deg:[176],delta:[948],demptyv:[10673],dfisht:[10623],dfr:[120097],dharl:[8643],dharr:[8642],diam:[8900],diamond:[8900],diamondsuit:[9830],diams:[9830],die:[168],digamma:[989],disin:[8946],div:[247],divide:[247],divideontimes:[8903],divonx:[8903],djcy:[1106],dlcorn:[8990],dlcrop:[8973],dollar:[36],dopf:[120149],dot:[729],doteq:[8784],doteqdot:[8785],dotminus:[8760],dotplus:[8724],dotsquare:[8865],doublebarwedge:[8966],downarrow:[8595],downdownarrows:[8650],downharpoonleft:[8643],downharpoonright:[8642],drbkarow:[10512],drcorn:[8991],drcrop:[8972],dscr:[119993],dscy:[1109],dsol:[10742],dstrok:[273],dtdot:[8945],dtri:[9663],dtrif:[9662],duarr:[8693],duhar:[10607],dwangle:[10662],dzcy:[1119],dzigrarr:[10239],eDDot:[10871],eDot:[8785],eacute:[233],easter:[10862],ecaron:[283],ecir:[8790],ecirc:[234],ecolon:[8789],ecy:[1101],edot:[279],ee:[8519],efDot:[8786],efr:[120098],eg:[10906],egrave:[232],egs:[10902],egsdot:[10904],el:[10905],elinters:[9191],ell:[8467],els:[10901],elsdot:[10903],emacr:[275],empty:[8709],emptyset:[8709],emptyv:[8709],emsp:[8195],emsp13:[8196],emsp14:[8197],eng:[331],ensp:[8194],eogon:[281],eopf:[120150],epar:[8917],eparsl:[10723],eplus:[10865],epsi:[949],epsilon:[949],epsiv:[1013],eqcirc:[8790],eqcolon:[8789],eqsim:[8770],eqslantgtr:[10902],eqslantless:[10901],equals:[61],equest:[8799],equiv:[8801],equivDD:[10872],eqvparsl:[10725],erDot:[8787],erarr:[10609],escr:[8495],esdot:[8784],esim:[8770],eta:[951],eth:[240],euml:[235],euro:[8364],excl:[33],exist:[8707],expectation:[8496],exponentiale:[8519],fallingdotseq:[8786],fcy:[1092],female:[9792],ffilig:[64259],fflig:[64256],ffllig:[64260],ffr:[120099],filig:[64257],fjlig:[102,106],flat:[9837],fllig:[64258],fltns:[9649],fnof:[402],fopf:[120151],forall:[8704],fork:[8916],forkv:[10969],fpartint:[10765],frac12:[189],frac13:[8531],frac14:[188],frac15:[8533],frac16:[8537],frac18:[8539],frac23:[8532],frac25:[8534],frac34:[190],frac35:[8535],frac38:[8540],frac45:[8536],frac56:[8538],frac58:[8541],frac78:[8542],frasl:[8260],frown:[8994],fscr:[119995],gE:[8807],gEl:[10892],gacute:[501],gamma:[947],gammad:[989],gap:[10886],gbreve:[287],gcirc:[285],gcy:[1075],gdot:[289],ge:[8805],gel:[8923],geq:[8805],geqq:[8807],geqslant:[10878],ges:[10878],gescc:[10921],gesdot:[10880],gesdoto:[10882],gesdotol:[10884],gesl:[8923,65024],gesles:[10900],gfr:[120100],gg:[8811],ggg:[8921],gimel:[8503],gjcy:[1107],gl:[8823],glE:[10898],gla:[10917],glj:[10916],gnE:[8809],gnap:[10890],gnapprox:[10890],gne:[10888],gneq:[10888],gneqq:[8809],gnsim:[8935],gopf:[120152],grave:[96],gscr:[8458],gsim:[8819],gsime:[10894],gsiml:[10896],gt:[62],gtcc:[10919],gtcir:[10874],gtdot:[8919],gtlPar:[10645],gtquest:[10876],gtrapprox:[10886],gtrarr:[10616],gtrdot:[8919],gtreqless:[8923],gtreqqless:[10892],gtrless:[8823],gtrsim:[8819],gvertneqq:[8809,65024],gvnE:[8809,65024],hArr:[8660],hairsp:[8202],half:[189],hamilt:[8459],hardcy:[1098],harr:[8596],harrcir:[10568],harrw:[8621],hbar:[8463],hcirc:[293],hearts:[9829],heartsuit:[9829],hellip:[8230],hercon:[8889],hfr:[120101],hksearow:[10533],hkswarow:[10534],hoarr:[8703],homtht:[8763],hookleftarrow:[8617],hookrightarrow:[8618],hopf:[120153],horbar:[8213],hscr:[119997],hslash:[8463],hstrok:[295],hybull:[8259],hyphen:[8208],iacute:[237],ic:[8291],icirc:[238],icy:[1080],iecy:[1077],iexcl:[161],iff:[8660],ifr:[120102],igrave:[236],ii:[8520],iiiint:[10764],iiint:[8749],iinfin:[10716],iiota:[8489],ijlig:[307],imacr:[299],image:[8465],imagline:[8464],imagpart:[8465],imath:[305],imof:[8887],imped:[437],"in":[8712],incare:[8453],infin:[8734],infintie:[10717],inodot:[305],"int":[8747],intcal:[8890],integers:[8484],intercal:[8890],intlarhk:[10775],intprod:[10812],iocy:[1105],iogon:[303],iopf:[120154],iota:[953],iprod:[10812],iquest:[191],iscr:[119998],isin:[8712],isinE:[8953],isindot:[8949],isins:[8948],isinsv:[8947],isinv:[8712],it:[8290],itilde:[297],iukcy:[1110],iuml:[239],jcirc:[309],jcy:[1081],jfr:[120103],jmath:[567],jopf:[120155],jscr:[119999],jsercy:[1112],jukcy:[1108],kappa:[954],kappav:[1008],kcedil:[311],kcy:[1082],kfr:[120104],kgreen:[312],khcy:[1093],kjcy:[1116],kopf:[120156],kscr:[12e4],lAarr:[8666],lArr:[8656],lAtail:[10523],lBarr:[10510],lE:[8806],lEg:[10891],lHar:[10594],lacute:[314],laemptyv:[10676],lagran:[8466],lambda:[955],lang:[10216],langd:[10641],langle:[10216],lap:[10885],laquo:[171],larr:[8592],larrb:[8676],larrbfs:[10527],larrfs:[10525],larrhk:[8617],larrlp:[8619],larrpl:[10553],larrsim:[10611],larrtl:[8610],lat:[10923],latail:[10521],late:[10925],lates:[10925,65024],lbarr:[10508],lbbrk:[10098],lbrace:[123],lbrack:[91],lbrke:[10635],lbrksld:[10639],lbrkslu:[10637],lcaron:[318],lcedil:[316],lceil:[8968],lcub:[123],lcy:[1083],ldca:[10550],ldquo:[8220],ldquor:[8222],ldrdhar:[10599],ldrushar:[10571],ldsh:[8626],le:[8804],leftarrow:[8592],leftarrowtail:[8610],leftharpoondown:[8637],leftharpoonup:[8636],leftleftarrows:[8647],leftrightarrow:[8596],leftrightarrows:[8646],leftrightharpoons:[8651],leftrightsquigarrow:[8621],leftthreetimes:[8907],leg:[8922],leq:[8804],leqq:[8806],leqslant:[10877],les:[10877],lescc:[10920],lesdot:[10879],lesdoto:[10881],lesdotor:[10883],lesg:[8922,65024],lesges:[10899],lessapprox:[10885],lessdot:[8918],lesseqgtr:[8922],lesseqqgtr:[10891],lessgtr:[8822],lesssim:[8818],lfisht:[10620],lfloor:[8970],lfr:[120105],lg:[8822],lgE:[10897],lhard:[8637],lharu:[8636],lharul:[10602],lhblk:[9604],ljcy:[1113],ll:[8810],llarr:[8647],llcorner:[8990],llhard:[10603],lltri:[9722],lmidot:[320],lmoust:[9136],lmoustache:[9136],lnE:[8808],lnap:[10889],lnapprox:[10889],lne:[10887],lneq:[10887],lneqq:[8808],lnsim:[8934],loang:[10220],loarr:[8701],lobrk:[10214],longleftarrow:[10229],longleftrightarrow:[10231],longmapsto:[10236],longrightarrow:[10230],looparrowleft:[8619],looparrowright:[8620],lopar:[10629],lopf:[120157],loplus:[10797],lotimes:[10804],lowast:[8727],lowbar:[95],loz:[9674],lozenge:[9674],lozf:[10731],lpar:[40],lparlt:[10643],lrarr:[8646],lrcorner:[8991],lrhar:[8651],lrhard:[10605],lrm:[8206],lrtri:[8895],lsaquo:[8249],lscr:[120001],lsh:[8624],lsim:[8818],lsime:[10893],lsimg:[10895],lsqb:[91],lsquo:[8216],lsquor:[8218],lstrok:[322],lt:[60],ltcc:[10918],ltcir:[10873],ltdot:[8918],lthree:[8907],ltimes:[8905],ltlarr:[10614],ltquest:[10875],ltrPar:[10646],ltri:[9667],ltrie:[8884],ltrif:[9666],lurdshar:[10570],luruhar:[10598],lvertneqq:[8808,65024],lvnE:[8808,65024],mDDot:[8762],macr:[175],male:[9794],malt:[10016],maltese:[10016],map:[8614],mapsto:[8614],mapstodown:[8615],mapstoleft:[8612],mapstoup:[8613],marker:[9646],mcomma:[10793],mcy:[1084],mdash:[8212],measuredangle:[8737],mfr:[120106],mho:[8487],micro:[181],mid:[8739],midast:[42],midcir:[10992],middot:[183],minus:[8722],minusb:[8863],minusd:[8760],minusdu:[10794],mlcp:[10971],mldr:[8230],mnplus:[8723],models:[8871],mopf:[120158],mp:[8723],mscr:[120002],mstpos:[8766],mu:[956],multimap:[8888],mumap:[8888],nGg:[8921,824],nGt:[8811,8402],nGtv:[8811,824],nLeftarrow:[8653],nLeftrightarrow:[8654],nLl:[8920,824],nLt:[8810,8402],nLtv:[8810,824],nRightarrow:[8655],nVDash:[8879],nVdash:[8878],nabla:[8711],nacute:[324],nang:[8736,8402],nap:[8777],napE:[10864,824],napid:[8779,824],napos:[329],napprox:[8777],natur:[9838],natural:[9838],naturals:[8469],nbsp:[160],nbump:[8782,824],nbumpe:[8783,824],ncap:[10819],ncaron:[328],ncedil:[326],ncong:[8775],ncongdot:[10861,824],ncup:[10818],ncy:[1085],ndash:[8211],ne:[8800],neArr:[8663],nearhk:[10532],nearr:[8599],nearrow:[8599],nedot:[8784,824],nequiv:[8802],nesear:[10536],nesim:[8770,824],nexist:[8708],nexists:[8708],nfr:[120107],ngE:[8807,824],nge:[8817],ngeq:[8817],ngeqq:[8807,824],ngeqslant:[10878,824],nges:[10878,824],ngsim:[8821],ngt:[8815],ngtr:[8815],nhArr:[8654],nharr:[8622],nhpar:[10994],ni:[8715],nis:[8956],nisd:[8954],niv:[8715],njcy:[1114],nlArr:[8653],nlE:[8806,824],nlarr:[8602],nldr:[8229],nle:[8816],nleftarrow:[8602],nleftrightarrow:[8622],nleq:[8816],nleqq:[8806,824],nleqslant:[10877,824],nles:[10877,824],nless:[8814],nlsim:[8820],nlt:[8814],nltri:[8938],nltrie:[8940],nmid:[8740],nopf:[120159],not:[172],notin:[8713],notinE:[8953,824],notindot:[8949,824],notinva:[8713],notinvb:[8951],notinvc:[8950],notni:[8716],notniva:[8716],notnivb:[8958],notnivc:[8957],npar:[8742],nparallel:[8742],nparsl:[11005,8421],npart:[8706,824],npolint:[10772],npr:[8832],nprcue:[8928],npre:[10927,824],nprec:[8832],npreceq:[10927,824],nrArr:[8655],nrarr:[8603],nrarrc:[10547,824],nrarrw:[8605,824],nrightarrow:[8603],nrtri:[8939],nrtrie:[8941],nsc:[8833],nsccue:[8929],nsce:[10928,824],nscr:[120003],nshortmid:[8740],nshortparallel:[8742],nsim:[8769],nsime:[8772],nsimeq:[8772],nsmid:[8740],nspar:[8742],nsqsube:[8930],nsqsupe:[8931],nsub:[8836],nsubE:[10949,824],nsube:[8840],nsubset:[8834,8402],nsubseteq:[8840],nsubseteqq:[10949,824],nsucc:[8833],nsucceq:[10928,824],nsup:[8837],nsupE:[10950,824],nsupe:[8841],nsupset:[8835,8402],nsupseteq:[8841],nsupseteqq:[10950,824],ntgl:[8825],ntilde:[241],ntlg:[8824],ntriangleleft:[8938],ntrianglelefteq:[8940],ntriangleright:[8939],ntrianglerighteq:[8941],nu:[957],num:[35],numero:[8470],numsp:[8199],nvDash:[8877],nvHarr:[10500],nvap:[8781,8402],nvdash:[8876],nvge:[8805,8402],nvgt:[62,8402],nvinfin:[10718],nvlArr:[10498],nvle:[8804,8402],nvlt:[60,8402],nvltrie:[8884,8402],nvrArr:[10499],nvrtrie:[8885,8402],nvsim:[8764,8402],nwArr:[8662],nwarhk:[10531],nwarr:[8598],nwarrow:[8598],nwnear:[10535],oS:[9416],oacute:[243],oast:[8859],ocir:[8858],ocirc:[244],ocy:[1086],odash:[8861],odblac:[337],odiv:[10808],odot:[8857],odsold:[10684],oelig:[339],ofcir:[10687],ofr:[120108],ogon:[731],ograve:[242],ogt:[10689],ohbar:[10677],ohm:[937],oint:[8750],olarr:[8634],olcir:[10686],olcross:[10683],oline:[8254],olt:[10688],omacr:[333],omega:[969],omicron:[959],omid:[10678],ominus:[8854],oopf:[120160],opar:[10679],operp:[10681],oplus:[8853],or:[8744],orarr:[8635],ord:[10845],order:[8500],orderof:[8500],ordf:[170],ordm:[186],origof:[8886],oror:[10838],orslope:[10839],orv:[10843],oscr:[8500],oslash:[248],osol:[8856],otilde:[245],otimes:[8855],otimesas:[10806],ouml:[246],ovbar:[9021],par:[8741],para:[182],parallel:[8741],parsim:[10995],parsl:[11005],part:[8706],pcy:[1087],percnt:[37],period:[46],permil:[8240],perp:[8869],pertenk:[8241],pfr:[120109],phi:[966],phiv:[981],phmmat:[8499],phone:[9742],pi:[960],pitchfork:[8916],piv:[982],planck:[8463],planckh:[8462],plankv:[8463],plus:[43],plusacir:[10787],plusb:[8862],pluscir:[10786],plusdo:[8724],plusdu:[10789],pluse:[10866],plusmn:[177],plussim:[10790],plustwo:[10791],pm:[177],pointint:[10773],popf:[120161],pound:[163],pr:[8826],prE:[10931],prap:[10935],prcue:[8828],pre:[10927],prec:[8826],precapprox:[10935],preccurlyeq:[8828],preceq:[10927],precnapprox:[10937],precneqq:[10933],precnsim:[8936],precsim:[8830],prime:[8242],primes:[8473],prnE:[10933],prnap:[10937],prnsim:[8936],prod:[8719],profalar:[9006],profline:[8978],profsurf:[8979],prop:[8733],propto:[8733],prsim:[8830],prurel:[8880],pscr:[120005],psi:[968],puncsp:[8200],qfr:[120110],qint:[10764],qopf:[120162],qprime:[8279],qscr:[120006],quaternions:[8461],quatint:[10774],quest:[63],questeq:[8799],quot:[34],rAarr:[8667],rArr:[8658],rAtail:[10524],rBarr:[10511],rHar:[10596],race:[8765,817],racute:[341],radic:[8730],raemptyv:[10675],rang:[10217],rangd:[10642],range:[10661],rangle:[10217],raquo:[187],rarr:[8594],rarrap:[10613],rarrb:[8677],rarrbfs:[10528],rarrc:[10547],rarrfs:[10526],rarrhk:[8618],rarrlp:[8620],rarrpl:[10565],rarrsim:[10612],rarrtl:[8611],rarrw:[8605],ratail:[10522],ratio:[8758],rationals:[8474],rbarr:[10509],rbbrk:[10099],rbrace:[125],rbrack:[93],rbrke:[10636],rbrksld:[10638],rbrkslu:[10640],rcaron:[345],rcedil:[343],rceil:[8969],rcub:[125],rcy:[1088],rdca:[10551],rdldhar:[10601],rdquo:[8221],rdquor:[8221],rdsh:[8627],real:[8476],realine:[8475],realpart:[8476],reals:[8477],rect:[9645],reg:[174],rfisht:[10621],rfloor:[8971],rfr:[120111],rhard:[8641],rharu:[8640],rharul:[10604],rho:[961],rhov:[1009],rightarrow:[8594],rightarrowtail:[8611],rightharpoondown:[8641],rightharpoonup:[8640],rightleftarrows:[8644],rightleftharpoons:[8652],rightrightarrows:[8649],rightsquigarrow:[8605],rightthreetimes:[8908],ring:[730],risingdotseq:[8787],rlarr:[8644],rlhar:[8652],rlm:[8207],rmoust:[9137],rmoustache:[9137],rnmid:[10990],roang:[10221],roarr:[8702],robrk:[10215],ropar:[10630],ropf:[120163],roplus:[10798],rotimes:[10805],rpar:[41],rpargt:[10644],rppolint:[10770],rrarr:[8649],rsaquo:[8250],rscr:[120007],rsh:[8625],rsqb:[93],rsquo:[8217],rsquor:[8217],rthree:[8908],rtimes:[8906],rtri:[9657],rtrie:[8885],rtrif:[9656],rtriltri:[10702],ruluhar:[10600],rx:[8478],sacute:[347],sbquo:[8218],sc:[8827],scE:[10932],scap:[10936],scaron:[353],sccue:[8829],sce:[10928],scedil:[351],scirc:[349],scnE:[10934],scnap:[10938],scnsim:[8937],scpolint:[10771],scsim:[8831],scy:[1089],sdot:[8901],sdotb:[8865],sdote:[10854],seArr:[8664],searhk:[10533],searr:[8600],searrow:[8600],sect:[167],semi:[59],seswar:[10537],setminus:[8726],setmn:[8726],sext:[10038],sfr:[120112],sfrown:[8994],sharp:[9839],shchcy:[1097],shcy:[1096],shortmid:[8739],shortparallel:[8741],shy:[173],sigma:[963],sigmaf:[962],sigmav:[962],sim:[8764],simdot:[10858],sime:[8771],simeq:[8771],simg:[10910],simgE:[10912],siml:[10909],simlE:[10911],simne:[8774],simplus:[10788],simrarr:[10610],slarr:[8592],smallsetminus:[8726],smashp:[10803],smeparsl:[10724],smid:[8739],smile:[8995],smt:[10922],smte:[10924],smtes:[10924,65024],softcy:[1100],sol:[47],solb:[10692],solbar:[9023],sopf:[120164],spades:[9824],spadesuit:[9824],spar:[8741],sqcap:[8851],sqcaps:[8851,65024],sqcup:[8852],sqcups:[8852,65024],sqsub:[8847],sqsube:[8849],sqsubset:[8847],sqsubseteq:[8849],sqsup:[8848],sqsupe:[8850],sqsupset:[8848],sqsupseteq:[8850],squ:[9633],square:[9633],squarf:[9642],squf:[9642],srarr:[8594],sscr:[120008],ssetmn:[8726],ssmile:[8995],sstarf:[8902],star:[9734],starf:[9733],straightepsilon:[1013],straightphi:[981],strns:[175],sub:[8834],subE:[10949],subdot:[10941],sube:[8838],subedot:[10947],submult:[10945],subnE:[10955],subne:[8842],subplus:[10943],subrarr:[10617],subset:[8834],subseteq:[8838],subseteqq:[10949],subsetneq:[8842],subsetneqq:[10955],subsim:[10951],subsub:[10965],subsup:[10963],succ:[8827],succapprox:[10936],succcurlyeq:[8829],succeq:[10928],succnapprox:[10938],succneqq:[10934],succnsim:[8937],succsim:[8831],sum:[8721],sung:[9834],sup:[8835],sup1:[185],sup2:[178],sup3:[179],supE:[10950],supdot:[10942],supdsub:[10968],supe:[8839],supedot:[10948],suphsol:[10185],suphsub:[10967],suplarr:[10619],supmult:[10946],supnE:[10956],supne:[8843],supplus:[10944],supset:[8835],supseteq:[8839],supseteqq:[10950],supsetneq:[8843],supsetneqq:[10956],supsim:[10952],supsub:[10964],supsup:[10966],swArr:[8665],swarhk:[10534],swarr:[8601],swarrow:[8601],swnwar:[10538],szlig:[223],target:[8982],tau:[964],tbrk:[9140],tcaron:[357],tcedil:[355],tcy:[1090],tdot:[8411],telrec:[8981],tfr:[120113],there4:[8756],therefore:[8756],theta:[952],thetasym:[977],thetav:[977],thickapprox:[8776],thicksim:[8764],thinsp:[8201],thkap:[8776],thksim:[8764],thorn:[254],tilde:[732],times:[215],timesb:[8864],timesbar:[10801],timesd:[10800],tint:[8749],toea:[10536],top:[8868],topbot:[9014],topcir:[10993],topf:[120165],topfork:[10970],tosa:[10537],tprime:[8244],trade:[8482],triangle:[9653],triangledown:[9663],triangleleft:[9667],trianglelefteq:[8884],triangleq:[8796],triangleright:[9657],trianglerighteq:[8885],tridot:[9708],trie:[8796],triminus:[10810],triplus:[10809],trisb:[10701],tritime:[10811],trpezium:[9186],tscr:[120009],tscy:[1094],tshcy:[1115],tstrok:[359],twixt:[8812],twoheadleftarrow:[8606],twoheadrightarrow:[8608],uArr:[8657],uHar:[10595],uacute:[250],uarr:[8593],ubrcy:[1118],ubreve:[365],ucirc:[251],ucy:[1091],udarr:[8645],udblac:[369],udhar:[10606],ufisht:[10622],ufr:[120114],ugrave:[249],uharl:[8639],uharr:[8638],uhblk:[9600],ulcorn:[8988],ulcorner:[8988],ulcrop:[8975],ultri:[9720],umacr:[363],uml:[168],uogon:[371],uopf:[120166],uparrow:[8593],updownarrow:[8597],upharpoonleft:[8639],upharpoonright:[8638],uplus:[8846],upsi:[965],upsih:[978],upsilon:[965],upuparrows:[8648],urcorn:[8989],urcorner:[8989],urcrop:[8974],uring:[367],urtri:[9721],uscr:[120010],utdot:[8944],utilde:[361],utri:[9653],utrif:[9652],uuarr:[8648],uuml:[252],uwangle:[10663],vArr:[8661],vBar:[10984],vBarv:[10985],vDash:[8872],vangrt:[10652],varepsilon:[1013],varkappa:[1008],varnothing:[8709],varphi:[981],varpi:[982],varpropto:[8733],varr:[8597],varrho:[1009],varsigma:[962],varsubsetneq:[8842,65024],varsubsetneqq:[10955,65024],varsupsetneq:[8843,65024],varsupsetneqq:[10956,65024],vartheta:[977],vartriangleleft:[8882],vartriangleright:[8883],vcy:[1074],vdash:[8866],vee:[8744],veebar:[8891],veeeq:[8794],vellip:[8942],verbar:[124],vert:[124],vfr:[120115],vltri:[8882],vnsub:[8834,8402],vnsup:[8835,8402],vopf:[120167],vprop:[8733],vrtri:[8883],vscr:[120011],vsubnE:[10955,65024],vsubne:[8842,65024],vsupnE:[10956,65024],vsupne:[8843,65024],vzigzag:[10650],wcirc:[373],wedbar:[10847],wedge:[8743],wedgeq:[8793],weierp:[8472],wfr:[120116],wopf:[120168],wp:[8472],wr:[8768],wreath:[8768],wscr:[120012],xcap:[8898],xcirc:[9711],xcup:[8899],xdtri:[9661],xfr:[120117],xhArr:[10234],xharr:[10231],xi:[958],xlArr:[10232],xlarr:[10229],xmap:[10236],xnis:[8955],xodot:[10752],xopf:[120169],xoplus:[10753],xotime:[10754],xrArr:[10233],xrarr:[10230],xscr:[120013],xsqcup:[10758],xuplus:[10756],xutri:[9651],xvee:[8897],xwedge:[8896],yacute:[253],yacy:[1103],ycirc:[375],ycy:[1099],yen:[165],yfr:[120118],yicy:[1111],yopf:[120170],yscr:[120014],yucy:[1102],yuml:[255],zacute:[378],zcaron:[382],zcy:[1079],zdot:[380],zeetrf:[8488],zeta:[950],zfr:[120119],zhcy:[1078],zigrarr:[8669],zopf:[120171],zscr:[120015],zwj:[8205],zwnj:[8204]} +}),t("simple-html-tokenizer/char-refs/min",["exports"],function(t){"use strict";t["default"]={quot:[34],amp:[38],apos:[39],lt:[60],gt:[62]}}),t("simple-html-tokenizer/entity-parser",["exports"],function(t){"use strict";function e(t){this.namedCodepoints=t}e.prototype.parse=function(t){var e=t.input.slice(t["char"]),r=e.match(/^#(?:x|X)([0-9A-Fa-f]+);/);if(r)return t["char"]+=r[0].length,String.fromCharCode(parseInt(r[1],16));if(r=e.match(/^#([0-9]+);/))return t["char"]+=r[0].length,String.fromCharCode(parseInt(r[1],10));if(r=e.match(/^([A-Za-z]+);/)){var n=this.namedCodepoints[r[1]];if(n){t["char"]+=r[0].length;for(var i=0,s="";i"'`]/,r=/[&<>"'`]/g,n={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"};return function(n){return e.test(n)?n.replace(r,t):n}}();e.prototype={generate:function(t){for(var e,r="",n=0;n"},Chars:function(t){return this.escape(t.chars)},Comment:function(t){return""},Attributes:function(t){for(var e,r=[],n=0,i=t.length;i>n;n++)e=t[n],r.push(this.Attribute(e[0],e[1]));return r.join(" ")},Attribute:function(t,e){var r=t;return e&&(e=this.escape(e),r+='="'+e+'"'),r}},t["default"]=e}),t("simple-html-tokenizer/tokenize",["./tokenizer","./entity-parser","./char-refs/full","exports"],function(t,e,r,n){"use strict";var i=t["default"],s=e["default"],o=r["default"];n["default"]=function(t){var e=new i(t,new s(o));return e.tokenize()}}),t("simple-html-tokenizer/tokenizer",["./utils","./tokens","exports"],function(t,e,r){"use strict";function n(t,e){this.input=i(t),this.entityParser=e,this["char"]=0,this.line=1,this.column=0,this.state="data",this.token=null}var i=t.preprocessInput,s=t.isAlpha,o=t.isSpace,a=e.StartTag,l=e.EndTag,c=e.Chars,u=e.Comment;n.prototype={tokenize:function(){for(var t,e=[];;){if(t=this.lex(),"EOF"===t)break;t&&e.push(t)}return this.token&&e.push(this.token),e},tokenizePart:function(t){this.input+=i(t);for(var e,r=[];this["char"]"===t)return this.emitToken();this.addToComment(t),this.state="comment"}},commentStartDash:function(t){if("-"===t)this.state="commentEnd";else{if(">"===t)return this.emitToken();this.addToComment("-"),this.state="comment"}},comment:function(t){"-"===t?this.state="commentEndDash":this.addToComment(t)},commentEndDash:function(t){"-"===t?this.state="commentEnd":(this.addToComment("-"+t),this.state="comment")},commentEnd:function(t){return">"===t?this.emitToken():(this.addToComment("--"+t),void(this.state="comment"))},tagName:function(t){if(o(t))this.state="beforeAttributeName";else if("/"===t)this.state="selfClosingStartTag";else{if(">"===t)return this.emitToken();this.addToTagName(t)}},beforeAttributeName:function(t){if(!o(t))if("/"===t)this.state="selfClosingStartTag";else{if(">"===t)return this.emitToken();this.createAttribute(t)}},attributeName:function(t){if(o(t))this.state="afterAttributeName";else if("/"===t)this.state="selfClosingStartTag";else if("="===t)this.state="beforeAttributeValue";else{if(">"===t)return this.emitToken();this.addToAttributeName(t)}},afterAttributeName:function(t){if(!o(t))if("/"===t)this.state="selfClosingStartTag";else if("="===t)this.state="beforeAttributeValue";else{if(">"===t)return this.emitToken();this.finalizeAttributeValue(),this.createAttribute(t)}},beforeAttributeValue:function(t){if(!o(t))if('"'===t)this.state="attributeValueDoubleQuoted",this.markAttributeQuoted(!0);else if("'"===t)this.state="attributeValueSingleQuoted",this.markAttributeQuoted(!0);else{if(">"===t)return this.emitToken();this.state="attributeValueUnquoted",this.markAttributeQuoted(!1),this.addToAttributeValue(t)}},attributeValueDoubleQuoted:function(t){'"'===t?(this.finalizeAttributeValue(),this.state="afterAttributeValueQuoted"):this.addToAttributeValue("&"===t?this.consumeCharRef('"')||"&":t)},attributeValueSingleQuoted:function(t){"'"===t?(this.finalizeAttributeValue(),this.state="afterAttributeValueQuoted"):this.addToAttributeValue("&"===t?this.consumeCharRef("'")||"&":t)},attributeValueUnquoted:function(t){if(o(t))this.finalizeAttributeValue(),this.state="beforeAttributeName";else if("&"===t)this.addToAttributeValue(this.consumeCharRef(">")||"&");else{if(">"===t)return this.emitToken();this.addToAttributeValue(t)}},afterAttributeValueQuoted:function(t){if(o(t))this.state="beforeAttributeName";else if("/"===t)this.state="selfClosingStartTag";else{if(">"===t)return this.emitToken();this["char"]--,this.state="beforeAttributeName"}},selfClosingStartTag:function(t){return">"===t?(this.selfClosing(),this.emitToken()):(this["char"]--,void(this.state="beforeAttributeName"))},endTagOpen:function(t){s(t)&&this.createTag(l,t.toLowerCase())}}},r["default"]=n}),t("simple-html-tokenizer/tokens",["exports"],function(t){"use strict";function e(t,e,r){this.type="StartTag",this.tagName=t||"",this.attributes=e||[],this.selfClosing=r===!0}function r(t){this.type="EndTag",this.tagName=t||""}function n(t){this.type="Chars",this.chars=t||""}function i(t){this.type="Comment",this.chars=t||""}t.StartTag=e,t.EndTag=r,t.Chars=n,t.Comment=i}),t("simple-html-tokenizer/utils",["exports"],function(t){"use strict";function e(t){return/[\t\n\f ]/.test(t)}function r(t){return/[A-Za-z]/.test(t)}function n(t){return t.replace(/\r\n?/g,"\n")}t.isSpace=e,t.isAlpha=r,t.preprocessInput=n}),e("ember-template-compiler")}(),"object"==typeof exports&&(module.exports=Ember.__loader.require("ember-template-compiler")); diff --git a/website/source/assets/stylesheets/_demo.scss b/website/source/assets/stylesheets/_demo.scss new file mode 100644 index 0000000000..845ceb2588 --- /dev/null +++ b/website/source/assets/stylesheets/_demo.scss @@ -0,0 +1,38 @@ +.demo-overlay { + z-index: 100; + bottom: 0; + left: 0; + width: 100%; + height: 80%; + max-height: 80%; + position: fixed; + background-color: black; + color: #DDDDDD; + overflow: scroll; + font-size: 18px; + font-family: 'Ubuntu Mono', 'Monaco', monospace; +} + +.terminal { + padding: 0px 25px; + padding-bottom: 50px; + + .welcome { + padding-top: 20px; + } + + .log { + white-space: pre; + } + + input.shell { + padding: 0; + margin: 0; + display: inline-block; + bottom: 0; + width: 90%; + background-color: black; + border: 0; + outline: 0; + } +} diff --git a/website/source/assets/stylesheets/application.scss b/website/source/assets/stylesheets/application.scss index 71a894ae68..cf76cd36a0 100755 --- a/website/source/assets/stylesheets/application.scss +++ b/website/source/assets/stylesheets/application.scss @@ -1,7 +1,7 @@ @import 'bootstrap-sprockets'; @import 'bootstrap'; -@import url("//fonts.googleapis.com/css?family=Lato:300,400,700|Open+Sans:300,600,400"); +@import url("//fonts.googleapis.com/css?family=Lato:300,400,700|Open+Sans:300,600,400|Ubuntu+Mono"); // Core variables and mixins @import '_variables'; @@ -28,3 +28,7 @@ @import '_community'; @import '_docs'; @import '_downloads'; + +// Demo +@import '_demo'; + diff --git a/website/source/index.html.erb b/website/source/index.html.erb index f4aab139b5..fb0979dd41 100644 --- a/website/source/index.html.erb +++ b/website/source/index.html.erb @@ -16,6 +16,8 @@
+
+
diff --git a/website/source/layouts/layout.erb b/website/source/layouts/layout.erb index 665a0a1289..252f3fa5ec 100644 --- a/website/source/layouts/layout.erb +++ b/website/source/layouts/layout.erb @@ -1,4 +1,8 @@ <%= partial "layouts/meta" %> <%= partial "layouts/header" %> + <%= yield %> + +<%= partial "ember_templates" %> <%= partial "layouts/footer" %> + diff --git a/website/source/package.json b/website/source/package.json deleted file mode 100644 index e4bf7579cb..0000000000 --- a/website/source/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "name": "bootstrap", - "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", - "version": "3.3.2", - "keywords": [ - "css", - "less", - "mobile-first", - "responsive", - "front-end", - "framework", - "web" - ], - "homepage": "http://getbootstrap.com", - "author": "Twitter, Inc.", - "scripts": { - "test": "grunt test" - }, - "style": "dist/css/bootstrap.css", - "less": "less/bootstrap.less", - "main": "./dist/js/npm", - "repository": { - "type": "git", - "url": "https://github.com/twbs/bootstrap.git" - }, - "bugs": { - "url": "https://github.com/twbs/bootstrap/issues" - }, - "license": { - "type": "MIT", - "url": "https://github.com/twbs/bootstrap/blob/master/LICENSE" - }, - "devDependencies": { - "btoa": "~1.1.2", - "glob": "~4.4.0", - "grunt": "~0.4.5", - "grunt-autoprefixer": "~2.2.0", - "grunt-banner": "~0.3.1", - "grunt-contrib-clean": "~0.6.0", - "grunt-contrib-compress": "~0.13.0", - "grunt-contrib-concat": "~0.5.1", - "grunt-contrib-connect": "~0.9.0", - "grunt-contrib-copy": "~0.8.0", - "grunt-contrib-csslint": "~0.4.0", - "grunt-contrib-cssmin": "~0.12.2", - "grunt-contrib-jade": "~0.14.1", - "grunt-contrib-jshint": "~0.11.0", - "grunt-contrib-less": "~1.0.0", - "grunt-contrib-qunit": "~0.5.2", - "grunt-contrib-uglify": "~0.8.0", - "grunt-contrib-watch": "~0.6.1", - "grunt-csscomb": "~3.0.0", - "grunt-exec": "~0.4.6", - "grunt-html": "~3.0.0", - "grunt-jekyll": "~0.4.2", - "grunt-jscs": "~1.5.0", - "grunt-saucelabs": "~8.6.0", - "grunt-sed": "~0.1.1", - "load-grunt-tasks": "~3.1.0", - "markdown-it": "^3.0.7", - "npm-shrinkwrap": "^200.1.0", - "time-grunt": "^1.1.0" - }, - "engines": { - "node": ">=0.10.1" - }, - "files": [ - "dist", - "fonts", - "grunt/*.js", - "grunt/*.json", - "js/*.js", - "less/**/*.less", - "Gruntfile.js", - "LICENSE" - ], - "jspm": { - "main": "js/bootstrap", - "directories": { - "example": "examples", - "lib": "dist" - }, - "shim": { - "js/bootstrap": { - "imports": "jquery", - "exports": "$" - } - }, - "buildConfig": { - "uglify": true - } - } -} From 920938a862868b277968d79f461f4627bd0fcf2a Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Mon, 16 Mar 2015 10:36:29 -0700 Subject: [PATCH 23/26] http: /v1/sys/mount endpoint --- http/handler.go | 3 ++- http/http_test.go | 10 +++++++- http/sys_mount.go | 51 ++++++++++++++++++++++++++++++++++++++++- http/sys_mount_test.go | 38 ++++++++++++++++++++++++++++++ vault/logical_system.go | 2 +- 5 files changed, 100 insertions(+), 4 deletions(-) diff --git a/http/handler.go b/http/handler.go index fbcae36a06..2baf42a886 100644 --- a/http/handler.go +++ b/http/handler.go @@ -15,7 +15,8 @@ func Handler(core *vault.Core) http.Handler { mux.Handle("/v1/sys/seal-status", handleSysSealStatus(core)) mux.Handle("/v1/sys/seal", handleSysSeal(core)) mux.Handle("/v1/sys/unseal", handleSysUnseal(core)) - mux.Handle("/v1/sys/mounts", handleSysMounts(core)) + mux.Handle("/v1/sys/mounts", handleSysListMounts(core)) + mux.Handle("/v1/sys/mount/", handleSysMount(core)) mux.Handle("/v1/", handleLogical(core)) return mux } diff --git a/http/http_test.go b/http/http_test.go index bb5540d927..06a4dc37a3 100644 --- a/http/http_test.go +++ b/http/http_test.go @@ -8,7 +8,15 @@ import ( "testing" ) +func testHttpPost(t *testing.T, addr string, body interface{}) *http.Response { + return testHttpData(t, "POST", addr, body) +} + func testHttpPut(t *testing.T, addr string, body interface{}) *http.Response { + return testHttpData(t, "PUT", addr, body) +} + +func testHttpData(t *testing.T, method string, addr string, body interface{}) *http.Response { bodyReader := new(bytes.Buffer) if body != nil { enc := json.NewEncoder(bodyReader) @@ -17,7 +25,7 @@ func testHttpPut(t *testing.T, addr string, body interface{}) *http.Response { } } - req, err := http.NewRequest("PUT", addr, bodyReader) + req, err := http.NewRequest(method, addr, bodyReader) if err != nil { t.Fatalf("err: %s", err) } diff --git a/http/sys_mount.go b/http/sys_mount.go index 85b5cd99a0..ec4a2657ed 100644 --- a/http/sys_mount.go +++ b/http/sys_mount.go @@ -2,12 +2,13 @@ package http import ( "net/http" + "strings" "github.com/hashicorp/vault/logical" "github.com/hashicorp/vault/vault" ) -func handleSysMounts(core *vault.Core) http.Handler { +func handleSysListMounts(core *vault.Core) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Method != "GET" { respondError(w, http.StatusMethodNotAllowed, nil) @@ -26,3 +27,51 @@ func handleSysMounts(core *vault.Core) http.Handler { respondOk(w, resp.Data) }) } + +func handleSysMount(core *vault.Core) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + respondError(w, http.StatusMethodNotAllowed, nil) + return + } + + // Determine the path... + prefix := "/v1/sys/mount/" + if !strings.HasPrefix(r.URL.Path, prefix) { + respondError(w, http.StatusNotFound, nil) + return + } + path := r.URL.Path[len(prefix):] + if path == "" { + respondError(w, http.StatusNotFound, nil) + return + } + + // Parse the request if we can + var req MountRequest + if err := parseRequest(r, &req); err != nil { + respondError(w, http.StatusBadRequest, err) + return + } + + _, err := core.HandleRequest(&logical.Request{ + Operation: logical.WriteOperation, + Path: "sys/mount/" + path, + Data: map[string]interface{}{ + "type": req.Type, + "description": req.Description, + }, + }) + if err != nil { + respondError(w, http.StatusInternalServerError, err) + return + } + + respondOk(w, nil) + }) +} + +type MountRequest struct { + Type string `json:"type"` + Description string `json:"description"` +} diff --git a/http/sys_mount_test.go b/http/sys_mount_test.go index 04bda93955..bf03611d00 100644 --- a/http/sys_mount_test.go +++ b/http/sys_mount_test.go @@ -35,3 +35,41 @@ func TestSysMounts(t *testing.T) { t.Fatalf("bad: %#v", actual) } } + +func TestSysMount(t *testing.T) { + core, _ := vault.TestCoreUnsealed(t) + ln, addr := TestServer(t, core) + defer ln.Close() + + resp := testHttpPost(t, addr+"/v1/sys/mount/foo", map[string]interface{}{ + "type": "generic", + "description": "foo", + }) + testResponseStatus(t, resp, 204) + + resp, err := http.Get(addr + "/v1/sys/mounts") + if err != nil { + t.Fatalf("err: %s", err) + } + + var actual map[string]interface{} + expected := map[string]interface{}{ + "foo/": map[string]interface{}{ + "description": "foo", + "type": "generic", + }, + "secret/": map[string]interface{}{ + "description": "generic secret storage", + "type": "generic", + }, + "sys/": map[string]interface{}{ + "description": "system endpoints used for control, policy and debugging", + "type": "system", + }, + } + testResponseStatus(t, resp, 200) + testResponseBody(t, resp, &actual) + if !reflect.DeepEqual(actual, expected) { + t.Fatalf("bad: %#v", actual) + } +} diff --git a/vault/logical_system.go b/vault/logical_system.go index 60e3186edb..37b88a7f7b 100644 --- a/vault/logical_system.go +++ b/vault/logical_system.go @@ -29,7 +29,7 @@ func NewSystemBackend(core *Core) logical.Backend { }, &framework.Path{ - Pattern: "mount/(?P.+?)", + Pattern: "mount/(?P.+)", Fields: map[string]*framework.FieldSchema{ "path": &framework.FieldSchema{ From 3f85dcba10560d6fbbca35b2d17f47b0242d1aa3 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Mon, 16 Mar 2015 10:41:08 -0700 Subject: [PATCH 24/26] http: /v1/sys/mount DELETE --- http/handler.go | 2 +- http/http_test.go | 4 +++ http/sys_mount.go | 79 ++++++++++++++++++++++++++++++------------ http/sys_mount_test.go | 37 ++++++++++++++++++++ 4 files changed, 99 insertions(+), 23 deletions(-) diff --git a/http/handler.go b/http/handler.go index 2baf42a886..6eff998e38 100644 --- a/http/handler.go +++ b/http/handler.go @@ -16,7 +16,7 @@ func Handler(core *vault.Core) http.Handler { mux.Handle("/v1/sys/seal", handleSysSeal(core)) mux.Handle("/v1/sys/unseal", handleSysUnseal(core)) mux.Handle("/v1/sys/mounts", handleSysListMounts(core)) - mux.Handle("/v1/sys/mount/", handleSysMount(core)) + mux.Handle("/v1/sys/mount/", handleSysMountUnmount(core)) mux.Handle("/v1/", handleLogical(core)) return mux } diff --git a/http/http_test.go b/http/http_test.go index 06a4dc37a3..c5cbd30e6d 100644 --- a/http/http_test.go +++ b/http/http_test.go @@ -8,6 +8,10 @@ import ( "testing" ) +func testHttpDelete(t *testing.T, addr string) *http.Response { + return testHttpData(t, "DELETE", addr, nil) +} + func testHttpPost(t *testing.T, addr string, body interface{}) *http.Response { return testHttpData(t, "POST", addr, body) } diff --git a/http/sys_mount.go b/http/sys_mount.go index ec4a2657ed..c4b779cdc8 100644 --- a/http/sys_mount.go +++ b/http/sys_mount.go @@ -28,9 +28,12 @@ func handleSysListMounts(core *vault.Core) http.Handler { }) } -func handleSysMount(core *vault.Core) http.Handler { +func handleSysMountUnmount(core *vault.Core) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.Method != "POST" { + switch r.Method { + case "POST": + case "DELETE": + default: respondError(w, http.StatusMethodNotAllowed, nil) return } @@ -47,30 +50,62 @@ func handleSysMount(core *vault.Core) http.Handler { return } - // Parse the request if we can - var req MountRequest - if err := parseRequest(r, &req); err != nil { - respondError(w, http.StatusBadRequest, err) - return + switch r.Method { + case "POST": + handleSysMount(core, w, r, path) + case "DELETE": + handleSysUnmount(core, w, r, path) + default: + panic("should never happen") } - - _, err := core.HandleRequest(&logical.Request{ - Operation: logical.WriteOperation, - Path: "sys/mount/" + path, - Data: map[string]interface{}{ - "type": req.Type, - "description": req.Description, - }, - }) - if err != nil { - respondError(w, http.StatusInternalServerError, err) - return - } - - respondOk(w, nil) }) } +func handleSysMount( + core *vault.Core, + w http.ResponseWriter, + r *http.Request, + path string) { + // Parse the request if we can + var req MountRequest + if err := parseRequest(r, &req); err != nil { + respondError(w, http.StatusBadRequest, err) + return + } + + _, err := core.HandleRequest(&logical.Request{ + Operation: logical.WriteOperation, + Path: "sys/mount/" + path, + Data: map[string]interface{}{ + "type": req.Type, + "description": req.Description, + }, + }) + if err != nil { + respondError(w, http.StatusInternalServerError, err) + return + } + + respondOk(w, nil) +} + +func handleSysUnmount( + core *vault.Core, + w http.ResponseWriter, + r *http.Request, + path string) { + _, err := core.HandleRequest(&logical.Request{ + Operation: logical.DeleteOperation, + Path: "sys/mount/" + path, + }) + if err != nil { + respondError(w, http.StatusInternalServerError, err) + return + } + + respondOk(w, nil) +} + type MountRequest struct { Type string `json:"type"` Description string `json:"description"` diff --git a/http/sys_mount_test.go b/http/sys_mount_test.go index bf03611d00..d2d68d54db 100644 --- a/http/sys_mount_test.go +++ b/http/sys_mount_test.go @@ -73,3 +73,40 @@ func TestSysMount(t *testing.T) { t.Fatalf("bad: %#v", actual) } } + +func TestSysUnmount(t *testing.T) { + core, _ := vault.TestCoreUnsealed(t) + ln, addr := TestServer(t, core) + defer ln.Close() + + resp := testHttpPost(t, addr+"/v1/sys/mount/foo", map[string]interface{}{ + "type": "generic", + "description": "foo", + }) + testResponseStatus(t, resp, 204) + + resp = testHttpDelete(t, addr+"/v1/sys/mount/foo") + testResponseStatus(t, resp, 204) + + resp, err := http.Get(addr + "/v1/sys/mounts") + if err != nil { + t.Fatalf("err: %s", err) + } + + var actual map[string]interface{} + expected := map[string]interface{}{ + "secret/": map[string]interface{}{ + "description": "generic secret storage", + "type": "generic", + }, + "sys/": map[string]interface{}{ + "description": "system endpoints used for control, policy and debugging", + "type": "system", + }, + } + testResponseStatus(t, resp, 200) + testResponseBody(t, resp, &actual) + if !reflect.DeepEqual(actual, expected) { + t.Fatalf("bad: %#v", actual) + } +} From fe4fe231f8c999a1436b1655796018ef4b3eb049 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Mon, 16 Mar 2015 10:51:13 -0700 Subject: [PATCH 25/26] http: fix mount endpoints --- api/response.go | 11 ++++- http/handler.go | 3 +- http/sys_mount.go | 96 ++++++++++++++++++++++++------------------ http/sys_mount_test.go | 6 +-- 4 files changed, 67 insertions(+), 49 deletions(-) diff --git a/api/response.go b/api/response.go index 473269ba1d..ba43754f9a 100644 --- a/api/response.go +++ b/api/response.go @@ -45,13 +45,20 @@ func (r *Response) Error() error { if err := dec.Decode(&resp); err != nil { // Ignore the decoding error and just drop the raw response return fmt.Errorf( - "Error making API request. Code: %d. Raw Message:\n\n%s", + "Error making API request.\n\n"+ + "URL: %s %s\n"+ + "Code: %d. Raw Message:\n\n%s", + r.Request.Method, r.Request.URL.String(), r.StatusCode, bodyBuf.String()) } var errBody bytes.Buffer errBody.WriteString(fmt.Sprintf( - "Error making API request. Code: %d. Errors:\n\n", r.StatusCode)) + "Error making API request.\n\n"+ + "URL: %s %s\n"+ + "Code: %d. Errors:\n\n", + r.Request.Method, r.Request.URL.String(), + r.StatusCode)) for _, err := range resp.Errors { errBody.WriteString(fmt.Sprintf("* %s", err)) } diff --git a/http/handler.go b/http/handler.go index 6eff998e38..0e9b3edf29 100644 --- a/http/handler.go +++ b/http/handler.go @@ -15,8 +15,7 @@ func Handler(core *vault.Core) http.Handler { mux.Handle("/v1/sys/seal-status", handleSysSealStatus(core)) mux.Handle("/v1/sys/seal", handleSysSeal(core)) mux.Handle("/v1/sys/unseal", handleSysUnseal(core)) - mux.Handle("/v1/sys/mounts", handleSysListMounts(core)) - mux.Handle("/v1/sys/mount/", handleSysMountUnmount(core)) + mux.Handle("/v1/sys/mounts/", handleSysMounts(core)) mux.Handle("/v1/", handleLogical(core)) return mux } diff --git a/http/sys_mount.go b/http/sys_mount.go index c4b779cdc8..c155b62788 100644 --- a/http/sys_mount.go +++ b/http/sys_mount.go @@ -8,57 +8,69 @@ import ( "github.com/hashicorp/vault/vault" ) -func handleSysListMounts(core *vault.Core) http.Handler { +func handleSysMounts(core *vault.Core) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.Method != "GET" { + switch r.Method { + case "GET": + handleSysListMounts(core, w, r) + case "POST": + fallthrough + case "DELETE": + handleSysMountUnmount(core, w, r) + default: respondError(w, http.StatusMethodNotAllowed, nil) return } - - resp, err := core.HandleRequest(&logical.Request{ - Operation: logical.ReadOperation, - Path: "sys/mounts", - }) - if err != nil { - respondError(w, http.StatusInternalServerError, err) - return - } - - respondOk(w, resp.Data) }) } -func handleSysMountUnmount(core *vault.Core) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - switch r.Method { - case "POST": - case "DELETE": - default: - respondError(w, http.StatusMethodNotAllowed, nil) - return - } +func handleSysListMounts(core *vault.Core, w http.ResponseWriter, r *http.Request) { + if r.Method != "GET" { + respondError(w, http.StatusMethodNotAllowed, nil) + return + } - // Determine the path... - prefix := "/v1/sys/mount/" - if !strings.HasPrefix(r.URL.Path, prefix) { - respondError(w, http.StatusNotFound, nil) - return - } - path := r.URL.Path[len(prefix):] - if path == "" { - respondError(w, http.StatusNotFound, nil) - return - } - - switch r.Method { - case "POST": - handleSysMount(core, w, r, path) - case "DELETE": - handleSysUnmount(core, w, r, path) - default: - panic("should never happen") - } + resp, err := core.HandleRequest(&logical.Request{ + Operation: logical.ReadOperation, + Path: "sys/mounts", }) + if err != nil { + respondError(w, http.StatusInternalServerError, err) + return + } + + respondOk(w, resp.Data) +} + +func handleSysMountUnmount(core *vault.Core, w http.ResponseWriter, r *http.Request) { + switch r.Method { + case "POST": + case "DELETE": + default: + respondError(w, http.StatusMethodNotAllowed, nil) + return + } + + // Determine the path... + prefix := "/v1/sys/mounts/" + if !strings.HasPrefix(r.URL.Path, prefix) { + respondError(w, http.StatusNotFound, nil) + return + } + path := r.URL.Path[len(prefix):] + if path == "" { + respondError(w, http.StatusNotFound, nil) + return + } + + switch r.Method { + case "POST": + handleSysMount(core, w, r, path) + case "DELETE": + handleSysUnmount(core, w, r, path) + default: + panic("should never happen") + } } func handleSysMount( diff --git a/http/sys_mount_test.go b/http/sys_mount_test.go index d2d68d54db..f9e5670075 100644 --- a/http/sys_mount_test.go +++ b/http/sys_mount_test.go @@ -41,7 +41,7 @@ func TestSysMount(t *testing.T) { ln, addr := TestServer(t, core) defer ln.Close() - resp := testHttpPost(t, addr+"/v1/sys/mount/foo", map[string]interface{}{ + resp := testHttpPost(t, addr+"/v1/sys/mounts/foo", map[string]interface{}{ "type": "generic", "description": "foo", }) @@ -79,13 +79,13 @@ func TestSysUnmount(t *testing.T) { ln, addr := TestServer(t, core) defer ln.Close() - resp := testHttpPost(t, addr+"/v1/sys/mount/foo", map[string]interface{}{ + resp := testHttpPost(t, addr+"/v1/sys/mounts/foo", map[string]interface{}{ "type": "generic", "description": "foo", }) testResponseStatus(t, resp, 204) - resp = testHttpDelete(t, addr+"/v1/sys/mount/foo") + resp = testHttpDelete(t, addr+"/v1/sys/mounts/foo") testResponseStatus(t, resp, 204) resp, err := http.Get(addr + "/v1/sys/mounts") From 52a7c8bf11c143b6542a753c79542b8816d27147 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Mon, 16 Mar 2015 10:52:35 -0700 Subject: [PATCH 26/26] vault: change to /sys/mounts --- http/sys_mount.go | 4 ++-- vault/logical_system.go | 8 ++++---- vault/logical_system_test.go | 10 +++++----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/http/sys_mount.go b/http/sys_mount.go index c155b62788..3c5c37def2 100644 --- a/http/sys_mount.go +++ b/http/sys_mount.go @@ -87,7 +87,7 @@ func handleSysMount( _, err := core.HandleRequest(&logical.Request{ Operation: logical.WriteOperation, - Path: "sys/mount/" + path, + Path: "sys/mounts/" + path, Data: map[string]interface{}{ "type": req.Type, "description": req.Description, @@ -108,7 +108,7 @@ func handleSysUnmount( path string) { _, err := core.HandleRequest(&logical.Request{ Operation: logical.DeleteOperation, - Path: "sys/mount/" + path, + Path: "sys/mounts/" + path, }) if err != nil { respondError(w, http.StatusInternalServerError, err) diff --git a/vault/logical_system.go b/vault/logical_system.go index 37b88a7f7b..ec02ab6e18 100644 --- a/vault/logical_system.go +++ b/vault/logical_system.go @@ -12,13 +12,13 @@ func NewSystemBackend(core *Core) logical.Backend { return &framework.Backend{ PathsRoot: []string{ - "mount/*", + "mounts/*", "remount", }, Paths: []*framework.Path{ &framework.Path{ - Pattern: "mounts", + Pattern: "mounts$", Callbacks: map[logical.Operation]framework.OperationFunc{ logical.ReadOperation: b.handleMountTable, @@ -29,7 +29,7 @@ func NewSystemBackend(core *Core) logical.Backend { }, &framework.Path{ - Pattern: "mount/(?P.+)", + Pattern: "mounts/(?P.+)", Fields: map[string]*framework.FieldSchema{ "path": &framework.FieldSchema{ @@ -129,7 +129,7 @@ func (b *SystemBackend) handleMount( // handleUnmount is used to unmount a path func (b *SystemBackend) handleUnmount( req *logical.Request, data *framework.FieldData) (*logical.Response, error) { - suffix := strings.TrimPrefix(req.Path, "mount/") + suffix := strings.TrimPrefix(req.Path, "mounts/") if len(suffix) == 0 { return logical.ErrorResponse("path cannot be blank"), logical.ErrInvalidRequest } diff --git a/vault/logical_system_test.go b/vault/logical_system_test.go index a76b84c484..32fbbd0322 100644 --- a/vault/logical_system_test.go +++ b/vault/logical_system_test.go @@ -9,7 +9,7 @@ import ( func TestSystemBackend_RootPaths(t *testing.T) { expected := []string{ - "mount/*", + "mounts/*", "remount", } @@ -46,7 +46,7 @@ func TestSystemBackend_mounts(t *testing.T) { func TestSystemBackend_mount(t *testing.T) { b := testSystemBackend(t) - req := logical.TestRequest(t, logical.WriteOperation, "mount/prod/secret/") + req := logical.TestRequest(t, logical.WriteOperation, "mounts/prod/secret/") req.Data["type"] = "generic" resp, err := b.HandleRequest(req) @@ -61,7 +61,7 @@ func TestSystemBackend_mount(t *testing.T) { func TestSystemBackend_mount_invalid(t *testing.T) { b := testSystemBackend(t) - req := logical.TestRequest(t, logical.WriteOperation, "mount/prod/secret/") + req := logical.TestRequest(t, logical.WriteOperation, "mounts/prod/secret/") req.Data["type"] = "nope" resp, err := b.HandleRequest(req) if err != logical.ErrInvalidRequest { @@ -75,7 +75,7 @@ func TestSystemBackend_mount_invalid(t *testing.T) { func TestSystemBackend_unmount(t *testing.T) { b := testSystemBackend(t) - req := logical.TestRequest(t, logical.DeleteOperation, "mount/secret/") + req := logical.TestRequest(t, logical.DeleteOperation, "mounts/secret/") resp, err := b.HandleRequest(req) if err != nil { t.Fatalf("err: %v", err) @@ -88,7 +88,7 @@ func TestSystemBackend_unmount(t *testing.T) { func TestSystemBackend_unmount_invalid(t *testing.T) { b := testSystemBackend(t) - req := logical.TestRequest(t, logical.DeleteOperation, "mount/foo/") + req := logical.TestRequest(t, logical.DeleteOperation, "mounts/foo/") resp, err := b.HandleRequest(req) if err != logical.ErrInvalidRequest { t.Fatalf("err: %v", err)