{"version":3,"sources":["license.js","loader.js","@ember/application/tests/application_instance_test.js","@ember/application/tests/application_test.js","@ember/application/tests/bootstrap-test.js","@ember/application/tests/dependency_injection/custom_resolver_test.js","@ember/application/tests/dependency_injection/default_resolver_test.js","@ember/application/tests/dependency_injection/normalization_test.js","@ember/application/tests/dependency_injection/to_string_test.js","@ember/application/tests/dependency_injection_test.js","@ember/application/tests/initializers_test.js","@ember/application/tests/instance_initializers_test.js","@ember/application/tests/lazy_load_test.js","@ember/application/tests/logging_test.js","@ember/application/tests/readiness_test.js","@ember/application/tests/reset_test.js","@ember/application/tests/visit_test.js","@ember/controller/tests/controller_test.js","@ember/debug/tests/handlers-test.js","@ember/debug/tests/main_test.js","@ember/engine/tests/engine_initializers_test.js","@ember/engine/tests/engine_instance_initializers_test.js","@ember/engine/tests/engine_instance_test.js","@ember/engine/tests/engine_parent_test.js","@ember/engine/tests/engine_test.js","@ember/error/tests/index_test.js","@ember/instrumentation/tests/index-test.js","@ember/map/tests/map_test.js","@ember/object/tests/computed/computed_macros_test.js","@ember/object/tests/computed/reduce_computed_macros_test.js","@ember/polyfills/tests/assign_test.js","@ember/polyfills/tests/merge_test.js","@ember/runloop/tests/debounce_test.js","@ember/runloop/tests/later_test.js","@ember/runloop/tests/next_test.js","@ember/runloop/tests/once_test.js","@ember/runloop/tests/onerror_test.js","@ember/runloop/tests/run_bind_test.js","@ember/runloop/tests/run_test.js","@ember/runloop/tests/schedule_test.js","@ember/runloop/tests/sync_test.js","@ember/runloop/tests/unwind_test.js","@ember/string/tests/camelize_test.js","@ember/string/tests/capitalize_test.js","@ember/string/tests/classify_test.js","@ember/string/tests/dasherize_test.js","@ember/string/tests/decamelize_test.js","@ember/string/tests/loc_test.js","@ember/string/tests/underscore_test.js","@ember/string/tests/w_test.js","ember-template-compiler/tests/plugins/assert-if-helper-without-arguments-test.js","ember-template-compiler/tests/plugins/assert-input-helper-without-block-test.js","ember-template-compiler/tests/plugins/assert-local-variable-shadowing-helper-invocation-test.js","ember-template-compiler/tests/plugins/assert-reserved-named-arguments-test.js","ember-template-compiler/tests/plugins/assert-splattribute-expression-test.js","ember-template-compiler/tests/plugins/deprecate-send-action-test.js","ember-template-compiler/tests/plugins/transform-component-invocation-test.js","ember-template-compiler/tests/plugins/transform-inline-link-to-test.js","ember-template-compiler/tests/plugins/transform-input-type-syntax-test.js","ember-template-compiler/tests/system/bootstrap-test.js","ember-template-compiler/tests/system/compile_options_test.js","ember-template-compiler/tests/system/dasherize-component-name-test.js","ember-testing/tests/acceptance_test.js","ember-testing/tests/adapters/adapter_test.js","ember-testing/tests/adapters/qunit_test.js","ember-testing/tests/adapters_test.js","ember-testing/tests/ext/rsvp_test.js","ember-testing/tests/helper_registration_test.js","ember-testing/tests/helpers_test.js","ember-testing/tests/integration_test.js","ember-testing/tests/reexports_test.js","ember-testing/tests/test/waiters-test.js","ember/tests/application_lifecycle_test.js","ember/tests/component_context_test.js","ember/tests/component_registration_test.js","ember/tests/controller_test.js","ember/tests/error_handler_test.js","ember/tests/helpers/helper_registration_test.js","ember/tests/helpers/link_to_test.js","ember/tests/helpers/link_to_test/link_to_transitioning_classes_test.js","ember/tests/helpers/link_to_test/link_to_with_query_params_test.js","ember/tests/homepage_example_test.js","ember/tests/integration/multiple-app-test.js","ember/tests/production_build_test.js","ember/tests/reexports_test.js","ember/tests/routing/decoupled_basic_test.js","ember/tests/routing/deprecated_handler_infos_test.js","ember/tests/routing/deprecated_transition_state_test.js","ember/tests/routing/query_params_test.js","ember/tests/routing/query_params_test/model_dependent_state_with_query_params_test.js","ember/tests/routing/query_params_test/overlapping_query_params_test.js","ember/tests/routing/query_params_test/query_param_async_get_handler_test.js","ember/tests/routing/query_params_test/query_params_paramless_link_to_test.js","ember/tests/routing/query_params_test/shared_state_test.js","ember/tests/routing/router_map_test.js","ember/tests/routing/router_service_test/basic_test.js","ember/tests/routing/router_service_test/currenturl_lifecycle_test.js","ember/tests/routing/router_service_test/events_test.js","ember/tests/routing/router_service_test/isActive_test.js","ember/tests/routing/router_service_test/recognize_test.js","ember/tests/routing/router_service_test/replaceWith_test.js","ember/tests/routing/router_service_test/transitionTo_test.js","ember/tests/routing/router_service_test/urlFor_test.js","ember/tests/routing/substates_test.js","ember/tests/routing/toplevel_dom_test.js","ember/tests/service_injection_test.js","ember/tests/view_instrumentation_test.js","internal-test-helpers/index.js","internal-test-helpers/lib/apply-mixins.js","internal-test-helpers/lib/browser-detect.js","internal-test-helpers/lib/build-owner.js","internal-test-helpers/lib/confirm-export.js","internal-test-helpers/lib/ember-dev/assertion.js","internal-test-helpers/lib/ember-dev/containers.js","internal-test-helpers/lib/ember-dev/debug.js","internal-test-helpers/lib/ember-dev/deprecation.js","internal-test-helpers/lib/ember-dev/index.js","internal-test-helpers/lib/ember-dev/method-call-tracker.js","internal-test-helpers/lib/ember-dev/namespaces.js","internal-test-helpers/lib/ember-dev/run-loop.js","internal-test-helpers/lib/ember-dev/setup-qunit.js","internal-test-helpers/lib/ember-dev/utils.js","internal-test-helpers/lib/ember-dev/warning.js","internal-test-helpers/lib/equal-inner-html.js","internal-test-helpers/lib/equal-tokens.js","internal-test-helpers/lib/factory.js","internal-test-helpers/lib/get-all-property-names.js","internal-test-helpers/lib/get-text-of.js","internal-test-helpers/lib/matchers.js","internal-test-helpers/lib/module-for.js","internal-test-helpers/lib/registry-check.js","internal-test-helpers/lib/run.js","internal-test-helpers/lib/strip.js","internal-test-helpers/lib/system/synthetic-events.js","internal-test-helpers/lib/test-cases/abstract-application.js","internal-test-helpers/lib/test-cases/abstract-rendering.js","internal-test-helpers/lib/test-cases/abstract.js","internal-test-helpers/lib/test-cases/application.js","internal-test-helpers/lib/test-cases/autoboot-application.js","internal-test-helpers/lib/test-cases/default-resolver-application.js","internal-test-helpers/lib/test-cases/node-query.js","internal-test-helpers/lib/test-cases/query-param.js","internal-test-helpers/lib/test-cases/rendering.js","internal-test-helpers/lib/test-cases/router.js","internal-test-helpers/lib/test-cases/test-resolver-application.js","internal-test-helpers/lib/test-resolver.js","internal-test-helpers/tests/index-test.js","node-module.js"],"sourcesContent":["/*!\n * @overview Ember - JavaScript Application Framework\n * @copyright Copyright 2011-2018 Tilde Inc. and contributors\n * Portions Copyright 2006-2011 Strobe Inc.\n * Portions Copyright 2008-2011 Apple Inc. All rights reserved.\n * @license Licensed under MIT license\n * See https://raw.github.com/emberjs/ember.js/master/LICENSE\n * @version 3.6.0\n */\n","/*globals process */\nvar enifed, requireModule, Ember;\n\n// Used in @ember/-internals/environment/lib/global.js\nmainContext = this; // eslint-disable-line no-undef\n\n(function() {\n function missingModule(name, referrerName) {\n if (referrerName) {\n throw new Error('Could not find module ' + name + ' required by: ' + referrerName);\n } else {\n throw new Error('Could not find module ' + name);\n }\n }\n\n function internalRequire(_name, referrerName) {\n var name = _name;\n var mod = registry[name];\n\n if (!mod) {\n name = name + '/index';\n mod = registry[name];\n }\n\n var exports = seen[name];\n\n if (exports !== undefined) {\n return exports;\n }\n\n exports = seen[name] = {};\n\n if (!mod) {\n missingModule(_name, referrerName);\n }\n\n var deps = mod.deps;\n var callback = mod.callback;\n var reified = new Array(deps.length);\n\n for (var i = 0; i < deps.length; i++) {\n if (deps[i] === 'exports') {\n reified[i] = exports;\n } else if (deps[i] === 'require') {\n reified[i] = requireModule;\n } else {\n reified[i] = internalRequire(deps[i], name);\n }\n }\n\n callback.apply(this, reified);\n\n return exports;\n }\n\n var isNode =\n typeof window === 'undefined' &&\n typeof process !== 'undefined' &&\n {}.toString.call(process) === '[object process]';\n\n if (!isNode) {\n Ember = this.Ember = this.Ember || {};\n }\n\n if (typeof Ember === 'undefined') {\n Ember = {};\n }\n\n if (typeof Ember.__loader === 'undefined') {\n var registry = Object.create(null);\n var seen = Object.create(null);\n\n enifed = function(name, deps, callback) {\n var value = {};\n\n if (!callback) {\n value.deps = [];\n value.callback = deps;\n } else {\n value.deps = deps;\n value.callback = callback;\n }\n\n registry[name] = value;\n };\n\n requireModule = function(name) {\n return internalRequire(name, null);\n };\n\n // setup `require` module\n requireModule['default'] = requireModule;\n\n requireModule.has = function registryHas(moduleName) {\n return !!registry[moduleName] || !!registry[moduleName + '/index'];\n };\n\n requireModule._eak_seen = registry;\n\n Ember.__loader = {\n define: enifed,\n require: requireModule,\n registry: registry,\n };\n } else {\n enifed = Ember.__loader.define;\n requireModule = Ember.__loader.require;\n }\n})();\n","enifed('@ember/application/tests/application_instance_test', ['ember-babel', '@ember/engine', '@ember/application', '@ember/application/instance', '@ember/runloop', '@ember/-internals/container', 'internal-test-helpers', '@ember/-internals/runtime', '@ember/debug'], function (_emberBabel, _engine, _application, _instance, _runloop, _container, _internalTestHelpers, _runtime, _debug) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['-bucket-cache:main'], ['-bucket-cache:main']);\n\n var originalDebug = (0, _debug.getDebugFunction)('debug');\n var noop = function () {};\n\n var application = void 0,\n appInstance = void 0;\n\n (0, _internalTestHelpers.moduleFor)('ApplicationInstance', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n\n (0, _debug.setDebugFunction)('debug', noop);\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.call(this));\n\n document.getElementById('qunit-fixture').innerHTML = '\\n
HI
HI
\\n ';\n application = (0, _runloop.run)(function () {\n return _application.default.create({ rootElement: '#one', router: null });\n });\n return _this;\n }\n\n _class.prototype.teardown = function teardown() {\n (0, _debug.setDebugFunction)('debug', originalDebug);\n if (appInstance) {\n (0, _runloop.run)(appInstance, 'destroy');\n appInstance = null;\n }\n\n if (application) {\n (0, _runloop.run)(application, 'destroy');\n application = null;\n }\n\n document.getElementById('qunit-fixture').innerHTML = '';\n };\n\n _class.prototype['@test an application instance can be created based upon an application'] = function testAnApplicationInstanceCanBeCreatedBasedUponAnApplication(assert) {\n appInstance = (0, _runloop.run)(function () {\n return _instance.default.create({ application: application });\n });\n\n assert.ok(appInstance, 'instance should be created');\n assert.equal(appInstance.application, application, 'application should be set to parent');\n };\n\n _class.prototype['@test customEvents added to the application before setupEventDispatcher'] = function testCustomEventsAddedToTheApplicationBeforeSetupEventDispatcher(assert) {\n assert.expect(1);\n\n appInstance = (0, _runloop.run)(function () {\n return _instance.default.create({ application: application });\n });\n appInstance.setupRegistry();\n\n application.customEvents = {\n awesome: 'sauce'\n };\n\n var eventDispatcher = appInstance.lookup('event_dispatcher:main');\n eventDispatcher.setup = function (events) {\n assert.equal(events.awesome, 'sauce');\n };\n\n appInstance.setupEventDispatcher();\n };\n\n _class.prototype['@test customEvents added to the application before setupEventDispatcher'] = function testCustomEventsAddedToTheApplicationBeforeSetupEventDispatcher(assert) {\n assert.expect(1);\n\n appInstance = (0, _runloop.run)(function () {\n return _instance.default.create({ application: application });\n });\n appInstance.setupRegistry();\n\n application.customEvents = {\n awesome: 'sauce'\n };\n\n var eventDispatcher = appInstance.lookup('event_dispatcher:main');\n eventDispatcher.setup = function (events) {\n assert.equal(events.awesome, 'sauce');\n };\n\n appInstance.setupEventDispatcher();\n };\n\n _class.prototype['@test customEvents added to the application instance before setupEventDispatcher'] = function testCustomEventsAddedToTheApplicationInstanceBeforeSetupEventDispatcher(assert) {\n assert.expect(1);\n\n appInstance = (0, _runloop.run)(function () {\n return _instance.default.create({ application: application });\n });\n appInstance.setupRegistry();\n\n appInstance.customEvents = {\n awesome: 'sauce'\n };\n\n var eventDispatcher = appInstance.lookup('event_dispatcher:main');\n eventDispatcher.setup = function (events) {\n assert.equal(events.awesome, 'sauce');\n };\n\n appInstance.setupEventDispatcher();\n };\n\n _class.prototype['@test unregistering a factory clears all cached instances of that factory'] = function testUnregisteringAFactoryClearsAllCachedInstancesOfThatFactory(assert) {\n assert.expect(5);\n\n appInstance = (0, _runloop.run)(function () {\n return _instance.default.create({ application: application });\n });\n\n var PostController1 = (0, _internalTestHelpers.factory)();\n var PostController2 = (0, _internalTestHelpers.factory)();\n\n appInstance.register('controller:post', PostController1);\n\n var postController1 = appInstance.lookup('controller:post');\n var postController1Factory = appInstance.factoryFor('controller:post');\n assert.ok(postController1 instanceof PostController1, 'precond - lookup creates instance');\n assert.equal(PostController1, postController1Factory.class, 'precond - factoryFor().class matches');\n\n appInstance.unregister('controller:post');\n appInstance.register('controller:post', PostController2);\n\n var postController2 = appInstance.lookup('controller:post');\n var postController2Factory = appInstance.factoryFor('controller:post');\n assert.ok(postController2 instanceof PostController2, 'lookup creates instance');\n assert.equal(PostController2, postController2Factory.class, 'factoryFor().class matches');\n\n assert.notStrictEqual(postController1, postController2, 'lookup creates a brand new instance, because the previous one was reset');\n };\n\n _class.prototype['@skip unregistering a factory clears caches with source of that factory'] = function skipUnregisteringAFactoryClearsCachesWithSourceOfThatFactory(assert) {\n assert.expect(1);\n\n appInstance = (0, _runloop.run)(function () {\n return _instance.default.create({ application: application });\n });\n\n var PostController1 = (0, _internalTestHelpers.factory)();\n var PostController2 = (0, _internalTestHelpers.factory)();\n\n appInstance.register('controller:post', PostController1);\n\n appInstance.lookup('controller:post');\n var postControllerLookupWithSource = appInstance.lookup('controller:post', {\n source: 'doesnt-even-matter'\n });\n\n appInstance.unregister('controller:post');\n appInstance.register('controller:post', PostController2);\n\n // The cache that is source-specific is not cleared\n assert.ok(postControllerLookupWithSource !== appInstance.lookup('controller:post', {\n source: 'doesnt-even-matter'\n }), 'lookup with source creates a new instance');\n };\n\n _class.prototype['@test can build and boot a registered engine'] = function testCanBuildAndBootARegisteredEngine(assert) {\n assert.expect(11);\n\n var ChatEngine = _engine.default.extend();\n var chatEngineInstance = void 0;\n\n application.register('engine:chat', ChatEngine);\n\n (0, _runloop.run)(function () {\n appInstance = _instance.default.create({ application: application });\n appInstance.setupRegistry();\n chatEngineInstance = appInstance.buildChildEngineInstance('chat');\n });\n\n return chatEngineInstance.boot().then(function () {\n assert.ok(true, 'boot successful');\n\n var registrations = ['route:basic', 'service:-routing', 'service:-glimmer-environment'];\n\n registrations.forEach(function (key) {\n assert.strictEqual(chatEngineInstance.resolveRegistration(key), appInstance.resolveRegistration(key), 'Engine and parent app share registrations for \\'' + key + '\\'');\n });\n\n var singletons = ['router:main', (0, _container.privatize)(_templateObject), '-view-registry:main', '-environment:main', 'service:-document', 'event_dispatcher:main'];\n\n var env = appInstance.lookup('-environment:main');\n singletons.push(env.isInteractive ? 'renderer:-dom' : 'renderer:-inert');\n\n singletons.forEach(function (key) {\n assert.strictEqual(chatEngineInstance.lookup(key), appInstance.lookup(key), 'Engine and parent app share singleton \\'' + key + '\\'');\n });\n });\n };\n\n _class.prototype['@test can build a registry via ApplicationInstance.setupRegistry() -- simulates ember-test-helpers'] = function testCanBuildARegistryViaApplicationInstanceSetupRegistrySimulatesEmberTestHelpers(assert) {\n var namespace = _runtime.Object.create({\n Resolver: { create: function () {} }\n });\n\n var registry = _application.default.buildRegistry(namespace);\n\n _instance.default.setupRegistry(registry);\n\n assert.equal(registry.resolve('service:-document'), document);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/application/tests/application_test', ['ember-babel', 'ember/version', '@ember/-internals/environment', '@ember/-internals/metal', '@ember/debug', '@ember/application', '@ember/-internals/routing', '@ember/-internals/views', '@ember/controller', '@ember/-internals/runtime', '@ember/-internals/glimmer', '@ember/-internals/container', '@ember/polyfills', 'internal-test-helpers', '@ember/runloop'], function (_emberBabel, _version, _environment, _metal, _debug, _application, _routing, _views, _controller, _runtime, _glimmer, _container, _polyfills, _internalTestHelpers, _runloop) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['-bucket-cache:main'], ['-bucket-cache:main']),\n _templateObject2 = (0, _emberBabel.taggedTemplateLiteralLoose)(['template:components/-default'], ['template:components/-default']),\n _templateObject3 = (0, _emberBabel.taggedTemplateLiteralLoose)(['template-compiler:main'], ['template-compiler:main']);\n\n /*globals EmberDev */\n\n\n (0, _internalTestHelpers.moduleFor)('Application, autobooting multiple apps', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n }\n\n _class.prototype.createSecondApplication = function createSecondApplication(options) {\n var myOptions = (0, _polyfills.assign)(this.applicationOptions, options);\n return this.secondApp = _application.default.create(myOptions);\n };\n\n _class.prototype.teardown = function teardown() {\n var _this2 = this;\n\n _ApplicationTestCase.prototype.teardown.call(this);\n\n if (this.secondApp) {\n this.runTask(function () {\n return _this2.secondApp.destroy();\n });\n }\n };\n\n _class.prototype['@test you can make a new application in a non-overlapping element'] = function (assert) {\n var _this3 = this;\n\n var app = this.runTask(function () {\n return _this3.createSecondApplication({\n rootElement: '#two'\n });\n });\n\n this.runTask(function () {\n return app.destroy();\n });\n assert.ok(true, 'should not raise');\n };\n\n _class.prototype['@test you cannot make a new application that is a parent of an existing application'] = function () {\n var _this4 = this;\n\n expectAssertion(function () {\n _this4.runTask(function () {\n return _this4.createSecondApplication({\n rootElement: _this4.applicationOptions.rootElement\n });\n });\n });\n };\n\n _class.prototype['@test you cannot make a new application that is a descendant of an existing application'] = function () {\n var _this5 = this;\n\n expectAssertion(function () {\n _this5.runTask(function () {\n return _this5.createSecondApplication({\n rootElement: '#one-child'\n });\n });\n });\n };\n\n _class.prototype['@test you cannot make a new application that is a duplicate of an existing application'] = function () {\n var _this6 = this;\n\n expectAssertion(function () {\n _this6.runTask(function () {\n return _this6.createSecondApplication({\n rootElement: '#one'\n });\n });\n });\n };\n\n _class.prototype['@test you cannot make two default applications without a rootElement error'] = function () {\n var _this7 = this;\n\n expectAssertion(function () {\n _this7.runTask(function () {\n return _this7.createSecondApplication();\n });\n });\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'fixture',\n get: function () {\n return '\\n
\\n
HI
\\n
\\n
HI
\\n ';\n }\n }, {\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_ApplicationTestCase.prototype.applicationOptions, {\n rootElement: '#one',\n router: null,\n autoboot: true\n });\n }\n }]);\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Application', function (_ApplicationTestCase2) {\n (0, _emberBabel.inherits)(_class2, _ApplicationTestCase2);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase2.apply(this, arguments));\n }\n\n _class2.prototype['@test builds a registry'] = function (assert) {\n var application = this.application;\n\n assert.strictEqual(application.resolveRegistration('application:main'), application, 'application:main is registered');\n assert.deepEqual(application.registeredOptionsForType('component'), { singleton: false }, 'optionsForType \\'component\\'');\n assert.deepEqual(application.registeredOptionsForType('view'), { singleton: false }, 'optionsForType \\'view\\'');\n\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'controller:basic');\n (0, _internalTestHelpers.verifyRegistration)(assert, application, '-view-registry:main');\n (0, _internalTestHelpers.verifyInjection)(assert, application, 'view', '_viewRegistry', '-view-registry:main');\n (0, _internalTestHelpers.verifyInjection)(assert, application, 'route', '_topLevelViewTemplate', 'template:-outlet');\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'route:basic');\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'event_dispatcher:main');\n (0, _internalTestHelpers.verifyInjection)(assert, application, 'router:main', 'namespace', 'application:main');\n (0, _internalTestHelpers.verifyInjection)(assert, application, 'view:-outlet', 'namespace', 'application:main');\n\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'location:auto');\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'location:hash');\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'location:history');\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'location:none');\n\n (0, _internalTestHelpers.verifyInjection)(assert, application, 'controller', 'target', 'router:main');\n (0, _internalTestHelpers.verifyInjection)(assert, application, 'controller', 'namespace', 'application:main');\n\n (0, _internalTestHelpers.verifyRegistration)(assert, application, (0, _container.privatize)(_templateObject));\n (0, _internalTestHelpers.verifyInjection)(assert, application, 'router', '_bucketCache', (0, _container.privatize)(_templateObject));\n (0, _internalTestHelpers.verifyInjection)(assert, application, 'route', '_bucketCache', (0, _container.privatize)(_templateObject));\n\n (0, _internalTestHelpers.verifyInjection)(assert, application, 'route', '_router', 'router:main');\n\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'component:-text-field');\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'component:-text-area');\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'component:-checkbox');\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'component:link-to');\n\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'service:-routing');\n (0, _internalTestHelpers.verifyInjection)(assert, application, 'service:-routing', 'router', 'router:main');\n\n // DEBUGGING\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'resolver-for-debugging:main');\n (0, _internalTestHelpers.verifyInjection)(assert, application, 'container-debug-adapter:main', 'resolver', 'resolver-for-debugging:main');\n (0, _internalTestHelpers.verifyInjection)(assert, application, 'data-adapter:main', 'containerDebugAdapter', 'container-debug-adapter:main');\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'container-debug-adapter:main');\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'component-lookup:main');\n\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'service:-glimmer-environment');\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'service:-dom-changes');\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'service:-dom-tree-construction');\n (0, _internalTestHelpers.verifyInjection)(assert, application, 'service:-glimmer-environment', 'appendOperations', 'service:-dom-tree-construction');\n (0, _internalTestHelpers.verifyInjection)(assert, application, 'service:-glimmer-environment', 'updateOperations', 'service:-dom-changes');\n (0, _internalTestHelpers.verifyInjection)(assert, application, 'renderer', 'env', 'service:-glimmer-environment');\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'view:-outlet');\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'renderer:-dom');\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'renderer:-inert');\n (0, _internalTestHelpers.verifyRegistration)(assert, application, (0, _container.privatize)(_templateObject2));\n (0, _internalTestHelpers.verifyRegistration)(assert, application, 'template:-outlet');\n (0, _internalTestHelpers.verifyInjection)(assert, application, 'view:-outlet', 'template', 'template:-outlet');\n (0, _internalTestHelpers.verifyInjection)(assert, application, 'template', 'compiler', (0, _container.privatize)(_templateObject3));\n\n assert.deepEqual(application.registeredOptionsForType('helper'), { instantiate: false }, 'optionsForType \\'helper\\'');\n };\n\n return _class2;\n }(_internalTestHelpers.ApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Application, default resolver with autoboot', function (_DefaultResolverAppli) {\n (0, _emberBabel.inherits)(_class3, _DefaultResolverAppli);\n\n function _class3() {\n\n var _this9 = (0, _emberBabel.possibleConstructorReturn)(this, _DefaultResolverAppli.apply(this, arguments));\n\n _this9.originalLookup = _environment.context.lookup;\n return _this9;\n }\n\n _class3.prototype.teardown = function teardown() {\n _environment.context.lookup = this.originalLookup;\n _DefaultResolverAppli.prototype.teardown.call(this);\n (0, _glimmer.setTemplates)({});\n };\n\n _class3.prototype['@test acts like a namespace'] = function (assert) {\n var _this10 = this;\n\n this.application = this.runTask(function () {\n return _this10.createApplication();\n });\n var Foo = this.application.Foo = _runtime.Object.extend();\n assert.equal(Foo.toString(), 'TestApp.Foo', 'Classes pick up their parent namespace');\n };\n\n _class3.prototype['@test can specify custom router'] = function (assert) {\n var _this11 = this;\n\n var MyRouter = _routing.Router.extend();\n this.runTask(function () {\n _this11.createApplication();\n _this11.application.Router = MyRouter;\n });\n\n assert.ok(this.application.__deprecatedInstance__.lookup('router:main') instanceof MyRouter, 'application resolved the correct router');\n };\n\n _class3.prototype['@test Minimal Application initialized with just an application template'] = function () {\n var _this12 = this;\n\n this.setupFixture('');\n this.runTask(function () {\n return _this12.createApplication();\n });\n this.assertInnerHTML('Hello World');\n };\n\n (0, _emberBabel.createClass)(_class3, [{\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_DefaultResolverAppli.prototype.applicationOptions, {\n autoboot: true\n });\n }\n }]);\n\n return _class3;\n }(_internalTestHelpers.DefaultResolverApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Application, autobooting', function (_AutobootApplicationT) {\n (0, _emberBabel.inherits)(_class4, _AutobootApplicationT);\n\n function _class4() {\n\n var _this13 = (0, _emberBabel.possibleConstructorReturn)(this, _AutobootApplicationT.apply(this, arguments));\n\n _this13.originalLogVersion = _environment.ENV.LOG_VERSION;\n _this13.originalDebug = (0, _debug.getDebugFunction)('debug');\n _this13.originalWarn = (0, _debug.getDebugFunction)('warn');\n return _this13;\n }\n\n _class4.prototype.teardown = function teardown() {\n (0, _debug.setDebugFunction)('warn', this.originalWarn);\n (0, _debug.setDebugFunction)('debug', this.originalDebug);\n _environment.ENV.LOG_VERSION = this.originalLogVersion;\n _AutobootApplicationT.prototype.teardown.call(this);\n };\n\n _class4.prototype['@test initialized application goes to initial route'] = function () {\n var _this14 = this;\n\n this.runTask(function () {\n _this14.createApplication();\n _this14.addTemplate('application', '{{outlet}}');\n _this14.addTemplate('index', '

Hi from index

');\n });\n\n this.assertText('Hi from index');\n };\n\n _class4.prototype['@test ready hook is called before routing begins'] = function (assert) {\n var _this15 = this;\n\n assert.expect(2);\n\n this.runTask(function () {\n function registerRoute(application, name, callback) {\n var route = _routing.Route.extend({\n activate: callback\n });\n\n application.register('route:' + name, route);\n }\n\n var MyApplication = _application.default.extend({\n ready: function () {\n registerRoute(this, 'index', function () {\n assert.ok(true, 'last-minute route is activated');\n });\n }\n });\n\n var app = _this15.createApplication({}, MyApplication);\n\n registerRoute(app, 'application', function () {\n return assert.ok(true, 'normal route is activated');\n });\n });\n };\n\n _class4.prototype['@test initialize application via initialize call'] = function (assert) {\n var _this16 = this;\n\n this.runTask(function () {\n return _this16.createApplication();\n });\n // This is not a public way to access the container; we just\n // need to make some assertions about the created router\n var router = this.applicationInstance.lookup('router:main');\n assert.equal(router instanceof _routing.Router, true, 'Router was set from initialize call');\n assert.equal(router.location instanceof _routing.NoneLocation, true, 'Location was set from location implementation name');\n };\n\n _class4.prototype['@test initialize application with stateManager via initialize call from Router class'] = function (assert) {\n var _this17 = this;\n\n this.runTask(function () {\n _this17.createApplication();\n _this17.addTemplate('application', '

Hello!

');\n });\n // This is not a public way to access the container; we just\n // need to make some assertions about the created router\n var router = this.application.__deprecatedInstance__.lookup('router:main');\n assert.equal(router instanceof _routing.Router, true, 'Router was set from initialize call');\n this.assertText('Hello!');\n };\n\n _class4.prototype['@test Application Controller backs the appplication template'] = function () {\n var _this18 = this;\n\n this.runTask(function () {\n _this18.createApplication();\n _this18.addTemplate('application', '

{{greeting}}

');\n _this18.add('controller:application', _controller.default.extend({\n greeting: 'Hello!'\n }));\n });\n this.assertText('Hello!');\n };\n\n _class4.prototype['@test enable log of libraries with an ENV var'] = function (assert) {\n var _this19 = this;\n\n if (EmberDev && EmberDev.runningProdBuild) {\n assert.ok(true, 'Logging does not occur in production builds');\n return;\n }\n\n var messages = [];\n\n _environment.ENV.LOG_VERSION = true;\n\n (0, _debug.setDebugFunction)('debug', function (message) {\n return messages.push(message);\n });\n\n _metal.libraries.register('my-lib', '2.0.0a');\n\n this.runTask(function () {\n return _this19.createApplication();\n });\n\n assert.equal(messages[1], 'Ember : ' + _version.default);\n if (_views.jQueryDisabled) {\n assert.equal(messages[2], 'my-lib : ' + '2.0.0a');\n } else {\n assert.equal(messages[2], 'jQuery : ' + (0, _views.jQuery)().jquery);\n assert.equal(messages[3], 'my-lib : ' + '2.0.0a');\n }\n\n _metal.libraries.deRegister('my-lib');\n };\n\n _class4.prototype['@test disable log of version of libraries with an ENV var'] = function (assert) {\n var _this20 = this;\n\n var logged = false;\n\n _environment.ENV.LOG_VERSION = false;\n\n (0, _debug.setDebugFunction)('debug', function () {\n return logged = true;\n });\n\n this.runTask(function () {\n return _this20.createApplication();\n });\n\n assert.ok(!logged, 'library version logging skipped');\n };\n\n _class4.prototype['@test can resolve custom router'] = function (assert) {\n var _this21 = this;\n\n var CustomRouter = _routing.Router.extend();\n\n this.runTask(function () {\n _this21.createApplication();\n _this21.add('router:main', CustomRouter);\n });\n\n assert.ok(this.application.__deprecatedInstance__.lookup('router:main') instanceof CustomRouter, 'application resolved the correct router');\n };\n\n _class4.prototype['@test does not leak itself in onLoad._loaded'] = function (assert) {\n var _this22 = this;\n\n assert.equal(_application._loaded.application, undefined);\n this.runTask(function () {\n return _this22.createApplication();\n });\n assert.equal(_application._loaded.application, this.application);\n this.runTask(function () {\n return _this22.application.destroy();\n });\n assert.equal(_application._loaded.application, undefined);\n };\n\n _class4.prototype['@test can build a registry via Application.buildRegistry() --- simulates ember-test-helpers'] = function (assert) {\n var namespace = _runtime.Object.create({\n Resolver: { create: function () {} }\n });\n\n var registry = _application.default.buildRegistry(namespace);\n\n assert.equal(registry.resolve('application:main'), namespace);\n };\n\n return _class4;\n }(_internalTestHelpers.AutobootApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Application#buildRegistry', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class5, _AbstractTestCase);\n\n function _class5() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class5.prototype['@test can build a registry via Application.buildRegistry() --- simulates ember-test-helpers'] = function (assert) {\n var namespace = _runtime.Object.create({\n Resolver: {\n create: function () {}\n }\n });\n\n var registry = _application.default.buildRegistry(namespace);\n\n assert.equal(registry.resolve('application:main'), namespace);\n };\n\n return _class5;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Application - instance tracking', function (_ApplicationTestCase3) {\n (0, _emberBabel.inherits)(_class6, _ApplicationTestCase3);\n\n function _class6() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase3.apply(this, arguments));\n }\n\n _class6.prototype['@test tracks built instance'] = function testTracksBuiltInstance(assert) {\n var _this25 = this;\n\n var instance = this.application.buildInstance();\n (0, _runloop.run)(function () {\n _this25.application.destroy();\n });\n\n assert.ok(instance.isDestroyed, 'instance was destroyed');\n };\n\n _class6.prototype['@test tracks built instances'] = function testTracksBuiltInstances(assert) {\n var _this26 = this;\n\n var instanceA = this.application.buildInstance();\n var instanceB = this.application.buildInstance();\n (0, _runloop.run)(function () {\n _this26.application.destroy();\n });\n\n assert.ok(instanceA.isDestroyed, 'instanceA was destroyed');\n assert.ok(instanceB.isDestroyed, 'instanceB was destroyed');\n };\n\n return _class6;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('@ember/application/tests/bootstrap-test', ['ember-babel', '@ember/polyfills', 'internal-test-helpers'], function (_emberBabel, _polyfills, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Application with default resolver and autoboot', function (_DefaultResolverAppli) {\n (0, _emberBabel.inherits)(_class, _DefaultResolverAppli);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _DefaultResolverAppli.apply(this, arguments));\n }\n\n _class.prototype['@test templates in script tags are extracted at application creation'] = function testTemplatesInScriptTagsAreExtractedAtApplicationCreation(assert) {\n var _this2 = this;\n\n this.runTask(function () {\n return _this2.createApplication();\n });\n assert.equal(document.getElementById('app').textContent, 'Hello World!');\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'fixture',\n get: function () {\n return '\\n
\\n\\n \\n \\n ';\n }\n }, {\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_DefaultResolverAppli.prototype.applicationOptions, {\n autoboot: true,\n rootElement: '#app'\n });\n }\n }]);\n\n return _class;\n }(_internalTestHelpers.DefaultResolverApplicationTestCase));\n});","enifed('@ember/application/tests/dependency_injection/custom_resolver_test', ['ember-babel', '@ember/application/globals-resolver', '@ember/polyfills', 'internal-test-helpers'], function (_emberBabel, _globalsResolver, _polyfills, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Application with extended default resolver and autoboot', function (_DefaultResolverAppli) {\n (0, _emberBabel.inherits)(_class, _DefaultResolverAppli);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _DefaultResolverAppli.apply(this, arguments));\n }\n\n _class.prototype['@test a resolver can be supplied to application'] = function () {\n var _this2 = this;\n\n this.runTask(function () {\n return _this2.createApplication();\n });\n this.assertText('Fallback');\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'applicationOptions',\n get: function () {\n var applicationTemplate = this.compile('

Fallback

');\n\n var Resolver = _globalsResolver.default.extend({\n resolveTemplate: function (resolvable) {\n if (resolvable.fullNameWithoutType === 'application') {\n return applicationTemplate;\n } else {\n return this._super(resolvable);\n }\n }\n });\n\n return (0, _polyfills.assign)(_DefaultResolverAppli.prototype.applicationOptions, {\n Resolver: Resolver,\n autoboot: true\n });\n }\n }]);\n\n return _class;\n }(_internalTestHelpers.DefaultResolverApplicationTestCase));\n});","enifed('@ember/application/tests/dependency_injection/default_resolver_test', ['ember-babel', 'internal-test-helpers', '@ember/-internals/environment', '@ember/controller', '@ember/service', '@ember/-internals/runtime', '@ember/-internals/routing', '@ember/-internals/glimmer', '@ember/debug'], function (_emberBabel, _internalTestHelpers, _environment, _controller, _service, _runtime, _routing, _glimmer, _debug) {\n 'use strict';\n\n /* globals EmberDev */\n (0, _internalTestHelpers.moduleFor)('Application Dependency Injection - Integration - default resolver', function (_DefaultResolverAppli) {\n (0, _emberBabel.inherits)(_class, _DefaultResolverAppli);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _DefaultResolverAppli.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function beforeEach() {\n var _this2 = this;\n\n this.runTask(function () {\n return _this2.createApplication();\n });\n return this.visit('/');\n };\n\n /*\n * This first batch of tests are integration tests against the public\n * applicationInstance API.\n */\n\n _class.prototype['@test the default resolver looks up templates in Ember.TEMPLATES'] = function (assert) {\n var fooTemplate = this.addTemplate('foo', 'foo template');\n var fooBarTemplate = this.addTemplate('fooBar', 'fooBar template');\n var fooBarBazTemplate = this.addTemplate('fooBar/baz', 'fooBar/baz template');\n\n assert.equal(this.applicationInstance.factoryFor('template:foo').class, fooTemplate, 'resolves template:foo');\n assert.equal(this.applicationInstance.factoryFor('template:fooBar').class, fooBarTemplate, 'resolves template:foo_bar');\n assert.equal(this.applicationInstance.factoryFor('template:fooBar.baz').class, fooBarBazTemplate, 'resolves template:foo_bar.baz');\n };\n\n _class.prototype['@test the default resolver looks up basic name as no prefix'] = function (assert) {\n var instance = this.applicationInstance.lookup('controller:basic');\n assert.ok(_controller.default.detect(instance), 'locator looks up correct controller');\n };\n\n _class.prototype['@test the default resolver looks up arbitrary types on the namespace'] = function (assert) {\n var Class = this.application.FooManager = _runtime.Object.extend();\n var resolvedClass = this.application.resolveRegistration('manager:foo');\n assert.equal(Class, resolvedClass, 'looks up FooManager on application');\n };\n\n _class.prototype['@test the default resolver resolves models on the namespace'] = function (assert) {\n var Class = this.application.Post = _runtime.Object.extend();\n var factoryClass = this.applicationInstance.factoryFor('model:post').class;\n assert.equal(Class, factoryClass, 'looks up Post model on application');\n };\n\n _class.prototype['@test the default resolver resolves *:main on the namespace'] = function (assert) {\n var Class = this.application.FooBar = _runtime.Object.extend();\n var factoryClass = this.applicationInstance.factoryFor('foo-bar:main').class;\n assert.equal(Class, factoryClass, 'looks up FooBar type without name on application');\n };\n\n _class.prototype['@test the default resolver resolves container-registered helpers'] = function (assert) {\n var shorthandHelper = (0, _glimmer.helper)(function () {});\n var helper = _glimmer.Helper.extend();\n\n this.application.register('helper:shorthand', shorthandHelper);\n this.application.register('helper:complete', helper);\n\n var lookedUpShorthandHelper = this.applicationInstance.factoryFor('helper:shorthand').class;\n\n assert.ok(lookedUpShorthandHelper.isHelperFactory, 'shorthand helper isHelper');\n\n var lookedUpHelper = this.applicationInstance.factoryFor('helper:complete').class;\n\n assert.ok(lookedUpHelper.isHelperFactory, 'complete helper is factory');\n assert.ok(helper.detect(lookedUpHelper), 'looked up complete helper');\n };\n\n _class.prototype['@test the default resolver resolves container-registered helpers via lookupFor'] = function (assert) {\n var shorthandHelper = (0, _glimmer.helper)(function () {});\n var helper = _glimmer.Helper.extend();\n\n this.application.register('helper:shorthand', shorthandHelper);\n this.application.register('helper:complete', helper);\n\n var lookedUpShorthandHelper = this.applicationInstance.factoryFor('helper:shorthand').class;\n\n assert.ok(lookedUpShorthandHelper.isHelperFactory, 'shorthand helper isHelper');\n\n var lookedUpHelper = this.applicationInstance.factoryFor('helper:complete').class;\n\n assert.ok(lookedUpHelper.isHelperFactory, 'complete helper is factory');\n assert.ok(helper.detect(lookedUpHelper), 'looked up complete helper');\n };\n\n _class.prototype['@test the default resolver resolves helpers on the namespace'] = function (assert) {\n var ShorthandHelper = (0, _glimmer.helper)(function () {});\n var CompleteHelper = _glimmer.Helper.extend();\n\n this.application.ShorthandHelper = ShorthandHelper;\n this.application.CompleteHelper = CompleteHelper;\n\n var resolvedShorthand = this.application.resolveRegistration('helper:shorthand');\n var resolvedComplete = this.application.resolveRegistration('helper:complete');\n\n assert.equal(resolvedShorthand, ShorthandHelper, 'resolve fetches the shorthand helper factory');\n assert.equal(resolvedComplete, CompleteHelper, 'resolve fetches the complete helper factory');\n };\n\n _class.prototype['@test the default resolver resolves to the same instance, no matter the notation '] = function (assert) {\n this.application.NestedPostController = _controller.default.extend({});\n\n assert.equal(this.applicationInstance.lookup('controller:nested-post'), this.applicationInstance.lookup('controller:nested_post'), 'looks up NestedPost controller on application');\n };\n\n _class.prototype['@test the default resolver throws an error if the fullName to resolve is invalid'] = function () {\n var _this3 = this;\n\n expectAssertion(function () {\n _this3.applicationInstance.resolveRegistration(undefined);\n }, /fullName must be a proper full name/);\n expectAssertion(function () {\n _this3.applicationInstance.resolveRegistration(null);\n }, /fullName must be a proper full name/);\n expectAssertion(function () {\n _this3.applicationInstance.resolveRegistration('');\n }, /fullName must be a proper full name/);\n expectAssertion(function () {\n _this3.applicationInstance.resolveRegistration('');\n }, /fullName must be a proper full name/);\n expectAssertion(function () {\n _this3.applicationInstance.resolveRegistration(':');\n }, /fullName must be a proper full name/);\n expectAssertion(function () {\n _this3.applicationInstance.resolveRegistration('model');\n }, /fullName must be a proper full name/);\n expectAssertion(function () {\n _this3.applicationInstance.resolveRegistration('model:');\n }, /fullName must be a proper full name/);\n expectAssertion(function () {\n _this3.applicationInstance.resolveRegistration(':type');\n }, /fullName must be a proper full name/);\n };\n\n /*\n * The following are integration tests against the private registry API.\n */\n\n _class.prototype['@test lookup description'] = function (assert) {\n this.application.toString = function () {\n return 'App';\n };\n\n assert.equal(this.privateRegistry.describe('controller:foo'), 'App.FooController', 'Type gets appended at the end');\n assert.equal(this.privateRegistry.describe('controller:foo.bar'), 'App.FooBarController', 'dots are removed');\n assert.equal(this.privateRegistry.describe('model:foo'), 'App.Foo', \"models don't get appended at the end\");\n };\n\n _class.prototype['@test assertion for routes without isRouteFactory property'] = function () {\n var _this4 = this;\n\n this.application.FooRoute = _glimmer.Component.extend();\n\n expectAssertion(function () {\n _this4.privateRegistry.resolve('route:foo');\n }, /to resolve to an Ember.Route/, 'Should assert');\n };\n\n _class.prototype['@test no assertion for routes that extend from Route'] = function (assert) {\n assert.expect(0);\n this.application.FooRoute = _routing.Route.extend();\n this.privateRegistry.resolve('route:foo');\n };\n\n _class.prototype['@test deprecation warning for service factories without isServiceFactory property'] = function () {\n var _this5 = this;\n\n expectAssertion(function () {\n _this5.application.FooService = _runtime.Object.extend();\n _this5.privateRegistry.resolve('service:foo');\n }, /Expected service:foo to resolve to an Ember.Service but instead it was TestApp\\.FooService\\./);\n };\n\n _class.prototype['@test no deprecation warning for service factories that extend from Service'] = function (assert) {\n assert.expect(0);\n this.application.FooService = _service.default.extend();\n this.privateRegistry.resolve('service:foo');\n };\n\n _class.prototype['@test deprecation warning for component factories without isComponentFactory property'] = function () {\n var _this6 = this;\n\n expectAssertion(function () {\n _this6.application.FooComponent = _runtime.Object.extend();\n _this6.privateRegistry.resolve('component:foo');\n }, /Expected component:foo to resolve to an Ember\\.Component but instead it was TestApp\\.FooComponent\\./);\n };\n\n _class.prototype['@test no deprecation warning for component factories that extend from Component'] = function () {\n expectNoDeprecation();\n this.application.FooView = _glimmer.Component.extend();\n this.privateRegistry.resolve('component:foo');\n };\n\n _class.prototype['@test knownForType returns each item for a given type found'] = function (assert) {\n this.application.FooBarHelper = 'foo';\n this.application.BazQuxHelper = 'bar';\n\n var found = this.privateRegistry.resolver.knownForType('helper');\n\n assert.deepEqual(found, {\n 'helper:foo-bar': true,\n 'helper:baz-qux': true\n });\n };\n\n _class.prototype['@test knownForType is not required to be present on the resolver'] = function (assert) {\n delete this.privateRegistry.resolver.knownForType;\n\n this.privateRegistry.resolver.knownForType('helper', function () {});\n\n assert.ok(true, 'does not error');\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'privateRegistry',\n get: function () {\n return this.application.__registry__;\n }\n }]);\n\n return _class;\n }(_internalTestHelpers.DefaultResolverApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Application Dependency Injection - Integration - default resolver w/ other namespace', function (_DefaultResolverAppli2) {\n (0, _emberBabel.inherits)(_class2, _DefaultResolverAppli2);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _DefaultResolverAppli2.apply(this, arguments));\n }\n\n _class2.prototype.beforeEach = function beforeEach() {\n var _this8 = this;\n\n this.UserInterface = _environment.context.lookup.UserInterface = _runtime.Namespace.create();\n this.runTask(function () {\n return _this8.createApplication();\n });\n return this.visit('/');\n };\n\n _class2.prototype.teardown = function teardown() {\n var UserInterfaceNamespace = _runtime.Namespace.NAMESPACES_BY_ID['UserInterface'];\n if (UserInterfaceNamespace) {\n this.runTask(function () {\n UserInterfaceNamespace.destroy();\n });\n }\n _DefaultResolverAppli2.prototype.teardown.call(this);\n };\n\n _class2.prototype['@test the default resolver can look things up in other namespaces'] = function (assert) {\n this.UserInterface.NavigationController = _controller.default.extend();\n\n var nav = this.applicationInstance.lookup('controller:userInterface/navigation');\n\n assert.ok(nav instanceof this.UserInterface.NavigationController, 'the result should be an instance of the specified class');\n };\n\n return _class2;\n }(_internalTestHelpers.DefaultResolverApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Application Dependency Injection - Integration - default resolver', function (_DefaultResolverAppli3) {\n (0, _emberBabel.inherits)(_class3, _DefaultResolverAppli3);\n\n function _class3() {\n\n var _this9 = (0, _emberBabel.possibleConstructorReturn)(this, _DefaultResolverAppli3.call(this));\n\n _this9._originalLookup = _environment.context.lookup;\n _this9._originalInfo = (0, _debug.getDebugFunction)('info');\n return _this9;\n }\n\n _class3.prototype.beforeEach = function beforeEach() {\n var _this10 = this;\n\n this.runTask(function () {\n return _this10.createApplication();\n });\n return this.visit('/');\n };\n\n _class3.prototype.teardown = function teardown() {\n (0, _debug.setDebugFunction)('info', this._originalInfo);\n _environment.context.lookup = this._originalLookup;\n _DefaultResolverAppli3.prototype.teardown.call(this);\n };\n\n _class3.prototype['@test the default resolver logs hits if \\'LOG_RESOLVER\\' is set'] = function (assert) {\n if (EmberDev && EmberDev.runningProdBuild) {\n assert.ok(true, 'Logging does not occur in production builds');\n return;\n }\n\n assert.expect(3);\n\n this.application.LOG_RESOLVER = true;\n this.application.ScoobyDoo = _runtime.Object.extend();\n this.application.toString = function () {\n return 'App';\n };\n\n (0, _debug.setDebugFunction)('info', function (symbol, name, padding, lookupDescription) {\n assert.equal(symbol, '[✓]', 'proper symbol is printed when a module is found');\n assert.equal(name, 'doo:scooby', 'proper lookup value is logged');\n assert.equal(lookupDescription, 'App.ScoobyDoo');\n });\n\n this.applicationInstance.resolveRegistration('doo:scooby');\n };\n\n _class3.prototype['@test the default resolver logs misses if \\'LOG_RESOLVER\\' is set'] = function (assert) {\n if (EmberDev && EmberDev.runningProdBuild) {\n assert.ok(true, 'Logging does not occur in production builds');\n return;\n }\n\n assert.expect(3);\n\n this.application.LOG_RESOLVER = true;\n this.application.toString = function () {\n return 'App';\n };\n\n (0, _debug.setDebugFunction)('info', function (symbol, name, padding, lookupDescription) {\n assert.equal(symbol, '[ ]', 'proper symbol is printed when a module is not found');\n assert.equal(name, 'doo:scooby', 'proper lookup value is logged');\n assert.equal(lookupDescription, 'App.ScoobyDoo');\n });\n\n this.applicationInstance.resolveRegistration('doo:scooby');\n };\n\n _class3.prototype['@test doesn\\'t log without LOG_RESOLVER'] = function (assert) {\n if (EmberDev && EmberDev.runningProdBuild) {\n assert.ok(true, 'Logging does not occur in production builds');\n return;\n }\n\n var infoCount = 0;\n\n this.application.ScoobyDoo = _runtime.Object.extend();\n\n (0, _debug.setDebugFunction)('info', function () {\n return infoCount = infoCount + 1;\n });\n\n this.applicationInstance.resolveRegistration('doo:scooby');\n this.applicationInstance.resolveRegistration('doo:scrappy');\n assert.equal(infoCount, 0, 'console.info should not be called if LOG_RESOLVER is not set');\n };\n\n return _class3;\n }(_internalTestHelpers.DefaultResolverApplicationTestCase));\n});","enifed('@ember/application/tests/dependency_injection/normalization_test', ['ember-babel', '@ember/runloop', '@ember/application', 'internal-test-helpers'], function (_emberBabel, _runloop, _application, _internalTestHelpers) {\n 'use strict';\n\n var application = void 0,\n registry = void 0;\n\n (0, _internalTestHelpers.moduleFor)('Application Dependency Injection - normalize', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.call(this));\n\n application = (0, _runloop.run)(_application.default, 'create');\n registry = application.__registry__;\n return _this;\n }\n\n _class.prototype.teardown = function teardown() {\n _TestCase.prototype.teardown.call(this);\n (0, _runloop.run)(application, 'destroy');\n application = undefined;\n registry = undefined;\n };\n\n _class.prototype['@test normalization'] = function testNormalization(assert) {\n assert.ok(registry.normalize, 'registry#normalize is present');\n\n assert.equal(registry.normalize('foo:bar'), 'foo:bar');\n\n assert.equal(registry.normalize('controller:posts'), 'controller:posts');\n assert.equal(registry.normalize('controller:posts_index'), 'controller:postsIndex');\n assert.equal(registry.normalize('controller:posts.index'), 'controller:postsIndex');\n assert.equal(registry.normalize('controller:posts-index'), 'controller:postsIndex');\n assert.equal(registry.normalize('controller:posts.post.index'), 'controller:postsPostIndex');\n assert.equal(registry.normalize('controller:posts_post.index'), 'controller:postsPostIndex');\n assert.equal(registry.normalize('controller:posts.post_index'), 'controller:postsPostIndex');\n assert.equal(registry.normalize('controller:posts.post-index'), 'controller:postsPostIndex');\n assert.equal(registry.normalize('controller:postsIndex'), 'controller:postsIndex');\n assert.equal(registry.normalize('controller:blogPosts.index'), 'controller:blogPostsIndex');\n assert.equal(registry.normalize('controller:blog/posts.index'), 'controller:blog/postsIndex');\n assert.equal(registry.normalize('controller:blog/posts-index'), 'controller:blog/postsIndex');\n assert.equal(registry.normalize('controller:blog/posts.post.index'), 'controller:blog/postsPostIndex');\n assert.equal(registry.normalize('controller:blog/posts_post.index'), 'controller:blog/postsPostIndex');\n assert.equal(registry.normalize('controller:blog/posts_post-index'), 'controller:blog/postsPostIndex');\n\n assert.equal(registry.normalize('template:blog/posts_index'), 'template:blog/posts_index');\n };\n\n _class.prototype['@test normalization is indempotent'] = function testNormalizationIsIndempotent(assert) {\n var examples = ['controller:posts', 'controller:posts.post.index', 'controller:blog/posts.post_index', 'template:foo_bar'];\n\n examples.forEach(function (example) {\n assert.equal(registry.normalize(registry.normalize(example)), registry.normalize(example));\n });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/application/tests/dependency_injection/to_string_test', ['ember-babel', '@ember/polyfills', '@ember/-internals/utils', '@ember/-internals/runtime', 'internal-test-helpers'], function (_emberBabel, _polyfills, _utils, _runtime, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Application Dependency Injection - DefaultResolver#toString', function (_DefaultResolverAppli) {\n (0, _emberBabel.inherits)(_class, _DefaultResolverAppli);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _DefaultResolverAppli.call(this));\n\n _this.runTask(function () {\n return _this.createApplication();\n });\n _this.application.Post = _runtime.Object.extend();\n return _this;\n }\n\n _class.prototype.beforeEach = function beforeEach() {\n return this.visit('/');\n };\n\n _class.prototype['@test factories'] = function testFactories(assert) {\n var PostFactory = this.applicationInstance.factoryFor('model:post').class;\n assert.equal(PostFactory.toString(), 'TestApp.Post', 'expecting the model to be post');\n };\n\n _class.prototype['@test instances'] = function testInstances(assert) {\n var post = this.applicationInstance.lookup('model:post');\n var guid = (0, _utils.guidFor)(post);\n\n assert.equal(post.toString(), '', 'expecting the model to be post');\n };\n\n return _class;\n }(_internalTestHelpers.DefaultResolverApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Application Dependency Injection - Resolver#toString', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class2, _ApplicationTestCase);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n }\n\n _class2.prototype.beforeEach = function beforeEach() {\n return this.visit('/');\n };\n\n _class2.prototype['@test toString called on a resolver'] = function testToStringCalledOnAResolver(assert) {\n this.add('model:peter', _runtime.Object.extend());\n\n var peter = this.applicationInstance.lookup('model:peter');\n var guid = (0, _utils.guidFor)(peter);\n assert.equal(peter.toString(), '', 'expecting the supermodel to be peter');\n };\n\n (0, _emberBabel.createClass)(_class2, [{\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_ApplicationTestCase.prototype.applicationOptions, {\n Resolver: function (_ModuleBasedTestResol) {\n (0, _emberBabel.inherits)(Resolver, _ModuleBasedTestResol);\n\n function Resolver() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ModuleBasedTestResol.apply(this, arguments));\n }\n\n Resolver.prototype.makeToString = function makeToString(_, fullName) {\n return fullName;\n };\n\n return Resolver;\n }(_internalTestHelpers.ModuleBasedTestResolver)\n });\n }\n }]);\n\n return _class2;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('@ember/application/tests/dependency_injection_test', ['ember-babel', '@ember/-internals/environment', '@ember/runloop', '@ember/-internals/runtime', '@ember/application', 'internal-test-helpers'], function (_emberBabel, _environment, _runloop, _runtime, _application, _internalTestHelpers) {\n 'use strict';\n\n var originalLookup = _environment.context.lookup;\n var registry = void 0,\n locator = void 0,\n application = void 0;\n\n (0, _internalTestHelpers.moduleFor)('Application Dependency Injection', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.call(this));\n\n application = (0, _runloop.run)(_application.default, 'create');\n\n application.Person = _runtime.Object.extend({});\n application.Orange = _runtime.Object.extend({});\n application.Email = _runtime.Object.extend({});\n application.User = _runtime.Object.extend({});\n application.PostIndexController = _runtime.Object.extend({});\n\n application.register('model:person', application.Person, {\n singleton: false\n });\n application.register('model:user', application.User, {\n singleton: false\n });\n application.register('fruit:favorite', application.Orange);\n application.register('communication:main', application.Email, {\n singleton: false\n });\n application.register('controller:postIndex', application.PostIndexController, {\n singleton: true\n });\n\n registry = application.__registry__;\n locator = application.__container__;\n\n _environment.context.lookup = {};\n return _this;\n }\n\n _class.prototype.teardown = function teardown() {\n _TestCase.prototype.teardown.call(this);\n (0, _runloop.run)(application, 'destroy');\n registry = application = locator = null;\n _environment.context.lookup = originalLookup;\n };\n\n _class.prototype['@test container lookup is normalized'] = function testContainerLookupIsNormalized(assert) {\n var dotNotationController = locator.lookup('controller:post.index');\n var camelCaseController = locator.lookup('controller:postIndex');\n\n assert.ok(dotNotationController instanceof application.PostIndexController);\n assert.ok(camelCaseController instanceof application.PostIndexController);\n\n assert.equal(dotNotationController, camelCaseController);\n };\n\n _class.prototype['@test registered entities can be looked up later'] = function testRegisteredEntitiesCanBeLookedUpLater(assert) {\n assert.equal(registry.resolve('model:person'), application.Person);\n assert.equal(registry.resolve('model:user'), application.User);\n assert.equal(registry.resolve('fruit:favorite'), application.Orange);\n assert.equal(registry.resolve('communication:main'), application.Email);\n assert.equal(registry.resolve('controller:postIndex'), application.PostIndexController);\n\n assert.equal(locator.lookup('fruit:favorite'), locator.lookup('fruit:favorite'), 'singleton lookup worked');\n assert.ok(locator.lookup('model:user') !== locator.lookup('model:user'), 'non-singleton lookup worked');\n };\n\n _class.prototype['@test injections'] = function testInjections(assert) {\n application.inject('model', 'fruit', 'fruit:favorite');\n application.inject('model:user', 'communication', 'communication:main');\n\n var user = locator.lookup('model:user');\n var person = locator.lookup('model:person');\n var fruit = locator.lookup('fruit:favorite');\n\n assert.equal(user.get('fruit'), fruit);\n assert.equal(person.get('fruit'), fruit);\n\n assert.ok(application.Email.detectInstance(user.get('communication')));\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/application/tests/initializers_test', ['ember-babel', '@ember/polyfills', 'internal-test-helpers', '@ember/application'], function (_emberBabel, _polyfills, _internalTestHelpers, _application) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Application initializers', function (_AutobootApplicationT) {\n (0, _emberBabel.inherits)(_class, _AutobootApplicationT);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AutobootApplicationT.apply(this, arguments));\n }\n\n _class.prototype.createSecondApplication = function createSecondApplication(options) {\n var MyApplication = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _application.default;\n\n var myOptions = (0, _polyfills.assign)(this.applicationOptions, {\n rootElement: '#two'\n }, options);\n var secondApp = this.secondApp = MyApplication.create(myOptions);\n return secondApp;\n };\n\n _class.prototype.teardown = function teardown() {\n var _this2 = this;\n\n _AutobootApplicationT.prototype.teardown.call(this);\n\n if (this.secondApp) {\n this.runTask(function () {\n return _this2.secondApp.destroy();\n });\n }\n };\n\n _class.prototype['@test initializers require proper \\'name\\' and \\'initialize\\' properties'] = function () {\n var MyApplication = _application.default.extend();\n\n expectAssertion(function () {\n MyApplication.initializer({ name: 'initializer' });\n });\n\n expectAssertion(function () {\n MyApplication.initializer({\n initialize: function () {}\n });\n });\n };\n\n _class.prototype['@test initializers that throw errors cause the boot promise to reject with the error'] = function (assert) {\n var _this3 = this;\n\n assert.expect(2);\n\n var MyApplication = _application.default.extend();\n\n MyApplication.initializer({\n name: 'initializer',\n initialize: function () {\n throw new Error('boot failure');\n }\n });\n\n this.runTask(function () {\n _this3.createApplication({\n autoboot: false\n }, MyApplication);\n });\n\n var app = this.application;\n\n try {\n this.runTask(function () {\n app.boot().then(function () {\n assert.ok(false, 'The boot promise should not resolve when there is a boot error');\n }, function (error) {\n assert.ok(error instanceof Error, 'The boot promise should reject with an error');\n assert.equal(error.message, 'boot failure');\n });\n });\n } catch (error) {\n assert.ok(false, 'The boot method should not throw');\n throw error;\n }\n };\n\n _class.prototype['@test initializers are passed an App'] = function (assert) {\n var _this4 = this;\n\n var MyApplication = _application.default.extend();\n\n MyApplication.initializer({\n name: 'initializer',\n initialize: function (App) {\n assert.ok(App instanceof _application.default, 'initialize is passed an Application');\n }\n });\n\n this.runTask(function () {\n return _this4.createApplication({}, MyApplication);\n });\n };\n\n _class.prototype['@test initializers can be registered in a specified order'] = function (assert) {\n var _this5 = this;\n\n var order = [];\n var MyApplication = _application.default.extend();\n\n MyApplication.initializer({\n name: 'fourth',\n after: 'third',\n initialize: function () {\n order.push('fourth');\n }\n });\n\n MyApplication.initializer({\n name: 'second',\n after: 'first',\n before: 'third',\n initialize: function () {\n order.push('second');\n }\n });\n\n MyApplication.initializer({\n name: 'fifth',\n after: 'fourth',\n before: 'sixth',\n initialize: function () {\n order.push('fifth');\n }\n });\n\n MyApplication.initializer({\n name: 'first',\n before: 'second',\n initialize: function () {\n order.push('first');\n }\n });\n\n MyApplication.initializer({\n name: 'third',\n initialize: function () {\n order.push('third');\n }\n });\n\n MyApplication.initializer({\n name: 'sixth',\n initialize: function () {\n order.push('sixth');\n }\n });\n\n this.runTask(function () {\n return _this5.createApplication({}, MyApplication);\n });\n\n assert.deepEqual(order, ['first', 'second', 'third', 'fourth', 'fifth', 'sixth']);\n };\n\n _class.prototype['@test initializers can be registered in a specified order as an array'] = function (assert) {\n var _this6 = this;\n\n var order = [];\n var MyApplication = _application.default.extend();\n\n MyApplication.initializer({\n name: 'third',\n initialize: function () {\n order.push('third');\n }\n });\n\n MyApplication.initializer({\n name: 'second',\n after: 'first',\n before: ['third', 'fourth'],\n initialize: function () {\n order.push('second');\n }\n });\n\n MyApplication.initializer({\n name: 'fourth',\n after: ['second', 'third'],\n initialize: function () {\n order.push('fourth');\n }\n });\n\n MyApplication.initializer({\n name: 'fifth',\n after: 'fourth',\n before: 'sixth',\n initialize: function () {\n order.push('fifth');\n }\n });\n\n MyApplication.initializer({\n name: 'first',\n before: ['second'],\n initialize: function () {\n order.push('first');\n }\n });\n\n MyApplication.initializer({\n name: 'sixth',\n initialize: function () {\n order.push('sixth');\n }\n });\n\n this.runTask(function () {\n return _this6.createApplication({}, MyApplication);\n });\n\n assert.deepEqual(order, ['first', 'second', 'third', 'fourth', 'fifth', 'sixth']);\n };\n\n _class.prototype['@test initializers can have multiple dependencies'] = function (assert) {\n var _this7 = this;\n\n var order = [];\n var MyApplication = _application.default.extend();\n var a = {\n name: 'a',\n before: 'b',\n initialize: function () {\n order.push('a');\n }\n };\n var b = {\n name: 'b',\n initialize: function () {\n order.push('b');\n }\n };\n var c = {\n name: 'c',\n after: 'b',\n initialize: function () {\n order.push('c');\n }\n };\n var afterB = {\n name: 'after b',\n after: 'b',\n initialize: function () {\n order.push('after b');\n }\n };\n var afterC = {\n name: 'after c',\n after: 'c',\n initialize: function () {\n order.push('after c');\n }\n };\n\n MyApplication.initializer(b);\n MyApplication.initializer(a);\n MyApplication.initializer(afterC);\n MyApplication.initializer(afterB);\n MyApplication.initializer(c);\n\n this.runTask(function () {\n return _this7.createApplication({}, MyApplication);\n });\n\n assert.ok(order.indexOf(a.name) < order.indexOf(b.name), 'a < b');\n assert.ok(order.indexOf(b.name) < order.indexOf(c.name), 'b < c');\n assert.ok(order.indexOf(b.name) < order.indexOf(afterB.name), 'b < afterB');\n assert.ok(order.indexOf(c.name) < order.indexOf(afterC.name), 'c < afterC');\n };\n\n _class.prototype['@test initializers set on Application subclasses are not shared between apps'] = function (assert) {\n var _this8 = this;\n\n var firstInitializerRunCount = 0;\n var secondInitializerRunCount = 0;\n var FirstApp = _application.default.extend();\n\n FirstApp.initializer({\n name: 'first',\n initialize: function () {\n firstInitializerRunCount++;\n }\n });\n\n var SecondApp = _application.default.extend();\n\n SecondApp.initializer({\n name: 'second',\n initialize: function () {\n secondInitializerRunCount++;\n }\n });\n\n this.runTask(function () {\n return _this8.createApplication({}, FirstApp);\n });\n\n assert.equal(firstInitializerRunCount, 1, 'first initializer only was run');\n assert.equal(secondInitializerRunCount, 0, 'first initializer only was run');\n\n this.runTask(function () {\n return _this8.createSecondApplication({}, SecondApp);\n });\n\n assert.equal(firstInitializerRunCount, 1, 'second initializer only was run');\n assert.equal(secondInitializerRunCount, 1, 'second initializer only was run');\n };\n\n _class.prototype['@test initializers are concatenated'] = function (assert) {\n var _this9 = this;\n\n var firstInitializerRunCount = 0;\n var secondInitializerRunCount = 0;\n var FirstApp = _application.default.extend();\n\n FirstApp.initializer({\n name: 'first',\n initialize: function () {\n firstInitializerRunCount++;\n }\n });\n\n var SecondApp = FirstApp.extend();\n SecondApp.initializer({\n name: 'second',\n initialize: function () {\n secondInitializerRunCount++;\n }\n });\n\n this.runTask(function () {\n return _this9.createApplication({}, FirstApp);\n });\n\n assert.equal(firstInitializerRunCount, 1, 'first initializer only was run when base class created');\n assert.equal(secondInitializerRunCount, 0, 'first initializer only was run when base class created');\n\n firstInitializerRunCount = 0;\n this.runTask(function () {\n return _this9.createSecondApplication({}, SecondApp);\n });\n\n assert.equal(firstInitializerRunCount, 1, 'first initializer was run when subclass created');\n assert.equal(secondInitializerRunCount, 1, 'second initializers was run when subclass created');\n };\n\n _class.prototype['@test initializers are per-app'] = function (assert) {\n assert.expect(2);\n\n var FirstApp = _application.default.extend();\n\n FirstApp.initializer({\n name: 'abc',\n initialize: function () {}\n });\n\n expectAssertion(function () {\n FirstApp.initializer({\n name: 'abc',\n initialize: function () {}\n });\n });\n\n var SecondApp = _application.default.extend();\n SecondApp.instanceInitializer({\n name: 'abc',\n initialize: function () {}\n });\n\n assert.ok(true, 'Two apps can have initializers named the same.');\n };\n\n _class.prototype['@test initializers are executed in their own context'] = function (assert) {\n var _this10 = this;\n\n assert.expect(1);\n var MyApplication = _application.default.extend();\n\n MyApplication.initializer({\n name: 'coolInitializer',\n myProperty: 'cool',\n initialize: function () {\n assert.equal(this.myProperty, 'cool', 'should have access to its own context');\n }\n });\n\n this.runTask(function () {\n return _this10.createApplication({}, MyApplication);\n });\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'fixture',\n get: function () {\n return '
ONE
\\n
TWO
\\n ';\n }\n }, {\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_AutobootApplicationT.prototype.applicationOptions, {\n rootElement: '#one'\n });\n }\n }]);\n\n return _class;\n }(_internalTestHelpers.AutobootApplicationTestCase));\n});","enifed('@ember/application/tests/instance_initializers_test', ['ember-babel', '@ember/polyfills', 'internal-test-helpers', '@ember/application/instance', '@ember/application'], function (_emberBabel, _polyfills, _internalTestHelpers, _instance, _application) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Application instance initializers', function (_AutobootApplicationT) {\n (0, _emberBabel.inherits)(_class, _AutobootApplicationT);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AutobootApplicationT.apply(this, arguments));\n }\n\n _class.prototype.createSecondApplication = function createSecondApplication(options) {\n var MyApplication = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _application.default;\n\n var myOptions = (0, _polyfills.assign)(this.applicationOptions, {\n rootElement: '#two'\n }, options);\n var secondApp = this.secondApp = MyApplication.create(myOptions);\n return secondApp;\n };\n\n _class.prototype.teardown = function teardown() {\n var _this2 = this;\n\n _AutobootApplicationT.prototype.teardown.call(this);\n\n if (this.secondApp) {\n this.runTask(function () {\n return _this2.secondApp.destroy();\n });\n }\n };\n\n _class.prototype['@test initializers require proper \\'name\\' and \\'initialize\\' properties'] = function () {\n var _this3 = this;\n\n var MyApplication = _application.default.extend();\n\n expectAssertion(function () {\n MyApplication.instanceInitializer({ name: 'initializer' });\n });\n\n expectAssertion(function () {\n MyApplication.instanceInitializer({\n initialize: function () {}\n });\n });\n\n this.runTask(function () {\n return _this3.createApplication({}, MyApplication);\n });\n };\n\n _class.prototype['@test initializers are passed an app instance'] = function (assert) {\n var _this4 = this;\n\n var MyApplication = _application.default.extend();\n\n MyApplication.instanceInitializer({\n name: 'initializer',\n initialize: function (instance) {\n assert.ok(instance instanceof _instance.default, 'initialize is passed an application instance');\n }\n });\n\n this.runTask(function () {\n return _this4.createApplication({}, MyApplication);\n });\n };\n\n _class.prototype['@test initializers can be registered in a specified order'] = function (assert) {\n var _this5 = this;\n\n var order = [];\n var MyApplication = _application.default.extend();\n\n MyApplication.instanceInitializer({\n name: 'fourth',\n after: 'third',\n initialize: function () {\n order.push('fourth');\n }\n });\n\n MyApplication.instanceInitializer({\n name: 'second',\n after: 'first',\n before: 'third',\n initialize: function () {\n order.push('second');\n }\n });\n\n MyApplication.instanceInitializer({\n name: 'fifth',\n after: 'fourth',\n before: 'sixth',\n initialize: function () {\n order.push('fifth');\n }\n });\n\n MyApplication.instanceInitializer({\n name: 'first',\n before: 'second',\n initialize: function () {\n order.push('first');\n }\n });\n\n MyApplication.instanceInitializer({\n name: 'third',\n initialize: function () {\n order.push('third');\n }\n });\n\n MyApplication.instanceInitializer({\n name: 'sixth',\n initialize: function () {\n order.push('sixth');\n }\n });\n\n this.runTask(function () {\n return _this5.createApplication({}, MyApplication);\n });\n\n assert.deepEqual(order, ['first', 'second', 'third', 'fourth', 'fifth', 'sixth']);\n };\n\n _class.prototype['@test initializers can be registered in a specified order as an array'] = function (assert) {\n var _this6 = this;\n\n var order = [];\n var MyApplication = _application.default.extend();\n\n MyApplication.instanceInitializer({\n name: 'third',\n initialize: function () {\n order.push('third');\n }\n });\n\n MyApplication.instanceInitializer({\n name: 'second',\n after: 'first',\n before: ['third', 'fourth'],\n initialize: function () {\n order.push('second');\n }\n });\n\n MyApplication.instanceInitializer({\n name: 'fourth',\n after: ['second', 'third'],\n initialize: function () {\n order.push('fourth');\n }\n });\n\n MyApplication.instanceInitializer({\n name: 'fifth',\n after: 'fourth',\n before: 'sixth',\n initialize: function () {\n order.push('fifth');\n }\n });\n\n MyApplication.instanceInitializer({\n name: 'first',\n before: ['second'],\n initialize: function () {\n order.push('first');\n }\n });\n\n MyApplication.instanceInitializer({\n name: 'sixth',\n initialize: function () {\n order.push('sixth');\n }\n });\n\n this.runTask(function () {\n return _this6.createApplication({}, MyApplication);\n });\n\n assert.deepEqual(order, ['first', 'second', 'third', 'fourth', 'fifth', 'sixth']);\n };\n\n _class.prototype['@test initializers can have multiple dependencies'] = function (assert) {\n var _this7 = this;\n\n var order = [];\n var MyApplication = _application.default.extend();\n var a = {\n name: 'a',\n before: 'b',\n initialize: function () {\n order.push('a');\n }\n };\n var b = {\n name: 'b',\n initialize: function () {\n order.push('b');\n }\n };\n var c = {\n name: 'c',\n after: 'b',\n initialize: function () {\n order.push('c');\n }\n };\n var afterB = {\n name: 'after b',\n after: 'b',\n initialize: function () {\n order.push('after b');\n }\n };\n var afterC = {\n name: 'after c',\n after: 'c',\n initialize: function () {\n order.push('after c');\n }\n };\n\n MyApplication.instanceInitializer(b);\n MyApplication.instanceInitializer(a);\n MyApplication.instanceInitializer(afterC);\n MyApplication.instanceInitializer(afterB);\n MyApplication.instanceInitializer(c);\n\n this.runTask(function () {\n return _this7.createApplication({}, MyApplication);\n });\n\n assert.ok(order.indexOf(a.name) < order.indexOf(b.name), 'a < b');\n assert.ok(order.indexOf(b.name) < order.indexOf(c.name), 'b < c');\n assert.ok(order.indexOf(b.name) < order.indexOf(afterB.name), 'b < afterB');\n assert.ok(order.indexOf(c.name) < order.indexOf(afterC.name), 'c < afterC');\n };\n\n _class.prototype['@test initializers set on Application subclasses should not be shared between apps'] = function (assert) {\n var _this8 = this;\n\n var firstInitializerRunCount = 0;\n var secondInitializerRunCount = 0;\n var FirstApp = _application.default.extend();\n\n FirstApp.instanceInitializer({\n name: 'first',\n initialize: function () {\n firstInitializerRunCount++;\n }\n });\n\n var SecondApp = _application.default.extend();\n SecondApp.instanceInitializer({\n name: 'second',\n initialize: function () {\n secondInitializerRunCount++;\n }\n });\n\n this.runTask(function () {\n return _this8.createApplication({}, FirstApp);\n });\n\n assert.equal(firstInitializerRunCount, 1, 'first initializer only was run');\n assert.equal(secondInitializerRunCount, 0, 'first initializer only was run');\n\n this.runTask(function () {\n return _this8.createSecondApplication({}, SecondApp);\n });\n\n assert.equal(firstInitializerRunCount, 1, 'second initializer only was run');\n assert.equal(secondInitializerRunCount, 1, 'second initializer only was run');\n };\n\n _class.prototype['@test initializers are concatenated'] = function (assert) {\n var _this9 = this;\n\n var firstInitializerRunCount = 0;\n var secondInitializerRunCount = 0;\n var FirstApp = _application.default.extend();\n\n FirstApp.instanceInitializer({\n name: 'first',\n initialize: function () {\n firstInitializerRunCount++;\n }\n });\n\n var SecondApp = FirstApp.extend();\n SecondApp.instanceInitializer({\n name: 'second',\n initialize: function () {\n secondInitializerRunCount++;\n }\n });\n\n this.runTask(function () {\n return _this9.createApplication({}, FirstApp);\n });\n\n assert.equal(firstInitializerRunCount, 1, 'first initializer only was run when base class created');\n assert.equal(secondInitializerRunCount, 0, 'first initializer only was run when base class created');\n\n firstInitializerRunCount = 0;\n this.runTask(function () {\n return _this9.createSecondApplication({}, SecondApp);\n });\n\n assert.equal(firstInitializerRunCount, 1, 'first initializer was run when subclass created');\n assert.equal(secondInitializerRunCount, 1, 'second initializers was run when subclass created');\n };\n\n _class.prototype['@test initializers are per-app'] = function (assert) {\n var _this10 = this;\n\n assert.expect(2);\n\n var FirstApp = _application.default.extend();\n FirstApp.instanceInitializer({\n name: 'abc',\n initialize: function () {}\n });\n\n expectAssertion(function () {\n FirstApp.instanceInitializer({\n name: 'abc',\n initialize: function () {}\n });\n });\n\n this.runTask(function () {\n return _this10.createApplication({}, FirstApp);\n });\n\n var SecondApp = _application.default.extend();\n SecondApp.instanceInitializer({\n name: 'abc',\n initialize: function () {}\n });\n\n this.runTask(function () {\n return _this10.createSecondApplication({}, SecondApp);\n });\n\n assert.ok(true, 'Two apps can have initializers named the same.');\n };\n\n _class.prototype['@test initializers are run before ready hook'] = function (assert) {\n var _this11 = this;\n\n assert.expect(2);\n\n var MyApplication = _application.default.extend({\n ready: function () {\n assert.ok(true, 'ready is called');\n readyWasCalled = false;\n }\n });\n var readyWasCalled = false;\n\n MyApplication.instanceInitializer({\n name: 'initializer',\n initialize: function () {\n assert.ok(!readyWasCalled, 'ready is not yet called');\n }\n });\n\n this.runTask(function () {\n return _this11.createApplication({}, MyApplication);\n });\n };\n\n _class.prototype['@test initializers are executed in their own context'] = function (assert) {\n var _this12 = this;\n\n assert.expect(1);\n\n var MyApplication = _application.default.extend();\n\n MyApplication.instanceInitializer({\n name: 'coolInitializer',\n myProperty: 'cool',\n initialize: function () {\n assert.equal(this.myProperty, 'cool', 'should have access to its own context');\n }\n });\n\n this.runTask(function () {\n return _this12.createApplication({}, MyApplication);\n });\n };\n\n _class.prototype['@test initializers get an instance on app reset'] = function (assert) {\n var _this13 = this;\n\n assert.expect(2);\n\n var MyApplication = _application.default.extend();\n\n MyApplication.instanceInitializer({\n name: 'giveMeAnInstance',\n initialize: function (instance) {\n assert.ok(!!instance, 'Initializer got an instance');\n }\n });\n\n this.runTask(function () {\n return _this13.createApplication({}, MyApplication);\n });\n\n this.runTask(function () {\n return _this13.application.reset();\n });\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'fixture',\n get: function () {\n return '
ONE
\\n
TWO
\\n ';\n }\n }, {\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_AutobootApplicationT.prototype.applicationOptions, {\n rootElement: '#one'\n });\n }\n }]);\n\n return _class;\n }(_internalTestHelpers.AutobootApplicationTestCase));\n});","enifed('@ember/application/tests/lazy_load_test', ['ember-babel', '@ember/runloop', '@ember/application', 'internal-test-helpers'], function (_emberBabel, _runloop, _application, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Lazy Loading', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.afterEach = function afterEach() {\n var keys = Object.keys(_application._loaded);\n for (var i = 0; i < keys.length; i++) {\n delete _application._loaded[keys[i]];\n }\n };\n\n _class.prototype['@test if a load hook is registered, it is executed when runLoadHooks are exected'] = function testIfALoadHookIsRegisteredItIsExecutedWhenRunLoadHooksAreExected(assert) {\n var count = 0;\n\n (0, _runloop.run)(function () {\n (0, _application.onLoad)('__test_hook__', function (object) {\n count += object;\n });\n });\n\n (0, _runloop.run)(function () {\n (0, _application.runLoadHooks)('__test_hook__', 1);\n });\n\n assert.equal(count, 1, 'the object was passed into the load hook');\n };\n\n _class.prototype['@test if runLoadHooks was already run, it executes newly added hooks immediately'] = function testIfRunLoadHooksWasAlreadyRunItExecutesNewlyAddedHooksImmediately(assert) {\n var count = 0;\n (0, _runloop.run)(function () {\n (0, _application.onLoad)('__test_hook__', function (object) {\n return count += object;\n });\n });\n\n (0, _runloop.run)(function () {\n return (0, _application.runLoadHooks)('__test_hook__', 1);\n });\n\n count = 0;\n (0, _runloop.run)(function () {\n (0, _application.onLoad)('__test_hook__', function (object) {\n return count += object;\n });\n });\n\n assert.equal(count, 1, 'the original object was passed into the load hook');\n };\n\n _class.prototype[\"@test hooks in ENV.EMBER_LOAD_HOOKS['hookName'] get executed\"] = function testHooksInENVEMBER_LOAD_HOOKSHookNameGetExecuted(assert) {\n // Note that the necessary code to perform this test is run before\n // the Ember lib is loaded in tests/index.html\n\n (0, _runloop.run)(function () {\n (0, _application.runLoadHooks)('__before_ember_test_hook__', 1);\n });\n\n assert.equal(window.ENV.__test_hook_count__, 1, 'the object was passed into the load hook');\n };\n\n _class.prototype['@test load hooks trigger a custom event'] = function testLoadHooksTriggerACustomEvent(assert) {\n if (typeof window === 'object' && typeof window.dispatchEvent === 'function' && typeof CustomEvent === 'function') {\n var eventObject = 'super duper awesome events';\n\n window.addEventListener('__test_hook_for_events__', function (e) {\n assert.ok(true, 'custom event was fired');\n assert.equal(e.detail, eventObject, 'event details are provided properly');\n });\n\n (0, _runloop.run)(function () {\n (0, _application.runLoadHooks)('__test_hook_for_events__', eventObject);\n });\n } else {\n assert.expect(0);\n }\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/application/tests/logging_test', ['ember-babel', 'internal-test-helpers', '@ember/controller', '@ember/-internals/routing', '@ember/polyfills'], function (_emberBabel, _internalTestHelpers, _controller, _routing, _polyfills) {\n 'use strict';\n\n /*globals EmberDev */\n\n var LoggingApplicationTestCase = function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(LoggingApplicationTestCase, _ApplicationTestCase);\n\n function LoggingApplicationTestCase() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.call(this));\n\n _this.logs = {};\n\n /* eslint-disable no-console */\n _this._originalLogger = console.info;\n\n console.info = function (_, _ref) {\n var fullName = _ref.fullName;\n\n if (!_this.logs.hasOwnProperty(fullName)) {\n _this.logs[fullName] = 0;\n }\n /* eslint-ensable no-console */\n _this.logs[fullName]++;\n };\n\n _this.router.map(function () {\n this.route('posts', { resetNamespace: true });\n });\n return _this;\n }\n\n LoggingApplicationTestCase.prototype.teardown = function teardown() {\n /* eslint-disable no-console */\n console.info = this._originalLogger;\n /* eslint-enable no-console */\n _ApplicationTestCase.prototype.teardown.call(this);\n };\n\n return LoggingApplicationTestCase;\n }(_internalTestHelpers.ApplicationTestCase);\n\n (0, _internalTestHelpers.moduleFor)('Application with LOG_ACTIVE_GENERATION=true', function (_LoggingApplicationTe) {\n (0, _emberBabel.inherits)(_class, _LoggingApplicationTe);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _LoggingApplicationTe.apply(this, arguments));\n }\n\n _class.prototype['@test log class generation if logging enabled'] = function testLogClassGenerationIfLoggingEnabled(assert) {\n var _this3 = this;\n\n if (EmberDev && EmberDev.runningProdBuild) {\n assert.ok(true, 'Logging does not occur in production builds');\n return;\n }\n\n return this.visit('/posts').then(function () {\n assert.equal(Object.keys(_this3.logs).length, 4, 'expected logs');\n });\n };\n\n _class.prototype['@test actively generated classes get logged'] = function testActivelyGeneratedClassesGetLogged(assert) {\n var _this4 = this;\n\n if (EmberDev && EmberDev.runningProdBuild) {\n assert.ok(true, 'Logging does not occur in production builds');\n return;\n }\n\n return this.visit('/posts').then(function () {\n assert.equal(_this4.logs['controller:application'], 1, 'expected: ApplicationController was generated');\n assert.equal(_this4.logs['controller:posts'], 1, 'expected: PostsController was generated');\n\n assert.equal(_this4.logs['route:application'], 1, 'expected: ApplicationRoute was generated');\n assert.equal(_this4.logs['route:posts'], 1, 'expected: PostsRoute was generated');\n });\n };\n\n _class.prototype['@test predefined classes do not get logged'] = function testPredefinedClassesDoNotGetLogged(assert) {\n var _this5 = this;\n\n this.add('controller:application', _controller.default.extend());\n this.add('controller:posts', _controller.default.extend());\n this.add('route:application', _routing.Route.extend());\n this.add('route:posts', _routing.Route.extend());\n\n return this.visit('/posts').then(function () {\n assert.ok(!_this5.logs['controller:application'], 'did not expect: ApplicationController was generated');\n assert.ok(!_this5.logs['controller:posts'], 'did not expect: PostsController was generated');\n\n assert.ok(!_this5.logs['route:application'], 'did not expect: ApplicationRoute was generated');\n assert.ok(!_this5.logs['route:posts'], 'did not expect: PostsRoute was generated');\n });\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_LoggingApplicationTe.prototype.applicationOptions, {\n LOG_ACTIVE_GENERATION: true\n });\n }\n }]);\n\n return _class;\n }(LoggingApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Application when LOG_ACTIVE_GENERATION=false', function (_LoggingApplicationTe2) {\n (0, _emberBabel.inherits)(_class2, _LoggingApplicationTe2);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _LoggingApplicationTe2.apply(this, arguments));\n }\n\n _class2.prototype['@test do NOT log class generation if logging disabled'] = function (assert) {\n var _this7 = this;\n\n return this.visit('/posts').then(function () {\n assert.equal(Object.keys(_this7.logs).length, 0, 'expected logs');\n });\n };\n\n (0, _emberBabel.createClass)(_class2, [{\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_LoggingApplicationTe2.prototype.applicationOptions, {\n LOG_ACTIVE_GENERATION: false\n });\n }\n }]);\n\n return _class2;\n }(LoggingApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Application with LOG_VIEW_LOOKUPS=true', function (_LoggingApplicationTe3) {\n (0, _emberBabel.inherits)(_class3, _LoggingApplicationTe3);\n\n function _class3() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _LoggingApplicationTe3.apply(this, arguments));\n }\n\n _class3.prototype['@test log when template and view are missing when flag is active'] = function (assert) {\n var _this9 = this;\n\n if (EmberDev && EmberDev.runningProdBuild) {\n assert.ok(true, 'Logging does not occur in production builds');\n return;\n }\n\n this.addTemplate('application', '{{outlet}}');\n\n return this.visit('/').then(function () {\n return _this9.visit('/posts');\n }).then(function () {\n assert.equal(_this9.logs['template:application'], undefined, 'expected: Should not log template:application since it exists.');\n assert.equal(_this9.logs['template:index'], 1, 'expected: Could not find \"index\" template or view.');\n assert.equal(_this9.logs['template:posts'], 1, 'expected: Could not find \"posts\" template or view.');\n });\n };\n\n (0, _emberBabel.createClass)(_class3, [{\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_LoggingApplicationTe3.prototype.applicationOptions, {\n LOG_VIEW_LOOKUPS: true\n });\n }\n }]);\n\n return _class3;\n }(LoggingApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Application with LOG_VIEW_LOOKUPS=false', function (_LoggingApplicationTe4) {\n (0, _emberBabel.inherits)(_class4, _LoggingApplicationTe4);\n\n function _class4() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _LoggingApplicationTe4.apply(this, arguments));\n }\n\n _class4.prototype['@test do not log when template and view are missing when flag is not true'] = function (assert) {\n var _this11 = this;\n\n return this.visit('/posts').then(function () {\n assert.equal(Object.keys(_this11.logs).length, 0, 'expected no logs');\n });\n };\n\n _class4.prototype['@test do not log which views are used with templates when flag is not true'] = function (assert) {\n var _this12 = this;\n\n return this.visit('/posts').then(function () {\n assert.equal(Object.keys(_this12.logs).length, 0, 'expected no logs');\n });\n };\n\n (0, _emberBabel.createClass)(_class4, [{\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_LoggingApplicationTe4.prototype.applicationOptions, {\n LOG_VIEW_LOOKUPS: false\n });\n }\n }]);\n\n return _class4;\n }(LoggingApplicationTestCase));\n});","enifed('@ember/application/tests/readiness_test', ['ember-babel', 'internal-test-helpers', '@ember/runloop', '@ember/application'], function (_emberBabel, _internalTestHelpers, _runloop, _application) {\n 'use strict';\n\n var jQuery = void 0,\n application = void 0,\n Application = void 0;\n var readyWasCalled = void 0,\n domReady = void 0,\n readyCallbacks = void 0;\n\n // We are using a small mock of jQuery because jQuery is third-party code with\n // very well-defined semantics, and we want to confirm that a jQuery stub run\n // in a more minimal server environment that implements this behavior will be\n // sufficient for Ember's requirements.\n (0, _internalTestHelpers.moduleFor)('Application readiness', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.call(this));\n\n readyWasCalled = 0;\n readyCallbacks = [];\n\n var jQueryInstance = {\n ready: function (callback) {\n readyCallbacks.push(callback);\n if (jQuery.isReady) {\n domReady();\n }\n }\n };\n\n jQuery = function () {\n return jQueryInstance;\n };\n jQuery.isReady = false;\n\n var domReadyCalled = 0;\n domReady = function () {\n if (domReadyCalled !== 0) {\n return;\n }\n domReadyCalled++;\n for (var i = 0; i < readyCallbacks.length; i++) {\n readyCallbacks[i]();\n }\n };\n\n Application = _application.default.extend({\n $: jQuery,\n\n ready: function () {\n readyWasCalled++;\n }\n });\n return _this;\n }\n\n _class.prototype.teardown = function teardown() {\n if (application) {\n (0, _runloop.run)(function () {\n return application.destroy();\n });\n jQuery = readyCallbacks = domReady = Application = application = undefined;\n }\n };\n\n // These tests are confirming that if the callbacks passed into jQuery's ready hook is called\n // synchronously during the application's initialization, we get the same behavior as if\n // it was triggered after initialization.\n\n _class.prototype[\"@test Application's ready event is called right away if jQuery is already ready\"] = function testApplicationSReadyEventIsCalledRightAwayIfJQueryIsAlreadyReady(assert) {\n jQuery.isReady = true;\n\n (0, _runloop.run)(function () {\n application = Application.create({ router: false });\n\n assert.equal(readyWasCalled, 0, 'ready is not called until later');\n });\n\n assert.equal(readyWasCalled, 1, 'ready was called');\n\n domReady();\n\n assert.equal(readyWasCalled, 1, \"application's ready was not called again\");\n };\n\n _class.prototype[\"@test Application's ready event is called after the document becomes ready\"] = function testApplicationSReadyEventIsCalledAfterTheDocumentBecomesReady(assert) {\n (0, _runloop.run)(function () {\n application = Application.create({ router: false });\n });\n\n assert.equal(readyWasCalled, 0, \"ready wasn't called yet\");\n\n domReady();\n\n assert.equal(readyWasCalled, 1, 'ready was called now that DOM is ready');\n };\n\n _class.prototype[\"@test Application's ready event can be deferred by other components\"] = function testApplicationSReadyEventCanBeDeferredByOtherComponents(assert) {\n (0, _runloop.run)(function () {\n application = Application.create({ router: false });\n application.deferReadiness();\n });\n\n assert.equal(readyWasCalled, 0, \"ready wasn't called yet\");\n\n domReady();\n\n assert.equal(readyWasCalled, 0, \"ready wasn't called yet\");\n\n (0, _runloop.run)(function () {\n application.advanceReadiness();\n assert.equal(readyWasCalled, 0);\n });\n\n assert.equal(readyWasCalled, 1, 'ready was called now all readiness deferrals are advanced');\n };\n\n _class.prototype[\"@test Application's ready event can be deferred by other components\"] = function testApplicationSReadyEventCanBeDeferredByOtherComponents(assert) {\n jQuery.isReady = false;\n\n (0, _runloop.run)(function () {\n application = Application.create({ router: false });\n application.deferReadiness();\n assert.equal(readyWasCalled, 0, \"ready wasn't called yet\");\n });\n\n domReady();\n\n assert.equal(readyWasCalled, 0, \"ready wasn't called yet\");\n\n (0, _runloop.run)(function () {\n application.advanceReadiness();\n });\n\n assert.equal(readyWasCalled, 1, 'ready was called now all readiness deferrals are advanced');\n\n expectAssertion(function () {\n application.deferReadiness();\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('@ember/application/tests/reset_test', ['ember-babel', '@ember/runloop', '@ember/-internals/metal', '@ember/controller', '@ember/-internals/routing', 'internal-test-helpers'], function (_emberBabel, _runloop, _metal, _controller, _routing, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Application - resetting', function (_AutobootApplicationT) {\n (0, _emberBabel.inherits)(_class, _AutobootApplicationT);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AutobootApplicationT.apply(this, arguments));\n }\n\n _class.prototype['@test Brings its own run-loop if not provided'] = function testBringsItsOwnRunLoopIfNotProvided(assert) {\n var _this2 = this;\n\n assert.expect(0);\n (0, _runloop.run)(function () {\n return _this2.createApplication();\n });\n this.application.reset();\n };\n\n _class.prototype['@test Does not bring its own run loop if one is already provided'] = function testDoesNotBringItsOwnRunLoopIfOneIsAlreadyProvided(assert) {\n var _this3 = this;\n\n assert.expect(3);\n\n var didBecomeReady = false;\n\n (0, _runloop.run)(function () {\n return _this3.createApplication();\n });\n\n (0, _runloop.run)(function () {\n _this3.application.ready = function () {\n didBecomeReady = true;\n };\n\n _this3.application.reset();\n\n _this3.application.deferReadiness();\n assert.ok(!didBecomeReady, 'app is not ready');\n });\n\n assert.ok(!didBecomeReady, 'app is not ready');\n (0, _runloop.run)(this.application, 'advanceReadiness');\n assert.ok(didBecomeReady, 'app is ready');\n };\n\n _class.prototype['@test When an application is reset, new instances of controllers are generated'] = function testWhenAnApplicationIsResetNewInstancesOfControllersAreGenerated(assert) {\n var _this4 = this;\n\n (0, _runloop.run)(function () {\n _this4.createApplication();\n _this4.add('controller:academic', _controller.default.extend());\n });\n\n var firstController = this.applicationInstance.lookup('controller:academic');\n var secondController = this.applicationInstance.lookup('controller:academic');\n\n this.application.reset();\n\n var thirdController = this.applicationInstance.lookup('controller:academic');\n\n assert.strictEqual(firstController, secondController, 'controllers looked up in succession should be the same instance');\n\n assert.ok(firstController.isDestroying, 'controllers are destroyed when their application is reset');\n\n assert.notStrictEqual(firstController, thirdController, 'controllers looked up after the application is reset should not be the same instance');\n };\n\n _class.prototype['@test When an application is reset, the eventDispatcher is destroyed and recreated'] = function testWhenAnApplicationIsResetTheEventDispatcherIsDestroyedAndRecreated(assert) {\n var _this5 = this;\n\n var eventDispatcherWasSetup = 0;\n var eventDispatcherWasDestroyed = 0;\n\n var mockEventDispatcher = {\n setup: function () {\n eventDispatcherWasSetup++;\n },\n destroy: function () {\n eventDispatcherWasDestroyed++;\n }\n };\n\n (0, _runloop.run)(function () {\n _this5.createApplication();\n _this5.add('event_dispatcher:main', {\n create: function () {\n return mockEventDispatcher;\n }\n });\n\n assert.equal(eventDispatcherWasSetup, 0);\n assert.equal(eventDispatcherWasDestroyed, 0);\n });\n\n assert.equal(eventDispatcherWasSetup, 1);\n assert.equal(eventDispatcherWasDestroyed, 0);\n\n this.application.reset();\n\n assert.equal(eventDispatcherWasDestroyed, 1);\n assert.equal(eventDispatcherWasSetup, 2, 'setup called after reset');\n };\n\n _class.prototype['@test When an application is reset, the router URL is reset to `/`'] = function testWhenAnApplicationIsResetTheRouterURLIsResetTo(assert) {\n var _this6 = this;\n\n (0, _runloop.run)(function () {\n _this6.createApplication();\n\n _this6.add('router:main', _routing.Router.extend({\n location: 'none'\n }));\n\n _this6.router.map(function () {\n this.route('one');\n this.route('two');\n });\n });\n\n var initialRouter = void 0,\n initialApplicationController = void 0;\n return this.visit('/one').then(function () {\n initialApplicationController = _this6.applicationInstance.lookup('controller:application');\n initialRouter = _this6.applicationInstance.lookup('router:main');\n var location = initialRouter.get('location');\n\n assert.equal(location.getURL(), '/one');\n assert.equal((0, _metal.get)(initialApplicationController, 'currentPath'), 'one');\n\n _this6.application.reset();\n\n return _this6.application._bootPromise;\n }).then(function () {\n var applicationController = _this6.applicationInstance.lookup('controller:application');\n assert.strictEqual(applicationController, undefined, 'application controller no longer exists');\n\n return _this6.visit('/one');\n }).then(function () {\n var applicationController = _this6.applicationInstance.lookup('controller:application');\n var router = _this6.applicationInstance.lookup('router:main');\n var location = router.get('location');\n\n assert.notEqual(initialRouter, router, 'a different router instance was created');\n assert.notEqual(initialApplicationController, applicationController, 'a different application controller is created');\n\n assert.equal(location.getURL(), '/one');\n assert.equal((0, _metal.get)(applicationController, 'currentPath'), 'one');\n });\n };\n\n _class.prototype['@test When an application with advance/deferReadiness is reset, the app does correctly become ready after reset'] = function testWhenAnApplicationWithAdvanceDeferReadinessIsResetTheAppDoesCorrectlyBecomeReadyAfterReset(assert) {\n var _this7 = this;\n\n var readyCallCount = 0;\n\n (0, _runloop.run)(function () {\n _this7.createApplication({\n ready: function () {\n readyCallCount++;\n }\n });\n\n _this7.application.deferReadiness();\n assert.equal(readyCallCount, 0, 'ready has not yet been called');\n });\n\n (0, _runloop.run)(this.application, 'advanceReadiness');\n\n assert.equal(readyCallCount, 1, 'ready was called once');\n\n this.application.reset();\n\n assert.equal(readyCallCount, 2, 'ready was called twice');\n };\n\n return _class;\n }(_internalTestHelpers.AutobootApplicationTestCase));\n});","enifed('@ember/application/tests/visit_test', ['ember-babel', 'internal-test-helpers', '@ember/service', '@ember/-internals/runtime', '@ember/runloop', '@ember/application', '@ember/application/instance', '@ember/engine', '@ember/-internals/routing', '@ember/-internals/glimmer', 'ember-template-compiler', '@ember/-internals/environment'], function (_emberBabel, _internalTestHelpers, _service, _runtime, _runloop, _application, _instance, _engine, _routing, _glimmer, _emberTemplateCompiler, _environment) {\n 'use strict';\n\n function expectAsyncError() {\n _runtime.RSVP.off('error');\n }\n\n (0, _internalTestHelpers.moduleFor)('Application - visit()', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n }\n\n _class.prototype.teardown = function teardown() {\n _runtime.RSVP.on('error', _runtime.onerrorDefault);\n _environment.ENV._APPLICATION_TEMPLATE_WRAPPER = false;\n _ApplicationTestCase.prototype.teardown.call(this);\n };\n\n _class.prototype.createApplication = function createApplication(options) {\n return _ApplicationTestCase.prototype.createApplication.call(this, options, _application.default.extend());\n };\n\n _class.prototype.assertEmptyFixture = function assertEmptyFixture(message) {\n this.assert.strictEqual(document.getElementById('qunit-fixture').children.length, 0, 'there are no elements in the fixture element ' + (message ? message : ''));\n };\n\n _class.prototype['@test does not add serialize-mode markers by default'] = function (assert) {\n var templateContent = '
Hi, Mom!
';\n this.addTemplate('index', templateContent);\n var rootElement = document.createElement('div');\n\n var bootOptions = {\n isBrowser: false,\n rootElement: rootElement\n };\n\n _environment.ENV._APPLICATION_TEMPLATE_WRAPPER = false;\n return this.visit('/', bootOptions).then(function () {\n assert.equal(rootElement.innerHTML, templateContent, 'without serialize flag renders as expected');\n });\n };\n\n _class.prototype['@test _renderMode: rehydration'] = function (assert) {\n var _this2 = this;\n\n assert.expect(2);\n\n var indexTemplate = '
Hi, Mom!
';\n this.addTemplate('index', indexTemplate);\n var rootElement = document.createElement('div');\n\n var bootOptions = {\n isBrowser: false,\n rootElement: rootElement,\n _renderMode: 'serialize'\n };\n\n _environment.ENV._APPLICATION_TEMPLATE_WRAPPER = false;\n\n return this.visit('/', bootOptions).then(function (instance) {\n assert.ok((0, _glimmer.isSerializationFirstNode)(instance.rootElement.firstChild), 'glimmer-vm comment node was not found');\n }).then(function () {\n return _this2.runTask(function () {\n _this2.applicationInstance.destroy();\n _this2.applicationInstance = null;\n });\n }).then(function () {\n bootOptions = {\n isBrowser: false,\n rootElement: rootElement,\n _renderMode: 'rehydrate'\n };\n\n _this2.application.visit('/', bootOptions).then(function (instance) {\n assert.equal(instance.rootElement.innerHTML, indexTemplate, 'was not properly rehydrated');\n });\n });\n };\n\n // This tests whether the application is \"autobooted\" by registering an\n // instance initializer and asserting it never gets run. Since this is\n // inherently testing that async behavior *doesn't* happen, we set a\n // 500ms timeout to verify that when autoboot is set to false, the\n // instance initializer that would normally get called on DOM ready\n // does not fire.\n\n\n _class.prototype['@test Applications with autoboot set to false do not autoboot'] = function (assert) {\n var _this3 = this;\n\n function delay(time) {\n return new _runtime.RSVP.Promise(function (resolve) {\n return (0, _runloop.later)(resolve, time);\n });\n }\n\n var appBooted = 0;\n var instanceBooted = 0;\n\n this.application.initializer({\n name: 'assert-no-autoboot',\n initialize: function () {\n appBooted++;\n }\n });\n\n this.application.instanceInitializer({\n name: 'assert-no-autoboot',\n initialize: function () {\n instanceBooted++;\n }\n });\n\n assert.ok(!this.applicationInstance, 'precond - no instance');\n assert.ok(appBooted === 0, 'precond - not booted');\n assert.ok(instanceBooted === 0, 'precond - not booted');\n\n // Continue after 500ms\n return delay(500).then(function () {\n assert.ok(appBooted === 0, '500ms elapsed without app being booted');\n assert.ok(instanceBooted === 0, '500ms elapsed without instances being booted');\n\n return _this3.runTask(function () {\n return _this3.application.boot();\n });\n }).then(function () {\n assert.ok(appBooted === 1, 'app should boot when manually calling `app.boot()`');\n assert.ok(instanceBooted === 0, 'no instances should be booted automatically when manually calling `app.boot()');\n });\n };\n\n _class.prototype['@test calling visit() on an app without first calling boot() should boot the app'] = function (assert) {\n var appBooted = 0;\n var instanceBooted = 0;\n\n this.application.initializer({\n name: 'assert-no-autoboot',\n initialize: function () {\n appBooted++;\n }\n });\n\n this.application.instanceInitializer({\n name: 'assert-no-autoboot',\n initialize: function () {\n instanceBooted++;\n }\n });\n\n return this.visit('/').then(function () {\n assert.ok(appBooted === 1, 'the app should be booted`');\n assert.ok(instanceBooted === 1, 'an instances should be booted');\n });\n };\n\n _class.prototype['@test calling visit() on an already booted app should not boot it again'] = function (assert) {\n var _this4 = this;\n\n var appBooted = 0;\n var instanceBooted = 0;\n\n this.application.initializer({\n name: 'assert-no-autoboot',\n initialize: function () {\n appBooted++;\n }\n });\n\n this.application.instanceInitializer({\n name: 'assert-no-autoboot',\n initialize: function () {\n instanceBooted++;\n }\n });\n\n return this.runTask(function () {\n return _this4.application.boot();\n }).then(function () {\n assert.ok(appBooted === 1, 'the app should be booted');\n assert.ok(instanceBooted === 0, 'no instances should be booted');\n\n return _this4.visit('/');\n }).then(function () {\n assert.ok(appBooted === 1, 'the app should not be booted again');\n assert.ok(instanceBooted === 1, 'an instance should be booted');\n\n /*\n * Destroy the instance.\n */\n return _this4.runTask(function () {\n _this4.applicationInstance.destroy();\n _this4.applicationInstance = null;\n });\n }).then(function () {\n /*\n * Visit on the application a second time. The application should remain\n * booted, but a new instance will be created.\n */\n return _this4.application.visit('/').then(function (instance) {\n _this4.applicationInstance = instance;\n });\n }).then(function () {\n assert.ok(appBooted === 1, 'the app should not be booted again');\n assert.ok(instanceBooted === 2, 'another instance should be booted');\n });\n };\n\n _class.prototype['@test visit() rejects on application boot failure'] = function (assert) {\n this.application.initializer({\n name: 'error',\n initialize: function () {\n throw new Error('boot failure');\n }\n });\n\n expectAsyncError();\n\n return this.visit('/').then(function () {\n assert.ok(false, 'It should not resolve the promise');\n }, function (error) {\n assert.ok(error instanceof Error, 'It should reject the promise with the boot error');\n assert.equal(error.message, 'boot failure');\n });\n };\n\n _class.prototype['@test visit() rejects on instance boot failure'] = function (assert) {\n this.application.instanceInitializer({\n name: 'error',\n initialize: function () {\n throw new Error('boot failure');\n }\n });\n\n expectAsyncError();\n\n return this.visit('/').then(function () {\n assert.ok(false, 'It should not resolve the promise');\n }, function (error) {\n assert.ok(error instanceof Error, 'It should reject the promise with the boot error');\n assert.equal(error.message, 'boot failure');\n });\n };\n\n _class.prototype['@test visit() follows redirects'] = function (assert) {\n this.router.map(function () {\n this.route('a');\n this.route('b', { path: '/b/:b' });\n this.route('c', { path: '/c/:c' });\n });\n\n this.add('route:a', _routing.Route.extend({\n afterModel: function () {\n this.replaceWith('b', 'zomg');\n }\n }));\n\n this.add('route:b', _routing.Route.extend({\n afterModel: function (params) {\n this.transitionTo('c', params.b);\n }\n }));\n\n /*\n * First call to `visit` is `this.application.visit` and returns the\n * applicationInstance.\n */\n return this.visit('/a').then(function (instance) {\n assert.ok(instance instanceof _instance.default, 'promise is resolved with an ApplicationInstance');\n assert.equal(instance.getURL(), '/c/zomg', 'It should follow all redirects');\n });\n };\n\n _class.prototype['@test visit() rejects if an error occurred during a transition'] = function (assert) {\n this.router.map(function () {\n this.route('a');\n this.route('b', { path: '/b/:b' });\n this.route('c', { path: '/c/:c' });\n });\n\n this.add('route:a', _routing.Route.extend({\n afterModel: function () {\n this.replaceWith('b', 'zomg');\n }\n }));\n\n this.add('route:b', _routing.Route.extend({\n afterModel: function (params) {\n this.transitionTo('c', params.b);\n }\n }));\n\n this.add('route:c', _routing.Route.extend({\n afterModel: function () {\n throw new Error('transition failure');\n }\n }));\n\n expectAsyncError();\n\n return this.visit('/a').then(function () {\n assert.ok(false, 'It should not resolve the promise');\n }, function (error) {\n assert.ok(error instanceof Error, 'It should reject the promise with the boot error');\n assert.equal(error.message, 'transition failure');\n });\n };\n\n _class.prototype['@test visit() chain'] = function (assert) {\n this.router.map(function () {\n this.route('a');\n this.route('b');\n this.route('c');\n });\n\n return this.visit('/').then(function (instance) {\n assert.ok(instance instanceof _instance.default, 'promise is resolved with an ApplicationInstance');\n assert.equal(instance.getURL(), '/');\n\n return instance.visit('/a');\n }).then(function (instance) {\n assert.ok(instance instanceof _instance.default, 'promise is resolved with an ApplicationInstance');\n assert.equal(instance.getURL(), '/a');\n\n return instance.visit('/b');\n }).then(function (instance) {\n assert.ok(instance instanceof _instance.default, 'promise is resolved with an ApplicationInstance');\n assert.equal(instance.getURL(), '/b');\n\n return instance.visit('/c');\n }).then(function (instance) {\n assert.ok(instance instanceof _instance.default, 'promise is resolved with an ApplicationInstance');\n assert.equal(instance.getURL(), '/c');\n });\n };\n\n _class.prototype['@test visit() returns a promise that resolves when the view has rendered'] = function (assert) {\n var _this5 = this;\n\n this.addTemplate('application', '

Hello world

');\n\n this.assertEmptyFixture();\n\n return this.visit('/').then(function (instance) {\n assert.ok(instance instanceof _instance.default, 'promise is resolved with an ApplicationInstance');\n assert.equal(_this5.element.textContent, 'Hello world', 'the application was rendered once the promise resolves');\n });\n };\n\n _class.prototype['@test visit() returns a promise that resolves without rendering when shouldRender is set to false'] = function (assert) {\n var _this6 = this;\n\n assert.expect(3);\n\n this.addTemplate('application', '

Hello world

');\n\n this.assertEmptyFixture();\n\n return this.visit('/', { shouldRender: false }).then(function (instance) {\n assert.ok(instance instanceof _instance.default, 'promise is resolved with an ApplicationInstance');\n\n _this6.assertEmptyFixture('after visit');\n });\n };\n\n _class.prototype['@test visit() renders a template when shouldRender is set to true'] = function (assert) {\n assert.expect(3);\n\n this.addTemplate('application', '

Hello world

');\n\n this.assertEmptyFixture();\n\n return this.visit('/', { shouldRender: true }).then(function (instance) {\n assert.ok(instance instanceof _instance.default, 'promise is resolved with an ApplicationInstance');\n assert.strictEqual(document.querySelector('#qunit-fixture').children.length, 1, 'there is 1 element in the fixture element after visit');\n });\n };\n\n _class.prototype['@test visit() returns a promise that resolves without rendering when shouldRender is set to false with Engines'] = function (assert) {\n var _this7 = this;\n\n assert.expect(3);\n\n this.router.map(function () {\n this.mount('blog');\n });\n\n this.addTemplate('application', '

Hello world

');\n\n // Register engine\n var BlogEngine = _engine.default.extend();\n this.add('engine:blog', BlogEngine);\n\n // Register engine route map\n var BlogMap = function () {};\n this.add('route-map:blog', BlogMap);\n\n this.assertEmptyFixture();\n\n return this.visit('/blog', { shouldRender: false }).then(function (instance) {\n assert.ok(instance instanceof _instance.default, 'promise is resolved with an ApplicationInstance');\n\n _this7.assertEmptyFixture('after visit');\n });\n };\n\n _class.prototype['@test visit() does not setup the event_dispatcher:main if isInteractive is false (with Engines) GH#15615'] = function (assert) {\n var _this8 = this;\n\n assert.expect(3);\n\n this.router.map(function () {\n this.mount('blog');\n });\n\n this.addTemplate('application', '

Hello world

{{outlet}}');\n this.add('event_dispatcher:main', {\n create: function () {\n throw new Error('should not happen!');\n }\n });\n\n // Register engine\n var BlogEngine = _engine.default.extend({\n init: function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this._super.apply(this, args);\n this.register('template:application', (0, _emberTemplateCompiler.compile)('{{cache-money}}'));\n this.register('template:components/cache-money', (0, _emberTemplateCompiler.compile)('\\n

Dis cache money

\\n '));\n this.register('component:cache-money', _glimmer.Component.extend({}));\n }\n });\n this.add('engine:blog', BlogEngine);\n\n // Register engine route map\n var BlogMap = function () {};\n this.add('route-map:blog', BlogMap);\n\n this.assertEmptyFixture();\n\n return this.visit('/blog', { isInteractive: false }).then(function (instance) {\n assert.ok(instance instanceof _instance.default, 'promise is resolved with an ApplicationInstance');\n assert.strictEqual(_this8.element.querySelector('p').textContent, 'Dis cache money', 'Engine component is resolved');\n });\n };\n\n _class.prototype['@test visit() on engine resolves engine component'] = function (assert) {\n var _this9 = this;\n\n assert.expect(2);\n\n this.router.map(function () {\n this.mount('blog');\n });\n\n // Register engine\n var BlogEngine = _engine.default.extend({\n init: function () {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n this._super.apply(this, args);\n this.register('template:application', (0, _emberTemplateCompiler.compile)('{{cache-money}}'));\n this.register('template:components/cache-money', (0, _emberTemplateCompiler.compile)('\\n

Dis cache money

\\n '));\n this.register('component:cache-money', _glimmer.Component.extend({}));\n }\n });\n this.add('engine:blog', BlogEngine);\n\n // Register engine route map\n var BlogMap = function () {};\n this.add('route-map:blog', BlogMap);\n\n this.assertEmptyFixture();\n\n return this.visit('/blog', { shouldRender: true }).then(function () {\n assert.strictEqual(_this9.element.querySelector('p').textContent, 'Dis cache money', 'Engine component is resolved');\n });\n };\n\n _class.prototype['@test visit() on engine resolves engine helper'] = function (assert) {\n var _this10 = this;\n\n assert.expect(2);\n\n this.router.map(function () {\n this.mount('blog');\n });\n\n // Register engine\n var BlogEngine = _engine.default.extend({\n init: function () {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this._super.apply(this, args);\n this.register('template:application', (0, _emberTemplateCompiler.compile)('{{swag}}'));\n this.register('helper:swag', (0, _glimmer.helper)(function () {\n return 'turnt up';\n }));\n }\n });\n this.add('engine:blog', BlogEngine);\n\n // Register engine route map\n var BlogMap = function () {};\n this.add('route-map:blog', BlogMap);\n\n this.assertEmptyFixture();\n\n return this.visit('/blog', { shouldRender: true }).then(function () {\n assert.strictEqual(_this10.element.textContent, 'turnt up', 'Engine component is resolved');\n });\n };\n\n _class.prototype['@test Ember Islands-style setup'] = function (assert) {\n var _this11 = this;\n\n var xFooInitCalled = false;\n var xFooDidInsertElementCalled = false;\n\n var xBarInitCalled = false;\n var xBarDidInsertElementCalled = false;\n\n this.router.map(function () {\n this.route('show', { path: '/:component_name' });\n });\n\n this.add('route:show', _routing.Route.extend({\n queryParams: {\n data: { refreshModel: true }\n },\n\n model: function (params) {\n return {\n componentName: params.component_name,\n componentData: params.data ? JSON.parse(params.data) : undefined\n };\n }\n }));\n\n var Counter = _runtime.Object.extend({\n value: 0,\n\n increment: function () {\n this.incrementProperty('value');\n }\n });\n\n this.add('service:isolatedCounter', Counter);\n this.add('service:sharedCounter', Counter.create());\n this.application.registerOptions('service:sharedCounter', {\n instantiate: false\n });\n\n this.addTemplate('show', '{{component model.componentName model=model.componentData}}');\n\n this.addTemplate('components/x-foo', '\\n

X-Foo

\\n

Hello {{model.name}}, I have been clicked {{isolatedCounter.value}} times ({{sharedCounter.value}} times combined)!

\\n ');\n\n this.add('component:x-foo', _glimmer.Component.extend({\n tagName: 'x-foo',\n\n isolatedCounter: (0, _service.inject)(),\n sharedCounter: (0, _service.inject)(),\n\n init: function () {\n this._super();\n xFooInitCalled = true;\n },\n didInsertElement: function () {\n xFooDidInsertElementCalled = true;\n },\n click: function () {\n this.get('isolatedCounter').increment();\n this.get('sharedCounter').increment();\n }\n }));\n\n this.addTemplate('components/x-bar', '\\n

X-Bar

\\n \\n ');\n\n this.add('component:x-bar', _glimmer.Component.extend({\n counter: (0, _service.inject)('sharedCounter'),\n\n actions: {\n incrementCounter: function () {\n this.get('counter').increment();\n }\n },\n\n init: function () {\n this._super();\n xBarInitCalled = true;\n },\n didInsertElement: function () {\n xBarDidInsertElementCalled = true;\n }\n }));\n\n var fixtureElement = document.querySelector('#qunit-fixture');\n var foo = document.createElement('div');\n var bar = document.createElement('div');\n fixtureElement.appendChild(foo);\n fixtureElement.appendChild(bar);\n\n var data = encodeURIComponent(JSON.stringify({ name: 'Godfrey' }));\n var instances = [];\n\n return _runtime.RSVP.all([this.runTask(function () {\n return _this11.application.visit('/x-foo?data=' + data, {\n rootElement: foo\n });\n }), this.runTask(function () {\n return _this11.application.visit('/x-bar', { rootElement: bar });\n })]).then(function (_instances) {\n instances = _instances;\n\n assert.ok(xFooInitCalled);\n assert.ok(xFooDidInsertElementCalled);\n\n assert.ok(xBarInitCalled);\n assert.ok(xBarDidInsertElementCalled);\n\n assert.equal(foo.querySelector('h1').textContent, 'X-Foo');\n assert.equal(foo.querySelector('p').textContent, 'Hello Godfrey, I have been clicked 0 times (0 times combined)!');\n assert.ok(foo.textContent.indexOf('X-Bar') === -1);\n\n assert.equal(bar.querySelector('h1').textContent, 'X-Bar');\n assert.equal(bar.querySelector('button').textContent, 'Join 0 others in clicking me!');\n assert.ok(bar.textContent.indexOf('X-Foo') === -1);\n\n _this11.runTask(function () {\n _this11.click(foo.querySelector('x-foo'));\n });\n\n assert.equal(foo.querySelector('p').textContent, 'Hello Godfrey, I have been clicked 1 times (1 times combined)!');\n assert.equal(bar.querySelector('button').textContent, 'Join 1 others in clicking me!');\n\n _this11.runTask(function () {\n _this11.click(bar.querySelector('button'));\n _this11.click(bar.querySelector('button'));\n });\n\n assert.equal(foo.querySelector('p').textContent, 'Hello Godfrey, I have been clicked 1 times (3 times combined)!');\n assert.equal(bar.querySelector('button').textContent, 'Join 3 others in clicking me!');\n }).finally(function () {\n _this11.runTask(function () {\n instances.forEach(function (instance) {\n instance.destroy();\n });\n });\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('@ember/controller/tests/controller_test', ['ember-babel', '@ember/controller', '@ember/service', '@ember/-internals/runtime', '@ember/-internals/metal', 'internal-test-helpers'], function (_emberBabel, _controller, _service, _runtime, _metal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Controller event handling', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Action can be handled by a function on actions object'] = function testActionCanBeHandledByAFunctionOnActionsObject(assert) {\n assert.expect(1);\n var TestController = _controller.default.extend({\n actions: {\n poke: function () {\n assert.ok(true, 'poked');\n }\n }\n });\n var controller = TestController.create();\n controller.send('poke');\n };\n\n _class.prototype['@test A handled action can be bubbled to the target for continued processing'] = function testAHandledActionCanBeBubbledToTheTargetForContinuedProcessing(assert) {\n assert.expect(2);\n var TestController = _controller.default.extend({\n actions: {\n poke: function () {\n assert.ok(true, 'poked 1');\n return true;\n }\n }\n });\n\n var controller = TestController.create({\n target: _controller.default.extend({\n actions: {\n poke: function () {\n assert.ok(true, 'poked 2');\n }\n }\n }).create()\n });\n controller.send('poke');\n };\n\n _class.prototype[\"@test Action can be handled by a superclass' actions object\"] = function testActionCanBeHandledByASuperclassActionsObject(assert) {\n assert.expect(4);\n\n var SuperController = _controller.default.extend({\n actions: {\n foo: function () {\n assert.ok(true, 'foo');\n },\n bar: function (msg) {\n assert.equal(msg, 'HELLO');\n }\n }\n });\n\n var BarControllerMixin = _metal.Mixin.create({\n actions: {\n bar: function (msg) {\n assert.equal(msg, 'HELLO');\n this._super(msg);\n }\n }\n });\n\n var IndexController = SuperController.extend(BarControllerMixin, {\n actions: {\n baz: function () {\n assert.ok(true, 'baz');\n }\n }\n });\n\n var controller = IndexController.create({});\n controller.send('foo');\n controller.send('bar', 'HELLO');\n controller.send('baz');\n };\n\n _class.prototype['@test .send asserts if called on a destroyed controller'] = function testSendAssertsIfCalledOnADestroyedController() {\n var owner = (0, _internalTestHelpers.buildOwner)();\n\n owner.register('controller:application', _controller.default.extend({\n toString: function () {\n return 'controller:rip-alley';\n }\n }));\n\n var controller = owner.lookup('controller:application');\n (0, _internalTestHelpers.runDestroy)(owner);\n\n expectAssertion(function () {\n controller.send('trigger-me-dead');\n }, \"Attempted to call .send() with the action 'trigger-me-dead' on the destroyed object 'controller:rip-alley'.\");\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Controller deprecations -> Controller Content -> Model Alias', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n _class2.prototype['@test `content` is not moved to `model` when `model` is unset'] = function testContentIsNotMovedToModelWhenModelIsUnset(assert) {\n assert.expect(2);\n var controller = void 0;\n\n ignoreDeprecation(function () {\n controller = _controller.default.extend({\n content: 'foo-bar'\n }).create();\n });\n\n assert.notEqual(controller.get('model'), 'foo-bar', 'model is set properly');\n assert.equal(controller.get('content'), 'foo-bar', 'content is not set properly');\n };\n\n _class2.prototype['@test specifying `content` (without `model` specified) does not result in deprecation'] = function testSpecifyingContentWithoutModelSpecifiedDoesNotResultInDeprecation(assert) {\n assert.expect(2);\n expectNoDeprecation();\n\n var controller = _controller.default.extend({\n content: 'foo-bar'\n }).create();\n\n assert.equal((0, _metal.get)(controller, 'content'), 'foo-bar');\n };\n\n _class2.prototype['@test specifying `content` (with `model` specified) does not result in deprecation'] = function testSpecifyingContentWithModelSpecifiedDoesNotResultInDeprecation(assert) {\n assert.expect(3);\n expectNoDeprecation();\n\n var controller = _controller.default.extend({\n content: 'foo-bar',\n model: 'blammo'\n }).create();\n\n assert.equal((0, _metal.get)(controller, 'content'), 'foo-bar');\n assert.equal((0, _metal.get)(controller, 'model'), 'blammo');\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Controller deprecations -> Controller injected properties', function (_AbstractTestCase3) {\n (0, _emberBabel.inherits)(_class3, _AbstractTestCase3);\n\n function _class3() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase3.apply(this, arguments));\n }\n\n _class3.prototype['@test defining a controller on a non-controller should fail assertion'] = function testDefiningAControllerOnANonControllerShouldFailAssertion() {\n expectAssertion(function () {\n var owner = (0, _internalTestHelpers.buildOwner)();\n\n var AnObject = _runtime.Object.extend({\n foo: (0, _controller.inject)('bar')\n });\n\n owner.register('controller:bar', _runtime.Object.extend());\n owner.register('foo:main', AnObject);\n\n owner.lookup('foo:main');\n }, /Defining `foo` as an injected controller property on a non-controller \\(`foo:main`\\) is not allowed/);\n };\n\n _class3.prototype['@test controllers can be injected into controllers'] = function testControllersCanBeInjectedIntoControllers(assert) {\n var owner = (0, _internalTestHelpers.buildOwner)();\n\n owner.register('controller:post', _controller.default.extend({\n postsController: (0, _controller.inject)('posts')\n }));\n\n owner.register('controller:posts', _controller.default.extend());\n\n var postController = owner.lookup('controller:post');\n var postsController = owner.lookup('controller:posts');\n\n assert.equal(postsController, postController.get('postsController'), 'controller.posts is injected');\n };\n\n _class3.prototype['@test services can be injected into controllers'] = function testServicesCanBeInjectedIntoControllers(assert) {\n var owner = (0, _internalTestHelpers.buildOwner)();\n\n owner.register('controller:application', _controller.default.extend({\n authService: (0, _service.inject)('auth')\n }));\n\n owner.register('service:auth', _service.default.extend());\n\n var appController = owner.lookup('controller:application');\n var authService = owner.lookup('service:auth');\n\n assert.equal(authService, appController.get('authService'), 'service.auth is injected');\n };\n\n return _class3;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/debug/tests/handlers-test', ['ember-babel', '@ember/debug/lib/handlers', 'internal-test-helpers'], function (_emberBabel, _handlers, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-debug: registerHandler', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.apply(this, arguments));\n }\n\n _class.prototype.teardown = function teardown() {\n delete _handlers.HANDLERS.blarz;\n };\n\n _class.prototype['@test calls handler on `invoke` when `falsey`'] = function testCallsHandlerOnInvokeWhenFalsey(assert) {\n assert.expect(2);\n\n function handler(message) {\n assert.ok(true, 'called handler');\n assert.equal(message, 'Foo bar');\n }\n\n (0, _handlers.registerHandler)('blarz', handler);\n\n (0, _handlers.invoke)('blarz', 'Foo bar', false);\n };\n\n _class.prototype['@test does not call handler on `invoke` when `truthy`'] = function testDoesNotCallHandlerOnInvokeWhenTruthy(assert) {\n assert.expect(0);\n\n function handler() {\n assert.ok(false, 'called handler');\n }\n\n (0, _handlers.registerHandler)('blarz', handler);\n\n (0, _handlers.invoke)('blarz', 'Foo bar', true);\n };\n\n _class.prototype['@test calling `invoke` without handlers does not throw an error'] = function testCallingInvokeWithoutHandlersDoesNotThrowAnError(assert) {\n assert.expect(0);\n\n (0, _handlers.invoke)('blarz', 'Foo bar', false);\n };\n\n _class.prototype['@test invoking `next` argument calls the next handler'] = function testInvokingNextArgumentCallsTheNextHandler(assert) {\n assert.expect(2);\n\n function handler1() {\n assert.ok(true, 'called handler1');\n }\n\n function handler2(message, options, next) {\n assert.ok(true, 'called handler2');\n next(message, options);\n }\n\n (0, _handlers.registerHandler)('blarz', handler1);\n (0, _handlers.registerHandler)('blarz', handler2);\n\n (0, _handlers.invoke)('blarz', 'Foo', false);\n };\n\n _class.prototype['@test invoking `next` when no other handlers exists does not error'] = function testInvokingNextWhenNoOtherHandlersExistsDoesNotError(assert) {\n assert.expect(1);\n\n function handler(message, options, next) {\n assert.ok(true, 'called handler1');\n\n next(message, options);\n }\n\n (0, _handlers.registerHandler)('blarz', handler);\n\n (0, _handlers.invoke)('blarz', 'Foo', false);\n };\n\n _class.prototype['@test handlers are called in the proper order'] = function testHandlersAreCalledInTheProperOrder(assert) {\n assert.expect(11);\n\n var expectedMessage = 'This is the message';\n var expectedOptions = { id: 'foo-bar' };\n var expected = ['first', 'second', 'third', 'fourth', 'fifth'];\n var actualCalls = [];\n\n function generateHandler(item) {\n return function (message, options, next) {\n assert.equal(message, expectedMessage, 'message supplied to ' + item + ' handler is correct');\n assert.equal(options, expectedOptions, 'options supplied to ' + item + ' handler is correct');\n\n actualCalls.push(item);\n\n next(message, options);\n };\n }\n\n expected.forEach(function (item) {\n return (0, _handlers.registerHandler)('blarz', generateHandler(item));\n });\n\n (0, _handlers.invoke)('blarz', expectedMessage, false, expectedOptions);\n\n assert.deepEqual(actualCalls, expected.reverse(), 'handlers were called in proper order');\n };\n\n _class.prototype['@test not invoking `next` prevents further handlers from being called'] = function testNotInvokingNextPreventsFurtherHandlersFromBeingCalled(assert) {\n assert.expect(1);\n\n function handler1() {\n assert.ok(false, 'called handler1');\n }\n\n function handler2() {\n assert.ok(true, 'called handler2');\n }\n\n (0, _handlers.registerHandler)('blarz', handler1);\n (0, _handlers.registerHandler)('blarz', handler2);\n\n (0, _handlers.invoke)('blarz', 'Foo', false);\n };\n\n _class.prototype['@test handlers can call `next` with custom message and/or options'] = function testHandlersCanCallNextWithCustomMessageAndOrOptions(assert) {\n assert.expect(4);\n\n var initialMessage = 'initial message';\n var initialOptions = { id: 'initial-options' };\n\n var handler2Message = 'Handler2 Message';\n var handler2Options = { id: 'handler-2' };\n\n function handler1(message, options) {\n assert.equal(message, handler2Message, 'handler2 message provided to handler1');\n assert.equal(options, handler2Options, 'handler2 options provided to handler1');\n }\n\n function handler2(message, options, next) {\n assert.equal(message, initialMessage, 'initial message provided to handler2');\n assert.equal(options, initialOptions, 'initial options proivided to handler2');\n\n next(handler2Message, handler2Options);\n }\n\n (0, _handlers.registerHandler)('blarz', handler1);\n (0, _handlers.registerHandler)('blarz', handler2);\n\n (0, _handlers.invoke)('blarz', initialMessage, false, initialOptions);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/debug/tests/main_test', ['ember-babel', '@ember/-internals/environment', '@ember/-internals/runtime', '@ember/debug/lib/handlers', '@ember/debug/lib/deprecate', '@ember/debug/lib/warn', '@ember/debug/index', 'internal-test-helpers'], function (_emberBabel, _environment, _runtime, _handlers, _deprecate, _warn, _index, _internalTestHelpers) {\n 'use strict';\n\n var originalEnvValue = void 0;\n var originalDeprecateHandler = void 0;\n var originalWarnHandler = void 0;\n\n var originalConsoleWarn = console.warn; // eslint-disable-line no-console\n var noop = function () {};\n\n (0, _internalTestHelpers.moduleFor)('ember-debug', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.call(this));\n\n originalEnvValue = _environment.ENV.RAISE_ON_DEPRECATION;\n originalDeprecateHandler = _handlers.HANDLERS.deprecate;\n originalWarnHandler = _handlers.HANDLERS.warn;\n\n _environment.ENV.RAISE_ON_DEPRECATION = true;\n return _this;\n }\n\n _class.prototype.teardown = function teardown() {\n _handlers.HANDLERS.deprecate = originalDeprecateHandler;\n _handlers.HANDLERS.warn = originalWarnHandler;\n\n _environment.ENV.RAISE_ON_DEPRECATION = originalEnvValue;\n };\n\n _class.prototype.afterEach = function afterEach() {\n console.warn = originalConsoleWarn; // eslint-disable-line no-console\n };\n\n _class.prototype['@test deprecate does not throw if RAISE_ON_DEPRECATION is false'] = function testDeprecateDoesNotThrowIfRAISE_ON_DEPRECATIONIsFalse(assert) {\n assert.expect(1);\n console.warn = noop; // eslint-disable-line no-console\n\n _environment.ENV.RAISE_ON_DEPRECATION = false;\n\n try {\n (0, _index.deprecate)('Should not throw', false, { id: 'test', until: 'forever' });\n assert.ok(true, 'deprecate did not throw');\n } catch (e) {\n assert.ok(false, 'Expected deprecate not to throw but it did: ' + e.message);\n }\n };\n\n _class.prototype['@test deprecate resets deprecation level to RAISE if ENV.RAISE_ON_DEPRECATION is set'] = function testDeprecateResetsDeprecationLevelToRAISEIfENVRAISE_ON_DEPRECATIONIsSet(assert) {\n assert.expect(2);\n console.warn = noop; // eslint-disable-line no-console\n\n _environment.ENV.RAISE_ON_DEPRECATION = false;\n\n try {\n (0, _index.deprecate)('Should not throw', false, { id: 'test', until: 'forever' });\n assert.ok(true, 'deprecate did not throw');\n } catch (e) {\n assert.ok(false, 'Expected deprecate not to throw but it did: ' + e.message);\n }\n\n _environment.ENV.RAISE_ON_DEPRECATION = true;\n\n assert.throws(function () {\n (0, _index.deprecate)('Should throw', false, { id: 'test', until: 'forever' });\n }, /Should throw/);\n };\n\n _class.prototype['@test When ENV.RAISE_ON_DEPRECATION is true, it is still possible to silence a deprecation by id'] = function testWhenENVRAISE_ON_DEPRECATIONIsTrueItIsStillPossibleToSilenceADeprecationById(assert) {\n assert.expect(3);\n\n _environment.ENV.RAISE_ON_DEPRECATION = true;\n (0, _deprecate.registerHandler)(function (message, options, next) {\n if (!options || options.id !== 'my-deprecation') {\n next.apply(undefined, arguments);\n }\n });\n\n try {\n (0, _index.deprecate)('should be silenced with matching id', false, {\n id: 'my-deprecation',\n until: 'forever'\n });\n assert.ok(true, 'Did not throw when level is set by id');\n } catch (e) {\n assert.ok(false, 'Expected deprecate not to throw but it did: ' + e.message);\n }\n\n assert.throws(function () {\n (0, _index.deprecate)('Should throw with no matching id', false, {\n id: 'test',\n until: 'forever'\n });\n }, /Should throw with no matching id/);\n\n assert.throws(function () {\n (0, _index.deprecate)('Should throw with non-matching id', false, {\n id: 'other-id',\n until: 'forever'\n });\n }, /Should throw with non-matching id/);\n };\n\n _class.prototype['@test deprecate throws deprecation if second argument is falsy'] = function testDeprecateThrowsDeprecationIfSecondArgumentIsFalsy(assert) {\n assert.expect(3);\n\n assert.throws(function () {\n return (0, _index.deprecate)('Deprecation is thrown', false, {\n id: 'test',\n until: 'forever'\n });\n });\n assert.throws(function () {\n return (0, _index.deprecate)('Deprecation is thrown', '', { id: 'test', until: 'forever' });\n });\n assert.throws(function () {\n return (0, _index.deprecate)('Deprecation is thrown', 0, { id: 'test', until: 'forever' });\n });\n };\n\n _class.prototype['@test deprecate does not invoke a function as the second argument'] = function testDeprecateDoesNotInvokeAFunctionAsTheSecondArgument(assert) {\n assert.expect(1);\n\n (0, _index.deprecate)('Deprecation is thrown', function () {\n assert.ok(false, 'this function should not be invoked');\n }, { id: 'test', until: 'forever' });\n\n assert.ok(true, 'deprecations were not thrown');\n };\n\n _class.prototype['@test deprecate does not throw deprecations if second argument is truthy'] = function testDeprecateDoesNotThrowDeprecationsIfSecondArgumentIsTruthy(assert) {\n assert.expect(1);\n\n (0, _index.deprecate)('Deprecation is thrown', true, {\n id: 'test',\n until: 'forever'\n });\n (0, _index.deprecate)('Deprecation is thrown', '1', { id: 'test', until: 'forever' });\n (0, _index.deprecate)('Deprecation is thrown', 1, { id: 'test', until: 'forever' });\n\n assert.ok(true, 'deprecations were not thrown');\n };\n\n _class.prototype['@test assert throws if second argument is falsy'] = function testAssertThrowsIfSecondArgumentIsFalsy(assert) {\n assert.expect(3);\n\n assert.throws(function () {\n return (0, _index.assert)('Assertion is thrown', false);\n });\n assert.throws(function () {\n return (0, _index.assert)('Assertion is thrown', '');\n });\n assert.throws(function () {\n return (0, _index.assert)('Assertion is thrown', 0);\n });\n };\n\n _class.prototype['@test assert does not throw if second argument is a function'] = function testAssertDoesNotThrowIfSecondArgumentIsAFunction(assert) {\n assert.expect(1);\n\n (0, _index.assert)('Assertion is thrown', function () {\n return true;\n });\n\n assert.ok(true, 'assertions were not thrown');\n };\n\n _class.prototype['@test assert does not throw if second argument is falsy'] = function testAssertDoesNotThrowIfSecondArgumentIsFalsy(assert) {\n assert.expect(1);\n\n (0, _index.assert)('Assertion is thrown', true);\n (0, _index.assert)('Assertion is thrown', '1');\n (0, _index.assert)('Assertion is thrown', 1);\n\n assert.ok(true, 'assertions were not thrown');\n };\n\n _class.prototype['@test assert does not throw if second argument is an object'] = function testAssertDoesNotThrowIfSecondArgumentIsAnObject(assert) {\n assert.expect(1);\n var Igor = _runtime.Object.extend();\n\n (0, _index.assert)('is truthy', Igor);\n (0, _index.assert)('is truthy', Igor.create());\n\n assert.ok(true, 'assertions were not thrown');\n };\n\n _class.prototype['@test deprecate does not throw a deprecation at log and silence'] = function testDeprecateDoesNotThrowADeprecationAtLogAndSilence(assert) {\n assert.expect(4);\n var id = 'ABC';\n var until = 'forever';\n var shouldThrow = false;\n\n (0, _deprecate.registerHandler)(function (message, options) {\n if (options && options.id === id) {\n if (shouldThrow) {\n throw new Error(message);\n }\n }\n });\n\n try {\n (0, _index.deprecate)('Deprecation for testing purposes', false, { id: id, until: until });\n assert.ok(true, 'Deprecation did not throw');\n } catch (e) {\n assert.ok(false, 'Deprecation was thrown despite being added to blacklist');\n }\n\n try {\n (0, _index.deprecate)('Deprecation for testing purposes', false, { id: id, until: until });\n assert.ok(true, 'Deprecation did not throw');\n } catch (e) {\n assert.ok(false, 'Deprecation was thrown despite being added to blacklist');\n }\n\n shouldThrow = true;\n\n assert.throws(function () {\n (0, _index.deprecate)('Deprecation is thrown', false, { id: id, until: until });\n });\n\n assert.throws(function () {\n (0, _index.deprecate)('Deprecation is thrown', false, { id: id, until: until });\n });\n };\n\n _class.prototype['@test deprecate without options triggers an assertion'] = function testDeprecateWithoutOptionsTriggersAnAssertion(assert) {\n assert.expect(2);\n\n assert.throws(function () {\n return (0, _index.deprecate)('foo');\n }, new RegExp(_deprecate.missingOptionsDeprecation), 'proper assertion is triggered when options is missing');\n\n assert.throws(function () {\n return (0, _index.deprecate)('foo', false, {});\n }, new RegExp(_deprecate.missingOptionsDeprecation), 'proper assertion is triggered when options is missing');\n };\n\n _class.prototype['@test deprecate without options.id triggers an assertion'] = function testDeprecateWithoutOptionsIdTriggersAnAssertion(assert) {\n assert.expect(1);\n\n assert.throws(function () {\n return (0, _index.deprecate)('foo', false, { until: 'forever' });\n }, new RegExp(_deprecate.missingOptionsIdDeprecation), 'proper assertion is triggered when options.id is missing');\n };\n\n _class.prototype['@test deprecate without options.until triggers an assertion'] = function testDeprecateWithoutOptionsUntilTriggersAnAssertion(assert) {\n assert.expect(1);\n\n assert.throws(function () {\n return (0, _index.deprecate)('foo', false, { id: 'test' });\n }, new RegExp(_deprecate.missingOptionsUntilDeprecation), 'proper assertion is triggered when options.until is missing');\n };\n\n _class.prototype['@test warn without options triggers an assert'] = function testWarnWithoutOptionsTriggersAnAssert(assert) {\n assert.expect(1);\n\n assert.throws(function () {\n return (0, _index.warn)('foo');\n }, new RegExp(_warn.missingOptionsDeprecation), 'deprecation is triggered when options is missing');\n };\n\n _class.prototype['@test warn without options.id triggers an assertion'] = function testWarnWithoutOptionsIdTriggersAnAssertion(assert) {\n assert.expect(1);\n\n assert.throws(function () {\n return (0, _index.warn)('foo', false, {});\n }, new RegExp(_warn.missingOptionsIdDeprecation), 'deprecation is triggered when options is missing');\n };\n\n _class.prototype['@test warn without options.id nor test triggers an assertion'] = function testWarnWithoutOptionsIdNorTestTriggersAnAssertion(assert) {\n assert.expect(1);\n\n assert.throws(function () {\n return (0, _index.warn)('foo', {});\n }, new RegExp(_warn.missingOptionsIdDeprecation), 'deprecation is triggered when options is missing');\n };\n\n _class.prototype['@test warn without test but with options does not trigger an assertion'] = function testWarnWithoutTestButWithOptionsDoesNotTriggerAnAssertion(assert) {\n assert.expect(1);\n\n (0, _warn.registerHandler)(function (message) {\n assert.equal(message, 'foo', 'warning was triggered');\n });\n\n (0, _index.warn)('foo', { id: 'ember-debug.do-not-raise' });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/engine/tests/engine_initializers_test', ['ember-babel', '@ember/runloop', '@ember/engine', 'internal-test-helpers'], function (_emberBabel, _runloop, _engine, _internalTestHelpers) {\n 'use strict';\n\n var MyEngine = void 0,\n myEngine = void 0,\n myEngineInstance = void 0;\n\n (0, _internalTestHelpers.moduleFor)('Engine initializers', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.apply(this, arguments));\n }\n\n _class.prototype.teardown = function teardown() {\n (0, _runloop.run)(function () {\n if (myEngineInstance) {\n myEngineInstance.destroy();\n myEngineInstance = null;\n }\n\n if (myEngine) {\n myEngine.destroy();\n myEngine = null;\n }\n });\n };\n\n _class.prototype[\"@test initializers require proper 'name' and 'initialize' properties\"] = function testInitializersRequireProperNameAndInitializeProperties() {\n MyEngine = _engine.default.extend();\n\n expectAssertion(function () {\n (0, _runloop.run)(function () {\n MyEngine.initializer({ name: 'initializer' });\n });\n });\n\n expectAssertion(function () {\n (0, _runloop.run)(function () {\n MyEngine.initializer({\n initialize: function () {}\n });\n });\n });\n };\n\n _class.prototype['@test initializers are passed an Engine'] = function testInitializersArePassedAnEngine(assert) {\n MyEngine = _engine.default.extend();\n\n MyEngine.initializer({\n name: 'initializer',\n initialize: function (engine) {\n assert.ok(engine instanceof _engine.default, 'initialize is passed an Engine');\n }\n });\n\n myEngine = MyEngine.create();\n myEngineInstance = myEngine.buildInstance();\n };\n\n _class.prototype['@test initializers can be registered in a specified order'] = function testInitializersCanBeRegisteredInASpecifiedOrder(assert) {\n var order = [];\n\n MyEngine = _engine.default.extend();\n MyEngine.initializer({\n name: 'fourth',\n after: 'third',\n initialize: function () {\n order.push('fourth');\n }\n });\n\n MyEngine.initializer({\n name: 'second',\n after: 'first',\n before: 'third',\n initialize: function () {\n order.push('second');\n }\n });\n\n MyEngine.initializer({\n name: 'fifth',\n after: 'fourth',\n before: 'sixth',\n initialize: function () {\n order.push('fifth');\n }\n });\n\n MyEngine.initializer({\n name: 'first',\n before: 'second',\n initialize: function () {\n order.push('first');\n }\n });\n\n MyEngine.initializer({\n name: 'third',\n initialize: function () {\n order.push('third');\n }\n });\n\n MyEngine.initializer({\n name: 'sixth',\n initialize: function () {\n order.push('sixth');\n }\n });\n\n myEngine = MyEngine.create();\n myEngineInstance = myEngine.buildInstance();\n\n assert.deepEqual(order, ['first', 'second', 'third', 'fourth', 'fifth', 'sixth']);\n };\n\n _class.prototype['@test initializers can be registered in a specified order as an array'] = function testInitializersCanBeRegisteredInASpecifiedOrderAsAnArray(assert) {\n var order = [];\n\n MyEngine = _engine.default.extend();\n\n MyEngine.initializer({\n name: 'third',\n initialize: function () {\n order.push('third');\n }\n });\n\n MyEngine.initializer({\n name: 'second',\n after: 'first',\n before: ['third', 'fourth'],\n initialize: function () {\n order.push('second');\n }\n });\n\n MyEngine.initializer({\n name: 'fourth',\n after: ['second', 'third'],\n initialize: function () {\n order.push('fourth');\n }\n });\n\n MyEngine.initializer({\n name: 'fifth',\n after: 'fourth',\n before: 'sixth',\n initialize: function () {\n order.push('fifth');\n }\n });\n\n MyEngine.initializer({\n name: 'first',\n before: ['second'],\n initialize: function () {\n order.push('first');\n }\n });\n\n MyEngine.initializer({\n name: 'sixth',\n initialize: function () {\n order.push('sixth');\n }\n });\n\n myEngine = MyEngine.create();\n myEngineInstance = myEngine.buildInstance();\n\n assert.deepEqual(order, ['first', 'second', 'third', 'fourth', 'fifth', 'sixth']);\n };\n\n _class.prototype['@test initializers can have multiple dependencies'] = function testInitializersCanHaveMultipleDependencies(assert) {\n var order = [];\n\n MyEngine = _engine.default.extend();\n\n var a = {\n name: 'a',\n before: 'b',\n initialize: function () {\n order.push('a');\n }\n };\n var b = {\n name: 'b',\n initialize: function () {\n order.push('b');\n }\n };\n var c = {\n name: 'c',\n after: 'b',\n initialize: function () {\n order.push('c');\n }\n };\n var afterB = {\n name: 'after b',\n after: 'b',\n initialize: function () {\n order.push('after b');\n }\n };\n var afterC = {\n name: 'after c',\n after: 'c',\n initialize: function () {\n order.push('after c');\n }\n };\n\n MyEngine.initializer(b);\n MyEngine.initializer(a);\n MyEngine.initializer(afterC);\n MyEngine.initializer(afterB);\n MyEngine.initializer(c);\n\n myEngine = MyEngine.create();\n myEngineInstance = myEngine.buildInstance();\n\n assert.ok(order.indexOf(a.name) < order.indexOf(b.name), 'a < b');\n assert.ok(order.indexOf(b.name) < order.indexOf(c.name), 'b < c');\n assert.ok(order.indexOf(b.name) < order.indexOf(afterB.name), 'b < afterB');\n assert.ok(order.indexOf(c.name) < order.indexOf(afterC.name), 'c < afterC');\n };\n\n _class.prototype['@test initializers set on Engine subclasses are not shared between engines'] = function testInitializersSetOnEngineSubclassesAreNotSharedBetweenEngines(assert) {\n var firstInitializerRunCount = 0;\n var secondInitializerRunCount = 0;\n var FirstEngine = _engine.default.extend();\n\n FirstEngine.initializer({\n name: 'first',\n initialize: function () {\n firstInitializerRunCount++;\n }\n });\n\n var SecondEngine = _engine.default.extend();\n\n SecondEngine.initializer({\n name: 'second',\n initialize: function () {\n secondInitializerRunCount++;\n }\n });\n\n var firstEngine = FirstEngine.create();\n var firstEngineInstance = firstEngine.buildInstance();\n\n assert.equal(firstInitializerRunCount, 1, 'first initializer only was run');\n assert.equal(secondInitializerRunCount, 0, 'first initializer only was run');\n\n var secondEngine = SecondEngine.create();\n var secondEngineInstance = secondEngine.buildInstance();\n\n assert.equal(firstInitializerRunCount, 1, 'second initializer only was run');\n assert.equal(secondInitializerRunCount, 1, 'second initializer only was run');\n\n (0, _runloop.run)(function () {\n firstEngineInstance.destroy();\n secondEngineInstance.destroy();\n\n firstEngine.destroy();\n secondEngine.destroy();\n });\n };\n\n _class.prototype['@test initializers are concatenated'] = function testInitializersAreConcatenated(assert) {\n var firstInitializerRunCount = 0;\n var secondInitializerRunCount = 0;\n var FirstEngine = _engine.default.extend();\n\n FirstEngine.initializer({\n name: 'first',\n initialize: function () {\n firstInitializerRunCount++;\n }\n });\n\n var SecondEngine = FirstEngine.extend();\n\n SecondEngine.initializer({\n name: 'second',\n initialize: function () {\n secondInitializerRunCount++;\n }\n });\n\n var firstEngine = FirstEngine.create();\n var firstEngineInstance = firstEngine.buildInstance();\n\n assert.equal(firstInitializerRunCount, 1, 'first initializer only was run when base class created');\n assert.equal(secondInitializerRunCount, 0, 'second initializer was not run when first base class created');\n firstInitializerRunCount = 0;\n\n var secondEngine = SecondEngine.create();\n var secondEngineInstance = secondEngine.buildInstance();\n\n assert.equal(firstInitializerRunCount, 1, 'first initializer was run when subclass created');\n assert.equal(secondInitializerRunCount, 1, 'second initializers was run when subclass created');\n\n (0, _runloop.run)(function () {\n firstEngineInstance.destroy();\n secondEngineInstance.destroy();\n\n firstEngine.destroy();\n secondEngine.destroy();\n });\n };\n\n _class.prototype['@test initializers are per-engine'] = function testInitializersArePerEngine(assert) {\n assert.expect(2);\n\n var FirstEngine = _engine.default.extend();\n\n FirstEngine.initializer({\n name: 'abc',\n initialize: function () {}\n });\n\n expectAssertion(function () {\n FirstEngine.initializer({\n name: 'abc',\n initialize: function () {}\n });\n });\n\n var SecondEngine = _engine.default.extend();\n SecondEngine.instanceInitializer({\n name: 'abc',\n initialize: function () {}\n });\n\n assert.ok(true, 'Two engines can have initializers named the same.');\n };\n\n _class.prototype['@test initializers are executed in their own context'] = function testInitializersAreExecutedInTheirOwnContext(assert) {\n assert.expect(1);\n\n MyEngine = _engine.default.extend();\n\n MyEngine.initializer({\n name: 'coolInitializer',\n myProperty: 'cool',\n initialize: function () {\n assert.equal(this.myProperty, 'cool', 'should have access to its own context');\n }\n });\n\n myEngine = MyEngine.create();\n myEngineInstance = myEngine.buildInstance();\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/engine/tests/engine_instance_initializers_test', ['ember-babel', '@ember/runloop', '@ember/engine', '@ember/engine/instance', 'internal-test-helpers'], function (_emberBabel, _runloop, _engine, _instance, _internalTestHelpers) {\n 'use strict';\n\n var MyEngine = void 0,\n myEngine = void 0,\n myEngineInstance = void 0;\n\n function buildEngineInstance(EngineClass) {\n var engineInstance = EngineClass.buildInstance();\n (0, _engine.setEngineParent)(engineInstance, {\n lookup: function () {\n return {};\n },\n resolveRegistration: function () {\n return {};\n }\n });\n return engineInstance;\n }\n\n (0, _internalTestHelpers.moduleFor)('Engine instance initializers', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.apply(this, arguments));\n }\n\n _class.prototype.teardown = function teardown() {\n _TestCase.prototype.teardown.call(this);\n (0, _runloop.run)(function () {\n if (myEngineInstance) {\n myEngineInstance.destroy();\n }\n\n if (myEngine) {\n myEngine.destroy();\n }\n });\n MyEngine = myEngine = myEngineInstance = undefined;\n };\n\n _class.prototype[\"@test initializers require proper 'name' and 'initialize' properties\"] = function testInitializersRequireProperNameAndInitializeProperties() {\n MyEngine = _engine.default.extend();\n\n expectAssertion(function () {\n (0, _runloop.run)(function () {\n MyEngine.instanceInitializer({ name: 'initializer' });\n });\n });\n\n expectAssertion(function () {\n (0, _runloop.run)(function () {\n MyEngine.instanceInitializer({\n initialize: function () {}\n });\n });\n });\n };\n\n _class.prototype['@test initializers are passed an engine instance'] = function testInitializersArePassedAnEngineInstance(assert) {\n MyEngine = _engine.default.extend();\n\n MyEngine.instanceInitializer({\n name: 'initializer',\n initialize: function (instance) {\n assert.ok(instance instanceof _instance.default, 'initialize is passed an engine instance');\n }\n });\n\n myEngine = MyEngine.create();\n myEngineInstance = buildEngineInstance(myEngine);\n return myEngineInstance.boot();\n };\n\n _class.prototype['@test initializers can be registered in a specified order'] = function testInitializersCanBeRegisteredInASpecifiedOrder(assert) {\n var order = [];\n\n MyEngine = _engine.default.extend();\n\n MyEngine.instanceInitializer({\n name: 'fourth',\n after: 'third',\n initialize: function () {\n order.push('fourth');\n }\n });\n\n MyEngine.instanceInitializer({\n name: 'second',\n after: 'first',\n before: 'third',\n initialize: function () {\n order.push('second');\n }\n });\n\n MyEngine.instanceInitializer({\n name: 'fifth',\n after: 'fourth',\n before: 'sixth',\n initialize: function () {\n order.push('fifth');\n }\n });\n\n MyEngine.instanceInitializer({\n name: 'first',\n before: 'second',\n initialize: function () {\n order.push('first');\n }\n });\n\n MyEngine.instanceInitializer({\n name: 'third',\n initialize: function () {\n order.push('third');\n }\n });\n\n MyEngine.instanceInitializer({\n name: 'sixth',\n initialize: function () {\n order.push('sixth');\n }\n });\n\n myEngine = MyEngine.create();\n myEngineInstance = buildEngineInstance(myEngine);\n\n return myEngineInstance.boot().then(function () {\n assert.deepEqual(order, ['first', 'second', 'third', 'fourth', 'fifth', 'sixth']);\n });\n };\n\n _class.prototype['@test initializers can be registered in a specified order as an array'] = function testInitializersCanBeRegisteredInASpecifiedOrderAsAnArray(assert) {\n var order = [];\n MyEngine = _engine.default.extend();\n\n MyEngine.instanceInitializer({\n name: 'third',\n initialize: function () {\n order.push('third');\n }\n });\n\n MyEngine.instanceInitializer({\n name: 'second',\n after: 'first',\n before: ['third', 'fourth'],\n initialize: function () {\n order.push('second');\n }\n });\n\n MyEngine.instanceInitializer({\n name: 'fourth',\n after: ['second', 'third'],\n initialize: function () {\n order.push('fourth');\n }\n });\n\n MyEngine.instanceInitializer({\n name: 'fifth',\n after: 'fourth',\n before: 'sixth',\n initialize: function () {\n order.push('fifth');\n }\n });\n\n MyEngine.instanceInitializer({\n name: 'first',\n before: ['second'],\n initialize: function () {\n order.push('first');\n }\n });\n\n MyEngine.instanceInitializer({\n name: 'sixth',\n initialize: function () {\n order.push('sixth');\n }\n });\n\n myEngine = MyEngine.create();\n myEngineInstance = buildEngineInstance(myEngine);\n\n return myEngineInstance.boot().then(function () {\n assert.deepEqual(order, ['first', 'second', 'third', 'fourth', 'fifth', 'sixth']);\n });\n };\n\n _class.prototype['@test initializers can have multiple dependencies'] = function testInitializersCanHaveMultipleDependencies(assert) {\n var order = [];\n\n MyEngine = _engine.default.extend();\n\n var a = {\n name: 'a',\n before: 'b',\n initialize: function () {\n order.push('a');\n }\n };\n var b = {\n name: 'b',\n initialize: function () {\n order.push('b');\n }\n };\n var c = {\n name: 'c',\n after: 'b',\n initialize: function () {\n order.push('c');\n }\n };\n var afterB = {\n name: 'after b',\n after: 'b',\n initialize: function () {\n order.push('after b');\n }\n };\n var afterC = {\n name: 'after c',\n after: 'c',\n initialize: function () {\n order.push('after c');\n }\n };\n\n MyEngine.instanceInitializer(b);\n MyEngine.instanceInitializer(a);\n MyEngine.instanceInitializer(afterC);\n MyEngine.instanceInitializer(afterB);\n MyEngine.instanceInitializer(c);\n\n myEngine = MyEngine.create();\n myEngineInstance = buildEngineInstance(myEngine);\n\n return myEngineInstance.boot().then(function () {\n assert.ok(order.indexOf(a.name) < order.indexOf(b.name), 'a < b');\n assert.ok(order.indexOf(b.name) < order.indexOf(c.name), 'b < c');\n assert.ok(order.indexOf(b.name) < order.indexOf(afterB.name), 'b < afterB');\n assert.ok(order.indexOf(c.name) < order.indexOf(afterC.name), 'c < afterC');\n });\n };\n\n _class.prototype['@test initializers set on Engine subclasses should not be shared between engines'] = function testInitializersSetOnEngineSubclassesShouldNotBeSharedBetweenEngines(assert) {\n var firstInitializerRunCount = 0;\n var secondInitializerRunCount = 0;\n var FirstEngine = _engine.default.extend();\n var firstEngine = void 0,\n firstEngineInstance = void 0;\n\n FirstEngine.instanceInitializer({\n name: 'first',\n initialize: function () {\n firstInitializerRunCount++;\n }\n });\n\n var SecondEngine = _engine.default.extend();\n var secondEngine = void 0,\n secondEngineInstance = void 0;\n\n SecondEngine.instanceInitializer({\n name: 'second',\n initialize: function () {\n secondInitializerRunCount++;\n }\n });\n\n firstEngine = FirstEngine.create();\n firstEngineInstance = buildEngineInstance(firstEngine);\n\n return firstEngineInstance.boot().then(function () {\n assert.equal(firstInitializerRunCount, 1, 'first initializer only was run');\n assert.equal(secondInitializerRunCount, 0, 'first initializer only was run');\n\n secondEngine = SecondEngine.create();\n secondEngineInstance = buildEngineInstance(secondEngine);\n return secondEngineInstance.boot();\n }).then(function () {\n assert.equal(firstInitializerRunCount, 1, 'second initializer only was run');\n assert.equal(secondInitializerRunCount, 1, 'second initializer only was run');\n\n (0, _runloop.run)(function () {\n firstEngineInstance.destroy();\n secondEngineInstance.destroy();\n\n firstEngine.destroy();\n secondEngine.destroy();\n });\n });\n };\n\n _class.prototype['@test initializers are concatenated'] = function testInitializersAreConcatenated(assert) {\n var firstInitializerRunCount = 0;\n var secondInitializerRunCount = 0;\n var FirstEngine = _engine.default.extend();\n\n FirstEngine.instanceInitializer({\n name: 'first',\n initialize: function () {\n firstInitializerRunCount++;\n }\n });\n\n var SecondEngine = FirstEngine.extend();\n\n SecondEngine.instanceInitializer({\n name: 'second',\n initialize: function () {\n secondInitializerRunCount++;\n }\n });\n\n var firstEngine = FirstEngine.create();\n var firstEngineInstance = buildEngineInstance(firstEngine);\n\n var secondEngine = void 0,\n secondEngineInstance = void 0;\n\n return firstEngineInstance.boot().then(function () {\n assert.equal(firstInitializerRunCount, 1, 'first initializer only was run when base class created');\n assert.equal(secondInitializerRunCount, 0, 'second initializer was not run when first base class created');\n firstInitializerRunCount = 0;\n\n secondEngine = SecondEngine.create();\n secondEngineInstance = buildEngineInstance(secondEngine);\n return secondEngineInstance.boot();\n }).then(function () {\n assert.equal(firstInitializerRunCount, 1, 'first initializer was run when subclass created');\n assert.equal(secondInitializerRunCount, 1, 'second initializers was run when subclass created');\n\n (0, _runloop.run)(function () {\n firstEngineInstance.destroy();\n secondEngineInstance.destroy();\n\n firstEngine.destroy();\n secondEngine.destroy();\n });\n });\n };\n\n _class.prototype['@test initializers are per-engine'] = function testInitializersArePerEngine(assert) {\n assert.expect(2);\n\n var FirstEngine = _engine.default.extend();\n\n FirstEngine.instanceInitializer({\n name: 'abc',\n initialize: function () {}\n });\n\n expectAssertion(function () {\n FirstEngine.instanceInitializer({\n name: 'abc',\n initialize: function () {}\n });\n });\n\n var SecondEngine = _engine.default.extend();\n SecondEngine.instanceInitializer({\n name: 'abc',\n initialize: function () {}\n });\n\n assert.ok(true, 'Two engines can have initializers named the same.');\n };\n\n _class.prototype['@test initializers are executed in their own context'] = function testInitializersAreExecutedInTheirOwnContext(assert) {\n assert.expect(1);\n\n var MyEngine = _engine.default.extend();\n\n MyEngine.instanceInitializer({\n name: 'coolInitializer',\n myProperty: 'cool',\n initialize: function () {\n assert.equal(this.myProperty, 'cool', 'should have access to its own context');\n }\n });\n\n myEngine = MyEngine.create();\n myEngineInstance = buildEngineInstance(myEngine);\n\n return myEngineInstance.boot();\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/engine/tests/engine_instance_test', ['ember-babel', '@ember/engine', '@ember/engine/instance', '@ember/runloop', 'internal-test-helpers'], function (_emberBabel, _engine, _instance, _runloop, _internalTestHelpers) {\n 'use strict';\n\n var engine = void 0,\n engineInstance = void 0;\n\n (0, _internalTestHelpers.moduleFor)('EngineInstance', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.call(this));\n\n (0, _runloop.run)(function () {\n engine = _engine.default.create({ router: null });\n });\n return _this;\n }\n\n _class.prototype.teardown = function teardown() {\n if (engineInstance) {\n (0, _runloop.run)(engineInstance, 'destroy');\n engineInstance = undefined;\n }\n\n if (engine) {\n (0, _runloop.run)(engine, 'destroy');\n engine = undefined;\n }\n };\n\n _class.prototype['@test an engine instance can be created based upon a base engine'] = function testAnEngineInstanceCanBeCreatedBasedUponABaseEngine(assert) {\n (0, _runloop.run)(function () {\n engineInstance = _instance.default.create({ base: engine });\n });\n\n assert.ok(engineInstance, 'instance should be created');\n assert.equal(engineInstance.base, engine, 'base should be set to engine');\n };\n\n _class.prototype['@test unregistering a factory clears all cached instances of that factory'] = function testUnregisteringAFactoryClearsAllCachedInstancesOfThatFactory(assert) {\n assert.expect(3);\n\n engineInstance = (0, _runloop.run)(function () {\n return _instance.default.create({ base: engine });\n });\n\n var PostComponent = (0, _internalTestHelpers.factory)();\n\n engineInstance.register('component:post', PostComponent);\n\n var postComponent1 = engineInstance.lookup('component:post');\n assert.ok(postComponent1, 'lookup creates instance');\n\n engineInstance.unregister('component:post');\n engineInstance.register('component:post', PostComponent);\n\n var postComponent2 = engineInstance.lookup('component:post');\n assert.ok(postComponent2, 'lookup creates instance');\n\n assert.notStrictEqual(postComponent1, postComponent2, 'lookup creates a brand new instance because previous one was reset');\n };\n\n _class.prototype['@test can be booted when its parent has been set'] = function testCanBeBootedWhenItsParentHasBeenSet(assert) {\n assert.expect(3);\n\n engineInstance = (0, _runloop.run)(function () {\n return _instance.default.create({ base: engine });\n });\n\n expectAssertion(function () {\n engineInstance._bootSync();\n }, \"An engine instance's parent must be set via `setEngineParent(engine, parent)` prior to calling `engine.boot()`.\");\n\n (0, _engine.setEngineParent)(engineInstance, {});\n\n // Stub `cloneParentDependencies`, the internals of which are tested along\n // with application instances.\n engineInstance.cloneParentDependencies = function () {\n assert.ok(true, 'parent dependencies are cloned');\n };\n\n return engineInstance.boot().then(function () {\n assert.ok(true, 'boot successful');\n });\n };\n\n _class.prototype['@test can build a child instance of a registered engine'] = function testCanBuildAChildInstanceOfARegisteredEngine(assert) {\n var ChatEngine = _engine.default.extend();\n var chatEngineInstance = void 0;\n\n engine.register('engine:chat', ChatEngine);\n\n (0, _runloop.run)(function () {\n engineInstance = _instance.default.create({ base: engine });\n\n // Try to build an unregistered engine.\n assert.throws(function () {\n engineInstance.buildChildEngineInstance('fake');\n }, 'You attempted to mount the engine \\'fake\\', but it is not registered with its parent.');\n\n // Build the `chat` engine, registered above.\n chatEngineInstance = engineInstance.buildChildEngineInstance('chat');\n });\n\n assert.ok(chatEngineInstance, 'child engine instance successfully created');\n\n assert.strictEqual((0, _engine.getEngineParent)(chatEngineInstance), engineInstance, 'child engine instance is assigned the correct parent');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/engine/tests/engine_parent_test', ['ember-babel', '@ember/engine', 'internal-test-helpers'], function (_emberBabel, _engine, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('EngineParent', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.apply(this, arguments));\n }\n\n _class.prototype[\"@test An engine's parent can be set with `setEngineParent` and retrieved with `getEngineParent`\"] = function testAnEngineSParentCanBeSetWithSetEngineParentAndRetrievedWithGetEngineParent(assert) {\n var engine = {};\n var parent = {};\n\n assert.strictEqual((0, _engine.getEngineParent)(engine), undefined, 'parent has not been set');\n\n (0, _engine.setEngineParent)(engine, parent);\n\n assert.strictEqual((0, _engine.getEngineParent)(engine), parent, 'parent has been set');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/engine/tests/engine_test', ['ember-babel', '@ember/-internals/environment', '@ember/runloop', '@ember/engine', '@ember/-internals/runtime', '@ember/-internals/container', 'internal-test-helpers'], function (_emberBabel, _environment, _runloop, _engine, _runtime, _container, _internalTestHelpers) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['-bucket-cache:main'], ['-bucket-cache:main']),\n _templateObject2 = (0, _emberBabel.taggedTemplateLiteralLoose)(['template:components/-default'], ['template:components/-default']),\n _templateObject3 = (0, _emberBabel.taggedTemplateLiteralLoose)(['template-compiler:main'], ['template-compiler:main']);\n\n var engine = void 0;\n var originalLookup = _environment.context.lookup;\n\n (0, _internalTestHelpers.moduleFor)('Engine', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.call(this));\n\n (0, _runloop.run)(function () {\n engine = _engine.default.create();\n _environment.context.lookup = { TestEngine: engine };\n });\n return _this;\n }\n\n _class.prototype.teardown = function teardown() {\n _environment.context.lookup = originalLookup;\n if (engine) {\n (0, _runloop.run)(engine, 'destroy');\n engine = null;\n }\n };\n\n _class.prototype['@test acts like a namespace'] = function testActsLikeANamespace(assert) {\n engine.Foo = _runtime.Object.extend();\n assert.equal(engine.Foo.toString(), 'TestEngine.Foo', 'Classes pick up their parent namespace');\n };\n\n _class.prototype['@test builds a registry'] = function testBuildsARegistry(assert) {\n assert.strictEqual(engine.resolveRegistration('application:main'), engine, 'application:main is registered');\n assert.deepEqual(engine.registeredOptionsForType('component'), { singleton: false }, 'optionsForType \\'component\\'');\n assert.deepEqual(engine.registeredOptionsForType('view'), { singleton: false }, 'optionsForType \\'view\\'');\n (0, _internalTestHelpers.verifyRegistration)(assert, engine, 'controller:basic');\n (0, _internalTestHelpers.verifyInjection)(assert, engine, 'view', '_viewRegistry', '-view-registry:main');\n (0, _internalTestHelpers.verifyInjection)(assert, engine, 'route', '_topLevelViewTemplate', 'template:-outlet');\n (0, _internalTestHelpers.verifyInjection)(assert, engine, 'view:-outlet', 'namespace', 'application:main');\n\n (0, _internalTestHelpers.verifyInjection)(assert, engine, 'controller', 'target', 'router:main');\n (0, _internalTestHelpers.verifyInjection)(assert, engine, 'controller', 'namespace', 'application:main');\n\n (0, _internalTestHelpers.verifyInjection)(assert, engine, 'router', '_bucketCache', (0, _container.privatize)(_templateObject));\n (0, _internalTestHelpers.verifyInjection)(assert, engine, 'route', '_bucketCache', (0, _container.privatize)(_templateObject));\n\n (0, _internalTestHelpers.verifyInjection)(assert, engine, 'route', '_router', 'router:main');\n\n (0, _internalTestHelpers.verifyRegistration)(assert, engine, 'component:-text-field');\n (0, _internalTestHelpers.verifyRegistration)(assert, engine, 'component:-text-area');\n (0, _internalTestHelpers.verifyRegistration)(assert, engine, 'component:-checkbox');\n (0, _internalTestHelpers.verifyRegistration)(assert, engine, 'component:link-to');\n\n (0, _internalTestHelpers.verifyRegistration)(assert, engine, 'service:-routing');\n (0, _internalTestHelpers.verifyInjection)(assert, engine, 'service:-routing', 'router', 'router:main');\n\n // DEBUGGING\n (0, _internalTestHelpers.verifyRegistration)(assert, engine, 'resolver-for-debugging:main');\n (0, _internalTestHelpers.verifyInjection)(assert, engine, 'container-debug-adapter:main', 'resolver', 'resolver-for-debugging:main');\n (0, _internalTestHelpers.verifyInjection)(assert, engine, 'data-adapter:main', 'containerDebugAdapter', 'container-debug-adapter:main');\n (0, _internalTestHelpers.verifyRegistration)(assert, engine, 'container-debug-adapter:main');\n (0, _internalTestHelpers.verifyRegistration)(assert, engine, 'component-lookup:main');\n\n (0, _internalTestHelpers.verifyInjection)(assert, engine, 'service:-dom-changes', 'document', 'service:-document');\n (0, _internalTestHelpers.verifyInjection)(assert, engine, 'service:-dom-tree-construction', 'document', 'service:-document');\n (0, _internalTestHelpers.verifyRegistration)(assert, engine, 'view:-outlet');\n (0, _internalTestHelpers.verifyRegistration)(assert, engine, (0, _container.privatize)(_templateObject2));\n (0, _internalTestHelpers.verifyRegistration)(assert, engine, 'template:-outlet');\n (0, _internalTestHelpers.verifyInjection)(assert, engine, 'view:-outlet', 'template', 'template:-outlet');\n (0, _internalTestHelpers.verifyInjection)(assert, engine, 'template', 'compiler', (0, _container.privatize)(_templateObject3));\n assert.deepEqual(engine.registeredOptionsForType('helper'), { instantiate: false }, 'optionsForType \\'helper\\'');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/error/tests/index_test', ['ember-babel', '@ember/error', 'internal-test-helpers'], function (_emberBabel, _error, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Ember Error Throwing', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.apply(this, arguments));\n }\n\n _class.prototype['@test new EmberError displays provided message'] = function testNewEmberErrorDisplaysProvidedMessage(assert) {\n assert.throws(function () {\n throw new _error.default('A Message');\n }, function (e) {\n return e.message === 'A Message';\n }, 'the assigned message was displayed');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/instrumentation/tests/index-test', ['ember-babel', '@ember/instrumentation', 'internal-test-helpers'], function (_emberBabel, _instrumentation, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Ember Instrumentation', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.afterEach = function afterEach() {\n (0, _instrumentation.reset)();\n };\n\n _class.prototype['@test execute block even if no listeners'] = function testExecuteBlockEvenIfNoListeners(assert) {\n var result = (0, _instrumentation.instrument)('render', {}, function () {\n return 'hello';\n });\n assert.equal(result, 'hello', 'called block');\n };\n\n _class.prototype['@test subscribing to a simple path receives the listener'] = function testSubscribingToASimplePathReceivesTheListener(assert) {\n assert.expect(12);\n\n var sentPayload = {};\n var count = 0;\n\n (0, _instrumentation.subscribe)('render', {\n before: function (name, timestamp, payload) {\n if (count === 0) {\n assert.strictEqual(name, 'render');\n } else {\n assert.strictEqual(name, 'render.handlebars');\n }\n\n assert.ok(typeof timestamp === 'number');\n assert.strictEqual(payload, sentPayload);\n },\n after: function (name, timestamp, payload) {\n if (count === 0) {\n assert.strictEqual(name, 'render');\n } else {\n assert.strictEqual(name, 'render.handlebars');\n }\n\n assert.ok(typeof timestamp === 'number');\n assert.strictEqual(payload, sentPayload);\n\n count++;\n }\n });\n\n (0, _instrumentation.instrument)('render', sentPayload, function () {});\n\n (0, _instrumentation.instrument)('render.handlebars', sentPayload, function () {});\n };\n\n _class.prototype['@test returning a value from the before callback passes it to the after callback'] = function testReturningAValueFromTheBeforeCallbackPassesItToTheAfterCallback(assert) {\n assert.expect(2);\n\n var passthru1 = {};\n var passthru2 = {};\n\n (0, _instrumentation.subscribe)('render', {\n before: function () {\n return passthru1;\n },\n after: function (name, timestamp, payload, beforeValue) {\n assert.strictEqual(beforeValue, passthru1);\n }\n });\n\n (0, _instrumentation.subscribe)('render', {\n before: function () {\n return passthru2;\n },\n after: function (name, timestamp, payload, beforeValue) {\n assert.strictEqual(beforeValue, passthru2);\n }\n });\n\n (0, _instrumentation.instrument)('render', null, function () {});\n };\n\n _class.prototype['@test instrument with 2 args (name, callback) no payload'] = function testInstrumentWith2ArgsNameCallbackNoPayload(assert) {\n assert.expect(1);\n\n (0, _instrumentation.subscribe)('render', {\n before: function (name, timestamp, payload) {\n assert.deepEqual(payload, {});\n },\n after: function () {}\n });\n\n (0, _instrumentation.instrument)('render', function () {});\n };\n\n _class.prototype['@test instrument with 3 args (name, callback, binding) no payload'] = function testInstrumentWith3ArgsNameCallbackBindingNoPayload(assert) {\n assert.expect(2);\n\n var binding = {};\n (0, _instrumentation.subscribe)('render', {\n before: function (name, timestamp, payload) {\n assert.deepEqual(payload, {});\n },\n after: function () {}\n });\n\n (0, _instrumentation.instrument)('render', function () {\n assert.deepEqual(this, binding);\n }, binding);\n };\n\n _class.prototype['@test instrument with 3 args (name, payload, callback) with payload'] = function testInstrumentWith3ArgsNamePayloadCallbackWithPayload(assert) {\n assert.expect(1);\n\n var expectedPayload = { hi: 1 };\n (0, _instrumentation.subscribe)('render', {\n before: function (name, timestamp, payload) {\n assert.deepEqual(payload, expectedPayload);\n },\n after: function () {}\n });\n\n (0, _instrumentation.instrument)('render', expectedPayload, function () {});\n };\n\n _class.prototype['@test instrument with 4 args (name, payload, callback, binding) with payload'] = function testInstrumentWith4ArgsNamePayloadCallbackBindingWithPayload(assert) {\n assert.expect(2);\n\n var expectedPayload = { hi: 1 };\n var binding = {};\n (0, _instrumentation.subscribe)('render', {\n before: function (name, timestamp, payload) {\n assert.deepEqual(payload, expectedPayload);\n },\n after: function () {}\n });\n\n (0, _instrumentation.instrument)('render', expectedPayload, function () {\n assert.deepEqual(this, binding);\n }, binding);\n };\n\n _class.prototype['@test raising an exception in the instrumentation attaches it to the payload'] = function testRaisingAnExceptionInTheInstrumentationAttachesItToThePayload(assert) {\n assert.expect(2);\n\n var error = new Error('Instrumentation');\n\n (0, _instrumentation.subscribe)('render', {\n before: function () {},\n after: function (name, timestamp, payload) {\n assert.strictEqual(payload.exception, error);\n }\n });\n\n (0, _instrumentation.subscribe)('render', {\n before: function () {},\n after: function (name, timestamp, payload) {\n assert.strictEqual(payload.exception, error);\n }\n });\n\n (0, _instrumentation.instrument)('render.handlebars', null, function () {\n throw error;\n });\n };\n\n _class.prototype['@test it is possible to add a new subscriber after the first instrument'] = function testItIsPossibleToAddANewSubscriberAfterTheFirstInstrument(assert) {\n (0, _instrumentation.instrument)('render.handlebars', null, function () {});\n\n (0, _instrumentation.subscribe)('render', {\n before: function () {\n assert.ok(true, 'Before callback was called');\n },\n after: function () {\n assert.ok(true, 'After callback was called');\n }\n });\n\n (0, _instrumentation.instrument)('render.handlebars', null, function () {});\n };\n\n _class.prototype['@test it is possible to remove a subscriber'] = function testItIsPossibleToRemoveASubscriber(assert) {\n assert.expect(4);\n\n var count = 0;\n\n var subscriber = (0, _instrumentation.subscribe)('render', {\n before: function () {\n assert.equal(count, 0);\n assert.ok(true, 'Before callback was called');\n },\n after: function () {\n assert.equal(count, 0);\n assert.ok(true, 'After callback was called');\n count++;\n }\n });\n\n (0, _instrumentation.instrument)('render.handlebars', null, function () {});\n\n (0, _instrumentation.unsubscribe)(subscriber);\n\n (0, _instrumentation.instrument)('render.handlebars', null, function () {});\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/map/tests/map_test', ['ember-babel', '@ember/map', '@ember/map/with-default', '@ember/map/lib/ordered-set', 'internal-test-helpers'], function (_emberBabel, _map, _withDefault, _orderedSet, _internalTestHelpers) {\n 'use strict';\n\n var object = void 0,\n number = void 0,\n string = void 0,\n map = void 0,\n variety = void 0;\n var varieties = [['Map', _map.default], ['MapWithDefault', _withDefault.default]];\n\n function testMap(nameAndFunc) {\n variety = nameAndFunc[0];\n\n (0, _internalTestHelpers.moduleFor)('Ember.' + variety + ' (forEach and get are implicitly tested)', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function beforeEach() {\n object = {};\n number = 42;\n string = 'foo';\n\n expectDeprecation(function () {\n map = nameAndFunc[1].create();\n }, 'Use of @ember/Map is deprecated. Please use native `Map` instead', { id: 'ember-map-deprecation', until: '3.5.0' });\n };\n\n _class.prototype['@test set'] = function testSet(assert) {\n map.set(object, 'winning');\n map.set(number, 'winning');\n map.set(string, 'winning');\n\n mapHasEntries(assert, [[object, 'winning'], [number, 'winning'], [string, 'winning']]);\n\n map.set(object, 'losing');\n map.set(number, 'losing');\n map.set(string, 'losing');\n\n mapHasEntries(assert, [[object, 'losing'], [number, 'losing'], [string, 'losing']]);\n\n assert.equal(map.has('nope'), false, 'expected the key `nope` to not be present');\n assert.equal(map.has({}), false, 'expected they key `{}` to not be present');\n };\n\n _class.prototype['@test set chaining'] = function testSetChaining(assert) {\n map.set(object, 'winning').set(number, 'winning').set(string, 'winning');\n\n mapHasEntries(assert, [[object, 'winning'], [number, 'winning'], [string, 'winning']]);\n\n map.set(object, 'losing').set(number, 'losing').set(string, 'losing');\n\n mapHasEntries(assert, [[object, 'losing'], [number, 'losing'], [string, 'losing']]);\n\n assert.equal(map.has('nope'), false, 'expected the key `nope` to not be present');\n assert.equal(map.has({}), false, 'expected they key `{}` to not be present');\n };\n\n _class.prototype['@test with key with undefined value'] = function testWithKeyWithUndefinedValue(assert) {\n map.set('foo', undefined);\n\n map.forEach(function (value, key) {\n assert.equal(value, undefined);\n assert.equal(key, 'foo');\n });\n\n assert.ok(map.has('foo'), 'has key foo, even with undefined value');\n\n assert.equal(map.size, 1);\n };\n\n _class.prototype['@test arity of forEach is 1 – es6 23.1.3.5'] = function testArityOfForEachIs1Es623135(assert) {\n assert.equal(map.forEach.length, 1, 'expected arity for map.forEach is 1');\n };\n\n _class.prototype['@test forEach throws without a callback as the first argument'] = function testForEachThrowsWithoutACallbackAsTheFirstArgument(assert) {\n assert.equal(map.forEach.length, 1, 'expected arity for map.forEach is 1');\n };\n\n _class.prototype['@test has empty collection'] = function testHasEmptyCollection(assert) {\n assert.equal(map.has('foo'), false);\n assert.equal(map.has(), false);\n };\n\n _class.prototype['@test delete'] = function testDelete(assert) {\n expectNoDeprecation();\n\n map.set(object, 'winning');\n map.set(number, 'winning');\n map.set(string, 'winning');\n\n map.delete(object);\n map.delete(number);\n map.delete(string);\n\n // doesn't explode\n map.delete({});\n\n mapHasEntries(assert, []);\n };\n\n _class.prototype['@test copy and then update'] = function testCopyAndThenUpdate(assert) {\n map.set(object, 'winning');\n map.set(number, 'winning');\n map.set(string, 'winning');\n\n var map2 = void 0;\n expectDeprecation(function () {\n map2 = map.copy();\n }, 'Use of @ember/Map is deprecated. Please use native `Map` instead', { id: 'ember-map-deprecation', until: '3.5.0' });\n\n map2.set(object, 'losing');\n map2.set(number, 'losing');\n map2.set(string, 'losing');\n\n mapHasEntries(assert, [[object, 'winning'], [number, 'winning'], [string, 'winning']]);\n\n mapHasEntries(assert, [[object, 'losing'], [number, 'losing'], [string, 'losing']], map2);\n };\n\n _class.prototype['@test copy and then delete'] = function testCopyAndThenDelete(assert) {\n map.set(object, 'winning');\n map.set(number, 'winning');\n map.set(string, 'winning');\n\n var map2 = void 0;\n expectDeprecation(function () {\n map2 = map.copy();\n }, 'Use of @ember/Map is deprecated. Please use native `Map` instead', { id: 'ember-map-deprecation', until: '3.5.0' });\n\n map2.delete(object);\n map2.delete(number);\n map2.delete(string);\n\n mapHasEntries(assert, [[object, 'winning'], [number, 'winning'], [string, 'winning']]);\n\n mapHasEntries(assert, [], map2);\n };\n\n _class.prototype['@test size'] = function testSize(assert) {\n //Add a key twice\n assert.equal(map.size, 0);\n map.set(string, 'a string');\n assert.equal(map.size, 1);\n map.set(string, 'the same string');\n assert.equal(map.size, 1);\n\n //Add another\n map.set(number, 'a number');\n assert.equal(map.size, 2);\n\n //Remove one that doesn't exist\n map.delete('does not exist');\n assert.equal(map.size, 2);\n\n //Check copy\n expectDeprecation(function () {\n var copy = map.copy();\n assert.equal(copy.size, 2);\n }, 'Use of @ember/Map is deprecated. Please use native `Map` instead', { id: 'ember-map-deprecation', until: '3.5.0' });\n\n //Remove a key twice\n map.delete(number);\n assert.equal(map.size, 1);\n map.delete(number);\n assert.equal(map.size, 1);\n\n //Remove the last key\n map.delete(string);\n assert.equal(map.size, 0);\n map.delete(string);\n assert.equal(map.size, 0);\n };\n\n _class.prototype['@test forEach without proper callback'] = function testForEachWithoutProperCallback(assert) {\n expectAssertion(function () {\n map.forEach();\n }, '[object Undefined] is not a function');\n\n expectAssertion(function () {\n map.forEach(undefined);\n }, '[object Undefined] is not a function');\n\n expectAssertion(function () {\n map.forEach(1);\n }, '[object Number] is not a function');\n\n expectAssertion(function () {\n map.forEach({});\n }, '[object Object] is not a function');\n\n map.forEach(function (value, key) {\n map.delete(key);\n });\n // ensure the error happens even if no data is present\n assert.equal(map.size, 0);\n expectAssertion(function () {\n map.forEach({});\n }, '[object Object] is not a function');\n };\n\n _class.prototype['@test forEach basic'] = function testForEachBasic(assert) {\n map.set('a', 1);\n map.set('b', 2);\n map.set('c', 3);\n\n var iteration = 0;\n\n var expectations = [{ value: 1, key: 'a', context: unboundThis }, { value: 2, key: 'b', context: unboundThis }, { value: 3, key: 'c', context: unboundThis }];\n\n map.forEach(function (value, key, theMap) {\n var expectation = expectations[iteration];\n\n assert.equal(value, expectation.value, 'value should be correct');\n assert.equal(key, expectation.key, 'key should be correct');\n assert.equal(this, expectation.context, 'context should be as if it was unbound');\n assert.equal(map, theMap, 'map being iterated over should be passed in');\n\n iteration++;\n });\n\n assert.equal(iteration, 3, 'expected 3 iterations');\n };\n\n _class.prototype['@test forEach basic /w context'] = function testForEachBasicWContext(assert) {\n map.set('a', 1);\n map.set('b', 2);\n map.set('c', 3);\n\n var iteration = 0;\n var context = {};\n var expectations = [{ value: 1, key: 'a', context: context }, { value: 2, key: 'b', context: context }, { value: 3, key: 'c', context: context }];\n\n map.forEach(function (value, key, theMap) {\n var expectation = expectations[iteration];\n\n assert.equal(value, expectation.value, 'value should be correct');\n assert.equal(key, expectation.key, 'key should be correct');\n assert.equal(this, expectation.context, 'context should be as if it was unbound');\n assert.equal(map, theMap, 'map being iterated over should be passed in');\n\n iteration++;\n }, context);\n\n assert.equal(iteration, 3, 'expected 3 iterations');\n };\n\n _class.prototype['@test forEach basic /w deletion while enumerating'] = function testForEachBasicWDeletionWhileEnumerating(assert) {\n map.set('a', 1);\n map.set('b', 2);\n map.set('c', 3);\n\n var iteration = 0;\n\n var expectations = [{ value: 1, key: 'a', context: unboundThis }, { value: 2, key: 'b', context: unboundThis }];\n\n map.forEach(function (value, key, theMap) {\n if (iteration === 0) {\n map.delete('c');\n }\n\n var expectation = expectations[iteration];\n\n assert.equal(value, expectation.value, 'value should be correct');\n assert.equal(key, expectation.key, 'key should be correct');\n assert.equal(this, expectation.context, 'context should be as if it was unbound');\n assert.equal(map, theMap, 'map being iterated over should be passed in');\n\n iteration++;\n });\n\n assert.equal(iteration, 2, 'expected 3 iterations');\n };\n\n _class.prototype['@test forEach basic /w addition while enumerating'] = function testForEachBasicWAdditionWhileEnumerating(assert) {\n map.set('a', 1);\n map.set('b', 2);\n map.set('c', 3);\n\n var iteration = 0;\n\n var expectations = [{ value: 1, key: 'a', context: unboundThis }, { value: 2, key: 'b', context: unboundThis }, { value: 3, key: 'c', context: unboundThis }, { value: 4, key: 'd', context: unboundThis }];\n\n map.forEach(function (value, key, theMap) {\n if (iteration === 0) {\n map.set('d', 4);\n }\n\n var expectation = expectations[iteration];\n\n assert.equal(value, expectation.value, 'value should be correct');\n assert.equal(key, expectation.key, 'key should be correct');\n assert.equal(this, expectation.context, 'context should be as if it was unbound');\n assert.equal(map, theMap, 'map being iterated over should be passed in');\n\n iteration++;\n });\n\n assert.equal(iteration, 4, 'expected 3 iterations');\n };\n\n _class.prototype['@test clear'] = function testClear(assert) {\n var iterations = 0;\n\n map.set('a', 1);\n map.set('b', 2);\n map.set('c', 3);\n map.set('d', 4);\n\n assert.equal(map.size, 4);\n\n map.forEach(function () {\n iterations++;\n });\n assert.equal(iterations, 4);\n\n map.clear();\n assert.equal(map.size, 0);\n iterations = 0;\n map.forEach(function () {\n iterations++;\n });\n assert.equal(iterations, 0);\n };\n\n _class.prototype['@skip -0'] = function skip0(assert) {\n assert.equal(map.has(-0), false);\n assert.equal(map.has(0), false);\n\n map.set(-0, 'zero');\n\n assert.equal(map.has(-0), true);\n assert.equal(map.has(0), true);\n\n assert.equal(map.get(0), 'zero');\n assert.equal(map.get(-0), 'zero');\n\n map.forEach(function (value, key) {\n assert.equal(1 / key, Infinity, 'spec says key should be positive zero');\n });\n };\n\n _class.prototype['@test NaN'] = function testNaN(assert) {\n assert.equal(map.has(NaN), false);\n\n map.set(NaN, 'not-a-number');\n\n assert.equal(map.has(NaN), true);\n\n assert.equal(map.get(NaN), 'not-a-number');\n };\n\n _class.prototype['@test NaN Boxed'] = function testNaNBoxed(assert) {\n //jshint -W053\n var boxed = new Number(NaN);\n assert.equal(map.has(boxed), false);\n\n map.set(boxed, 'not-a-number');\n\n assert.equal(map.has(boxed), true);\n assert.equal(map.has(NaN), false);\n\n assert.equal(map.get(NaN), undefined);\n assert.equal(map.get(boxed), 'not-a-number');\n };\n\n _class.prototype['@test 0 value'] = function test0Value(assert) {\n var obj = {};\n assert.equal(map.has(obj), false);\n\n assert.equal(map.size, 0);\n map.set(obj, 0);\n assert.equal(map.size, 1);\n\n assert.equal(map.has(obj), true);\n assert.equal(map.get(obj), 0);\n\n map.delete(obj);\n assert.equal(map.has(obj), false);\n assert.equal(map.get(obj), undefined);\n assert.equal(map.size, 0);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n var mapHasLength = function (assert, expected, theMap) {\n theMap = theMap || map;\n\n var length = 0;\n theMap.forEach(function () {\n length++;\n });\n\n assert.equal(length, expected, 'map should contain ' + expected + ' items');\n };\n\n var mapHasEntries = function (assert, entries, theMap) {\n theMap = theMap || map;\n\n for (var i = 0; i < entries.length; i++) {\n assert.equal(theMap.get(entries[i][0]), entries[i][1]);\n assert.equal(theMap.has(entries[i][0]), true);\n }\n\n mapHasLength(assert, entries.length, theMap);\n };\n\n var unboundThis = void 0;\n\n (function () {\n unboundThis = this;\n })();\n }\n\n for (var i = 0; i < varieties.length; i++) {\n testMap(varieties[i]);\n }\n\n (0, _internalTestHelpers.moduleFor)('MapWithDefault - default values', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n _class2.prototype['@test Retrieving a value that has not been set returns and sets a default value'] = function testRetrievingAValueThatHasNotBeenSetReturnsAndSetsADefaultValue(assert) {\n var map = void 0;\n expectDeprecation(function () {\n map = _withDefault.default.create({\n defaultValue: function (key) {\n return [key];\n }\n });\n }, 'Use of @ember/Map is deprecated. Please use native `Map` instead', { id: 'ember-map-deprecation', until: '3.5.0' });\n\n var value = map.get('ohai');\n assert.deepEqual(value, ['ohai']);\n\n assert.strictEqual(value, map.get('ohai'));\n };\n\n _class2.prototype['@test Map.prototype.constructor'] = function testMapPrototypeConstructor(assert) {\n expectDeprecation(function () {\n var map = new _map.default();\n assert.equal(map.constructor, _map.default);\n }, 'Use of @ember/Map is deprecated. Please use native `Map` instead', { id: 'ember-map-deprecation', until: '3.5.0' });\n };\n\n _class2.prototype['@test MapWithDefault.prototype.constructor'] = function testMapWithDefaultPrototypeConstructor(assert) {\n expectDeprecation(function () {\n var map = new _withDefault.default({\n defaultValue: function (key) {\n return key;\n }\n });\n assert.equal(map.constructor, _withDefault.default);\n }, 'Use of @ember/Map is deprecated. Please use native `Map` instead', { id: 'ember-map-deprecation', until: '3.5.0' });\n };\n\n _class2.prototype['@test Copying a MapWithDefault copies the default value'] = function testCopyingAMapWithDefaultCopiesTheDefaultValue(assert) {\n var map = void 0;\n expectDeprecation(function () {\n map = _withDefault.default.create({\n defaultValue: function (key) {\n return [key];\n }\n });\n }, 'Use of @ember/Map is deprecated. Please use native `Map` instead', { id: 'ember-map-deprecation', until: '3.5.0' });\n\n map.set('ohai', 1);\n map.get('bai');\n\n var map2 = void 0;\n expectDeprecation(function () {\n map2 = map.copy();\n }, 'Use of @ember/Map is deprecated. Please use native `Map` instead', { id: 'ember-map-deprecation', until: '3.5.0' });\n\n assert.equal(map2.get('ohai'), 1);\n assert.deepEqual(map2.get('bai'), ['bai']);\n\n map2.set('kthx', 3);\n\n assert.deepEqual(map.get('kthx'), ['kthx']);\n assert.equal(map2.get('kthx'), 3);\n\n assert.deepEqual(map2.get('default'), ['default']);\n\n map2.defaultValue = function (key) {\n return ['tom is on', key];\n };\n\n assert.deepEqual(map2.get('drugs'), ['tom is on', 'drugs']);\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('OrderedSet', function (_AbstractTestCase3) {\n (0, _emberBabel.inherits)(_class3, _AbstractTestCase3);\n\n function _class3() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase3.apply(this, arguments));\n }\n\n _class3.prototype.beforeEach = function beforeEach() {\n object = {};\n number = 42;\n string = 'foo';\n\n expectDeprecation(function () {\n map = _orderedSet.default.create();\n }, 'Use of @ember/OrderedSet is deprecated. Please use native `Map` instead', { id: 'ember-map-deprecation', until: '3.5.0' });\n };\n\n _class3.prototype['@test add returns the set'] = function testAddReturnsTheSet(assert) {\n var obj = {};\n assert.equal(map.add(obj), map);\n assert.equal(map.add(obj), map, 'when it is already in the set');\n };\n\n return _class3;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('__OrderedSet__', function (_AbstractTestCase4) {\n (0, _emberBabel.inherits)(_class4, _AbstractTestCase4);\n\n function _class4() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase4.apply(this, arguments));\n }\n\n _class4.prototype['@test private __OrderedSet__ can be created without deprecation'] = function testPrivate__OrderedSet__CanBeCreatedWithoutDeprecation() {\n expectNoDeprecation();\n _orderedSet.__OrderedSet__.create();\n };\n\n return _class4;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/object/tests/computed/computed_macros_test', ['ember-babel', '@ember/-internals/metal', '@ember/object/computed', '@ember/-internals/runtime', 'internal-test-helpers'], function (_emberBabel, _metal, _computed, _runtime, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('CP macros', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Ember.computed.empty'] = function testEmberComputedEmpty(assert) {\n var obj = _runtime.Object.extend({\n bestLannister: null,\n lannisters: null,\n\n bestLannisterUnspecified: (0, _computed.empty)('bestLannister'),\n noLannistersKnown: (0, _computed.empty)('lannisters')\n }).create({\n lannisters: (0, _runtime.A)()\n });\n\n assert.equal((0, _metal.get)(obj, 'bestLannisterUnspecified'), true, 'bestLannister initially empty');\n assert.equal((0, _metal.get)(obj, 'noLannistersKnown'), true, 'lannisters initially empty');\n\n (0, _metal.get)(obj, 'lannisters').pushObject('Tyrion');\n (0, _metal.set)(obj, 'bestLannister', 'Tyrion');\n\n assert.equal((0, _metal.get)(obj, 'bestLannisterUnspecified'), false, 'empty respects strings');\n assert.equal((0, _metal.get)(obj, 'noLannistersKnown'), false, 'empty respects array mutations');\n };\n\n _class.prototype['@test Ember.computed.notEmpty'] = function testEmberComputedNotEmpty(assert) {\n var obj = _runtime.Object.extend({\n bestLannister: null,\n lannisters: null,\n\n bestLannisterSpecified: (0, _computed.notEmpty)('bestLannister'),\n LannistersKnown: (0, _computed.notEmpty)('lannisters')\n }).create({\n lannisters: (0, _runtime.A)()\n });\n\n assert.equal((0, _metal.get)(obj, 'bestLannisterSpecified'), false, 'bestLannister initially empty');\n assert.equal((0, _metal.get)(obj, 'LannistersKnown'), false, 'lannisters initially empty');\n\n (0, _metal.get)(obj, 'lannisters').pushObject('Tyrion');\n (0, _metal.set)(obj, 'bestLannister', 'Tyrion');\n\n assert.equal((0, _metal.get)(obj, 'bestLannisterSpecified'), true, 'empty respects strings');\n assert.equal((0, _metal.get)(obj, 'LannistersKnown'), true, 'empty respects array mutations');\n };\n\n _class.prototype['@test computed.not'] = function testComputedNot(assert) {\n var obj = { foo: true };\n (0, _metal.defineProperty)(obj, 'notFoo', (0, _computed.not)('foo'));\n assert.equal((0, _metal.get)(obj, 'notFoo'), false);\n\n obj = { foo: { bar: true } };\n (0, _metal.defineProperty)(obj, 'notFoo', (0, _computed.not)('foo.bar'));\n assert.equal((0, _metal.get)(obj, 'notFoo'), false);\n };\n\n _class.prototype['@test computed.empty'] = function testComputedEmpty(assert) {\n var obj = { foo: [], bar: undefined, baz: null, quz: '' };\n (0, _metal.defineProperty)(obj, 'fooEmpty', (0, _computed.empty)('foo'));\n (0, _metal.defineProperty)(obj, 'barEmpty', (0, _computed.empty)('bar'));\n (0, _metal.defineProperty)(obj, 'bazEmpty', (0, _computed.empty)('baz'));\n (0, _metal.defineProperty)(obj, 'quzEmpty', (0, _computed.empty)('quz'));\n\n assert.equal((0, _metal.get)(obj, 'fooEmpty'), true);\n (0, _metal.set)(obj, 'foo', [1]);\n assert.equal((0, _metal.get)(obj, 'fooEmpty'), false);\n assert.equal((0, _metal.get)(obj, 'barEmpty'), true);\n assert.equal((0, _metal.get)(obj, 'bazEmpty'), true);\n assert.equal((0, _metal.get)(obj, 'quzEmpty'), true);\n (0, _metal.set)(obj, 'quz', 'asdf');\n assert.equal((0, _metal.get)(obj, 'quzEmpty'), false);\n };\n\n _class.prototype['@test computed.bool'] = function testComputedBool(assert) {\n var obj = {\n foo: function () {},\n bar: 'asdf', baz: null, quz: false };\n (0, _metal.defineProperty)(obj, 'fooBool', (0, _computed.bool)('foo'));\n (0, _metal.defineProperty)(obj, 'barBool', (0, _computed.bool)('bar'));\n (0, _metal.defineProperty)(obj, 'bazBool', (0, _computed.bool)('baz'));\n (0, _metal.defineProperty)(obj, 'quzBool', (0, _computed.bool)('quz'));\n assert.equal((0, _metal.get)(obj, 'fooBool'), true);\n assert.equal((0, _metal.get)(obj, 'barBool'), true);\n assert.equal((0, _metal.get)(obj, 'bazBool'), false);\n assert.equal((0, _metal.get)(obj, 'quzBool'), false);\n };\n\n _class.prototype['@test computed.alias'] = function testComputedAlias(assert) {\n var obj = { bar: 'asdf', baz: null, quz: false };\n (0, _metal.defineProperty)(obj, 'bay', (0, _metal.computed)(function () {\n return 'apple';\n }));\n\n (0, _metal.defineProperty)(obj, 'barAlias', (0, _metal.alias)('bar'));\n (0, _metal.defineProperty)(obj, 'bazAlias', (0, _metal.alias)('baz'));\n (0, _metal.defineProperty)(obj, 'quzAlias', (0, _metal.alias)('quz'));\n (0, _metal.defineProperty)(obj, 'bayAlias', (0, _metal.alias)('bay'));\n\n assert.equal((0, _metal.get)(obj, 'barAlias'), 'asdf');\n assert.equal((0, _metal.get)(obj, 'bazAlias'), null);\n assert.equal((0, _metal.get)(obj, 'quzAlias'), false);\n assert.equal((0, _metal.get)(obj, 'bayAlias'), 'apple');\n\n (0, _metal.set)(obj, 'barAlias', 'newBar');\n (0, _metal.set)(obj, 'bazAlias', 'newBaz');\n (0, _metal.set)(obj, 'quzAlias', null);\n\n assert.equal((0, _metal.get)(obj, 'barAlias'), 'newBar');\n assert.equal((0, _metal.get)(obj, 'bazAlias'), 'newBaz');\n assert.equal((0, _metal.get)(obj, 'quzAlias'), null);\n\n assert.equal((0, _metal.get)(obj, 'bar'), 'newBar');\n assert.equal((0, _metal.get)(obj, 'baz'), 'newBaz');\n assert.equal((0, _metal.get)(obj, 'quz'), null);\n };\n\n _class.prototype['@test computed.alias set'] = function testComputedAliasSet(assert) {\n var obj = {};\n var constantValue = 'always `a`';\n\n (0, _metal.defineProperty)(obj, 'original', (0, _metal.computed)({\n get: function () {\n return constantValue;\n },\n set: function () {\n return constantValue;\n }\n }));\n (0, _metal.defineProperty)(obj, 'aliased', (0, _metal.alias)('original'));\n\n assert.equal((0, _metal.get)(obj, 'original'), constantValue);\n assert.equal((0, _metal.get)(obj, 'aliased'), constantValue);\n\n (0, _metal.set)(obj, 'aliased', 'should not set to this value');\n\n assert.equal((0, _metal.get)(obj, 'original'), constantValue);\n assert.equal((0, _metal.get)(obj, 'aliased'), constantValue);\n };\n\n _class.prototype['@test computed.match'] = function testComputedMatch(assert) {\n var obj = { name: 'Paul' };\n (0, _metal.defineProperty)(obj, 'isPaul', (0, _computed.match)('name', /Paul/));\n\n assert.equal((0, _metal.get)(obj, 'isPaul'), true, 'is Paul');\n\n (0, _metal.set)(obj, 'name', 'Pierre');\n\n assert.equal((0, _metal.get)(obj, 'isPaul'), false, 'is not Paul anymore');\n };\n\n _class.prototype['@test computed.notEmpty'] = function testComputedNotEmpty(assert) {\n var obj = { items: [1] };\n (0, _metal.defineProperty)(obj, 'hasItems', (0, _computed.notEmpty)('items'));\n\n assert.equal((0, _metal.get)(obj, 'hasItems'), true, 'is not empty');\n\n (0, _metal.set)(obj, 'items', []);\n\n assert.equal((0, _metal.get)(obj, 'hasItems'), false, 'is empty');\n };\n\n _class.prototype['@test computed.equal'] = function testComputedEqual(assert) {\n var obj = { name: 'Paul' };\n (0, _metal.defineProperty)(obj, 'isPaul', (0, _computed.equal)('name', 'Paul'));\n\n assert.equal((0, _metal.get)(obj, 'isPaul'), true, 'is Paul');\n\n (0, _metal.set)(obj, 'name', 'Pierre');\n\n assert.equal((0, _metal.get)(obj, 'isPaul'), false, 'is not Paul anymore');\n };\n\n _class.prototype['@test computed.gt'] = function testComputedGt(assert) {\n var obj = { number: 2 };\n (0, _metal.defineProperty)(obj, 'isGreaterThenOne', (0, _computed.gt)('number', 1));\n\n assert.equal((0, _metal.get)(obj, 'isGreaterThenOne'), true, 'is gt');\n\n (0, _metal.set)(obj, 'number', 1);\n\n assert.equal((0, _metal.get)(obj, 'isGreaterThenOne'), false, 'is not gt');\n\n (0, _metal.set)(obj, 'number', 0);\n\n assert.equal((0, _metal.get)(obj, 'isGreaterThenOne'), false, 'is not gt');\n };\n\n _class.prototype['@test computed.gte'] = function testComputedGte(assert) {\n var obj = { number: 2 };\n (0, _metal.defineProperty)(obj, 'isGreaterOrEqualThenOne', (0, _computed.gte)('number', 1));\n\n assert.equal((0, _metal.get)(obj, 'isGreaterOrEqualThenOne'), true, 'is gte');\n\n (0, _metal.set)(obj, 'number', 1);\n\n assert.equal((0, _metal.get)(obj, 'isGreaterOrEqualThenOne'), true, 'is gte');\n\n (0, _metal.set)(obj, 'number', 0);\n\n assert.equal((0, _metal.get)(obj, 'isGreaterOrEqualThenOne'), false, 'is not gte');\n };\n\n _class.prototype['@test computed.lt'] = function testComputedLt(assert) {\n var obj = { number: 0 };\n (0, _metal.defineProperty)(obj, 'isLesserThenOne', (0, _computed.lt)('number', 1));\n\n assert.equal((0, _metal.get)(obj, 'isLesserThenOne'), true, 'is lt');\n\n (0, _metal.set)(obj, 'number', 1);\n\n assert.equal((0, _metal.get)(obj, 'isLesserThenOne'), false, 'is not lt');\n\n (0, _metal.set)(obj, 'number', 2);\n\n assert.equal((0, _metal.get)(obj, 'isLesserThenOne'), false, 'is not lt');\n };\n\n _class.prototype['@test computed.lte'] = function testComputedLte(assert) {\n var obj = { number: 0 };\n (0, _metal.defineProperty)(obj, 'isLesserOrEqualThenOne', (0, _computed.lte)('number', 1));\n\n assert.equal((0, _metal.get)(obj, 'isLesserOrEqualThenOne'), true, 'is lte');\n\n (0, _metal.set)(obj, 'number', 1);\n\n assert.equal((0, _metal.get)(obj, 'isLesserOrEqualThenOne'), true, 'is lte');\n\n (0, _metal.set)(obj, 'number', 2);\n\n assert.equal((0, _metal.get)(obj, 'isLesserOrEqualThenOne'), false, 'is not lte');\n };\n\n _class.prototype['@test computed.and two properties'] = function testComputedAndTwoProperties(assert) {\n var obj = { one: true, two: true };\n (0, _metal.defineProperty)(obj, 'oneAndTwo', (0, _computed.and)('one', 'two'));\n\n assert.equal((0, _metal.get)(obj, 'oneAndTwo'), true, 'one and two');\n\n (0, _metal.set)(obj, 'one', false);\n\n assert.equal((0, _metal.get)(obj, 'oneAndTwo'), false, 'one and not two');\n\n (0, _metal.set)(obj, 'one', null);\n (0, _metal.set)(obj, 'two', 'Yes');\n\n assert.equal((0, _metal.get)(obj, 'oneAndTwo'), null, 'returns falsy value as in &&');\n\n (0, _metal.set)(obj, 'one', true);\n (0, _metal.set)(obj, 'two', 2);\n\n assert.equal((0, _metal.get)(obj, 'oneAndTwo'), 2, 'returns truthy value as in &&');\n };\n\n _class.prototype['@test computed.and three properties'] = function testComputedAndThreeProperties(assert) {\n var obj = { one: true, two: true, three: true };\n (0, _metal.defineProperty)(obj, 'oneTwoThree', (0, _computed.and)('one', 'two', 'three'));\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), true, 'one and two and three');\n\n (0, _metal.set)(obj, 'one', false);\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), false, 'one and not two and not three');\n\n (0, _metal.set)(obj, 'one', true);\n (0, _metal.set)(obj, 'two', 2);\n (0, _metal.set)(obj, 'three', 3);\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), 3, 'returns truthy value as in &&');\n };\n\n _class.prototype['@test computed.and expand properties'] = function testComputedAndExpandProperties(assert) {\n var obj = { one: true, two: true, three: true };\n (0, _metal.defineProperty)(obj, 'oneTwoThree', (0, _computed.and)('{one,two,three}'));\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), true, 'one and two and three');\n\n (0, _metal.set)(obj, 'one', false);\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), false, 'one and not two and not three');\n\n (0, _metal.set)(obj, 'one', true);\n (0, _metal.set)(obj, 'two', 2);\n (0, _metal.set)(obj, 'three', 3);\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), 3, 'returns truthy value as in &&');\n };\n\n _class.prototype['@test computed.or two properties'] = function testComputedOrTwoProperties(assert) {\n var obj = { one: true, two: true };\n (0, _metal.defineProperty)(obj, 'oneOrTwo', (0, _computed.or)('one', 'two'));\n\n assert.equal((0, _metal.get)(obj, 'oneOrTwo'), true, 'one or two');\n\n (0, _metal.set)(obj, 'one', false);\n\n assert.equal((0, _metal.get)(obj, 'oneOrTwo'), true, 'one or two');\n\n (0, _metal.set)(obj, 'two', false);\n\n assert.equal((0, _metal.get)(obj, 'oneOrTwo'), false, 'nor one nor two');\n\n (0, _metal.set)(obj, 'two', null);\n\n assert.equal((0, _metal.get)(obj, 'oneOrTwo'), null, 'returns last falsy value as in ||');\n\n (0, _metal.set)(obj, 'two', true);\n\n assert.equal((0, _metal.get)(obj, 'oneOrTwo'), true, 'one or two');\n\n (0, _metal.set)(obj, 'one', 1);\n\n assert.equal((0, _metal.get)(obj, 'oneOrTwo'), 1, 'returns truthy value as in ||');\n };\n\n _class.prototype['@test computed.or three properties'] = function testComputedOrThreeProperties(assert) {\n var obj = { one: true, two: true, three: true };\n (0, _metal.defineProperty)(obj, 'oneTwoThree', (0, _computed.or)('one', 'two', 'three'));\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), true, 'one or two or three');\n\n (0, _metal.set)(obj, 'one', false);\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), true, 'one or two or three');\n\n (0, _metal.set)(obj, 'two', false);\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), true, 'one or two or three');\n\n (0, _metal.set)(obj, 'three', false);\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), false, 'one or two or three');\n\n (0, _metal.set)(obj, 'three', null);\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), null, 'returns last falsy value as in ||');\n\n (0, _metal.set)(obj, 'two', true);\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), true, 'one or two or three');\n\n (0, _metal.set)(obj, 'one', 1);\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), 1, 'returns truthy value as in ||');\n };\n\n _class.prototype['@test computed.or expand properties'] = function testComputedOrExpandProperties(assert) {\n var obj = { one: true, two: true, three: true };\n (0, _metal.defineProperty)(obj, 'oneTwoThree', (0, _computed.or)('{one,two,three}'));\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), true, 'one or two or three');\n\n (0, _metal.set)(obj, 'one', false);\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), true, 'one or two or three');\n\n (0, _metal.set)(obj, 'two', false);\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), true, 'one or two or three');\n\n (0, _metal.set)(obj, 'three', false);\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), false, 'one or two or three');\n\n (0, _metal.set)(obj, 'three', null);\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), null, 'returns last falsy value as in ||');\n\n (0, _metal.set)(obj, 'two', true);\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), true, 'one or two or three');\n\n (0, _metal.set)(obj, 'one', 1);\n\n assert.equal((0, _metal.get)(obj, 'oneTwoThree'), 1, 'returns truthy value as in ||');\n };\n\n _class.prototype['@test computed.or and computed.and warn about dependent keys with spaces'] = function testComputedOrAndComputedAndWarnAboutDependentKeysWithSpaces() {\n var obj = { one: true, two: true };\n expectAssertion(function () {\n (0, _metal.defineProperty)(obj, 'oneOrTwo', (0, _computed.or)('one', 'two three'));\n }, /Dependent keys passed to computed\\.or\\(\\) can't have spaces\\./);\n\n expectAssertion(function () {\n (0, _metal.defineProperty)(obj, 'oneAndTwo', (0, _computed.and)('one', 'two three'));\n }, /Dependent keys passed to computed\\.and\\(\\) can't have spaces\\./);\n };\n\n _class.prototype['@test computed.oneWay'] = function testComputedOneWay(assert) {\n var obj = {\n firstName: 'Teddy',\n lastName: 'Zeenny'\n };\n\n (0, _metal.defineProperty)(obj, 'nickName', (0, _computed.oneWay)('firstName'));\n\n assert.equal((0, _metal.get)(obj, 'firstName'), 'Teddy');\n assert.equal((0, _metal.get)(obj, 'lastName'), 'Zeenny');\n assert.equal((0, _metal.get)(obj, 'nickName'), 'Teddy');\n\n (0, _metal.set)(obj, 'nickName', 'TeddyBear');\n\n assert.equal((0, _metal.get)(obj, 'firstName'), 'Teddy');\n assert.equal((0, _metal.get)(obj, 'lastName'), 'Zeenny');\n\n assert.equal((0, _metal.get)(obj, 'nickName'), 'TeddyBear');\n\n (0, _metal.set)(obj, 'firstName', 'TEDDDDDDDDYYY');\n\n assert.equal((0, _metal.get)(obj, 'nickName'), 'TeddyBear');\n };\n\n _class.prototype['@test computed.readOnly'] = function testComputedReadOnly(assert) {\n var obj = {\n firstName: 'Teddy',\n lastName: 'Zeenny'\n };\n\n (0, _metal.defineProperty)(obj, 'nickName', (0, _computed.readOnly)('firstName'));\n\n assert.equal((0, _metal.get)(obj, 'firstName'), 'Teddy');\n assert.equal((0, _metal.get)(obj, 'lastName'), 'Zeenny');\n assert.equal((0, _metal.get)(obj, 'nickName'), 'Teddy');\n\n assert.throws(function () {\n (0, _metal.set)(obj, 'nickName', 'TeddyBear');\n }, / /);\n\n assert.equal((0, _metal.get)(obj, 'firstName'), 'Teddy');\n assert.equal((0, _metal.get)(obj, 'lastName'), 'Zeenny');\n\n assert.equal((0, _metal.get)(obj, 'nickName'), 'Teddy');\n\n (0, _metal.set)(obj, 'firstName', 'TEDDDDDDDDYYY');\n\n assert.equal((0, _metal.get)(obj, 'nickName'), 'TEDDDDDDDDYYY');\n };\n\n _class.prototype['@test computed.deprecatingAlias'] = function testComputedDeprecatingAlias(assert) {\n var obj = { bar: 'asdf', baz: null, quz: false };\n (0, _metal.defineProperty)(obj, 'bay', (0, _metal.computed)(function () {\n return 'apple';\n }));\n\n (0, _metal.defineProperty)(obj, 'barAlias', (0, _computed.deprecatingAlias)('bar', { id: 'bar-deprecation', until: 'some.version' }));\n (0, _metal.defineProperty)(obj, 'bazAlias', (0, _computed.deprecatingAlias)('baz', { id: 'baz-deprecation', until: 'some.version' }));\n (0, _metal.defineProperty)(obj, 'quzAlias', (0, _computed.deprecatingAlias)('quz', { id: 'quz-deprecation', until: 'some.version' }));\n (0, _metal.defineProperty)(obj, 'bayAlias', (0, _computed.deprecatingAlias)('bay', { id: 'bay-deprecation', until: 'some.version' }));\n\n expectDeprecation(function () {\n assert.equal((0, _metal.get)(obj, 'barAlias'), 'asdf');\n }, 'Usage of `barAlias` is deprecated, use `bar` instead.');\n\n expectDeprecation(function () {\n assert.equal((0, _metal.get)(obj, 'bazAlias'), null);\n }, 'Usage of `bazAlias` is deprecated, use `baz` instead.');\n\n expectDeprecation(function () {\n assert.equal((0, _metal.get)(obj, 'quzAlias'), false);\n }, 'Usage of `quzAlias` is deprecated, use `quz` instead.');\n\n expectDeprecation(function () {\n assert.equal((0, _metal.get)(obj, 'bayAlias'), 'apple');\n }, 'Usage of `bayAlias` is deprecated, use `bay` instead.');\n\n expectDeprecation(function () {\n (0, _metal.set)(obj, 'barAlias', 'newBar');\n }, 'Usage of `barAlias` is deprecated, use `bar` instead.');\n\n expectDeprecation(function () {\n (0, _metal.set)(obj, 'bazAlias', 'newBaz');\n }, 'Usage of `bazAlias` is deprecated, use `baz` instead.');\n\n expectDeprecation(function () {\n (0, _metal.set)(obj, 'quzAlias', null);\n }, 'Usage of `quzAlias` is deprecated, use `quz` instead.');\n\n assert.equal((0, _metal.get)(obj, 'barAlias'), 'newBar');\n assert.equal((0, _metal.get)(obj, 'bazAlias'), 'newBaz');\n assert.equal((0, _metal.get)(obj, 'quzAlias'), null);\n\n assert.equal((0, _metal.get)(obj, 'bar'), 'newBar');\n assert.equal((0, _metal.get)(obj, 'baz'), 'newBaz');\n assert.equal((0, _metal.get)(obj, 'quz'), null);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/object/tests/computed/reduce_computed_macros_test', ['ember-babel', '@ember/runloop', '@ember/-internals/metal', '@ember/-internals/runtime', '@ember/object/computed', 'internal-test-helpers'], function (_emberBabel, _runloop, _metal, _runtime, _computed, _internalTestHelpers) {\n 'use strict';\n\n var obj = void 0;\n (0, _internalTestHelpers.moduleFor)('map', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function beforeEach() {\n obj = _runtime.Object.extend({\n mapped: (0, _computed.map)('array.@each.v', function (item) {\n return item.v;\n }),\n mappedObjects: (0, _computed.map)('arrayObjects.@each.v', function (item) {\n return {\n name: item.v.name\n };\n })\n }).create({\n arrayObjects: (0, _runtime.A)([{ v: { name: 'Robert' } }, { v: { name: 'Leanna' } }]),\n\n array: (0, _runtime.A)([{ v: 1 }, { v: 3 }, { v: 2 }, { v: 1 }])\n });\n };\n\n _class.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class.prototype['@test map is readOnly'] = function testMapIsReadOnly(assert) {\n assert.throws(function () {\n obj.set('mapped', 1);\n }, /Cannot set read-only property \"mapped\" on object:/);\n };\n\n _class.prototype['@test it maps simple properties'] = function testItMapsSimpleProperties(assert) {\n assert.deepEqual(obj.get('mapped'), [1, 3, 2, 1]);\n\n obj.get('array').pushObject({ v: 5 });\n\n assert.deepEqual(obj.get('mapped'), [1, 3, 2, 1, 5]);\n\n (0, _runtime.removeAt)(obj.get('array'), 3);\n\n assert.deepEqual(obj.get('mapped'), [1, 3, 2, 5]);\n };\n\n _class.prototype['@test it maps simple unshifted properties'] = function testItMapsSimpleUnshiftedProperties(assert) {\n var array = (0, _runtime.A)();\n\n obj = _runtime.Object.extend({\n mapped: (0, _computed.map)('array', function (item) {\n return item.toUpperCase();\n })\n }).create({\n array: array\n });\n\n array.unshiftObject('c');\n array.unshiftObject('b');\n array.unshiftObject('a');\n\n array.popObject();\n\n assert.deepEqual(obj.get('mapped'), ['A', 'B'], 'properties unshifted in sequence are mapped correctly');\n };\n\n _class.prototype['@test it has the correct `this`'] = function testItHasTheCorrectThis(assert) {\n obj = _runtime.Object.extend({\n mapped: (0, _computed.map)('array', function (item) {\n assert.equal(this, obj, 'should have correct context');\n return this.upperCase(item);\n }),\n upperCase: function (string) {\n return string.toUpperCase();\n }\n }).create({\n array: ['a', 'b', 'c']\n });\n\n assert.deepEqual(obj.get('mapped'), ['A', 'B', 'C'], 'properties unshifted in sequence are mapped correctly');\n };\n\n _class.prototype['@test it passes the index to the callback'] = function testItPassesTheIndexToTheCallback(assert) {\n var array = ['a', 'b', 'c'];\n\n obj = _runtime.Object.extend({\n mapped: (0, _computed.map)('array', function (item, index) {\n return index;\n })\n }).create({\n array: array\n });\n\n assert.deepEqual(obj.get('mapped'), [0, 1, 2], 'index is passed to callback correctly');\n };\n\n _class.prototype['@test it maps objects'] = function testItMapsObjects(assert) {\n assert.deepEqual(obj.get('mappedObjects'), [{ name: 'Robert' }, { name: 'Leanna' }]);\n\n obj.get('arrayObjects').pushObject({\n v: { name: 'Eddard' }\n });\n\n assert.deepEqual(obj.get('mappedObjects'), [{ name: 'Robert' }, { name: 'Leanna' }, { name: 'Eddard' }]);\n\n (0, _runtime.removeAt)(obj.get('arrayObjects'), 1);\n\n assert.deepEqual(obj.get('mappedObjects'), [{ name: 'Robert' }, { name: 'Eddard' }]);\n\n (0, _metal.set)(obj.get('arrayObjects')[0], 'v', { name: 'Stannis' });\n\n assert.deepEqual(obj.get('mappedObjects'), [{ name: 'Stannis' }, { name: 'Eddard' }]);\n };\n\n _class.prototype['@test it maps unshifted objects with property observers'] = function testItMapsUnshiftedObjectsWithPropertyObservers(assert) {\n var array = (0, _runtime.A)();\n var cObj = { v: 'c' };\n\n obj = _runtime.Object.extend({\n mapped: (0, _computed.map)('array.@each.v', function (item) {\n return (0, _metal.get)(item, 'v').toUpperCase();\n })\n }).create({\n array: array\n });\n\n array.unshiftObject(cObj);\n array.unshiftObject({ v: 'b' });\n array.unshiftObject({ v: 'a' });\n\n (0, _metal.set)(cObj, 'v', 'd');\n\n assert.deepEqual(array.mapBy('v'), ['a', 'b', 'd'], 'precond - unmapped array is correct');\n assert.deepEqual(obj.get('mapped'), ['A', 'B', 'D'], 'properties unshifted in sequence are mapped correctly');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('mapBy', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n _class2.prototype.beforeEach = function beforeEach() {\n obj = _runtime.Object.extend({\n mapped: (0, _computed.mapBy)('array', 'v')\n }).create({\n array: (0, _runtime.A)([{ v: 1 }, { v: 3 }, { v: 2 }, { v: 1 }])\n });\n };\n\n _class2.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class2.prototype['@test mapBy is readOnly'] = function testMapByIsReadOnly(assert) {\n assert.throws(function () {\n obj.set('mapped', 1);\n }, /Cannot set read-only property \"mapped\" on object:/);\n };\n\n _class2.prototype['@test it maps properties'] = function testItMapsProperties(assert) {\n assert.deepEqual(obj.get('mapped'), [1, 3, 2, 1]);\n\n obj.get('array').pushObject({ v: 5 });\n\n assert.deepEqual(obj.get('mapped'), [1, 3, 2, 1, 5]);\n\n (0, _runtime.removeAt)(obj.get('array'), 3);\n\n assert.deepEqual(obj.get('mapped'), [1, 3, 2, 5]);\n };\n\n _class2.prototype['@test it is observable'] = function testItIsObservable(assert) {\n var calls = 0;\n\n assert.deepEqual(obj.get('mapped'), [1, 3, 2, 1]);\n\n (0, _metal.addObserver)(obj, 'mapped.@each', function () {\n return calls++;\n });\n\n obj.get('array').pushObject({ v: 5 });\n\n assert.equal(calls, 1, 'mapBy is observable');\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('filter', function (_AbstractTestCase3) {\n (0, _emberBabel.inherits)(_class3, _AbstractTestCase3);\n\n function _class3() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase3.apply(this, arguments));\n }\n\n _class3.prototype.beforeEach = function beforeEach() {\n obj = _runtime.Object.extend({\n filtered: (0, _computed.filter)('array', function (item) {\n return item % 2 === 0;\n })\n }).create({\n array: (0, _runtime.A)([1, 2, 3, 4, 5, 6, 7, 8])\n });\n };\n\n _class3.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class3.prototype['@test filter is readOnly'] = function testFilterIsReadOnly(assert) {\n assert.throws(function () {\n obj.set('filtered', 1);\n }, /Cannot set read-only property \"filtered\" on object:/);\n };\n\n _class3.prototype['@test it filters according to the specified filter function'] = function testItFiltersAccordingToTheSpecifiedFilterFunction(assert) {\n assert.deepEqual(obj.get('filtered'), [2, 4, 6, 8], 'filter filters by the specified function');\n };\n\n _class3.prototype['@test it passes the index to the callback'] = function testItPassesTheIndexToTheCallback(assert) {\n obj = _runtime.Object.extend({\n filtered: (0, _computed.filter)('array', function (item, index) {\n return index === 1;\n })\n }).create({\n array: ['a', 'b', 'c']\n });\n\n assert.deepEqual((0, _metal.get)(obj, 'filtered'), ['b'], 'index is passed to callback correctly');\n };\n\n _class3.prototype['@test it has the correct `this`'] = function testItHasTheCorrectThis(assert) {\n obj = _runtime.Object.extend({\n filtered: (0, _computed.filter)('array', function (item, index) {\n assert.equal(this, obj);\n return this.isOne(index);\n }),\n isOne: function (value) {\n return value === 1;\n }\n }).create({\n array: ['a', 'b', 'c']\n });\n\n assert.deepEqual((0, _metal.get)(obj, 'filtered'), ['b'], 'index is passed to callback correctly');\n };\n\n _class3.prototype['@test it passes the array to the callback'] = function testItPassesTheArrayToTheCallback(assert) {\n obj = _runtime.Object.extend({\n filtered: (0, _computed.filter)('array', function (item, index, array) {\n return index === (0, _metal.get)(array, 'length') - 2;\n })\n }).create({\n array: (0, _runtime.A)(['a', 'b', 'c'])\n });\n\n assert.deepEqual(obj.get('filtered'), ['b'], 'array is passed to callback correctly');\n };\n\n _class3.prototype['@test it caches properly'] = function testItCachesProperly(assert) {\n var array = obj.get('array');\n\n var filtered = obj.get('filtered');\n assert.ok(filtered === obj.get('filtered'));\n\n array.addObject(11);\n var newFiltered = obj.get('filtered');\n\n assert.ok(filtered !== newFiltered);\n\n assert.ok(obj.get('filtered') === newFiltered);\n };\n\n _class3.prototype['@test it updates as the array is modified'] = function testItUpdatesAsTheArrayIsModified(assert) {\n var array = obj.get('array');\n\n assert.deepEqual(obj.get('filtered'), [2, 4, 6, 8], 'precond - filtered array is initially correct');\n\n array.addObject(11);\n assert.deepEqual(obj.get('filtered'), [2, 4, 6, 8], 'objects not passing the filter are not added');\n\n array.addObject(12);\n assert.deepEqual(obj.get('filtered'), [2, 4, 6, 8, 12], 'objects passing the filter are added');\n\n array.removeObject(3);\n array.removeObject(4);\n\n assert.deepEqual(obj.get('filtered'), [2, 6, 8, 12], 'objects removed from the dependent array are removed from the computed array');\n };\n\n _class3.prototype['@test the dependent array can be cleared one at a time'] = function testTheDependentArrayCanBeClearedOneAtATime(assert) {\n var array = (0, _metal.get)(obj, 'array');\n\n assert.deepEqual(obj.get('filtered'), [2, 4, 6, 8], 'precond - filtered array is initially correct');\n\n // clear 1-8 but in a random order\n array.removeObject(3);\n array.removeObject(1);\n array.removeObject(2);\n array.removeObject(4);\n array.removeObject(8);\n array.removeObject(6);\n array.removeObject(5);\n array.removeObject(7);\n\n assert.deepEqual(obj.get('filtered'), [], 'filtered array cleared correctly');\n };\n\n _class3.prototype['@test the dependent array can be `clear`ed directly (#3272)'] = function testTheDependentArrayCanBeClearEdDirectly3272(assert) {\n assert.deepEqual(obj.get('filtered'), [2, 4, 6, 8], 'precond - filtered array is initially correct');\n\n obj.get('array').clear();\n\n assert.deepEqual(obj.get('filtered'), [], 'filtered array cleared correctly');\n };\n\n _class3.prototype['@test it updates as the array is replaced'] = function testItUpdatesAsTheArrayIsReplaced(assert) {\n assert.deepEqual(obj.get('filtered'), [2, 4, 6, 8], 'precond - filtered array is initially correct');\n\n obj.set('array', [20, 21, 22, 23, 24]);\n\n assert.deepEqual(obj.get('filtered'), [20, 22, 24], 'computed array is updated when array is changed');\n };\n\n _class3.prototype['@test it updates properly on @each with {} dependencies'] = function testItUpdatesProperlyOnEachWithDependencies(assert) {\n var item = _runtime.Object.create({ prop: true });\n\n obj = _runtime.Object.extend({\n filtered: (0, _computed.filter)('items.@each.{prop}', function (item) {\n return item.get('prop') === true;\n })\n }).create({\n items: (0, _runtime.A)([item])\n });\n\n assert.deepEqual(obj.get('filtered'), [item]);\n\n item.set('prop', false);\n\n assert.deepEqual(obj.get('filtered'), []);\n };\n\n return _class3;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('filterBy', function (_AbstractTestCase4) {\n (0, _emberBabel.inherits)(_class4, _AbstractTestCase4);\n\n function _class4() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase4.apply(this, arguments));\n }\n\n _class4.prototype.beforeEach = function beforeEach() {\n obj = _runtime.Object.extend({\n a1s: (0, _computed.filterBy)('array', 'a', 1),\n as: (0, _computed.filterBy)('array', 'a'),\n bs: (0, _computed.filterBy)('array', 'b')\n }).create({\n array: (0, _runtime.A)([{ name: 'one', a: 1, b: false }, { name: 'two', a: 2, b: false }, { name: 'three', a: 1, b: true }, { name: 'four', b: true }])\n });\n };\n\n _class4.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class4.prototype['@test filterBy is readOnly'] = function testFilterByIsReadOnly(assert) {\n assert.throws(function () {\n obj.set('as', 1);\n }, /Cannot set read-only property \"as\" on object:/);\n };\n\n _class4.prototype['@test properties can be filtered by truthiness'] = function testPropertiesCanBeFilteredByTruthiness(assert) {\n assert.deepEqual(obj.get('as').mapBy('name'), ['one', 'two', 'three'], 'properties can be filtered by existence');\n assert.deepEqual(obj.get('bs').mapBy('name'), ['three', 'four'], 'booleans can be filtered');\n\n (0, _metal.set)(obj.get('array')[0], 'a', undefined);\n (0, _metal.set)(obj.get('array')[3], 'a', true);\n\n (0, _metal.set)(obj.get('array')[0], 'b', true);\n (0, _metal.set)(obj.get('array')[3], 'b', false);\n\n assert.deepEqual(obj.get('as').mapBy('name'), ['two', 'three', 'four'], 'arrays computed by filter property respond to property changes');\n assert.deepEqual(obj.get('bs').mapBy('name'), ['one', 'three'], 'arrays computed by filtered property respond to property changes');\n\n obj.get('array').pushObject({ name: 'five', a: 6, b: true });\n\n assert.deepEqual(obj.get('as').mapBy('name'), ['two', 'three', 'four', 'five'], 'arrays computed by filter property respond to added objects');\n assert.deepEqual(obj.get('bs').mapBy('name'), ['one', 'three', 'five'], 'arrays computed by filtered property respond to added objects');\n\n obj.get('array').popObject();\n\n assert.deepEqual(obj.get('as').mapBy('name'), ['two', 'three', 'four'], 'arrays computed by filter property respond to removed objects');\n assert.deepEqual(obj.get('bs').mapBy('name'), ['one', 'three'], 'arrays computed by filtered property respond to removed objects');\n\n obj.set('array', [{ name: 'six', a: 12, b: true }]);\n\n assert.deepEqual(obj.get('as').mapBy('name'), ['six'], 'arrays computed by filter property respond to array changes');\n assert.deepEqual(obj.get('bs').mapBy('name'), ['six'], 'arrays computed by filtered property respond to array changes');\n };\n\n _class4.prototype['@test properties can be filtered by values'] = function testPropertiesCanBeFilteredByValues(assert) {\n assert.deepEqual(obj.get('a1s').mapBy('name'), ['one', 'three'], 'properties can be filtered by matching value');\n\n obj.get('array').pushObject({ name: 'five', a: 1 });\n\n assert.deepEqual(obj.get('a1s').mapBy('name'), ['one', 'three', 'five'], 'arrays computed by matching value respond to added objects');\n\n obj.get('array').popObject();\n\n assert.deepEqual(obj.get('a1s').mapBy('name'), ['one', 'three'], 'arrays computed by matching value respond to removed objects');\n\n (0, _metal.set)(obj.get('array')[1], 'a', 1);\n (0, _metal.set)(obj.get('array')[2], 'a', 2);\n\n assert.deepEqual(obj.get('a1s').mapBy('name'), ['one', 'two'], 'arrays computed by matching value respond to modified properties');\n };\n\n _class4.prototype['@test properties values can be replaced'] = function testPropertiesValuesCanBeReplaced(assert) {\n obj = _runtime.Object.extend({\n a1s: (0, _computed.filterBy)('array', 'a', 1),\n a1bs: (0, _computed.filterBy)('a1s', 'b')\n }).create({\n array: []\n });\n\n assert.deepEqual(obj.get('a1bs').mapBy('name'), [], 'properties can be filtered by matching value');\n\n (0, _metal.set)(obj, 'array', [{ name: 'item1', a: 1, b: true }]);\n\n assert.deepEqual(obj.get('a1bs').mapBy('name'), ['item1'], 'properties can be filtered by matching value');\n };\n\n return _class4;\n }(_internalTestHelpers.AbstractTestCase));\n\n [['uniq', _computed.uniq], ['union', _computed.union]].forEach(function (tuple) {\n var name = tuple[0],\n macro = tuple[1];\n\n (0, _internalTestHelpers.moduleFor)('computed.' + name, function (_AbstractTestCase5) {\n (0, _emberBabel.inherits)(_class5, _AbstractTestCase5);\n\n function _class5() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase5.apply(this, arguments));\n }\n\n _class5.prototype.beforeEach = function beforeEach() {\n obj = _runtime.Object.extend({\n union: macro('array', 'array2', 'array3')\n }).create({\n array: (0, _runtime.A)([1, 2, 3, 4, 5, 6]),\n array2: (0, _runtime.A)([4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]),\n array3: (0, _runtime.A)([1, 8, 10])\n });\n };\n\n _class5.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class5.prototype['@test ' + name + ' is readOnly'] = function (assert) {\n assert.throws(function () {\n obj.set('union', 1);\n }, /Cannot set read-only property \"union\" on object:/);\n };\n\n _class5.prototype['@test does not include duplicates'] = function testDoesNotIncludeDuplicates(assert) {\n var array = obj.get('array');\n var array2 = obj.get('array2');\n\n assert.deepEqual(obj.get('union').sort(function (x, y) {\n return x - y;\n }), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], name + ' does not include duplicates');\n\n array.pushObject(8);\n\n assert.deepEqual(obj.get('union').sort(function (x, y) {\n return x - y;\n }), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], name + ' does not add existing items');\n\n array.pushObject(11);\n\n assert.deepEqual(obj.get('union').sort(function (x, y) {\n return x - y;\n }), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], name + ' adds new items');\n\n (0, _runtime.removeAt)(array2, 6); // remove 7\n\n assert.deepEqual(obj.get('union').sort(function (x, y) {\n return x - y;\n }), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], name + ' does not remove items that are still in the dependent array');\n\n array2.removeObject(7);\n\n assert.deepEqual(obj.get('union').sort(function (x, y) {\n return x - y;\n }), [1, 2, 3, 4, 5, 6, 8, 9, 10, 11], name + ' removes items when their last instance is gone');\n };\n\n _class5.prototype['@test has set-union semantics'] = function testHasSetUnionSemantics(assert) {\n var array = obj.get('array');\n\n assert.deepEqual(obj.get('union').sort(function (x, y) {\n return x - y;\n }), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], name + ' is initially correct');\n\n array.removeObject(6);\n\n assert.deepEqual(obj.get('union').sort(function (x, y) {\n return x - y;\n }), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'objects are not removed if they exist in other dependent arrays');\n\n array.clear();\n\n assert.deepEqual(obj.get('union').sort(function (x, y) {\n return x - y;\n }), [1, 4, 5, 6, 7, 8, 9, 10], 'objects are removed when they are no longer in any dependent array');\n };\n\n return _class5;\n }(_internalTestHelpers.AbstractTestCase));\n });\n\n (0, _internalTestHelpers.moduleFor)('computed.uniqBy', function (_AbstractTestCase6) {\n (0, _emberBabel.inherits)(_class6, _AbstractTestCase6);\n\n function _class6() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase6.apply(this, arguments));\n }\n\n _class6.prototype.beforeEach = function beforeEach() {\n obj = _runtime.Object.extend({\n list: null,\n uniqueById: (0, _computed.uniqBy)('list', 'id')\n }).create({\n list: (0, _runtime.A)([{ id: 1, value: 'one' }, { id: 2, value: 'two' }, { id: 1, value: 'one' }])\n });\n };\n\n _class6.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class6.prototype['@test uniqBy is readOnly'] = function testUniqByIsReadOnly(assert) {\n assert.throws(function () {\n obj.set('uniqueById', 1);\n }, /Cannot set read-only property \"uniqueById\" on object:/);\n };\n\n _class6.prototype['@test does not include duplicates'] = function testDoesNotIncludeDuplicates(assert) {\n assert.deepEqual(obj.get('uniqueById'), [{ id: 1, value: 'one' }, { id: 2, value: 'two' }]);\n };\n\n _class6.prototype['@test it does not share state among instances'] = function testItDoesNotShareStateAmongInstances(assert) {\n var MyObject = _runtime.Object.extend({\n list: [],\n uniqueByName: (0, _computed.uniqBy)('list', 'name')\n });\n var a = MyObject.create({\n list: [{ name: 'bob' }, { name: 'mitch' }, { name: 'mitch' }]\n });\n var b = MyObject.create({\n list: [{ name: 'warren' }, { name: 'mitch' }]\n });\n\n assert.deepEqual(a.get('uniqueByName'), [{ name: 'bob' }, { name: 'mitch' }]);\n // Making sure that 'mitch' appears\n assert.deepEqual(b.get('uniqueByName'), [{ name: 'warren' }, { name: 'mitch' }]);\n };\n\n _class6.prototype['@test it handles changes to the dependent array'] = function testItHandlesChangesToTheDependentArray(assert) {\n obj.get('list').pushObject({ id: 3, value: 'three' });\n\n assert.deepEqual(obj.get('uniqueById'), [{ id: 1, value: 'one' }, { id: 2, value: 'two' }, { id: 3, value: 'three' }], 'The list includes three');\n\n obj.get('list').pushObject({ id: 3, value: 'three' });\n\n assert.deepEqual(obj.get('uniqueById'), [{ id: 1, value: 'one' }, { id: 2, value: 'two' }, { id: 3, value: 'three' }], 'The list does not include a duplicate three');\n };\n\n _class6.prototype['@test it returns an empty array when computed on a non-array'] = function testItReturnsAnEmptyArrayWhenComputedOnANonArray(assert) {\n var MyObject = _runtime.Object.extend({\n list: null,\n uniq: (0, _computed.uniqBy)('list', 'name')\n });\n var a = MyObject.create({ list: 'not an array' });\n\n assert.deepEqual(a.get('uniq'), []);\n };\n\n return _class6;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('computed.intersect', function (_AbstractTestCase7) {\n (0, _emberBabel.inherits)(_class7, _AbstractTestCase7);\n\n function _class7() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase7.apply(this, arguments));\n }\n\n _class7.prototype.beforeEach = function beforeEach() {\n obj = _runtime.Object.extend({\n intersection: (0, _computed.intersect)('array', 'array2', 'array3')\n }).create({\n array: (0, _runtime.A)([1, 2, 3, 4, 5, 6]),\n array2: (0, _runtime.A)([3, 3, 3, 4, 5]),\n array3: (0, _runtime.A)([3, 5, 6, 7, 8])\n });\n };\n\n _class7.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class7.prototype['@test intersect is readOnly'] = function testIntersectIsReadOnly(assert) {\n assert.throws(function () {\n obj.set('intersection', 1);\n }, /Cannot set read-only property \"intersection\" on object:/);\n };\n\n _class7.prototype['@test it has set-intersection semantics'] = function testItHasSetIntersectionSemantics(assert) {\n var array2 = obj.get('array2');\n var array3 = obj.get('array3');\n\n assert.deepEqual(obj.get('intersection').sort(function (x, y) {\n return x - y;\n }), [3, 5], 'intersection is initially correct');\n\n array2.shiftObject();\n\n assert.deepEqual(obj.get('intersection').sort(function (x, y) {\n return x - y;\n }), [3, 5], 'objects are not removed when they are still in all dependent arrays');\n\n array2.shiftObject();\n\n assert.deepEqual(obj.get('intersection').sort(function (x, y) {\n return x - y;\n }), [3, 5], 'objects are not removed when they are still in all dependent arrays');\n\n array2.shiftObject();\n\n assert.deepEqual(obj.get('intersection'), [5], 'objects are removed once they are gone from all dependent arrays');\n\n array2.pushObject(1);\n\n assert.deepEqual(obj.get('intersection'), [5], 'objects are not added as long as they are missing from any dependent array');\n\n array3.pushObject(1);\n\n assert.deepEqual(obj.get('intersection').sort(function (x, y) {\n return x - y;\n }), [1, 5], 'objects added once they belong to all dependent arrays');\n };\n\n return _class7;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('setDiff', function (_AbstractTestCase8) {\n (0, _emberBabel.inherits)(_class8, _AbstractTestCase8);\n\n function _class8() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase8.apply(this, arguments));\n }\n\n _class8.prototype.beforeEach = function beforeEach() {\n obj = _runtime.Object.extend({\n diff: (0, _computed.setDiff)('array', 'array2')\n }).create({\n array: (0, _runtime.A)([1, 2, 3, 4, 5, 6, 7]),\n array2: (0, _runtime.A)([3, 4, 5, 10])\n });\n };\n\n _class8.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class8.prototype['@test setDiff is readOnly'] = function testSetDiffIsReadOnly(assert) {\n assert.throws(function () {\n obj.set('diff', 1);\n }, /Cannot set read-only property \"diff\" on object:/);\n };\n\n _class8.prototype['@test it asserts if given fewer or more than two dependent properties'] = function testItAssertsIfGivenFewerOrMoreThanTwoDependentProperties() {\n expectAssertion(function () {\n _runtime.Object.extend({\n diff: (0, _computed.setDiff)('array')\n }).create({\n array: (0, _runtime.A)([1, 2, 3, 4, 5, 6, 7]),\n array2: (0, _runtime.A)([3, 4, 5])\n });\n }, /\\`computed\\.setDiff\\` requires exactly two dependent arrays/, 'setDiff requires two dependent arrays');\n\n expectAssertion(function () {\n _runtime.Object.extend({\n diff: (0, _computed.setDiff)('array', 'array2', 'array3')\n }).create({\n array: (0, _runtime.A)([1, 2, 3, 4, 5, 6, 7]),\n array2: (0, _runtime.A)([3, 4, 5]),\n array3: (0, _runtime.A)([7])\n });\n }, /\\`computed\\.setDiff\\` requires exactly two dependent arrays/, 'setDiff requires two dependent arrays');\n };\n\n _class8.prototype['@test it has set-diff semantics'] = function testItHasSetDiffSemantics(assert) {\n var array1 = obj.get('array');\n var array2 = obj.get('array2');\n\n assert.deepEqual(obj.get('diff').sort(function (x, y) {\n return x - y;\n }), [1, 2, 6, 7], 'set-diff is initially correct');\n\n array2.popObject();\n\n assert.deepEqual(obj.get('diff').sort(function (x, y) {\n return x - y;\n }), [1, 2, 6, 7], 'removing objects from the remove set has no effect if the object is not in the keep set');\n\n array2.shiftObject();\n\n assert.deepEqual(obj.get('diff').sort(function (x, y) {\n return x - y;\n }), [1, 2, 3, 6, 7], \"removing objects from the remove set adds them if they're in the keep set\");\n\n array1.removeObject(3);\n\n assert.deepEqual(obj.get('diff').sort(function (x, y) {\n return x - y;\n }), [1, 2, 6, 7], 'removing objects from the keep array removes them from the computed array');\n\n array1.pushObject(5);\n\n assert.deepEqual(obj.get('diff').sort(function (x, y) {\n return x - y;\n }), [1, 2, 6, 7], 'objects added to the keep array that are in the remove array are not added to the computed array');\n\n array1.pushObject(22);\n\n assert.deepEqual(obj.get('diff').sort(function (x, y) {\n return x - y;\n }), [1, 2, 6, 7, 22], 'objects added to the keep array not in the remove array are added to the computed array');\n };\n\n return _class8;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('sort - sortProperties', function (_AbstractTestCase9) {\n (0, _emberBabel.inherits)(_class9, _AbstractTestCase9);\n\n function _class9() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase9.apply(this, arguments));\n }\n\n _class9.prototype.beforeEach = function beforeEach() {\n obj = _runtime.Object.extend({\n sortedItems: (0, _computed.sort)('items', 'itemSorting')\n }).create({\n itemSorting: (0, _runtime.A)(['lname', 'fname']),\n items: (0, _runtime.A)([{ fname: 'Jaime', lname: 'Lannister', age: 34 }, { fname: 'Cersei', lname: 'Lannister', age: 34 }, { fname: 'Robb', lname: 'Stark', age: 16 }, { fname: 'Bran', lname: 'Stark', age: 8 }])\n });\n };\n\n _class9.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class9.prototype['@test sort is readOnly'] = function testSortIsReadOnly(assert) {\n assert.throws(function () {\n obj.set('sortedItems', 1);\n }, /Cannot set read-only property \"sortedItems\" on object:/);\n };\n\n _class9.prototype['@test arrays are initially sorted'] = function testArraysAreInitiallySorted(assert) {\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'array is initially sorted');\n };\n\n _class9.prototype['@test default sort order is correct'] = function testDefaultSortOrderIsCorrect(assert) {\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'array is initially sorted');\n };\n\n _class9.prototype['@test changing the dependent array updates the sorted array'] = function testChangingTheDependentArrayUpdatesTheSortedArray(assert) {\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'precond - array is initially sorted');\n\n obj.set('items', [{ fname: 'Roose', lname: 'Bolton' }, { fname: 'Theon', lname: 'Greyjoy' }, { fname: 'Ramsey', lname: 'Bolton' }, { fname: 'Stannis', lname: 'Baratheon' }]);\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Stannis', 'Ramsey', 'Roose', 'Theon'], 'changing dependent array updates sorted array');\n };\n\n _class9.prototype['@test adding to the dependent array updates the sorted array'] = function testAddingToTheDependentArrayUpdatesTheSortedArray(assert) {\n var items = obj.get('items');\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'precond - array is initially sorted');\n\n items.pushObject({\n fname: 'Tyrion',\n lname: 'Lannister'\n });\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Tyrion', 'Bran', 'Robb'], 'Adding to the dependent array updates the sorted array');\n };\n\n _class9.prototype['@test removing from the dependent array updates the sorted array'] = function testRemovingFromTheDependentArrayUpdatesTheSortedArray(assert) {\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'precond - array is initially sorted');\n\n obj.get('items').popObject();\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Robb'], 'Removing from the dependent array updates the sorted array');\n };\n\n _class9.prototype['@test distinct items may be sort-equal, although their relative order will not be guaranteed'] = function testDistinctItemsMayBeSortEqualAlthoughTheirRelativeOrderWillNotBeGuaranteed(assert) {\n // We recreate jaime and \"Cersei\" here only for test stability: we want\n // their guid-ordering to be deterministic\n var jaimeInDisguise = {\n fname: 'Cersei',\n lname: 'Lannister',\n age: 34\n };\n\n var jaime = {\n fname: 'Jaime',\n lname: 'Lannister',\n age: 34\n };\n\n var items = obj.get('items');\n\n items.replace(0, 1, [jaime]);\n items.replace(1, 1, [jaimeInDisguise]);\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'precond - array is initially sorted');\n\n (0, _metal.set)(jaimeInDisguise, 'fname', 'Jaime');\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Jaime', 'Jaime', 'Bran', 'Robb'], 'sorted array is updated');\n\n (0, _metal.set)(jaimeInDisguise, 'fname', 'Cersei');\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'sorted array is updated');\n };\n\n _class9.prototype['@test guid sort-order fallback with a search proxy is not confused by non-search ObjectProxys'] = function testGuidSortOrderFallbackWithASearchProxyIsNotConfusedByNonSearchObjectProxys(assert) {\n var tyrion = {\n fname: 'Tyrion',\n lname: 'Lannister'\n };\n\n var tyrionInDisguise = _runtime.ObjectProxy.create({\n fname: 'Yollo',\n lname: '',\n content: tyrion\n });\n\n var items = obj.get('items');\n\n items.pushObject(tyrion);\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Tyrion', 'Bran', 'Robb']);\n\n items.pushObject(tyrionInDisguise);\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Yollo', 'Cersei', 'Jaime', 'Tyrion', 'Bran', 'Robb']);\n };\n\n _class9.prototype['@test updating sort properties detaches observers for old sort properties'] = function testUpdatingSortPropertiesDetachesObserversForOldSortProperties(assert) {\n var objectToRemove = obj.get('items')[3];\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'precond - array is initially sorted');\n\n obj.set('itemSorting', (0, _runtime.A)(['fname:desc']));\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Robb', 'Jaime', 'Cersei', 'Bran'], 'after updating sort properties array is updated');\n\n obj.get('items').removeObject(objectToRemove);\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Robb', 'Jaime', 'Cersei'], 'after removing item array is updated');\n\n (0, _metal.set)(objectToRemove, 'lname', 'Updated-Stark');\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Robb', 'Jaime', 'Cersei'], 'after changing removed item array is not updated');\n };\n\n _class9.prototype['@test sort works if array property is null (non array value) on first evaluation of computed prop'] = function testSortWorksIfArrayPropertyIsNullNonArrayValueOnFirstEvaluationOfComputedProp(assert) {\n obj.set('items', null);\n assert.deepEqual(obj.get('sortedItems'), []);\n obj.set('items', (0, _runtime.A)([{ fname: 'Cersei', lname: 'Lanister' }]));\n assert.deepEqual(obj.get('sortedItems'), [{ fname: 'Cersei', lname: 'Lanister' }]);\n };\n\n _class9.prototype['@test updating sort properties updates the sorted array'] = function testUpdatingSortPropertiesUpdatesTheSortedArray(assert) {\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'precond - array is initially sorted');\n\n obj.set('itemSorting', (0, _runtime.A)(['fname:desc']));\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Robb', 'Jaime', 'Cersei', 'Bran'], 'after updating sort properties array is updated');\n };\n\n _class9.prototype['@test updating sort properties invalidates the sorted array'] = function testUpdatingSortPropertiesInvalidatesTheSortedArray(assert) {\n var sortProps = obj.get('itemSorting');\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'precond - array is initially sorted');\n\n sortProps.clear();\n sortProps.pushObject('fname');\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Bran', 'Cersei', 'Jaime', 'Robb'], 'after updating sort properties array is updated');\n };\n\n _class9.prototype['@test updating new sort properties invalidates the sorted array'] = function testUpdatingNewSortPropertiesInvalidatesTheSortedArray(assert) {\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'precond - array is initially sorted');\n\n obj.set('itemSorting', (0, _runtime.A)(['age:desc', 'fname:asc']));\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Robb', 'Bran'], 'precond - array is correct after item sorting is changed');\n\n (0, _metal.set)(obj.get('items')[1], 'age', 29);\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Jaime', 'Cersei', 'Robb', 'Bran'], 'after updating sort properties array is updated');\n };\n\n _class9.prototype['@test sort direction defaults to ascending'] = function testSortDirectionDefaultsToAscending(assert) {\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb']);\n };\n\n _class9.prototype['@test sort direction defaults to ascending (with sort property change)'] = function testSortDirectionDefaultsToAscendingWithSortPropertyChange(assert) {\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'precond - array is initially sorted');\n\n obj.set('itemSorting', (0, _runtime.A)(['fname']));\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Bran', 'Cersei', 'Jaime', 'Robb'], 'sort direction defaults to ascending');\n };\n\n _class9.prototype[\"@test updating an item's sort properties updates the sorted array\"] = function testUpdatingAnItemSSortPropertiesUpdatesTheSortedArray(assert) {\n var tyrionInDisguise = obj.get('items')[1];\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'precond - array is initially sorted');\n\n (0, _metal.set)(tyrionInDisguise, 'fname', 'Tyrion');\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Jaime', 'Tyrion', 'Bran', 'Robb'], \"updating an item's sort properties updates the sorted array\");\n };\n\n _class9.prototype[\"@test updating several of an item's sort properties updated the sorted array\"] = function testUpdatingSeveralOfAnItemSSortPropertiesUpdatedTheSortedArray(assert) {\n var sansaInDisguise = obj.get('items')[1];\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'precond - array is initially sorted');\n\n (0, _metal.setProperties)(sansaInDisguise, {\n fname: 'Sansa',\n lname: 'Stark'\n });\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Jaime', 'Bran', 'Robb', 'Sansa'], \"updating an item's sort properties updates the sorted array\");\n };\n\n _class9.prototype[\"@test updating an item's sort properties does not error when binary search does a self compare (#3273)\"] = function testUpdatingAnItemSSortPropertiesDoesNotErrorWhenBinarySearchDoesASelfCompare3273(assert) {\n var jaime = {\n name: 'Jaime',\n status: 1\n };\n\n var cersei = {\n name: 'Cersei',\n status: 2\n };\n\n var obj = _runtime.Object.extend({\n sortProps: ['status'],\n sortedPeople: (0, _computed.sort)('people', 'sortProps')\n }).create({\n people: [jaime, cersei]\n });\n\n assert.deepEqual(obj.get('sortedPeople'), [jaime, cersei], 'precond - array is initially sorted');\n\n (0, _metal.set)(cersei, 'status', 3);\n\n assert.deepEqual(obj.get('sortedPeople'), [jaime, cersei], 'array is sorted correctly');\n\n (0, _metal.set)(cersei, 'status', 2);\n\n assert.deepEqual(obj.get('sortedPeople'), [jaime, cersei], 'array is sorted correctly');\n };\n\n _class9.prototype['@test array should not be sorted if sort properties array is empty'] = function testArrayShouldNotBeSortedIfSortPropertiesArrayIsEmpty(assert) {\n var o = _runtime.Object.extend({\n sortedItems: (0, _computed.sort)('items', 'itemSorting')\n }).create({\n itemSorting: (0, _runtime.A)([]),\n // This bug only manifests when array.sort(() => 0) is not equal to array.\n // In order for this to happen, the browser must use an unstable sort and the\n // array must be sufficient large. On Chrome, 12 items is currently sufficient.\n items: (0, _runtime.A)([6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5])\n });\n\n assert.deepEqual(o.get('sortedItems'), [6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5], 'array is not changed');\n };\n\n _class9.prototype['@test array should update if items to be sorted is replaced when sort properties array is empty'] = function testArrayShouldUpdateIfItemsToBeSortedIsReplacedWhenSortPropertiesArrayIsEmpty(assert) {\n var o = _runtime.Object.extend({\n sortedItems: (0, _computed.sort)('items', 'itemSorting')\n }).create({\n itemSorting: (0, _runtime.A)([]),\n items: (0, _runtime.A)([6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5])\n });\n\n assert.deepEqual(o.get('sortedItems'), [6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5], 'array is not changed');\n\n (0, _metal.set)(o, 'items', (0, _runtime.A)([5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4]));\n\n assert.deepEqual(o.get('sortedItems'), [5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4], 'array was updated');\n };\n\n _class9.prototype['@test array should update if items to be sorted is mutated when sort properties array is empty'] = function testArrayShouldUpdateIfItemsToBeSortedIsMutatedWhenSortPropertiesArrayIsEmpty(assert) {\n var o = _runtime.Object.extend({\n sortedItems: (0, _computed.sort)('items', 'itemSorting')\n }).create({\n itemSorting: (0, _runtime.A)([]),\n items: (0, _runtime.A)([6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5])\n });\n\n assert.deepEqual(o.get('sortedItems'), [6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5], 'array is not changed');\n\n o.get('items').pushObject(12);\n\n assert.deepEqual(o.get('sortedItems'), [6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 12], 'array was updated');\n };\n\n _class9.prototype['@test array observers do not leak'] = function testArrayObserversDoNotLeak(assert) {\n var daria = { name: 'Daria' };\n var jane = { name: 'Jane' };\n\n var sisters = [jane, daria];\n\n var sortProps = (0, _runtime.A)(['name']);\n var jaime = _runtime.Object.extend({\n sortedPeople: (0, _computed.sort)('sisters', 'sortProps'),\n sortProps: sortProps\n }).create({\n sisters: sisters\n });\n\n jaime.get('sortedPeople');\n (0, _runloop.run)(jaime, 'destroy');\n\n try {\n sortProps.pushObject({\n name: 'Anna'\n });\n assert.ok(true);\n } catch (e) {\n assert.ok(false, e);\n }\n };\n\n _class9.prototype['@test property paths in sort properties update the sorted array'] = function testPropertyPathsInSortPropertiesUpdateTheSortedArray(assert) {\n var jaime = {\n relatedObj: { status: 1, firstName: 'Jaime', lastName: 'Lannister' }\n };\n\n var cersei = {\n relatedObj: { status: 2, firstName: 'Cersei', lastName: 'Lannister' }\n };\n\n var sansa = _runtime.Object.create({\n relatedObj: { status: 3, firstName: 'Sansa', lastName: 'Stark' }\n });\n\n var obj = _runtime.Object.extend({\n sortProps: ['relatedObj.status'],\n sortedPeople: (0, _computed.sort)('people', 'sortProps')\n }).create({\n people: [jaime, cersei, sansa]\n });\n\n assert.deepEqual(obj.get('sortedPeople'), [jaime, cersei, sansa], 'precond - array is initially sorted');\n\n (0, _metal.set)(cersei, 'status', 3);\n\n assert.deepEqual(obj.get('sortedPeople'), [jaime, cersei, sansa], 'array is sorted correctly');\n\n (0, _metal.set)(cersei, 'status', 1);\n\n assert.deepEqual(obj.get('sortedPeople'), [jaime, cersei, sansa], 'array is sorted correctly');\n\n sansa.set('status', 1);\n\n assert.deepEqual(obj.get('sortedPeople'), [jaime, cersei, sansa], 'array is sorted correctly');\n\n obj.set('sortProps', ['relatedObj.firstName']);\n\n assert.deepEqual(obj.get('sortedPeople'), [cersei, jaime, sansa], 'array is sorted correctly');\n };\n\n _class9.prototype['@test if the dependentKey is neither an array nor object, it will return an empty array'] = function testIfTheDependentKeyIsNeitherAnArrayNorObjectItWillReturnAnEmptyArray(assert) {\n (0, _metal.set)(obj, 'items', null);\n assert.ok((0, _runtime.isArray)(obj.get('sortedItems')), 'returns an empty arrays');\n\n (0, _metal.set)(obj, 'array', undefined);\n assert.ok((0, _runtime.isArray)(obj.get('sortedItems')), 'returns an empty arrays');\n\n (0, _metal.set)(obj, 'array', 'not an array');\n assert.ok((0, _runtime.isArray)(obj.get('sortedItems')), 'returns an empty arrays');\n };\n\n return _class9;\n }(_internalTestHelpers.AbstractTestCase));\n\n function sortByLnameFname(a, b) {\n var lna = (0, _metal.get)(a, 'lname');\n var lnb = (0, _metal.get)(b, 'lname');\n\n if (lna !== lnb) {\n return lna > lnb ? 1 : -1;\n }\n\n return sortByFnameAsc(a, b);\n }\n\n function sortByFnameAsc(a, b) {\n var fna = (0, _metal.get)(a, 'fname');\n var fnb = (0, _metal.get)(b, 'fname');\n\n if (fna === fnb) {\n return 0;\n }\n return fna > fnb ? 1 : -1;\n }\n\n (0, _internalTestHelpers.moduleFor)('sort - sort function', function (_AbstractTestCase10) {\n (0, _emberBabel.inherits)(_class10, _AbstractTestCase10);\n\n function _class10() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase10.apply(this, arguments));\n }\n\n _class10.prototype.beforeEach = function beforeEach() {\n obj = _runtime.Object.extend({\n sortedItems: (0, _computed.sort)('items.@each.fname', sortByLnameFname)\n }).create({\n items: (0, _runtime.A)([{ fname: 'Jaime', lname: 'Lannister', age: 34 }, { fname: 'Cersei', lname: 'Lannister', age: 34 }, { fname: 'Robb', lname: 'Stark', age: 16 }, { fname: 'Bran', lname: 'Stark', age: 8 }])\n });\n };\n\n _class10.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class10.prototype['@test sort has correct `this`'] = function testSortHasCorrectThis(assert) {\n var obj = _runtime.Object.extend({\n sortedItems: (0, _computed.sort)('items.@each.fname', function (a, b) {\n assert.equal(this, obj, 'expected the object to be `this`');\n return this.sortByLastName(a, b);\n }),\n sortByLastName: function (a, b) {\n return sortByFnameAsc(a, b);\n }\n }).create({\n items: (0, _runtime.A)([{ fname: 'Jaime', lname: 'Lannister', age: 34 }, { fname: 'Cersei', lname: 'Lannister', age: 34 }, { fname: 'Robb', lname: 'Stark', age: 16 }, { fname: 'Bran', lname: 'Stark', age: 8 }])\n });\n\n obj.get('sortedItems');\n };\n\n _class10.prototype['@test sort (with function) is readOnly'] = function testSortWithFunctionIsReadOnly(assert) {\n assert.throws(function () {\n obj.set('sortedItems', 1);\n }, /Cannot set read-only property \"sortedItems\" on object:/);\n };\n\n _class10.prototype['@test arrays are initially sorted'] = function testArraysAreInitiallySorted(assert) {\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'array is initially sorted');\n };\n\n _class10.prototype['@test default sort order is correct'] = function testDefaultSortOrderIsCorrect(assert) {\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'array is initially sorted');\n };\n\n _class10.prototype['@test changing the dependent array updates the sorted array'] = function testChangingTheDependentArrayUpdatesTheSortedArray(assert) {\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'precond - array is initially sorted');\n\n obj.set('items', [{ fname: 'Roose', lname: 'Bolton' }, { fname: 'Theon', lname: 'Greyjoy' }, { fname: 'Ramsey', lname: 'Bolton' }, { fname: 'Stannis', lname: 'Baratheon' }]);\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Stannis', 'Ramsey', 'Roose', 'Theon'], 'changing dependent array updates sorted array');\n };\n\n _class10.prototype['@test adding to the dependent array updates the sorted array'] = function testAddingToTheDependentArrayUpdatesTheSortedArray(assert) {\n var items = obj.get('items');\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'precond - array is initially sorted');\n\n items.pushObject({\n fname: 'Tyrion',\n lname: 'Lannister'\n });\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Tyrion', 'Bran', 'Robb'], 'Adding to the dependent array updates the sorted array');\n };\n\n _class10.prototype['@test removing from the dependent array updates the sorted array'] = function testRemovingFromTheDependentArrayUpdatesTheSortedArray(assert) {\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'precond - array is initially sorted');\n\n obj.get('items').popObject();\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Robb'], 'Removing from the dependent array updates the sorted array');\n };\n\n _class10.prototype['@test distinct items may be sort-equal, although their relative order will not be guaranteed'] = function testDistinctItemsMayBeSortEqualAlthoughTheirRelativeOrderWillNotBeGuaranteed(assert) {\n // We recreate jaime and \"Cersei\" here only for test stability: we want\n // their guid-ordering to be deterministic\n var jaimeInDisguise = {\n fname: 'Cersei',\n lname: 'Lannister',\n age: 34\n };\n\n var jaime = {\n fname: 'Jaime',\n lname: 'Lannister',\n age: 34\n };\n\n var items = obj.get('items');\n\n items.replace(0, 1, [jaime]);\n items.replace(1, 1, [jaimeInDisguise]);\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'precond - array is initially sorted');\n\n (0, _metal.set)(jaimeInDisguise, 'fname', 'Jaime');\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Jaime', 'Jaime', 'Bran', 'Robb'], 'sorted array is updated');\n\n (0, _metal.set)(jaimeInDisguise, 'fname', 'Cersei');\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'sorted array is updated');\n };\n\n _class10.prototype['@test guid sort-order fallback with a search proxy is not confused by non-search ObjectProxys'] = function testGuidSortOrderFallbackWithASearchProxyIsNotConfusedByNonSearchObjectProxys(assert) {\n var tyrion = {\n fname: 'Tyrion',\n lname: 'Lannister'\n };\n\n var tyrionInDisguise = _runtime.ObjectProxy.create({\n fname: 'Yollo',\n lname: '',\n content: tyrion\n });\n\n var items = obj.get('items');\n\n items.pushObject(tyrion);\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Tyrion', 'Bran', 'Robb']);\n\n items.pushObject(tyrionInDisguise);\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Yollo', 'Cersei', 'Jaime', 'Tyrion', 'Bran', 'Robb']);\n };\n\n _class10.prototype['@test changing item properties specified via @each triggers a resort of the modified item'] = function testChangingItemPropertiesSpecifiedViaEachTriggersAResortOfTheModifiedItem(assert) {\n var items = (0, _metal.get)(obj, 'items');\n\n var tyrionInDisguise = items[1];\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'precond - array is initially sorted');\n\n (0, _metal.set)(tyrionInDisguise, 'fname', 'Tyrion');\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Jaime', 'Tyrion', 'Bran', 'Robb'], 'updating a specified property on an item resorts it');\n };\n\n _class10.prototype['@test changing item properties not specified via @each does not trigger a resort'] = function testChangingItemPropertiesNotSpecifiedViaEachDoesNotTriggerAResort(assert) {\n if (!false /* EMBER_METAL_TRACKED_PROPERTIES */) {\n var items = obj.get('items');\n var cersei = items[1];\n\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'precond - array is initially sorted');\n\n (0, _metal.set)(cersei, 'lname', 'Stark'); // plot twist! (possibly not canon)\n\n // The array has become unsorted. If your sort function is sensitive to\n // properties, they *must* be specified as dependent item property keys or\n // we'll be doing binary searches on unsorted arrays.\n assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb'], 'updating an unspecified property on an item does not resort it');\n } else {\n assert.expect(0);\n }\n };\n\n return _class10;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('sort - stability', function (_AbstractTestCase11) {\n (0, _emberBabel.inherits)(_class11, _AbstractTestCase11);\n\n function _class11() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase11.apply(this, arguments));\n }\n\n _class11.prototype.beforeEach = function beforeEach() {\n obj = _runtime.Object.extend({\n sortProps: ['count', 'name'],\n sortedItems: (0, _computed.sort)('items', 'sortProps')\n }).create({\n items: [{ name: 'A', count: 1, thing: 4 }, { name: 'B', count: 1, thing: 3 }, { name: 'C', count: 1, thing: 2 }, { name: 'D', count: 1, thing: 4 }]\n });\n };\n\n _class11.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class11.prototype['@test sorts correctly as only one property changes'] = function testSortsCorrectlyAsOnlyOnePropertyChanges(assert) {\n assert.deepEqual(obj.get('sortedItems').mapBy('name'), ['A', 'B', 'C', 'D'], 'initial');\n\n (0, _metal.set)(obj.get('items')[3], 'count', 2);\n\n assert.deepEqual(obj.get('sortedItems').mapBy('name'), ['A', 'B', 'C', 'D'], 'final');\n };\n\n return _class11;\n }(_internalTestHelpers.AbstractTestCase));\n\n var klass = void 0;\n (0, _internalTestHelpers.moduleFor)('sort - concurrency', function (_AbstractTestCase12) {\n (0, _emberBabel.inherits)(_class12, _AbstractTestCase12);\n\n function _class12() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase12.apply(this, arguments));\n }\n\n _class12.prototype.beforeEach = function beforeEach() {\n klass = _runtime.Object.extend({\n sortProps: ['count'],\n sortedItems: (0, _computed.sort)('items', 'sortProps'),\n customSortedItems: (0, _computed.sort)('items.@each.count', function (a, b) {\n return a.count - b.count;\n })\n });\n obj = klass.create({\n items: (0, _runtime.A)([{ name: 'A', count: 1, thing: 4, id: 1 }, { name: 'B', count: 2, thing: 3, id: 2 }, { name: 'C', count: 3, thing: 2, id: 3 }, { name: 'D', count: 4, thing: 1, id: 4 }])\n });\n };\n\n _class12.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class12.prototype['@test sorts correctly after mutation to the sort properties'] = function testSortsCorrectlyAfterMutationToTheSortProperties(assert) {\n var sorted = obj.get('sortedItems');\n assert.deepEqual(sorted.mapBy('name'), ['A', 'B', 'C', 'D'], 'initial');\n\n (0, _metal.set)(obj.get('items')[1], 'count', 5);\n (0, _metal.set)(obj.get('items')[2], 'count', 6);\n\n assert.deepEqual(obj.get('sortedItems').mapBy('name'), ['A', 'D', 'B', 'C'], 'final');\n };\n\n _class12.prototype['@test sort correctly after mutation to the sort'] = function testSortCorrectlyAfterMutationToTheSort(assert) {\n assert.deepEqual(obj.get('customSortedItems').mapBy('name'), ['A', 'B', 'C', 'D'], 'initial');\n\n (0, _metal.set)(obj.get('items')[1], 'count', 5);\n (0, _metal.set)(obj.get('items')[2], 'count', 6);\n\n assert.deepEqual(obj.get('customSortedItems').mapBy('name'), ['A', 'D', 'B', 'C'], 'final');\n\n assert.deepEqual(obj.get('sortedItems').mapBy('name'), ['A', 'D', 'B', 'C'], 'final');\n };\n\n _class12.prototype['@test sort correctly on multiple instances of the same class'] = function testSortCorrectlyOnMultipleInstancesOfTheSameClass(assert) {\n var obj2 = klass.create({\n items: (0, _runtime.A)([{ name: 'W', count: 23, thing: 4 }, { name: 'X', count: 24, thing: 3 }, { name: 'Y', count: 25, thing: 2 }, { name: 'Z', count: 26, thing: 1 }])\n });\n\n assert.deepEqual(obj2.get('sortedItems').mapBy('name'), ['W', 'X', 'Y', 'Z'], 'initial');\n assert.deepEqual(obj.get('sortedItems').mapBy('name'), ['A', 'B', 'C', 'D'], 'initial');\n\n (0, _metal.set)(obj.get('items')[1], 'count', 5);\n (0, _metal.set)(obj.get('items')[2], 'count', 6);\n (0, _metal.set)(obj2.get('items')[1], 'count', 27);\n (0, _metal.set)(obj2.get('items')[2], 'count', 28);\n\n assert.deepEqual(obj.get('sortedItems').mapBy('name'), ['A', 'D', 'B', 'C'], 'final');\n assert.deepEqual(obj2.get('sortedItems').mapBy('name'), ['W', 'Z', 'X', 'Y'], 'final');\n\n obj.set('sortProps', ['thing']);\n\n assert.deepEqual(obj.get('sortedItems').mapBy('name'), ['D', 'C', 'B', 'A'], 'final');\n\n obj2.notifyPropertyChange('sortedItems'); // invalidate to flush, to get DK refreshed\n obj2.get('sortedItems'); // flush to get updated DK\n\n obj2.set('items.firstObject.count', 9999);\n\n assert.deepEqual(obj2.get('sortedItems').mapBy('name'), ['Z', 'X', 'Y', 'W'], 'final');\n };\n\n _class12.prototype['@test sort correctly when multiple sorts are chained on the same instance of a class'] = function testSortCorrectlyWhenMultipleSortsAreChainedOnTheSameInstanceOfAClass(assert) {\n var obj2 = klass.extend({\n items: (0, _metal.computed)('sibling.sortedItems.[]', function () {\n return this.get('sibling.sortedItems');\n }),\n asdf: (0, _metal.observer)('sibling.sortedItems.[]', function () {\n this.get('sibling.sortedItems');\n })\n }).create({\n sibling: obj\n });\n\n /*\n ┌───────────┐ ┌────────────┐\n │sortedProps│ │sortedProps2│\n └───────────┘ └────────────┘\n ▲ ▲\n │ ╔═══════════╗ │\n │─ ─ ─ ─ ─ ─ ─ ▶║ CP (sort) ║◀─ ─ ─ ─ ─ ─ ─ ┤\n │ ╚═══════════╝ │\n │ │\n ┌───────────┐ ┏━━━━━━━━━━━┓ ┏━━━━━━━━━━━━┓\n │ │ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┃ ┃ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┃ ┃\n │ items │◀── items.@each.count │◀──┃sortedItems┃◀─── items.@each.count │◀───┃sortedItems2┃\n │ │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┃ ┃ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┃ ┃\n └───────────┘ ┗━━━━━━━━━━━┛ ┗━━━━━━━━━━━━┛\n */\n\n assert.deepEqual(obj.get('sortedItems').mapBy('name'), ['A', 'B', 'C', 'D'], 'obj.sortedItems.name should be sorted alpha');\n assert.deepEqual(obj2.get('sortedItems').mapBy('name'), ['A', 'B', 'C', 'D'], 'obj2.sortedItems.name should be sorted alpha');\n\n (0, _metal.set)(obj.get('items')[1], 'count', 5);\n (0, _metal.set)(obj.get('items')[2], 'count', 6);\n\n assert.deepEqual(obj.get('sortedItems').mapBy('name'), ['A', 'D', 'B', 'C'], 'obj.sortedItems.name should now have changed');\n assert.deepEqual(obj2.get('sortedItems').mapBy('name'), ['A', 'D', 'B', 'C'], 'obj2.sortedItems.name should still mirror sortedItems2');\n\n obj.set('sortProps', ['thing']);\n obj2.set('sortProps', ['id']);\n\n assert.deepEqual(obj2.get('sortedItems').mapBy('name'), ['A', 'B', 'C', 'D'], 'we now sort obj2 by id, so we expect a b c d');\n assert.deepEqual(obj.get('sortedItems').mapBy('name'), ['D', 'C', 'B', 'A'], 'we now sort obj by thing');\n };\n\n return _class12;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('max', function (_AbstractTestCase13) {\n (0, _emberBabel.inherits)(_class13, _AbstractTestCase13);\n\n function _class13() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase13.apply(this, arguments));\n }\n\n _class13.prototype.beforeEach = function beforeEach() {\n obj = _runtime.Object.extend({\n max: (0, _computed.max)('items')\n }).create({\n items: (0, _runtime.A)([1, 2, 3])\n });\n };\n\n _class13.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class13.prototype['@test max is readOnly'] = function testMaxIsReadOnly(assert) {\n assert.throws(function () {\n obj.set('max', 1);\n }, /Cannot set read-only property \"max\" on object:/);\n };\n\n _class13.prototype['@test max tracks the max number as objects are added'] = function testMaxTracksTheMaxNumberAsObjectsAreAdded(assert) {\n assert.equal(obj.get('max'), 3, 'precond - max is initially correct');\n\n var items = obj.get('items');\n\n items.pushObject(5);\n\n assert.equal(obj.get('max'), 5, 'max updates when a larger number is added');\n\n items.pushObject(2);\n\n assert.equal(obj.get('max'), 5, 'max does not update when a smaller number is added');\n };\n\n _class13.prototype['@test max recomputes when the current max is removed'] = function testMaxRecomputesWhenTheCurrentMaxIsRemoved(assert) {\n assert.equal(obj.get('max'), 3, 'precond - max is initially correct');\n\n obj.get('items').removeObject(2);\n\n assert.equal(obj.get('max'), 3, 'max is unchanged when a non-max item is removed');\n\n obj.get('items').removeObject(3);\n\n assert.equal(obj.get('max'), 1, 'max is recomputed when the current max is removed');\n };\n\n return _class13;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('min', function (_AbstractTestCase14) {\n (0, _emberBabel.inherits)(_class14, _AbstractTestCase14);\n\n function _class14() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase14.apply(this, arguments));\n }\n\n _class14.prototype.beforeEach = function beforeEach() {\n obj = _runtime.Object.extend({\n min: (0, _computed.min)('items')\n }).create({\n items: (0, _runtime.A)([1, 2, 3])\n });\n };\n\n _class14.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class14.prototype['@test min is readOnly'] = function testMinIsReadOnly(assert) {\n assert.throws(function () {\n obj.set('min', 1);\n }, /Cannot set read-only property \"min\" on object:/);\n };\n\n _class14.prototype['@test min tracks the min number as objects are added'] = function testMinTracksTheMinNumberAsObjectsAreAdded(assert) {\n assert.equal(obj.get('min'), 1, 'precond - min is initially correct');\n\n obj.get('items').pushObject(-2);\n\n assert.equal(obj.get('min'), -2, 'min updates when a smaller number is added');\n\n obj.get('items').pushObject(2);\n\n assert.equal(obj.get('min'), -2, 'min does not update when a larger number is added');\n };\n\n _class14.prototype['@test min recomputes when the current min is removed'] = function testMinRecomputesWhenTheCurrentMinIsRemoved(assert) {\n var items = obj.get('items');\n\n assert.equal(obj.get('min'), 1, 'precond - min is initially correct');\n\n items.removeObject(2);\n\n assert.equal(obj.get('min'), 1, 'min is unchanged when a non-min item is removed');\n\n items.removeObject(1);\n\n assert.equal(obj.get('min'), 3, 'min is recomputed when the current min is removed');\n };\n\n return _class14;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Ember.arrayComputed - mixed sugar', function (_AbstractTestCase15) {\n (0, _emberBabel.inherits)(_class15, _AbstractTestCase15);\n\n function _class15() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase15.apply(this, arguments));\n }\n\n _class15.prototype.beforeEach = function beforeEach() {\n obj = _runtime.Object.extend({\n lannisters: (0, _computed.filterBy)('items', 'lname', 'Lannister'),\n lannisterSorting: (0, _runtime.A)(['fname']),\n sortedLannisters: (0, _computed.sort)('lannisters', 'lannisterSorting'),\n\n starks: (0, _computed.filterBy)('items', 'lname', 'Stark'),\n starkAges: (0, _computed.mapBy)('starks', 'age'),\n oldestStarkAge: (0, _computed.max)('starkAges')\n }).create({\n items: (0, _runtime.A)([{ fname: 'Jaime', lname: 'Lannister', age: 34 }, { fname: 'Cersei', lname: 'Lannister', age: 34 }, { fname: 'Robb', lname: 'Stark', age: 16 }, { fname: 'Bran', lname: 'Stark', age: 8 }])\n });\n };\n\n _class15.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class15.prototype['@test filtering and sorting can be combined'] = function testFilteringAndSortingCanBeCombined(assert) {\n var items = obj.get('items');\n\n assert.deepEqual(obj.get('sortedLannisters').mapBy('fname'), ['Cersei', 'Jaime'], 'precond - array is initially filtered and sorted');\n\n items.pushObject({ fname: 'Tywin', lname: 'Lannister' });\n items.pushObject({ fname: 'Lyanna', lname: 'Stark' });\n items.pushObject({ fname: 'Gerion', lname: 'Lannister' });\n\n assert.deepEqual(obj.get('sortedLannisters').mapBy('fname'), ['Cersei', 'Gerion', 'Jaime', 'Tywin'], 'updates propagate to array');\n };\n\n _class15.prototype['@test filtering, sorting and reduce (max) can be combined'] = function testFilteringSortingAndReduceMaxCanBeCombined(assert) {\n var items = obj.get('items');\n\n assert.equal(16, obj.get('oldestStarkAge'), 'precond - end of chain is initially correct');\n\n items.pushObject({ fname: 'Rickon', lname: 'Stark', age: 5 });\n\n assert.equal(16, obj.get('oldestStarkAge'), 'chain is updated correctly');\n\n items.pushObject({ fname: 'Eddard', lname: 'Stark', age: 35 });\n\n assert.equal(35, obj.get('oldestStarkAge'), 'chain is updated correctly');\n };\n\n return _class15;\n }(_internalTestHelpers.AbstractTestCase));\n\n function todo(name, priority) {\n return _runtime.Object.create({ name: name, priority: priority });\n }\n\n function priorityComparator(todoA, todoB) {\n var pa = parseInt((0, _metal.get)(todoA, 'priority'), 10);\n var pb = parseInt((0, _metal.get)(todoB, 'priority'), 10);\n\n return pa - pb;\n }\n\n function evenPriorities(todo) {\n var p = parseInt((0, _metal.get)(todo, 'priority'), 10);\n\n return p % 2 === 0;\n }\n\n (0, _internalTestHelpers.moduleFor)('Ember.arrayComputed - chains', function (_AbstractTestCase16) {\n (0, _emberBabel.inherits)(_class16, _AbstractTestCase16);\n\n function _class16() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase16.apply(this, arguments));\n }\n\n _class16.prototype.beforeEach = function beforeEach() {\n obj = _runtime.Object.extend({\n sorted: (0, _computed.sort)('todos.@each.priority', priorityComparator),\n filtered: (0, _computed.filter)('sorted.@each.priority', evenPriorities)\n }).create({\n todos: (0, _runtime.A)([todo('E', 4), todo('D', 3), todo('C', 2), todo('B', 1), todo('A', 0)])\n });\n };\n\n _class16.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class16.prototype['@test it can filter and sort when both depend on the same item property'] = function testItCanFilterAndSortWhenBothDependOnTheSameItemProperty(assert) {\n assert.deepEqual(obj.get('todos').mapBy('name'), ['E', 'D', 'C', 'B', 'A'], 'precond - todos initially correct');\n assert.deepEqual(obj.get('sorted').mapBy('name'), ['A', 'B', 'C', 'D', 'E'], 'precond - sorted initially correct');\n assert.deepEqual(obj.get('filtered').mapBy('name'), ['A', 'C', 'E'], 'precond - filtered initially correct');\n\n (0, _metal.set)(obj.get('todos')[1], 'priority', 6);\n\n assert.deepEqual(obj.get('todos').mapBy('name'), ['E', 'D', 'C', 'B', 'A'], 'precond - todos remain correct');\n assert.deepEqual(obj.get('sorted').mapBy('name'), ['A', 'B', 'C', 'E', 'D'], 'precond - sorted updated correctly');\n assert.deepEqual(obj.get('filtered').mapBy('name'), ['A', 'C', 'E', 'D'], 'filtered updated correctly');\n };\n\n return _class16;\n }(_internalTestHelpers.AbstractTestCase));\n\n var userFnCalls = void 0;\n (0, _internalTestHelpers.moduleFor)('Chaining array and reduced CPs', function (_AbstractTestCase17) {\n (0, _emberBabel.inherits)(_class17, _AbstractTestCase17);\n\n function _class17() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase17.apply(this, arguments));\n }\n\n _class17.prototype.beforeEach = function beforeEach() {\n userFnCalls = 0;\n obj = _runtime.Object.extend({\n mapped: (0, _computed.mapBy)('array', 'v'),\n max: (0, _computed.max)('mapped'),\n maxDidChange: (0, _metal.observer)('max', function () {\n return userFnCalls++;\n })\n }).create({\n array: (0, _runtime.A)([{ v: 1 }, { v: 3 }, { v: 2 }, { v: 1 }])\n });\n };\n\n _class17.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class17.prototype['@test it computes interdependent array computed properties'] = function testItComputesInterdependentArrayComputedProperties(assert) {\n assert.equal(obj.get('max'), 3, 'sanity - it properly computes the maximum value');\n\n var calls = 0;\n\n (0, _metal.addObserver)(obj, 'max', function () {\n return calls++;\n });\n\n obj.get('array').pushObject({ v: 5 });\n\n assert.equal(obj.get('max'), 5, 'maximum value is updated correctly');\n assert.equal(userFnCalls, 1, 'object defined observers fire');\n assert.equal(calls, 1, 'runtime created observers fire');\n };\n\n return _class17;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('sum', function (_AbstractTestCase18) {\n (0, _emberBabel.inherits)(_class18, _AbstractTestCase18);\n\n function _class18() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase18.apply(this, arguments));\n }\n\n _class18.prototype.beforeEach = function beforeEach() {\n obj = _runtime.Object.extend({\n total: (0, _computed.sum)('array')\n }).create({\n array: (0, _runtime.A)([1, 2, 3])\n });\n };\n\n _class18.prototype.afterEach = function afterEach() {\n (0, _runloop.run)(obj, 'destroy');\n };\n\n _class18.prototype['@test sum is readOnly'] = function testSumIsReadOnly(assert) {\n assert.throws(function () {\n obj.set('total', 1);\n }, /Cannot set read-only property \"total\" on object:/);\n };\n\n _class18.prototype['@test sums the values in the dependentKey'] = function testSumsTheValuesInTheDependentKey(assert) {\n assert.equal(obj.get('total'), 6, 'sums the values');\n };\n\n _class18.prototype['@test if the dependentKey is neither an array nor object, it will return `0`'] = function testIfTheDependentKeyIsNeitherAnArrayNorObjectItWillReturn0(assert) {\n (0, _metal.set)(obj, 'array', null);\n assert.equal((0, _metal.get)(obj, 'total'), 0, 'returns 0');\n\n (0, _metal.set)(obj, 'array', undefined);\n assert.equal((0, _metal.get)(obj, 'total'), 0, 'returns 0');\n\n (0, _metal.set)(obj, 'array', 'not an array');\n assert.equal((0, _metal.get)(obj, 'total'), 0, 'returns 0');\n };\n\n _class18.prototype['@test updates when array is modified'] = function testUpdatesWhenArrayIsModified(assert) {\n obj.get('array').pushObject(1);\n\n assert.equal(obj.get('total'), 7, 'recomputed when elements are added');\n\n obj.get('array').popObject();\n\n assert.equal(obj.get('total'), 6, 'recomputes when elements are removed');\n };\n\n return _class18;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('collect', function (_AbstractTestCase19) {\n (0, _emberBabel.inherits)(_class19, _AbstractTestCase19);\n\n function _class19() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase19.apply(this, arguments));\n }\n\n _class19.prototype['@test works'] = function testWorks(assert) {\n var obj = { one: 'foo', two: 'bar', three: null };\n (0, _metal.defineProperty)(obj, 'all', (0, _computed.collect)('one', 'two', 'three', 'four'));\n\n assert.deepEqual((0, _metal.get)(obj, 'all'), ['foo', 'bar', null, null], 'have all of them');\n\n (0, _metal.set)(obj, 'four', true);\n\n assert.deepEqual((0, _metal.get)(obj, 'all'), ['foo', 'bar', null, true], 'have all of them');\n\n var a = [];\n (0, _metal.set)(obj, 'one', 0);\n (0, _metal.set)(obj, 'three', a);\n\n assert.deepEqual((0, _metal.get)(obj, 'all'), [0, 'bar', a, true], 'have all of them');\n };\n\n return _class19;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/polyfills/tests/assign_test', ['ember-babel', '@ember/polyfills', 'internal-test-helpers'], function (_emberBabel, _polyfills, _internalTestHelpers) {\n 'use strict';\n\n var AssignTests = function (_TestCase) {\n (0, _emberBabel.inherits)(AssignTests, _TestCase);\n\n function AssignTests() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.apply(this, arguments));\n }\n\n AssignTests.prototype['@test merging objects'] = function testMergingObjects(assert) {\n var trgt = { a: 1 };\n var src1 = { b: 2 };\n var src2 = { c: 3 };\n this.assign(trgt, src1, src2);\n\n assert.deepEqual(trgt, { a: 1, b: 2, c: 3 }, 'assign copies values from one or more source objects to a target object');\n assert.deepEqual(src1, { b: 2 }, 'assign does not change source object 1');\n assert.deepEqual(src2, { c: 3 }, 'assign does not change source object 2');\n };\n\n AssignTests.prototype['@test merging objects with same property'] = function testMergingObjectsWithSameProperty(assert) {\n var trgt = { a: 1, b: 1 };\n var src1 = { a: 2, b: 2 };\n var src2 = { a: 3 };\n this.assign(trgt, src1, src2);\n\n assert.deepEqual(trgt, { a: 3, b: 2 }, 'properties are overwritten by other objects that have the same properties later in the parameters order');\n };\n\n AssignTests.prototype['@test null'] = function testNull(assert) {\n var trgt = { a: 1 };\n this.assign(trgt, null);\n\n assert.deepEqual(trgt, { a: 1 }, 'null as a source parameter is ignored');\n };\n\n AssignTests.prototype['@test undefined'] = function testUndefined(assert) {\n var trgt = { a: 1 };\n this.assign(trgt, null);\n\n assert.deepEqual(trgt, { a: 1 }, 'undefined as a source parameter is ignored');\n };\n\n return AssignTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _internalTestHelpers.moduleFor)('Ember.assign (polyfill)', function (_AssignTests) {\n (0, _emberBabel.inherits)(_class, _AssignTests);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AssignTests.apply(this, arguments));\n }\n\n _class.prototype.assign = function assign() {\n return _polyfills.assignPolyfill.apply(undefined, arguments);\n };\n\n return _class;\n }(AssignTests));\n\n (0, _internalTestHelpers.moduleFor)('Ember.assign (maybe not-polyfill ;) )', function (_AssignTests2) {\n (0, _emberBabel.inherits)(_class2, _AssignTests2);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AssignTests2.apply(this, arguments));\n }\n\n _class2.prototype.assign = function assign() {\n return _polyfills.assign.apply(undefined, arguments);\n };\n\n return _class2;\n }(AssignTests));\n});","enifed('@ember/polyfills/tests/merge_test', ['ember-babel', '@ember/polyfills', 'internal-test-helpers'], function (_emberBabel, _polyfills, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Ember.merge', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test merging objects'] = function testMergingObjects(assert) {\n var src1 = { a: 1 };\n var src2 = { b: 2 };\n expectDeprecation(function () {\n (0, _polyfills.merge)(src1, src2);\n }, 'Use of `merge` has been deprecated. Please use `assign` instead.');\n\n assert.deepEqual(src1, { a: 1, b: 2 }, 'merge copies values from second source object to first object');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/runloop/tests/debounce_test', ['ember-babel', '@ember/runloop', 'internal-test-helpers'], function (_emberBabel, _runloop, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('debounce', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test debounce - with target, with method, without args'] = function testDebounceWithTargetWithMethodWithoutArgs(assert) {\n var done = assert.async();\n\n var calledWith = [];\n var target = {\n someFunc: function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n calledWith.push(args);\n }\n };\n\n (0, _runloop.debounce)(target, target.someFunc, 10);\n (0, _runloop.debounce)(target, target.someFunc, 10);\n (0, _runloop.debounce)(target, target.someFunc, 10);\n\n setTimeout(function () {\n assert.deepEqual(calledWith, [[]], 'someFunc called once with correct arguments');\n done();\n }, 20);\n };\n\n _class.prototype['@test debounce - with target, with method name, without args'] = function testDebounceWithTargetWithMethodNameWithoutArgs(assert) {\n var done = assert.async();\n\n var calledWith = [];\n var target = {\n someFunc: function () {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n calledWith.push(args);\n }\n };\n\n (0, _runloop.debounce)(target, 'someFunc', 10);\n (0, _runloop.debounce)(target, 'someFunc', 10);\n (0, _runloop.debounce)(target, 'someFunc', 10);\n\n setTimeout(function () {\n assert.deepEqual(calledWith, [[]], 'someFunc called once with correct arguments');\n done();\n }, 20);\n };\n\n _class.prototype['@test debounce - without target, without args'] = function testDebounceWithoutTargetWithoutArgs(assert) {\n var done = assert.async();\n\n var calledWith = [];\n function someFunc() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n calledWith.push(args);\n }\n\n (0, _runloop.debounce)(someFunc, 10);\n (0, _runloop.debounce)(someFunc, 10);\n (0, _runloop.debounce)(someFunc, 10);\n\n setTimeout(function () {\n assert.deepEqual(calledWith, [[]], 'someFunc called once with correct arguments');\n done();\n }, 20);\n };\n\n _class.prototype['@test debounce - without target, with args'] = function testDebounceWithoutTargetWithArgs(assert) {\n var done = assert.async();\n\n var calledWith = [];\n function someFunc() {\n for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n calledWith.push(args);\n }\n\n (0, _runloop.debounce)(someFunc, { isFoo: true }, 10);\n (0, _runloop.debounce)(someFunc, { isBar: true }, 10);\n (0, _runloop.debounce)(someFunc, { isBaz: true }, 10);\n\n setTimeout(function () {\n assert.deepEqual(calledWith, [[{ isBaz: true }]], 'someFunc called once with correct arguments');\n done();\n }, 20);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/runloop/tests/later_test', ['ember-babel', 'internal-test-helpers', '@ember/polyfills', '@ember/runloop'], function (_emberBabel, _internalTestHelpers, _polyfills, _runloop) {\n 'use strict';\n\n var originalSetTimeout = window.setTimeout;\n var originalDateValueOf = Date.prototype.valueOf;\n var originalPlatform = _runloop.backburner._platform;\n\n function wait(callback) {\n var maxWaitCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100;\n\n originalSetTimeout(function () {\n if (maxWaitCount > 0 && ((0, _runloop.hasScheduledTimers)() || (0, _runloop.getCurrentRunLoop)())) {\n wait(callback, maxWaitCount - 1);\n\n return;\n }\n\n callback();\n }, 10);\n }\n\n // Synchronous \"sleep\". This simulates work being done\n // after later was called but before the run loop\n // has flushed. In previous versions, this would have\n // caused the later callback to have run from\n // within the run loop flush, since by the time the\n // run loop has to flush, it would have considered\n // the timer already expired.\n function pauseUntil(time) {\n while (+new Date() < time) {\n /* do nothing - sleeping */\n }\n }\n\n (0, _internalTestHelpers.moduleFor)('run.later', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.teardown = function teardown() {\n _runloop.backburner._platform = originalPlatform;\n window.setTimeout = originalSetTimeout;\n Date.prototype.valueOf = originalDateValueOf;\n };\n\n _class.prototype['@test should invoke after specified period of time - function only'] = function testShouldInvokeAfterSpecifiedPeriodOfTimeFunctionOnly(assert) {\n var done = assert.async();\n var invoked = false;\n\n (0, _runloop.run)(function () {\n (0, _runloop.later)(function () {\n return invoked = true;\n }, 100);\n });\n\n wait(function () {\n assert.equal(invoked, true, 'should have invoked later item');\n done();\n });\n };\n\n _class.prototype['@test should invoke after specified period of time - target/method'] = function testShouldInvokeAfterSpecifiedPeriodOfTimeTargetMethod(assert) {\n var done = assert.async();\n var obj = { invoked: false };\n\n (0, _runloop.run)(function () {\n (0, _runloop.later)(obj, function () {\n this.invoked = true;\n }, 100);\n });\n\n wait(function () {\n assert.equal(obj.invoked, true, 'should have invoked later item');\n done();\n });\n };\n\n _class.prototype['@test should invoke after specified period of time - target/method/args'] = function testShouldInvokeAfterSpecifiedPeriodOfTimeTargetMethodArgs(assert) {\n var done = assert.async();\n var obj = { invoked: 0 };\n\n (0, _runloop.run)(function () {\n (0, _runloop.later)(obj, function (amt) {\n this.invoked += amt;\n }, 10, 100);\n });\n\n wait(function () {\n assert.equal(obj.invoked, 10, 'should have invoked later item');\n done();\n });\n };\n\n _class.prototype['@test should always invoke within a separate runloop'] = function testShouldAlwaysInvokeWithinASeparateRunloop(assert) {\n var done = assert.async();\n var obj = { invoked: 0 };\n var firstRunLoop = void 0,\n secondRunLoop = void 0;\n\n (0, _runloop.run)(function () {\n firstRunLoop = (0, _runloop.getCurrentRunLoop)();\n\n (0, _runloop.later)(obj, function (amt) {\n this.invoked += amt;\n secondRunLoop = (0, _runloop.getCurrentRunLoop)();\n }, 10, 1);\n\n pauseUntil(+new Date() + 100);\n });\n\n assert.ok(firstRunLoop, 'first run loop captured');\n assert.ok(!(0, _runloop.getCurrentRunLoop)(), \"shouldn't be in a run loop after flush\");\n assert.equal(obj.invoked, 0, \"shouldn't have invoked later item yet\");\n\n wait(function () {\n assert.equal(obj.invoked, 10, 'should have invoked later item');\n assert.ok(secondRunLoop, 'second run loop took place');\n assert.ok(secondRunLoop !== firstRunLoop, 'two different run loops took place');\n done();\n });\n };\n\n // Our current implementation doesn't allow us to correctly enforce this ordering.\n // We should probably implement a queue to provide this guarantee.\n // See https://github.com/emberjs/ember.js/issues/3526 for more information.\n\n // asyncTest('callback order', function() {\n // let array = [];\n // function fn(val) { array.push(val); }\n\n // run(function() {\n // later(this, fn, 4, 5);\n // later(this, fn, 1, 1);\n // later(this, fn, 5, 10);\n // later(this, fn, 2, 3);\n // later(this, fn, 3, 3);\n // });\n\n // deepEqual(array, []);\n\n // wait(function() {\n // QUnit.start();\n // deepEqual(array, [1,2,3,4,5], 'callbacks were called in expected order');\n // });\n // });\n\n // Out current implementation doesn't allow us to properly enforce what is tested here.\n // We should probably fix it, but it's not technically a bug right now.\n // See https://github.com/emberjs/ember.js/issues/3522 for more information.\n\n // asyncTest('callbacks coalesce into same run loop if expiring at the same time', function() {\n // let array = [];\n // function fn(val) { array.push(getCurrentRunLoop()); }\n\n // run(function() {\n\n // // Force +new Date to return the same result while scheduling\n // // later timers. Otherwise: non-determinism!\n // let now = +new Date();\n // Date.prototype.valueOf = function() { return now; };\n\n // later(this, fn, 10);\n // later(this, fn, 200);\n // later(this, fn, 200);\n\n // Date.prototype.valueOf = originalDateValueOf;\n // });\n\n // deepEqual(array, []);\n\n // wait(function() {\n // QUnit.start();\n // equal(array.length, 3, 'all callbacks called');\n // ok(array[0] !== array[1], 'first two callbacks have different run loops');\n // ok(array[0], 'first runloop present');\n // ok(array[1], 'second runloop present');\n // equal(array[1], array[2], 'last two callbacks got the same run loop');\n // });\n // });\n\n _class.prototype['@test inception calls to later should run callbacks in separate run loops'] = function testInceptionCallsToLaterShouldRunCallbacksInSeparateRunLoops(assert) {\n var done = assert.async();\n var runLoop = void 0,\n finished = void 0;\n\n (0, _runloop.run)(function () {\n runLoop = (0, _runloop.getCurrentRunLoop)();\n assert.ok(runLoop);\n\n (0, _runloop.later)(function () {\n assert.ok((0, _runloop.getCurrentRunLoop)() && (0, _runloop.getCurrentRunLoop)() !== runLoop, 'first later callback has own run loop');\n runLoop = (0, _runloop.getCurrentRunLoop)();\n\n (0, _runloop.later)(function () {\n assert.ok((0, _runloop.getCurrentRunLoop)() && (0, _runloop.getCurrentRunLoop)() !== runLoop, 'second later callback has own run loop');\n finished = true;\n }, 40);\n }, 40);\n });\n\n wait(function () {\n assert.ok(finished, 'all .later callbacks run');\n done();\n });\n };\n\n _class.prototype['@test setTimeout should never run with a negative wait'] = function testSetTimeoutShouldNeverRunWithANegativeWait(assert) {\n var done = assert.async();\n // Rationale: The old run loop code was susceptible to an occasional\n // bug where invokeLaterTimers would be scheduled with a setTimeout\n // with a negative wait. Modern browsers normalize this to 0, but\n // older browsers (IE <= 8) break with a negative wait, which\n // happens when an expired timer callback takes a while to run,\n // which is what we simulate here.\n var newSetTimeoutUsed = void 0;\n _runloop.backburner._platform = (0, _polyfills.assign)({}, originalPlatform, {\n setTimeout: function () {\n var wait = arguments[arguments.length - 1];\n newSetTimeoutUsed = true;\n assert.ok(!isNaN(wait) && wait >= 0, 'wait is a non-negative number');\n\n return originalPlatform.setTimeout.apply(originalPlatform, arguments);\n }\n });\n\n var count = 0;\n (0, _runloop.run)(function () {\n (0, _runloop.later)(function () {\n count++;\n\n // This will get run first. Waste some time.\n // This is intended to break invokeLaterTimers code by taking a\n // long enough time that other timers should technically expire. It's\n // fine that they're not called in this run loop; just need to\n // make sure that invokeLaterTimers doesn't end up scheduling\n // a negative setTimeout.\n pauseUntil(+new Date() + 60);\n }, 1);\n\n (0, _runloop.later)(function () {\n assert.equal(count, 1, 'callbacks called in order');\n }, 50);\n });\n\n wait(function () {\n assert.ok(newSetTimeoutUsed, 'stub setTimeout was used');\n done();\n });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/runloop/tests/next_test', ['ember-babel', '@ember/runloop', 'internal-test-helpers'], function (_emberBabel, _runloop, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('run.next', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test should invoke immediately on next timeout'] = function testShouldInvokeImmediatelyOnNextTimeout(assert) {\n var done = assert.async();\n var invoked = false;\n\n (0, _runloop.run)(function () {\n return (0, _runloop.next)(function () {\n return invoked = true;\n });\n });\n\n assert.equal(invoked, false, 'should not have invoked yet');\n\n setTimeout(function () {\n assert.equal(invoked, true, 'should have invoked later item');\n done();\n }, 20);\n };\n\n _class.prototype['@test callback should be called from within separate loop'] = function testCallbackShouldBeCalledFromWithinSeparateLoop(assert) {\n var done = assert.async();\n var firstRunLoop = void 0,\n secondRunLoop = void 0;\n (0, _runloop.run)(function () {\n firstRunLoop = (0, _runloop.getCurrentRunLoop)();\n (0, _runloop.next)(function () {\n return secondRunLoop = (0, _runloop.getCurrentRunLoop)();\n });\n });\n\n setTimeout(function () {\n assert.ok(secondRunLoop, 'callback was called from within run loop');\n assert.ok(firstRunLoop && secondRunLoop !== firstRunLoop, 'two separate run loops were invoked');\n done();\n }, 20);\n };\n\n _class.prototype['@test multiple calls to next share coalesce callbacks into same run loop'] = function testMultipleCallsToNextShareCoalesceCallbacksIntoSameRunLoop(assert) {\n var done = assert.async();\n var secondRunLoop = void 0,\n thirdRunLoop = void 0;\n (0, _runloop.run)(function () {\n (0, _runloop.next)(function () {\n return secondRunLoop = (0, _runloop.getCurrentRunLoop)();\n });\n (0, _runloop.next)(function () {\n return thirdRunLoop = (0, _runloop.getCurrentRunLoop)();\n });\n });\n\n setTimeout(function () {\n assert.ok(secondRunLoop && secondRunLoop === thirdRunLoop, 'callbacks coalesced into same run loop');\n done();\n }, 20);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/runloop/tests/once_test', ['ember-babel', '@ember/runloop', 'internal-test-helpers'], function (_emberBabel, _runloop, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('system/run_loop/once_test', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test calling invokeOnce more than once invokes only once'] = function testCallingInvokeOnceMoreThanOnceInvokesOnlyOnce(assert) {\n var count = 0;\n (0, _runloop.run)(function () {\n function F() {\n count++;\n }\n (0, _runloop.once)(F);\n (0, _runloop.once)(F);\n (0, _runloop.once)(F);\n });\n\n assert.equal(count, 1, 'should have invoked once');\n };\n\n _class.prototype['@test should differentiate based on target'] = function testShouldDifferentiateBasedOnTarget(assert) {\n var A = { count: 0 };\n var B = { count: 0 };\n (0, _runloop.run)(function () {\n function F() {\n this.count++;\n }\n (0, _runloop.once)(A, F);\n (0, _runloop.once)(B, F);\n (0, _runloop.once)(A, F);\n (0, _runloop.once)(B, F);\n });\n\n assert.equal(A.count, 1, 'should have invoked once on A');\n assert.equal(B.count, 1, 'should have invoked once on B');\n };\n\n _class.prototype['@test should ignore other arguments - replacing previous ones'] = function testShouldIgnoreOtherArgumentsReplacingPreviousOnes(assert) {\n var A = { count: 0 };\n var B = { count: 0 };\n\n (0, _runloop.run)(function () {\n function F(amt) {\n this.count += amt;\n }\n (0, _runloop.once)(A, F, 10);\n (0, _runloop.once)(B, F, 20);\n (0, _runloop.once)(A, F, 30);\n (0, _runloop.once)(B, F, 40);\n });\n\n assert.equal(A.count, 30, 'should have invoked once on A');\n assert.equal(B.count, 40, 'should have invoked once on B');\n };\n\n _class.prototype['@test should be inside of a runloop when running'] = function testShouldBeInsideOfARunloopWhenRunning(assert) {\n (0, _runloop.run)(function () {\n (0, _runloop.once)(function () {\n return assert.ok(!!(0, _runloop.getCurrentRunLoop)(), 'should have a runloop');\n });\n });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/runloop/tests/onerror_test', ['ember-babel', '@ember/runloop', '@ember/-internals/error-handling', '@ember/debug', 'internal-test-helpers'], function (_emberBabel, _runloop, _errorHandling, _debug, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('system/run_loop/onerror_test', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test With Ember.onerror undefined, errors in run are thrown'] = function testWithEmberOnerrorUndefinedErrorsInRunAreThrown(assert) {\n var thrown = new Error('Boom!');\n var original = (0, _errorHandling.getOnerror)();\n\n var caught = void 0;\n (0, _errorHandling.setOnerror)(undefined);\n try {\n (0, _runloop.run)(function () {\n throw thrown;\n });\n } catch (error) {\n caught = error;\n } finally {\n (0, _errorHandling.setOnerror)(original);\n }\n\n assert.deepEqual(caught, thrown);\n };\n\n _class.prototype['@test With Ember.onerror set, errors in run are caught'] = function testWithEmberOnerrorSetErrorsInRunAreCaught(assert) {\n var thrown = new Error('Boom!');\n var original = (0, _errorHandling.getOnerror)();\n var originalDispatchOverride = (0, _errorHandling.getDispatchOverride)();\n var originalIsTesting = (0, _debug.isTesting)();\n\n var caught = void 0;\n (0, _errorHandling.setOnerror)(function (error) {\n caught = error;\n });\n (0, _errorHandling.setDispatchOverride)(null);\n (0, _debug.setTesting)(false);\n\n try {\n (0, _runloop.run)(function () {\n throw thrown;\n });\n } finally {\n (0, _errorHandling.setOnerror)(original);\n (0, _errorHandling.setDispatchOverride)(originalDispatchOverride);\n (0, _debug.setTesting)(originalIsTesting);\n }\n\n assert.deepEqual(caught, thrown);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/runloop/tests/run_bind_test', ['ember-babel', '@ember/runloop', 'internal-test-helpers'], function (_emberBabel, _runloop, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('system/run_loop/run_bind_test', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test bind builds a run-loop wrapped callback handler'] = function testBindBuildsARunLoopWrappedCallbackHandler(assert) {\n assert.expect(3);\n\n var obj = {\n value: 0,\n increment: function (increment) {\n assert.ok((0, _runloop.getCurrentRunLoop)(), 'expected a run-loop');\n return this.value += increment;\n }\n };\n\n var proxiedFunction = (0, _runloop.bind)(obj, obj.increment, 1);\n assert.equal(proxiedFunction(), 1);\n assert.equal(obj.value, 1);\n };\n\n _class.prototype['@test bind keeps the async callback arguments'] = function testBindKeepsTheAsyncCallbackArguments(assert) {\n assert.expect(4);\n\n function asyncCallback(increment, increment2, increment3) {\n assert.ok((0, _runloop.getCurrentRunLoop)(), 'expected a run-loop');\n assert.equal(increment, 1);\n assert.equal(increment2, 2);\n assert.equal(increment3, 3);\n }\n\n function asyncFunction(fn) {\n fn(2, 3);\n }\n\n asyncFunction((0, _runloop.bind)(asyncCallback, asyncCallback, 1));\n };\n\n _class.prototype['@test [GH#16652] bind throws an error if callback is undefined'] = function testGH16652BindThrowsAnErrorIfCallbackIsUndefined() {\n var assertBindThrows = function (msg) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n expectAssertion(function () {\n _runloop.bind.apply(undefined, args);\n }, /could not find a suitable method to bind/, msg);\n };\n assertBindThrows('without arguments');\n assertBindThrows('with one arguments that is not a function', 'myMethod');\n assertBindThrows('if second parameter is not a function and not a property in first parameter', Object.create(null), 'myMethod');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/runloop/tests/run_test', ['ember-babel', '@ember/runloop', 'internal-test-helpers'], function (_emberBabel, _runloop, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('system/run_loop/run_test', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test run invokes passed function, returning value'] = function testRunInvokesPassedFunctionReturningValue(assert) {\n var obj = {\n foo: function () {\n return [this.bar, 'FOO'];\n },\n\n bar: 'BAR',\n checkArgs: function (arg1, arg2) {\n return [arg1, this.bar, arg2];\n }\n };\n\n assert.equal((0, _runloop.run)(function () {\n return 'FOO';\n }), 'FOO', 'pass function only');\n assert.deepEqual((0, _runloop.run)(obj, obj.foo), ['BAR', 'FOO'], 'pass obj and obj.method');\n assert.deepEqual((0, _runloop.run)(obj, 'foo'), ['BAR', 'FOO'], 'pass obj and \"method\"');\n assert.deepEqual((0, _runloop.run)(obj, obj.checkArgs, 'hello', 'world'), ['hello', 'BAR', 'world'], 'pass obj, obj.method, and extra arguments');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/runloop/tests/schedule_test', ['ember-babel', '@ember/runloop', 'internal-test-helpers'], function (_emberBabel, _runloop, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('system/run_loop/schedule_test', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test scheduling item in queue should defer until finished'] = function testSchedulingItemInQueueShouldDeferUntilFinished(assert) {\n var cnt = 0;\n\n (0, _runloop.run)(function () {\n (0, _runloop.schedule)('actions', function () {\n return cnt++;\n });\n (0, _runloop.schedule)('actions', function () {\n return cnt++;\n });\n assert.equal(cnt, 0, 'should not run action yet');\n });\n\n assert.equal(cnt, 2, 'should flush actions now');\n };\n\n _class.prototype['@test a scheduled item can be canceled'] = function testAScheduledItemCanBeCanceled(assert) {\n var hasRan = false;\n\n (0, _runloop.run)(function () {\n var cancelId = (0, _runloop.schedule)('actions', function () {\n return hasRan = true;\n });\n (0, _runloop.cancel)(cancelId);\n });\n\n assert.notOk(hasRan, 'should not have ran callback run');\n };\n\n _class.prototype['@test nested runs should queue each phase independently'] = function testNestedRunsShouldQueueEachPhaseIndependently(assert) {\n var cnt = 0;\n\n (0, _runloop.run)(function () {\n (0, _runloop.schedule)('actions', function () {\n return cnt++;\n });\n assert.equal(cnt, 0, 'should not run action yet');\n\n (0, _runloop.run)(function () {\n (0, _runloop.schedule)('actions', function () {\n return cnt++;\n });\n });\n assert.equal(cnt, 1, 'should not run action yet');\n });\n\n assert.equal(cnt, 2, 'should flush actions now');\n };\n\n _class.prototype['@test prior queues should be flushed before moving on to next queue'] = function testPriorQueuesShouldBeFlushedBeforeMovingOnToNextQueue(assert) {\n var order = [];\n\n (0, _runloop.run)(function () {\n var runLoop = (0, _runloop.getCurrentRunLoop)();\n assert.ok(runLoop, 'run loop present');\n\n expectDeprecation(function () {\n (0, _runloop.schedule)('sync', function () {\n order.push('sync');\n assert.equal(runLoop, (0, _runloop.getCurrentRunLoop)(), 'same run loop used');\n });\n }, 'Scheduling into the \\'sync\\' run loop queue is deprecated.');\n\n (0, _runloop.schedule)('actions', function () {\n order.push('actions');\n assert.equal(runLoop, (0, _runloop.getCurrentRunLoop)(), 'same run loop used');\n\n (0, _runloop.schedule)('actions', function () {\n order.push('actions');\n assert.equal(runLoop, (0, _runloop.getCurrentRunLoop)(), 'same run loop used');\n });\n\n expectDeprecation(function () {\n (0, _runloop.schedule)('sync', function () {\n order.push('sync');\n assert.equal(runLoop, (0, _runloop.getCurrentRunLoop)(), 'same run loop used');\n });\n }, 'Scheduling into the \\'sync\\' run loop queue is deprecated.');\n });\n\n (0, _runloop.schedule)('destroy', function () {\n order.push('destroy');\n assert.equal(runLoop, (0, _runloop.getCurrentRunLoop)(), 'same run loop used');\n });\n });\n\n assert.deepEqual(order, ['sync', 'actions', 'sync', 'actions', 'destroy']);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/runloop/tests/sync_test', ['ember-babel', '@ember/runloop', 'internal-test-helpers'], function (_emberBabel, _runloop, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('system/run_loop/sync_test', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test sync() will immediately flush the sync queue only'] = function testSyncWillImmediatelyFlushTheSyncQueueOnly(assert) {\n var cnt = 0;\n\n (0, _runloop.run)(function () {\n function cntup() {\n cnt++;\n }\n\n function syncfunc() {\n if (++cnt < 5) {\n expectDeprecation(function () {\n (0, _runloop.schedule)('sync', syncfunc);\n }, 'Scheduling into the \\'sync\\' run loop queue is deprecated.');\n }\n (0, _runloop.schedule)('actions', cntup);\n }\n\n syncfunc();\n\n assert.equal(cnt, 1, 'should not run action yet');\n });\n\n assert.equal(cnt, 10, 'should flush actions now too');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/runloop/tests/unwind_test', ['ember-babel', '@ember/runloop', '@ember/error', 'internal-test-helpers'], function (_emberBabel, _runloop, _error, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('system/run_loop/unwind_test', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test RunLoop unwinds despite unhandled exception'] = function testRunLoopUnwindsDespiteUnhandledException(assert) {\n var initialRunLoop = (0, _runloop.getCurrentRunLoop)();\n\n assert.throws(function () {\n (0, _runloop.run)(function () {\n (0, _runloop.schedule)('actions', function () {\n throw new _error.default('boom!');\n });\n });\n }, Error, 'boom!');\n\n // The real danger at this point is that calls to autorun will stick\n // tasks into the already-dead runloop, which will never get\n // flushed. I can't easily demonstrate this in a unit test because\n // autorun explicitly doesn't work in test mode. - ef4\n assert.equal((0, _runloop.getCurrentRunLoop)(), initialRunLoop, 'Previous run loop should be cleaned up despite exception');\n };\n\n _class.prototype['@test run unwinds despite unhandled exception'] = function testRunUnwindsDespiteUnhandledException(assert) {\n var initialRunLoop = (0, _runloop.getCurrentRunLoop)();\n\n assert.throws(function () {\n (0, _runloop.run)(function () {\n throw new _error.default('boom!');\n });\n }, _error.default, 'boom!');\n\n assert.equal((0, _runloop.getCurrentRunLoop)(), initialRunLoop, 'Previous run loop should be cleaned up despite exception');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/string/tests/camelize_test', ['ember-babel', '@ember/-internals/environment', '@ember/string', 'internal-test-helpers'], function (_emberBabel, _environment, _string, _internalTestHelpers) {\n 'use strict';\n\n function test(assert, given, expected, description) {\n assert.deepEqual((0, _string.camelize)(given), expected, description);\n if (_environment.ENV.EXTEND_PROTOTYPES.String) {\n assert.deepEqual(given.camelize(), expected, description);\n }\n }\n\n (0, _internalTestHelpers.moduleFor)('EmberStringUtils.camelize', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test String.prototype.camelize is not modified without EXTEND_PROTOTYPES'] = function testStringPrototypeCamelizeIsNotModifiedWithoutEXTEND_PROTOTYPES(assert) {\n if (!_environment.ENV.EXTEND_PROTOTYPES.String) {\n assert.ok('undefined' === typeof String.prototype.camelize, 'String.prototype helper disabled');\n } else {\n assert.expect(0);\n }\n };\n\n _class.prototype['@test String camelize tests'] = function testStringCamelizeTests(assert) {\n test(assert, 'my favorite items', 'myFavoriteItems', 'camelize normal string');\n test(assert, 'I Love Ramen', 'iLoveRamen', 'camelize capitalized string');\n test(assert, 'css-class-name', 'cssClassName', 'camelize dasherized string');\n test(assert, 'action_name', 'actionName', 'camelize underscored string');\n test(assert, 'action.name', 'actionName', 'camelize dot notation string');\n test(assert, 'innerHTML', 'innerHTML', 'does nothing with camelcased string');\n test(assert, 'PrivateDocs/OwnerInvoice', 'privateDocs/ownerInvoice', 'camelize namespaced classified string');\n test(assert, 'private_docs/owner_invoice', 'privateDocs/ownerInvoice', 'camelize namespaced underscored string');\n test(assert, 'private-docs/owner-invoice', 'privateDocs/ownerInvoice', 'camelize namespaced dasherized string');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/string/tests/capitalize_test', ['ember-babel', '@ember/-internals/environment', '@ember/string', 'internal-test-helpers'], function (_emberBabel, _environment, _string, _internalTestHelpers) {\n 'use strict';\n\n function test(assert, given, expected, description) {\n assert.deepEqual((0, _string.capitalize)(given), expected, description);\n if (_environment.ENV.EXTEND_PROTOTYPES.String) {\n assert.deepEqual(given.capitalize(), expected, description);\n }\n }\n\n (0, _internalTestHelpers.moduleFor)('EmberStringUtils.capitalize', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test String.prototype.capitalize is not modified without EXTEND_PROTOTYPES'] = function testStringPrototypeCapitalizeIsNotModifiedWithoutEXTEND_PROTOTYPES(assert) {\n if (!_environment.ENV.EXTEND_PROTOTYPES.String) {\n assert.ok('undefined' === typeof String.prototype.capitalize, 'String.prototype helper disabled');\n } else {\n assert.expect(0);\n }\n };\n\n _class.prototype['@test String capitalize tests'] = function testStringCapitalizeTests(assert) {\n test(assert, 'my favorite items', 'My favorite items', 'capitalize normal string');\n test(assert, 'css-class-name', 'Css-class-name', 'capitalize dasherized string');\n test(assert, 'action_name', 'Action_name', 'capitalize underscored string');\n test(assert, 'innerHTML', 'InnerHTML', 'capitalize camelcased string');\n test(assert, 'Capitalized string', 'Capitalized string', 'does nothing with capitalized string');\n test(assert, 'privateDocs/ownerInvoice', 'PrivateDocs/OwnerInvoice', 'capitalize namespaced camelized string');\n test(assert, 'private_docs/owner_invoice', 'Private_docs/Owner_invoice', 'capitalize namespaced underscored string');\n test(assert, 'private-docs/owner-invoice', 'Private-docs/Owner-invoice', 'capitalize namespaced dasherized string');\n test(assert, 'šabc', 'Šabc', 'capitalize string with accent character');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/string/tests/classify_test', ['ember-babel', '@ember/-internals/environment', '@ember/string', 'internal-test-helpers'], function (_emberBabel, _environment, _string, _internalTestHelpers) {\n 'use strict';\n\n function test(assert, given, expected, description) {\n assert.deepEqual((0, _string.classify)(given), expected, description);\n if (_environment.ENV.EXTEND_PROTOTYPES.String) {\n assert.deepEqual(given.classify(), expected, description);\n }\n }\n\n (0, _internalTestHelpers.moduleFor)('EmberStringUtils.classify', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test String.prototype.classify is not modified without EXTEND_PROTOTYPES'] = function testStringPrototypeClassifyIsNotModifiedWithoutEXTEND_PROTOTYPES(assert) {\n if (!_environment.ENV.EXTEND_PROTOTYPES.String) {\n assert.ok('undefined' === typeof String.prototype.classify, 'String.prototype helper disabled');\n } else {\n assert.expect(0);\n }\n };\n\n _class.prototype['@test String classify tests'] = function testStringClassifyTests(assert) {\n test(assert, 'my favorite items', 'MyFavoriteItems', 'classify normal string');\n test(assert, 'css-class-name', 'CssClassName', 'classify dasherized string');\n test(assert, 'action_name', 'ActionName', 'classify underscored string');\n test(assert, 'privateDocs/ownerInvoice', 'PrivateDocs/OwnerInvoice', 'classify namespaced camelized string');\n test(assert, 'private_docs/owner_invoice', 'PrivateDocs/OwnerInvoice', 'classify namespaced underscored string');\n test(assert, 'private-docs/owner-invoice', 'PrivateDocs/OwnerInvoice', 'classify namespaced dasherized string');\n test(assert, '-view-registry', '_ViewRegistry', 'classify prefixed dasherized string');\n test(assert, 'components/-text-field', 'Components/_TextField', 'classify namespaced prefixed dasherized string');\n test(assert, '_Foo_Bar', '_FooBar', 'classify underscore-prefixed underscored string');\n test(assert, '_Foo-Bar', '_FooBar', 'classify underscore-prefixed dasherized string');\n test(assert, '_foo/_bar', '_Foo/_Bar', 'classify underscore-prefixed-namespaced underscore-prefixed string');\n test(assert, '-foo/_bar', '_Foo/_Bar', 'classify dash-prefixed-namespaced underscore-prefixed string');\n test(assert, '-foo/-bar', '_Foo/_Bar', 'classify dash-prefixed-namespaced dash-prefixed string');\n test(assert, 'InnerHTML', 'InnerHTML', 'does nothing with classified string');\n test(assert, '_FooBar', '_FooBar', 'does nothing with classified prefixed string');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/string/tests/dasherize_test', ['ember-babel', '@ember/-internals/environment', '@ember/string', 'internal-test-helpers'], function (_emberBabel, _environment, _string, _internalTestHelpers) {\n 'use strict';\n\n function test(assert, given, expected, description) {\n assert.deepEqual((0, _string.dasherize)(given), expected, description);\n if (_environment.ENV.EXTEND_PROTOTYPES.String) {\n assert.deepEqual(given.dasherize(), expected, description);\n }\n }\n\n (0, _internalTestHelpers.moduleFor)('EmberStringUtils.dasherize', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test String.prototype.dasherize is not modified without EXTEND_PROTOTYPES'] = function testStringPrototypeDasherizeIsNotModifiedWithoutEXTEND_PROTOTYPES(assert) {\n if (!_environment.ENV.EXTEND_PROTOTYPES.String) {\n assert.ok('undefined' === typeof String.prototype.dasherize, 'String.prototype helper disabled');\n } else {\n assert.expect(0);\n }\n };\n\n _class.prototype['@test String dasherize tests'] = function testStringDasherizeTests(assert) {\n test(assert, 'my favorite items', 'my-favorite-items', 'dasherize normal string');\n test(assert, 'css-class-name', 'css-class-name', 'does nothing with dasherized string');\n test(assert, 'action_name', 'action-name', 'dasherize underscored string');\n test(assert, 'innerHTML', 'inner-html', 'dasherize camelcased string');\n test(assert, 'toString', 'to-string', 'dasherize string that is the property name of Object.prototype');\n test(assert, 'PrivateDocs/OwnerInvoice', 'private-docs/owner-invoice', 'dasherize namespaced classified string');\n test(assert, 'privateDocs/ownerInvoice', 'private-docs/owner-invoice', 'dasherize namespaced camelized string');\n test(assert, 'private_docs/owner_invoice', 'private-docs/owner-invoice', 'dasherize namespaced underscored string');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/string/tests/decamelize_test', ['ember-babel', '@ember/-internals/environment', '@ember/string', 'internal-test-helpers'], function (_emberBabel, _environment, _string, _internalTestHelpers) {\n 'use strict';\n\n function test(assert, given, expected, description) {\n assert.deepEqual((0, _string.decamelize)(given), expected, description);\n if (_environment.ENV.EXTEND_PROTOTYPES.String) {\n assert.deepEqual(given.decamelize(), expected, description);\n }\n }\n\n (0, _internalTestHelpers.moduleFor)('EmberStringUtils.decamelize', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test String.prototype.decamelize is not modified without EXTEND_PROTOTYPES'] = function testStringPrototypeDecamelizeIsNotModifiedWithoutEXTEND_PROTOTYPES(assert) {\n if (!_environment.ENV.EXTEND_PROTOTYPES.String) {\n assert.ok('undefined' === typeof String.prototype.decamelize, 'String.prototype helper disabled');\n } else {\n assert.expect(0);\n }\n };\n\n _class.prototype['@test String decamelize tests'] = function testStringDecamelizeTests(assert) {\n test(assert, 'my favorite items', 'my favorite items', 'does nothing with normal string');\n test(assert, 'css-class-name', 'css-class-name', 'does nothing with dasherized string');\n test(assert, 'action_name', 'action_name', 'does nothing with underscored string');\n test(assert, 'innerHTML', 'inner_html', 'converts a camelized string into all lower case separated by underscores.');\n test(assert, 'size160Url', 'size160_url', 'decamelizes strings with numbers');\n test(assert, 'PrivateDocs/OwnerInvoice', 'private_docs/owner_invoice', 'decamelize namespaced classified string');\n test(assert, 'privateDocs/ownerInvoice', 'private_docs/owner_invoice', 'decamelize namespaced camelized string');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/string/tests/loc_test', ['ember-babel', '@ember/-internals/environment', '@ember/string', '@ember/string/lib/string_registry', 'internal-test-helpers'], function (_emberBabel, _environment, _string, _string_registry, _internalTestHelpers) {\n 'use strict';\n\n var oldString = void 0;\n\n function test(assert, given, args, expected, description) {\n assert.equal((0, _string.loc)(given, args), expected, description);\n if (_environment.ENV.EXTEND_PROTOTYPES.String) {\n assert.deepEqual(given.loc.apply(given, args), expected, description);\n }\n }\n\n (0, _internalTestHelpers.moduleFor)('EmberStringUtils.loc', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function beforeEach() {\n oldString = (0, _string_registry.getStrings)();\n (0, _string_registry.setStrings)({\n '_Hello World': 'Bonjour le monde',\n '_Hello %@': 'Bonjour %@',\n '_Hello %@ %@': 'Bonjour %@ %@',\n '_Hello %@# %@#': 'Bonjour %@2 %@1'\n });\n };\n\n _class.prototype.afterEach = function afterEach() {\n (0, _string_registry.setStrings)(oldString);\n };\n\n _class.prototype['@test String.prototype.loc is not available without EXTEND_PROTOTYPES'] = function testStringPrototypeLocIsNotAvailableWithoutEXTEND_PROTOTYPES(assert) {\n if (!_environment.ENV.EXTEND_PROTOTYPES.String) {\n assert.ok('undefined' === typeof String.prototype.loc, 'String.prototype helper disabled');\n } else {\n assert.expect(0);\n }\n };\n\n _class.prototype['@test String loc tests'] = function testStringLocTests(assert) {\n test(assert, '_Hello World', [], 'Bonjour le monde', 'loc(\\'_Hello World\\') => \\'Bonjour le monde\\'');\n test(assert, '_Hello %@ %@', ['John', 'Doe'], 'Bonjour John Doe', 'loc(\\'_Hello %@ %@\\', [\\'John\\', \\'Doe\\']) => \\'Bonjour John Doe\\'');\n test(assert, '_Hello %@# %@#', ['John', 'Doe'], 'Bonjour Doe John', 'loc(\\'_Hello %@# %@#\\', [\\'John\\', \\'Doe\\']) => \\'Bonjour Doe John\\'');\n test(assert, '_Not In Strings', [], '_Not In Strings', 'loc(\\'_Not In Strings\\') => \\'_Not In Strings\\'');\n };\n\n _class.prototype['@test works with argument form'] = function testWorksWithArgumentForm(assert) {\n assert.equal((0, _string.loc)('_Hello %@', 'John'), 'Bonjour John');\n assert.equal((0, _string.loc)('_Hello %@ %@', ['John'], 'Doe'), 'Bonjour John Doe');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/string/tests/underscore_test', ['ember-babel', '@ember/-internals/environment', '@ember/string', 'internal-test-helpers'], function (_emberBabel, _environment, _string, _internalTestHelpers) {\n 'use strict';\n\n function test(assert, given, expected, description) {\n assert.deepEqual((0, _string.underscore)(given), expected, description);\n if (_environment.ENV.EXTEND_PROTOTYPES.String) {\n assert.deepEqual(given.underscore(), expected, description);\n }\n }\n\n (0, _internalTestHelpers.moduleFor)('EmberStringUtils.underscore', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test String.prototype.underscore is not available without EXTEND_PROTOTYPES'] = function testStringPrototypeUnderscoreIsNotAvailableWithoutEXTEND_PROTOTYPES(assert) {\n if (!_environment.ENV.EXTEND_PROTOTYPES.String) {\n assert.ok('undefined' === typeof String.prototype.underscore, 'String.prototype helper disabled');\n } else {\n assert.expect(0);\n }\n };\n\n _class.prototype['@test String underscore tests'] = function testStringUnderscoreTests(assert) {\n test(assert, 'my favorite items', 'my_favorite_items', 'with normal string');\n test(assert, 'css-class-name', 'css_class_name', 'with dasherized string');\n test(assert, 'action_name', 'action_name', 'does nothing with underscored string');\n test(assert, 'innerHTML', 'inner_html', 'with camelcased string');\n test(assert, 'PrivateDocs/OwnerInvoice', 'private_docs/owner_invoice', 'underscore namespaced classified string');\n test(assert, 'privateDocs/ownerInvoice', 'private_docs/owner_invoice', 'underscore namespaced camelized string');\n test(assert, 'private-docs/owner-invoice', 'private_docs/owner_invoice', 'underscore namespaced dasherized string');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('@ember/string/tests/w_test', ['ember-babel', '@ember/-internals/environment', '@ember/string', 'internal-test-helpers'], function (_emberBabel, _environment, _string, _internalTestHelpers) {\n 'use strict';\n\n function test(assert, given, expected, description) {\n assert.deepEqual((0, _string.w)(given), expected, description);\n if (_environment.ENV.EXTEND_PROTOTYPES.String) {\n assert.deepEqual(given.w(), expected, description);\n }\n }\n\n (0, _internalTestHelpers.moduleFor)('EmberStringUtils.w', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test String.prototype.w is not available without EXTEND_PROTOTYPES'] = function testStringPrototypeWIsNotAvailableWithoutEXTEND_PROTOTYPES(assert) {\n if (!_environment.ENV.EXTEND_PROTOTYPES.String) {\n assert.ok('undefined' === typeof String.prototype.w, 'String.prototype helper disabled');\n } else {\n assert.expect(0);\n }\n };\n\n _class.prototype['@test String w tests'] = function testStringWTests(assert) {\n test(assert, 'one two three', ['one', 'two', 'three'], 'w(\\'one two three\\') => [\\'one\\',\\'two\\',\\'three\\']');\n test(assert, 'one two three', ['one', 'two', 'three'], 'w(\\'one two three\\') with extra spaces between words => [\\'one\\',\\'two\\',\\'three\\']');\n test(assert, 'one\\ttwo three', ['one', 'two', 'three'], 'w(\\'one two three\\') with tabs');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/plugins/assert-if-helper-without-arguments-test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: assert-if-helper-without-argument', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test block if helper expects one argument'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{#if}}aVal{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '#if requires a single argument. (\\'baz/foo-bar\\' @ L1:C0) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if val1 val2}}aVal{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '#if requires a single argument. (\\'baz/foo-bar\\' @ L1:C0) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if}}aVal{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '#if requires a single argument. (\\'baz/foo-bar\\' @ L1:C0) ');\n };\n\n _class.prototype['@test inline if helper expects between one and three arguments'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, 'The inline form of the \\'if\\' helper expects two or three arguments. (\\'baz/foo-bar\\' @ L1:C0) ');\n\n (0, _index.compile)('{{if foo bar baz}}', {\n moduleName: 'baz/foo-bar'\n });\n };\n\n _class.prototype['@test subexpression if helper expects between one and three arguments'] = function testSubexpressionIfHelperExpectsBetweenOneAndThreeArguments() {\n expectAssertion(function () {\n (0, _index.compile)('{{input foo=(if)}}', {\n moduleName: 'baz/foo-bar'\n });\n }, 'The inline form of the \\'if\\' helper expects two or three arguments. (\\'baz/foo-bar\\' @ L1:C12) ');\n\n (0, _index.compile)('{{some-thing foo=(if foo bar baz)}}', {\n moduleName: 'baz/foo-bar'\n });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/plugins/assert-input-helper-without-block-test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: assert-input-helper-without-block', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Using {{#input}}{{/input}} is not valid'] = function testUsingInputInputIsNotValid() {\n var expectedMessage = 'The {{input}} helper cannot be used in block form. (\\'baz/foo-bar\\' @ L1:C0) ';\n\n expectAssertion(function () {\n (0, _index.compile)('{{#input value=\"123\"}}Completely invalid{{/input}}', {\n moduleName: 'baz/foo-bar'\n });\n }, expectedMessage);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/plugins/assert-local-variable-shadowing-helper-invocation-test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: assert-local-variable-shadowing-helper-invocation', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test block statements shadowing sub-expression invocations'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('\\n {{#let foo as |foo|}}\\n {{concat (foo)}}\\n {{/let}}', { moduleName: 'baz/foo-bar' });\n }, 'Cannot invoke the `foo` helper because it was shadowed by a local variable (i.e. a block param) with the same name. Please rename the local variable to resolve the conflict. (\\'baz/foo-bar\\' @ L3:C21) ');\n\n expectAssertion(function () {\n (0, _index.compile)('\\n {{#let foo as |foo|}}\\n {{concat (foo bar baz)}}\\n {{/let}}', { moduleName: 'baz/foo-bar' });\n }, 'Cannot invoke the `foo` helper because it was shadowed by a local variable (i.e. a block param) with the same name. Please rename the local variable to resolve the conflict. (\\'baz/foo-bar\\' @ L3:C21) ');\n\n // Not shadowed\n\n (0, _index.compile)('\\n {{#let foo as |foo|}}{{/let}}\\n {{concat (foo)}}\\n {{concat (foo bar baz)}}', { moduleName: 'baz/foo-bar' });\n\n // Not an invocation\n\n (0, _index.compile)('\\n {{#let foo as |foo|}}\\n {{concat foo}}\\n {{/let}}', { moduleName: 'baz/foo-bar' });\n };\n\n _class.prototype['@test element nodes shadowing sub-expression invocations'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('\\n \\n {{concat (foo)}}\\n ', { moduleName: 'baz/foo-bar' });\n }, 'Cannot invoke the `foo` helper because it was shadowed by a local variable (i.e. a block param) with the same name. Please rename the local variable to resolve the conflict. (\\'baz/foo-bar\\' @ L3:C21) ');\n\n expectAssertion(function () {\n (0, _index.compile)('\\n \\n {{concat (foo bar baz)}}\\n ', { moduleName: 'baz/foo-bar' });\n }, 'Cannot invoke the `foo` helper because it was shadowed by a local variable (i.e. a block param) with the same name. Please rename the local variable to resolve the conflict. (\\'baz/foo-bar\\' @ L3:C21) ');\n\n // Not shadowed\n\n (0, _index.compile)('\\n \\n {{concat (foo)}}\\n {{concat (foo bar baz)}}', { moduleName: 'baz/foo-bar' });\n\n // Not an invocation\n\n (0, _index.compile)('\\n \\n {{concat foo}}\\n ', { moduleName: 'baz/foo-bar' });\n };\n\n _class.prototype['@test deeply nested sub-expression invocations'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('\\n {{#let foo as |foo|}}\\n \\n {{#each items as |baz|}}\\n {{concat (foo)}}\\n {{/each}}\\n \\n {{/let}}', { moduleName: 'baz/foo-bar' });\n }, 'Cannot invoke the `foo` helper because it was shadowed by a local variable (i.e. a block param) with the same name. Please rename the local variable to resolve the conflict. (\\'baz/foo-bar\\' @ L5:C25) ');\n\n expectAssertion(function () {\n (0, _index.compile)('\\n {{#let foo as |foo|}}\\n \\n {{#each items as |baz|}}\\n {{concat (foo bar baz)}}\\n {{/each}}\\n \\n {{/let}}', { moduleName: 'baz/foo-bar' });\n }, 'Cannot invoke the `foo` helper because it was shadowed by a local variable (i.e. a block param) with the same name. Please rename the local variable to resolve the conflict. (\\'baz/foo-bar\\' @ L5:C25) ');\n\n // Not shadowed\n\n (0, _index.compile)('\\n {{#let foo as |foo|}}\\n \\n {{#each items as |baz|}}\\n {{/each}}\\n {{concat (baz)}}\\n {{concat (baz bat)}}\\n \\n {{concat (bar)}}\\n {{concat (bar baz bat)}}\\n {{/let}}\\n {{concat (foo)}}\\n {{concat (foo bar baz bat)}}', { moduleName: 'baz/foo-bar' });\n\n // Not an invocation\n\n (0, _index.compile)('\\n {{#let foo as |foo|}}\\n \\n {{#each items as |baz|}}\\n {{concat foo}}\\n {{/each}}\\n \\n {{/let}}', { moduleName: 'baz/foo-bar' });\n };\n\n _class.prototype['@test block statements shadowing mustache invocations'] = function (assert) {\n // These are fine, because they should already be considered contextual\n // component invocations, not helper invocations\n assert.expect(0);\n\n (0, _index.compile)('\\n {{#let foo as |foo|}}\\n {{foo}}\\n {{/let}}', { moduleName: 'baz/foo-bar' });\n\n (0, _index.compile)('\\n {{#let foo as |foo|}}\\n {{foo bar baz}}\\n {{/let}}', { moduleName: 'baz/foo-bar' });\n };\n\n _class.prototype['@test element nodes shadowing mustache invocations'] = function (assert) {\n // These are fine, because they should already be considered contextual\n // component invocations, not helper invocations\n assert.expect(0);\n\n (0, _index.compile)('\\n \\n {{foo}}\\n ', { moduleName: 'baz/foo-bar' });\n\n (0, _index.compile)('\\n \\n {{foo bar baz}}\\n ', { moduleName: 'baz/foo-bar' });\n };\n\n _class.prototype['@test deeply nested mustache invocations'] = function (assert) {\n // These are fine, because they should already be considered contextual\n // component invocations, not helper invocations\n assert.expect(0);\n\n (0, _index.compile)('\\n {{#let foo as |foo|}}\\n \\n {{#each items as |baz|}}\\n {{foo}}\\n {{/each}}\\n \\n {{/let}}', { moduleName: 'baz/foo-bar' });\n\n (0, _index.compile)('\\n {{#let foo as |foo|}}\\n \\n {{#each items as |baz|}}\\n {{foo bar baz}}\\n {{/each}}\\n \\n {{/let}}', { moduleName: 'baz/foo-bar' });\n };\n\n _class.prototype['@test block statements shadowing modifier invocations'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('\\n {{#let foo as |foo|}}\\n
\\n {{/let}}', { moduleName: 'baz/foo-bar' });\n }, 'Cannot invoke the `foo` modifier because it was shadowed by a local variable (i.e. a block param) with the same name. Please rename the local variable to resolve the conflict. (\\'baz/foo-bar\\' @ L3:C17) ');\n\n expectAssertion(function () {\n (0, _index.compile)('\\n {{#let foo as |foo|}}\\n
\\n {{/let}}', { moduleName: 'baz/foo-bar' });\n }, 'Cannot invoke the `foo` modifier because it was shadowed by a local variable (i.e. a block param) with the same name. Please rename the local variable to resolve the conflict. (\\'baz/foo-bar\\' @ L3:C17) ');\n\n // Not shadowed\n\n (0, _index.compile)('\\n {{#let foo as |foo|}}{{/let}}\\n
\\n
', { moduleName: 'baz/foo-bar' });\n };\n\n _class.prototype['@test element nodes shadowing modifier invocations'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('\\n \\n
\\n ', { moduleName: 'baz/foo-bar' });\n }, 'Cannot invoke the `foo` modifier because it was shadowed by a local variable (i.e. a block param) with the same name. Please rename the local variable to resolve the conflict. (\\'baz/foo-bar\\' @ L3:C17) ');\n\n expectAssertion(function () {\n (0, _index.compile)('\\n \\n
\\n ', { moduleName: 'baz/foo-bar' });\n }, 'Cannot invoke the `foo` modifier because it was shadowed by a local variable (i.e. a block param) with the same name. Please rename the local variable to resolve the conflict. (\\'baz/foo-bar\\' @ L3:C17) ');\n\n // Not shadowed\n\n (0, _index.compile)('\\n \\n
\\n
', { moduleName: 'baz/foo-bar' });\n };\n\n _class.prototype['@test deeply nested modifier invocations'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('\\n {{#let foo as |foo|}}\\n \\n {{#each items as |baz|}}\\n
\\n {{/each}}\\n \\n {{/let}}', { moduleName: 'baz/foo-bar' });\n }, 'Cannot invoke the `foo` modifier because it was shadowed by a local variable (i.e. a block param) with the same name. Please rename the local variable to resolve the conflict. (\\'baz/foo-bar\\' @ L5:C21) ');\n\n expectAssertion(function () {\n (0, _index.compile)('\\n {{#let foo as |foo|}}\\n \\n {{#each items as |baz|}}\\n
\\n {{/each}}\\n \\n {{/let}}', { moduleName: 'baz/foo-bar' });\n }, 'Cannot invoke the `foo` modifier because it was shadowed by a local variable (i.e. a block param) with the same name. Please rename the local variable to resolve the conflict. (\\'baz/foo-bar\\' @ L5:C21) ');\n\n // Not shadowed\n\n (0, _index.compile)('\\n {{#let foo as |foo|}}\\n \\n {{#each items as |baz|}}\\n {{/each}}\\n
\\n
\\n \\n
\\n
\\n {{/let}}\\n
\\n
', { moduleName: 'baz/foo-bar' });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/plugins/assert-reserved-named-arguments-test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n if (true /* EMBER_GLIMMER_NAMED_ARGUMENTS */) {\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: assert-reserved-named-arguments (EMBER_GLIMMER_NAMED_ARGUMENTS) ', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test \\'@arguments\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@arguments}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@arguments\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @arguments}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@arguments\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @arguments \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@arguments\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@args\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@args}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@args\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @args}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@args\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @args \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@args\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@block\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@block}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@block\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @block}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@block\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @block \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@block\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@else\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@else}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@else\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @else}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@else\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @else \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@else\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n // anything else that doesn't start with a lower case letter\n\n\n _class.prototype['@test \\'@Arguments\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@Arguments}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Arguments\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @Arguments}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Arguments\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @Arguments \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Arguments\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@Args\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@Args}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Args\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @Args}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Args\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @Args \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Args\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@FOO\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@FOO}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@FOO\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @FOO}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@FOO\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @FOO \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@FOO\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@Foo\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@Foo}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Foo\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @Foo}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Foo\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @Foo \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Foo\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@.\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@.}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@.\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @.}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@.\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @. \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@.\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@_\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@_}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@_\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @_}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@_\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @_ \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@_\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@-\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@-}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@-\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @-}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@-\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @- \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@-\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@$\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@$}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@$\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @$}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@$\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @$ \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@$\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@\\' is de facto reserved (parse error)'] = function (assert) {\n assert.throws(function () {\n (0, _index.compile)('{{@}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{#if @}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{input type=(if @ \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n };\n\n _class.prototype['@test \\'@0\\' is de facto reserved (parse error)'] = function (assert) {\n assert.throws(function () {\n (0, _index.compile)('{{@0}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{#if @0}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{input type=(if @0 \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n };\n\n _class.prototype['@test \\'@1\\' is de facto reserved (parse error)'] = function (assert) {\n assert.throws(function () {\n (0, _index.compile)('{{@1}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{#if @1}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{input type=(if @1 \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n };\n\n _class.prototype['@test \\'@2\\' is de facto reserved (parse error)'] = function (assert) {\n assert.throws(function () {\n (0, _index.compile)('{{@2}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{#if @2}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{input type=(if @2 \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n };\n\n _class.prototype['@test \\'@@\\' is de facto reserved (parse error)'] = function (assert) {\n assert.throws(function () {\n (0, _index.compile)('{{@@}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{#if @@}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{input type=(if @@ \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n };\n\n _class.prototype['@test \\'@=\\' is de facto reserved (parse error)'] = function (assert) {\n assert.throws(function () {\n (0, _index.compile)('{{@=}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{#if @=}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{input type=(if @= \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n };\n\n _class.prototype['@test \\'@!\\' is de facto reserved (parse error)'] = function (assert) {\n assert.throws(function () {\n (0, _index.compile)('{{@!}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{#if @!}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{input type=(if @! \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n } else {\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: assert-reserved-named-arguments', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n _class2.prototype['@test Paths beginning with @ are not valid'] = function testPathsBeginningWithAreNotValid() {\n expectAssertion(function () {\n (0, _index.compile)('{{@foo}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@foo\\' is not a valid path. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @foo}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@foo\\' is not a valid path. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @foo \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@foo\\' is not a valid path. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n }\n});","enifed('ember-template-compiler/tests/plugins/assert-splattribute-expression-test', ['ember-babel', 'internal-test-helpers', 'ember-template-compiler/index'], function (_emberBabel, _internalTestHelpers, _index) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: assert-splattribute-expression', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.expectedMessage = function expectedMessage(locInfo) {\n return true /* EMBER_GLIMMER_ANGLE_BRACKET_INVOCATION */ ? 'Using \"...attributes\" can only be used in the element position e.g.
. It cannot be used as a path. (' + locInfo + ') ' : '...attributes is an invalid path (' + locInfo + ') ';\n };\n\n _class.prototype['@test ...attributes is in element space'] = function testAttributesIsInElementSpace(assert) {\n if (true /* EMBER_GLIMMER_ANGLE_BRACKET_INVOCATION */) {\n assert.expect(0);\n\n (0, _index.compile)('
Foo
');\n } else {\n expectAssertion(function () {\n (0, _index.compile)('
Foo
');\n }, this.expectedMessage('L1:C5'));\n }\n };\n\n _class.prototype['@test {{...attributes}} is not valid'] = function testAttributesIsNotValid() {\n expectAssertion(function () {\n (0, _index.compile)('
{{...attributes}}
', {\n moduleName: 'foo-bar'\n });\n }, this.expectedMessage('\\'foo-bar\\' @ L1:C7'));\n };\n\n _class.prototype['@test {{...attributes}} is not valid path expression'] = function testAttributesIsNotValidPathExpression() {\n expectAssertion(function () {\n (0, _index.compile)('
{{...attributes}}
', {\n moduleName: 'foo-bar'\n });\n }, this.expectedMessage('\\'foo-bar\\' @ L1:C7'));\n };\n\n _class.prototype['@test {{...attributes}} is not valid modifier'] = function testAttributesIsNotValidModifier() {\n expectAssertion(function () {\n (0, _index.compile)('
Wat
', {\n moduleName: 'foo-bar'\n });\n }, this.expectedMessage('\\'foo-bar\\' @ L1:C7'));\n };\n\n _class.prototype['@test {{...attributes}} is not valid attribute'] = function testAttributesIsNotValidAttribute() {\n expectAssertion(function () {\n (0, _index.compile)('
Wat
', {\n moduleName: 'foo-bar'\n });\n }, this.expectedMessage('\\'foo-bar\\' @ L1:C13'));\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/plugins/deprecate-send-action-test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n var EVENTS = ['insert-newline', 'enter', 'escape-press', 'focus-in', 'focus-out', 'key-press', 'key-up', 'key-down'];\n\n var DeprecateSendActionTest = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(DeprecateSendActionTest, _AbstractTestCase);\n\n function DeprecateSendActionTest() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n return DeprecateSendActionTest;\n }(_internalTestHelpers.AbstractTestCase);\n\n EVENTS.forEach(function (e) {\n DeprecateSendActionTest.prototype['@test Using `{{input ' + e + '=\"actionName\"}}` provides a deprecation'] = function () {\n var expectedMessage = 'Please refactor `{{input ' + e + '=\"foo-bar\"}}` to `{{input ' + e + '=(action \"foo-bar\")}}. (\\'baz/foo-bar\\' @ L1:C0) ';\n\n expectDeprecation(function () {\n (0, _index.compile)('{{input ' + e + '=\"foo-bar\"}}', { moduleName: 'baz/foo-bar' });\n }, expectedMessage);\n };\n });\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: deprecate-send-action', DeprecateSendActionTest);\n});","enifed('ember-template-compiler/tests/plugins/transform-component-invocation-test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: transforms component invocation', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Does not throw a compiler error for component invocations'] = function testDoesNotThrowACompilerErrorForComponentInvocations(assert) {\n assert.expect(0);\n\n ['{{this.modal open}}', '{{this.modal isOpen=true}}', '{{#this.modal}}Woot{{/this.modal}}', '{{@modal open}}', // RFC#311\n '{{@modal isOpen=true}}', // RFC#311\n '{{#@modal}}Woot{{/@modal}}', // RFC#311\n '{{c.modal open}}', '{{c.modal isOpen=true}}', '{{#c.modal}}Woot{{/c.modal}}', '{{#my-component as |c|}}{{c name=\"Chad\"}}{{/my-component}}', // RFC#311\n '{{#my-component as |c|}}{{c \"Chad\"}}{{/my-component}}', // RFC#311\n '{{#my-component as |c|}}{{#c}}{{/c}}{{/my-component}}', // RFC#311\n '', // GH#15740\n ''].forEach(function (layout, i) {\n (0, _index.compile)(layout, { moduleName: 'example-' + i });\n });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/plugins/transform-inline-link-to-test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: inline-link-to', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Can transform an inline {{link-to}} without error'] = function testCanTransformAnInlineLinkToWithoutError(assert) {\n assert.expect(0);\n\n (0, _index.compile)('{{link-to \\'foo\\' \\'index\\'}}', {\n moduleName: 'foo/bar/baz'\n });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/plugins/transform-input-type-syntax-test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: input type syntax', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Can compile an {{input}} helper that has a sub-expression value as its type'] = function testCanCompileAnInputHelperThatHasASubExpressionValueAsItsType(assert) {\n assert.expect(0);\n\n (0, _index.compile)('{{input type=(if true \\'password\\' \\'text\\')}}');\n };\n\n _class.prototype['@test Can compile an {{input}} helper with a string literal type'] = function testCanCompileAnInputHelperWithAStringLiteralType(assert) {\n assert.expect(0);\n\n (0, _index.compile)('{{input type=\\'text\\'}}');\n };\n\n _class.prototype['@test Can compile an {{input}} helper with a type stored in a var'] = function testCanCompileAnInputHelperWithATypeStoredInAVar(assert) {\n assert.expect(0);\n\n (0, _index.compile)('{{input type=_type}}');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/system/bootstrap-test', ['ember-babel', '@ember/runloop', '@ember/-internals/glimmer', 'ember-template-compiler/lib/system/bootstrap', 'internal-test-helpers'], function (_emberBabel, _runloop, _glimmer, _bootstrap, _internalTestHelpers) {\n 'use strict';\n\n var component = void 0,\n fixture = void 0;\n\n function checkTemplate(templateName, assert) {\n (0, _runloop.run)(function () {\n return (0, _bootstrap.default)({ context: fixture, hasTemplate: _glimmer.hasTemplate, setTemplate: _glimmer.setTemplate });\n });\n\n var template = (0, _glimmer.getTemplate)(templateName);\n var qunitFixture = document.querySelector('#qunit-fixture');\n\n assert.ok(template, 'template is available on Ember.TEMPLATES');\n assert.notOk(qunitFixture.querySelector('script'), 'script removed');\n\n var owner = (0, _internalTestHelpers.buildOwner)();\n owner.register('template:-top-level', template);\n owner.register('component:-top-level', _glimmer.Component.extend({\n layoutName: '-top-level',\n firstName: 'Tobias',\n drug: 'teamocil'\n }));\n\n component = owner.lookup('component:-top-level');\n (0, _internalTestHelpers.runAppend)(component);\n\n assert.equal(qunitFixture.textContent.trim(), 'Tobias takes teamocil', 'template works');\n (0, _internalTestHelpers.runDestroy)(owner);\n }\n\n (0, _internalTestHelpers.moduleFor)('ember-templates: bootstrap', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n fixture = document.getElementById('qunit-fixture');\n return _this;\n }\n\n _class.prototype.teardown = function teardown() {\n (0, _glimmer.setTemplates)({});\n fixture = component = null;\n };\n\n _class.prototype['@test template with data-template-name should add a new template to Ember.TEMPLATES'] = function testTemplateWithDataTemplateNameShouldAddANewTemplateToEmberTEMPLATES(assert) {\n fixture.innerHTML = '';\n\n checkTemplate('funkyTemplate', assert);\n };\n\n _class.prototype['@test template with id instead of data-template-name should add a new template to Ember.TEMPLATES'] = function testTemplateWithIdInsteadOfDataTemplateNameShouldAddANewTemplateToEmberTEMPLATES(assert) {\n fixture.innerHTML = '';\n\n checkTemplate('funkyTemplate', assert);\n };\n\n _class.prototype['@test template without data-template-name or id should default to application'] = function testTemplateWithoutDataTemplateNameOrIdShouldDefaultToApplication(assert) {\n fixture.innerHTML = '';\n\n checkTemplate('application', assert);\n };\n\n // Add this test case, only for typeof Handlebars === 'object';\n\n\n _class.prototype[(typeof Handlebars === 'object' ? '@test' : '@skip') + ' template with type text/x-raw-handlebars should be parsed'] = function (assert) {\n fixture.innerHTML = '';\n\n (0, _runloop.run)(function () {\n return (0, _bootstrap.default)({ context: fixture, hasTemplate: _glimmer.hasTemplate, setTemplate: _glimmer.setTemplate });\n });\n\n var template = (0, _glimmer.getTemplate)('funkyTemplate');\n\n assert.ok(template, 'template with name funkyTemplate available');\n\n // This won't even work with Ember templates\n assert.equal(template({ name: 'Tobias' }).trim(), 'Tobias');\n };\n\n _class.prototype['@test duplicated default application templates should throw exception'] = function testDuplicatedDefaultApplicationTemplatesShouldThrowException(assert) {\n fixture.innerHTML = '';\n\n assert.throws(function () {\n return (0, _bootstrap.default)({ context: fixture, hasTemplate: _glimmer.hasTemplate, setTemplate: _glimmer.setTemplate });\n }, /Template named \"[^\"]+\" already exists\\./, 'duplicate templates should not be allowed');\n };\n\n _class.prototype['@test default default application template and id application template present should throw exception'] = function testDefaultDefaultApplicationTemplateAndIdApplicationTemplatePresentShouldThrowException(assert) {\n fixture.innerHTML = '';\n\n assert.throws(function () {\n return (0, _bootstrap.default)({ context: fixture, hasTemplate: _glimmer.hasTemplate, setTemplate: _glimmer.setTemplate });\n }, /Template named \"[^\"]+\" already exists\\./, 'duplicate templates should not be allowed');\n };\n\n _class.prototype['@test default application template and data-template-name application template present should throw exception'] = function testDefaultApplicationTemplateAndDataTemplateNameApplicationTemplatePresentShouldThrowException(assert) {\n fixture.innerHTML = '';\n\n assert.throws(function () {\n return (0, _bootstrap.default)({ context: fixture, hasTemplate: _glimmer.hasTemplate, setTemplate: _glimmer.setTemplate });\n }, /Template named \"[^\"]+\" already exists\\./, 'duplicate templates should not be allowed');\n };\n\n _class.prototype['@test duplicated template id should throw exception'] = function testDuplicatedTemplateIdShouldThrowException(assert) {\n fixture.innerHTML = '';\n\n assert.throws(function () {\n return (0, _bootstrap.default)({ context: fixture, hasTemplate: _glimmer.hasTemplate, setTemplate: _glimmer.setTemplate });\n }, /Template named \"[^\"]+\" already exists\\./, 'duplicate templates should not be allowed');\n };\n\n _class.prototype['@test duplicated template data-template-name should throw exception'] = function testDuplicatedTemplateDataTemplateNameShouldThrowException(assert) {\n fixture.innerHTML = '';\n\n assert.throws(function () {\n return (0, _bootstrap.default)({ context: fixture, hasTemplate: _glimmer.hasTemplate, setTemplate: _glimmer.setTemplate });\n }, /Template named \"[^\"]+\" already exists\\./, 'duplicate templates should not be allowed');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/system/compile_options_test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: default compile options', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test default options are a new copy'] = function testDefaultOptionsAreANewCopy(assert) {\n assert.notEqual((0, _index.compileOptions)(), (0, _index.compileOptions)());\n };\n\n _class.prototype['@test has default AST plugins'] = function testHasDefaultASTPlugins(assert) {\n assert.expect(_index.defaultPlugins.length);\n\n var plugins = (0, _index.compileOptions)().plugins.ast;\n\n for (var i = 0; i < _index.defaultPlugins.length; i++) {\n var plugin = _index.defaultPlugins[i];\n assert.ok(plugins.indexOf(plugin) > -1, 'includes ' + plugin);\n }\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n var customTransformCounter = 0;\n\n var CustomTransform = function () {\n function CustomTransform(options) {\n\n customTransformCounter++;\n this.options = options;\n this.syntax = null;\n }\n\n CustomTransform.prototype.transform = function transform(ast) {\n var walker = new this.syntax.Walker();\n\n walker.visit(ast, function (node) {\n if (node.type !== 'ElementNode') {\n return;\n }\n\n for (var i = 0; i < node.attributes.length; i++) {\n var attribute = node.attributes[i];\n\n if (attribute.name === 'data-test') {\n node.attributes.splice(i, 1);\n }\n }\n });\n\n return ast;\n };\n\n return CustomTransform;\n }();\n\n var CustomPluginsTests = function (_RenderingTestCase) {\n (0, _emberBabel.inherits)(CustomPluginsTests, _RenderingTestCase);\n\n function CustomPluginsTests() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTestCase.apply(this, arguments));\n }\n\n CustomPluginsTests.prototype.afterEach = function afterEach() {\n customTransformCounter = 0;\n return _RenderingTestCase.prototype.afterEach.call(this);\n };\n\n CustomPluginsTests.prototype['@test custom plugins can be used'] = function testCustomPluginsCanBeUsed() {\n this.render('
');\n this.assertElement(this.firstChild, {\n tagName: 'div',\n attrs: { class: 'hahaha', 'data-blah': 'derp' },\n content: ''\n });\n };\n\n CustomPluginsTests.prototype['@test wrapped plugins are only invoked once per template'] = function testWrappedPluginsAreOnlyInvokedOncePerTemplate(assert) {\n this.render('
{{#if falsey}}nope{{/if}}
');\n assert.equal(customTransformCounter, 1, 'transform should only be instantiated once');\n };\n\n return CustomPluginsTests;\n }(_internalTestHelpers.RenderingTestCase);\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: registerPlugin with a custom plugins', function (_CustomPluginsTests) {\n (0, _emberBabel.inherits)(_class2, _CustomPluginsTests);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _CustomPluginsTests.apply(this, arguments));\n }\n\n _class2.prototype.beforeEach = function beforeEach() {\n (0, _index.registerPlugin)('ast', CustomTransform);\n };\n\n _class2.prototype.afterEach = function afterEach() {\n (0, _index.unregisterPlugin)('ast', CustomTransform);\n return _CustomPluginsTests.prototype.afterEach.call(this);\n };\n\n _class2.prototype['@test custom registered plugins are deduplicated'] = function testCustomRegisteredPluginsAreDeduplicated(assert) {\n (0, _index.registerPlugin)('ast', CustomTransform);\n this.registerTemplate('application', '
');\n assert.equal(customTransformCounter, 1, 'transform should only be instantiated once');\n };\n\n return _class2;\n }(CustomPluginsTests));\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: custom plugins passed to compile', function (_RenderingTestCase2) {\n (0, _emberBabel.inherits)(_class3, _RenderingTestCase2);\n\n function _class3() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTestCase2.apply(this, arguments));\n }\n\n // override so that we can provide custom AST plugins to compile\n _class3.prototype.compile = function compile(templateString) {\n return (0, _index.compile)(templateString, {\n plugins: {\n ast: [CustomTransform]\n }\n });\n };\n\n return _class3;\n }(_internalTestHelpers.RenderingTestCase));\n});","enifed('ember-template-compiler/tests/system/dasherize-component-name-test', ['ember-babel', 'ember-template-compiler/lib/system/dasherize-component-name', 'internal-test-helpers'], function (_emberBabel, _dasherizeComponentName, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('dasherize-component-name', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test names are correctly dasherized'] = function testNamesAreCorrectlyDasherized(assert) {\n assert.equal(_dasherizeComponentName.default.get('Foo'), 'foo');\n assert.equal(_dasherizeComponentName.default.get('foo-bar'), 'foo-bar');\n assert.equal(_dasherizeComponentName.default.get('FooBar'), 'foo-bar');\n assert.equal(_dasherizeComponentName.default.get('XBlah'), 'x-blah');\n assert.equal(_dasherizeComponentName.default.get('X-Blah'), 'x-blah');\n assert.equal(_dasherizeComponentName.default.get('Foo::BarBaz'), 'foo::bar-baz');\n assert.equal(_dasherizeComponentName.default.get('Foo::Bar-Baz'), 'foo::bar-baz');\n assert.equal(_dasherizeComponentName.default.get('Foo@BarBaz'), 'foo@bar-baz');\n assert.equal(_dasherizeComponentName.default.get('Foo@Bar-Baz'), 'foo@bar-baz');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-testing/tests/acceptance_test', ['ember-babel', 'internal-test-helpers', '@ember/runloop', 'ember-testing/lib/test', 'ember-testing/lib/adapters/qunit', '@ember/-internals/routing', '@ember/-internals/runtime', '@ember/-internals/views', '@ember/debug'], function (_emberBabel, _internalTestHelpers, _runloop, _test, _qunit, _routing, _runtime, _views, _debug) {\n 'use strict';\n\n var originalDebug = (0, _debug.getDebugFunction)('debug');\n\n var originalConsoleError = console.error; // eslint-disable-line no-console\n var testContext = void 0;\n\n if (!_views.jQueryDisabled) {\n (0, _internalTestHelpers.moduleFor)('ember-testing Acceptance', function (_AutobootApplicationT) {\n (0, _emberBabel.inherits)(_class, _AutobootApplicationT);\n\n function _class() {\n\n (0, _debug.setDebugFunction)('debug', function () {});\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AutobootApplicationT.call(this));\n\n _this._originalAdapter = _test.default.adapter;\n\n testContext = _this;\n\n _this.runTask(function () {\n _this.createApplication();\n _this.router.map(function () {\n this.route('posts');\n this.route('comments');\n\n this.route('abort_transition');\n\n this.route('redirect');\n });\n\n _this.indexHitCount = 0;\n _this.currentRoute = 'index';\n\n _this.add('route:index', _routing.Route.extend({\n model: function () {\n testContext.indexHitCount += 1;\n }\n }));\n\n _this.add('route:posts', _routing.Route.extend({\n renderTemplate: function () {\n testContext.currentRoute = 'posts';\n this._super.apply(this, arguments);\n }\n }));\n\n _this.addTemplate('posts', '\\n
\\n \\n
\\n {{#link-to \\'comments\\'}}Comments{{/link-to}}\\n
\\n
\\n ');\n\n _this.add('route:comments', _routing.Route.extend({\n renderTemplate: function () {\n testContext.currentRoute = 'comments';\n this._super.apply(this, arguments);\n }\n }));\n\n _this.addTemplate('comments', '
{{input type=\"text\"}}
');\n\n _this.add('route:abort_transition', _routing.Route.extend({\n beforeModel: function (transition) {\n transition.abort();\n }\n }));\n\n _this.add('route:redirect', _routing.Route.extend({\n beforeModel: function () {\n this.transitionTo('comments');\n }\n }));\n\n _this.application.setupForTesting();\n\n _test.default.registerAsyncHelper('slowHelper', function () {\n return new _runtime.RSVP.Promise(function (resolve) {\n return (0, _runloop.later)(resolve, 10);\n });\n });\n\n _this.application.injectTestHelpers();\n });\n return _this;\n }\n\n _class.prototype.afterEach = function afterEach() {\n console.error = originalConsoleError; // eslint-disable-line no-console\n _AutobootApplicationT.prototype.afterEach.call(this);\n };\n\n _class.prototype.teardown = function teardown() {\n (0, _debug.setDebugFunction)('debug', originalDebug);\n _test.default.adapter = this._originalAdapter;\n _test.default.unregisterHelper('slowHelper');\n window.slowHelper = undefined;\n testContext = undefined;\n _AutobootApplicationT.prototype.teardown.call(this);\n };\n\n _class.prototype['@test helpers can be chained with then'] = function (assert) {\n var _this2 = this;\n\n assert.expect(6);\n\n window.visit('/posts').then(function () {\n assert.equal(_this2.currentRoute, 'posts', 'Successfully visited posts route');\n assert.equal(window.currentURL(), '/posts', 'posts URL is correct');\n return window.click('a:contains(\"Comments\")');\n }).then(function () {\n assert.equal(_this2.currentRoute, 'comments', 'visit chained with click');\n return window.fillIn('.ember-text-field', 'yeah');\n }).then(function () {\n assert.equal(document.querySelector('.ember-text-field').value, 'yeah', 'chained with fillIn');\n return window.fillIn('.ember-text-field', '#qunit-fixture', 'context working');\n }).then(function () {\n assert.equal(document.querySelector('.ember-text-field').value, 'context working', 'chained with fillIn');\n return window.click('.does-not-exist');\n }).catch(function (e) {\n assert.equal(e.message, 'Element .does-not-exist not found.', 'Non-existent click exception caught');\n });\n };\n\n _class.prototype['@test helpers can be chained to each other (legacy)'] = function (assert) {\n var _this3 = this;\n\n assert.expect(7);\n\n window.visit('/posts').click('a:first', '#comments-link').fillIn('.ember-text-field', 'hello').then(function () {\n assert.equal(_this3.currentRoute, 'comments', 'Successfully visited comments route');\n assert.equal(window.currentURL(), '/comments', 'Comments URL is correct');\n assert.equal(document.querySelector('.ember-text-field').value, 'hello', 'Fillin successfully works');\n window.find('.ember-text-field').one('keypress', function (e) {\n assert.equal(e.keyCode, 13, 'keyevent chained with correct keyCode.');\n assert.equal(e.which, 13, 'keyevent chained with correct which.');\n });\n }).keyEvent('.ember-text-field', 'keypress', 13).visit('/posts').then(function () {\n assert.equal(_this3.currentRoute, 'posts', 'Thens can also be chained to helpers');\n assert.equal(window.currentURL(), '/posts', 'URL is set correct on chained helpers');\n });\n };\n\n _class.prototype['@test helpers don\\'t need to be chained'] = function (assert) {\n var _this4 = this;\n\n assert.expect(5);\n\n window.visit('/posts');\n\n window.click('a:first', '#comments-link');\n\n window.fillIn('.ember-text-field', 'hello');\n\n window.andThen(function () {\n assert.equal(_this4.currentRoute, 'comments', 'Successfully visited comments route');\n assert.equal(window.currentURL(), '/comments', 'Comments URL is correct');\n assert.equal(window.find('.ember-text-field').val(), 'hello', 'Fillin successfully works');\n });\n\n window.visit('/posts');\n\n window.andThen(function () {\n assert.equal(_this4.currentRoute, 'posts');\n assert.equal(window.currentURL(), '/posts');\n });\n };\n\n _class.prototype['@test Nested async helpers'] = function (assert) {\n var _this5 = this;\n\n assert.expect(5);\n\n window.visit('/posts');\n\n window.andThen(function () {\n window.click('a:first', '#comments-link');\n window.fillIn('.ember-text-field', 'hello');\n });\n\n window.andThen(function () {\n assert.equal(_this5.currentRoute, 'comments', 'Successfully visited comments route');\n assert.equal(window.currentURL(), '/comments', 'Comments URL is correct');\n assert.equal(window.find('.ember-text-field').val(), 'hello', 'Fillin successfully works');\n });\n\n window.visit('/posts');\n\n window.andThen(function () {\n assert.equal(_this5.currentRoute, 'posts');\n assert.equal(window.currentURL(), '/posts');\n });\n };\n\n _class.prototype['@test Multiple nested async helpers'] = function (assert) {\n var _this6 = this;\n\n assert.expect(3);\n\n window.visit('/posts');\n\n window.andThen(function () {\n window.click('a:first', '#comments-link');\n\n window.fillIn('.ember-text-field', 'hello');\n window.fillIn('.ember-text-field', 'goodbye');\n });\n\n window.andThen(function () {\n assert.equal(window.find('.ember-text-field').val(), 'goodbye', 'Fillin successfully works');\n assert.equal(_this6.currentRoute, 'comments', 'Successfully visited comments route');\n assert.equal(window.currentURL(), '/comments', 'Comments URL is correct');\n });\n };\n\n _class.prototype['@test Helpers nested in thens'] = function (assert) {\n var _this7 = this;\n\n assert.expect(5);\n\n window.visit('/posts').then(function () {\n window.click('a:first', '#comments-link');\n });\n\n window.andThen(function () {\n window.fillIn('.ember-text-field', 'hello');\n });\n\n window.andThen(function () {\n assert.equal(_this7.currentRoute, 'comments', 'Successfully visited comments route');\n assert.equal(window.currentURL(), '/comments', 'Comments URL is correct');\n assert.equal(window.find('.ember-text-field').val(), 'hello', 'Fillin successfully works');\n });\n\n window.visit('/posts');\n\n window.andThen(function () {\n assert.equal(_this7.currentRoute, 'posts');\n assert.equal(window.currentURL(), '/posts', 'Posts URL is correct');\n });\n };\n\n _class.prototype['@test Aborted transitions are not logged via Ember.Test.adapter#exception'] = function (assert) {\n assert.expect(0);\n\n _test.default.adapter = _qunit.default.create({\n exception: function () {\n assert.ok(false, 'aborted transitions are not logged');\n }\n });\n\n window.visit('/abort_transition');\n };\n\n _class.prototype['@test Unhandled exceptions are logged via Ember.Test.adapter#exception'] = function (assert) {\n assert.expect(2);\n\n console.error = function () {}; // eslint-disable-line no-console\n var asyncHandled = void 0;\n _test.default.adapter = _qunit.default.create({\n exception: function (error) {\n assert.equal(error.message, 'Element .does-not-exist not found.', 'Exception successfully caught and passed to Ember.Test.adapter.exception');\n // handle the rejection so it doesn't leak later.\n asyncHandled.catch(function () {});\n }\n });\n\n window.visit('/posts');\n\n window.click('.invalid-element').catch(function (error) {\n assert.equal(error.message, 'Element .invalid-element not found.', 'Exception successfully handled in the rejection handler');\n });\n\n asyncHandled = window.click('.does-not-exist');\n };\n\n _class.prototype['@test Unhandled exceptions in \\'andThen\\' are logged via Ember.Test.adapter#exception'] = function (assert) {\n assert.expect(1);\n\n console.error = function () {}; // eslint-disable-line no-console\n _test.default.adapter = _qunit.default.create({\n exception: function (error) {\n assert.equal(error.message, 'Catch me', 'Exception successfully caught and passed to Ember.Test.adapter.exception');\n }\n });\n\n window.visit('/posts');\n\n window.andThen(function () {\n throw new Error('Catch me');\n });\n };\n\n _class.prototype['@test should not start routing on the root URL when visiting another'] = function (assert) {\n var _this8 = this;\n\n assert.expect(4);\n\n window.visit('/posts');\n\n window.andThen(function () {\n assert.ok(window.find('#comments-link'), 'found comments-link');\n assert.equal(_this8.currentRoute, 'posts', 'Successfully visited posts route');\n assert.equal(window.currentURL(), '/posts', 'Posts URL is correct');\n assert.equal(_this8.indexHitCount, 0, 'should not hit index route when visiting another route');\n });\n };\n\n _class.prototype['@test only enters the index route once when visiting '] = function (assert) {\n var _this9 = this;\n\n assert.expect(1);\n\n window.visit('/');\n\n window.andThen(function () {\n assert.equal(_this9.indexHitCount, 1, 'should hit index once when visiting /');\n });\n };\n\n _class.prototype['@test test must not finish while asyncHelpers are pending'] = function (assert) {\n assert.expect(2);\n\n var async = 0;\n var innerRan = false;\n\n _test.default.adapter = _qunit.default.extend({\n asyncStart: function () {\n async++;\n this._super();\n },\n asyncEnd: function () {\n async--;\n this._super();\n }\n }).create();\n\n this.application.testHelpers.slowHelper();\n\n window.andThen(function () {\n innerRan = true;\n });\n\n assert.equal(innerRan, false, 'should not have run yet');\n assert.ok(async > 0, 'should have told the adapter to pause');\n\n if (async === 0) {\n // If we failed the test, prevent zalgo from escaping and breaking\n // our other tests.\n _test.default.adapter.asyncStart();\n _test.default.resolve().then(function () {\n _test.default.adapter.asyncEnd();\n });\n }\n };\n\n _class.prototype['@test visiting a URL that causes another transition should yield the correct URL'] = function (assert) {\n assert.expect(1);\n\n window.visit('/redirect');\n\n window.andThen(function () {\n assert.equal(window.currentURL(), '/comments', 'Redirected to Comments URL');\n });\n };\n\n _class.prototype['@test visiting a URL and then visiting a second URL with a transition should yield the correct URL'] = function (assert) {\n assert.expect(2);\n\n window.visit('/posts');\n\n window.andThen(function () {\n assert.equal(window.currentURL(), '/posts', 'First visited URL is correct');\n });\n\n window.visit('/redirect');\n\n window.andThen(function () {\n assert.equal(window.currentURL(), '/comments', 'Redirected to Comments URL');\n });\n };\n\n return _class;\n }(_internalTestHelpers.AutobootApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('ember-testing Acceptance - teardown', function (_AutobootApplicationT2) {\n (0, _emberBabel.inherits)(_class2, _AutobootApplicationT2);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AutobootApplicationT2.apply(this, arguments));\n }\n\n _class2.prototype['@test that the setup/teardown happens correctly'] = function (assert) {\n var _this11 = this;\n\n assert.expect(2);\n\n this.runTask(function () {\n _this11.createApplication();\n });\n this.application.injectTestHelpers();\n\n assert.ok(typeof _test.default.Promise.prototype.click === 'function');\n\n this.runTask(function () {\n _this11.application.destroy();\n });\n\n assert.equal(_test.default.Promise.prototype.click, undefined);\n };\n\n return _class2;\n }(_internalTestHelpers.AutobootApplicationTestCase));\n }\n});","enifed('ember-testing/tests/adapters/adapter_test', ['ember-babel', '@ember/runloop', 'ember-testing/lib/adapters/adapter', 'internal-test-helpers'], function (_emberBabel, _runloop, _adapter, _internalTestHelpers) {\n 'use strict';\n\n var adapter;\n\n (0, _internalTestHelpers.moduleFor)('ember-testing Adapter', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n adapter = _adapter.default.create();\n return _this;\n }\n\n _class.prototype.teardown = function teardown() {\n (0, _runloop.run)(adapter, adapter.destroy);\n };\n\n _class.prototype['@test exception throws'] = function testExceptionThrows(assert) {\n var error = 'Hai';\n var thrown;\n\n try {\n adapter.exception(error);\n } catch (e) {\n thrown = e;\n }\n assert.equal(thrown, error);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-testing/tests/adapters/qunit_test', ['ember-babel', '@ember/runloop', 'ember-testing/lib/adapters/qunit', 'internal-test-helpers'], function (_emberBabel, _runloop, _qunit, _internalTestHelpers) {\n 'use strict';\n\n var adapter;\n\n (0, _internalTestHelpers.moduleFor)('ember-testing QUnitAdapter: QUnit 2.x', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n _this.originalStart = QUnit.start;\n _this.originalStop = QUnit.stop;\n\n delete QUnit.start;\n delete QUnit.stop;\n\n adapter = _qunit.default.create();\n return _this;\n }\n\n _class.prototype.teardown = function teardown() {\n (0, _runloop.run)(adapter, adapter.destroy);\n\n QUnit.start = this.originalStart;\n QUnit.stop = this.originalStop;\n };\n\n _class.prototype['@test asyncStart waits for asyncEnd to finish a test'] = function testAsyncStartWaitsForAsyncEndToFinishATest(assert) {\n adapter.asyncStart();\n\n setTimeout(function () {\n assert.ok(true);\n adapter.asyncEnd();\n }, 50);\n };\n\n _class.prototype['@test asyncStart waits for equal numbers of asyncEnd to finish a test'] = function testAsyncStartWaitsForEqualNumbersOfAsyncEndToFinishATest(assert) {\n var adapter = _qunit.default.create();\n\n adapter.asyncStart();\n adapter.asyncStart();\n adapter.asyncEnd();\n\n setTimeout(function () {\n assert.ok(true);\n adapter.asyncEnd();\n }, 50);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-testing/tests/adapters_test', ['ember-babel', '@ember/runloop', '@ember/-internals/error-handling', 'ember-testing/lib/test', 'ember-testing/lib/adapters/adapter', 'ember-testing/lib/adapters/qunit', '@ember/application', 'internal-test-helpers', '@ember/-internals/runtime', '@ember/debug'], function (_emberBabel, _runloop, _errorHandling, _test, _adapter, _qunit, _application, _internalTestHelpers, _runtime, _debug) {\n 'use strict';\n\n var originalDebug = (0, _debug.getDebugFunction)('debug');\n var noop = function () {};\n\n var App, originalAdapter, originalQUnit, originalWindowOnerror;\n\n var originalConsoleError = console.error; // eslint-disable-line no-console\n\n function runThatThrowsSync() {\n var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Error for testing error handling';\n\n return (0, _runloop.run)(function () {\n throw new Error(message);\n });\n }\n\n function runThatThrowsAsync() {\n var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Error for testing error handling';\n\n return (0, _runloop.next)(function () {\n throw new Error(message);\n });\n }\n\n var AdapterSetupAndTearDown = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(AdapterSetupAndTearDown, _AbstractTestCase);\n\n function AdapterSetupAndTearDown() {\n\n (0, _debug.setDebugFunction)('debug', noop);\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n originalAdapter = _test.default.adapter;\n originalQUnit = window.QUnit;\n originalWindowOnerror = window.onerror;\n return _this;\n }\n\n AdapterSetupAndTearDown.prototype.afterEach = function afterEach() {\n console.error = originalConsoleError; // eslint-disable-line no-console\n };\n\n AdapterSetupAndTearDown.prototype.teardown = function teardown() {\n (0, _debug.setDebugFunction)('debug', originalDebug);\n if (App) {\n (0, _runloop.run)(App, App.destroy);\n App.removeTestHelpers();\n App = null;\n }\n\n _test.default.adapter = originalAdapter;\n window.QUnit = originalQUnit;\n window.onerror = originalWindowOnerror;\n (0, _errorHandling.setOnerror)(undefined);\n };\n\n return AdapterSetupAndTearDown;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _internalTestHelpers.moduleFor)('ember-testing Adapters', function (_AdapterSetupAndTearD) {\n (0, _emberBabel.inherits)(_class, _AdapterSetupAndTearD);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AdapterSetupAndTearD.apply(this, arguments));\n }\n\n _class.prototype['@test Setting a test adapter manually'] = function testSettingATestAdapterManually(assert) {\n assert.expect(1);\n var CustomAdapter;\n\n CustomAdapter = _adapter.default.extend({\n asyncStart: function () {\n assert.ok(true, 'Correct adapter was used');\n }\n });\n\n (0, _runloop.run)(function () {\n App = _application.default.create();\n _test.default.adapter = CustomAdapter.create();\n App.setupForTesting();\n });\n\n _test.default.adapter.asyncStart();\n };\n\n _class.prototype['@test QUnitAdapter is used by default (if QUnit is available)'] = function testQUnitAdapterIsUsedByDefaultIfQUnitIsAvailable(assert) {\n assert.expect(1);\n\n _test.default.adapter = null;\n\n (0, _runloop.run)(function () {\n App = _application.default.create();\n App.setupForTesting();\n });\n\n assert.ok(_test.default.adapter instanceof _qunit.default);\n };\n\n _class.prototype['@test Adapter is used by default (if QUnit is not available)'] = function testAdapterIsUsedByDefaultIfQUnitIsNotAvailable(assert) {\n assert.expect(2);\n\n delete window.QUnit;\n\n _test.default.adapter = null;\n\n (0, _runloop.run)(function () {\n App = _application.default.create();\n App.setupForTesting();\n });\n\n assert.ok(_test.default.adapter instanceof _adapter.default);\n assert.ok(!(_test.default.adapter instanceof _qunit.default));\n };\n\n _class.prototype['@test With Ember.Test.adapter set, errors in synchronous Ember.run are bubbled out'] = function testWithEmberTestAdapterSetErrorsInSynchronousEmberRunAreBubbledOut(assert) {\n var thrown = new Error('Boom!');\n\n var caughtInAdapter = void 0,\n caughtInCatch = void 0;\n _test.default.adapter = _qunit.default.create({\n exception: function (error) {\n caughtInAdapter = error;\n }\n });\n\n try {\n (0, _runloop.run)(function () {\n throw thrown;\n });\n } catch (e) {\n caughtInCatch = e;\n }\n\n assert.equal(caughtInAdapter, undefined, 'test adapter should never receive synchronous errors');\n assert.equal(caughtInCatch, thrown, 'a \"normal\" try/catch should catch errors in sync run');\n };\n\n _class.prototype['@test when both Ember.onerror (which rethrows) and TestAdapter are registered - sync run'] = function testWhenBothEmberOnerrorWhichRethrowsAndTestAdapterAreRegisteredSyncRun(assert) {\n assert.expect(2);\n\n _test.default.adapter = {\n exception: function () {\n assert.notOk(true, 'adapter is not called for errors thrown in sync run loops');\n }\n };\n\n (0, _errorHandling.setOnerror)(function (error) {\n assert.ok(true, 'onerror is called for sync errors even if TestAdapter is setup');\n throw error;\n });\n\n assert.throws(runThatThrowsSync, Error, 'error is thrown');\n };\n\n _class.prototype['@test when both Ember.onerror (which does not rethrow) and TestAdapter are registered - sync run'] = function testWhenBothEmberOnerrorWhichDoesNotRethrowAndTestAdapterAreRegisteredSyncRun(assert) {\n assert.expect(2);\n\n _test.default.adapter = {\n exception: function () {\n assert.notOk(true, 'adapter is not called for errors thrown in sync run loops');\n }\n };\n\n (0, _errorHandling.setOnerror)(function () {\n assert.ok(true, 'onerror is called for sync errors even if TestAdapter is setup');\n });\n\n runThatThrowsSync();\n assert.ok(true, 'no error was thrown, Ember.onerror can intercept errors');\n };\n\n _class.prototype['@test when TestAdapter is registered and error is thrown - async run'] = function testWhenTestAdapterIsRegisteredAndErrorIsThrownAsyncRun(assert) {\n assert.expect(3);\n var done = assert.async();\n\n var caughtInAdapter = void 0,\n caughtInCatch = void 0,\n caughtByWindowOnerror = void 0;\n _test.default.adapter = {\n exception: function (error) {\n caughtInAdapter = error;\n }\n };\n\n window.onerror = function (message) {\n caughtByWindowOnerror = message;\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n try {\n runThatThrowsAsync();\n } catch (e) {\n caughtInCatch = e;\n }\n\n setTimeout(function () {\n assert.equal(caughtInAdapter, undefined, 'test adapter should never catch errors in run loops');\n assert.equal(caughtInCatch, undefined, 'a \"normal\" try/catch should never catch errors in an async run');\n\n assert.pushResult({\n result: /Error for testing error handling/.test(caughtByWindowOnerror),\n actual: caughtByWindowOnerror,\n expected: 'to include `Error for testing error handling`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n done();\n }, 20);\n };\n\n _class.prototype['@test when both Ember.onerror and TestAdapter are registered - async run'] = function testWhenBothEmberOnerrorAndTestAdapterAreRegisteredAsyncRun(assert) {\n assert.expect(1);\n var done = assert.async();\n\n _test.default.adapter = {\n exception: function () {\n assert.notOk(true, 'Adapter.exception is not called for errors thrown in next');\n }\n };\n\n (0, _errorHandling.setOnerror)(function () {\n assert.ok(true, 'onerror is invoked for errors thrown in next/later');\n });\n\n runThatThrowsAsync();\n setTimeout(done, 10);\n };\n\n return _class;\n }(AdapterSetupAndTearDown));\n\n function testAdapter(message, generatePromise) {\n var timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n\n return function (_AdapterSetupAndTearD2) {\n (0, _emberBabel.inherits)(PromiseFailureTests, _AdapterSetupAndTearD2);\n\n function PromiseFailureTests() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AdapterSetupAndTearD2.apply(this, arguments));\n }\n\n PromiseFailureTests.prototype['@test ' + message + ' when TestAdapter without `exception` method is present - rsvp'] = function (assert) {\n assert.expect(1);\n\n var thrown = new Error('the error');\n _test.default.adapter = _qunit.default.create({\n exception: undefined\n });\n\n window.onerror = function (message) {\n assert.pushResult({\n result: /the error/.test(message),\n actual: message,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n generatePromise(thrown);\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _runtime.RSVP.Promise(function (resolve) {\n return setTimeout(resolve, timeout);\n });\n };\n\n PromiseFailureTests.prototype['@test ' + message + ' when both Ember.onerror and TestAdapter without `exception` method are present - rsvp'] = function (assert) {\n assert.expect(1);\n\n var thrown = new Error('the error');\n _test.default.adapter = _qunit.default.create({\n exception: undefined\n });\n\n (0, _errorHandling.setOnerror)(function (error) {\n assert.pushResult({\n result: /the error/.test(error.message),\n actual: error.message,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n });\n\n generatePromise(thrown);\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _runtime.RSVP.Promise(function (resolve) {\n return setTimeout(resolve, timeout);\n });\n };\n\n PromiseFailureTests.prototype['@test ' + message + ' when TestAdapter is present - rsvp'] = function (assert) {\n assert.expect(1);\n\n console.error = function () {}; // eslint-disable-line no-console\n var thrown = new Error('the error');\n _test.default.adapter = _qunit.default.create({\n exception: function (error) {\n assert.strictEqual(error, thrown, 'Adapter.exception is called for errors thrown in RSVP promises');\n }\n });\n\n generatePromise(thrown);\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _runtime.RSVP.Promise(function (resolve) {\n return setTimeout(resolve, timeout);\n });\n };\n\n PromiseFailureTests.prototype['@test ' + message + ' when both Ember.onerror and TestAdapter are present - rsvp'] = function (assert) {\n assert.expect(1);\n\n var thrown = new Error('the error');\n _test.default.adapter = _qunit.default.create({\n exception: function (error) {\n assert.strictEqual(error, thrown, 'Adapter.exception is called for errors thrown in RSVP promises');\n }\n });\n\n (0, _errorHandling.setOnerror)(function () {\n assert.notOk(true, 'Ember.onerror is not called if Test.adapter does not rethrow');\n });\n\n generatePromise(thrown);\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _runtime.RSVP.Promise(function (resolve) {\n return setTimeout(resolve, timeout);\n });\n };\n\n PromiseFailureTests.prototype['@test ' + message + ' when both Ember.onerror and TestAdapter are present - rsvp'] = function (assert) {\n assert.expect(2);\n\n var thrown = new Error('the error');\n _test.default.adapter = _qunit.default.create({\n exception: function (error) {\n assert.strictEqual(error, thrown, 'Adapter.exception is called for errors thrown in RSVP promises');\n throw error;\n }\n });\n\n (0, _errorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises if Test.adapter rethrows');\n });\n\n generatePromise(thrown);\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _runtime.RSVP.Promise(function (resolve) {\n return setTimeout(resolve, timeout);\n });\n };\n\n return PromiseFailureTests;\n }(AdapterSetupAndTearDown);\n }\n\n (0, _internalTestHelpers.moduleFor)('Adapter Errors: .then callback', testAdapter('errors in promise constructor', function (error) {\n new _runtime.RSVP.Promise(function () {\n throw error;\n });\n }));\n\n (0, _internalTestHelpers.moduleFor)('Adapter Errors: Promise Contructor', testAdapter('errors in promise constructor', function (error) {\n _runtime.RSVP.resolve().then(function () {\n throw error;\n });\n }));\n\n (0, _internalTestHelpers.moduleFor)('Adapter Errors: Promise chain .then callback', testAdapter('errors in promise constructor', function (error) {\n new _runtime.RSVP.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n }).then(function () {\n throw error;\n });\n }, 20));\n});","enifed('ember-testing/tests/ext/rsvp_test', ['ember-babel', 'ember-testing/lib/ext/rsvp', 'ember-testing/lib/test/adapter', 'ember-testing/lib/test/promise', '@ember/runloop', '@ember/debug', 'internal-test-helpers'], function (_emberBabel, _rsvp, _adapter, _promise, _runloop, _debug, _internalTestHelpers) {\n 'use strict';\n\n var originalTestAdapter = (0, _adapter.getAdapter)();\n var originalTestingFlag = (0, _debug.isTesting)();\n\n var asyncStarted = 0;\n var asyncEnded = 0;\n\n (0, _internalTestHelpers.moduleFor)('ember-testing RSVP', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n (0, _debug.setTesting)(true);\n (0, _adapter.setAdapter)({\n asyncStart: function () {\n asyncStarted++;\n },\n asyncEnd: function () {\n asyncEnded++;\n }\n });\n return _this;\n }\n\n _class.prototype.teardown = function teardown() {\n asyncStarted = 0;\n asyncEnded = 0;\n (0, _adapter.setAdapter)(originalTestAdapter);\n (0, _debug.setTesting)(originalTestingFlag);\n };\n\n _class.prototype['@test given `Ember.testing = true`, correctly informs the test suite about async steps'] = function testGivenEmberTestingTrueCorrectlyInformsTheTestSuiteAboutAsyncSteps(assert) {\n var done = assert.async();\n assert.expect(19);\n\n assert.ok(!(0, _runloop.getCurrentRunLoop)(), 'expect no run-loop');\n\n (0, _debug.setTesting)(true);\n\n assert.equal(asyncStarted, 0);\n assert.equal(asyncEnded, 0);\n\n var user = _rsvp.default.Promise.resolve({ name: 'tomster' });\n\n assert.equal(asyncStarted, 0);\n assert.equal(asyncEnded, 0);\n\n user.then(function (user) {\n assert.equal(asyncStarted, 1);\n assert.equal(asyncEnded, 1);\n\n assert.equal(user.name, 'tomster');\n\n return _rsvp.default.Promise.resolve(1).then(function () {\n assert.equal(asyncStarted, 1);\n assert.equal(asyncEnded, 1);\n });\n }).then(function () {\n assert.equal(asyncStarted, 1);\n assert.equal(asyncEnded, 1);\n\n return new _rsvp.default.Promise(function (resolve) {\n setTimeout(function () {\n assert.equal(asyncStarted, 1);\n assert.equal(asyncEnded, 1);\n\n resolve({ name: 'async tomster' });\n\n assert.equal(asyncStarted, 2);\n assert.equal(asyncEnded, 1);\n }, 0);\n });\n }).then(function (user) {\n assert.equal(user.name, 'async tomster');\n assert.equal(asyncStarted, 2);\n assert.equal(asyncEnded, 2);\n done();\n });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('TestPromise', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n _class2.prototype['does not throw error when falsy value passed to then'] = function doesNotThrowErrorWhenFalsyValuePassedToThen(assert) {\n assert.expect(1);\n return new _promise.default(function (resolve) {\n resolve();\n }).then(null).then(function () {\n assert.ok(true);\n });\n };\n\n _class2.prototype['able to get last Promise'] = function ableToGetLastPromise(assert) {\n assert.expect(2);\n\n var p1 = new _promise.default(function (resolve) {\n resolve();\n }).then(function () {\n assert.ok(true);\n });\n\n var p2 = new _promise.default(function (resolve) {\n resolve();\n });\n\n assert.deepEqual((0, _promise.getLastPromise)(), p2);\n return p1;\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-testing/tests/helper_registration_test', ['ember-babel', '@ember/runloop', 'ember-testing/lib/test', '@ember/application', 'internal-test-helpers'], function (_emberBabel, _runloop, _test, _application, _internalTestHelpers) {\n 'use strict';\n\n var App, appBooted, helperContainer;\n\n function registerHelper() {\n _test.default.registerHelper('boot', function (app) {\n (0, _runloop.run)(app, app.advanceReadiness);\n appBooted = true;\n return app.testHelpers.wait();\n });\n }\n\n function unregisterHelper() {\n _test.default.unregisterHelper('boot');\n }\n\n var originalAdapter = _test.default.adapter;\n\n function setupApp() {\n appBooted = false;\n helperContainer = {};\n\n (0, _runloop.run)(function () {\n App = _application.default.create();\n App.setupForTesting();\n App.injectTestHelpers(helperContainer);\n });\n }\n\n function destroyApp() {\n if (App) {\n (0, _runloop.run)(App, 'destroy');\n App = null;\n helperContainer = null;\n }\n }\n\n (0, _internalTestHelpers.moduleFor)('Test - registerHelper/unregisterHelper', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.teardown = function teardown() {\n _test.default.adapter = originalAdapter;\n destroyApp();\n };\n\n _class.prototype['@test Helper gets registered'] = function testHelperGetsRegistered(assert) {\n assert.expect(2);\n\n registerHelper();\n setupApp();\n\n assert.ok(App.testHelpers.boot);\n assert.ok(helperContainer.boot);\n };\n\n _class.prototype['@test Helper is ran when called'] = function testHelperIsRanWhenCalled(assert) {\n var done = assert.async();\n assert.expect(1);\n\n registerHelper();\n setupApp();\n\n App.testHelpers.boot().then(function () {\n assert.ok(appBooted);\n }).finally(done);\n };\n\n _class.prototype['@test Helper can be unregistered'] = function testHelperCanBeUnregistered(assert) {\n assert.expect(4);\n\n registerHelper();\n setupApp();\n\n assert.ok(App.testHelpers.boot);\n assert.ok(helperContainer.boot);\n\n unregisterHelper();\n\n (0, _runloop.run)(App, 'destroy');\n setupApp();\n\n assert.ok(!App.testHelpers.boot, 'once unregistered the helper is not added to App.testHelpers');\n assert.ok(!helperContainer.boot, 'once unregistered the helper is not added to the helperContainer');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-testing/tests/helpers_test', ['ember-babel', 'internal-test-helpers', '@ember/-internals/routing', '@ember/controller', '@ember/-internals/runtime', '@ember/runloop', '@ember/-internals/glimmer', '@ember/-internals/views', 'ember-testing/lib/test', 'ember-testing/lib/setup_for_testing', 'ember-testing/lib/test/pending_requests', 'ember-testing/lib/test/adapter', 'ember-testing/lib/test/waiters', '@ember/debug'], function (_emberBabel, _internalTestHelpers, _routing, _controller, _runtime, _runloop, _glimmer, _views, _test, _setup_for_testing, _pending_requests, _adapter, _waiters, _debug) {\n 'use strict';\n\n var originalInfo = (0, _debug.getDebugFunction)('info');\n var noop = function () {};\n\n function registerHelper() {\n _test.default.registerHelper('LeakyMcLeakLeak', function () {});\n }\n\n function assertHelpers(assert, application, helperContainer, expected) {\n if (!helperContainer) {\n helperContainer = window;\n }\n if (expected === undefined) {\n expected = true;\n }\n\n function checkHelperPresent(helper, expected) {\n var presentInHelperContainer = !!helperContainer[helper];\n var presentInTestHelpers = !!application.testHelpers[helper];\n\n assert.ok(presentInHelperContainer === expected, \"Expected '\" + helper + \"' to be present in the helper container (defaults to window).\");\n assert.ok(presentInTestHelpers === expected, \"Expected '\" + helper + \"' to be present in App.testHelpers.\");\n }\n\n checkHelperPresent('visit', expected);\n checkHelperPresent('click', expected);\n checkHelperPresent('keyEvent', expected);\n checkHelperPresent('fillIn', expected);\n checkHelperPresent('wait', expected);\n checkHelperPresent('triggerEvent', expected);\n }\n\n function assertNoHelpers(assert, application, helperContainer) {\n assertHelpers(assert, application, helperContainer, false);\n }\n\n var HelpersTestCase = function (_AutobootApplicationT) {\n (0, _emberBabel.inherits)(HelpersTestCase, _AutobootApplicationT);\n\n function HelpersTestCase() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AutobootApplicationT.call(this));\n\n _this._originalAdapter = (0, _adapter.getAdapter)();\n return _this;\n }\n\n HelpersTestCase.prototype.teardown = function teardown() {\n (0, _adapter.setAdapter)(this._originalAdapter);\n document.removeEventListener('ajaxSend', _pending_requests.incrementPendingRequests);\n document.removeEventListener('ajaxComplete', _pending_requests.decrementPendingRequests);\n (0, _pending_requests.clearPendingRequests)();\n if (this.application) {\n this.application.removeTestHelpers();\n }\n _AutobootApplicationT.prototype.teardown.call(this);\n };\n\n return HelpersTestCase;\n }(_internalTestHelpers.AutobootApplicationTestCase);\n\n var HelpersApplicationTestCase = function (_HelpersTestCase) {\n (0, _emberBabel.inherits)(HelpersApplicationTestCase, _HelpersTestCase);\n\n function HelpersApplicationTestCase() {\n\n var _this2 = (0, _emberBabel.possibleConstructorReturn)(this, _HelpersTestCase.call(this));\n\n _this2.runTask(function () {\n _this2.createApplication();\n _this2.application.setupForTesting();\n _this2.application.injectTestHelpers();\n });\n return _this2;\n }\n\n return HelpersApplicationTestCase;\n }(HelpersTestCase);\n\n if (!_views.jQueryDisabled) {\n (0, _internalTestHelpers.moduleFor)('ember-testing: Helper setup', function (_HelpersTestCase2) {\n (0, _emberBabel.inherits)(_class, _HelpersTestCase2);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _HelpersTestCase2.apply(this, arguments));\n }\n\n _class.prototype['@test Ember.Application#injectTestHelpers/#removeTestHelper'] = function (assert) {\n var _this4 = this;\n\n this.runTask(function () {\n _this4.createApplication();\n });\n\n assertNoHelpers(assert, this.application);\n\n registerHelper();\n\n this.application.injectTestHelpers();\n\n assertHelpers(assert, this.application);\n\n assert.ok(_test.default.Promise.prototype.LeakyMcLeakLeak, 'helper in question SHOULD be present');\n\n this.application.removeTestHelpers();\n\n assertNoHelpers(assert, this.application);\n\n assert.equal(_test.default.Promise.prototype.LeakyMcLeakLeak, undefined, 'should NOT leak test promise extensions');\n };\n\n _class.prototype['@test Ember.Application#setupForTesting'] = function (assert) {\n var _this5 = this;\n\n this.runTask(function () {\n _this5.createApplication();\n _this5.application.setupForTesting();\n });\n\n var routerInstance = this.applicationInstance.lookup('router:main');\n assert.equal(routerInstance.location, 'none');\n };\n\n _class.prototype['@test Ember.Application.setupForTesting sets the application to \\'testing\\''] = function (assert) {\n var _this6 = this;\n\n this.runTask(function () {\n _this6.createApplication();\n _this6.application.setupForTesting();\n });\n\n assert.equal(this.application.testing, true, 'Application instance is set to testing.');\n };\n\n _class.prototype['@test Ember.Application.setupForTesting leaves the system in a deferred state.'] = function (assert) {\n var _this7 = this;\n\n this.runTask(function () {\n _this7.createApplication();\n _this7.application.setupForTesting();\n });\n\n assert.equal(this.application._readinessDeferrals, 1, 'App is in deferred state after setupForTesting.');\n };\n\n _class.prototype['@test App.reset() after Application.setupForTesting leaves the system in a deferred state.'] = function (assert) {\n var _this8 = this;\n\n this.runTask(function () {\n _this8.createApplication();\n _this8.application.setupForTesting();\n });\n\n assert.equal(this.application._readinessDeferrals, 1, 'App is in deferred state after setupForTesting.');\n\n this.application.reset();\n\n assert.equal(this.application._readinessDeferrals, 1, 'App is in deferred state after setupForTesting.');\n };\n\n _class.prototype['@test Ember.Application#injectTestHelpers calls callbacks registered with onInjectHelpers'] = function (assert) {\n var injected = 0;\n\n _test.default.onInjectHelpers(function () {\n injected++;\n });\n\n // bind(this) so Babel doesn't leak _this\n // into the context onInjectHelpers.\n this.runTask(function () {\n this.createApplication();\n this.application.setupForTesting();\n }.bind(this));\n\n assert.equal(injected, 0, 'onInjectHelpers are not called before injectTestHelpers');\n\n this.application.injectTestHelpers();\n\n assert.equal(injected, 1, 'onInjectHelpers are called after injectTestHelpers');\n };\n\n _class.prototype['@test Ember.Application#injectTestHelpers adds helpers to provided object.'] = function (assert) {\n var _this9 = this;\n\n var helpers = {};\n\n this.runTask(function () {\n _this9.createApplication();\n _this9.application.setupForTesting();\n });\n\n this.application.injectTestHelpers(helpers);\n\n assertHelpers(assert, this.application, helpers);\n\n this.application.removeTestHelpers();\n\n assertNoHelpers(assert, this.application, helpers);\n };\n\n _class.prototype['@test Ember.Application#removeTestHelpers resets the helperContainer\\'s original values'] = function (assert) {\n var _this10 = this;\n\n var helpers = { visit: 'snazzleflabber' };\n\n this.runTask(function () {\n _this10.createApplication();\n _this10.application.setupForTesting();\n });\n\n this.application.injectTestHelpers(helpers);\n\n assert.notEqual(helpers.visit, 'snazzleflabber', 'helper added to container');\n this.application.removeTestHelpers();\n\n assert.equal(helpers.visit, 'snazzleflabber', 'original value added back to container');\n };\n\n return _class;\n }(HelpersTestCase));\n\n (0, _internalTestHelpers.moduleFor)('ember-testing: Helper methods', function (_HelpersApplicationTe) {\n (0, _emberBabel.inherits)(_class2, _HelpersApplicationTe);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _HelpersApplicationTe.apply(this, arguments));\n }\n\n _class2.prototype['@test \\'wait\\' respects registerWaiters'] = function (assert) {\n var _this12 = this;\n\n assert.expect(3);\n\n var counter = 0;\n function waiter() {\n return ++counter > 2;\n }\n\n var other = 0;\n function otherWaiter() {\n return ++other > 2;\n }\n\n this.runTask(function () {\n _this12.application.advanceReadiness();\n });\n\n (0, _waiters.registerWaiter)(waiter);\n (0, _waiters.registerWaiter)(otherWaiter);\n\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.wait().then(function () {\n assert.equal(waiter(), true, 'should not resolve until our waiter is ready');\n (0, _waiters.unregisterWaiter)(waiter);\n counter = 0;\n return testHelpers.wait();\n }).then(function () {\n assert.equal(counter, 0, 'unregistered waiter was not checked');\n assert.equal(otherWaiter(), true, 'other waiter is still registered');\n }).finally(function () {\n (0, _waiters.unregisterWaiter)(otherWaiter);\n });\n };\n\n _class2.prototype['@test \\'visit\\' advances readiness.'] = function (assert) {\n var _this13 = this;\n\n assert.expect(2);\n\n assert.equal(this.application._readinessDeferrals, 1, 'App is in deferred state after setupForTesting.');\n\n return this.application.testHelpers.visit('/').then(function () {\n assert.equal(_this13.application._readinessDeferrals, 0, 'App\\'s readiness was advanced by visit.');\n });\n };\n\n _class2.prototype['@test \\'wait\\' helper can be passed a resolution value'] = function (assert) {\n var _this14 = this;\n\n assert.expect(4);\n\n this.runTask(function () {\n _this14.application.advanceReadiness();\n });\n\n var promiseObjectValue = {};\n var objectValue = {};\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.wait('text').then(function (val) {\n assert.equal(val, 'text', 'can resolve to a string');\n return testHelpers.wait(1);\n }).then(function (val) {\n assert.equal(val, 1, 'can resolve to an integer');\n return testHelpers.wait(objectValue);\n }).then(function (val) {\n assert.equal(val, objectValue, 'can resolve to an object');\n return testHelpers.wait(_runtime.RSVP.resolve(promiseObjectValue));\n }).then(function (val) {\n assert.equal(val, promiseObjectValue, 'can resolve to a promise resolution value');\n });\n };\n\n _class2.prototype['@test \\'click\\' triggers appropriate events in order'] = function (assert) {\n var _this15 = this;\n\n assert.expect(5);\n\n this.add('component:index-wrapper', _glimmer.Component.extend({\n classNames: 'index-wrapper',\n\n didInsertElement: function () {\n var wrapper = document.querySelector('.index-wrapper');\n wrapper.addEventListener('mousedown', function (e) {\n return events.push(e.type);\n });\n wrapper.addEventListener('mouseup', function (e) {\n return events.push(e.type);\n });\n wrapper.addEventListener('click', function (e) {\n return events.push(e.type);\n });\n wrapper.addEventListener('focusin', function (e) {\n // IE11 _sometimes_ triggers focusin **twice** in a row\n // (we believe this is when it is under higher load)\n //\n // the goal here is to only push a single focusin when running on\n // IE11\n if (_internalTestHelpers.isIE11) {\n if (events[events.length - 1] !== 'focusin') {\n events.push(e.type);\n }\n } else {\n events.push(e.type);\n }\n });\n }\n }));\n\n this.add('component:x-checkbox', _glimmer.Component.extend({\n tagName: 'input',\n attributeBindings: ['type'],\n type: 'checkbox',\n click: function () {\n events.push('click:' + this.get('checked'));\n },\n change: function () {\n events.push('change:' + this.get('checked'));\n }\n }));\n\n this.addTemplate('index', '\\n {{#index-wrapper}}\\n {{input type=\"text\"}}\\n {{x-checkbox type=\"checkbox\"}}\\n {{textarea}}\\n
\\n {{/index-wrapper}}\\'));\\n ');\n\n this.runTask(function () {\n _this15.application.advanceReadiness();\n });\n\n var events = void 0;\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.wait().then(function () {\n events = [];\n return testHelpers.click('.index-wrapper');\n }).then(function () {\n assert.deepEqual(events, ['mousedown', 'mouseup', 'click'], 'fires events in order');\n }).then(function () {\n events = [];\n return testHelpers.click('.index-wrapper input[type=text]');\n }).then(function () {\n assert.deepEqual(events, ['mousedown', 'focusin', 'mouseup', 'click'], 'fires focus events on inputs');\n }).then(function () {\n events = [];\n return testHelpers.click('.index-wrapper textarea');\n }).then(function () {\n assert.deepEqual(events, ['mousedown', 'focusin', 'mouseup', 'click'], 'fires focus events on textareas');\n }).then(function () {\n events = [];\n return testHelpers.click('.index-wrapper div');\n }).then(function () {\n assert.deepEqual(events, ['mousedown', 'focusin', 'mouseup', 'click'], 'fires focus events on contenteditable');\n }).then(function () {\n events = [];\n return testHelpers.click('.index-wrapper input[type=checkbox]');\n }).then(function () {\n // i.e. mousedown, mouseup, change:true, click, click:true\n // Firefox differs so we can't assert the exact ordering here.\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=843554.\n assert.equal(events.length, 5, 'fires click and change on checkboxes');\n });\n };\n\n _class2.prototype['@test \\'click\\' triggers native events with simulated X/Y coordinates'] = function (assert) {\n var _this16 = this;\n\n assert.expect(15);\n\n this.add('component:index-wrapper', _glimmer.Component.extend({\n classNames: 'index-wrapper',\n\n didInsertElement: function () {\n var pushEvent = function (e) {\n return events.push(e);\n };\n this.element.addEventListener('mousedown', pushEvent);\n this.element.addEventListener('mouseup', pushEvent);\n this.element.addEventListener('click', pushEvent);\n }\n }));\n\n this.addTemplate('index', '\\n {{#index-wrapper}}some text{{/index-wrapper}}\\n ');\n\n this.runTask(function () {\n _this16.application.advanceReadiness();\n });\n\n var events = void 0;\n var _application$testHelp = this.application.testHelpers,\n wait = _application$testHelp.wait,\n click = _application$testHelp.click;\n\n return wait().then(function () {\n events = [];\n return click('.index-wrapper');\n }).then(function () {\n events.forEach(function (e) {\n assert.ok(e instanceof window.Event, 'The event is an instance of MouseEvent');\n assert.ok(typeof e.screenX === 'number', 'screenX is correct');\n assert.ok(typeof e.screenY === 'number', 'screenY is correct');\n assert.ok(typeof e.clientX === 'number', 'clientX is correct');\n assert.ok(typeof e.clientY === 'number', 'clientY is correct');\n });\n });\n };\n\n _class2.prototype['@test \\'triggerEvent\\' with mouseenter triggers native events with simulated X/Y coordinates'] = function (assert) {\n var _this17 = this;\n\n assert.expect(5);\n\n var evt = void 0;\n this.add('component:index-wrapper', _glimmer.Component.extend({\n classNames: 'index-wrapper',\n didInsertElement: function () {\n this.element.addEventListener('mouseenter', function (e) {\n return evt = e;\n });\n }\n }));\n\n this.addTemplate('index', '{{#index-wrapper}}some text{{/index-wrapper}}');\n\n this.runTask(function () {\n _this17.application.advanceReadiness();\n });\n\n var _application$testHelp2 = this.application.testHelpers,\n wait = _application$testHelp2.wait,\n triggerEvent = _application$testHelp2.triggerEvent;\n\n return wait().then(function () {\n return triggerEvent('.index-wrapper', 'mouseenter');\n }).then(function () {\n assert.ok(evt instanceof window.Event, 'The event is an instance of MouseEvent');\n assert.ok(typeof evt.screenX === 'number', 'screenX is correct');\n assert.ok(typeof evt.screenY === 'number', 'screenY is correct');\n assert.ok(typeof evt.clientX === 'number', 'clientX is correct');\n assert.ok(typeof evt.clientY === 'number', 'clientY is correct');\n });\n };\n\n _class2.prototype['@test \\'wait\\' waits for outstanding timers'] = function (assert) {\n var _this18 = this;\n\n assert.expect(1);\n\n this.runTask(function () {\n _this18.application.advanceReadiness();\n });\n\n var waitDone = false;\n (0, _runloop.later)(function () {\n waitDone = true;\n }, 20);\n\n return this.application.testHelpers.wait().then(function () {\n assert.equal(waitDone, true, 'should wait for the timer to be fired.');\n });\n };\n\n _class2.prototype['@test \\'wait\\' respects registerWaiters with optional context'] = function (assert) {\n var _this19 = this;\n\n assert.expect(3);\n\n var obj = {\n counter: 0,\n ready: function () {\n return ++this.counter > 2;\n }\n };\n\n var other = 0;\n function otherWaiter() {\n return ++other > 2;\n }\n\n this.runTask(function () {\n _this19.application.advanceReadiness();\n });\n\n (0, _waiters.registerWaiter)(obj, obj.ready);\n (0, _waiters.registerWaiter)(otherWaiter);\n\n var wait = this.application.testHelpers.wait;\n\n return wait().then(function () {\n assert.equal(obj.ready(), true, 'should not resolve until our waiter is ready');\n (0, _waiters.unregisterWaiter)(obj, obj.ready);\n obj.counter = 0;\n return wait();\n }).then(function () {\n assert.equal(obj.counter, 0, 'the unregistered waiter should still be at 0');\n assert.equal(otherWaiter(), true, 'other waiter should still be registered');\n }).finally(function () {\n (0, _waiters.unregisterWaiter)(otherWaiter);\n });\n };\n\n _class2.prototype['@test \\'wait\\' does not error if routing has not begun'] = function (assert) {\n assert.expect(1);\n\n return this.application.testHelpers.wait().then(function () {\n assert.ok(true, 'should not error without `visit`');\n });\n };\n\n _class2.prototype['@test \\'triggerEvent\\' accepts an optional options hash without context'] = function (assert) {\n var _this20 = this;\n\n assert.expect(3);\n\n var event = void 0;\n this.add('component:index-wrapper', _glimmer.Component.extend({\n didInsertElement: function () {\n var domElem = document.querySelector('.input');\n domElem.addEventListener('change', function (e) {\n return event = e;\n });\n domElem.addEventListener('keydown', function (e) {\n return event = e;\n });\n }\n }));\n\n this.addTemplate('index', '{{index-wrapper}}');\n this.addTemplate('components/index-wrapper', '\\n {{input type=\"text\" id=\"scope\" class=\"input\"}}\\n ');\n\n this.runTask(function () {\n _this20.application.advanceReadiness();\n });\n\n var _application$testHelp3 = this.application.testHelpers,\n wait = _application$testHelp3.wait,\n triggerEvent = _application$testHelp3.triggerEvent;\n\n return wait().then(function () {\n return triggerEvent('.input', 'keydown', { keyCode: 13 });\n }).then(function () {\n assert.equal(event.keyCode, 13, 'options were passed');\n assert.equal(event.type, 'keydown', 'correct event was triggered');\n assert.equal(event.target.getAttribute('id'), 'scope', 'triggered on the correct element');\n });\n };\n\n _class2.prototype['@test \\'triggerEvent\\' can limit searching for a selector to a scope'] = function (assert) {\n var _this21 = this;\n\n assert.expect(2);\n\n var event = void 0;\n this.add('component:index-wrapper', _glimmer.Component.extend({\n didInsertElement: function () {\n var firstInput = document.querySelector('.input');\n firstInput.addEventListener('blur', function (e) {\n return event = e;\n });\n firstInput.addEventListener('change', function (e) {\n return event = e;\n });\n var secondInput = document.querySelector('#limited .input');\n secondInput.addEventListener('blur', function (e) {\n return event = e;\n });\n secondInput.addEventListener('change', function (e) {\n return event = e;\n });\n }\n }));\n\n this.addTemplate('components/index-wrapper', '\\n {{input type=\"text\" id=\"outside-scope\" class=\"input\"}}\\n
\\n {{input type=\"text\" id=\"inside-scope\" class=\"input\"}}\\n
\\n ');\n this.addTemplate('index', '{{index-wrapper}}');\n\n this.runTask(function () {\n _this21.application.advanceReadiness();\n });\n\n var _application$testHelp4 = this.application.testHelpers,\n wait = _application$testHelp4.wait,\n triggerEvent = _application$testHelp4.triggerEvent;\n\n return wait().then(function () {\n return triggerEvent('.input', '#limited', 'blur');\n }).then(function () {\n assert.equal(event.type, 'blur', 'correct event was triggered');\n assert.equal(event.target.getAttribute('id'), 'inside-scope', 'triggered on the correct element');\n });\n };\n\n _class2.prototype['@test \\'triggerEvent\\' can be used to trigger arbitrary events'] = function (assert) {\n var _this22 = this;\n\n assert.expect(2);\n\n var event = void 0;\n this.add('component:index-wrapper', _glimmer.Component.extend({\n didInsertElement: function () {\n var foo = document.getElementById('foo');\n foo.addEventListener('blur', function (e) {\n return event = e;\n });\n foo.addEventListener('change', function (e) {\n return event = e;\n });\n }\n }));\n\n this.addTemplate('components/index-wrapper', '\\n {{input type=\"text\" id=\"foo\"}}\\n ');\n this.addTemplate('index', '{{index-wrapper}}');\n\n this.runTask(function () {\n _this22.application.advanceReadiness();\n });\n\n var _application$testHelp5 = this.application.testHelpers,\n wait = _application$testHelp5.wait,\n triggerEvent = _application$testHelp5.triggerEvent;\n\n return wait().then(function () {\n return triggerEvent('#foo', 'blur');\n }).then(function () {\n assert.equal(event.type, 'blur', 'correct event was triggered');\n assert.equal(event.target.getAttribute('id'), 'foo', 'triggered on the correct element');\n });\n };\n\n _class2.prototype['@test \\'fillIn\\' takes context into consideration'] = function (assert) {\n var _this23 = this;\n\n assert.expect(2);\n\n this.addTemplate('index', '\\n
\\n {{input type=\"text\" id=\"first\" class=\"current\"}}\\n
\\n {{input type=\"text\" id=\"second\" class=\"current\"}}\\n ');\n\n this.runTask(function () {\n _this23.application.advanceReadiness();\n });\n\n var _application$testHelp6 = this.application.testHelpers,\n visit = _application$testHelp6.visit,\n fillIn = _application$testHelp6.fillIn,\n andThen = _application$testHelp6.andThen,\n find = _application$testHelp6.find;\n\n visit('/');\n fillIn('.current', '#parent', 'current value');\n\n return andThen(function () {\n assert.equal(find('#first')[0].value, 'current value');\n assert.equal(find('#second')[0].value, '');\n });\n };\n\n _class2.prototype['@test \\'fillIn\\' focuses on the element'] = function (assert) {\n var _this24 = this;\n\n var wasFocused = false;\n\n this.add('controller:index', _controller.default.extend({\n actions: {\n wasFocused: function () {\n wasFocused = true;\n }\n }\n }));\n\n this.addTemplate('index', '\\n
\\n {{input type=\"text\" id=\"first\" focus-in=(action \"wasFocused\")}}\\n
\\'\\n ');\n\n this.runTask(function () {\n _this24.application.advanceReadiness();\n });\n\n var _application$testHelp7 = this.application.testHelpers,\n visit = _application$testHelp7.visit,\n fillIn = _application$testHelp7.fillIn,\n andThen = _application$testHelp7.andThen,\n find = _application$testHelp7.find,\n wait = _application$testHelp7.wait;\n\n visit('/');\n fillIn('#first', 'current value');\n andThen(function () {\n assert.ok(wasFocused, 'focusIn event was triggered');\n\n assert.equal(find('#first')[0].value, 'current value');\n });\n\n return wait();\n };\n\n _class2.prototype['@test \\'fillIn\\' fires \\'input\\' and \\'change\\' events in the proper order'] = function (assert) {\n var _this25 = this;\n\n assert.expect(1);\n\n var events = [];\n this.add('controller:index', _controller.default.extend({\n actions: {\n oninputHandler: function (e) {\n events.push(e.type);\n },\n onchangeHandler: function (e) {\n events.push(e.type);\n }\n }\n }));\n\n this.addTemplate('index', '\\n \\n ');\n\n this.runTask(function () {\n _this25.application.advanceReadiness();\n });\n\n var _application$testHelp8 = this.application.testHelpers,\n visit = _application$testHelp8.visit,\n fillIn = _application$testHelp8.fillIn,\n andThen = _application$testHelp8.andThen,\n wait = _application$testHelp8.wait;\n\n visit('/');\n fillIn('#first', 'current value');\n andThen(function () {\n assert.deepEqual(events, ['input', 'change'], '`input` and `change` events are fired in the proper order');\n });\n\n return wait();\n };\n\n _class2.prototype['@test \\'fillIn\\' only sets the value in the first matched element'] = function (assert) {\n var _this26 = this;\n\n this.addTemplate('index', '\\n \\n \\n ');\n\n this.runTask(function () {\n _this26.application.advanceReadiness();\n });\n\n var _application$testHelp9 = this.application.testHelpers,\n visit = _application$testHelp9.visit,\n fillIn = _application$testHelp9.fillIn,\n find = _application$testHelp9.find,\n andThen = _application$testHelp9.andThen,\n wait = _application$testHelp9.wait;\n\n visit('/');\n fillIn('input.in-test', 'new value');\n andThen(function () {\n assert.equal(find('#first')[0].value, 'new value');\n assert.equal(find('#second')[0].value, '');\n });\n\n return wait();\n };\n\n _class2.prototype['@test \\'triggerEvent\\' accepts an optional options hash and context'] = function (assert) {\n var _this27 = this;\n\n assert.expect(3);\n\n var event = void 0;\n this.add('component:index-wrapper', _glimmer.Component.extend({\n didInsertElement: function () {\n var firstInput = document.querySelector('.input');\n firstInput.addEventListener('keydown', function (e) {\n return event = e;\n }, false);\n firstInput.addEventListener('change', function (e) {\n return event = e;\n }, false);\n var secondInput = document.querySelector('#limited .input');\n secondInput.addEventListener('keydown', function (e) {\n return event = e;\n }, false);\n secondInput.addEventListener('change', function (e) {\n return event = e;\n }, false);\n }\n }));\n\n this.addTemplate('components/index-wrapper', '\\n {{input type=\"text\" id=\"outside-scope\" class=\"input\"}}\\n
\\n {{input type=\"text\" id=\"inside-scope\" class=\"input\"}}\\n
\\n ');\n this.addTemplate('index', '{{index-wrapper}}');\n\n this.runTask(function () {\n _this27.application.advanceReadiness();\n });\n\n var _application$testHelp10 = this.application.testHelpers,\n wait = _application$testHelp10.wait,\n triggerEvent = _application$testHelp10.triggerEvent;\n\n return wait().then(function () {\n return triggerEvent('.input', '#limited', 'keydown', {\n keyCode: 13\n });\n }).then(function () {\n assert.equal(event.keyCode, 13, 'options were passed');\n assert.equal(event.type, 'keydown', 'correct event was triggered');\n assert.equal(event.target.getAttribute('id'), 'inside-scope', 'triggered on the correct element');\n });\n };\n\n return _class2;\n }(HelpersApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('ember-testing: debugging helpers', function (_HelpersApplicationTe2) {\n (0, _emberBabel.inherits)(_class3, _HelpersApplicationTe2);\n\n _class3.prototype.afterEach = function afterEach() {\n _HelpersApplicationTe2.prototype.afterEach.call(this);\n (0, _debug.setDebugFunction)('info', originalInfo);\n };\n\n function _class3() {\n\n var _this28 = (0, _emberBabel.possibleConstructorReturn)(this, _HelpersApplicationTe2.call(this));\n\n _this28.runTask(function () {\n _this28.application.advanceReadiness();\n });\n return _this28;\n }\n\n _class3.prototype['@test pauseTest pauses'] = function (assert) {\n assert.expect(1);\n // overwrite info to supress the console output (see https://github.com/emberjs/ember.js/issues/16391)\n (0, _debug.setDebugFunction)('info', noop);\n\n var _application$testHelp11 = this.application.testHelpers,\n andThen = _application$testHelp11.andThen,\n pauseTest = _application$testHelp11.pauseTest;\n\n andThen(function () {\n _test.default.adapter.asyncStart = function () {\n assert.ok(true, 'Async start should be called after waiting for other helpers');\n };\n });\n\n pauseTest();\n };\n\n _class3.prototype['@test resumeTest resumes paused tests'] = function (assert) {\n assert.expect(1);\n // overwrite info to supress the console output (see https://github.com/emberjs/ember.js/issues/16391)\n (0, _debug.setDebugFunction)('info', noop);\n\n var _application$testHelp12 = this.application.testHelpers,\n pauseTest = _application$testHelp12.pauseTest,\n resumeTest = _application$testHelp12.resumeTest;\n\n (0, _runloop.later)(function () {\n return resumeTest();\n }, 20);\n return pauseTest().then(function () {\n assert.ok(true, 'pauseTest promise was resolved');\n });\n };\n\n _class3.prototype['@test resumeTest throws if nothing to resume'] = function (assert) {\n var _this29 = this;\n\n assert.expect(1);\n\n assert.throws(function () {\n _this29.application.testHelpers.resumeTest();\n }, /Testing has not been paused. There is nothing to resume./);\n };\n\n return _class3;\n }(HelpersApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('ember-testing: routing helpers', function (_HelpersTestCase3) {\n (0, _emberBabel.inherits)(_class4, _HelpersTestCase3);\n\n function _class4() {\n\n var _this30 = (0, _emberBabel.possibleConstructorReturn)(this, _HelpersTestCase3.call(this));\n\n _this30.runTask(function () {\n _this30.createApplication();\n _this30.application.setupForTesting();\n _this30.application.injectTestHelpers();\n _this30.router.map(function () {\n this.route('posts', { resetNamespace: true }, function () {\n this.route('new');\n this.route('edit', { resetNamespace: true });\n });\n });\n });\n _this30.runTask(function () {\n _this30.application.advanceReadiness();\n });\n return _this30;\n }\n\n _class4.prototype['@test currentRouteName for \\'/\\''] = function (assert) {\n assert.expect(3);\n\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.visit('/').then(function () {\n assert.equal(testHelpers.currentRouteName(), 'index', 'should equal \\'index\\'.');\n assert.equal(testHelpers.currentPath(), 'index', 'should equal \\'index\\'.');\n assert.equal(testHelpers.currentURL(), '/', 'should equal \\'/\\'.');\n });\n };\n\n _class4.prototype['@test currentRouteName for \\'/posts\\''] = function (assert) {\n assert.expect(3);\n\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.visit('/posts').then(function () {\n assert.equal(testHelpers.currentRouteName(), 'posts.index', 'should equal \\'posts.index\\'.');\n assert.equal(testHelpers.currentPath(), 'posts.index', 'should equal \\'posts.index\\'.');\n assert.equal(testHelpers.currentURL(), '/posts', 'should equal \\'/posts\\'.');\n });\n };\n\n _class4.prototype['@test currentRouteName for \\'/posts/new\\''] = function (assert) {\n assert.expect(3);\n\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.visit('/posts/new').then(function () {\n assert.equal(testHelpers.currentRouteName(), 'posts.new', 'should equal \\'posts.new\\'.');\n assert.equal(testHelpers.currentPath(), 'posts.new', 'should equal \\'posts.new\\'.');\n assert.equal(testHelpers.currentURL(), '/posts/new', 'should equal \\'/posts/new\\'.');\n });\n };\n\n _class4.prototype['@test currentRouteName for \\'/posts/edit\\''] = function (assert) {\n assert.expect(3);\n\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.visit('/posts/edit').then(function () {\n assert.equal(testHelpers.currentRouteName(), 'edit', 'should equal \\'edit\\'.');\n assert.equal(testHelpers.currentPath(), 'posts.edit', 'should equal \\'posts.edit\\'.');\n assert.equal(testHelpers.currentURL(), '/posts/edit', 'should equal \\'/posts/edit\\'.');\n });\n };\n\n return _class4;\n }(HelpersTestCase));\n\n (0, _internalTestHelpers.moduleFor)('ember-testing: pendingRequests', function (_HelpersApplicationTe3) {\n (0, _emberBabel.inherits)(_class5, _HelpersApplicationTe3);\n\n function _class5() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _HelpersApplicationTe3.apply(this, arguments));\n }\n\n _class5.prototype.trigger = function trigger(type, xhr) {\n (0, _views.jQuery)(document).trigger(type, xhr);\n };\n\n _class5.prototype['@test pendingRequests is maintained for ajaxSend and ajaxComplete events'] = function (assert) {\n var done = assert.async();\n assert.equal((0, _pending_requests.pendingRequests)(), 0);\n\n var xhr = { some: 'xhr' };\n\n this.trigger('ajaxSend', xhr);\n assert.equal((0, _pending_requests.pendingRequests)(), 1, 'Ember.Test.pendingRequests was incremented');\n\n this.trigger('ajaxComplete', xhr);\n setTimeout(function () {\n assert.equal((0, _pending_requests.pendingRequests)(), 0, 'Ember.Test.pendingRequests was decremented');\n done();\n }, 0);\n };\n\n _class5.prototype['@test pendingRequests is ignores ajaxComplete events from past setupForTesting calls'] = function (assert) {\n assert.equal((0, _pending_requests.pendingRequests)(), 0);\n\n var xhr = { some: 'xhr' };\n\n this.trigger('ajaxSend', xhr);\n assert.equal((0, _pending_requests.pendingRequests)(), 1, 'Ember.Test.pendingRequests was incremented');\n\n (0, _setup_for_testing.default)();\n\n assert.equal((0, _pending_requests.pendingRequests)(), 0, 'Ember.Test.pendingRequests was reset');\n\n var altXhr = { some: 'more xhr' };\n\n this.trigger('ajaxSend', altXhr);\n assert.equal((0, _pending_requests.pendingRequests)(), 1, 'Ember.Test.pendingRequests was incremented');\n\n this.trigger('ajaxComplete', xhr);\n assert.equal((0, _pending_requests.pendingRequests)(), 1, 'Ember.Test.pendingRequests is not impressed with your unexpected complete');\n };\n\n _class5.prototype['@test pendingRequests is reset by setupForTesting'] = function (assert) {\n (0, _pending_requests.incrementPendingRequests)();\n\n (0, _setup_for_testing.default)();\n\n assert.equal((0, _pending_requests.pendingRequests)(), 0, 'pendingRequests is reset');\n };\n\n return _class5;\n }(HelpersApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('ember-testing: async router', function (_HelpersTestCase4) {\n (0, _emberBabel.inherits)(_class6, _HelpersTestCase4);\n\n function _class6() {\n\n var _this32 = (0, _emberBabel.possibleConstructorReturn)(this, _HelpersTestCase4.call(this));\n\n _this32.runTask(function () {\n _this32.createApplication();\n\n _this32.router.map(function () {\n this.route('user', { resetNamespace: true }, function () {\n this.route('profile');\n this.route('edit');\n });\n });\n\n // Emulate a long-running unscheduled async operation.\n var resolveLater = function () {\n return new _runtime.RSVP.Promise(function (resolve) {\n /*\n * The wait() helper has a 10ms tick. We should resolve() after\n * at least one tick to test whether wait() held off while the\n * async router was still loading. 20ms should be enough.\n */\n (0, _runloop.later)(resolve, { firstName: 'Tom' }, 20);\n });\n };\n\n _this32.add('route:user', _routing.Route.extend({\n model: function () {\n return resolveLater();\n }\n }));\n\n _this32.add('route:user.profile', _routing.Route.extend({\n beforeModel: function () {\n var _this33 = this;\n\n return resolveLater().then(function () {\n return _this33.transitionTo('user.edit');\n });\n }\n }));\n\n _this32.application.setupForTesting();\n });\n\n _this32.application.injectTestHelpers();\n _this32.runTask(function () {\n _this32.application.advanceReadiness();\n });\n return _this32;\n }\n\n _class6.prototype['@test currentRouteName for \\'/user\\''] = function (assert) {\n var _this34 = this;\n\n assert.expect(4);\n\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.visit('/user').then(function () {\n assert.equal(testHelpers.currentRouteName(), 'user.index', 'should equal \\'user.index\\'.');\n assert.equal(testHelpers.currentPath(), 'user.index', 'should equal \\'user.index\\'.');\n assert.equal(testHelpers.currentURL(), '/user', 'should equal \\'/user\\'.');\n var userRoute = _this34.applicationInstance.lookup('route:user');\n assert.equal(userRoute.get('controller.model.firstName'), 'Tom', 'should equal \\'Tom\\'.');\n });\n };\n\n _class6.prototype['@test currentRouteName for \\'/user/profile\\''] = function (assert) {\n var _this35 = this;\n\n assert.expect(4);\n\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.visit('/user/profile').then(function () {\n assert.equal(testHelpers.currentRouteName(), 'user.edit', 'should equal \\'user.edit\\'.');\n assert.equal(testHelpers.currentPath(), 'user.edit', 'should equal \\'user.edit\\'.');\n assert.equal(testHelpers.currentURL(), '/user/edit', 'should equal \\'/user/edit\\'.');\n var userRoute = _this35.applicationInstance.lookup('route:user');\n assert.equal(userRoute.get('controller.model.firstName'), 'Tom', 'should equal \\'Tom\\'.');\n });\n };\n\n return _class6;\n }(HelpersTestCase));\n\n (0, _internalTestHelpers.moduleFor)('ember-testing: can override built-in helpers', function (_HelpersTestCase5) {\n (0, _emberBabel.inherits)(_class7, _HelpersTestCase5);\n\n function _class7() {\n\n var _this36 = (0, _emberBabel.possibleConstructorReturn)(this, _HelpersTestCase5.call(this));\n\n _this36.runTask(function () {\n _this36.createApplication();\n _this36.application.setupForTesting();\n });\n _this36._originalVisitHelper = _test.default._helpers.visit;\n _this36._originalFindHelper = _test.default._helpers.find;\n return _this36;\n }\n\n _class7.prototype.teardown = function teardown() {\n _test.default._helpers.visit = this._originalVisitHelper;\n _test.default._helpers.find = this._originalFindHelper;\n _HelpersTestCase5.prototype.teardown.call(this);\n };\n\n _class7.prototype['@test can override visit helper'] = function (assert) {\n assert.expect(1);\n\n _test.default.registerHelper('visit', function () {\n assert.ok(true, 'custom visit helper was called');\n });\n\n this.application.injectTestHelpers();\n\n return this.application.testHelpers.visit();\n };\n\n _class7.prototype['@test can override find helper'] = function (assert) {\n assert.expect(1);\n\n _test.default.registerHelper('find', function () {\n assert.ok(true, 'custom find helper was called');\n\n return ['not empty array'];\n });\n\n this.application.injectTestHelpers();\n\n return this.application.testHelpers.findWithAssert('.who-cares');\n };\n\n return _class7;\n }(HelpersTestCase));\n }\n});","enifed('ember-testing/tests/integration_test', ['ember-babel', 'internal-test-helpers', 'ember-testing/lib/test', '@ember/-internals/runtime', '@ember/-internals/routing', '@ember/-internals/views'], function (_emberBabel, _internalTestHelpers, _test, _runtime, _routing, _views) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-testing Integration tests of acceptance', function (_AutobootApplicationT) {\n (0, _emberBabel.inherits)(_class, _AutobootApplicationT);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AutobootApplicationT.call(this));\n\n _this.modelContent = [];\n _this._originalAdapter = _test.default.adapter;\n\n _this.runTask(function () {\n _this.createApplication();\n\n _this.addTemplate('people', '\\n
\\n {{#each model as |person|}}\\n
{{person.firstName}}
\\n {{/each}}\\n
\\n ');\n\n _this.router.map(function () {\n this.route('people', { path: '/' });\n });\n\n _this.add('route:people', _routing.Route.extend({\n model: function () {\n return _this.modelContent;\n }\n }));\n\n _this.application.setupForTesting();\n });\n\n _this.runTask(function () {\n _this.application.reset();\n });\n\n _this.application.injectTestHelpers();\n return _this;\n }\n\n _class.prototype.teardown = function teardown() {\n _AutobootApplicationT.prototype.teardown.call(this);\n _test.default.adapter = this._originalAdapter;\n };\n\n _class.prototype['@test template is bound to empty array of people'] = function (assert) {\n var _this2 = this;\n\n if (!_views.jQueryDisabled) {\n this.runTask(function () {\n return _this2.application.advanceReadiness();\n });\n window.visit('/').then(function () {\n var rows = window.find('.name').length;\n assert.equal(rows, 0, 'successfully stubbed an empty array of people');\n });\n } else {\n this.runTask(function () {\n return _this2.application.advanceReadiness();\n });\n window.visit('/').then(function () {\n expectAssertion(function () {\n return window.find('.name');\n }, 'If jQuery is disabled, please import and use helpers from @ember/test-helpers [https://github.com/emberjs/ember-test-helpers]. Note: `find` is not an available helper.');\n });\n }\n };\n\n _class.prototype['@test template is bound to array of 2 people'] = function (assert) {\n var _this3 = this;\n\n if (!_views.jQueryDisabled) {\n this.modelContent = (0, _runtime.A)([]);\n this.modelContent.pushObject({ firstName: 'x' });\n this.modelContent.pushObject({ firstName: 'y' });\n\n this.runTask(function () {\n return _this3.application.advanceReadiness();\n });\n window.visit('/').then(function () {\n var rows = window.find('.name').length;\n assert.equal(rows, 2, 'successfully stubbed a non empty array of people');\n });\n } else {\n assert.expect(0);\n }\n };\n\n _class.prototype['@test \\'visit\\' can be called without advanceReadiness.'] = function (assert) {\n if (!_views.jQueryDisabled) {\n window.visit('/').then(function () {\n var rows = window.find('.name').length;\n assert.equal(rows, 0, 'stubbed an empty array of people without calling advanceReadiness.');\n });\n } else {\n assert.expect(0);\n }\n };\n\n return _class;\n }(_internalTestHelpers.AutobootApplicationTestCase));\n});","enifed('ember-testing/tests/reexports_test', ['ember-babel', 'ember', 'internal-test-helpers'], function (_emberBabel, _ember, _internalTestHelpers) {\n 'use strict';\n\n var ReexportsTestCase = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(ReexportsTestCase, _AbstractTestCase);\n\n function ReexportsTestCase() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n return ReexportsTestCase;\n }(_internalTestHelpers.AbstractTestCase);\n\n [\n // ember-testing\n ['Test', 'ember-testing'], ['Test.Adapter', 'ember-testing', 'Adapter'], ['Test.QUnitAdapter', 'ember-testing', 'QUnitAdapter'], ['setupForTesting', 'ember-testing']].forEach(function (reexport) {\n var path = reexport[0],\n moduleId = reexport[1],\n exportName = reexport[2];\n\n // default path === exportName if none present\n\n if (!exportName) {\n exportName = path;\n }\n\n ReexportsTestCase.prototype['@test Ember.' + path + ' exports correctly'] = function (assert) {\n (0, _internalTestHelpers.confirmExport)(_ember.default, assert, path, moduleId, exportName);\n };\n });\n\n (0, _internalTestHelpers.moduleFor)('ember-testing reexports', ReexportsTestCase);\n});","enifed('ember-testing/tests/test/waiters-test', ['ember-babel', 'ember-testing/lib/test/waiters', 'internal-test-helpers'], function (_emberBabel, _waiters, _internalTestHelpers) {\n 'use strict';\n\n var Waiters = function () {\n function Waiters() {\n\n this._waiters = [];\n }\n\n Waiters.prototype.add = function add() {\n this._waiters.push([].concat(Array.prototype.slice.call(arguments)));\n };\n\n Waiters.prototype.register = function register() {\n this.forEach(function () {\n _waiters.registerWaiter.apply(undefined, arguments);\n });\n };\n\n Waiters.prototype.unregister = function unregister() {\n this.forEach(function () {\n _waiters.unregisterWaiter.apply(undefined, arguments);\n });\n };\n\n Waiters.prototype.forEach = function forEach(callback) {\n for (var i = 0; i < this._waiters.length; i++) {\n var args = this._waiters[i];\n\n callback.apply(undefined, args);\n }\n };\n\n Waiters.prototype.check = function check() {\n this.register();\n var result = (0, _waiters.checkWaiters)();\n this.unregister();\n\n return result;\n };\n\n return Waiters;\n }();\n\n (0, _internalTestHelpers.moduleFor)('ember-testing: waiters', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n _this.waiters = new Waiters();\n return _this;\n }\n\n _class.prototype.teardown = function teardown() {\n this.waiters.unregister();\n };\n\n _class.prototype['@test registering a waiter'] = function testRegisteringAWaiter(assert) {\n assert.expect(2);\n\n var obj = { foo: true };\n\n this.waiters.add(obj, function () {\n assert.ok(this.foo, 'has proper `this` context');\n return true;\n });\n\n this.waiters.add(function () {\n assert.ok(true, 'is called');\n return true;\n });\n\n this.waiters.check();\n };\n\n _class.prototype['@test unregistering a waiter'] = function testUnregisteringAWaiter(assert) {\n assert.expect(2);\n\n var obj = { foo: true };\n\n this.waiters.add(obj, function () {\n assert.ok(true, 'precond - waiter with context is registered');\n return true;\n });\n\n this.waiters.add(function () {\n assert.ok(true, 'precond - waiter without context is registered');\n return true;\n });\n\n this.waiters.check();\n this.waiters.unregister();\n\n (0, _waiters.checkWaiters)();\n };\n\n _class.prototype['@test checkWaiters returns false if all waiters return true'] = function testCheckWaitersReturnsFalseIfAllWaitersReturnTrue(assert) {\n assert.expect(3);\n\n this.waiters.add(function () {\n assert.ok(true, 'precond - waiter is registered');\n\n return true;\n });\n\n this.waiters.add(function () {\n assert.ok(true, 'precond - waiter is registered');\n\n return true;\n });\n\n assert.notOk(this.waiters.check(), 'checkWaiters returns true if all waiters return true');\n };\n\n _class.prototype['@test checkWaiters returns true if any waiters return false'] = function testCheckWaitersReturnsTrueIfAnyWaitersReturnFalse(assert) {\n assert.expect(3);\n\n this.waiters.add(function () {\n assert.ok(true, 'precond - waiter is registered');\n\n return true;\n });\n\n this.waiters.add(function () {\n assert.ok(true, 'precond - waiter is registered');\n\n return false;\n });\n\n assert.ok(this.waiters.check(), 'checkWaiters returns false if any waiters return false');\n };\n\n _class.prototype['@test checkWaiters short circuits after first falsey waiter'] = function testCheckWaitersShortCircuitsAfterFirstFalseyWaiter(assert) {\n assert.expect(2);\n\n this.waiters.add(function () {\n assert.ok(true, 'precond - waiter is registered');\n\n return false;\n });\n\n this.waiters.add(function () {\n assert.notOk(true, 'waiter should not be called');\n });\n\n assert.ok(this.waiters.check(), 'checkWaiters returns false if any waiters return false');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember/tests/application_lifecycle_test', ['ember-babel', 'internal-test-helpers', '@ember/application', '@ember/-internals/routing', '@ember/-internals/glimmer', '@ember/debug'], function (_emberBabel, _internalTestHelpers, _application, _routing, _glimmer, _debug) {\n 'use strict';\n\n var originalDebug = (0, _debug.getDebugFunction)('debug');\n var noop = function () {};\n\n (0, _internalTestHelpers.moduleFor)('Application Lifecycle - route hooks', function (_AutobootApplicationT) {\n (0, _emberBabel.inherits)(_class, _AutobootApplicationT);\n\n _class.prototype.createApplication = function createApplication() {\n var _AutobootApplicationT2;\n\n var application = (_AutobootApplicationT2 = _AutobootApplicationT.prototype.createApplication).call.apply(_AutobootApplicationT2, [this].concat(Array.prototype.slice.call(arguments)));\n this.add('router:main', _routing.Router.extend({\n location: 'none'\n }));\n return application;\n };\n\n function _class() {\n\n (0, _debug.setDebugFunction)('debug', noop);\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AutobootApplicationT.call(this));\n\n var menuItem = _this.menuItem = {};\n\n _this.runTask(function () {\n _this.createApplication();\n\n var SettingRoute = _routing.Route.extend({\n setupController: function () {\n this.controller.set('selectedMenuItem', menuItem);\n },\n deactivate: function () {\n this.controller.set('selectedMenuItem', null);\n }\n });\n _this.add('route:index', SettingRoute);\n _this.add('route:application', SettingRoute);\n });\n return _this;\n }\n\n _class.prototype.teardown = function teardown() {\n (0, _debug.setDebugFunction)('debug', originalDebug);\n };\n\n _class.prototype['@test Resetting the application allows controller properties to be set when a route deactivates'] = function (assert) {\n var indexController = this.indexController,\n applicationController = this.applicationController;\n\n assert.equal(indexController.get('selectedMenuItem'), this.menuItem);\n assert.equal(applicationController.get('selectedMenuItem'), this.menuItem);\n\n this.application.reset();\n\n assert.equal(indexController.get('selectedMenuItem'), null);\n assert.equal(applicationController.get('selectedMenuItem'), null);\n };\n\n _class.prototype['@test Destroying the application resets the router before the appInstance is destroyed'] = function (assert) {\n var _this2 = this;\n\n var indexController = this.indexController,\n applicationController = this.applicationController;\n\n assert.equal(indexController.get('selectedMenuItem'), this.menuItem);\n assert.equal(applicationController.get('selectedMenuItem'), this.menuItem);\n\n this.runTask(function () {\n _this2.application.destroy();\n });\n\n assert.equal(indexController.get('selectedMenuItem'), null);\n assert.equal(applicationController.get('selectedMenuItem'), null);\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'indexController',\n get: function () {\n return this.applicationInstance.lookup('controller:index');\n }\n }, {\n key: 'applicationController',\n get: function () {\n return this.applicationInstance.lookup('controller:application');\n }\n }]);\n\n return _class;\n }(_internalTestHelpers.AutobootApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Application Lifecycle', function (_AutobootApplicationT3) {\n (0, _emberBabel.inherits)(_class2, _AutobootApplicationT3);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AutobootApplicationT3.apply(this, arguments));\n }\n\n _class2.prototype.createApplication = function createApplication() {\n var _AutobootApplicationT4;\n\n var application = (_AutobootApplicationT4 = _AutobootApplicationT3.prototype.createApplication).call.apply(_AutobootApplicationT4, [this].concat(Array.prototype.slice.call(arguments)));\n this.add('router:main', _routing.Router.extend({\n location: 'none'\n }));\n return application;\n };\n\n _class2.prototype['@test Destroying a route after the router does create an undestroyed \\'toplevelView\\''] = function (assert) {\n var _this4 = this;\n\n this.runTask(function () {\n _this4.createApplication();\n _this4.addTemplate('index', 'Index!');\n _this4.addTemplate('application', 'Application! {{outlet}}');\n });\n\n var router = this.applicationInstance.lookup('router:main');\n var route = this.applicationInstance.lookup('route:index');\n\n this.runTask(function () {\n return router.destroy();\n });\n assert.equal(router._toplevelView, null, 'the toplevelView was cleared');\n\n this.runTask(function () {\n return route.destroy();\n });\n assert.equal(router._toplevelView, null, 'the toplevelView was not reinitialized');\n\n this.runTask(function () {\n return _this4.application.destroy();\n });\n assert.equal(router._toplevelView, null, 'the toplevelView was not reinitialized');\n };\n\n _class2.prototype['@test initializers can augment an applications customEvents hash'] = function (assert) {\n var _this5 = this;\n\n assert.expect(1);\n\n var MyApplication = _application.default.extend();\n\n MyApplication.initializer({\n name: 'customize-things',\n initialize: function (application) {\n application.customEvents = {\n wowza: 'wowza'\n };\n }\n });\n\n this.runTask(function () {\n _this5.createApplication({}, MyApplication);\n\n _this5.add('component:foo-bar', _glimmer.Component.extend({\n wowza: function () {\n assert.ok(true, 'fired the event!');\n }\n }));\n\n _this5.addTemplate('application', '{{foo-bar}}');\n _this5.addTemplate('components/foo-bar', '
');\n });\n\n this.$('#wowza-thingy').trigger('wowza');\n };\n\n _class2.prototype['@test instanceInitializers can augment an the customEvents hash'] = function (assert) {\n var _this6 = this;\n\n assert.expect(1);\n\n var MyApplication = _application.default.extend();\n\n MyApplication.instanceInitializer({\n name: 'customize-things',\n initialize: function (application) {\n application.customEvents = {\n herky: 'jerky'\n };\n }\n });\n this.runTask(function () {\n _this6.createApplication({}, MyApplication);\n\n _this6.add('component:foo-bar', _glimmer.Component.extend({\n jerky: function () {\n assert.ok(true, 'fired the event!');\n }\n }));\n\n _this6.addTemplate('application', '{{foo-bar}}');\n _this6.addTemplate('components/foo-bar', '
');\n });\n\n this.$('#herky-thingy').trigger('herky');\n };\n\n return _class2;\n }(_internalTestHelpers.AutobootApplicationTestCase));\n});","enifed('ember/tests/component_context_test', ['ember-babel', '@ember/controller', '@ember/-internals/glimmer', 'internal-test-helpers'], function (_emberBabel, _controller, _glimmer, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Application Lifecycle - Component Context', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Components with a block should have the proper content when a template is provided'] = function testComponentsWithABlockShouldHaveTheProperContentWhenATemplateIsProvided(assert) {\n var _this2 = this;\n\n this.addTemplate('application', '\\n
\\n {{#my-component}}{{text}}{{/my-component}}\\n
\\n ');\n\n this.add('controller:application', _controller.default.extend({\n text: 'outer'\n }));\n this.addComponent('my-component', {\n ComponentClass: _glimmer.Component.extend({\n text: 'inner'\n }),\n template: '{{text}}-{{yield}}'\n });\n\n return this.visit('/').then(function () {\n var text = (0, _internalTestHelpers.getTextOf)(_this2.element.querySelector('#wrapper'));\n assert.equal(text, 'inner-outer', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Components with a block should yield the proper content without a template provided'] = function testComponentsWithABlockShouldYieldTheProperContentWithoutATemplateProvided(assert) {\n var _this3 = this;\n\n this.addTemplate('application', '\\n
\\n {{#my-component}}{{text}}{{/my-component}}\\n
\\n ');\n\n this.add('controller:application', _controller.default.extend({\n text: 'outer'\n }));\n this.addComponent('my-component', {\n ComponentClass: _glimmer.Component.extend({\n text: 'inner'\n })\n });\n\n return this.visit('/').then(function () {\n var text = (0, _internalTestHelpers.getTextOf)(_this3.element.querySelector('#wrapper'));\n assert.equal(text, 'outer', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Components without a block should have the proper content when a template is provided'] = function testComponentsWithoutABlockShouldHaveTheProperContentWhenATemplateIsProvided(assert) {\n var _this4 = this;\n\n this.addTemplate('application', '\\n
{{my-component}}
\\n ');\n\n this.add('controller:application', _controller.default.extend({\n text: 'outer'\n }));\n this.addComponent('my-component', {\n ComponentClass: _glimmer.Component.extend({\n text: 'inner'\n }),\n template: '{{text}}'\n });\n\n return this.visit('/').then(function () {\n var text = (0, _internalTestHelpers.getTextOf)(_this4.element.querySelector('#wrapper'));\n assert.equal(text, 'inner', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Components without a block should have the proper content'] = function testComponentsWithoutABlockShouldHaveTheProperContent(assert) {\n var _this5 = this;\n\n this.addTemplate('application', '\\n
{{my-component}}
\\n ');\n\n this.add('controller:application', _controller.default.extend({\n text: 'outer'\n }));\n this.addComponent('my-component', {\n ComponentClass: _glimmer.Component.extend({\n didInsertElement: function () {\n this.element.innerHTML = 'Some text inserted';\n }\n })\n });\n\n return this.visit('/').then(function () {\n var text = (0, _internalTestHelpers.getTextOf)(_this5.element.querySelector('#wrapper'));\n assert.equal(text, 'Some text inserted', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test properties of a component without a template should not collide with internal structures [DEPRECATED]'] = function testPropertiesOfAComponentWithoutATemplateShouldNotCollideWithInternalStructuresDEPRECATED(assert) {\n var _this6 = this;\n\n this.addTemplate('application', '\\n
{{my-component data=foo}}
');\n\n this.add('controller:application', _controller.default.extend({\n text: 'outer',\n foo: 'Some text inserted'\n }));\n this.addComponent('my-component', {\n ComponentClass: _glimmer.Component.extend({\n didInsertElement: function () {\n this.element.innerHTML = this.get('data');\n }\n })\n });\n\n return this.visit('/').then(function () {\n var text = (0, _internalTestHelpers.getTextOf)(_this6.element.querySelector('#wrapper'));\n assert.equal(text, 'Some text inserted', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test attrs property of a component without a template should not collide with internal structures'] = function testAttrsPropertyOfAComponentWithoutATemplateShouldNotCollideWithInternalStructures(assert) {\n var _this7 = this;\n\n this.addTemplate('application', '\\n
{{my-component attrs=foo}}
\\n ');\n\n this.add('controller:application', _controller.default.extend({\n text: 'outer',\n foo: 'Some text inserted'\n }));\n this.addComponent('my-component', {\n ComponentClass: _glimmer.Component.extend({\n didInsertElement: function () {\n this.element.innerHTML = this.get('attrs.attrs.value');\n }\n })\n });\n\n return this.visit('/').then(function () {\n var text = (0, _internalTestHelpers.getTextOf)(_this7.element.querySelector('#wrapper'));\n assert.equal(text, 'Some text inserted', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Components trigger actions in the parents context when called from within a block'] = function testComponentsTriggerActionsInTheParentsContextWhenCalledFromWithinABlock(assert) {\n var _this8 = this;\n\n this.addTemplate('application', '\\n
\\n {{#my-component}}\\n Fizzbuzz\\n {{/my-component}}\\n
\\n ');\n\n this.add('controller:application', _controller.default.extend({\n actions: {\n fizzbuzz: function () {\n assert.ok(true, 'action triggered on parent');\n }\n }\n }));\n this.addComponent('my-component', {\n ComponentClass: _glimmer.Component.extend({})\n });\n\n return this.visit('/').then(function () {\n _this8.$('#fizzbuzz', '#wrapper').click();\n });\n };\n\n _class.prototype['@test Components trigger actions in the components context when called from within its template'] = function testComponentsTriggerActionsInTheComponentsContextWhenCalledFromWithinItsTemplate(assert) {\n var _this9 = this;\n\n this.addTemplate('application', '\\n
{{#my-component}}{{text}}{{/my-component}}
\\n ');\n\n this.add('controller:application', _controller.default.extend({\n actions: {\n fizzbuzz: function () {\n assert.ok(false, 'action on the wrong context');\n }\n }\n }));\n this.addComponent('my-component', {\n ComponentClass: _glimmer.Component.extend({\n actions: {\n fizzbuzz: function () {\n assert.ok(true, 'action triggered on component');\n }\n }\n }),\n template: 'Fizzbuzz'\n });\n\n return this.visit('/').then(function () {\n _this9.$('#fizzbuzz', '#wrapper').click();\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/component_registration_test', ['ember-babel', '@ember/application', '@ember/controller', '@ember/-internals/glimmer', 'ember-template-compiler', 'internal-test-helpers', '@ember/-internals/environment'], function (_emberBabel, _application, _controller, _glimmer, _emberTemplateCompiler, _internalTestHelpers, _environment) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Application Lifecycle - Component Registration', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n }\n\n // This is necessary for this.application.instanceInitializer to not leak between tests\n _class.prototype.createApplication = function createApplication(options) {\n return _ApplicationTestCase.prototype.createApplication.call(this, options, _application.default.extend());\n };\n\n _class.prototype['@test The helper becomes the body of the component'] = function testTheHelperBecomesTheBodyOfTheComponent() {\n var _this2 = this;\n\n this.addTemplate('components/expand-it', '

hello {{yield}}

');\n this.addTemplate('application', 'Hello world {{#expand-it}}world{{/expand-it}}');\n\n return this.visit('/').then(function () {\n _this2.assertText('Hello world hello world');\n _this2.assertComponentElement(_this2.element.firstElementChild, {\n tagName: 'div',\n content: '

hello world

'\n });\n });\n };\n\n _class.prototype['@test The helper becomes the body of the component (ENV._TEMPLATE_ONLY_GLIMMER_COMPONENTS = true;)'] = function testTheHelperBecomesTheBodyOfTheComponentENV_TEMPLATE_ONLY_GLIMMER_COMPONENTSTrue() {\n var _this3 = this;\n\n _environment.ENV._TEMPLATE_ONLY_GLIMMER_COMPONENTS = true;\n this.addTemplate('components/expand-it', '

hello {{yield}}

');\n this.addTemplate('application', 'Hello world {{#expand-it}}world{{/expand-it}}');\n\n return this.visit('/').then(function () {\n _this3.assertInnerHTML('Hello world

hello world

');\n _environment.ENV._TEMPLATE_ONLY_GLIMMER_COMPONENTS = false;\n });\n };\n\n _class.prototype['@test If a component is registered, it is used'] = function testIfAComponentIsRegisteredItIsUsed(assert) {\n var _this4 = this;\n\n this.addTemplate('components/expand-it', '

hello {{yield}}

');\n this.addTemplate('application', 'Hello world {{#expand-it}}world{{/expand-it}}');\n\n this.application.instanceInitializer({\n name: 'expand-it-component',\n initialize: function (applicationInstance) {\n applicationInstance.register('component:expand-it', _glimmer.Component.extend({\n classNames: 'testing123'\n }));\n }\n });\n\n return this.visit('/').then(function () {\n var text = _this4.$('div.testing123').text().trim();\n assert.equal(text, 'hello world', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Late-registered components can be rendered with custom `layout` property'] = function testLateRegisteredComponentsCanBeRenderedWithCustomLayoutProperty(assert) {\n var _this5 = this;\n\n this.addTemplate('application', '
there goes {{my-hero}}
');\n\n this.application.instanceInitializer({\n name: 'my-hero-component',\n initialize: function (applicationInstance) {\n applicationInstance.register('component:my-hero', _glimmer.Component.extend({\n classNames: 'testing123',\n layout: (0, _emberTemplateCompiler.compile)('watch him as he GOES')\n }));\n }\n });\n\n return this.visit('/').then(function () {\n var text = _this5.$('#wrapper').text().trim();\n assert.equal(text, 'there goes watch him as he GOES', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Late-registered components can be rendered with template registered on the container'] = function testLateRegisteredComponentsCanBeRenderedWithTemplateRegisteredOnTheContainer(assert) {\n var _this6 = this;\n\n this.addTemplate('application', '
hello world {{sally-rutherford}}-{{#sally-rutherford}}!!!{{/sally-rutherford}}
');\n\n this.application.instanceInitializer({\n name: 'sally-rutherford-component-template',\n initialize: function (applicationInstance) {\n applicationInstance.register('template:components/sally-rutherford', (0, _emberTemplateCompiler.compile)('funkytowny{{yield}}'));\n }\n });\n this.application.instanceInitializer({\n name: 'sally-rutherford-component',\n initialize: function (applicationInstance) {\n applicationInstance.register('component:sally-rutherford', _glimmer.Component);\n }\n });\n\n return this.visit('/').then(function () {\n var text = _this6.$('#wrapper').text().trim();\n assert.equal(text, 'hello world funkytowny-funkytowny!!!', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Late-registered components can be rendered with ONLY the template registered on the container'] = function testLateRegisteredComponentsCanBeRenderedWithONLYTheTemplateRegisteredOnTheContainer(assert) {\n var _this7 = this;\n\n this.addTemplate('application', '
hello world {{borf-snorlax}}-{{#borf-snorlax}}!!!{{/borf-snorlax}}
');\n\n this.application.instanceInitializer({\n name: 'borf-snorlax-component-template',\n initialize: function (applicationInstance) {\n applicationInstance.register('template:components/borf-snorlax', (0, _emberTemplateCompiler.compile)('goodfreakingTIMES{{yield}}'));\n }\n });\n\n return this.visit('/').then(function () {\n var text = _this7.$('#wrapper').text().trim();\n assert.equal(text, 'hello world goodfreakingTIMES-goodfreakingTIMES!!!', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Assigning layoutName to a component should setup the template as a layout'] = function testAssigningLayoutNameToAComponentShouldSetupTheTemplateAsALayout(assert) {\n var _this8 = this;\n\n assert.expect(1);\n\n this.addTemplate('application', '
{{#my-component}}{{text}}{{/my-component}}
');\n this.addTemplate('foo-bar-baz', '{{text}}-{{yield}}');\n\n this.application.instanceInitializer({\n name: 'application-controller',\n initialize: function (applicationInstance) {\n applicationInstance.register('controller:application', _controller.default.extend({\n text: 'outer'\n }));\n }\n });\n this.application.instanceInitializer({\n name: 'my-component-component',\n initialize: function (applicationInstance) {\n applicationInstance.register('component:my-component', _glimmer.Component.extend({\n text: 'inner',\n layoutName: 'foo-bar-baz'\n }));\n }\n });\n\n return this.visit('/').then(function () {\n var text = _this8.$('#wrapper').text().trim();\n assert.equal(text, 'inner-outer', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Assigning layoutName and layout to a component should use the `layout` value'] = function testAssigningLayoutNameAndLayoutToAComponentShouldUseTheLayoutValue(assert) {\n var _this9 = this;\n\n assert.expect(1);\n\n this.addTemplate('application', '
{{#my-component}}{{text}}{{/my-component}}
');\n this.addTemplate('foo-bar-baz', 'No way!');\n\n this.application.instanceInitializer({\n name: 'application-controller-layout',\n initialize: function (applicationInstance) {\n applicationInstance.register('controller:application', _controller.default.extend({\n text: 'outer'\n }));\n }\n });\n this.application.instanceInitializer({\n name: 'my-component-component-layout',\n initialize: function (applicationInstance) {\n applicationInstance.register('component:my-component', _glimmer.Component.extend({\n text: 'inner',\n layoutName: 'foo-bar-baz',\n layout: (0, _emberTemplateCompiler.compile)('{{text}}-{{yield}}')\n }));\n }\n });\n\n return this.visit('/').then(function () {\n var text = _this9.$('#wrapper').text().trim();\n assert.equal(text, 'inner-outer', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Using name of component that does not exist'] = function testUsingNameOfComponentThatDoesNotExist() {\n var _this10 = this;\n\n this.addTemplate('application', '
{{#no-good}} {{/no-good}}
');\n\n // TODO: Use the async form of expectAssertion here when it is available\n expectAssertion(function () {\n _this10.visit('/');\n }, /.* named \"no-good\" .*/);\n\n return this.runLoopSettled();\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/controller_test', ['ember-babel', '@ember/controller', 'internal-test-helpers', '@ember/-internals/glimmer'], function (_emberBabel, _controller, _internalTestHelpers, _glimmer) {\n 'use strict';\n\n /*\n In Ember 1.x, controllers subtly affect things like template scope\n and action targets in exciting and often inscrutable ways. This test\n file contains integration tests that verify the correct behavior of\n the many parts of the system that change and rely upon controller scope,\n from the runtime up to the templating layer.\n */\n\n (0, _internalTestHelpers.moduleFor)('Template scoping examples', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Actions inside an outlet go to the associated controller'] = function testActionsInsideAnOutletGoToTheAssociatedController(assert) {\n var _this2 = this;\n\n this.add('controller:index', _controller.default.extend({\n actions: {\n componentAction: function () {\n assert.ok(true, 'controller received the action');\n }\n }\n }));\n\n this.addComponent('component-with-action', {\n ComponentClass: _glimmer.Component.extend({\n classNames: ['component-with-action'],\n click: function () {\n this.action();\n }\n })\n });\n\n this.addTemplate('index', '{{component-with-action action=(action \"componentAction\")}}');\n\n return this.visit('/').then(function () {\n _this2.runTask(function () {\n return _this2.$('.component-with-action').click();\n });\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/error_handler_test', ['ember-babel', '@ember/debug', '@ember/runloop', '@ember/-internals/error-handling', 'rsvp', 'internal-test-helpers'], function (_emberBabel, _debug, _runloop, _errorHandling, _rsvp, _internalTestHelpers) {\n 'use strict';\n\n var WINDOW_ONERROR = void 0;\n\n function runThatThrowsSync() {\n var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Error for testing error handling';\n\n return (0, _runloop.run)(function () {\n throw new Error(message);\n });\n }\n\n (0, _internalTestHelpers.moduleFor)('error_handler', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function beforeEach() {\n // capturing this outside of module scope to ensure we grab\n // the test frameworks own window.onerror to reset it\n WINDOW_ONERROR = window.onerror;\n };\n\n _class.prototype.afterEach = function afterEach() {\n (0, _debug.setTesting)(_debug.isTesting);\n window.onerror = WINDOW_ONERROR;\n\n (0, _errorHandling.setOnerror)(undefined);\n };\n\n _class.prototype['@test by default there is no onerror - sync run'] = function testByDefaultThereIsNoOnerrorSyncRun(assert) {\n assert.strictEqual((0, _errorHandling.getOnerror)(), undefined, 'precond - there should be no Ember.onerror set by default');\n assert.throws(runThatThrowsSync, Error, 'errors thrown sync are catchable');\n };\n\n _class.prototype['@test when Ember.onerror (which rethrows) is registered - sync run'] = function testWhenEmberOnerrorWhichRethrowsIsRegisteredSyncRun(assert) {\n assert.expect(2);\n (0, _errorHandling.setOnerror)(function (error) {\n assert.ok(true, 'onerror called');\n throw error;\n });\n assert.throws(runThatThrowsSync, Error, 'error is thrown');\n };\n\n _class.prototype['@test when Ember.onerror (which does not rethrow) is registered - sync run'] = function testWhenEmberOnerrorWhichDoesNotRethrowIsRegisteredSyncRun(assert) {\n assert.expect(2);\n (0, _errorHandling.setOnerror)(function () {\n assert.ok(true, 'onerror called');\n });\n runThatThrowsSync();\n assert.ok(true, 'no error was thrown, Ember.onerror can intercept errors');\n };\n\n _class.prototype['@test does not swallow exceptions by default (Ember.testing = true, no Ember.onerror) - sync run'] = function testDoesNotSwallowExceptionsByDefaultEmberTestingTrueNoEmberOnerrorSyncRun(assert) {\n (0, _debug.setTesting)(true);\n\n var error = new Error('the error');\n assert.throws(function () {\n (0, _runloop.run)(function () {\n throw error;\n });\n }, error);\n };\n\n _class.prototype['@test does not swallow exceptions by default (Ember.testing = false, no Ember.onerror) - sync run'] = function testDoesNotSwallowExceptionsByDefaultEmberTestingFalseNoEmberOnerrorSyncRun(assert) {\n (0, _debug.setTesting)(false);\n var error = new Error('the error');\n assert.throws(function () {\n (0, _runloop.run)(function () {\n throw error;\n });\n }, error);\n };\n\n _class.prototype['@test does not swallow exceptions (Ember.testing = false, Ember.onerror which rethrows) - sync run'] = function testDoesNotSwallowExceptionsEmberTestingFalseEmberOnerrorWhichRethrowsSyncRun(assert) {\n assert.expect(2);\n (0, _debug.setTesting)(false);\n\n (0, _errorHandling.setOnerror)(function (error) {\n assert.ok(true, 'Ember.onerror was called');\n throw error;\n });\n\n var error = new Error('the error');\n assert.throws(function () {\n (0, _runloop.run)(function () {\n throw error;\n });\n }, error);\n };\n\n _class.prototype['@test Ember.onerror can intercept errors (aka swallow) by not rethrowing (Ember.testing = false) - sync run'] = function testEmberOnerrorCanInterceptErrorsAkaSwallowByNotRethrowingEmberTestingFalseSyncRun(assert) {\n assert.expect(1);\n (0, _debug.setTesting)(false);\n\n (0, _errorHandling.setOnerror)(function () {\n assert.ok(true, 'Ember.onerror was called');\n });\n\n var error = new Error('the error');\n try {\n (0, _runloop.run)(function () {\n throw error;\n });\n } catch (e) {\n assert.notOk(true, 'Ember.onerror that does not rethrow is intentionally swallowing errors, try / catch wrapping does not see error');\n }\n };\n\n _class.prototype['@test does not swallow exceptions by default (Ember.testing = true, no Ember.onerror) - async run'] = function testDoesNotSwallowExceptionsByDefaultEmberTestingTrueNoEmberOnerrorAsyncRun(assert) {\n var done = assert.async();\n var caughtByWindowOnerror = void 0;\n\n (0, _debug.setTesting)(true);\n\n window.onerror = function (message) {\n caughtByWindowOnerror = message;\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n (0, _runloop.later)(function () {\n throw new Error('the error');\n }, 10);\n\n setTimeout(function () {\n assert.pushResult({\n result: /the error/.test(caughtByWindowOnerror),\n actual: caughtByWindowOnerror,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n done();\n }, 20);\n };\n\n _class.prototype['@test does not swallow exceptions by default (Ember.testing = false, no Ember.onerror) - async run'] = function testDoesNotSwallowExceptionsByDefaultEmberTestingFalseNoEmberOnerrorAsyncRun(assert) {\n var done = assert.async();\n var caughtByWindowOnerror = void 0;\n\n (0, _debug.setTesting)(false);\n\n window.onerror = function (message) {\n caughtByWindowOnerror = message;\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n (0, _runloop.later)(function () {\n throw new Error('the error');\n }, 10);\n\n setTimeout(function () {\n assert.pushResult({\n result: /the error/.test(caughtByWindowOnerror),\n actual: caughtByWindowOnerror,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n done();\n }, 20);\n };\n\n _class.prototype['@test Ember.onerror can intercept errors (aka swallow) by not rethrowing (Ember.testing = false) - async run'] = function testEmberOnerrorCanInterceptErrorsAkaSwallowByNotRethrowingEmberTestingFalseAsyncRun(assert) {\n var done = assert.async();\n\n (0, _debug.setTesting)(false);\n\n window.onerror = function () {\n assert.notOk(true, 'window.onerror is never invoked when Ember.onerror intentionally swallows errors');\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n var thrown = new Error('the error');\n (0, _errorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called with the error');\n });\n\n (0, _runloop.later)(function () {\n throw thrown;\n }, 10);\n\n setTimeout(done, 20);\n };\n\n _class.prototype['@test errors in promise constructor when Ember.onerror which does not rethrow is present - rsvp'] = function (assert) {\n assert.expect(1);\n\n var thrown = new Error('the error');\n (0, _errorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n });\n\n new _rsvp.default.Promise(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n });\n };\n\n _class.prototype['@test errors in promise constructor when Ember.onerror which does rethrow is present - rsvp'] = function (assert) {\n assert.expect(2);\n\n var thrown = new Error('the error');\n (0, _errorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n throw error;\n });\n\n window.onerror = function (message) {\n assert.pushResult({\n result: /the error/.test(message),\n actual: message,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n new _rsvp.default.Promise(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n });\n };\n\n _class.prototype['@test errors in promise constructor when Ember.onerror which does not rethrow is present (Ember.testing = false) - rsvp'] = function (assert) {\n assert.expect(1);\n\n (0, _debug.setTesting)(false);\n var thrown = new Error('the error');\n (0, _errorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n });\n\n new _rsvp.default.Promise(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n });\n };\n\n _class.prototype['@test errors in promise constructor when Ember.onerror which does rethrow is present (Ember.testing = false) - rsvp'] = function (assert) {\n assert.expect(2);\n\n (0, _debug.setTesting)(false);\n var thrown = new Error('the error');\n (0, _errorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n throw error;\n });\n\n window.onerror = function (message) {\n assert.pushResult({\n result: /the error/.test(message),\n actual: message,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n new _rsvp.default.Promise(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n });\n };\n\n _class.prototype['@test errors in promise .then callback when Ember.onerror which does not rethrow is present - rsvp'] = function (assert) {\n assert.expect(1);\n\n var thrown = new Error('the error');\n (0, _errorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n });\n\n _rsvp.default.resolve().then(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n });\n };\n\n _class.prototype['@test errors in promise .then callback when Ember.onerror which does rethrow is present - rsvp'] = function (assert) {\n assert.expect(2);\n\n var thrown = new Error('the error');\n (0, _errorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n throw error;\n });\n\n window.onerror = function (message) {\n assert.pushResult({\n result: /the error/.test(message),\n actual: message,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n _rsvp.default.resolve().then(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n });\n };\n\n _class.prototype['@test errors in promise .then callback when Ember.onerror which does not rethrow is present (Ember.testing = false) - rsvp'] = function (assert) {\n assert.expect(1);\n\n (0, _debug.setTesting)(false);\n var thrown = new Error('the error');\n (0, _errorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n });\n\n _rsvp.default.resolve().then(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n });\n };\n\n _class.prototype['@test errors in promise .then callback when Ember.onerror which does rethrow is present (Ember.testing = false) - rsvp'] = function (assert) {\n assert.expect(2);\n\n (0, _debug.setTesting)(false);\n var thrown = new Error('the error');\n (0, _errorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n throw error;\n });\n\n window.onerror = function (message) {\n assert.pushResult({\n result: /the error/.test(message),\n actual: message,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n _rsvp.default.resolve().then(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n });\n };\n\n _class.prototype['@test errors in async promise .then callback when Ember.onerror which does not rethrow is present - rsvp'] = function (assert) {\n assert.expect(1);\n\n var thrown = new Error('the error');\n (0, _errorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n });\n\n new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n }).then(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 20);\n });\n };\n\n _class.prototype['@test errors in async promise .then callback when Ember.onerror which does rethrow is present - rsvp'] = function (assert) {\n assert.expect(2);\n\n var thrown = new Error('the error');\n (0, _errorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n throw error;\n });\n\n window.onerror = function (message) {\n assert.pushResult({\n result: /the error/.test(message),\n actual: message,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n }).then(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 20);\n });\n };\n\n _class.prototype['@test errors in async promise .then callback when Ember.onerror which does not rethrow is present (Ember.testing = false) - rsvp'] = function (assert) {\n assert.expect(1);\n\n (0, _debug.setTesting)(false);\n var thrown = new Error('the error');\n (0, _errorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n });\n\n new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n }).then(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 20);\n });\n };\n\n _class.prototype['@test errors in async promise .then callback when Ember.onerror which does rethrow is present (Ember.testing = false) - rsvp'] = function (assert) {\n assert.expect(2);\n\n (0, _debug.setTesting)(false);\n var thrown = new Error('the error');\n (0, _errorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n throw error;\n });\n\n window.onerror = function (message) {\n assert.pushResult({\n result: /the error/.test(message),\n actual: message,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n }).then(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 20);\n });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember/tests/helpers/helper_registration_test', ['ember-babel', 'internal-test-helpers', '@ember/controller', '@ember/service', '@ember/-internals/glimmer'], function (_emberBabel, _internalTestHelpers, _controller, _service, _glimmer) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Application Lifecycle - Helper Registration', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Unbound dashed helpers registered on the container can be late-invoked'] = function testUnboundDashedHelpersRegisteredOnTheContainerCanBeLateInvoked(assert) {\n var _this2 = this;\n\n this.addTemplate('application', '
{{x-borf}} {{x-borf \\'YES\\'}}
');\n\n var myHelper = (0, _glimmer.helper)(function (params) {\n return params[0] || 'BORF';\n });\n this.application.register('helper:x-borf', myHelper);\n\n return this.visit('/').then(function () {\n assert.equal(_this2.$('#wrapper').text(), 'BORF YES', 'The helper was invoked from the container');\n });\n };\n\n _class.prototype['@test Bound helpers registered on the container can be late-invoked'] = function testBoundHelpersRegisteredOnTheContainerCanBeLateInvoked(assert) {\n var _this3 = this;\n\n this.addTemplate('application', '
{{x-reverse}} {{x-reverse foo}}
');\n\n this.add('controller:application', _controller.default.extend({\n foo: 'alex'\n }));\n\n this.application.register('helper:x-reverse', (0, _glimmer.helper)(function (_ref) {\n var value = _ref[0];\n\n return value ? value.split('').reverse().join('') : '--';\n }));\n\n return this.visit('/').then(function () {\n assert.equal(_this3.$('#wrapper').text(), '-- xela', 'The bound helper was invoked from the container');\n });\n };\n\n _class.prototype['@test Undashed helpers registered on the container can be invoked'] = function testUndashedHelpersRegisteredOnTheContainerCanBeInvoked(assert) {\n var _this4 = this;\n\n this.addTemplate('application', '
{{omg}}|{{yorp \\'boo\\'}}|{{yorp \\'ya\\'}}
');\n\n this.application.register('helper:omg', (0, _glimmer.helper)(function () {\n return 'OMG';\n }));\n\n this.application.register('helper:yorp', (0, _glimmer.helper)(function (_ref2) {\n var value = _ref2[0];\n return value;\n }));\n\n return this.visit('/').then(function () {\n assert.equal(_this4.$('#wrapper').text(), 'OMG|boo|ya', 'The helper was invoked from the container');\n });\n };\n\n _class.prototype['@test Helpers can receive injections'] = function testHelpersCanReceiveInjections(assert) {\n this.addTemplate('application', '
{{full-name}}
');\n\n var serviceCalled = false;\n\n this.add('service:name-builder', _service.default.extend({\n build: function () {\n serviceCalled = true;\n }\n }));\n\n this.add('helper:full-name', _glimmer.Helper.extend({\n nameBuilder: (0, _service.inject)('name-builder'),\n compute: function () {\n this.get('nameBuilder').build();\n }\n }));\n\n return this.visit('/').then(function () {\n assert.ok(serviceCalled, 'service was injected, method called');\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/helpers/link_to_test', ['ember-babel', 'internal-test-helpers', '@ember/controller', '@ember/-internals/runtime', '@ember/-internals/metal', '@ember/instrumentation', '@ember/-internals/routing'], function (_emberBabel, _internalTestHelpers, _controller, _runtime, _metal, _instrumentation, _routing) {\n 'use strict';\n\n // IE includes the host name\n function normalizeUrl(url) {\n return url.replace(/https?:\\/\\/[^\\/]+/, '');\n }\n\n function shouldNotBeActive(assert, element) {\n checkActive(assert, element, false);\n }\n\n function shouldBeActive(assert, element) {\n checkActive(assert, element, true);\n }\n\n function checkActive(assert, element, active) {\n var classList = element.attr('class');\n assert.equal(classList.indexOf('active') > -1, active, element + ' active should be ' + active);\n }\n\n (0, _internalTestHelpers.moduleFor)('The {{link-to}} helper - basic tests', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.call(this));\n\n _this.router.map(function () {\n this.route('about');\n });\n\n _this.addTemplate('index', '\\n

Home

\\n {{#link-to \\'about\\' id=\\'about-link\\'}}About{{/link-to}}\\n {{#link-to \\'index\\' id=\\'self-link\\'}}Self{{/link-to}}\\n ');\n _this.addTemplate('about', '\\n

About

\\n {{#link-to \\'index\\' id=\\'home-link\\'}}Home{{/link-to}}\\n {{#link-to \\'about\\' id=\\'self-link\\'}}Self{{/link-to}}\\n ');\n return _this;\n }\n\n _class.prototype['@test The {{link-to}} helper moves into the named route'] = function testTheLinkToHelperMovesIntoTheNamedRoute(assert) {\n var _this2 = this;\n\n return this.visit('/').then(function () {\n assert.equal(_this2.$('h3.home').length, 1, 'The home template was rendered');\n assert.equal(_this2.$('#self-link.active').length, 1, 'The self-link was rendered with active class');\n assert.equal(_this2.$('#about-link:not(.active)').length, 1, 'The other link was rendered without active class');\n\n return _this2.click('#about-link');\n }).then(function () {\n assert.equal(_this2.$('h3.about').length, 1, 'The about template was rendered');\n assert.equal(_this2.$('#self-link.active').length, 1, 'The self-link was rendered with active class');\n assert.equal(_this2.$('#home-link:not(.active)').length, 1, 'The other link was rendered without active class');\n });\n };\n\n _class.prototype['@test the {{link-to}} helper doesn\\'t add an href when the tagName isn\\'t \\'a\\''] = function (assert) {\n var _this3 = this;\n\n this.addTemplate('index', '\\n {{#link-to \\'about\\' id=\\'about-link\\' tagName=\\'div\\'}}About{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assert.equal(_this3.$('#about-link').attr('href'), undefined, 'there is no href attribute');\n });\n };\n\n _class.prototype['@test the {{link-to}} applies a \\'disabled\\' class when disabled'] = function (assert) {\n var _this4 = this;\n\n this.addTemplate('index', '\\n {{#link-to \"about\" id=\"about-link-static\" disabledWhen=\"shouldDisable\"}}About{{/link-to}}\\n {{#link-to \"about\" id=\"about-link-dynamic\" disabledWhen=dynamicDisabledWhen}}About{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n shouldDisable: true,\n dynamicDisabledWhen: 'shouldDisable'\n }));\n\n return this.visit('/').then(function () {\n assert.equal(_this4.$('#about-link-static.disabled').length, 1, 'The static link is disabled when its disabledWhen is true');\n assert.equal(_this4.$('#about-link-dynamic.disabled').length, 1, 'The dynamic link is disabled when its disabledWhen is true');\n\n var controller = _this4.applicationInstance.lookup('controller:index');\n _this4.runTask(function () {\n return controller.set('dynamicDisabledWhen', false);\n });\n\n assert.equal(_this4.$('#about-link-dynamic.disabled').length, 0, 'The dynamic link is re-enabled when its disabledWhen becomes false');\n });\n };\n\n _class.prototype['@test the {{link-to}} doesn\\'t apply a \\'disabled\\' class if disabledWhen is not provided'] = function (assert) {\n var _this5 = this;\n\n this.addTemplate('index', '{{#link-to \"about\" id=\"about-link\"}}About{{/link-to}}');\n\n return this.visit('/').then(function () {\n assert.ok(!_this5.$('#about-link').hasClass('disabled'), 'The link is not disabled if disabledWhen not provided');\n });\n };\n\n _class.prototype['@test the {{link-to}} helper supports a custom disabledClass'] = function (assert) {\n var _this6 = this;\n\n this.addTemplate('index', '\\n {{#link-to \"about\" id=\"about-link\" disabledWhen=true disabledClass=\"do-not-want\"}}About{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assert.equal(_this6.$('#about-link.do-not-want').length, 1, 'The link can apply a custom disabled class');\n });\n };\n\n _class.prototype['@test the {{link-to}} helper supports a custom disabledClass set via bound param'] = function (assert) {\n var _this7 = this;\n\n this.addTemplate('index', '\\n {{#link-to \"about\" id=\"about-link\" disabledWhen=true disabledClass=disabledClass}}About{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n disabledClass: 'do-not-want'\n }));\n\n return this.visit('/').then(function () {\n assert.equal(_this7.$('#about-link.do-not-want').length, 1, 'The link can apply a custom disabled class via bound param');\n });\n };\n\n _class.prototype['@test the {{link-to}} helper does not respond to clicks when disabledWhen'] = function (assert) {\n var _this8 = this;\n\n this.addTemplate('index', '\\n {{#link-to \"about\" id=\"about-link\" disabledWhen=true}}About{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n return _this8.click('#about-link');\n }).then(function () {\n assert.equal(_this8.$('h3.about').length, 0, 'Transitioning did not occur');\n });\n };\n\n _class.prototype['@test the {{link-to}} helper does not respond to clicks when disabled'] = function (assert) {\n var _this9 = this;\n\n this.addTemplate('index', '\\n {{#link-to \"about\" id=\"about-link\" disabled=true}}About{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n return _this9.click('#about-link');\n }).then(function () {\n assert.equal(_this9.$('h3.about').length, 0, 'Transitioning did not occur');\n });\n };\n\n _class.prototype['@test the {{link-to}} helper responds to clicks according to its disabledWhen bound param'] = function (assert) {\n var _this10 = this;\n\n this.addTemplate('index', '\\n {{#link-to \"about\" id=\"about-link\" disabledWhen=disabledWhen}}About{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n disabledWhen: true\n }));\n\n return this.visit('/').then(function () {\n return _this10.click('#about-link');\n }).then(function () {\n assert.equal(_this10.$('h3.about').length, 0, 'Transitioning did not occur');\n\n var controller = _this10.applicationInstance.lookup('controller:index');\n controller.set('disabledWhen', false);\n\n return _this10.runLoopSettled();\n }).then(function () {\n return _this10.click('#about-link');\n }).then(function () {\n assert.equal(_this10.$('h3.about').length, 1, 'Transitioning did occur when disabledWhen became false');\n });\n };\n\n _class.prototype['@test The {{link-to}} helper supports a custom activeClass'] = function (assert) {\n var _this11 = this;\n\n this.addTemplate('index', '\\n

Home

\\n {{#link-to \\'about\\' id=\\'about-link\\'}}About{{/link-to}}\\n {{#link-to \\'index\\' id=\\'self-link\\' activeClass=\\'zomg-active\\'}}Self{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assert.equal(_this11.$('h3.home').length, 1, 'The home template was rendered');\n assert.equal(_this11.$('#self-link.zomg-active').length, 1, 'The self-link was rendered with active class');\n assert.equal(_this11.$('#about-link:not(.active)').length, 1, 'The other link was rendered without active class');\n });\n };\n\n _class.prototype['@test The {{link-to}} helper supports a custom activeClass from a bound param'] = function (assert) {\n var _this12 = this;\n\n this.addTemplate('index', '\\n

Home

\\n {{#link-to \\'about\\' id=\\'about-link\\'}}About{{/link-to}}\\n {{#link-to \\'index\\' id=\\'self-link\\' activeClass=activeClass}}Self{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n activeClass: 'zomg-active'\n }));\n\n return this.visit('/').then(function () {\n assert.equal(_this12.$('h3.home').length, 1, 'The home template was rendered');\n assert.equal(_this12.$('#self-link.zomg-active').length, 1, 'The self-link was rendered with active class');\n assert.equal(_this12.$('#about-link:not(.active)').length, 1, 'The other link was rendered without active class');\n });\n };\n\n _class.prototype['@test The {{link-to}} helper supports \\'classNameBindings\\' with custom values [GH #11699]'] = function (assert) {\n var _this13 = this;\n\n this.addTemplate('index', '\\n

Home

\\n {{#link-to \\'about\\' id=\\'about-link\\' classNameBindings=\\'foo:foo-is-true:foo-is-false\\'}}About{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n foo: false\n }));\n\n return this.visit('/').then(function () {\n assert.equal(_this13.$('#about-link.foo-is-false').length, 1, 'The about-link was rendered with the falsy class');\n\n var controller = _this13.applicationInstance.lookup('controller:index');\n _this13.runTask(function () {\n return controller.set('foo', true);\n });\n\n assert.equal(_this13.$('#about-link.foo-is-true').length, 1, 'The about-link was rendered with the truthy class after toggling the property');\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('The {{link-to}} helper - location hooks', function (_ApplicationTestCase2) {\n (0, _emberBabel.inherits)(_class2, _ApplicationTestCase2);\n\n function _class2() {\n\n var _this14 = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase2.call(this));\n\n _this14.updateCount = 0;\n _this14.replaceCount = 0;\n\n var testContext = _this14;\n _this14.add('location:none', _routing.NoneLocation.extend({\n setURL: function () {\n testContext.updateCount++;\n return this._super.apply(this, arguments);\n },\n replaceURL: function () {\n testContext.replaceCount++;\n return this._super.apply(this, arguments);\n }\n }));\n\n _this14.router.map(function () {\n this.route('about');\n });\n\n _this14.addTemplate('index', '\\n

Home

\\n {{#link-to \\'about\\' id=\\'about-link\\'}}About{{/link-to}}\\n {{#link-to \\'index\\' id=\\'self-link\\'}}Self{{/link-to}}\\n ');\n _this14.addTemplate('about', '\\n

About

\\n {{#link-to \\'index\\' id=\\'home-link\\'}}Home{{/link-to}}\\n {{#link-to \\'about\\' id=\\'self-link\\'}}Self{{/link-to}}\\n ');\n return _this14;\n }\n\n _class2.prototype.visit = function visit() {\n var _ApplicationTestCase3,\n _this15 = this;\n\n return (_ApplicationTestCase3 = _ApplicationTestCase2.prototype.visit).call.apply(_ApplicationTestCase3, [this].concat(Array.prototype.slice.call(arguments))).then(function () {\n _this15.updateCountAfterVisit = _this15.updateCount;\n _this15.replaceCountAfterVisit = _this15.replaceCount;\n });\n };\n\n _class2.prototype['@test The {{link-to}} helper supports URL replacement'] = function testTheLinkToHelperSupportsURLReplacement(assert) {\n var _this16 = this;\n\n this.addTemplate('index', '\\n

Home

\\n {{#link-to \\'about\\' id=\\'about-link\\' replace=true}}About{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n return _this16.click('#about-link');\n }).then(function () {\n assert.equal(_this16.updateCount, _this16.updateCountAfterVisit, 'setURL should not be called');\n assert.equal(_this16.replaceCount, _this16.replaceCountAfterVisit + 1, 'replaceURL should be called once');\n });\n };\n\n _class2.prototype['@test The {{link-to}} helper supports URL replacement via replace=boundTruthyThing'] = function testTheLinkToHelperSupportsURLReplacementViaReplaceBoundTruthyThing(assert) {\n var _this17 = this;\n\n this.addTemplate('index', '\\n

Home

\\n {{#link-to \\'about\\' id=\\'about-link\\' replace=boundTruthyThing}}About{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n boundTruthyThing: true\n }));\n\n return this.visit('/').then(function () {\n return _this17.click('#about-link');\n }).then(function () {\n assert.equal(_this17.updateCount, _this17.updateCountAfterVisit, 'setURL should not be called');\n assert.equal(_this17.replaceCount, _this17.replaceCountAfterVisit + 1, 'replaceURL should be called once');\n });\n };\n\n _class2.prototype['@test The {{link-to}} helper supports setting replace=boundFalseyThing'] = function testTheLinkToHelperSupportsSettingReplaceBoundFalseyThing(assert) {\n var _this18 = this;\n\n this.addTemplate('index', '\\n

Home

\\n {{#link-to \\'about\\' id=\\'about-link\\' replace=boundFalseyThing}}About{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n boundFalseyThing: false\n }));\n\n return this.visit('/').then(function () {\n return _this18.click('#about-link');\n }).then(function () {\n assert.equal(_this18.updateCount, _this18.updateCountAfterVisit + 1, 'setURL should be called');\n assert.equal(_this18.replaceCount, _this18.replaceCountAfterVisit, 'replaceURL should not be called');\n });\n };\n\n return _class2;\n }(_internalTestHelpers.ApplicationTestCase));\n\n if (false /* EMBER_IMPROVED_INSTRUMENTATION */) {\n (0, _internalTestHelpers.moduleFor)('The {{link-to}} helper with EMBER_IMPROVED_INSTRUMENTATION', function (_ApplicationTestCase4) {\n (0, _emberBabel.inherits)(_class3, _ApplicationTestCase4);\n\n function _class3() {\n\n var _this19 = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase4.call(this));\n\n _this19.router.map(function () {\n this.route('about');\n });\n\n _this19.addTemplate('index', '\\n

Home

\\n {{#link-to \\'about\\' id=\\'about-link\\'}}About{{/link-to}}\\n {{#link-to \\'index\\' id=\\'self-link\\'}}Self{{/link-to}}\\n ');\n _this19.addTemplate('about', '\\n

About

\\n {{#link-to \\'index\\' id=\\'home-link\\'}}Home{{/link-to}}\\n {{#link-to \\'about\\' id=\\'self-link\\'}}Self{{/link-to}}\\n ');\n return _this19;\n }\n\n _class3.prototype.beforeEach = function beforeEach() {\n return this.visit('/');\n };\n\n _class3.prototype.afterEach = function afterEach() {\n (0, _instrumentation.reset)();\n\n return _ApplicationTestCase4.prototype.afterEach.call(this);\n };\n\n _class3.prototype['@test The {{link-to}} helper fires an interaction event'] = function testTheLinkToHelperFiresAnInteractionEvent(assert) {\n assert.expect(2);\n\n (0, _instrumentation.subscribe)('interaction.link-to', {\n before: function () {\n assert.ok(true, 'instrumentation subscriber was called');\n },\n after: function () {\n assert.ok(true, 'instrumentation subscriber was called');\n }\n });\n\n return this.click('#about-link');\n };\n\n _class3.prototype['@test The {{link-to}} helper interaction event includes the route name'] = function testTheLinkToHelperInteractionEventIncludesTheRouteName(assert) {\n assert.expect(2);\n\n (0, _instrumentation.subscribe)('interaction.link-to', {\n before: function (name, timestamp, _ref) {\n var routeName = _ref.routeName;\n\n assert.equal(routeName, 'about', 'instrumentation subscriber was passed route name');\n },\n after: function (name, timestamp, _ref2) {\n var routeName = _ref2.routeName;\n\n assert.equal(routeName, 'about', 'instrumentation subscriber was passed route name');\n }\n });\n\n return this.click('#about-link');\n };\n\n _class3.prototype['@test The {{link-to}} helper interaction event includes the transition in the after hook'] = function testTheLinkToHelperInteractionEventIncludesTheTransitionInTheAfterHook(assert) {\n assert.expect(1);\n\n (0, _instrumentation.subscribe)('interaction.link-to', {\n before: function () {},\n after: function (name, timestamp, _ref3) {\n var transition = _ref3.transition;\n\n assert.equal(transition.targetName, 'about', 'instrumentation subscriber was passed route name');\n }\n });\n\n return this.click('#about-link');\n };\n\n return _class3;\n }(_internalTestHelpers.ApplicationTestCase));\n }\n\n (0, _internalTestHelpers.moduleFor)('The {{link-to}} helper - nested routes and link-to arguments', function (_ApplicationTestCase5) {\n (0, _emberBabel.inherits)(_class4, _ApplicationTestCase5);\n\n function _class4() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase5.apply(this, arguments));\n }\n\n _class4.prototype['@test The {{link-to}} helper supports leaving off .index for nested routes'] = function testTheLinkToHelperSupportsLeavingOffIndexForNestedRoutes(assert) {\n var _this21 = this;\n\n this.router.map(function () {\n this.route('about', function () {\n this.route('item');\n });\n });\n\n this.addTemplate('about', '

About

{{outlet}}');\n this.addTemplate('about.index', '
Index
');\n this.addTemplate('about.item', '
{{#link-to \\'about\\'}}About{{/link-to}}
');\n\n return this.visit('/about/item').then(function () {\n assert.equal(normalizeUrl(_this21.$('#item a').attr('href')), '/about');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper supports custom, nested, current-when'] = function (assert) {\n var _this22 = this;\n\n this.router.map(function () {\n this.route('index', { path: '/' }, function () {\n this.route('about');\n });\n\n this.route('item');\n });\n\n this.addTemplate('index', '

Home

{{outlet}}');\n this.addTemplate('index.about', '\\n {{#link-to \\'item\\' id=\\'other-link\\' current-when=\\'index\\'}}ITEM{{/link-to}}\\n ');\n\n return this.visit('/about').then(function () {\n assert.equal(_this22.$('#other-link.active').length, 1, 'The link is active since current-when is a parent route');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper does not disregard current-when when it is given explicitly for a route'] = function (assert) {\n var _this23 = this;\n\n this.router.map(function () {\n this.route('index', { path: '/' }, function () {\n this.route('about');\n });\n\n this.route('items', function () {\n this.route('item');\n });\n });\n\n this.addTemplate('index', '

Home

{{outlet}}');\n this.addTemplate('index.about', '\\n {{#link-to \\'items\\' id=\\'other-link\\' current-when=\\'index\\'}}ITEM{{/link-to}}\\n ');\n\n return this.visit('/about').then(function () {\n assert.equal(_this23.$('#other-link.active').length, 1, 'The link is active when current-when is given for explicitly for a route');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper does not disregard current-when when it is set via a bound param'] = function testTheLinkToHelperDoesNotDisregardCurrentWhenWhenItIsSetViaABoundParam(assert) {\n var _this24 = this;\n\n this.router.map(function () {\n this.route('index', { path: '/' }, function () {\n this.route('about');\n });\n\n this.route('items', function () {\n this.route('item');\n });\n });\n\n this.add('controller:index.about', _controller.default.extend({\n currentWhen: 'index'\n }));\n\n this.addTemplate('index', '

Home

{{outlet}}');\n this.addTemplate('index.about', '{{#link-to \\'items\\' id=\\'other-link\\' current-when=currentWhen}}ITEM{{/link-to}}');\n\n return this.visit('/about').then(function () {\n assert.equal(_this24.$('#other-link.active').length, 1, 'The link is active when current-when is given for explicitly for a route');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper supports multiple current-when routes'] = function testTheLinkToHelperSupportsMultipleCurrentWhenRoutes(assert) {\n var _this25 = this;\n\n this.router.map(function () {\n this.route('index', { path: '/' }, function () {\n this.route('about');\n });\n this.route('item');\n this.route('foo');\n });\n\n this.addTemplate('index', '

Home

{{outlet}}');\n this.addTemplate('index.about', '{{#link-to \\'item\\' id=\\'link1\\' current-when=\\'item index\\'}}ITEM{{/link-to}}');\n this.addTemplate('item', '{{#link-to \\'item\\' id=\\'link2\\' current-when=\\'item index\\'}}ITEM{{/link-to}}');\n this.addTemplate('foo', '{{#link-to \\'item\\' id=\\'link3\\' current-when=\\'item index\\'}}ITEM{{/link-to}}');\n\n return this.visit('/about').then(function () {\n assert.equal(_this25.$('#link1.active').length, 1, 'The link is active since current-when contains the parent route');\n\n return _this25.visit('/item');\n }).then(function () {\n assert.equal(_this25.$('#link2.active').length, 1, 'The link is active since you are on the active route');\n\n return _this25.visit('/foo');\n }).then(function () {\n assert.equal(_this25.$('#link3.active').length, 0, 'The link is not active since current-when does not contain the active route');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper supports boolean values for current-when'] = function testTheLinkToHelperSupportsBooleanValuesForCurrentWhen(assert) {\n var _this26 = this;\n\n this.router.map(function () {\n this.route('index', { path: '/' }, function () {\n this.route('about');\n });\n this.route('item');\n });\n\n this.addTemplate('index.about', '\\n {{#link-to \\'index\\' id=\\'index-link\\' current-when=isCurrent}}index{{/link-to}}\\n {{#link-to \\'item\\' id=\\'about-link\\' current-when=true}}ITEM{{/link-to}}\\n ');\n\n this.add('controller:index.about', _controller.default.extend({ isCurrent: false }));\n\n return this.visit('/about').then(function () {\n assert.ok(_this26.$('#about-link').hasClass('active'), 'The link is active since current-when is true');\n assert.notOk(_this26.$('#index-link').hasClass('active'), 'The link is not active since current-when is false');\n\n var controller = _this26.applicationInstance.lookup('controller:index.about');\n _this26.runTask(function () {\n return controller.set('isCurrent', true);\n });\n\n assert.ok(_this26.$('#index-link').hasClass('active'), 'The link is active since current-when is true');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper defaults to bubbling'] = function testTheLinkToHelperDefaultsToBubbling(assert) {\n var _this27 = this;\n\n this.addTemplate('about', '\\n
\\n {{#link-to \\'about.contact\\' id=\\'about-contact\\'}}About{{/link-to}}\\n
\\n {{outlet}}\\n ');\n this.addTemplate('about.contact', '\\n

Contact

\\n ');\n\n this.router.map(function () {\n this.route('about', function () {\n this.route('contact');\n });\n });\n\n var hidden = 0;\n\n this.add('route:about', _routing.Route.extend({\n actions: {\n hide: function () {\n hidden++;\n }\n }\n }));\n\n return this.visit('/about').then(function () {\n return _this27.click('#about-contact');\n }).then(function () {\n assert.equal(_this27.$('#contact').text(), 'Contact', 'precond - the link worked');\n\n assert.equal(hidden, 1, 'The link bubbles');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper supports bubbles=false'] = function (assert) {\n var _this28 = this;\n\n this.addTemplate('about', '\\n
\\n {{#link-to \\'about.contact\\' id=\\'about-contact\\' bubbles=false}}\\n About\\n {{/link-to}}\\n
\\n {{outlet}}\\n ');\n this.addTemplate('about.contact', '

Contact

');\n\n this.router.map(function () {\n this.route('about', function () {\n this.route('contact');\n });\n });\n\n var hidden = 0;\n\n this.add('route:about', _routing.Route.extend({\n actions: {\n hide: function () {\n hidden++;\n }\n }\n }));\n\n return this.visit('/about').then(function () {\n return _this28.click('#about-contact');\n }).then(function () {\n assert.equal(_this28.$('#contact').text(), 'Contact', 'precond - the link worked');\n\n assert.equal(hidden, 0, \"The link didn't bubble\");\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper supports bubbles=boundFalseyThing'] = function (assert) {\n var _this29 = this;\n\n this.addTemplate('about', '\\n
\\n {{#link-to \\'about.contact\\' id=\\'about-contact\\' bubbles=boundFalseyThing}}\\n About\\n {{/link-to}}\\n
\\n {{outlet}}\\n ');\n this.addTemplate('about.contact', '

Contact

');\n\n this.add('controller:about', _controller.default.extend({\n boundFalseyThing: false\n }));\n\n this.router.map(function () {\n this.route('about', function () {\n this.route('contact');\n });\n });\n\n var hidden = 0;\n\n this.add('route:about', _routing.Route.extend({\n actions: {\n hide: function () {\n hidden++;\n }\n }\n }));\n\n return this.visit('/about').then(function () {\n return _this29.click('#about-contact');\n }).then(function () {\n assert.equal(_this29.$('#contact').text(), 'Contact', 'precond - the link worked');\n assert.equal(hidden, 0, \"The link didn't bubble\");\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper moves into the named route with context'] = function (assert) {\n var _this30 = this;\n\n this.router.map(function () {\n this.route('about');\n this.route('item', { path: '/item/:id' });\n });\n\n this.addTemplate('about', '\\n

List

\\n
    \\n {{#each model as |person|}}\\n
  • \\n {{#link-to \\'item\\' person id=person.id}}\\n {{person.name}}\\n {{/link-to}}\\n
  • \\n {{/each}}\\n
\\n {{#link-to \\'index\\' id=\\'home-link\\'}}Home{{/link-to}}\\n ');\n\n this.addTemplate('item', '\\n

Item

\\n

{{model.name}}

\\n {{#link-to \\'index\\' id=\\'home-link\\'}}Home{{/link-to}}\\n ');\n\n this.addTemplate('index', '\\n

Home

\\n {{#link-to \\'about\\' id=\\'about-link\\'}}About{{/link-to}}\\n ');\n\n this.add('route:about', _routing.Route.extend({\n model: function () {\n return [{ id: 'yehuda', name: 'Yehuda Katz' }, { id: 'tom', name: 'Tom Dale' }, { id: 'erik', name: 'Erik Brynroflsson' }];\n }\n }));\n\n return this.visit('/about').then(function () {\n assert.equal(_this30.$('h3.list').length, 1, 'The home template was rendered');\n assert.equal(normalizeUrl(_this30.$('#home-link').attr('href')), '/', 'The home link points back at /');\n\n return _this30.click('#yehuda');\n }).then(function () {\n assert.equal(_this30.$('h3.item').length, 1, 'The item template was rendered');\n assert.equal(_this30.$('p').text(), 'Yehuda Katz', 'The name is correct');\n\n return _this30.click('#home-link');\n }).then(function () {\n return _this30.click('#about-link');\n }).then(function () {\n assert.equal(normalizeUrl(_this30.$('li a#yehuda').attr('href')), '/item/yehuda');\n assert.equal(normalizeUrl(_this30.$('li a#tom').attr('href')), '/item/tom');\n assert.equal(normalizeUrl(_this30.$('li a#erik').attr('href')), '/item/erik');\n\n return _this30.click('#erik');\n }).then(function () {\n assert.equal(_this30.$('h3.item').length, 1, 'The item template was rendered');\n assert.equal(_this30.$('p').text(), 'Erik Brynroflsson', 'The name is correct');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper binds some anchor html tag common attributes'] = function (assert) {\n var _this31 = this;\n\n this.addTemplate('index', '\\n

Home

\\n {{#link-to \\'index\\' id=\\'self-link\\' title=\\'title-attr\\' rel=\\'rel-attr\\' tabindex=\\'-1\\'}}\\n Self\\n {{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n var link = _this31.$('#self-link');\n assert.equal(link.attr('title'), 'title-attr', 'The self-link contains title attribute');\n assert.equal(link.attr('rel'), 'rel-attr', 'The self-link contains rel attribute');\n assert.equal(link.attr('tabindex'), '-1', 'The self-link contains tabindex attribute');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper supports \\'target\\' attribute'] = function (assert) {\n var _this32 = this;\n\n this.addTemplate('index', '\\n

Home

\\n {{#link-to \\'index\\' id=\\'self-link\\' target=\\'_blank\\'}}Self{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n var link = _this32.$('#self-link');\n assert.equal(link.attr('target'), '_blank', 'The self-link contains `target` attribute');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper supports \\'target\\' attribute specified as a bound param'] = function (assert) {\n var _this33 = this;\n\n this.addTemplate('index', '

Home

{{#link-to \\'index\\' id=\\'self-link\\' target=boundLinkTarget}}Self{{/link-to}}');\n\n this.add('controller:index', _controller.default.extend({\n boundLinkTarget: '_blank'\n }));\n\n return this.visit('/').then(function () {\n var link = _this33.$('#self-link');\n assert.equal(link.attr('target'), '_blank', 'The self-link contains `target` attribute');\n });\n };\n\n _class4.prototype['@test the {{link-to}} helper calls preventDefault'] = function (assert) {\n var _this34 = this;\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.addTemplate('index', '\\n {{#link-to \\'about\\' id=\\'about-link\\'}}About{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assertNav({ prevented: true }, function () {\n return _this34.$('#about-link').click();\n }, assert);\n });\n };\n\n _class4.prototype['@test the {{link-to}} helper does not call preventDefault if \\'preventDefault=false\\' is passed as an option'] = function (assert) {\n var _this35 = this;\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.addTemplate('index', '\\n {{#link-to \\'about\\' id=\\'about-link\\' preventDefault=false}}About{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assertNav({ prevented: false }, function () {\n return _this35.$('#about-link').trigger('click');\n }, assert);\n });\n };\n\n _class4.prototype['@test the {{link-to}} helper does not call preventDefault if \\'preventDefault=boundFalseyThing\\' is passed as an option'] = function (assert) {\n var _this36 = this;\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.addTemplate('index', '\\n {{#link-to \\'about\\' id=\\'about-link\\' preventDefault=boundFalseyThing}}About{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n boundFalseyThing: false\n }));\n\n return this.visit('/').then(function () {\n assertNav({ prevented: false }, function () {\n return _this36.$('#about-link').trigger('click');\n }, assert);\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper does not call preventDefault if \\'target\\' attribute is provided'] = function (assert) {\n var _this37 = this;\n\n this.addTemplate('index', '\\n

Home

\\n {{#link-to \\'index\\' id=\\'self-link\\' target=\\'_blank\\'}}Self{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assertNav({ prevented: false }, function () {\n return _this37.$('#self-link').click();\n }, assert);\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper should preventDefault when \\'target = _self\\''] = function (assert) {\n var _this38 = this;\n\n this.addTemplate('index', '\\n

Home

\\n {{#link-to \\'index\\' id=\\'self-link\\' target=\\'_self\\'}}Self{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assertNav({ prevented: true }, function () {\n return _this38.$('#self-link').click();\n }, assert);\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper should not transition if target is not equal to _self or empty'] = function (assert) {\n var _this39 = this;\n\n this.addTemplate('index', '\\n {{#link-to \\'about\\' id=\\'about-link\\' replace=true target=\\'_blank\\'}}\\n About\\n {{/link-to}}\\n ');\n\n this.router.map(function () {\n this.route('about');\n });\n\n return this.visit('/').then(function () {\n return _this39.click('#about-link');\n }).then(function () {\n var currentRouteName = _this39.applicationInstance.lookup('controller:application').get('currentRouteName');\n assert.notEqual(currentRouteName, 'about', 'link-to should not transition if target is not equal to _self or empty');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper accepts string/numeric arguments'] = function (assert) {\n var _this40 = this;\n\n this.router.map(function () {\n this.route('filter', { path: '/filters/:filter' });\n this.route('post', { path: '/post/:post_id' });\n this.route('repo', { path: '/repo/:owner/:name' });\n });\n\n this.add('controller:filter', _controller.default.extend({\n filter: 'unpopular',\n repo: { owner: 'ember', name: 'ember.js' },\n post_id: 123\n }));\n\n this.addTemplate('filter', '\\n

{{filter}}

\\n {{#link-to \"filter\" \"unpopular\" id=\"link\"}}Unpopular{{/link-to}}\\n {{#link-to \"filter\" filter id=\"path-link\"}}Unpopular{{/link-to}}\\n {{#link-to \"post\" post_id id=\"post-path-link\"}}Post{{/link-to}}\\n {{#link-to \"post\" 123 id=\"post-number-link\"}}Post{{/link-to}}\\n {{#link-to \"repo\" repo id=\"repo-object-link\"}}Repo{{/link-to}}\\n ');\n\n return this.visit('/filters/popular').then(function () {\n assert.equal(normalizeUrl(_this40.$('#link').attr('href')), '/filters/unpopular');\n assert.equal(normalizeUrl(_this40.$('#path-link').attr('href')), '/filters/unpopular');\n assert.equal(normalizeUrl(_this40.$('#post-path-link').attr('href')), '/post/123');\n assert.equal(normalizeUrl(_this40.$('#post-number-link').attr('href')), '/post/123');\n assert.equal(normalizeUrl(_this40.$('#repo-object-link').attr('href')), '/repo/ember/ember.js');\n });\n };\n\n _class4.prototype['@test Issue 4201 - Shorthand for route.index shouldn\\'t throw errors about context arguments'] = function (assert) {\n var _this41 = this;\n\n assert.expect(2);\n this.router.map(function () {\n this.route('lobby', function () {\n this.route('index', { path: ':lobby_id' });\n this.route('list');\n });\n });\n\n this.add('route:lobby.index', _routing.Route.extend({\n model: function (params) {\n assert.equal(params.lobby_id, 'foobar');\n return params.lobby_id;\n }\n }));\n\n this.addTemplate('lobby.index', '\\n {{#link-to \\'lobby\\' \\'foobar\\' id=\\'lobby-link\\'}}Lobby{{/link-to}}\\n ');\n this.addTemplate('lobby.list', '\\n {{#link-to \\'lobby\\' \\'foobar\\' id=\\'lobby-link\\'}}Lobby{{/link-to}}\\n ');\n\n return this.visit('/lobby/list').then(function () {\n return _this41.click('#lobby-link');\n }).then(function () {\n return shouldBeActive(assert, _this41.$('#lobby-link'));\n });\n };\n\n _class4.prototype['@test Quoteless route param performs property lookup'] = function (assert) {\n var _this42 = this;\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.addTemplate('index', '\\n {{#link-to \\'index\\' id=\\'string-link\\'}}string{{/link-to}}\\n {{#link-to foo id=\\'path-link\\'}}path{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n foo: 'index'\n }));\n\n var assertEquality = function (href) {\n assert.equal(normalizeUrl(_this42.$('#string-link').attr('href')), '/');\n assert.equal(normalizeUrl(_this42.$('#path-link').attr('href')), href);\n };\n\n return this.visit('/').then(function () {\n assertEquality('/');\n\n var controller = _this42.applicationInstance.lookup('controller:index');\n _this42.runTask(function () {\n return controller.set('foo', 'about');\n });\n\n assertEquality('/about');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper refreshes href element when one of params changes'] = function (assert) {\n var _this43 = this;\n\n this.router.map(function () {\n this.route('post', { path: '/posts/:post_id' });\n });\n\n var post = { id: '1' };\n var secondPost = { id: '2' };\n\n this.addTemplate('index', '\\n {{#link-to \"post\" post id=\"post\"}}post{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend());\n\n return this.visit('/').then(function () {\n var indexController = _this43.applicationInstance.lookup('controller:index');\n _this43.runTask(function () {\n return indexController.set('post', post);\n });\n\n assert.equal(normalizeUrl(_this43.$('#post').attr('href')), '/posts/1', 'precond - Link has rendered href attr properly');\n\n _this43.runTask(function () {\n return indexController.set('post', secondPost);\n });\n\n assert.equal(_this43.$('#post').attr('href'), '/posts/2', 'href attr was updated after one of the params had been changed');\n\n _this43.runTask(function () {\n return indexController.set('post', null);\n });\n\n assert.equal(_this43.$('#post').attr('href'), '#', 'href attr becomes # when one of the arguments in nullified');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper is active when a route is active'] = function (assert) {\n var _this44 = this;\n\n this.router.map(function () {\n this.route('about', function () {\n this.route('item');\n });\n });\n\n this.addTemplate('about', '\\n
\\n {{#link-to \\'about\\' id=\\'about-link\\'}}About{{/link-to}}\\n {{#link-to \\'about.item\\' id=\\'item-link\\'}}Item{{/link-to}}\\n {{outlet}}\\n
\\n ');\n\n return this.visit('/about').then(function () {\n assert.equal(_this44.$('#about-link.active').length, 1, 'The about route link is active');\n assert.equal(_this44.$('#item-link.active').length, 0, 'The item route link is inactive');\n\n return _this44.visit('/about/item');\n }).then(function () {\n assert.equal(_this44.$('#about-link.active').length, 1, 'The about route link is active');\n assert.equal(_this44.$('#item-link.active').length, 1, 'The item route link is active');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper works in an #each\\'d array of string route names'] = function (assert) {\n var _this45 = this;\n\n this.router.map(function () {\n this.route('foo');\n this.route('bar');\n this.route('rar');\n });\n\n this.add('controller:index', _controller.default.extend({\n routeNames: (0, _runtime.A)(['foo', 'bar', 'rar']),\n route1: 'bar',\n route2: 'foo'\n }));\n\n this.addTemplate('index', '\\n {{#each routeNames as |routeName|}}\\n {{#link-to routeName}}{{routeName}}{{/link-to}}\\n {{/each}}\\n {{#each routeNames as |r|}}\\n {{#link-to r}}{{r}}{{/link-to}}\\n {{/each}}\\n {{#link-to route1}}a{{/link-to}}\\n {{#link-to route2}}b{{/link-to}}\\n ');\n\n var linksEqual = function (links, expected) {\n assert.equal(links.length, expected.length, 'Has correct number of links');\n\n var idx = void 0;\n for (idx = 0; idx < links.length; idx++) {\n var href = _this45.$(links[idx]).attr('href');\n // Old IE includes the whole hostname as well\n assert.equal(href.slice(-expected[idx].length), expected[idx], 'Expected link to be \\'' + expected[idx] + '\\', but was \\'' + href + '\\'');\n }\n };\n\n return this.visit('/').then(function () {\n linksEqual(_this45.$('a'), ['/foo', '/bar', '/rar', '/foo', '/bar', '/rar', '/bar', '/foo']);\n\n var indexController = _this45.applicationInstance.lookup('controller:index');\n _this45.runTask(function () {\n return indexController.set('route1', 'rar');\n });\n\n linksEqual(_this45.$('a'), ['/foo', '/bar', '/rar', '/foo', '/bar', '/rar', '/rar', '/foo']);\n\n _this45.runTask(function () {\n return indexController.routeNames.shiftObject();\n });\n\n linksEqual(_this45.$('a'), ['/bar', '/rar', '/bar', '/rar', '/rar', '/foo']);\n });\n };\n\n _class4.prototype['@test The non-block form {{link-to}} helper moves into the named route'] = function (assert) {\n var _this46 = this;\n\n assert.expect(3);\n this.router.map(function () {\n this.route('contact');\n });\n\n this.addTemplate('index', '\\n

Home

\\n {{link-to \\'Contact us\\' \\'contact\\' id=\\'contact-link\\'}}\\n {{#link-to \\'index\\' id=\\'self-link\\'}}Self{{/link-to}}\\n ');\n this.addTemplate('contact', '\\n

Contact

\\n {{link-to \\'Home\\' \\'index\\' id=\\'home-link\\'}}\\n {{link-to \\'Self\\' \\'contact\\' id=\\'self-link\\'}}\\n ');\n\n return this.visit('/').then(function () {\n return _this46.click('#contact-link');\n }).then(function () {\n assert.equal(_this46.$('h3.contact').length, 1, 'The contact template was rendered');\n assert.equal(_this46.$('#self-link.active').length, 1, 'The self-link was rendered with active class');\n assert.equal(_this46.$('#home-link:not(.active)').length, 1, 'The other link was rendered without active class');\n });\n };\n\n _class4.prototype['@test The non-block form {{link-to}} helper updates the link text when it is a binding'] = function (assert) {\n var _this47 = this;\n\n assert.expect(8);\n this.router.map(function () {\n this.route('contact');\n });\n\n this.add('controller:index', _controller.default.extend({\n contactName: 'Jane'\n }));\n\n this.addTemplate('index', '\\n

Home

\\n {{link-to contactName \\'contact\\' id=\\'contact-link\\'}}\\n {{#link-to \\'index\\' id=\\'self-link\\'}}Self{{/link-to}}\\n ');\n this.addTemplate('contact', '\\n

Contact

\\n {{link-to \\'Home\\' \\'index\\' id=\\'home-link\\'}}\\n {{link-to \\'Self\\' \\'contact\\' id=\\'self-link\\'}}\\n ');\n\n return this.visit('/').then(function () {\n assert.equal(_this47.$('#contact-link').text(), 'Jane', 'The link title is correctly resolved');\n\n var controller = _this47.applicationInstance.lookup('controller:index');\n _this47.runTask(function () {\n return controller.set('contactName', 'Joe');\n });\n\n assert.equal(_this47.$('#contact-link').text(), 'Joe', 'The link title is correctly updated when the bound property changes');\n\n _this47.runTask(function () {\n return controller.set('contactName', 'Robert');\n });\n\n assert.equal(_this47.$('#contact-link').text(), 'Robert', 'The link title is correctly updated when the bound property changes a second time');\n\n return _this47.click('#contact-link');\n }).then(function () {\n assert.equal(_this47.$('h3.contact').length, 1, 'The contact template was rendered');\n assert.equal(_this47.$('#self-link.active').length, 1, 'The self-link was rendered with active class');\n assert.equal(_this47.$('#home-link:not(.active)').length, 1, 'The other link was rendered without active class');\n\n return _this47.click('#home-link');\n }).then(function () {\n assert.equal(_this47.$('h3.home').length, 1, 'The index template was rendered');\n assert.equal(_this47.$('#contact-link').text(), 'Robert', 'The link title is correctly updated when the route changes');\n });\n };\n\n _class4.prototype['@test The non-block form {{link-to}} helper moves into the named route with context'] = function (assert) {\n var _this48 = this;\n\n assert.expect(5);\n\n this.router.map(function () {\n this.route('item', { path: '/item/:id' });\n });\n\n this.add('route:index', _routing.Route.extend({\n model: function () {\n return [{ id: 'yehuda', name: 'Yehuda Katz' }, { id: 'tom', name: 'Tom Dale' }, { id: 'erik', name: 'Erik Brynroflsson' }];\n }\n }));\n\n this.addTemplate('index', '\\n

Home

\\n
    \\n {{#each model as |person|}}\\n
  • \\n {{link-to person.name \\'item\\' person id=person.id}}\\n
  • \\n {{/each}}\\n
\\n ');\n this.addTemplate('item', '\\n

Item

\\n

{{model.name}}

\\n {{#link-to \\'index\\' id=\\'home-link\\'}}Home{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n return _this48.click('#yehuda');\n }).then(function () {\n assert.equal(_this48.$('h3.item').length, 1, 'The item template was rendered');\n assert.equal(_this48.$('p').text(), 'Yehuda Katz', 'The name is correct');\n\n return _this48.click('#home-link');\n }).then(function () {\n assert.equal(normalizeUrl(_this48.$('li a#yehuda').attr('href')), '/item/yehuda');\n assert.equal(normalizeUrl(_this48.$('li a#tom').attr('href')), '/item/tom');\n assert.equal(normalizeUrl(_this48.$('li a#erik').attr('href')), '/item/erik');\n });\n };\n\n _class4.prototype['@test The non-block form {{link-to}} performs property lookup'] = function (assert) {\n var _this49 = this;\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.addTemplate('index', '\\n {{link-to \\'string\\' \\'index\\' id=\\'string-link\\'}}\\n {{link-to path foo id=\\'path-link\\'}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n foo: 'index'\n }));\n\n return this.visit('/').then(function () {\n var assertEquality = function (href) {\n assert.equal(normalizeUrl(_this49.$('#string-link').attr('href')), '/');\n assert.equal(normalizeUrl(_this49.$('#path-link').attr('href')), href);\n };\n\n assertEquality('/');\n\n var controller = _this49.applicationInstance.lookup('controller:index');\n _this49.runTask(function () {\n return controller.set('foo', 'about');\n });\n\n assertEquality('/about');\n });\n };\n\n _class4.prototype['@test The non-block form {{link-to}} protects against XSS'] = function (assert) {\n var _this50 = this;\n\n this.addTemplate('application', '{{link-to display \\'index\\' id=\\'link\\'}}');\n\n this.add('controller:application', _controller.default.extend({\n display: 'blahzorz'\n }));\n\n return this.visit('/').then(function () {\n assert.equal(_this50.$('#link').text(), 'blahzorz');\n\n var controller = _this50.applicationInstance.lookup('controller:application');\n _this50.runTask(function () {\n return controller.set('display', 'BLAMMO');\n });\n\n assert.equal(_this50.$('#link').text(), 'BLAMMO');\n assert.equal(_this50.$('b').length, 0);\n });\n };\n\n _class4.prototype['@test the {{link-to}} helper throws a useful error if you invoke it wrong'] = function (assert) {\n var _this51 = this;\n\n assert.expect(1);\n\n this.router.map(function () {\n this.route('post', { path: 'post/:post_id' });\n });\n\n this.addTemplate('application', '{{#link-to \\'post\\'}}Post{{/link-to}}');\n\n assert.throws(function () {\n _this51.visit('/');\n }, /(You attempted to define a `\\{\\{link-to \"post\"\\}\\}` but did not pass the parameters required for generating its dynamic segments.|You must provide param `post_id` to `generate`)/);\n\n return this.runLoopSettled();\n };\n\n _class4.prototype['@test the {{link-to}} helper does not throw an error if its route has exited'] = function (assert) {\n var _this52 = this;\n\n assert.expect(0);\n\n this.router.map(function () {\n this.route('post', { path: 'post/:post_id' });\n });\n\n this.addTemplate('application', '\\n {{#link-to \\'index\\' id=\\'home-link\\'}}Home{{/link-to}}\\n {{#link-to \\'post\\' defaultPost id=\\'default-post-link\\'}}Default Post{{/link-to}}\\n {{#if currentPost}}\\n {{#link-to \\'post\\' currentPost id=\\'current-post-link\\'}}Current Post{{/link-to}}\\n {{/if}}\\n ');\n\n this.add('controller:application', _controller.default.extend({\n defaultPost: { id: 1 },\n postController: (0, _controller.inject)('post'),\n currentPost: (0, _metal.alias)('postController.model')\n }));\n\n this.add('controller:post', _controller.default.extend());\n\n this.add('route:post', _routing.Route.extend({\n model: function () {\n return { id: 2 };\n },\n serialize: function (model) {\n return { post_id: model.id };\n }\n }));\n\n return this.visit('/').then(function () {\n return _this52.click('#default-post-link');\n }).then(function () {\n return _this52.click('#home-link');\n }).then(function () {\n return _this52.click('#current-post-link');\n }).then(function () {\n return _this52.click('#home-link');\n });\n };\n\n _class4.prototype['@test {{link-to}} active property respects changing parent route context'] = function (assert) {\n var _this53 = this;\n\n this.router.map(function () {\n this.route('things', { path: '/things/:name' }, function () {\n this.route('other');\n });\n });\n\n this.addTemplate('application', '\\n {{link-to \\'OMG\\' \\'things\\' \\'omg\\' id=\\'omg-link\\'}}\\n {{link-to \\'LOL\\' \\'things\\' \\'lol\\' id=\\'lol-link\\'}}\\n ');\n\n return this.visit('/things/omg').then(function () {\n shouldBeActive(assert, _this53.$('#omg-link'));\n shouldNotBeActive(assert, _this53.$('#lol-link'));\n\n return _this53.visit('/things/omg/other');\n }).then(function () {\n shouldBeActive(assert, _this53.$('#omg-link'));\n shouldNotBeActive(assert, _this53.$('#lol-link'));\n });\n };\n\n _class4.prototype['@test {{link-to}} populates href with default query param values even without query-params object'] = function (assert) {\n var _this54 = this;\n\n this.add('controller:index', _controller.default.extend({\n queryParams: ['foo'],\n foo: '123'\n }));\n\n this.addTemplate('index', '{{#link-to \\'index\\' id=\\'the-link\\'}}Index{{/link-to}}');\n\n return this.visit('/').then(function () {\n assert.equal(_this54.$('#the-link').attr('href'), '/', 'link has right href');\n });\n };\n\n _class4.prototype['@test {{link-to}} populates href with default query param values with empty query-params object'] = function (assert) {\n var _this55 = this;\n\n this.add('controller:index', _controller.default.extend({\n queryParams: ['foo'],\n foo: '123'\n }));\n\n this.addTemplate('index', '\\n {{#link-to \\'index\\' (query-params) id=\\'the-link\\'}}Index{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assert.equal(_this55.$('#the-link').attr('href'), '/', 'link has right href');\n });\n };\n\n _class4.prototype['@test {{link-to}} with only query-params and a block updates when route changes'] = function (assert) {\n var _this56 = this;\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.add('controller:application', _controller.default.extend({\n queryParams: ['foo', 'bar'],\n foo: '123',\n bar: 'yes'\n }));\n\n this.addTemplate('application', '\\n {{#link-to (query-params foo=\\'456\\' bar=\\'NAW\\') id=\\'the-link\\'}}Index{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assert.equal(_this56.$('#the-link').attr('href'), '/?bar=NAW&foo=456', 'link has right href');\n\n return _this56.visit('/about');\n }).then(function () {\n assert.equal(_this56.$('#the-link').attr('href'), '/about?bar=NAW&foo=456', 'link has right href');\n });\n };\n\n _class4.prototype['@test Block-less {{link-to}} with only query-params updates when route changes'] = function (assert) {\n var _this57 = this;\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.add('controller:application', _controller.default.extend({\n queryParams: ['foo', 'bar'],\n foo: '123',\n bar: 'yes'\n }));\n\n this.addTemplate('application', '\\n {{link-to \"Index\" (query-params foo=\\'456\\' bar=\\'NAW\\') id=\\'the-link\\'}}\\n ');\n\n return this.visit('/').then(function () {\n assert.equal(_this57.$('#the-link').attr('href'), '/?bar=NAW&foo=456', 'link has right href');\n\n return _this57.visit('/about');\n }).then(function () {\n assert.equal(_this57.$('#the-link').attr('href'), '/about?bar=NAW&foo=456', 'link has right href');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper can use dynamic params'] = function (assert) {\n var _this58 = this;\n\n this.router.map(function () {\n this.route('foo', { path: 'foo/:some/:thing' });\n this.route('bar', { path: 'bar/:some/:thing/:else' });\n });\n\n this.add('controller:index', _controller.default.extend({\n init: function () {\n this._super.apply(this, arguments);\n this.dynamicLinkParams = ['foo', 'one', 'two'];\n }\n }));\n\n this.addTemplate('index', '\\n

Home

\\n {{#link-to params=dynamicLinkParams id=\"dynamic-link\"}}Dynamic{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n var link = _this58.$('#dynamic-link');\n\n assert.equal(link.attr('href'), '/foo/one/two');\n\n var controller = _this58.applicationInstance.lookup('controller:index');\n _this58.runTask(function () {\n controller.set('dynamicLinkParams', ['bar', 'one', 'two', 'three']);\n });\n\n assert.equal(link.attr('href'), '/bar/one/two/three');\n });\n };\n\n _class4.prototype['@test GJ: {{link-to}} to a parent root model hook which performs a \\'transitionTo\\' has correct active class #13256'] = function (assert) {\n var _this59 = this;\n\n assert.expect(1);\n\n this.router.map(function () {\n this.route('parent', function () {\n this.route('child');\n });\n });\n\n this.add('route:parent', _routing.Route.extend({\n afterModel: function () {\n this.transitionTo('parent.child');\n }\n }));\n\n this.addTemplate('application', '\\n {{link-to \\'Parent\\' \\'parent\\' id=\\'parent-link\\'}}\\n ');\n\n return this.visit('/').then(function () {\n return _this59.click('#parent-link');\n }).then(function () {\n shouldBeActive(assert, _this59.$('#parent-link'));\n });\n };\n\n return _class4;\n }(_internalTestHelpers.ApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('The {{link-to}} helper - loading states and warnings', function (_ApplicationTestCase6) {\n (0, _emberBabel.inherits)(_class5, _ApplicationTestCase6);\n\n function _class5() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase6.apply(this, arguments));\n }\n\n _class5.prototype['@test link-to with null/undefined dynamic parameters are put in a loading state'] = function (assert) {\n var _this61 = this;\n\n assert.expect(19);\n var warningMessage = '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.';\n\n this.router.map(function () {\n this.route('thing', { path: '/thing/:thing_id' });\n this.route('about');\n });\n\n this.addTemplate('index', '\\n {{#link-to destinationRoute routeContext loadingClass=\\'i-am-loading\\' id=\\'context-link\\'}}\\n string\\n {{/link-to}}\\n {{#link-to secondRoute loadingClass=loadingClass id=\\'static-link\\'}}\\n string\\n {{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n destinationRoute: null,\n routeContext: null,\n loadingClass: 'i-am-loading'\n }));\n\n this.add('route:about', _routing.Route.extend({\n activate: function () {\n assert.ok(true, 'About was entered');\n }\n }));\n\n function assertLinkStatus(link, url) {\n if (url) {\n assert.equal(normalizeUrl(link.attr('href')), url, 'loaded link-to has expected href');\n assert.ok(!link.hasClass('i-am-loading'), 'loaded linkComponent has no loadingClass');\n } else {\n assert.equal(normalizeUrl(link.attr('href')), '#', \"unloaded link-to has href='#'\");\n assert.ok(link.hasClass('i-am-loading'), 'loading linkComponent has loadingClass');\n }\n }\n\n var contextLink = void 0,\n staticLink = void 0,\n controller = void 0;\n\n return this.visit('/').then(function () {\n contextLink = _this61.$('#context-link');\n staticLink = _this61.$('#static-link');\n controller = _this61.applicationInstance.lookup('controller:index');\n\n assertLinkStatus(contextLink);\n assertLinkStatus(staticLink);\n\n return expectWarning(function () {\n return _this61.click(contextLink[0]);\n }, warningMessage);\n }).then(function () {\n // Set the destinationRoute (context is still null).\n _this61.runTask(function () {\n return controller.set('destinationRoute', 'thing');\n });\n assertLinkStatus(contextLink);\n\n // Set the routeContext to an id\n _this61.runTask(function () {\n return controller.set('routeContext', '456');\n });\n assertLinkStatus(contextLink, '/thing/456');\n\n // Test that 0 isn't interpreted as falsy.\n _this61.runTask(function () {\n return controller.set('routeContext', 0);\n });\n assertLinkStatus(contextLink, '/thing/0');\n\n // Set the routeContext to an object\n _this61.runTask(function () {\n controller.set('routeContext', { id: 123 });\n });\n assertLinkStatus(contextLink, '/thing/123');\n\n // Set the destinationRoute back to null.\n _this61.runTask(function () {\n return controller.set('destinationRoute', null);\n });\n assertLinkStatus(contextLink);\n\n return expectWarning(function () {\n return _this61.click(staticLink[0]);\n }, warningMessage);\n }).then(function () {\n _this61.runTask(function () {\n return controller.set('secondRoute', 'about');\n });\n assertLinkStatus(staticLink, '/about');\n\n // Click the now-active link\n return _this61.click(staticLink[0]);\n });\n };\n\n return _class5;\n }(_internalTestHelpers.ApplicationTestCase));\n\n function assertNav(options, callback, assert) {\n var nav = false;\n\n function check(event) {\n assert.equal(event.defaultPrevented, options.prevented, 'expected defaultPrevented=' + options.prevented);\n nav = true;\n event.preventDefault();\n }\n\n try {\n document.addEventListener('click', check);\n callback();\n } finally {\n document.removeEventListener('click', check);\n assert.ok(nav, 'Expected a link to be clicked');\n }\n }\n});","enifed('ember/tests/helpers/link_to_test/link_to_transitioning_classes_test', ['ember-babel', '@ember/-internals/runtime', '@ember/-internals/routing', 'internal-test-helpers'], function (_emberBabel, _runtime, _routing, _internalTestHelpers) {\n 'use strict';\n\n function assertHasClass(assert, selector, label) {\n var testLabel = selector.attr('id') + ' should have class ' + label;\n\n assert.equal(selector.hasClass(label), true, testLabel);\n }\n\n function assertHasNoClass(assert, selector, label) {\n var testLabel = selector.attr('id') + ' should not have class ' + label;\n\n assert.equal(selector.hasClass(label), false, testLabel);\n }\n\n (0, _internalTestHelpers.moduleFor)('The {{link-to}} helper: .transitioning-in .transitioning-out CSS classes', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n var _this2 = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.call(this));\n\n _this2.aboutDefer = _runtime.RSVP.defer();\n _this2.otherDefer = _runtime.RSVP.defer();\n _this2.newsDefer = _runtime.RSVP.defer();\n var _this = _this2;\n\n _this2.router.map(function () {\n this.route('about');\n this.route('other');\n this.route('news');\n });\n\n _this2.add('route:about', _routing.Route.extend({\n model: function () {\n return _this.aboutDefer.promise;\n }\n }));\n\n _this2.add('route:other', _routing.Route.extend({\n model: function () {\n return _this.otherDefer.promise;\n }\n }));\n\n _this2.add('route:news', _routing.Route.extend({\n model: function () {\n return _this.newsDefer.promise;\n }\n }));\n\n _this2.addTemplate('application', '\\n {{outlet}}\\n {{link-to \\'Index\\' \\'index\\' id=\\'index-link\\'}}\\n {{link-to \\'About\\' \\'about\\' id=\\'about-link\\'}}\\n {{link-to \\'Other\\' \\'other\\' id=\\'other-link\\'}}\\n {{link-to \\'News\\' \\'news\\' activeClass=false id=\\'news-link\\'}}\\n ');\n return _this2;\n }\n\n _class.prototype.beforeEach = function beforeEach() {\n return this.visit('/');\n };\n\n _class.prototype.afterEach = function afterEach() {\n _ApplicationTestCase.prototype.afterEach.call(this);\n this.aboutDefer = null;\n this.otherDefer = null;\n this.newsDefer = null;\n };\n\n _class.prototype['@test while a transition is underway'] = function testWhileATransitionIsUnderway(assert) {\n var _this3 = this;\n\n var $index = this.$('#index-link');\n var $about = this.$('#about-link');\n var $other = this.$('#other-link');\n\n $about.click();\n\n assertHasClass(assert, $index, 'active');\n assertHasNoClass(assert, $about, 'active');\n assertHasNoClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasClass(assert, $about, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $about, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n\n this.runTask(function () {\n return _this3.aboutDefer.resolve();\n });\n\n assertHasNoClass(assert, $index, 'active');\n assertHasClass(assert, $about, 'active');\n assertHasNoClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasNoClass(assert, $about, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $about, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n };\n\n _class.prototype['@test while a transition is underway with activeClass is false'] = function testWhileATransitionIsUnderwayWithActiveClassIsFalse(assert) {\n var _this4 = this;\n\n var $index = this.$('#index-link');\n var $news = this.$('#news-link');\n var $other = this.$('#other-link');\n\n $news.click();\n\n assertHasClass(assert, $index, 'active');\n assertHasNoClass(assert, $news, 'active');\n assertHasNoClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasClass(assert, $news, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $news, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n\n this.runTask(function () {\n return _this4.newsDefer.resolve();\n });\n\n assertHasNoClass(assert, $index, 'active');\n assertHasNoClass(assert, $news, 'active');\n assertHasNoClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasNoClass(assert, $news, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $news, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('The {{link-to}} helper: .transitioning-in .transitioning-out CSS classes - nested link-to\\'s', function (_ApplicationTestCase2) {\n (0, _emberBabel.inherits)(_class2, _ApplicationTestCase2);\n\n function _class2() {\n\n var _this5 = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase2.call(this));\n\n _this5.aboutDefer = _runtime.RSVP.defer();\n _this5.otherDefer = _runtime.RSVP.defer();\n var _this = _this5;\n\n _this5.router.map(function () {\n this.route('parent-route', function () {\n this.route('about');\n this.route('other');\n });\n });\n _this5.add('route:parent-route.about', _routing.Route.extend({\n model: function () {\n return _this.aboutDefer.promise;\n }\n }));\n\n _this5.add('route:parent-route.other', _routing.Route.extend({\n model: function () {\n return _this.otherDefer.promise;\n }\n }));\n\n _this5.addTemplate('application', '\\n {{outlet}}\\n {{#link-to \\'index\\' tagName=\\'li\\'}}\\n {{link-to \\'Index\\' \\'index\\' id=\\'index-link\\'}}\\n {{/link-to}}\\n {{#link-to \\'parent-route.about\\' tagName=\\'li\\'}}\\n {{link-to \\'About\\' \\'parent-route.about\\' id=\\'about-link\\'}}\\n {{/link-to}}\\n {{#link-to \\'parent-route.other\\' tagName=\\'li\\'}}\\n {{link-to \\'Other\\' \\'parent-route.other\\' id=\\'other-link\\'}}\\n {{/link-to}}\\n ');\n return _this5;\n }\n\n _class2.prototype.beforeEach = function beforeEach() {\n return this.visit('/');\n };\n\n _class2.prototype.resolveAbout = function resolveAbout() {\n var _this6 = this;\n\n return this.runTask(function () {\n _this6.aboutDefer.resolve();\n _this6.aboutDefer = _runtime.RSVP.defer();\n });\n };\n\n _class2.prototype.resolveOther = function resolveOther() {\n var _this7 = this;\n\n return this.runTask(function () {\n _this7.otherDefer.resolve();\n _this7.otherDefer = _runtime.RSVP.defer();\n });\n };\n\n _class2.prototype.teardown = function teardown() {\n _ApplicationTestCase2.prototype.teardown.call(this);\n this.aboutDefer = null;\n this.otherDefer = null;\n };\n\n _class2.prototype['@test while a transition is underway with nested link-to\\'s'] = function (assert) {\n // TODO undo changes to this test but currently this test navigates away if navigation\n // outlet is not stable and the second $about.click() is triggered.\n var $about = this.$('#about-link');\n\n $about.click();\n\n var $index = this.$('#index-link');\n $about = this.$('#about-link');\n var $other = this.$('#other-link');\n\n assertHasClass(assert, $index, 'active');\n assertHasNoClass(assert, $about, 'active');\n assertHasNoClass(assert, $about, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasClass(assert, $about, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $about, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n\n this.resolveAbout();\n\n $index = this.$('#index-link');\n $about = this.$('#about-link');\n $other = this.$('#other-link');\n\n assertHasNoClass(assert, $index, 'active');\n assertHasClass(assert, $about, 'active');\n assertHasNoClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasNoClass(assert, $about, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $about, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n\n $other.click();\n\n $index = this.$('#index-link');\n $about = this.$('#about-link');\n $other = this.$('#other-link');\n\n assertHasNoClass(assert, $index, 'active');\n assertHasClass(assert, $about, 'active');\n assertHasNoClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasNoClass(assert, $about, 'ember-transitioning-in');\n assertHasClass(assert, $other, 'ember-transitioning-in');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-out');\n assertHasClass(assert, $about, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n\n this.resolveOther();\n\n $index = this.$('#index-link');\n $about = this.$('#about-link');\n $other = this.$('#other-link');\n\n assertHasNoClass(assert, $index, 'active');\n assertHasNoClass(assert, $about, 'active');\n assertHasClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasNoClass(assert, $about, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $about, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n\n $about.click();\n\n $index = this.$('#index-link');\n $about = this.$('#about-link');\n $other = this.$('#other-link');\n\n assertHasNoClass(assert, $index, 'active');\n assertHasNoClass(assert, $about, 'active');\n assertHasClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasClass(assert, $about, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $about, 'ember-transitioning-out');\n assertHasClass(assert, $other, 'ember-transitioning-out');\n\n this.resolveAbout();\n\n $index = this.$('#index-link');\n $about = this.$('#about-link');\n $other = this.$('#other-link');\n\n assertHasNoClass(assert, $index, 'active');\n assertHasClass(assert, $about, 'active');\n assertHasNoClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasNoClass(assert, $about, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $about, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n };\n\n return _class2;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/helpers/link_to_test/link_to_with_query_params_test', ['ember-babel', '@ember/controller', '@ember/-internals/runtime', '@ember/-internals/routing', 'internal-test-helpers'], function (_emberBabel, _controller, _runtime, _routing, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('The {{link-to}} helper: invoking with query params', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.call(this));\n\n var indexProperties = {\n foo: '123',\n bar: 'abc'\n };\n _this.add('controller:index', _controller.default.extend({\n queryParams: ['foo', 'bar', 'abool'],\n foo: indexProperties.foo,\n bar: indexProperties.bar,\n boundThing: 'OMG',\n abool: true\n }));\n _this.add('controller:about', _controller.default.extend({\n queryParams: ['baz', 'bat'],\n baz: 'alex',\n bat: 'borf'\n }));\n _this.indexProperties = indexProperties;\n return _this;\n }\n\n _class.prototype.shouldNotBeActive = function shouldNotBeActive(assert, selector) {\n this.checkActive(assert, selector, false);\n };\n\n _class.prototype.shouldBeActive = function shouldBeActive(assert, selector) {\n this.checkActive(assert, selector, true);\n };\n\n _class.prototype.getController = function getController(name) {\n return this.applicationInstance.lookup('controller:' + name);\n };\n\n _class.prototype.checkActive = function checkActive(assert, selector, active) {\n var classList = this.$(selector)[0].className;\n assert.equal(classList.indexOf('active') > -1, active, selector + ' active should be ' + active.toString());\n };\n\n _class.prototype['@test doesn\\'t update controller QP properties on current route when invoked'] = function (assert) {\n var _this2 = this;\n\n this.addTemplate('index', '\\n {{#link-to \\'index\\' id=\\'the-link\\'}}Index{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n _this2.click('#the-link');\n var indexController = _this2.getController('index');\n\n assert.deepEqual(indexController.getProperties('foo', 'bar'), _this2.indexProperties, 'controller QP properties do not update');\n });\n };\n\n _class.prototype['@test doesn\\'t update controller QP properties on current route when invoked (empty query-params obj)'] = function (assert) {\n var _this3 = this;\n\n this.addTemplate('index', '\\n {{#link-to \\'index\\' (query-params) id=\\'the-link\\'}}Index{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n _this3.click('#the-link');\n var indexController = _this3.getController('index');\n\n assert.deepEqual(indexController.getProperties('foo', 'bar'), _this3.indexProperties, 'controller QP properties do not update');\n });\n };\n\n _class.prototype['@test doesn\\'t update controller QP properties on current route when invoked (empty query-params obj, inferred route)'] = function (assert) {\n var _this4 = this;\n\n this.addTemplate('index', '\\n {{#link-to (query-params) id=\\'the-link\\'}}Index{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n _this4.click('#the-link');\n var indexController = _this4.getController('index');\n\n assert.deepEqual(indexController.getProperties('foo', 'bar'), _this4.indexProperties, 'controller QP properties do not update');\n });\n };\n\n _class.prototype['@test updates controller QP properties on current route when invoked'] = function testUpdatesControllerQPPropertiesOnCurrentRouteWhenInvoked(assert) {\n var _this5 = this;\n\n this.addTemplate('index', '\\n {{#link-to \\'index\\' (query-params foo=\\'456\\') id=\"the-link\"}}\\n Index\\n {{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n _this5.click('#the-link');\n var indexController = _this5.getController('index');\n\n assert.deepEqual(indexController.getProperties('foo', 'bar'), { foo: '456', bar: 'abc' }, 'controller QP properties updated');\n });\n };\n\n _class.prototype['@test updates controller QP properties on current route when invoked (inferred route)'] = function testUpdatesControllerQPPropertiesOnCurrentRouteWhenInvokedInferredRoute(assert) {\n var _this6 = this;\n\n this.addTemplate('index', '\\n {{#link-to (query-params foo=\\'456\\') id=\"the-link\"}}\\n Index\\n {{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n _this6.click('#the-link');\n var indexController = _this6.getController('index');\n\n assert.deepEqual(indexController.getProperties('foo', 'bar'), { foo: '456', bar: 'abc' }, 'controller QP properties updated');\n });\n };\n\n _class.prototype['@test updates controller QP properties on other route after transitioning to that route'] = function testUpdatesControllerQPPropertiesOnOtherRouteAfterTransitioningToThatRoute(assert) {\n var _this7 = this;\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.addTemplate('index', '\\n {{#link-to \\'about\\' (query-params baz=\\'lol\\') id=\\'the-link\\'}}\\n About\\n {{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n var theLink = _this7.$('#the-link');\n assert.equal(theLink.attr('href'), '/about?baz=lol');\n\n _this7.runTask(function () {\n return _this7.click('#the-link');\n });\n\n var aboutController = _this7.getController('about');\n\n assert.deepEqual(aboutController.getProperties('baz', 'bat'), { baz: 'lol', bat: 'borf' }, 'about controller QP properties updated');\n });\n };\n\n _class.prototype['@test supplied QP properties can be bound'] = function testSuppliedQPPropertiesCanBeBound(assert) {\n var _this8 = this;\n\n this.addTemplate('index', '\\n {{#link-to (query-params foo=boundThing) id=\\'the-link\\'}}Index{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n var indexController = _this8.getController('index');\n var theLink = _this8.$('#the-link');\n\n assert.equal(theLink.attr('href'), '/?foo=OMG');\n\n _this8.runTask(function () {\n return indexController.set('boundThing', 'ASL');\n });\n\n assert.equal(theLink.attr('href'), '/?foo=ASL');\n });\n };\n\n _class.prototype['@test supplied QP properties can be bound (booleans)'] = function testSuppliedQPPropertiesCanBeBoundBooleans(assert) {\n var _this9 = this;\n\n this.addTemplate('index', '\\n {{#link-to (query-params abool=boundThing) id=\\'the-link\\'}}\\n Index\\n {{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n var indexController = _this9.getController('index');\n var theLink = _this9.$('#the-link');\n\n assert.equal(theLink.attr('href'), '/?abool=OMG');\n\n _this9.runTask(function () {\n return indexController.set('boundThing', false);\n });\n\n assert.equal(theLink.attr('href'), '/?abool=false');\n\n _this9.click('#the-link');\n\n assert.deepEqual(indexController.getProperties('foo', 'bar', 'abool'), { foo: '123', bar: 'abc', abool: false }, 'bound bool QP properties update');\n });\n };\n\n _class.prototype['@test href updates when unsupplied controller QP props change'] = function testHrefUpdatesWhenUnsuppliedControllerQPPropsChange(assert) {\n var _this10 = this;\n\n this.addTemplate('index', '\\n {{#link-to (query-params foo=\\'lol\\') id=\\'the-link\\'}}Index{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n var indexController = _this10.getController('index');\n var theLink = _this10.$('#the-link');\n\n assert.equal(theLink.attr('href'), '/?foo=lol');\n\n _this10.runTask(function () {\n return indexController.set('bar', 'BORF');\n });\n\n assert.equal(theLink.attr('href'), '/?bar=BORF&foo=lol');\n\n _this10.runTask(function () {\n return indexController.set('foo', 'YEAH');\n });\n\n assert.equal(theLink.attr('href'), '/?bar=BORF&foo=lol');\n });\n };\n\n _class.prototype['@test The {{link-to}} with only query params always transitions to the current route with the query params applied'] = function testTheLinkToWithOnlyQueryParamsAlwaysTransitionsToTheCurrentRouteWithTheQueryParamsApplied(assert) {\n var _this11 = this;\n\n // Test harness for bug #12033\n this.addTemplate('cars', '\\n {{#link-to \\'cars.create\\' id=\\'create-link\\'}}Create new car{{/link-to}}\\n {{#link-to (query-params page=\\'2\\') id=\\'page2-link\\'}}Page 2{{/link-to}}\\n {{outlet}}\\n ');\n this.addTemplate('cars.create', '{{#link-to \\'cars\\' id=\\'close-link\\'}}Close create form{{/link-to}}');\n\n this.router.map(function () {\n this.route('cars', function () {\n this.route('create');\n });\n });\n\n this.add('controller:cars', _controller.default.extend({\n queryParams: ['page'],\n page: 1\n }));\n\n return this.visit('/cars/create').then(function () {\n var router = _this11.appRouter;\n var carsController = _this11.getController('cars');\n\n assert.equal(router.currentRouteName, 'cars.create');\n\n _this11.runTask(function () {\n return _this11.click('#close-link');\n });\n\n assert.equal(router.currentRouteName, 'cars.index');\n assert.equal(router.get('url'), '/cars');\n assert.equal(carsController.get('page'), 1, 'The page query-param is 1');\n\n _this11.runTask(function () {\n return _this11.click('#page2-link');\n });\n\n assert.equal(router.currentRouteName, 'cars.index', 'The active route is still cars');\n assert.equal(router.get('url'), '/cars?page=2', 'The url has been updated');\n assert.equal(carsController.get('page'), 2, 'The query params have been updated');\n });\n };\n\n _class.prototype['@test the {{link-to}} applies activeClass when query params are not changed'] = function testTheLinkToAppliesActiveClassWhenQueryParamsAreNotChanged(assert) {\n var _this12 = this;\n\n this.addTemplate('index', '\\n {{#link-to (query-params foo=\\'cat\\') id=\\'cat-link\\'}}Index{{/link-to}}\\n {{#link-to (query-params foo=\\'dog\\') id=\\'dog-link\\'}}Index{{/link-to}}\\n {{#link-to \\'index\\' id=\\'change-nothing\\'}}Index{{/link-to}}\\n ');\n this.addTemplate('search', '\\n {{#link-to (query-params search=\\'same\\') id=\\'same-search\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'change\\') id=\\'change-search\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'same\\' archive=true) id=\\'same-search-add-archive\\'}}Index{{/link-to}}\\n {{#link-to (query-params archive=true) id=\\'only-add-archive\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'same\\' archive=true) id=\\'both-same\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'different\\' archive=true) id=\\'change-one\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'different\\' archive=false) id=\\'remove-one\\'}}Index{{/link-to}}\\n {{outlet}}\\n ');\n this.addTemplate('search.results', '\\n {{#link-to (query-params sort=\\'title\\') id=\\'same-sort-child-only\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'same\\') id=\\'same-search-parent-only\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'change\\') id=\\'change-search-parent-only\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'same\\' sort=\\'title\\') id=\\'same-search-same-sort-child-and-parent\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'same\\' sort=\\'author\\') id=\\'same-search-different-sort-child-and-parent\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'change\\' sort=\\'title\\') id=\\'change-search-same-sort-child-and-parent\\'}}Index{{/link-to}}\\n {{#link-to (query-params foo=\\'dog\\') id=\\'dog-link\\'}}Index{{/link-to}}\\n ');\n\n this.router.map(function () {\n this.route('search', function () {\n this.route('results');\n });\n });\n\n this.add('controller:search', _controller.default.extend({\n queryParams: ['search', 'archive'],\n search: '',\n archive: false\n }));\n\n this.add('controller:search.results', _controller.default.extend({\n queryParams: ['sort', 'showDetails'],\n sort: 'title',\n showDetails: true\n }));\n\n return this.visit('/').then(function () {\n _this12.shouldNotBeActive(assert, '#cat-link');\n _this12.shouldNotBeActive(assert, '#dog-link');\n\n return _this12.visit('/?foo=cat');\n }).then(function () {\n _this12.shouldBeActive(assert, '#cat-link');\n _this12.shouldNotBeActive(assert, '#dog-link');\n\n return _this12.visit('/?foo=dog');\n }).then(function () {\n _this12.shouldBeActive(assert, '#dog-link');\n _this12.shouldNotBeActive(assert, '#cat-link');\n _this12.shouldBeActive(assert, '#change-nothing');\n\n return _this12.visit('/search?search=same');\n }).then(function () {\n _this12.shouldBeActive(assert, '#same-search');\n _this12.shouldNotBeActive(assert, '#change-search');\n _this12.shouldNotBeActive(assert, '#same-search-add-archive');\n _this12.shouldNotBeActive(assert, '#only-add-archive');\n _this12.shouldNotBeActive(assert, '#remove-one');\n\n return _this12.visit('/search?search=same&archive=true');\n }).then(function () {\n _this12.shouldBeActive(assert, '#both-same');\n _this12.shouldNotBeActive(assert, '#change-one');\n\n return _this12.visit('/search/results?search=same&sort=title&showDetails=true');\n }).then(function () {\n _this12.shouldBeActive(assert, '#same-sort-child-only');\n _this12.shouldBeActive(assert, '#same-search-parent-only');\n _this12.shouldNotBeActive(assert, '#change-search-parent-only');\n _this12.shouldBeActive(assert, '#same-search-same-sort-child-and-parent');\n _this12.shouldNotBeActive(assert, '#same-search-different-sort-child-and-parent');\n _this12.shouldNotBeActive(assert, '#change-search-same-sort-child-and-parent');\n });\n };\n\n _class.prototype['@test the {{link-to}} applies active class when query-param is a number'] = function testTheLinkToAppliesActiveClassWhenQueryParamIsANumber(assert) {\n var _this13 = this;\n\n this.addTemplate('index', '\\n {{#link-to (query-params page=pageNumber) id=\\'page-link\\'}}\\n Index\\n {{/link-to}}\\n ');\n this.add('controller:index', _controller.default.extend({\n queryParams: ['page'],\n page: 1,\n pageNumber: 5\n }));\n\n return this.visit('/').then(function () {\n _this13.shouldNotBeActive(assert, '#page-link');\n return _this13.visit('/?page=5');\n }).then(function () {\n _this13.shouldBeActive(assert, '#page-link');\n });\n };\n\n _class.prototype['@test the {{link-to}} applies active class when query-param is an array'] = function testTheLinkToAppliesActiveClassWhenQueryParamIsAnArray(assert) {\n var _this14 = this;\n\n this.addTemplate('index', '\\n {{#link-to (query-params pages=pagesArray) id=\\'array-link\\'}}Index{{/link-to}}\\n {{#link-to (query-params pages=biggerArray) id=\\'bigger-link\\'}}Index{{/link-to}}\\n {{#link-to (query-params pages=emptyArray) id=\\'empty-link\\'}}Index{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n queryParams: ['pages'],\n pages: [],\n pagesArray: [1, 2],\n biggerArray: [1, 2, 3],\n emptyArray: []\n }));\n\n return this.visit('/').then(function () {\n _this14.shouldNotBeActive(assert, '#array-link');\n\n return _this14.visit('/?pages=%5B1%2C2%5D');\n }).then(function () {\n _this14.shouldBeActive(assert, '#array-link');\n _this14.shouldNotBeActive(assert, '#bigger-link');\n _this14.shouldNotBeActive(assert, '#empty-link');\n\n return _this14.visit('/?pages=%5B2%2C1%5D');\n }).then(function () {\n _this14.shouldNotBeActive(assert, '#array-link');\n _this14.shouldNotBeActive(assert, '#bigger-link');\n _this14.shouldNotBeActive(assert, '#empty-link');\n\n return _this14.visit('/?pages=%5B1%2C2%2C3%5D');\n }).then(function () {\n _this14.shouldBeActive(assert, '#bigger-link');\n _this14.shouldNotBeActive(assert, '#array-link');\n _this14.shouldNotBeActive(assert, '#empty-link');\n });\n };\n\n _class.prototype['@test the {{link-to}} helper applies active class to the parent route'] = function testTheLinkToHelperAppliesActiveClassToTheParentRoute(assert) {\n var _this15 = this;\n\n this.router.map(function () {\n this.route('parent', function () {\n this.route('child');\n });\n });\n\n this.addTemplate('application', '\\n {{#link-to \\'parent\\' id=\\'parent-link\\'}}Parent{{/link-to}}\\n {{#link-to \\'parent.child\\' id=\\'parent-child-link\\'}}Child{{/link-to}}\\n {{#link-to \\'parent\\' (query-params foo=cat) id=\\'parent-link-qp\\'}}Parent{{/link-to}}\\n {{outlet}}\\n ');\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: ['foo'],\n foo: 'bar'\n }));\n\n return this.visit('/').then(function () {\n _this15.shouldNotBeActive(assert, '#parent-link');\n _this15.shouldNotBeActive(assert, '#parent-child-link');\n _this15.shouldNotBeActive(assert, '#parent-link-qp');\n return _this15.visit('/parent/child?foo=dog');\n }).then(function () {\n _this15.shouldBeActive(assert, '#parent-link');\n _this15.shouldNotBeActive(assert, '#parent-link-qp');\n });\n };\n\n _class.prototype['@test The {{link-to}} helper disregards query-params in activeness computation when current-when is specified'] = function testTheLinkToHelperDisregardsQueryParamsInActivenessComputationWhenCurrentWhenIsSpecified(assert) {\n var _this16 = this;\n\n var appLink = void 0;\n\n this.router.map(function () {\n this.route('parent');\n });\n this.addTemplate('application', '\\n {{#link-to \\'parent\\' (query-params page=1) current-when=\\'parent\\' id=\\'app-link\\'}}\\n Parent\\n {{/link-to}}\\n {{outlet}}\\n ');\n this.addTemplate('parent', '\\n {{#link-to \\'parent\\' (query-params page=1) current-when=\\'parent\\' id=\\'parent-link\\'}}\\n Parent\\n {{/link-to}}\\n {{outlet}}\\n ');\n this.add('controller:parent', _controller.default.extend({\n queryParams: ['page'],\n page: 1\n }));\n\n return this.visit('/').then(function () {\n appLink = _this16.$('#app-link');\n\n assert.equal(appLink.attr('href'), '/parent');\n _this16.shouldNotBeActive(assert, '#app-link');\n\n return _this16.visit('/parent?page=2');\n }).then(function () {\n appLink = _this16.$('#app-link');\n var router = _this16.appRouter;\n\n assert.equal(appLink.attr('href'), '/parent');\n _this16.shouldBeActive(assert, '#app-link');\n assert.equal(_this16.$('#parent-link').attr('href'), '/parent');\n _this16.shouldBeActive(assert, '#parent-link');\n\n var parentController = _this16.getController('parent');\n\n assert.equal(parentController.get('page'), 2);\n\n _this16.runTask(function () {\n return parentController.set('page', 3);\n });\n\n assert.equal(router.get('location.path'), '/parent?page=3');\n _this16.shouldBeActive(assert, '#app-link');\n _this16.shouldBeActive(assert, '#parent-link');\n\n _this16.runTask(function () {\n return _this16.click('#app-link');\n });\n\n assert.equal(router.get('location.path'), '/parent');\n });\n };\n\n _class.prototype['@test link-to default query params while in active transition regression test'] = function testLinkToDefaultQueryParamsWhileInActiveTransitionRegressionTest(assert) {\n var _this17 = this;\n\n this.router.map(function () {\n this.route('foos');\n this.route('bars');\n });\n var foos = _runtime.RSVP.defer();\n var bars = _runtime.RSVP.defer();\n\n this.addTemplate('application', '\\n {{link-to \\'Foos\\' \\'foos\\' id=\\'foos-link\\'}}\\n {{link-to \\'Baz Foos\\' \\'foos\\' (query-params baz=true) id=\\'baz-foos-link\\'}}\\n {{link-to \\'Quux Bars\\' \\'bars\\' (query-params quux=true) id=\\'bars-link\\'}}\\n ');\n this.add('controller:foos', _controller.default.extend({\n queryParams: ['status'],\n baz: false\n }));\n this.add('route:foos', _routing.Route.extend({\n model: function () {\n return foos.promise;\n }\n }));\n this.add('controller:bars', _controller.default.extend({\n queryParams: ['status'],\n quux: false\n }));\n this.add('route:bars', _routing.Route.extend({\n model: function () {\n return bars.promise;\n }\n }));\n\n return this.visit('/').then(function () {\n var router = _this17.appRouter;\n var foosLink = _this17.$('#foos-link');\n var barsLink = _this17.$('#bars-link');\n var bazLink = _this17.$('#baz-foos-link');\n\n assert.equal(foosLink.attr('href'), '/foos');\n assert.equal(bazLink.attr('href'), '/foos?baz=true');\n assert.equal(barsLink.attr('href'), '/bars?quux=true');\n assert.equal(router.get('location.path'), '/');\n _this17.shouldNotBeActive(assert, '#foos-link');\n _this17.shouldNotBeActive(assert, '#baz-foos-link');\n _this17.shouldNotBeActive(assert, '#bars-link');\n\n _this17.runTask(function () {\n return barsLink.click();\n });\n _this17.shouldNotBeActive(assert, '#bars-link');\n\n _this17.runTask(function () {\n return foosLink.click();\n });\n _this17.shouldNotBeActive(assert, '#foos-link');\n\n _this17.runTask(function () {\n return foos.resolve();\n });\n\n assert.equal(router.get('location.path'), '/foos');\n _this17.shouldBeActive(assert, '#foos-link');\n });\n };\n\n _class.prototype['@test the {{link-to}} helper throws a useful error if you invoke it wrong'] = function (assert) {\n var _this18 = this;\n\n assert.expect(1);\n\n this.addTemplate('application', '{{#link-to id=\\'the-link\\'}}Index{{/link-to}}');\n\n expectAssertion(function () {\n _this18.visit('/');\n }, /You must provide one or more parameters to the link-to component/);\n\n return this.runLoopSettled();\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/homepage_example_test', ['ember-babel', '@ember/-internals/routing', '@ember/-internals/metal', '@ember/-internals/runtime', 'internal-test-helpers'], function (_emberBabel, _routing, _metal, _runtime, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('The example renders correctly', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Render index template into application outlet'] = function testRenderIndexTemplateIntoApplicationOutlet(assert) {\n var _this2 = this;\n\n this.addTemplate('application', '{{outlet}}');\n this.addTemplate('index', '

People

    {{#each model as |person|}}
  • Hello, {{person.fullName}}!
  • {{/each}}
');\n\n var Person = _runtime.Object.extend({\n firstName: null,\n lastName: null,\n fullName: (0, _metal.computed)('firstName', 'lastName', function () {\n return this.get('firstName') + ' ' + this.get('lastName');\n })\n });\n\n this.add('route:index', _routing.Route.extend({\n model: function () {\n return (0, _runtime.A)([Person.create({ firstName: 'Tom', lastName: 'Dale' }), Person.create({ firstName: 'Yehuda', lastName: 'Katz' })]);\n }\n }));\n\n return this.visit('/').then(function () {\n var $ = _this2.$();\n\n assert.equal($.findAll('h1').text(), 'People');\n assert.equal($.findAll('li').length, 2);\n assert.equal($.findAll('li:nth-of-type(1)').text(), 'Hello, Tom Dale!');\n assert.equal($.findAll('li:nth-of-type(2)').text(), 'Hello, Yehuda Katz!');\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/integration/multiple-app-test', ['ember-babel', 'internal-test-helpers', '@ember/application', '@ember/-internals/glimmer', '@ember/-internals/owner', '@ember/polyfills', 'rsvp'], function (_emberBabel, _internalTestHelpers, _application, _glimmer, _owner, _polyfills, _rsvp) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('View Integration', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n document.getElementById('qunit-fixture').innerHTML = '\\n
\\n
\\n ';\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.call(this));\n\n _this.runTask(function () {\n _this.createSecondApplication();\n });\n return _this;\n }\n\n _class.prototype.createSecondApplication = function createSecondApplication(options) {\n var applicationOptions = this.applicationOptions;\n\n var secondApplicationOptions = { rootElement: '#two' };\n var myOptions = (0, _polyfills.assign)(applicationOptions, secondApplicationOptions, options);\n this.secondApp = _application.default.create(myOptions);\n this.secondResolver = this.secondApp.__registry__.resolver;\n return this.secondApp;\n };\n\n _class.prototype.teardown = function teardown() {\n var _this2 = this;\n\n _ApplicationTestCase.prototype.teardown.call(this);\n\n if (this.secondApp) {\n this.runTask(function () {\n _this2.secondApp.destroy();\n });\n }\n };\n\n _class.prototype.addFactoriesToResolver = function addFactoriesToResolver(actions, resolver) {\n resolver.add('component:special-button', _glimmer.Component.extend({\n actions: {\n doStuff: function () {\n var rootElement = (0, _owner.getOwner)(this).application.rootElement;\n actions.push(rootElement);\n }\n }\n }));\n\n resolver.add('template:index', this.compile('\\n

Node 1

{{special-button}}\\n ', {\n moduleName: 'my-app/templates/index.hbs'\n }));\n resolver.add('template:components/special-button', this.compile('\\n \\n ', {\n moduleName: 'my-app/templates/components/special-button.hbs'\n }));\n };\n\n _class.prototype['@test booting multiple applications can properly handle events'] = function (assert) {\n var _this3 = this;\n\n var actions = [];\n this.addFactoriesToResolver(actions, this.resolver);\n this.addFactoriesToResolver(actions, this.secondResolver);\n\n return (0, _rsvp.resolve)().then(function () {\n return _this3.application.visit('/');\n }).then(function () {\n return _this3.secondApp.visit('/');\n }).then(function () {\n document.querySelector('#two .do-stuff').click();\n document.querySelector('#one .do-stuff').click();\n\n assert.deepEqual(actions, ['#two', '#one']);\n });\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_ApplicationTestCase.prototype.applicationOptions, {\n rootElement: '#one',\n router: null\n });\n }\n }]);\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/production_build_test', ['ember-babel', '@ember/debug', 'internal-test-helpers'], function (_emberBabel, _debug, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('production builds', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test assert does not throw in production builds'] = function testAssertDoesNotThrowInProductionBuilds(assert) {\n if (!false /* DEBUG */) {\n assert.expect(1);\n\n try {\n false && !false && (0, _debug.assert)('Should not throw');\n\n assert.ok(true, 'Ember.assert did not throw');\n } catch (e) {\n assert.ok(false, 'Expected assert not to throw but it did: ' + e.message);\n }\n } else {\n assert.expect(0);\n }\n };\n\n _class.prototype['@test runInDebug does not run the callback in production builds'] = function testRunInDebugDoesNotRunTheCallbackInProductionBuilds(assert) {\n if (!false /* DEBUG */) {\n var fired = false;\n (0, _debug.runInDebug)(function () {\n return fired = true;\n });\n\n assert.equal(fired, false, 'runInDebug callback should not be ran');\n } else {\n assert.expect(0);\n }\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember/tests/reexports_test', ['ember-babel', 'ember/index', '@ember/canary-features', 'internal-test-helpers', '@ember/-internals/views'], function (_emberBabel, _index, _canaryFeatures, _internalTestHelpers, _views) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember reexports', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Ember exports correctly'] = function (assert) {\n allExports.forEach(function (reexport) {\n var path = reexport[0],\n moduleId = reexport[1],\n exportName = reexport[2];\n\n // default path === exportName if none present\n\n if (!exportName) {\n exportName = path;\n }\n\n (0, _internalTestHelpers.confirmExport)(_index.default, assert, path, moduleId, exportName, 'Ember.' + path + ' exports correctly');\n });\n };\n\n _class.prototype['@test Ember.String.isHTMLSafe exports correctly'] = function testEmberStringIsHTMLSafeExportsCorrectly(assert) {\n (0, _internalTestHelpers.confirmExport)(_index.default, assert, 'String.isHTMLSafe', '@ember/-internals/glimmer', 'isHTMLSafe');\n };\n\n _class.prototype['@test Ember.EXTEND_PROTOTYPES is present (but deprecated)'] = function testEmberEXTEND_PROTOTYPESIsPresentButDeprecated(assert) {\n expectDeprecation(function () {\n assert.strictEqual(_index.default.ENV.EXTEND_PROTOTYPES, _index.default.EXTEND_PROTOTYPES, 'Ember.EXTEND_PROTOTYPES exists');\n }, /EXTEND_PROTOTYPES is deprecated/);\n };\n\n _class.prototype['@test Ember.FEATURES is exported'] = function testEmberFEATURESIsExported(assert) {\n for (var feature in _canaryFeatures.FEATURES) {\n assert.equal(_index.default.FEATURES[feature], _canaryFeatures.FEATURES[feature], 'Ember.FEATURES contains ${feature} with correct value');\n }\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n var allExports = [\n // @ember/-internals/environment\n ['ENV', '@ember/-internals/environment', { get: 'getENV' }], ['lookup', '@ember/-internals/environment', { get: 'getLookup', set: 'setLookup' }], ['getOwner', '@ember/application', 'getOwner'], ['setOwner', '@ember/application', 'setOwner'], ['assign', '@ember/polyfills'],\n\n // @ember/-internals/utils\n ['GUID_KEY', '@ember/-internals/utils'], ['uuid', '@ember/-internals/utils'], ['generateGuid', '@ember/-internals/utils'], ['guidFor', '@ember/-internals/utils'], ['inspect', '@ember/-internals/utils'], ['makeArray', '@ember/-internals/utils'], ['canInvoke', '@ember/-internals/utils'], ['tryInvoke', '@ember/-internals/utils'], ['wrap', '@ember/-internals/utils'], ['NAME_KEY', '@ember/-internals/utils'],\n\n // @ember/-internals/container\n ['Registry', '@ember/-internals/container', 'Registry'], ['Container', '@ember/-internals/container', 'Container'],\n\n // @ember/debug\n ['deprecateFunc', '@ember/debug'], ['deprecate', '@ember/debug'], ['assert', '@ember/debug'], ['warn', '@ember/debug'], ['debug', '@ember/debug'], ['runInDebug', '@ember/debug'], ['Debug.registerDeprecationHandler', '@ember/debug', 'registerDeprecationHandler'], ['Debug.registerWarnHandler', '@ember/debug', 'registerWarnHandler'], ['Error', '@ember/error', 'default'],\n\n // @ember/-internals/metal\n ['computed', '@ember/-internals/metal', '_globalsComputed'], ['computed.alias', '@ember/-internals/metal', 'alias'], ['ComputedProperty', '@ember/-internals/metal'], ['cacheFor', '@ember/-internals/metal', 'getCachedValueFor'], ['merge', '@ember/polyfills'], ['instrument', '@ember/instrumentation'], ['subscribe', '@ember/instrumentation', 'subscribe'], ['Instrumentation.instrument', '@ember/instrumentation', 'instrument'], ['Instrumentation.subscribe', '@ember/instrumentation', 'subscribe'], ['Instrumentation.unsubscribe', '@ember/instrumentation', 'unsubscribe'], ['Instrumentation.reset', '@ember/instrumentation', 'reset'], ['testing', '@ember/debug', { get: 'isTesting', set: 'setTesting' }], ['onerror', '@ember/-internals/error-handling', { get: 'getOnerror', set: 'setOnerror' }], ['FEATURES.isEnabled', '@ember/canary-features', 'isEnabled'], ['meta', '@ember/-internals/meta'], ['get', '@ember/-internals/metal'], ['set', '@ember/-internals/metal'], ['_getPath', '@ember/-internals/metal'], ['getWithDefault', '@ember/-internals/metal'], ['trySet', '@ember/-internals/metal'], ['_Cache', '@ember/-internals/utils', 'Cache'], ['on', '@ember/-internals/metal'], ['addListener', '@ember/-internals/metal'], ['removeListener', '@ember/-internals/metal'], ['sendEvent', '@ember/-internals/metal'], ['hasListeners', '@ember/-internals/metal'], ['isNone', '@ember/-internals/metal'], ['isEmpty', '@ember/-internals/metal'], ['isBlank', '@ember/-internals/metal'], ['isPresent', '@ember/-internals/metal'], ['_Backburner', 'backburner', 'default'], ['run', '@ember/runloop', '_globalsRun'], ['run.backburner', '@ember/runloop', 'backburner'], ['run.begin', '@ember/runloop', 'begin'], ['run.bind', '@ember/runloop', 'bind'], ['run.cancel', '@ember/runloop', 'cancel'], ['run.debounce', '@ember/runloop', 'debounce'], ['run.end', '@ember/runloop', 'end'], ['run.hasScheduledTimers', '@ember/runloop', 'hasScheduledTimers'], ['run.join', '@ember/runloop', 'join'], ['run.later', '@ember/runloop', 'later'], ['run.next', '@ember/runloop', 'next'], ['run.once', '@ember/runloop', 'once'], ['run.schedule', '@ember/runloop', 'schedule'], ['run.scheduleOnce', '@ember/runloop', 'scheduleOnce'], ['run.throttle', '@ember/runloop', 'throttle'], ['run.currentRunLoop', '@ember/runloop', { get: 'getCurrentRunLoop' }], ['run.cancelTimers', '@ember/runloop', 'cancelTimers'], ['propertyWillChange', '@ember/-internals/metal'], ['propertyDidChange', '@ember/-internals/metal'], ['notifyPropertyChange', '@ember/-internals/metal'], ['overrideChains', '@ember/-internals/metal'], ['beginPropertyChanges', '@ember/-internals/metal'], ['endPropertyChanges', '@ember/-internals/metal'], ['changeProperties', '@ember/-internals/metal'], ['platform.defineProperty', null, { value: true }], ['platform.hasPropertyAccessors', null, { value: true }], ['defineProperty', '@ember/-internals/metal'], ['watchKey', '@ember/-internals/metal'], ['unwatchKey', '@ember/-internals/metal'], ['removeChainWatcher', '@ember/-internals/metal'], ['_ChainNode', '@ember/-internals/metal', 'ChainNode'], ['finishChains', '@ember/-internals/metal'], ['watchPath', '@ember/-internals/metal'], ['unwatchPath', '@ember/-internals/metal'], ['watch', '@ember/-internals/metal'], ['isWatching', '@ember/-internals/metal'], ['unwatch', '@ember/-internals/metal'], ['destroy', '@ember/-internals/meta', 'deleteMeta'], ['libraries', '@ember/-internals/metal'], ['OrderedSet', '@ember/map/lib/ordered-set', 'default'], ['Map', '@ember/map', 'default'], ['MapWithDefault', '@ember/map/with-default', 'default'], ['getProperties', '@ember/-internals/metal'], ['setProperties', '@ember/-internals/metal'], ['expandProperties', '@ember/-internals/metal'], ['addObserver', '@ember/-internals/metal'], ['removeObserver', '@ember/-internals/metal'], ['aliasMethod', '@ember/-internals/metal'], ['observer', '@ember/-internals/metal'], ['mixin', '@ember/-internals/metal'], ['Mixin', '@ember/-internals/metal'],\n\n // @ember/-internals/console\n ['Logger', '@ember/-internals/console', 'default'],\n\n // @ember/-internals/views\n !_views.jQueryDisabled && ['$', '@ember/-internals/views', 'jQuery'], ['ViewUtils.isSimpleClick', '@ember/-internals/views', 'isSimpleClick'], ['ViewUtils.getViewElement', '@ember/-internals/views', 'getViewElement'], ['ViewUtils.getViewBounds', '@ember/-internals/views', 'getViewBounds'], ['ViewUtils.getViewClientRects', '@ember/-internals/views', 'getViewClientRects'], ['ViewUtils.getViewBoundingClientRect', '@ember/-internals/views', 'getViewBoundingClientRect'], ['ViewUtils.getRootViews', '@ember/-internals/views', 'getRootViews'], ['ViewUtils.getChildViews', '@ember/-internals/views', 'getChildViews'], ['ViewUtils.isSerializationFirstNode', '@ember/-internals/glimmer', 'isSerializationFirstNode'], ['TextSupport', '@ember/-internals/views'], ['ComponentLookup', '@ember/-internals/views'], ['EventDispatcher', '@ember/-internals/views'],\n\n // @ember/-internals/glimmer\n ['Component', '@ember/-internals/glimmer', 'Component'], ['Helper', '@ember/-internals/glimmer', 'Helper'], ['Helper.helper', '@ember/-internals/glimmer', 'helper'], ['Checkbox', '@ember/-internals/glimmer', 'Checkbox'], ['LinkComponent', '@ember/-internals/glimmer', 'LinkComponent'], ['TextArea', '@ember/-internals/glimmer', 'TextArea'], ['TextField', '@ember/-internals/glimmer', 'TextField'], ['TEMPLATES', '@ember/-internals/glimmer', { get: 'getTemplates', set: 'setTemplates' }], ['Handlebars.template', '@ember/-internals/glimmer', 'template'], ['HTMLBars.template', '@ember/-internals/glimmer', 'template'], ['Handlebars.Utils.escapeExpression', '@ember/-internals/glimmer', 'escapeExpression'], ['String.htmlSafe', '@ember/-internals/glimmer', 'htmlSafe'], ['_setComponentManager', '@ember/-internals/glimmer', 'setComponentManager'], ['_componentManagerCapabilities', '@ember/-internals/glimmer', 'capabilities'],\n\n // @ember/-internals/runtime\n ['A', '@ember/-internals/runtime'], ['_RegistryProxyMixin', '@ember/-internals/runtime', 'RegistryProxyMixin'], ['_ContainerProxyMixin', '@ember/-internals/runtime', 'ContainerProxyMixin'], ['Object', '@ember/-internals/runtime'], ['String.loc', '@ember/string', 'loc'], ['String.w', '@ember/string', 'w'], ['String.dasherize', '@ember/string', 'dasherize'], ['String.decamelize', '@ember/string', 'decamelize'], ['String.camelize', '@ember/string', 'camelize'], ['String.classify', '@ember/string', 'classify'], ['String.underscore', '@ember/string', 'underscore'], ['String.capitalize', '@ember/string', 'capitalize'], ['compare', '@ember/-internals/runtime'], ['copy', '@ember/-internals/runtime'], ['isEqual', '@ember/-internals/runtime'], ['inject.controller', '@ember/controller', 'inject'], ['inject.service', '@ember/service', 'inject'], ['Array', '@ember/-internals/runtime'], ['Comparable', '@ember/-internals/runtime'], ['Namespace', '@ember/-internals/runtime'], ['Enumerable', '@ember/-internals/runtime'], ['ArrayProxy', '@ember/-internals/runtime'], ['ObjectProxy', '@ember/-internals/runtime'], ['ActionHandler', '@ember/-internals/runtime'], ['CoreObject', '@ember/-internals/runtime'], ['NativeArray', '@ember/-internals/runtime'], ['Copyable', '@ember/-internals/runtime'], ['MutableEnumerable', '@ember/-internals/runtime'], ['MutableArray', '@ember/-internals/runtime'], ['TargetActionSupport', '@ember/-internals/runtime'], ['Evented', '@ember/-internals/runtime'], ['PromiseProxyMixin', '@ember/-internals/runtime'], ['Observable', '@ember/-internals/runtime'], ['typeOf', '@ember/-internals/runtime'], ['isArray', '@ember/-internals/runtime'], ['Object', '@ember/-internals/runtime'], ['onLoad', '@ember/application'], ['runLoadHooks', '@ember/application'], ['Controller', '@ember/controller', 'default'], ['ControllerMixin', '@ember/controller/lib/controller_mixin', 'default'], ['Service', '@ember/service', 'default'], ['_ProxyMixin', '@ember/-internals/runtime'], ['RSVP', '@ember/-internals/runtime'], ['STRINGS', '@ember/string', { get: '_getStrings', set: '_setStrings' }], ['BOOTED', '@ember/-internals/metal', { get: 'isNamespaceSearchDisabled', set: 'setNamespaceSearchDisabled' }], ['computed.empty', '@ember/object/computed', 'empty'], ['computed.notEmpty', '@ember/object/computed', 'notEmpty'], ['computed.none', '@ember/object/computed', 'none'], ['computed.not', '@ember/object/computed', 'not'], ['computed.bool', '@ember/object/computed', 'bool'], ['computed.match', '@ember/object/computed', 'match'], ['computed.equal', '@ember/object/computed', 'equal'], ['computed.gt', '@ember/object/computed', 'gt'], ['computed.gte', '@ember/object/computed', 'gte'], ['computed.lt', '@ember/object/computed', 'lt'], ['computed.lte', '@ember/object/computed', 'lte'], ['computed.oneWay', '@ember/object/computed', 'oneWay'], ['computed.reads', '@ember/object/computed', 'oneWay'], ['computed.readOnly', '@ember/object/computed', 'readOnly'], ['computed.deprecatingAlias', '@ember/object/computed', 'deprecatingAlias'], ['computed.and', '@ember/object/computed', 'and'], ['computed.or', '@ember/object/computed', 'or'], ['computed.sum', '@ember/object/computed', 'sum'], ['computed.min', '@ember/object/computed', 'min'], ['computed.max', '@ember/object/computed', 'max'], ['computed.map', '@ember/object/computed', 'map'], ['computed.sort', '@ember/object/computed', 'sort'], ['computed.setDiff', '@ember/object/computed', 'setDiff'], ['computed.mapBy', '@ember/object/computed', 'mapBy'], ['computed.filter', '@ember/object/computed', 'filter'], ['computed.filterBy', '@ember/object/computed', 'filterBy'], ['computed.uniq', '@ember/object/computed', 'uniq'], ['computed.uniqBy', '@ember/object/computed', 'uniqBy'], ['computed.union', '@ember/object/computed', 'union'], ['computed.intersect', '@ember/object/computed', 'intersect'], ['computed.collect', '@ember/object/computed', 'collect'],\n\n // @ember/-internals/routing\n ['Location', '@ember/-internals/routing'], ['AutoLocation', '@ember/-internals/routing'], ['HashLocation', '@ember/-internals/routing'], ['HistoryLocation', '@ember/-internals/routing'], ['NoneLocation', '@ember/-internals/routing'], ['controllerFor', '@ember/-internals/routing'], ['generateControllerFactory', '@ember/-internals/routing'], ['generateController', '@ember/-internals/routing'], ['RouterDSL', '@ember/-internals/routing'], ['Router', '@ember/-internals/routing'], ['Route', '@ember/-internals/routing'],\n\n // ember-application\n ['Application', '@ember/application', 'default'], ['ApplicationInstance', '@ember/application/instance', 'default'], ['Engine', '@ember/engine', 'default'], ['EngineInstance', '@ember/engine/instance', 'default'], ['Resolver', '@ember/application/globals-resolver', 'default'], ['DefaultResolver', '@ember/application/globals-resolver', 'default'],\n\n // @ember/-internals/extension-support\n ['DataAdapter', '@ember/-internals/extension-support'], ['ContainerDebugAdapter', '@ember/-internals/extension-support']].filter(Boolean);\n});","enifed('ember/tests/routing/decoupled_basic_test', ['@ember/polyfills', 'ember-babel', '@ember/-internals/owner', 'rsvp', 'ember-template-compiler', '@ember/-internals/routing', '@ember/controller', '@ember/-internals/runtime', 'internal-test-helpers', '@ember/runloop', '@ember/-internals/metal', '@ember/-internals/glimmer', '@ember/engine', 'router_js'], function (_polyfills, _emberBabel, _owner, _rsvp, _emberTemplateCompiler, _routing, _controller, _runtime, _internalTestHelpers, _runloop, _metal, _glimmer, _engine, _router_js) {\n 'use strict';\n\n var originalConsoleError = void 0;\n /* eslint-disable no-console */\n\n\n (0, _internalTestHelpers.moduleFor)('Basic Routing - Decoupled from global resolver', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n\n _this.addTemplate('home', '

Hours

');\n _this.addTemplate('camelot', '

Is a silly place

');\n _this.addTemplate('homepage', '

Megatroll

{{model.home}}

');\n\n _this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n originalConsoleError = console.error;\n return _this;\n }\n\n _class.prototype.teardown = function teardown() {\n _ApplicationTestCase.prototype.teardown.call(this);\n console.error = originalConsoleError;\n };\n\n _class.prototype.getController = function getController(name) {\n return this.applicationInstance.lookup('controller:' + name);\n };\n\n _class.prototype.handleURLAborts = function handleURLAborts(assert, path) {\n var _this2 = this;\n\n (0, _runloop.run)(function () {\n var router = _this2.applicationInstance.lookup('router:main');\n router.handleURL(path).then(function () {\n assert.ok(false, 'url: `' + path + '` was NOT to be handled');\n }, function (reason) {\n assert.ok(reason && reason.message === 'TransitionAborted', 'url: `' + path + '` was to be aborted');\n });\n });\n };\n\n _class.prototype.handleURLRejectsWith = function handleURLRejectsWith(context, assert, path, expectedReason) {\n return context.visit(path).then(function () {\n assert.ok(false, 'expected handleURLing: `' + path + '` to fail');\n }).catch(function (reason) {\n assert.equal(reason.message, expectedReason);\n });\n };\n\n _class.prototype['@test warn on URLs not included in the route set'] = function testWarnOnURLsNotIncludedInTheRouteSet() {\n var _this3 = this;\n\n return this.visit('/').then(function () {\n expectAssertion(function () {\n _this3.visit('/what-is-this-i-dont-even');\n }, /'\\/what-is-this-i-dont-even' did not match any routes/);\n });\n };\n\n _class.prototype['@test The Homepage'] = function testTheHomepage(assert) {\n var _this4 = this;\n\n return this.visit('/').then(function () {\n assert.equal(_this4.currentPath, 'home', 'currently on the home route');\n\n var text = _this4.$('.hours').text();\n assert.equal(text, 'Hours', 'the home template was rendered');\n });\n };\n\n _class.prototype['@test The Homepage and the Camelot page with multiple Router.map calls'] = function (assert) {\n var _this5 = this;\n\n this.router.map(function () {\n this.route('camelot', { path: '/camelot' });\n });\n\n return this.visit('/camelot').then(function () {\n assert.equal(_this5.currentPath, 'camelot');\n\n var text = _this5.$('#camelot').text();\n assert.equal(text, 'Is a silly place', 'the camelot template was rendered');\n\n return _this5.visit('/');\n }).then(function () {\n assert.equal(_this5.currentPath, 'home');\n\n var text = _this5.$('.hours').text();\n assert.equal(text, 'Hours', 'the home template was rendered');\n });\n };\n\n _class.prototype['@test The Homepage with explicit template name in renderTemplate'] = function (assert) {\n var _this6 = this;\n\n this.add('route:home', _routing.Route.extend({\n renderTemplate: function () {\n this.render('homepage');\n }\n }));\n\n return this.visit('/').then(function () {\n var text = _this6.$('#troll').text();\n assert.equal(text, 'Megatroll', 'the homepage template was rendered');\n });\n };\n\n _class.prototype['@test an alternate template will pull in an alternate controller'] = function (assert) {\n var _this7 = this;\n\n this.add('route:home', _routing.Route.extend({\n renderTemplate: function () {\n this.render('homepage');\n }\n }));\n this.add('controller:homepage', _controller.default.extend({\n model: {\n home: 'Comes from homepage'\n }\n }));\n\n return this.visit('/').then(function () {\n var text = _this7.$('p').text();\n\n assert.equal(text, 'Comes from homepage', 'the homepage template was rendered');\n });\n };\n\n _class.prototype['@test An alternate template will pull in an alternate controller instead of controllerName'] = function (assert) {\n var _this8 = this;\n\n this.add('route:home', _routing.Route.extend({\n controllerName: 'foo',\n renderTemplate: function () {\n this.render('homepage');\n }\n }));\n this.add('controller:foo', _controller.default.extend({\n model: {\n home: 'Comes from foo'\n }\n }));\n this.add('controller:homepage', _controller.default.extend({\n model: {\n home: 'Comes from homepage'\n }\n }));\n\n return this.visit('/').then(function () {\n var text = _this8.$('p').text();\n\n assert.equal(text, 'Comes from homepage', 'the homepage template was rendered');\n });\n };\n\n _class.prototype['@test The template will pull in an alternate controller via key/value'] = function (assert) {\n var _this9 = this;\n\n this.router.map(function () {\n this.route('homepage', { path: '/' });\n });\n\n this.add('route:homepage', _routing.Route.extend({\n renderTemplate: function () {\n this.render({ controller: 'home' });\n }\n }));\n this.add('controller:home', _controller.default.extend({\n model: {\n home: 'Comes from home.'\n }\n }));\n\n return this.visit('/').then(function () {\n var text = _this9.$('p').text();\n\n assert.equal(text, 'Comes from home.', 'the homepage template was rendered from data from the HomeController');\n });\n };\n\n _class.prototype['@test The Homepage with explicit template name in renderTemplate and controller'] = function (assert) {\n var _this10 = this;\n\n this.add('controller:home', _controller.default.extend({\n model: {\n home: 'YES I AM HOME'\n }\n }));\n this.add('route:home', _routing.Route.extend({\n renderTemplate: function () {\n this.render('homepage');\n }\n }));\n\n return this.visit('/').then(function () {\n var text = _this10.$('p').text();\n\n assert.equal(text, 'YES I AM HOME', 'The homepage template was rendered');\n });\n };\n\n _class.prototype['@test Model passed via renderTemplate model is set as controller\\'s model'] = function (assert) {\n var _this11 = this;\n\n this.addTemplate('bio', '

{{model.name}}

');\n this.add('route:home', _routing.Route.extend({\n renderTemplate: function () {\n this.render('bio', {\n model: { name: 'emberjs' }\n });\n }\n }));\n\n return this.visit('/').then(function () {\n var text = _this11.$('p').text();\n\n assert.equal(text, 'emberjs', 'Passed model was set as controller\\'s model');\n });\n };\n\n _class.prototype['@test render uses templateName from route'] = function testRenderUsesTemplateNameFromRoute(assert) {\n var _this12 = this;\n\n this.addTemplate('the_real_home_template', '

THIS IS THE REAL HOME

');\n this.add('route:home', _routing.Route.extend({\n templateName: 'the_real_home_template'\n }));\n\n return this.visit('/').then(function () {\n var text = _this12.$('p').text();\n\n assert.equal(text, 'THIS IS THE REAL HOME', 'the homepage template was rendered');\n });\n };\n\n _class.prototype['@test defining templateName allows other templates to be rendered'] = function testDefiningTemplateNameAllowsOtherTemplatesToBeRendered(assert) {\n var _this13 = this;\n\n this.addTemplate('alert', '
Invader!
');\n this.addTemplate('the_real_home_template', '

THIS IS THE REAL HOME

{{outlet \\'alert\\'}}');\n this.add('route:home', _routing.Route.extend({\n templateName: 'the_real_home_template',\n actions: {\n showAlert: function () {\n this.render('alert', {\n into: 'home',\n outlet: 'alert'\n });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var text = _this13.$('p').text();\n assert.equal(text, 'THIS IS THE REAL HOME', 'the homepage template was rendered');\n\n return _this13.runTask(function () {\n return _this13.appRouter.send('showAlert');\n });\n }).then(function () {\n var text = _this13.$('.alert-box').text();\n\n assert.equal(text, 'Invader!', 'Template for alert was rendered into the outlet');\n });\n };\n\n _class.prototype['@test templateName is still used when calling render with no name and options'] = function testTemplateNameIsStillUsedWhenCallingRenderWithNoNameAndOptions(assert) {\n var _this14 = this;\n\n this.addTemplate('alert', '
Invader!
');\n this.addTemplate('home', '

THIS IS THE REAL HOME

{{outlet \\'alert\\'}}');\n\n this.add('route:home', _routing.Route.extend({\n templateName: 'alert',\n renderTemplate: function () {\n this.render({});\n }\n }));\n\n return this.visit('/').then(function () {\n var text = _this14.$('.alert-box').text();\n\n assert.equal(text, 'Invader!', 'default templateName was rendered into outlet');\n });\n };\n\n _class.prototype['@test The Homepage with a `setupController` hook'] = function testTheHomepageWithASetupControllerHook(assert) {\n var _this15 = this;\n\n this.addTemplate('home', '
    {{#each hours as |entry|}}\\n
  • {{entry}}
  • \\n {{/each}}\\n
\\n ');\n\n this.add('route:home', _routing.Route.extend({\n setupController: function (controller) {\n controller.set('hours', ['Monday through Friday: 9am to 5pm', 'Saturday: Noon to Midnight', 'Sunday: Noon to 6pm']);\n }\n }));\n return this.visit('/').then(function () {\n var text = _this15.$('ul li:nth-child(3)').text();\n\n assert.equal(text, 'Sunday: Noon to 6pm', 'The template was rendered with the hours context');\n });\n };\n\n _class.prototype['@test The route controller is still set when overriding the setupController hook'] = function (assert) {\n var _this16 = this;\n\n this.add('route:home', _routing.Route.extend({\n setupController: function () {\n // no-op\n // importantly, we are not calling this._super\n }\n }));\n\n this.add('controller:home', _controller.default.extend());\n\n return this.visit('/').then(function () {\n var homeRoute = _this16.applicationInstance.lookup('route:home');\n var homeController = _this16.applicationInstance.lookup('controller:home');\n\n assert.equal(homeRoute.controller, homeController, 'route controller is the home controller');\n });\n };\n\n _class.prototype['@test the route controller can be specified via controllerName'] = function testTheRouteControllerCanBeSpecifiedViaControllerName(assert) {\n var _this17 = this;\n\n this.addTemplate('home', '

{{myValue}}

');\n this.add('route:home', _routing.Route.extend({\n controllerName: 'myController'\n }));\n this.add('controller:myController', _controller.default.extend({\n myValue: 'foo'\n }));\n\n return this.visit('/').then(function () {\n var homeRoute = _this17.applicationInstance.lookup('route:home');\n var myController = _this17.applicationInstance.lookup('controller:myController');\n var text = _this17.$('p').text();\n\n assert.equal(homeRoute.controller, myController, 'route controller is set by controllerName');\n assert.equal(text, 'foo', 'The homepage template was rendered with data from the custom controller');\n });\n };\n\n _class.prototype['@test The route controller specified via controllerName is used in render'] = function (assert) {\n var _this18 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.add('route:home', _routing.Route.extend({\n controllerName: 'myController',\n renderTemplate: function () {\n this.render('alternative_home');\n }\n }));\n\n this.add('controller:myController', _controller.default.extend({\n myValue: 'foo'\n }));\n\n this.addTemplate('alternative_home', '

alternative home: {{myValue}}

');\n\n return this.visit('/').then(function () {\n var homeRoute = _this18.applicationInstance.lookup('route:home');\n var myController = _this18.applicationInstance.lookup('controller:myController');\n var text = _this18.$('p').text();\n\n assert.equal(homeRoute.controller, myController, 'route controller is set by controllerName');\n\n assert.equal(text, 'alternative home: foo', 'The homepage template was rendered with data from the custom controller');\n });\n };\n\n _class.prototype['@test The route controller specified via controllerName is used in render even when a controller with the routeName is available'] = function (assert) {\n var _this19 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.addTemplate('home', '

home: {{myValue}}

');\n\n this.add('route:home', _routing.Route.extend({\n controllerName: 'myController'\n }));\n\n this.add('controller:home', _controller.default.extend({\n myValue: 'home'\n }));\n\n this.add('controller:myController', _controller.default.extend({\n myValue: 'myController'\n }));\n\n return this.visit('/').then(function () {\n var homeRoute = _this19.applicationInstance.lookup('route:home');\n var myController = _this19.applicationInstance.lookup('controller:myController');\n var text = _this19.$('p').text();\n\n assert.equal(homeRoute.controller, myController, 'route controller is set by controllerName');\n\n assert.equal(text, 'home: myController', 'The homepage template was rendered with data from the custom controller');\n });\n };\n\n _class.prototype['@test The Homepage with a \\'setupController\\' hook modifying other controllers'] = function (assert) {\n var _this20 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.add('route:home', _routing.Route.extend({\n setupController: function () /* controller */{\n this.controllerFor('home').set('hours', ['Monday through Friday: 9am to 5pm', 'Saturday: Noon to Midnight', 'Sunday: Noon to 6pm']);\n }\n }));\n\n this.addTemplate('home', '
    {{#each hours as |entry|}}
  • {{entry}}
  • {{/each}}
');\n\n return this.visit('/').then(function () {\n var text = _this20.$('ul li:nth-child(3)').text();\n\n assert.equal(text, 'Sunday: Noon to 6pm', 'The template was rendered with the hours context');\n });\n };\n\n _class.prototype['@test The Homepage with a computed model that does not get overridden'] = function (assert) {\n var _this21 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.add('controller:home', _controller.default.extend({\n model: (0, _metal.computed)(function () {\n return ['Monday through Friday: 9am to 5pm', 'Saturday: Noon to Midnight', 'Sunday: Noon to 6pm'];\n })\n }));\n\n this.addTemplate('home', '
    {{#each model as |passage|}}
  • {{passage}}
  • {{/each}}
');\n\n return this.visit('/').then(function () {\n var text = _this21.$('ul li:nth-child(3)').text();\n\n assert.equal(text, 'Sunday: Noon to 6pm', 'The template was rendered with the context intact');\n });\n };\n\n _class.prototype['@test The Homepage getting its controller context via model'] = function (assert) {\n var _this22 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.add('route:home', _routing.Route.extend({\n model: function () {\n return ['Monday through Friday: 9am to 5pm', 'Saturday: Noon to Midnight', 'Sunday: Noon to 6pm'];\n },\n setupController: function (controller, model) {\n assert.equal(this.controllerFor('home'), controller);\n\n this.controllerFor('home').set('hours', model);\n }\n }));\n\n this.addTemplate('home', '
    {{#each hours as |entry|}}
  • {{entry}}
  • {{/each}}
');\n\n return this.visit('/').then(function () {\n var text = _this22.$('ul li:nth-child(3)').text();\n\n assert.equal(text, 'Sunday: Noon to 6pm', 'The template was rendered with the hours context');\n });\n };\n\n _class.prototype['@test The Specials Page getting its controller context by deserializing the params hash'] = function (assert) {\n var _this23 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('special', { path: '/specials/:menu_item_id' });\n });\n\n this.add('route:special', _routing.Route.extend({\n model: function (params) {\n return _runtime.Object.create({\n menuItemId: params.menu_item_id\n });\n }\n }));\n\n this.addTemplate('special', '

{{model.menuItemId}}

');\n\n return this.visit('/specials/1').then(function () {\n var text = _this23.$('p').text();\n\n assert.equal(text, '1', 'The model was used to render the template');\n });\n };\n\n _class.prototype['@test The Specials Page defaults to looking models up via `find`'] = function testTheSpecialsPageDefaultsToLookingModelsUpViaFind() {\n var _this24 = this;\n\n var MenuItem = _runtime.Object.extend();\n MenuItem.reopenClass({\n find: function (id) {\n return MenuItem.create({ id: id });\n }\n });\n this.add('model:menu_item', MenuItem);\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('special', { path: '/specials/:menu_item_id' });\n });\n\n this.addTemplate('special', '{{model.id}}');\n\n return this.visit('/specials/1').then(function () {\n _this24.assertText('1', 'The model was used to render the template');\n });\n };\n\n _class.prototype['@test The Special Page returning a promise puts the app into a loading state until the promise is resolved'] = function testTheSpecialPageReturningAPromisePutsTheAppIntoALoadingStateUntilThePromiseIsResolved() {\n var _this25 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('special', { path: '/specials/:menu_item_id' });\n });\n\n var menuItem = void 0,\n resolve = void 0;\n\n var MenuItem = _runtime.Object.extend();\n MenuItem.reopenClass({\n find: function (id) {\n menuItem = MenuItem.create({ id: id });\n\n return new _rsvp.default.Promise(function (res) {\n resolve = res;\n });\n }\n });\n\n this.add('model:menu_item', MenuItem);\n\n this.addTemplate('special', '

{{model.id}}

');\n this.addTemplate('loading', '

LOADING!

');\n\n var visited = this.visit('/specials/1');\n this.assertText('LOADING!', 'The app is in the loading state');\n\n resolve(menuItem);\n\n return visited.then(function () {\n _this25.assertText('1', 'The app is now in the specials state');\n });\n };\n\n _class.prototype['@test The loading state doesn\\'t get entered for promises that resolve on the same run loop'] = function (assert) {\n var _this26 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('special', { path: '/specials/:menu_item_id' });\n });\n\n var MenuItem = _runtime.Object.extend();\n MenuItem.reopenClass({\n find: function (id) {\n return { id: id };\n }\n });\n\n this.add('model:menu_item', MenuItem);\n\n this.add('route:loading', _routing.Route.extend({\n enter: function () {\n assert.ok(false, \"LoadingRoute shouldn't have been entered.\");\n }\n }));\n\n this.addTemplate('special', '

{{model.id}}

');\n this.addTemplate('loading', '

LOADING!

');\n\n return this.visit('/specials/1').then(function () {\n var text = _this26.$('p').text();\n\n assert.equal(text, '1', 'The app is now in the specials state');\n });\n };\n\n _class.prototype[\"@test The Special page returning an error invokes SpecialRoute's error handler\"] = function testTheSpecialPageReturningAnErrorInvokesSpecialRouteSErrorHandler(assert) {\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('special', { path: '/specials/:menu_item_id' });\n });\n\n var menuItem = void 0,\n promise = void 0,\n resolve = void 0;\n\n var MenuItem = _runtime.Object.extend();\n MenuItem.reopenClass({\n find: function (id) {\n menuItem = MenuItem.create({ id: id });\n promise = new _rsvp.default.Promise(function (res) {\n return resolve = res;\n });\n\n return promise;\n }\n });\n\n this.add('model:menu_item', MenuItem);\n\n this.add('route:special', _routing.Route.extend({\n setup: function () {\n throw new Error('Setup error');\n },\n\n actions: {\n error: function (reason) {\n assert.equal(reason.message, 'Setup error', 'SpecialRoute#error received the error thrown from setup');\n return true;\n }\n }\n }));\n\n this.handleURLRejectsWith(this, assert, 'specials/1', 'Setup error');\n\n (0, _runloop.run)(function () {\n return resolve(menuItem);\n });\n };\n\n _class.prototype[\"@test ApplicationRoute's default error handler can be overridden\"] = function testApplicationRouteSDefaultErrorHandlerCanBeOverridden(assert) {\n assert.expect(2);\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('special', { path: '/specials/:menu_item_id' });\n });\n\n var menuItem = void 0,\n resolve = void 0;\n\n var MenuItem = _runtime.Object.extend();\n\n MenuItem.reopenClass({\n find: function (id) {\n menuItem = MenuItem.create({ id: id });\n return new _rsvp.default.Promise(function (res) {\n return resolve = res;\n });\n }\n });\n this.add('model:menu_item', MenuItem);\n\n this.add('route:application', _routing.Route.extend({\n actions: {\n error: function (reason) {\n assert.equal(reason.message, 'Setup error', 'error was correctly passed to custom ApplicationRoute handler');\n return true;\n }\n }\n }));\n\n this.add('route:special', _routing.Route.extend({\n setup: function () {\n throw new Error('Setup error');\n }\n }));\n\n this.handleURLRejectsWith(this, assert, '/specials/1', 'Setup error');\n\n (0, _runloop.run)(function () {\n return resolve(menuItem);\n });\n };\n\n _class.prototype['@test Moving from one page to another triggers the correct callbacks'] = function testMovingFromOnePageToAnotherTriggersTheCorrectCallbacks(assert) {\n var _this27 = this;\n\n assert.expect(3);\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('special', { path: '/specials/:menu_item_id' });\n });\n\n var MenuItem = _runtime.Object.extend();\n MenuItem.reopenClass({\n find: function (id) {\n return MenuItem.create({ id: id });\n }\n });\n this.add('model:menu_item', MenuItem);\n\n this.addTemplate('home', '

Home

');\n this.addTemplate('special', '

{{model.id}}

');\n\n return this.visit('/').then(function () {\n _this27.assertText('Home', 'The app is now in the initial state');\n\n var promiseContext = MenuItem.create({ id: 1 });\n\n return _this27.visit('/specials/1', promiseContext);\n }).then(function () {\n assert.equal(_this27.currentURL, '/specials/1');\n _this27.assertText('1', 'The app is now transitioned');\n });\n };\n\n _class.prototype['@test Nested callbacks are not exited when moving to siblings'] = function testNestedCallbacksAreNotExitedWhenMovingToSiblings(assert) {\n var _this28 = this;\n\n var rootSetup = 0;\n var rootRender = 0;\n var rootModel = 0;\n var rootSerialize = 0;\n var menuItem = void 0;\n var rootElement = void 0;\n\n var MenuItem = _runtime.Object.extend();\n MenuItem.reopenClass({\n find: function (id) {\n menuItem = MenuItem.create({ id: id });\n return menuItem;\n }\n });\n\n this.router.map(function () {\n this.route('root', { path: '/' }, function () {\n this.route('special', {\n path: '/specials/:menu_item_id',\n resetNamespace: true\n });\n });\n });\n\n this.add('route:root', _routing.Route.extend({\n model: function () {\n rootModel++;\n return this._super.apply(this, arguments);\n },\n setupController: function () {\n rootSetup++;\n },\n renderTemplate: function () {\n rootRender++;\n },\n serialize: function () {\n rootSerialize++;\n return this._super.apply(this, arguments);\n }\n }));\n\n this.add('route:loading', _routing.Route.extend({}));\n this.add('route:home', _routing.Route.extend({}));\n this.add('route:special', _routing.Route.extend({\n model: function (_ref) {\n var menu_item_id = _ref.menu_item_id;\n\n return MenuItem.find(menu_item_id);\n },\n setupController: function (controller, model) {\n (0, _metal.set)(controller, 'model', model);\n }\n }));\n\n this.addTemplate('root.index', '

Home

');\n this.addTemplate('special', '

{{model.id}}

');\n this.addTemplate('loading', '

LOADING!

');\n\n return this.visit('/').then(function () {\n rootElement = document.getElementById('qunit-fixture');\n\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('h3')), 'Home', 'The app is now in the initial state');\n assert.equal(rootSetup, 1, 'The root setup was triggered');\n assert.equal(rootRender, 1, 'The root render was triggered');\n assert.equal(rootSerialize, 0, 'The root serialize was not called');\n assert.equal(rootModel, 1, 'The root model was called');\n\n var router = _this28.applicationInstance.lookup('router:main');\n var menuItem = MenuItem.create({ id: 1 });\n\n return router.transitionTo('special', menuItem).then(function () {\n assert.equal(rootSetup, 1, 'The root setup was not triggered again');\n assert.equal(rootRender, 1, 'The root render was not triggered again');\n assert.equal(rootSerialize, 0, 'The root serialize was not called');\n\n // TODO: Should this be changed?\n assert.equal(rootModel, 1, 'The root model was called again');\n\n assert.deepEqual(router.location.path, '/specials/1');\n assert.equal(router.currentPath, 'root.special');\n });\n });\n };\n\n _class.prototype['@test Events are triggered on the controller if a matching action name is implemented'] = function testEventsAreTriggeredOnTheControllerIfAMatchingActionNameIsImplemented(assert) {\n var done = assert.async();\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n var model = { name: 'Tom Dale' };\n var stateIsNotCalled = true;\n\n this.add('route:home', _routing.Route.extend({\n model: function () {\n return model;\n },\n\n actions: {\n showStuff: function () {\n stateIsNotCalled = false;\n }\n }\n }));\n\n this.addTemplate('home', '{{name}}');\n this.add('controller:home', _controller.default.extend({\n actions: {\n showStuff: function (context) {\n assert.ok(stateIsNotCalled, 'an event on the state is not triggered');\n assert.deepEqual(context, { name: 'Tom Dale' }, 'an event with context is passed');\n done();\n }\n }\n }));\n\n this.visit('/').then(function () {\n document.getElementById('qunit-fixture').querySelector('a').click();\n });\n };\n\n _class.prototype['@test Events are triggered on the current state when defined in `actions` object'] = function testEventsAreTriggeredOnTheCurrentStateWhenDefinedInActionsObject(assert) {\n var done = assert.async();\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n var model = { name: 'Tom Dale' };\n var HomeRoute = _routing.Route.extend({\n model: function () {\n return model;\n },\n\n actions: {\n showStuff: function (obj) {\n assert.ok(this instanceof HomeRoute, 'the handler is an App.HomeRoute');\n assert.deepEqual((0, _polyfills.assign)({}, obj), { name: 'Tom Dale' }, 'the context is correct');\n done();\n }\n }\n });\n\n this.add('route:home', HomeRoute);\n this.addTemplate('home', '{{model.name}}');\n\n this.visit('/').then(function () {\n document.getElementById('qunit-fixture').querySelector('a').click();\n });\n };\n\n _class.prototype['@test Events defined in `actions` object are triggered on the current state when routes are nested'] = function testEventsDefinedInActionsObjectAreTriggeredOnTheCurrentStateWhenRoutesAreNested(assert) {\n var done = assert.async();\n\n this.router.map(function () {\n this.route('root', { path: '/' }, function () {\n this.route('index', { path: '/' });\n });\n });\n\n var model = { name: 'Tom Dale' };\n\n var RootRoute = _routing.Route.extend({\n actions: {\n showStuff: function (obj) {\n assert.ok(this instanceof RootRoute, 'the handler is an App.HomeRoute');\n assert.deepEqual((0, _polyfills.assign)({}, obj), { name: 'Tom Dale' }, 'the context is correct');\n done();\n }\n }\n });\n this.add('route:root', RootRoute);\n this.add('route:root.index', _routing.Route.extend({\n model: function () {\n return model;\n }\n }));\n\n this.addTemplate('root.index', '{{model.name}}');\n\n this.visit('/').then(function () {\n document.getElementById('qunit-fixture').querySelector('a').click();\n });\n };\n\n _class.prototype['@test Events can be handled by inherited event handlers'] = function testEventsCanBeHandledByInheritedEventHandlers(assert) {\n assert.expect(4);\n\n var SuperRoute = _routing.Route.extend({\n actions: {\n foo: function () {\n assert.ok(true, 'foo');\n },\n bar: function (msg) {\n assert.equal(msg, 'HELLO', 'bar hander in super route');\n }\n }\n });\n\n var RouteMixin = _metal.Mixin.create({\n actions: {\n bar: function (msg) {\n assert.equal(msg, 'HELLO', 'bar handler in mixin');\n this._super(msg);\n }\n }\n });\n\n this.add('route:home', SuperRoute.extend(RouteMixin, {\n actions: {\n baz: function () {\n assert.ok(true, 'baz', 'baz hander in route');\n }\n }\n }));\n this.addTemplate('home', '\\n Do foo\\n Do bar with arg\\n Do bar\\n ');\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n rootElement.querySelector('.do-foo').click();\n rootElement.querySelector('.do-bar-with-arg').click();\n rootElement.querySelector('.do-baz').click();\n });\n };\n\n _class.prototype['@test Actions are not triggered on the controller if a matching action name is implemented as a method'] = function testActionsAreNotTriggeredOnTheControllerIfAMatchingActionNameIsImplementedAsAMethod(assert) {\n var done = assert.async();\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n var model = { name: 'Tom Dale' };\n var stateIsNotCalled = true;\n\n this.add('route:home', _routing.Route.extend({\n model: function () {\n return model;\n },\n\n actions: {\n showStuff: function (context) {\n assert.ok(stateIsNotCalled, 'an event on the state is not triggered');\n assert.deepEqual(context, { name: 'Tom Dale' }, 'an event with context is passed');\n done();\n }\n }\n }));\n\n this.addTemplate('home', '{{name}}');\n\n this.add('controller:home', _controller.default.extend({\n showStuff: function () {\n stateIsNotCalled = false;\n assert.ok(stateIsNotCalled, 'an event on the state is not triggered');\n }\n }));\n\n this.visit('/').then(function () {\n document.getElementById('qunit-fixture').querySelector('a').click();\n });\n };\n\n _class.prototype['@test actions can be triggered with multiple arguments'] = function testActionsCanBeTriggeredWithMultipleArguments(assert) {\n var done = assert.async();\n this.router.map(function () {\n this.route('root', { path: '/' }, function () {\n this.route('index', { path: '/' });\n });\n });\n\n var model1 = { name: 'Tilde' };\n var model2 = { name: 'Tom Dale' };\n\n var RootRoute = _routing.Route.extend({\n actions: {\n showStuff: function (obj1, obj2) {\n assert.ok(this instanceof RootRoute, 'the handler is an App.HomeRoute');\n assert.deepEqual((0, _polyfills.assign)({}, obj1), { name: 'Tilde' }, 'the first context is correct');\n assert.deepEqual((0, _polyfills.assign)({}, obj2), { name: 'Tom Dale' }, 'the second context is correct');\n done();\n }\n }\n });\n\n this.add('route:root', RootRoute);\n\n this.add('controller:root.index', _controller.default.extend({\n model1: model1,\n model2: model2\n }));\n\n this.addTemplate('root.index', '{{model1.name}}');\n\n this.visit('/').then(function () {\n document.getElementById('qunit-fixture').querySelector('a').click();\n });\n };\n\n _class.prototype['@test transitioning multiple times in a single run loop only sets the URL once'] = function testTransitioningMultipleTimesInASingleRunLoopOnlySetsTheURLOnce(assert) {\n var _this29 = this;\n\n this.router.map(function () {\n this.route('root', { path: '/' });\n this.route('foo');\n this.route('bar');\n });\n\n return this.visit('/').then(function () {\n var urlSetCount = 0;\n var router = _this29.applicationInstance.lookup('router:main');\n\n router.get('location').setURL = function (path) {\n urlSetCount++;\n (0, _metal.set)(this, 'path', path);\n };\n\n assert.equal(urlSetCount, 0);\n\n (0, _runloop.run)(function () {\n router.transitionTo('foo');\n router.transitionTo('bar');\n });\n\n assert.equal(urlSetCount, 1);\n assert.equal(router.get('location').getURL(), '/bar');\n });\n };\n\n _class.prototype['@test navigating away triggers a url property change'] = function testNavigatingAwayTriggersAUrlPropertyChange(assert) {\n var _this30 = this;\n\n assert.expect(3);\n\n this.router.map(function () {\n this.route('root', { path: '/' });\n this.route('foo', { path: '/foo' });\n this.route('bar', { path: '/bar' });\n });\n\n return this.visit('/').then(function () {\n var router = _this30.applicationInstance.lookup('router:main');\n\n (0, _metal.addObserver)(router, 'url', function () {\n assert.ok(true, 'url change event was fired');\n });\n ['foo', 'bar', '/foo'].forEach(function (destination) {\n return (0, _runloop.run)(router, 'transitionTo', destination);\n });\n });\n };\n\n _class.prototype['@test using replaceWith calls location.replaceURL if available'] = function testUsingReplaceWithCallsLocationReplaceURLIfAvailable(assert) {\n var _this31 = this;\n\n var setCount = 0;\n var replaceCount = 0;\n this.router.reopen({\n location: _routing.NoneLocation.create({\n setURL: function (path) {\n setCount++;\n (0, _metal.set)(this, 'path', path);\n },\n replaceURL: function (path) {\n replaceCount++;\n (0, _metal.set)(this, 'path', path);\n }\n })\n });\n\n this.router.map(function () {\n this.route('root', { path: '/' });\n this.route('foo');\n });\n\n return this.visit('/').then(function () {\n var router = _this31.applicationInstance.lookup('router:main');\n assert.equal(setCount, 1);\n assert.equal(replaceCount, 0);\n\n (0, _runloop.run)(function () {\n return router.replaceWith('foo');\n });\n\n assert.equal(setCount, 1, 'should not call setURL');\n assert.equal(replaceCount, 1, 'should call replaceURL once');\n assert.equal(router.get('location').getURL(), '/foo');\n });\n };\n\n _class.prototype['@test using replaceWith calls setURL if location.replaceURL is not defined'] = function testUsingReplaceWithCallsSetURLIfLocationReplaceURLIsNotDefined(assert) {\n var _this32 = this;\n\n var setCount = 0;\n\n this.router.reopen({\n location: _routing.NoneLocation.create({\n setURL: function (path) {\n setCount++;\n (0, _metal.set)(this, 'path', path);\n }\n })\n });\n\n this.router.map(function () {\n this.route('root', { path: '/' });\n this.route('foo');\n });\n\n return this.visit('/').then(function () {\n var router = _this32.applicationInstance.lookup('router:main');\n\n assert.equal(setCount, 1);\n (0, _runloop.run)(function () {\n return router.replaceWith('foo');\n });\n assert.equal(setCount, 2, 'should call setURL once');\n assert.equal(router.get('location').getURL(), '/foo');\n });\n };\n\n _class.prototype['@test Route inherits model from parent route'] = function testRouteInheritsModelFromParentRoute(assert) {\n var _this33 = this;\n\n assert.expect(9);\n\n this.router.map(function () {\n this.route('the-post', { path: '/posts/:post_id' }, function () {\n this.route('comments');\n\n this.route('shares', { path: '/shares/:share_id', resetNamespace: true }, function () {\n this.route('share');\n });\n });\n });\n\n var post1 = {};\n var post2 = {};\n var post3 = {};\n var share1 = {};\n var share2 = {};\n var share3 = {};\n\n var posts = {\n 1: post1,\n 2: post2,\n 3: post3\n };\n var shares = {\n 1: share1,\n 2: share2,\n 3: share3\n };\n\n this.add('route:the-post', _routing.Route.extend({\n model: function (params) {\n return posts[params.post_id];\n }\n }));\n\n this.add('route:the-post.comments', _routing.Route.extend({\n afterModel: function (post /*, transition */) {\n var parent_model = this.modelFor('the-post');\n\n assert.equal(post, parent_model);\n }\n }));\n\n this.add('route:shares', _routing.Route.extend({\n model: function (params) {\n return shares[params.share_id];\n }\n }));\n\n this.add('route:shares.share', _routing.Route.extend({\n afterModel: function (share /*, transition */) {\n var parent_model = this.modelFor('shares');\n\n assert.equal(share, parent_model);\n }\n }));\n\n return this.visit('/posts/1/comments').then(function () {\n assert.ok(true, 'url: /posts/1/comments was handled');\n return _this33.visit('/posts/1/shares/1');\n }).then(function () {\n assert.ok(true, 'url: /posts/1/shares/1 was handled');\n return _this33.visit('/posts/2/comments');\n }).then(function () {\n assert.ok(true, 'url: /posts/2/comments was handled');\n return _this33.visit('/posts/2/shares/2');\n }).then(function () {\n assert.ok(true, 'url: /posts/2/shares/2 was handled');\n return _this33.visit('/posts/3/comments');\n }).then(function () {\n assert.ok(true, 'url: /posts/3/shares was handled');\n return _this33.visit('/posts/3/shares/3');\n }).then(function () {\n assert.ok(true, 'url: /posts/3/shares/3 was handled');\n });\n };\n\n _class.prototype['@test Routes with { resetNamespace: true } inherits model from parent route'] = function testRoutesWithResetNamespaceTrueInheritsModelFromParentRoute(assert) {\n var _this34 = this;\n\n assert.expect(6);\n\n this.router.map(function () {\n this.route('the-post', { path: '/posts/:post_id' }, function () {\n this.route('comments', { resetNamespace: true }, function () {});\n });\n });\n\n var post1 = {};\n var post2 = {};\n var post3 = {};\n\n var posts = {\n 1: post1,\n 2: post2,\n 3: post3\n };\n\n this.add('route:the-post', _routing.Route.extend({\n model: function (params) {\n return posts[params.post_id];\n }\n }));\n\n this.add('route:comments', _routing.Route.extend({\n afterModel: function (post /*, transition */) {\n var parent_model = this.modelFor('the-post');\n\n assert.equal(post, parent_model);\n }\n }));\n\n return this.visit('/posts/1/comments').then(function () {\n assert.ok(true, '/posts/1/comments');\n return _this34.visit('/posts/2/comments');\n }).then(function () {\n assert.ok(true, '/posts/2/comments');\n return _this34.visit('/posts/3/comments');\n }).then(function () {\n assert.ok(true, '/posts/3/comments');\n });\n };\n\n _class.prototype['@test It is possible to get the model from a parent route'] = function testItIsPossibleToGetTheModelFromAParentRoute(assert) {\n var _this35 = this;\n\n assert.expect(6);\n\n this.router.map(function () {\n this.route('the-post', { path: '/posts/:post_id' }, function () {\n this.route('comments', { resetNamespace: true });\n });\n });\n\n var post1 = {};\n var post2 = {};\n var post3 = {};\n var currentPost = void 0;\n\n var posts = {\n 1: post1,\n 2: post2,\n 3: post3\n };\n\n this.add('route:the-post', _routing.Route.extend({\n model: function (params) {\n return posts[params.post_id];\n }\n }));\n\n this.add('route:comments', _routing.Route.extend({\n model: function () {\n assert.equal(this.modelFor('the-post'), currentPost);\n }\n }));\n\n currentPost = post1;\n return this.visit('/posts/1/comments').then(function () {\n assert.ok(true, '/posts/1/comments has been handled');\n currentPost = post2;\n return _this35.visit('/posts/2/comments');\n }).then(function () {\n assert.ok(true, '/posts/2/comments has been handled');\n currentPost = post3;\n return _this35.visit('/posts/3/comments');\n }).then(function () {\n assert.ok(true, '/posts/3/comments has been handled');\n });\n };\n\n _class.prototype['@test A redirection hook is provided'] = function testARedirectionHookIsProvided(assert) {\n var _this36 = this;\n\n this.router.map(function () {\n this.route('choose', { path: '/' });\n this.route('home');\n });\n\n var chooseFollowed = 0;\n var destination = 'home';\n\n this.add('route:choose', _routing.Route.extend({\n redirect: function () {\n if (destination) {\n this.transitionTo(destination);\n }\n },\n setupController: function () {\n chooseFollowed++;\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(chooseFollowed, 0, \"The choose route wasn't entered since a transition occurred\");\n assert.equal(rootElement.querySelectorAll('h3.hours').length, 1, 'The home template was rendered');\n assert.equal(_this36.applicationInstance.lookup('controller:application').get('currentPath'), 'home');\n });\n };\n\n _class.prototype['@test Redirecting from the middle of a route aborts the remainder of the routes'] = function testRedirectingFromTheMiddleOfARouteAbortsTheRemainderOfTheRoutes(assert) {\n var _this37 = this;\n\n assert.expect(3);\n\n this.router.map(function () {\n this.route('home');\n this.route('foo', function () {\n this.route('bar', { resetNamespace: true }, function () {\n this.route('baz');\n });\n });\n });\n\n this.add('route:bar', _routing.Route.extend({\n redirect: function () {\n this.transitionTo('home');\n },\n setupController: function () {\n assert.ok(false, 'Should transition before setupController');\n }\n }));\n\n this.add('route:bar-baz', _routing.Route.extend({\n enter: function () {\n assert.ok(false, 'Should abort transition getting to next route');\n }\n }));\n\n return this.visit('/').then(function () {\n var router = _this37.applicationInstance.lookup('router:main');\n _this37.handleURLAborts(assert, '/foo/bar/baz');\n assert.equal(_this37.applicationInstance.lookup('controller:application').get('currentPath'), 'home');\n assert.equal(router.get('location').getURL(), '/home');\n });\n };\n\n _class.prototype['@test Redirecting to the current target in the middle of a route does not abort initial routing'] = function testRedirectingToTheCurrentTargetInTheMiddleOfARouteDoesNotAbortInitialRouting(assert) {\n var _this38 = this;\n\n assert.expect(5);\n\n this.router.map(function () {\n this.route('home');\n this.route('foo', function () {\n this.route('bar', { resetNamespace: true }, function () {\n this.route('baz');\n });\n });\n });\n\n var successCount = 0;\n\n this.add('route:bar', _routing.Route.extend({\n redirect: function () {\n return this.transitionTo('bar.baz').then(function () {\n successCount++;\n });\n },\n setupController: function () {\n assert.ok(true, \"Should still invoke bar's setupController\");\n }\n }));\n\n this.add('route:bar.baz', _routing.Route.extend({\n setupController: function () {\n assert.ok(true, \"Should still invoke bar.baz's setupController\");\n }\n }));\n\n return this.visit('/foo/bar/baz').then(function () {\n assert.ok(true, '/foo/bar/baz has been handled');\n assert.equal(_this38.applicationInstance.lookup('controller:application').get('currentPath'), 'foo.bar.baz');\n assert.equal(successCount, 1, 'transitionTo success handler was called once');\n });\n };\n\n _class.prototype['@test Redirecting to the current target with a different context aborts the remainder of the routes'] = function testRedirectingToTheCurrentTargetWithADifferentContextAbortsTheRemainderOfTheRoutes(assert) {\n var _this39 = this;\n\n assert.expect(4);\n\n this.router.map(function () {\n this.route('home');\n this.route('foo', function () {\n this.route('bar', { path: 'bar/:id', resetNamespace: true }, function () {\n this.route('baz');\n });\n });\n });\n\n var model = { id: 2 };\n\n var count = 0;\n\n this.add('route:bar', _routing.Route.extend({\n afterModel: function () {\n if (count++ > 10) {\n assert.ok(false, 'infinite loop');\n } else {\n this.transitionTo('bar.baz', model);\n }\n }\n }));\n\n this.add('route:bar.baz', _routing.Route.extend({\n setupController: function () {\n assert.ok(true, 'Should still invoke setupController');\n }\n }));\n\n return this.visit('/').then(function () {\n _this39.handleURLAborts(assert, '/foo/bar/1/baz');\n assert.equal(_this39.applicationInstance.lookup('controller:application').get('currentPath'), 'foo.bar.baz');\n assert.equal(_this39.applicationInstance.lookup('router:main').get('location').getURL(), '/foo/bar/2/baz');\n });\n };\n\n _class.prototype['@test Transitioning from a parent event does not prevent currentPath from being set'] = function testTransitioningFromAParentEventDoesNotPreventCurrentPathFromBeingSet(assert) {\n var _this40 = this;\n\n this.router.map(function () {\n this.route('foo', function () {\n this.route('bar', { resetNamespace: true }, function () {\n this.route('baz');\n });\n this.route('qux');\n });\n });\n\n this.add('route:foo', _routing.Route.extend({\n actions: {\n goToQux: function () {\n this.transitionTo('foo.qux');\n }\n }\n }));\n\n return this.visit('/foo/bar/baz').then(function () {\n assert.ok(true, '/foo/bar/baz has been handled');\n var applicationController = _this40.applicationInstance.lookup('controller:application');\n var router = _this40.applicationInstance.lookup('router:main');\n assert.equal(applicationController.get('currentPath'), 'foo.bar.baz');\n (0, _runloop.run)(function () {\n return router.send('goToQux');\n });\n assert.equal(applicationController.get('currentPath'), 'foo.qux');\n assert.equal(router.get('location').getURL(), '/foo/qux');\n });\n };\n\n _class.prototype['@test Generated names can be customized when providing routes with dot notation'] = function testGeneratedNamesCanBeCustomizedWhenProvidingRoutesWithDotNotation(assert) {\n assert.expect(4);\n\n this.addTemplate('index', '
Index
');\n this.addTemplate('application', \"

Home

{{outlet}}
\");\n this.addTemplate('foo', \"
{{outlet}}
\");\n this.addTemplate('bar', \"
{{outlet}}
\");\n this.addTemplate('bar.baz', '

{{name}}Bottom!

');\n\n this.router.map(function () {\n this.route('foo', { path: '/top' }, function () {\n this.route('bar', { path: '/middle', resetNamespace: true }, function () {\n this.route('baz', { path: '/bottom' });\n });\n });\n });\n\n this.add('route:foo', _routing.Route.extend({\n renderTemplate: function () {\n assert.ok(true, 'FooBarRoute was called');\n return this._super.apply(this, arguments);\n }\n }));\n\n this.add('route:bar.baz', _routing.Route.extend({\n renderTemplate: function () {\n assert.ok(true, 'BarBazRoute was called');\n return this._super.apply(this, arguments);\n }\n }));\n\n this.add('controller:bar', _controller.default.extend({\n name: 'Bar'\n }));\n\n this.add('controller:bar.baz', _controller.default.extend({\n name: 'BarBaz'\n }));\n\n return this.visit('/top/middle/bottom').then(function () {\n assert.ok(true, '/top/middle/bottom has been handled');\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.main .middle .bottom p')), 'BarBazBottom!', 'The templates were rendered into their appropriate parents');\n });\n };\n\n _class.prototype[\"@test Child routes render into their parent route's template by default\"] = function testChildRoutesRenderIntoTheirParentRouteSTemplateByDefault(assert) {\n this.addTemplate('index', '
Index
');\n this.addTemplate('application', \"

Home

{{outlet}}
\");\n this.addTemplate('top', \"
{{outlet}}
\");\n this.addTemplate('middle', \"
{{outlet}}
\");\n this.addTemplate('middle.bottom', '

Bottom!

');\n\n this.router.map(function () {\n this.route('top', function () {\n this.route('middle', { resetNamespace: true }, function () {\n this.route('bottom');\n });\n });\n });\n\n return this.visit('/top/middle/bottom').then(function () {\n assert.ok(true, '/top/middle/bottom has been handled');\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.main .middle .bottom p')), 'Bottom!', 'The templates were rendered into their appropriate parents');\n });\n };\n\n _class.prototype['@test Child routes render into specified template'] = function testChildRoutesRenderIntoSpecifiedTemplate(assert) {\n this.addTemplate('index', '
Index
');\n this.addTemplate('application', \"

Home

{{outlet}}
\");\n this.addTemplate('top', \"
{{outlet}}
\");\n this.addTemplate('middle', \"
{{outlet}}
\");\n this.addTemplate('middle.bottom', '

Bottom!

');\n\n this.router.map(function () {\n this.route('top', function () {\n this.route('middle', { resetNamespace: true }, function () {\n this.route('bottom');\n });\n });\n });\n\n this.add('route:middle.bottom', _routing.Route.extend({\n renderTemplate: function () {\n this.render('middle/bottom', { into: 'top' });\n }\n }));\n\n return this.visit('/top/middle/bottom').then(function () {\n assert.ok(true, '/top/middle/bottom has been handled');\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.querySelectorAll('.main .middle .bottom p').length, 0, 'should not render into the middle template');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.main .middle > p')), 'Bottom!', 'The template was rendered into the top template');\n });\n };\n\n _class.prototype['@test Rendering into specified template with slash notation'] = function testRenderingIntoSpecifiedTemplateWithSlashNotation(assert) {\n this.addTemplate('person.profile', 'profile {{outlet}}');\n this.addTemplate('person.details', 'details!');\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.add('route:home', _routing.Route.extend({\n renderTemplate: function () {\n this.render('person/profile');\n this.render('person/details', { into: 'person/profile' });\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.textContent.trim(), 'profile details!', 'The templates were rendered');\n });\n };\n\n _class.prototype['@test Parent route context change'] = function testParentRouteContextChange(assert) {\n var _this41 = this;\n\n var editCount = 0;\n var editedPostIds = (0, _runtime.A)();\n\n this.addTemplate('application', '{{outlet}}');\n this.addTemplate('posts', '{{outlet}}');\n this.addTemplate('post', '{{outlet}}');\n this.addTemplate('post/index', 'showing');\n this.addTemplate('post/edit', 'editing');\n\n this.router.map(function () {\n this.route('posts', function () {\n this.route('post', { path: '/:postId', resetNamespace: true }, function () {\n this.route('edit');\n });\n });\n });\n\n this.add('route:posts', _routing.Route.extend({\n actions: {\n showPost: function (context) {\n this.transitionTo('post', context);\n }\n }\n }));\n\n this.add('route:post', _routing.Route.extend({\n model: function (params) {\n return { id: params.postId };\n },\n serialize: function (model) {\n return { postId: model.id };\n },\n\n actions: {\n editPost: function () {\n this.transitionTo('post.edit');\n }\n }\n }));\n\n this.add('route:post.edit', _routing.Route.extend({\n model: function () {\n var postId = this.modelFor('post').id;\n editedPostIds.push(postId);\n return null;\n },\n setup: function () {\n this._super.apply(this, arguments);\n editCount++;\n }\n }));\n\n return this.visit('/posts/1').then(function () {\n assert.ok(true, '/posts/1 has been handled');\n var router = _this41.applicationInstance.lookup('router:main');\n (0, _runloop.run)(function () {\n return router.send('editPost');\n });\n (0, _runloop.run)(function () {\n return router.send('showPost', { id: '2' });\n });\n (0, _runloop.run)(function () {\n return router.send('editPost');\n });\n assert.equal(editCount, 2, 'set up the edit route twice without failure');\n assert.deepEqual(editedPostIds, ['1', '2'], 'modelFor posts.post returns the right context');\n });\n };\n\n _class.prototype['@test Router accounts for rootURL on page load when using history location'] = function testRouterAccountsForRootURLOnPageLoadWhenUsingHistoryLocation(assert) {\n var rootURL = window.location.pathname + '/app';\n var postsTemplateRendered = false;\n var setHistory = void 0;\n\n setHistory = function (obj, path) {\n obj.set('history', { state: { path: path } });\n };\n\n var location = _routing.HistoryLocation.create({\n initState: function () {\n var path = rootURL + '/posts';\n\n setHistory(this, path);\n this.set('location', {\n pathname: path,\n href: 'http://localhost/' + path\n });\n },\n replaceState: function (path) {\n setHistory(this, path);\n },\n pushState: function (path) {\n setHistory(this, path);\n }\n });\n\n this.router.reopen({\n // location: 'historyTest',\n location: location,\n rootURL: rootURL\n });\n\n this.router.map(function () {\n this.route('posts', { path: '/posts' });\n });\n\n this.add('route:posts', _routing.Route.extend({\n model: function () {},\n renderTemplate: function () {\n postsTemplateRendered = true;\n }\n }));\n\n return this.visit('/').then(function () {\n assert.ok(postsTemplateRendered, 'Posts route successfully stripped from rootURL');\n\n (0, _internalTestHelpers.runDestroy)(location);\n location = null;\n });\n };\n\n _class.prototype['@test The rootURL is passed properly to the location implementation'] = function testTheRootURLIsPassedProperlyToTheLocationImplementation(assert) {\n assert.expect(1);\n var rootURL = '/blahzorz';\n this.add('location:history-test', _routing.HistoryLocation.extend({\n rootURL: 'this is not the URL you are looking for',\n history: {\n pushState: function () {}\n },\n initState: function () {\n assert.equal(this.get('rootURL'), rootURL);\n }\n }));\n\n this.router.reopen({\n location: 'history-test',\n rootURL: rootURL,\n // if we transition in this test we will receive failures\n // if the tests are run from a static file\n _doURLTransition: function () {\n return _rsvp.default.resolve('');\n }\n });\n\n return this.visit('/');\n };\n\n _class.prototype['@test Only use route rendered into main outlet for default into property on child'] = function testOnlyUseRouteRenderedIntoMainOutletForDefaultIntoPropertyOnChild(assert) {\n this.addTemplate('application', \"{{outlet 'menu'}}{{outlet}}\");\n this.addTemplate('posts', '{{outlet}}');\n this.addTemplate('posts.index', '

postsIndex

');\n this.addTemplate('posts.menu', '
postsMenu
');\n\n this.router.map(function () {\n this.route('posts', function () {});\n });\n\n this.add('route:posts', _routing.Route.extend({\n renderTemplate: function () {\n this.render();\n this.render('posts/menu', {\n into: 'application',\n outlet: 'menu'\n });\n }\n }));\n\n return this.visit('/posts').then(function () {\n assert.ok(true, '/posts has been handled');\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-menu')), 'postsMenu', 'The posts/menu template was rendered');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p.posts-index')), 'postsIndex', 'The posts/index template was rendered');\n });\n };\n\n _class.prototype['@test Generating a URL should not affect currentModel'] = function testGeneratingAURLShouldNotAffectCurrentModel(assert) {\n var _this42 = this;\n\n this.router.map(function () {\n this.route('post', { path: '/posts/:post_id' });\n });\n\n var posts = {\n 1: { id: 1 },\n 2: { id: 2 }\n };\n\n this.add('route:post', _routing.Route.extend({\n model: function (params) {\n return posts[params.post_id];\n }\n }));\n\n return this.visit('/posts/1').then(function () {\n assert.ok(true, '/posts/1 has been handled');\n\n var route = _this42.applicationInstance.lookup('route:post');\n assert.equal(route.modelFor('post'), posts[1]);\n\n var url = _this42.applicationInstance.lookup('router:main').generate('post', posts[2]);\n assert.equal(url, '/posts/2');\n assert.equal(route.modelFor('post'), posts[1]);\n });\n };\n\n _class.prototype[\"@test Nested index route is not overridden by parent's implicit index route\"] = function testNestedIndexRouteIsNotOverriddenByParentSImplicitIndexRoute(assert) {\n var _this43 = this;\n\n this.router.map(function () {\n this.route('posts', function () {\n this.route('index', { path: ':category' });\n });\n });\n\n return this.visit('/').then(function () {\n var router = _this43.applicationInstance.lookup('router:main');\n return router.transitionTo('posts', { category: 'emberjs' });\n }).then(function () {\n var router = _this43.applicationInstance.lookup('router:main');\n assert.deepEqual(router.location.path, '/posts/emberjs');\n });\n };\n\n _class.prototype['@test Application template does not duplicate when re-rendered'] = function testApplicationTemplateDoesNotDuplicateWhenReRendered(assert) {\n this.addTemplate('application', '

I render once

{{outlet}}');\n\n this.router.map(function () {\n this.route('posts');\n });\n\n this.add('route:application', _routing.Route.extend({\n model: function () {\n return (0, _runtime.A)();\n }\n }));\n\n return this.visit('/posts').then(function () {\n assert.ok(true, '/posts has been handled');\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('h3.render-once')), 'I render once');\n });\n };\n\n _class.prototype['@test Child routes should render inside the application template if the application template causes a redirect'] = function testChildRoutesShouldRenderInsideTheApplicationTemplateIfTheApplicationTemplateCausesARedirect(assert) {\n this.addTemplate('application', '

App

{{outlet}}');\n this.addTemplate('posts', 'posts');\n\n this.router.map(function () {\n this.route('posts');\n this.route('photos');\n });\n\n this.add('route:application', _routing.Route.extend({\n afterModel: function () {\n this.transitionTo('posts');\n }\n }));\n\n return this.visit('/posts').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.textContent.trim(), 'App posts');\n });\n };\n\n _class.prototype[\"@test The template is not re-rendered when the route's context changes\"] = function testTheTemplateIsNotReRenderedWhenTheRouteSContextChanges(assert) {\n var _this44 = this;\n\n this.router.map(function () {\n this.route('page', { path: '/page/:name' });\n });\n\n this.add('route:page', _routing.Route.extend({\n model: function (params) {\n return _runtime.Object.create({ name: params.name });\n }\n }));\n\n var insertionCount = 0;\n this.add('component:foo-bar', _glimmer.Component.extend({\n didInsertElement: function () {\n insertionCount += 1;\n }\n }));\n\n this.addTemplate('page', '

{{model.name}}{{foo-bar}}

');\n\n var rootElement = document.getElementById('qunit-fixture');\n return this.visit('/page/first').then(function () {\n assert.ok(true, '/page/first has been handled');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'first');\n assert.equal(insertionCount, 1);\n return _this44.visit('/page/second');\n }).then(function () {\n assert.ok(true, '/page/second has been handled');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'second');\n assert.equal(insertionCount, 1, 'view should have inserted only once');\n var router = _this44.applicationInstance.lookup('router:main');\n return (0, _runloop.run)(function () {\n return router.transitionTo('page', _runtime.Object.create({ name: 'third' }));\n });\n }).then(function () {\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'third');\n assert.equal(insertionCount, 1, 'view should still have inserted only once');\n });\n };\n\n _class.prototype['@test The template is not re-rendered when two routes present the exact same template & controller'] = function testTheTemplateIsNotReRenderedWhenTwoRoutesPresentTheExactSameTemplateController(assert) {\n var _this45 = this;\n\n this.router.map(function () {\n this.route('first');\n this.route('second');\n this.route('third');\n this.route('fourth');\n });\n\n // Note add a component to test insertion\n\n var insertionCount = 0;\n this.add('component:x-input', _glimmer.Component.extend({\n didInsertElement: function () {\n insertionCount += 1;\n }\n }));\n\n var SharedRoute = _routing.Route.extend({\n setupController: function () {\n this.controllerFor('shared').set('message', 'This is the ' + this.routeName + ' message');\n },\n renderTemplate: function () {\n this.render('shared', { controller: 'shared' });\n }\n });\n\n this.add('route:shared', SharedRoute);\n this.add('route:first', SharedRoute.extend());\n this.add('route:second', SharedRoute.extend());\n this.add('route:third', SharedRoute.extend());\n this.add('route:fourth', SharedRoute.extend());\n\n this.add('controller:shared', _controller.default.extend());\n\n this.addTemplate('shared', '

{{message}}{{x-input}}

');\n\n var rootElement = document.getElementById('qunit-fixture');\n return this.visit('/first').then(function () {\n assert.ok(true, '/first has been handled');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'This is the first message');\n assert.equal(insertionCount, 1, 'expected one assertion');\n return _this45.visit('/second');\n }).then(function () {\n assert.ok(true, '/second has been handled');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'This is the second message');\n assert.equal(insertionCount, 1, 'expected one assertion');\n return (0, _runloop.run)(function () {\n _this45.applicationInstance.lookup('router:main').transitionTo('third').then(function () {\n assert.ok(true, 'expected transition');\n }, function (reason) {\n assert.ok(false, 'unexpected transition failure: ', QUnit.jsDump.parse(reason));\n });\n });\n }).then(function () {\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'This is the third message');\n assert.equal(insertionCount, 1, 'expected one assertion');\n return _this45.visit('fourth');\n }).then(function () {\n assert.ok(true, '/fourth has been handled');\n assert.equal(insertionCount, 1, 'expected one assertion');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'This is the fourth message');\n });\n };\n\n _class.prototype['@test ApplicationRoute with model does not proxy the currentPath'] = function testApplicationRouteWithModelDoesNotProxyTheCurrentPath(assert) {\n var model = {};\n var currentPath = void 0;\n\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n\n this.add('route:application', _routing.Route.extend({\n model: function () {\n return model;\n }\n }));\n\n this.add('controller:application', _controller.default.extend({\n currentPathDidChange: (0, _metal.observer)('currentPath', function () {\n currentPath = this.currentPath;\n })\n }));\n\n return this.visit('/').then(function () {\n assert.equal(currentPath, 'index', 'currentPath is index');\n assert.equal('currentPath' in model, false, 'should have defined currentPath on controller');\n });\n };\n\n _class.prototype['@test Promises encountered on app load put app into loading state until resolved'] = function testPromisesEncounteredOnAppLoadPutAppIntoLoadingStateUntilResolved(assert) {\n var _this46 = this;\n\n assert.expect(2);\n\n var deferred = _rsvp.default.defer();\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n\n this.add('route:index', _routing.Route.extend({\n model: function () {\n return deferred.promise;\n }\n }));\n\n this.addTemplate('index', '

INDEX

');\n this.addTemplate('loading', '

LOADING

');\n\n (0, _runloop.run)(function () {\n return _this46.visit('/');\n });\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'LOADING', 'The loading state is displaying.');\n (0, _runloop.run)(deferred.resolve);\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'INDEX', 'The index route is display.');\n };\n\n _class.prototype['@test Route should tear down multiple outlets'] = function testRouteShouldTearDownMultipleOutlets(assert) {\n var _this47 = this;\n\n this.addTemplate('application', \"{{outlet 'menu'}}{{outlet}}{{outlet 'footer'}}\");\n this.addTemplate('posts', '{{outlet}}');\n this.addTemplate('users', 'users');\n this.addTemplate('posts.index', '

postsIndex

');\n this.addTemplate('posts.menu', '
postsMenu
');\n this.addTemplate('posts.footer', '
postsFooter
');\n\n this.router.map(function () {\n this.route('posts', function () {});\n this.route('users', function () {});\n });\n\n this.add('route:posts', _routing.Route.extend({\n renderTemplate: function () {\n this.render('posts/menu', {\n into: 'application',\n outlet: 'menu'\n });\n\n this.render();\n\n this.render('posts/footer', {\n into: 'application',\n outlet: 'footer'\n });\n }\n }));\n\n var rootElement = document.getElementById('qunit-fixture');\n return this.visit('/posts').then(function () {\n assert.ok(true, '/posts has been handled');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-menu')), 'postsMenu', 'The posts/menu template was rendered');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p.posts-index')), 'postsIndex', 'The posts/index template was rendered');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-footer')), 'postsFooter', 'The posts/footer template was rendered');\n\n return _this47.visit('/users');\n }).then(function () {\n assert.ok(true, '/users has been handled');\n assert.equal(rootElement.querySelector('div.posts-menu'), null, 'The posts/menu template was removed');\n assert.equal(rootElement.querySelector('p.posts-index'), null, 'The posts/index template was removed');\n assert.equal(rootElement.querySelector('div.posts-footer'), null, 'The posts/footer template was removed');\n });\n };\n\n _class.prototype['@test Route supports clearing outlet explicitly'] = function testRouteSupportsClearingOutletExplicitly(assert) {\n var _this48 = this;\n\n this.addTemplate('application', \"{{outlet}}{{outlet 'modal'}}\");\n this.addTemplate('posts', '{{outlet}}');\n this.addTemplate('users', 'users');\n this.addTemplate('posts.index', '
postsIndex {{outlet}}
');\n this.addTemplate('posts.modal', '
postsModal
');\n this.addTemplate('posts.extra', '
postsExtra
');\n\n this.router.map(function () {\n this.route('posts', function () {});\n this.route('users', function () {});\n });\n\n this.add('route:posts', _routing.Route.extend({\n actions: {\n showModal: function () {\n this.render('posts/modal', {\n into: 'application',\n outlet: 'modal'\n });\n },\n hideModal: function () {\n this.disconnectOutlet({\n outlet: 'modal',\n parentView: 'application'\n });\n }\n }\n }));\n\n this.add('route:posts.index', _routing.Route.extend({\n actions: {\n showExtra: function () {\n this.render('posts/extra', {\n into: 'posts/index'\n });\n },\n hideExtra: function () {\n this.disconnectOutlet({ parentView: 'posts/index' });\n }\n }\n }));\n\n var rootElement = document.getElementById('qunit-fixture');\n\n return this.visit('/posts').then(function () {\n var router = _this48.applicationInstance.lookup('router:main');\n\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-index')), 'postsIndex', 'The posts/index template was rendered');\n (0, _runloop.run)(function () {\n return router.send('showModal');\n });\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-modal')), 'postsModal', 'The posts/modal template was rendered');\n (0, _runloop.run)(function () {\n return router.send('showExtra');\n });\n\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-extra')), 'postsExtra', 'The posts/extra template was rendered');\n (0, _runloop.run)(function () {\n return router.send('hideModal');\n });\n\n assert.equal(rootElement.querySelector('div.posts-modal'), null, 'The posts/modal template was removed');\n (0, _runloop.run)(function () {\n return router.send('hideExtra');\n });\n\n assert.equal(rootElement.querySelector('div.posts-extra'), null, 'The posts/extra template was removed');\n (0, _runloop.run)(function () {\n router.send('showModal');\n });\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-modal')), 'postsModal', 'The posts/modal template was rendered');\n (0, _runloop.run)(function () {\n router.send('showExtra');\n });\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-extra')), 'postsExtra', 'The posts/extra template was rendered');\n return _this48.visit('/users');\n }).then(function () {\n assert.equal(rootElement.querySelector('div.posts-index'), null, 'The posts/index template was removed');\n assert.equal(rootElement.querySelector('div.posts-modal'), null, 'The posts/modal template was removed');\n assert.equal(rootElement.querySelector('div.posts-extra'), null, 'The posts/extra template was removed');\n });\n };\n\n _class.prototype['@test Route supports clearing outlet using string parameter'] = function testRouteSupportsClearingOutletUsingStringParameter(assert) {\n var _this49 = this;\n\n this.addTemplate('application', \"{{outlet}}{{outlet 'modal'}}\");\n this.addTemplate('posts', '{{outlet}}');\n this.addTemplate('users', 'users');\n this.addTemplate('posts.index', '
postsIndex {{outlet}}
');\n this.addTemplate('posts.modal', '
postsModal
');\n\n this.router.map(function () {\n this.route('posts', function () {});\n this.route('users', function () {});\n });\n\n this.add('route:posts', _routing.Route.extend({\n actions: {\n showModal: function () {\n this.render('posts/modal', {\n into: 'application',\n outlet: 'modal'\n });\n },\n hideModal: function () {\n this.disconnectOutlet('modal');\n }\n }\n }));\n\n var rootElement = document.getElementById('qunit-fixture');\n return this.visit('/posts').then(function () {\n var router = _this49.applicationInstance.lookup('router:main');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-index')), 'postsIndex', 'The posts/index template was rendered');\n (0, _runloop.run)(function () {\n return router.send('showModal');\n });\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-modal')), 'postsModal', 'The posts/modal template was rendered');\n (0, _runloop.run)(function () {\n return router.send('hideModal');\n });\n assert.equal(rootElement.querySelector('div.posts-modal'), null, 'The posts/modal template was removed');\n return _this49.visit('/users');\n }).then(function () {\n assert.equal(rootElement.querySelector('div.posts-index'), null, 'The posts/index template was removed');\n assert.equal(rootElement.querySelector('div.posts-modal'), null, 'The posts/modal template was removed');\n });\n };\n\n _class.prototype['@test Route silently fails when cleaning an outlet from an inactive view'] = function testRouteSilentlyFailsWhenCleaningAnOutletFromAnInactiveView(assert) {\n var _this50 = this;\n\n assert.expect(1); // handleURL\n\n this.addTemplate('application', '{{outlet}}');\n this.addTemplate('posts', \"{{outlet 'modal'}}\");\n this.addTemplate('modal', 'A Yo.');\n\n this.router.map(function () {\n this.route('posts');\n });\n\n this.add('route:posts', _routing.Route.extend({\n actions: {\n hideSelf: function () {\n this.disconnectOutlet({\n outlet: 'main',\n parentView: 'application'\n });\n },\n showModal: function () {\n this.render('modal', { into: 'posts', outlet: 'modal' });\n },\n hideModal: function () {\n this.disconnectOutlet({ outlet: 'modal', parentView: 'posts' });\n }\n }\n }));\n\n return this.visit('/posts').then(function () {\n assert.ok(true, '/posts has been handled');\n var router = _this50.applicationInstance.lookup('router:main');\n (0, _runloop.run)(function () {\n return router.send('showModal');\n });\n (0, _runloop.run)(function () {\n return router.send('hideSelf');\n });\n (0, _runloop.run)(function () {\n return router.send('hideModal');\n });\n });\n };\n\n _class.prototype['@test Router `willTransition` hook passes in cancellable transition'] = function testRouterWillTransitionHookPassesInCancellableTransition(assert) {\n var _this51 = this;\n\n // Should hit willTransition 3 times, once for the initial route, and then 2 more times\n // for the two handleURL calls below\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n assert.expect(7);\n\n this.router.reopen({\n init: function () {\n this._super.apply(this, arguments);\n this.on('routeWillChange', function (transition) {\n assert.ok(true, 'routeWillChange was called');\n if (transition.intent && transition.intent.url !== '/') {\n transition.abort();\n }\n });\n }\n });\n } else {\n assert.expect(5);\n this.router.reopen({\n willTransition: function (_, _2, transition) {\n assert.ok(true, 'willTransition was called');\n if (transition.intent.url !== '/') {\n transition.abort();\n }\n }\n });\n }\n\n this.router.map(function () {\n this.route('nork');\n this.route('about');\n });\n\n this.add('route:loading', _routing.Route.extend({\n activate: function () {\n assert.ok(false, 'LoadingRoute was not entered');\n }\n }));\n\n this.add('route:nork', _routing.Route.extend({\n activate: function () {\n assert.ok(false, 'NorkRoute was not entered');\n }\n }));\n\n this.add('route:about', _routing.Route.extend({\n activate: function () {\n assert.ok(false, 'AboutRoute was not entered');\n }\n }));\n\n return this.visit('/').then(function () {\n _this51.handleURLAborts(assert, '/nork');\n _this51.handleURLAborts(assert, '/about');\n });\n };\n\n _class.prototype['@test Aborting/redirecting the transition in `willTransition` prevents LoadingRoute from being entered'] = function testAbortingRedirectingTheTransitionInWillTransitionPreventsLoadingRouteFromBeingEntered(assert) {\n var _this52 = this;\n\n assert.expect(5);\n\n this.router.map(function () {\n this.route('index');\n this.route('nork');\n this.route('about');\n });\n\n var redirect = false;\n\n this.add('route:index', _routing.Route.extend({\n actions: {\n willTransition: function (transition) {\n assert.ok(true, 'willTransition was called');\n if (redirect) {\n // router.js won't refire `willTransition` for this redirect\n this.transitionTo('about');\n } else {\n transition.abort();\n }\n }\n }\n }));\n\n var deferred = null;\n\n this.add('route:loading', _routing.Route.extend({\n activate: function () {\n assert.ok(deferred, 'LoadingRoute should be entered at this time');\n },\n deactivate: function () {\n assert.ok(true, 'LoadingRoute was exited');\n }\n }));\n\n this.add('route:nork', _routing.Route.extend({\n activate: function () {\n assert.ok(true, 'NorkRoute was entered');\n }\n }));\n\n this.add('route:about', _routing.Route.extend({\n activate: function () {\n assert.ok(true, 'AboutRoute was entered');\n },\n model: function () {\n if (deferred) {\n return deferred.promise;\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var router = _this52.applicationInstance.lookup('router:main');\n // Attempted transitions out of index should abort.\n (0, _runloop.run)(router, 'transitionTo', 'nork');\n (0, _runloop.run)(router, 'handleURL', '/nork');\n\n // Attempted transitions out of index should redirect to about\n redirect = true;\n (0, _runloop.run)(router, 'transitionTo', 'nork');\n (0, _runloop.run)(router, 'transitionTo', 'index');\n\n // Redirected transitions out of index to a route with a\n // promise model should pause the transition and\n // activate LoadingRoute\n deferred = _rsvp.default.defer();\n (0, _runloop.run)(router, 'transitionTo', 'nork');\n (0, _runloop.run)(deferred.resolve);\n });\n };\n\n _class.prototype['@test `didTransition` event fires on the router'] = function testDidTransitionEventFiresOnTheRouter(assert) {\n var _this53 = this;\n\n assert.expect(3);\n\n this.router.map(function () {\n this.route('nork');\n });\n\n return this.visit('/').then(function () {\n var router = _this53.applicationInstance.lookup('router:main');\n router.one('didTransition', function () {\n assert.ok(true, 'didTransition fired on initial routing');\n });\n _this53.visit('/');\n }).then(function () {\n var router = _this53.applicationInstance.lookup('router:main');\n router.one('didTransition', function () {\n assert.ok(true, 'didTransition fired on the router');\n assert.equal(router.get('url'), '/nork', 'The url property is updated by the time didTransition fires');\n });\n\n return _this53.visit('/nork');\n });\n };\n\n _class.prototype['@test `didTransition` can be reopened'] = function testDidTransitionCanBeReopened(assert) {\n assert.expect(1);\n\n this.router.map(function () {\n this.route('nork');\n });\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n assert.ok(true, 'no longer a valid test');\n return;\n } else {\n this.router.reopen({\n didTransition: function () {\n this._super.apply(this, arguments);\n assert.ok(true, 'reopened didTransition was called');\n }\n });\n }\n\n return this.visit('/');\n };\n\n _class.prototype['@test `activate` event fires on the route'] = function testActivateEventFiresOnTheRoute(assert) {\n assert.expect(2);\n\n var eventFired = 0;\n\n this.router.map(function () {\n this.route('nork');\n });\n\n this.add('route:nork', _routing.Route.extend({\n init: function () {\n this._super.apply(this, arguments);\n\n this.on('activate', function () {\n assert.equal(++eventFired, 1, 'activate event is fired once');\n });\n },\n activate: function () {\n assert.ok(true, 'activate hook is called');\n }\n }));\n\n return this.visit('/nork');\n };\n\n _class.prototype['@test `deactivate` event fires on the route'] = function testDeactivateEventFiresOnTheRoute(assert) {\n var _this54 = this;\n\n assert.expect(2);\n\n var eventFired = 0;\n\n this.router.map(function () {\n this.route('nork');\n this.route('dork');\n });\n\n this.add('route:nork', _routing.Route.extend({\n init: function () {\n this._super.apply(this, arguments);\n\n this.on('deactivate', function () {\n assert.equal(++eventFired, 1, 'deactivate event is fired once');\n });\n },\n deactivate: function () {\n assert.ok(true, 'deactivate hook is called');\n }\n }));\n\n return this.visit('/nork').then(function () {\n return _this54.visit('/dork');\n });\n };\n\n _class.prototype['@test Actions can be handled by inherited action handlers'] = function testActionsCanBeHandledByInheritedActionHandlers(assert) {\n assert.expect(4);\n\n var SuperRoute = _routing.Route.extend({\n actions: {\n foo: function () {\n assert.ok(true, 'foo');\n },\n bar: function (msg) {\n assert.equal(msg, 'HELLO');\n }\n }\n });\n\n var RouteMixin = _metal.Mixin.create({\n actions: {\n bar: function (msg) {\n assert.equal(msg, 'HELLO');\n this._super(msg);\n }\n }\n });\n\n this.add('route:home', SuperRoute.extend(RouteMixin, {\n actions: {\n baz: function () {\n assert.ok(true, 'baz');\n }\n }\n }));\n\n this.addTemplate('home', '\\n Do foo\\n Do bar with arg\\n Do bar\\n ');\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n rootElement.querySelector('.do-foo').click();\n rootElement.querySelector('.do-bar-with-arg').click();\n rootElement.querySelector('.do-baz').click();\n });\n };\n\n _class.prototype['@test transitionTo returns Transition when passed a route name'] = function testTransitionToReturnsTransitionWhenPassedARouteName(assert) {\n var _this55 = this;\n\n assert.expect(1);\n\n this.router.map(function () {\n this.route('root', { path: '/' });\n this.route('bar');\n });\n\n return this.visit('/').then(function () {\n var router = _this55.applicationInstance.lookup('router:main');\n var transition = (0, _runloop.run)(function () {\n return router.transitionTo('bar');\n });\n assert.equal(transition instanceof _router_js.InternalTransition, true);\n });\n };\n\n _class.prototype['@test transitionTo returns Transition when passed a url'] = function testTransitionToReturnsTransitionWhenPassedAUrl(assert) {\n var _this56 = this;\n\n assert.expect(1);\n\n this.router.map(function () {\n this.route('root', { path: '/' });\n this.route('bar', function () {\n this.route('baz');\n });\n });\n\n return this.visit('/').then(function () {\n var router = _this56.applicationInstance.lookup('router:main');\n var transition = (0, _runloop.run)(function () {\n return router.transitionTo('/bar/baz');\n });\n assert.equal(transition instanceof _router_js.InternalTransition, true);\n });\n };\n\n _class.prototype['@test currentRouteName is a property installed on ApplicationController that can be used in transitionTo'] = function testCurrentRouteNameIsAPropertyInstalledOnApplicationControllerThatCanBeUsedInTransitionTo(assert) {\n var _this57 = this;\n\n assert.expect(24);\n\n this.router.map(function () {\n this.route('index', { path: '/' });\n this.route('be', function () {\n this.route('excellent', { resetNamespace: true }, function () {\n this.route('to', { resetNamespace: true }, function () {\n this.route('each', { resetNamespace: true }, function () {\n this.route('other');\n });\n });\n });\n });\n });\n\n return this.visit('/').then(function () {\n var appController = _this57.applicationInstance.lookup('controller:application');\n var router = _this57.applicationInstance.lookup('router:main');\n\n function transitionAndCheck(path, expectedPath, expectedRouteName) {\n if (path) {\n (0, _runloop.run)(router, 'transitionTo', path);\n }\n assert.equal(appController.get('currentPath'), expectedPath);\n assert.equal(appController.get('currentRouteName'), expectedRouteName);\n }\n\n transitionAndCheck(null, 'index', 'index');\n transitionAndCheck('/be', 'be.index', 'be.index');\n transitionAndCheck('/be/excellent', 'be.excellent.index', 'excellent.index');\n transitionAndCheck('/be/excellent/to', 'be.excellent.to.index', 'to.index');\n transitionAndCheck('/be/excellent/to/each', 'be.excellent.to.each.index', 'each.index');\n transitionAndCheck('/be/excellent/to/each/other', 'be.excellent.to.each.other', 'each.other');\n\n transitionAndCheck('index', 'index', 'index');\n transitionAndCheck('be', 'be.index', 'be.index');\n transitionAndCheck('excellent', 'be.excellent.index', 'excellent.index');\n transitionAndCheck('to.index', 'be.excellent.to.index', 'to.index');\n transitionAndCheck('each', 'be.excellent.to.each.index', 'each.index');\n transitionAndCheck('each.other', 'be.excellent.to.each.other', 'each.other');\n });\n };\n\n _class.prototype['@test Route model hook finds the same model as a manual find'] = function testRouteModelHookFindsTheSameModelAsAManualFind(assert) {\n var post = void 0;\n var Post = _runtime.Object.extend();\n this.add('model:post', Post);\n Post.reopenClass({\n find: function () {\n post = this;\n return {};\n }\n });\n\n this.router.map(function () {\n this.route('post', { path: '/post/:post_id' });\n });\n\n return this.visit('/post/1').then(function () {\n assert.equal(Post, post);\n });\n };\n\n _class.prototype['@test Routes can refresh themselves causing their model hooks to be re-run'] = function testRoutesCanRefreshThemselvesCausingTheirModelHooksToBeReRun(assert) {\n var _this58 = this;\n\n this.router.map(function () {\n this.route('parent', { path: '/parent/:parent_id' }, function () {\n this.route('child');\n });\n });\n\n var appcount = 0;\n this.add('route:application', _routing.Route.extend({\n model: function () {\n ++appcount;\n }\n }));\n\n var parentcount = 0;\n this.add('route:parent', _routing.Route.extend({\n model: function (params) {\n assert.equal(params.parent_id, '123');\n ++parentcount;\n },\n\n actions: {\n refreshParent: function () {\n this.refresh();\n }\n }\n }));\n\n var childcount = 0;\n this.add('route:parent.child', _routing.Route.extend({\n model: function () {\n ++childcount;\n }\n }));\n\n var router = void 0;\n return this.visit('/').then(function () {\n router = _this58.applicationInstance.lookup('router:main');\n assert.equal(appcount, 1);\n assert.equal(parentcount, 0);\n assert.equal(childcount, 0);\n return (0, _runloop.run)(router, 'transitionTo', 'parent.child', '123');\n }).then(function () {\n assert.equal(appcount, 1);\n assert.equal(parentcount, 1);\n assert.equal(childcount, 1);\n return (0, _runloop.run)(router, 'send', 'refreshParent');\n }).then(function () {\n assert.equal(appcount, 1);\n assert.equal(parentcount, 2);\n assert.equal(childcount, 2);\n });\n };\n\n _class.prototype['@test Specifying non-existent controller name in route#render throws'] = function testSpecifyingNonExistentControllerNameInRouteRenderThrows(assert) {\n assert.expect(1);\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.add('route:home', _routing.Route.extend({\n renderTemplate: function () {\n var _this59 = this;\n\n expectAssertion(function () {\n _this59.render('homepage', {\n controller: 'stefanpenneristhemanforme'\n });\n }, \"You passed `controller: 'stefanpenneristhemanforme'` into the `render` method, but no such controller could be found.\");\n }\n }));\n\n return this.visit('/');\n };\n\n _class.prototype[\"@test Redirecting with null model doesn't error out\"] = function testRedirectingWithNullModelDoesnTErrorOut(assert) {\n var _this60 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('about', { path: '/about/:hurhurhur' });\n });\n\n this.add('route:about', _routing.Route.extend({\n serialize: function (model) {\n if (model === null) {\n return { hurhurhur: 'TreeklesMcGeekles' };\n }\n }\n }));\n\n this.add('route:home', _routing.Route.extend({\n beforeModel: function () {\n this.transitionTo('about', null);\n }\n }));\n\n return this.visit('/').then(function () {\n var router = _this60.applicationInstance.lookup('router:main');\n assert.equal(router.get('location.path'), '/about/TreeklesMcGeekles');\n });\n };\n\n _class.prototype['@test rejecting the model hooks promise with a non-error prints the `message` property'] = function testRejectingTheModelHooksPromiseWithANonErrorPrintsTheMessageProperty(assert) {\n var _this61 = this;\n\n assert.expect(5);\n\n var rejectedMessage = 'OMG!! SOOOOOO BAD!!!!';\n var rejectedStack = 'Yeah, buddy: stack gets printed too.';\n\n this.router.map(function () {\n this.route('yippie', { path: '/' });\n });\n\n console.error = function (initialMessage, errorMessage, errorStack) {\n assert.equal(initialMessage, 'Error while processing route: yippie', 'a message with the current route name is printed');\n assert.equal(errorMessage, rejectedMessage, \"the rejected reason's message property is logged\");\n assert.equal(errorStack, rejectedStack, \"the rejected reason's stack property is logged\");\n };\n\n this.add('route:yippie', _routing.Route.extend({\n model: function () {\n return _rsvp.default.reject({\n message: rejectedMessage,\n stack: rejectedStack\n });\n }\n }));\n\n return assert.throws(function () {\n return _this61.visit('/');\n }, function (err) {\n assert.equal(err.message, rejectedMessage);\n return true;\n }, 'expected an exception');\n };\n\n _class.prototype['@test rejecting the model hooks promise with an error with `errorThrown` property prints `errorThrown.message` property'] = function testRejectingTheModelHooksPromiseWithAnErrorWithErrorThrownPropertyPrintsErrorThrownMessageProperty(assert) {\n var _this62 = this;\n\n assert.expect(5);\n var rejectedMessage = 'OMG!! SOOOOOO BAD!!!!';\n var rejectedStack = 'Yeah, buddy: stack gets printed too.';\n\n this.router.map(function () {\n this.route('yippie', { path: '/' });\n });\n\n console.error = function (initialMessage, errorMessage, errorStack) {\n assert.equal(initialMessage, 'Error while processing route: yippie', 'a message with the current route name is printed');\n assert.equal(errorMessage, rejectedMessage, \"the rejected reason's message property is logged\");\n assert.equal(errorStack, rejectedStack, \"the rejected reason's stack property is logged\");\n };\n\n this.add('route:yippie', _routing.Route.extend({\n model: function () {\n return _rsvp.default.reject({\n errorThrown: { message: rejectedMessage, stack: rejectedStack }\n });\n }\n }));\n\n assert.throws(function () {\n return _this62.visit('/');\n }, function (err) {\n assert.equal(err.message, rejectedMessage);\n return true;\n }, 'expected an exception');\n };\n\n _class.prototype['@test rejecting the model hooks promise with no reason still logs error'] = function testRejectingTheModelHooksPromiseWithNoReasonStillLogsError(assert) {\n var _this63 = this;\n\n assert.expect(2);\n this.router.map(function () {\n this.route('wowzers', { path: '/' });\n });\n\n console.error = function (initialMessage) {\n assert.equal(initialMessage, 'Error while processing route: wowzers', 'a message with the current route name is printed');\n };\n\n this.add('route:wowzers', _routing.Route.extend({\n model: function () {\n return _rsvp.default.reject();\n }\n }));\n\n return assert.throws(function () {\n return _this63.visit('/');\n });\n };\n\n _class.prototype['@test rejecting the model hooks promise with a string shows a good error'] = function testRejectingTheModelHooksPromiseWithAStringShowsAGoodError(assert) {\n var _this64 = this;\n\n assert.expect(3);\n var rejectedMessage = 'Supercalifragilisticexpialidocious';\n\n this.router.map(function () {\n this.route('yondo', { path: '/' });\n });\n\n console.error = function (initialMessage, errorMessage) {\n assert.equal(initialMessage, 'Error while processing route: yondo', 'a message with the current route name is printed');\n assert.equal(errorMessage, rejectedMessage, \"the rejected reason's message property is logged\");\n };\n\n this.add('route:yondo', _routing.Route.extend({\n model: function () {\n return _rsvp.default.reject(rejectedMessage);\n }\n }));\n\n assert.throws(function () {\n return _this64.visit('/');\n }, new RegExp(rejectedMessage), 'expected an exception');\n };\n\n _class.prototype[\"@test willLeave, willChangeContext, willChangeModel actions don't fire unless feature flag enabled\"] = function testWillLeaveWillChangeContextWillChangeModelActionsDonTFireUnlessFeatureFlagEnabled(assert) {\n assert.expect(1);\n\n this.router.map(function () {\n this.route('about');\n });\n\n function shouldNotFire() {\n assert.ok(false, \"this action shouldn't have been received\");\n }\n\n this.add('route:index', _routing.Route.extend({\n actions: {\n willChangeModel: shouldNotFire,\n willChangeContext: shouldNotFire,\n willLeave: shouldNotFire\n }\n }));\n\n this.add('route:about', _routing.Route.extend({\n setupController: function () {\n assert.ok(true, 'about route was entered');\n }\n }));\n\n return this.visit('/about');\n };\n\n _class.prototype['@test Errors in transitionTo within redirect hook are logged'] = function testErrorsInTransitionToWithinRedirectHookAreLogged(assert) {\n var _this65 = this;\n\n assert.expect(4);\n var actual = [];\n\n this.router.map(function () {\n this.route('yondo', { path: '/' });\n this.route('stink-bomb');\n });\n\n this.add('route:yondo', _routing.Route.extend({\n redirect: function () {\n this.transitionTo('stink-bomb', { something: 'goes boom' });\n }\n }));\n\n console.error = function () {\n // push the arguments onto an array so we can detect if the error gets logged twice\n actual.push(arguments);\n };\n\n assert.throws(function () {\n return _this65.visit('/');\n }, /More context objects were passed/);\n\n assert.equal(actual.length, 1, 'the error is only logged once');\n assert.equal(actual[0][0], 'Error while processing route: yondo', 'source route is printed');\n assert.ok(actual[0][1].match(/More context objects were passed than there are dynamic segments for the route: stink-bomb/), 'the error is printed');\n };\n\n _class.prototype['@test Errors in transition show error template if available'] = function testErrorsInTransitionShowErrorTemplateIfAvailable(assert) {\n this.addTemplate('error', \"
Error!
\");\n\n this.router.map(function () {\n this.route('yondo', { path: '/' });\n this.route('stink-bomb');\n });\n\n this.add('route:yondo', _routing.Route.extend({\n redirect: function () {\n this.transitionTo('stink-bomb', { something: 'goes boom' });\n }\n }));\n console.error = function () {};\n\n return this.visit('/').then(function () {\n var rootElement = document.querySelector('#qunit-fixture');\n assert.equal(rootElement.querySelectorAll('#error').length, 1, 'Error template was rendered.');\n });\n };\n\n _class.prototype['@test Route#resetController gets fired when changing models and exiting routes'] = function testRouteResetControllerGetsFiredWhenChangingModelsAndExitingRoutes(assert) {\n var _this66 = this;\n\n assert.expect(4);\n\n this.router.map(function () {\n this.route('a', function () {\n this.route('b', { path: '/b/:id', resetNamespace: true }, function () {});\n this.route('c', { path: '/c/:id', resetNamespace: true }, function () {});\n });\n this.route('out');\n });\n\n var calls = [];\n\n var SpyRoute = _routing.Route.extend({\n setupController: function () /* controller, model, transition */{\n calls.push(['setup', this.routeName]);\n },\n resetController: function () /* controller */{\n calls.push(['reset', this.routeName]);\n }\n });\n\n this.add('route:a', SpyRoute.extend());\n this.add('route:b', SpyRoute.extend());\n this.add('route:c', SpyRoute.extend());\n this.add('route:out', SpyRoute.extend());\n\n var router = void 0;\n return this.visit('/').then(function () {\n router = _this66.applicationInstance.lookup('router:main');\n assert.deepEqual(calls, []);\n return (0, _runloop.run)(router, 'transitionTo', 'b', 'b-1');\n }).then(function () {\n assert.deepEqual(calls, [['setup', 'a'], ['setup', 'b']]);\n calls.length = 0;\n return (0, _runloop.run)(router, 'transitionTo', 'c', 'c-1');\n }).then(function () {\n assert.deepEqual(calls, [['reset', 'b'], ['setup', 'c']]);\n calls.length = 0;\n return (0, _runloop.run)(router, 'transitionTo', 'out');\n }).then(function () {\n assert.deepEqual(calls, [['reset', 'c'], ['reset', 'a'], ['setup', 'out']]);\n });\n };\n\n _class.prototype['@test Exception during initialization of non-initial route is not swallowed'] = function testExceptionDuringInitializationOfNonInitialRouteIsNotSwallowed(assert) {\n var _this67 = this;\n\n this.router.map(function () {\n this.route('boom');\n });\n this.add('route:boom', _routing.Route.extend({\n init: function () {\n throw new Error('boom!');\n }\n }));\n\n return assert.throws(function () {\n return _this67.visit('/boom');\n }, /\\bboom\\b/);\n };\n\n _class.prototype['@test Exception during initialization of initial route is not swallowed'] = function testExceptionDuringInitializationOfInitialRouteIsNotSwallowed(assert) {\n var _this68 = this;\n\n this.router.map(function () {\n this.route('boom', { path: '/' });\n });\n this.add('route:boom', _routing.Route.extend({\n init: function () {\n throw new Error('boom!');\n }\n }));\n return assert.throws(function () {\n return _this68.visit('/');\n }, /\\bboom\\b/);\n };\n\n _class.prototype['@test {{outlet}} works when created after initial render'] = function testOutletWorksWhenCreatedAfterInitialRender(assert) {\n var _this69 = this;\n\n this.addTemplate('sample', 'Hi{{#if showTheThing}}{{outlet}}{{/if}}Bye');\n this.addTemplate('sample.inner', 'Yay');\n this.addTemplate('sample.inner2', 'Boo');\n this.router.map(function () {\n this.route('sample', { path: '/' }, function () {\n this.route('inner', { path: '/' });\n this.route('inner2', { path: '/2' });\n });\n });\n\n var rootElement = void 0;\n return this.visit('/').then(function () {\n rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.textContent.trim(), 'HiBye', 'initial render');\n\n (0, _runloop.run)(function () {\n return _this69.applicationInstance.lookup('controller:sample').set('showTheThing', true);\n });\n\n assert.equal(rootElement.textContent.trim(), 'HiYayBye', 'second render');\n return _this69.visit('/2');\n }).then(function () {\n assert.equal(rootElement.textContent.trim(), 'HiBooBye', 'third render');\n });\n };\n\n _class.prototype['@test Can render into a named outlet at the top level'] = function testCanRenderIntoANamedOutletAtTheTopLevel(assert) {\n this.addTemplate('application', 'A-{{outlet}}-B-{{outlet \"other\"}}-C');\n this.addTemplate('modal', 'Hello world');\n this.addTemplate('index', 'The index');\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n this.add('route:application', _routing.Route.extend({\n renderTemplate: function () {\n this.render();\n this.render('modal', {\n into: 'application',\n outlet: 'other'\n });\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.textContent.trim(), 'A-The index-B-Hello world-C', 'initial render');\n });\n };\n\n _class.prototype['@test Can disconnect a named outlet at the top level'] = function testCanDisconnectANamedOutletAtTheTopLevel(assert) {\n var _this70 = this;\n\n this.addTemplate('application', 'A-{{outlet}}-B-{{outlet \"other\"}}-C');\n this.addTemplate('modal', 'Hello world');\n this.addTemplate('index', 'The index');\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n this.add('route:application', _routing.Route.extend({\n renderTemplate: function () {\n this.render();\n this.render('modal', {\n into: 'application',\n outlet: 'other'\n });\n },\n\n actions: {\n banish: function () {\n this.disconnectOutlet({\n parentView: 'application',\n outlet: 'other'\n });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.textContent.trim(), 'A-The index-B-Hello world-C', 'initial render');\n\n (0, _runloop.run)(_this70.applicationInstance.lookup('router:main'), 'send', 'banish');\n\n assert.equal(rootElement.textContent.trim(), 'A-The index-B--C', 'second render');\n });\n };\n\n _class.prototype['@test Can render into a named outlet at the top level, with empty main outlet'] = function testCanRenderIntoANamedOutletAtTheTopLevelWithEmptyMainOutlet(assert) {\n this.addTemplate('application', 'A-{{outlet}}-B-{{outlet \"other\"}}-C');\n this.addTemplate('modal', 'Hello world');\n\n this.router.map(function () {\n this.route('hasNoTemplate', { path: '/' });\n });\n\n this.add('route:application', _routing.Route.extend({\n renderTemplate: function () {\n this.render();\n this.render('modal', {\n into: 'application',\n outlet: 'other'\n });\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.textContent.trim(), 'A--B-Hello world-C', 'initial render');\n });\n };\n\n _class.prototype['@test Can render into a named outlet at the top level, later'] = function testCanRenderIntoANamedOutletAtTheTopLevelLater(assert) {\n var _this71 = this;\n\n this.addTemplate('application', 'A-{{outlet}}-B-{{outlet \"other\"}}-C');\n this.addTemplate('modal', 'Hello world');\n this.addTemplate('index', 'The index');\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n this.add('route:application', _routing.Route.extend({\n actions: {\n launch: function () {\n this.render('modal', {\n into: 'application',\n outlet: 'other'\n });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.textContent.trim(), 'A-The index-B--C', 'initial render');\n (0, _runloop.run)(_this71.applicationInstance.lookup('router:main'), 'send', 'launch');\n assert.equal(rootElement.textContent.trim(), 'A-The index-B-Hello world-C', 'second render');\n });\n };\n\n _class.prototype[\"@test Can render routes with no 'main' outlet and their children\"] = function testCanRenderRoutesWithNoMainOutletAndTheirChildren(assert) {\n var _this72 = this;\n\n this.addTemplate('application', '
{{outlet \"app\"}}
');\n this.addTemplate('app', '
{{outlet \"common\"}}
{{outlet \"sub\"}}
');\n this.addTemplate('common', '
');\n this.addTemplate('sub', '
');\n\n this.router.map(function () {\n this.route('app', { path: '/app' }, function () {\n this.route('sub', { path: '/sub', resetNamespace: true });\n });\n });\n\n this.add('route:app', _routing.Route.extend({\n renderTemplate: function () {\n this.render('app', {\n outlet: 'app',\n into: 'application'\n });\n this.render('common', {\n outlet: 'common',\n into: 'app'\n });\n }\n }));\n\n this.add('route:sub', _routing.Route.extend({\n renderTemplate: function () {\n this.render('sub', {\n outlet: 'sub',\n into: 'app'\n });\n }\n }));\n\n var rootElement = void 0;\n return this.visit('/app').then(function () {\n rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.querySelectorAll('#app-common #common').length, 1, 'Finds common while viewing /app');\n return _this72.visit('/app/sub');\n }).then(function () {\n assert.equal(rootElement.querySelectorAll('#app-common #common').length, 1, 'Finds common while viewing /app/sub');\n assert.equal(rootElement.querySelectorAll('#app-sub #sub').length, 1, 'Finds sub while viewing /app/sub');\n });\n };\n\n _class.prototype['@test Tolerates stacked renders'] = function testToleratesStackedRenders(assert) {\n var _this73 = this;\n\n this.addTemplate('application', '{{outlet}}{{outlet \"modal\"}}');\n this.addTemplate('index', 'hi');\n this.addTemplate('layer', 'layer');\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n this.add('route:application', _routing.Route.extend({\n actions: {\n openLayer: function () {\n this.render('layer', {\n into: 'application',\n outlet: 'modal'\n });\n },\n close: function () {\n this.disconnectOutlet({\n outlet: 'modal',\n parentView: 'application'\n });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n var router = _this73.applicationInstance.lookup('router:main');\n assert.equal(rootElement.textContent.trim(), 'hi');\n (0, _runloop.run)(router, 'send', 'openLayer');\n assert.equal(rootElement.textContent.trim(), 'hilayer');\n (0, _runloop.run)(router, 'send', 'openLayer');\n assert.equal(rootElement.textContent.trim(), 'hilayer');\n (0, _runloop.run)(router, 'send', 'close');\n assert.equal(rootElement.textContent.trim(), 'hi');\n });\n };\n\n _class.prototype['@test Renders child into parent with non-default template name'] = function testRendersChildIntoParentWithNonDefaultTemplateName(assert) {\n this.addTemplate('application', '
{{outlet}}
');\n this.addTemplate('exports.root', '
{{outlet}}
');\n this.addTemplate('exports.index', '
');\n\n this.router.map(function () {\n this.route('root', function () {});\n });\n\n this.add('route:root', _routing.Route.extend({\n renderTemplate: function () {\n this.render('exports/root');\n }\n }));\n\n this.add('route:root.index', _routing.Route.extend({\n renderTemplate: function () {\n this.render('exports/index');\n }\n }));\n\n return this.visit('/root').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.querySelectorAll('.a .b .c').length, 1);\n });\n };\n\n _class.prototype[\"@test Allows any route to disconnectOutlet another route's templates\"] = function testAllowsAnyRouteToDisconnectOutletAnotherRouteSTemplates(assert) {\n var _this74 = this;\n\n this.addTemplate('application', '{{outlet}}{{outlet \"modal\"}}');\n this.addTemplate('index', 'hi');\n this.addTemplate('layer', 'layer');\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n this.add('route:application', _routing.Route.extend({\n actions: {\n openLayer: function () {\n this.render('layer', {\n into: 'application',\n outlet: 'modal'\n });\n }\n }\n }));\n this.add('route:index', _routing.Route.extend({\n actions: {\n close: function () {\n this.disconnectOutlet({\n parentView: 'application',\n outlet: 'modal'\n });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n var router = _this74.applicationInstance.lookup('router:main');\n assert.equal(rootElement.textContent.trim(), 'hi');\n (0, _runloop.run)(router, 'send', 'openLayer');\n assert.equal(rootElement.textContent.trim(), 'hilayer');\n (0, _runloop.run)(router, 'send', 'close');\n assert.equal(rootElement.textContent.trim(), 'hi');\n });\n };\n\n _class.prototype['@test Components inside an outlet have their didInsertElement hook invoked when the route is displayed'] = function testComponentsInsideAnOutletHaveTheirDidInsertElementHookInvokedWhenTheRouteIsDisplayed(assert) {\n this.addTemplate('index', '{{#if showFirst}}{{my-component}}{{else}}{{other-component}}{{/if}}');\n\n var myComponentCounter = 0;\n var otherComponentCounter = 0;\n var indexController = void 0;\n\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n\n this.add('controller:index', _controller.default.extend({\n showFirst: true\n }));\n\n this.add('route:index', _routing.Route.extend({\n setupController: function (controller) {\n indexController = controller;\n }\n }));\n\n this.add('component:my-component', _glimmer.Component.extend({\n didInsertElement: function () {\n myComponentCounter++;\n }\n }));\n\n this.add('component:other-component', _glimmer.Component.extend({\n didInsertElement: function () {\n otherComponentCounter++;\n }\n }));\n\n return this.visit('/').then(function () {\n assert.strictEqual(myComponentCounter, 1, 'didInsertElement invoked on displayed component');\n assert.strictEqual(otherComponentCounter, 0, 'didInsertElement not invoked on displayed component');\n\n (0, _runloop.run)(function () {\n return indexController.set('showFirst', false);\n });\n\n assert.strictEqual(myComponentCounter, 1, 'didInsertElement not invoked on displayed component');\n assert.strictEqual(otherComponentCounter, 1, 'didInsertElement invoked on displayed component');\n });\n };\n\n _class.prototype['@test Doesnt swallow exception thrown from willTransition'] = function testDoesntSwallowExceptionThrownFromWillTransition(assert) {\n var _this75 = this;\n\n assert.expect(1);\n this.addTemplate('application', '{{outlet}}');\n this.addTemplate('index', 'index');\n this.addTemplate('other', 'other');\n\n this.router.map(function () {\n this.route('index', { path: '/' });\n this.route('other', function () {});\n });\n\n this.add('route:index', _routing.Route.extend({\n actions: {\n willTransition: function () {\n throw new Error('boom');\n }\n }\n }));\n\n return this.visit('/').then(function () {\n return assert.throws(function () {\n return _this75.visit('/other');\n }, /boom/, 'expected an exception but none was thrown');\n });\n };\n\n _class.prototype['@test Exception if outlet name is undefined in render and disconnectOutlet'] = function testExceptionIfOutletNameIsUndefinedInRenderAndDisconnectOutlet() {\n var _this76 = this;\n\n this.add('route:application', _routing.Route.extend({\n actions: {\n showModal: function () {\n this.render({\n outlet: undefined,\n parentView: 'application'\n });\n },\n hideModal: function () {\n this.disconnectOutlet({\n outlet: undefined,\n parentView: 'application'\n });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var router = _this76.applicationInstance.lookup('router:main');\n expectAssertion(function () {\n (0, _runloop.run)(function () {\n return router.send('showModal');\n });\n }, /You passed undefined as the outlet name/);\n\n expectAssertion(function () {\n (0, _runloop.run)(function () {\n return router.send('hideModal');\n });\n }, /You passed undefined as the outlet name/);\n });\n };\n\n _class.prototype['@test Route serializers work for Engines'] = function testRouteSerializersWorkForEngines(assert) {\n var _this77 = this;\n\n assert.expect(2);\n\n // Register engine\n var BlogEngine = _engine.default.extend();\n this.add('engine:blog', BlogEngine);\n\n // Register engine route map\n var postSerialize = function (params) {\n assert.ok(true, 'serialize hook runs');\n return {\n post_id: params.id\n };\n };\n var BlogMap = function () {\n this.route('post', {\n path: '/post/:post_id',\n serialize: postSerialize\n });\n };\n this.add('route-map:blog', BlogMap);\n\n this.router.map(function () {\n this.mount('blog');\n });\n\n return this.visit('/').then(function () {\n var router = _this77.applicationInstance.lookup('router:main');\n assert.equal(router._routerMicrolib.generate('blog.post', { id: '13' }), '/blog/post/13', 'url is generated properly');\n });\n };\n\n _class.prototype['@test Defining a Route#serialize method in an Engine throws an error'] = function testDefiningARouteSerializeMethodInAnEngineThrowsAnError(assert) {\n var _this78 = this;\n\n assert.expect(1);\n\n // Register engine\n var BlogEngine = _engine.default.extend();\n this.add('engine:blog', BlogEngine);\n\n // Register engine route map\n var BlogMap = function () {\n this.route('post');\n };\n this.add('route-map:blog', BlogMap);\n\n this.router.map(function () {\n this.mount('blog');\n });\n\n return this.visit('/').then(function () {\n var router = _this78.applicationInstance.lookup('router:main');\n var PostRoute = _routing.Route.extend({\n serialize: function () {}\n });\n _this78.applicationInstance.lookup('engine:blog').register('route:post', PostRoute);\n\n assert.throws(function () {\n return router.transitionTo('blog.post');\n }, /Defining a custom serialize method on an Engine route is not supported/);\n });\n };\n\n _class.prototype['@test App.destroy does not leave undestroyed views after clearing engines'] = function testAppDestroyDoesNotLeaveUndestroyedViewsAfterClearingEngines(assert) {\n var _this79 = this;\n\n assert.expect(4);\n\n var engineInstance = void 0;\n // Register engine\n var BlogEngine = _engine.default.extend();\n this.add('engine:blog', BlogEngine);\n var EngineIndexRoute = _routing.Route.extend({\n init: function () {\n this._super.apply(this, arguments);\n engineInstance = (0, _owner.getOwner)(this);\n }\n });\n\n // Register engine route map\n var BlogMap = function () {\n this.route('post');\n };\n this.add('route-map:blog', BlogMap);\n\n this.router.map(function () {\n this.mount('blog');\n });\n\n return this.visit('/').then(function () {\n var engine = _this79.applicationInstance.lookup('engine:blog');\n engine.register('route:index', EngineIndexRoute);\n engine.register('template:index', (0, _emberTemplateCompiler.compile)('Engine Post!'));\n return _this79.visit('/blog');\n }).then(function () {\n assert.ok(true, '/blog has been handled');\n var route = engineInstance.lookup('route:index');\n var router = _this79.applicationInstance.lookup('router:main');\n\n (0, _runloop.run)(router, 'destroy');\n assert.equal(router._toplevelView, null, 'the toplevelView was cleared');\n\n (0, _runloop.run)(route, 'destroy');\n assert.equal(router._toplevelView, null, 'the toplevelView was not reinitialized');\n\n (0, _runloop.run)(_this79.applicationInstance, 'destroy');\n assert.equal(router._toplevelView, null, 'the toplevelView was not reinitialized');\n });\n };\n\n _class.prototype[\"@test Generated route should be an instance of App's default route if provided\"] = function testGeneratedRouteShouldBeAnInstanceOfAppSDefaultRouteIfProvided(assert) {\n var _this80 = this;\n\n var generatedRoute = void 0;\n\n this.router.map(function () {\n this.route('posts');\n });\n\n var AppRoute = _routing.Route.extend();\n this.add('route:basic', AppRoute);\n\n return this.visit('/posts').then(function () {\n generatedRoute = _this80.applicationInstance.lookup('route:posts');\n\n assert.ok(generatedRoute instanceof AppRoute, 'should extend the correct route');\n });\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'currentPath',\n get: function () {\n return this.getController('application').get('currentPath');\n }\n }, {\n key: 'currentURL',\n get: function () {\n return this.appRouter.get('currentURL');\n }\n }]);\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/routing/deprecated_handler_infos_test', ['ember-babel', 'internal-test-helpers'], function (_emberBabel, _internalTestHelpers) {\n 'use strict';\n\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n (0, _internalTestHelpers.moduleFor)('Deprecated HandlerInfos', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n\n _this.router.map(function () {\n this.route('parent', function () {\n this.route('child');\n this.route('sibling');\n });\n });\n return _this;\n }\n\n _class.prototype['@test handlerInfos are deprecated and associated private apis'] = function testHandlerInfosAreDeprecatedAndAssociatedPrivateApis(assert) {\n var _this2 = this;\n\n var done = assert.async();\n expectDeprecation(function () {\n return _this2.visit('/parent').then(function () {\n done();\n });\n }, /You attempted to override the \\\"(willTransition|didTransition)\\\" method which is deprecated. Please inject the router service and listen to the \\\"(routeWillChange|routeDidChange)\\\" event\\./);\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'routerOptions',\n get: function () {\n return {\n willTransition: function (oldHandlers, newHandlers, transition) {\n var _this3 = this;\n\n expectDeprecation(function () {\n _this3._routerMicrolib.currentHandlerInfos;\n }, 'You attempted to use \"_routerMicrolib.currentHandlerInfos\" which is a private API that will be removed.');\n\n expectDeprecation(function () {\n _this3._routerMicrolib.getHandler('parent');\n }, 'You attempted to use \"_routerMicrolib.getHandler\" which is a private API that will be removed.');\n\n oldHandlers.forEach(function (handler) {\n expectDeprecation(function () {\n handler.handler;\n }, 'You attempted to read \"handlerInfo.handler\" which is a private API that will be removed.');\n });\n newHandlers.forEach(function (handler) {\n expectDeprecation(function () {\n handler.handler;\n }, 'You attempted to read \"handlerInfo.handler\" which is a private API that will be removed.');\n });\n\n expectDeprecation(function () {\n transition.handlerInfos;\n }, 'You attempted to use \"transition.handlerInfos\" which is a private API that will be removed.');\n\n expectDeprecation(function () {\n transition.state.handlerInfos;\n }, 'You attempted to use \"transition.state.handlerInfos\" which is a private API that will be removed.');\n QUnit.assert.ok(true, 'willTransition');\n },\n didTransition: function (newHandlers) {\n newHandlers.forEach(function (handler) {\n expectDeprecation(function () {\n handler.handler;\n }, 'You attempted to read \"handlerInfo.handler\" which is a private API that will be removed.');\n });\n QUnit.assert.ok(true, 'didTransition');\n }\n };\n }\n }]);\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n }\n});","enifed('ember/tests/routing/deprecated_transition_state_test', ['ember-babel', 'internal-test-helpers'], function (_emberBabel, _internalTestHelpers) {\n 'use strict';\n\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n (0, _internalTestHelpers.moduleFor)('Deprecated Transition State', function (_RouterTestCase) {\n (0, _emberBabel.inherits)(_class, _RouterTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test touching transition.state is deprecated'] = function testTouchingTransitionStateIsDeprecated(assert) {\n var _this2 = this;\n\n assert.expect(1);\n return this.visit('/').then(function () {\n _this2.routerService.on('routeWillChange', function (transition) {\n expectDeprecation(function () {\n transition.state;\n }, 'You attempted to read \"transition.state\" which is a private API. You should read the `RouteInfo` object on \"transition.to\" or \"transition.from\" which has the public state on it.');\n });\n return _this2.routerService.transitionTo('/child');\n });\n };\n\n _class.prototype['@test touching transition.queryParams is deprecated'] = function testTouchingTransitionQueryParamsIsDeprecated(assert) {\n var _this3 = this;\n\n assert.expect(1);\n return this.visit('/').then(function () {\n _this3.routerService.on('routeWillChange', function (transition) {\n expectDeprecation(function () {\n transition.queryParams;\n }, 'You attempted to read \"transition.queryParams\" which is a private API. You should read the `RouteInfo` object on \"transition.to\" or \"transition.from\" which has the queryParams on it.');\n });\n return _this3.routerService.transitionTo('/child');\n });\n };\n\n _class.prototype['@test touching transition.params is deprecated'] = function testTouchingTransitionParamsIsDeprecated(assert) {\n var _this4 = this;\n\n assert.expect(1);\n return this.visit('/').then(function () {\n _this4.routerService.on('routeWillChange', function (transition) {\n expectDeprecation(function () {\n transition.params;\n }, 'You attempted to read \"transition.params\" which is a private API. You should read the `RouteInfo` object on \"transition.to\" or \"transition.from\" which has the params on it.');\n });\n return _this4.routerService.transitionTo('/child');\n });\n };\n\n return _class;\n }(_internalTestHelpers.RouterTestCase));\n }\n});","enifed('ember/tests/routing/query_params_test', ['ember-babel', '@ember/controller', '@ember/string', '@ember/-internals/runtime', '@ember/runloop', '@ember/-internals/meta', '@ember/-internals/metal', '@ember/-internals/routing', 'router_js', 'internal-test-helpers'], function (_emberBabel, _controller, _string, _runtime, _runloop, _meta, _metal, _routing, _router_js, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Query Params - main', function (_QueryParamTestCase) {\n (0, _emberBabel.inherits)(_class, _QueryParamTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _QueryParamTestCase.apply(this, arguments));\n }\n\n _class.prototype.refreshModelWhileLoadingTest = function refreshModelWhileLoadingTest(loadingReturn) {\n var _actions,\n _this2 = this;\n\n var assert = this.assert;\n\n assert.expect(9);\n\n var appModelCount = 0;\n var promiseResolve = void 0;\n\n this.add('route:application', _routing.Route.extend({\n queryParams: {\n appomg: {\n defaultValue: 'applol'\n }\n },\n model: function () /* params */{\n appModelCount++;\n }\n }));\n\n this.setSingleQPController('index', 'omg', undefined, {\n omg: undefined\n });\n\n var actionName = typeof loadingReturn !== 'undefined' ? 'loading' : 'ignore';\n var indexModelCount = 0;\n this.add('route:index', _routing.Route.extend({\n queryParams: {\n omg: {\n refreshModel: true\n }\n },\n actions: (_actions = {}, _actions[actionName] = function () {\n return loadingReturn;\n }, _actions),\n model: function (params) {\n indexModelCount++;\n if (indexModelCount === 2) {\n assert.deepEqual(params, { omg: 'lex' });\n return new _runtime.RSVP.Promise(function (resolve) {\n promiseResolve = resolve;\n return;\n });\n } else if (indexModelCount === 3) {\n assert.deepEqual(params, { omg: 'hello' }, \"Model hook reruns even if the previous one didn't finish\");\n }\n }\n }));\n\n return this.visit('/').then(function () {\n assert.equal(appModelCount, 1, 'appModelCount is 1');\n assert.equal(indexModelCount, 1);\n\n var indexController = _this2.getController('index');\n _this2.setAndFlush(indexController, 'omg', 'lex');\n\n assert.equal(appModelCount, 1, 'appModelCount is 1');\n assert.equal(indexModelCount, 2);\n\n _this2.setAndFlush(indexController, 'omg', 'hello');\n assert.equal(appModelCount, 1, 'appModelCount is 1');\n assert.equal(indexModelCount, 3);\n\n (0, _runloop.run)(function () {\n promiseResolve();\n });\n\n assert.equal((0, _metal.get)(indexController, 'omg'), 'hello', 'At the end last value prevails');\n });\n };\n\n _class.prototype[\"@test No replaceURL occurs on startup because default values don't show up in URL\"] = function testNoReplaceURLOccursOnStartupBecauseDefaultValuesDonTShowUpInURL(assert) {\n assert.expect(1);\n\n this.setSingleQPController('index');\n\n return this.visitAndAssert('/');\n };\n\n _class.prototype['@test Calling transitionTo does not lose query params already on the activeTransition'] = function testCallingTransitionToDoesNotLoseQueryParamsAlreadyOnTheActiveTransition(assert) {\n var _this3 = this;\n\n assert.expect(2);\n\n this.router.map(function () {\n this.route('parent', function () {\n this.route('child');\n this.route('sibling');\n });\n });\n\n this.add('route:parent.child', _routing.Route.extend({\n afterModel: function () {\n this.transitionTo('parent.sibling');\n }\n }));\n\n this.setSingleQPController('parent');\n\n return this.visit('/parent/child?foo=lol').then(function () {\n _this3.assertCurrentPath('/parent/sibling?foo=lol', 'redirected to the sibling route, instead of child route');\n assert.equal(_this3.getController('parent').get('foo'), 'lol', 'controller has value from the active transition');\n });\n };\n\n _class.prototype['@test Single query params can be set on the controller and reflected in the url'] = function testSingleQueryParamsCanBeSetOnTheControllerAndReflectedInTheUrl(assert) {\n var _this4 = this;\n\n assert.expect(3);\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.setSingleQPController('home');\n\n return this.visitAndAssert('/').then(function () {\n var controller = _this4.getController('home');\n\n _this4.setAndFlush(controller, 'foo', '456');\n _this4.assertCurrentPath('/?foo=456');\n\n _this4.setAndFlush(controller, 'foo', '987');\n _this4.assertCurrentPath('/?foo=987');\n });\n };\n\n _class.prototype['@test Query params can map to different url keys configured on the controller'] = function testQueryParamsCanMapToDifferentUrlKeysConfiguredOnTheController(assert) {\n var _this5 = this;\n\n assert.expect(6);\n\n this.add('controller:index', _controller.default.extend({\n queryParams: [{ foo: 'other_foo', bar: { as: 'other_bar' } }],\n foo: 'FOO',\n bar: 'BAR'\n }));\n\n return this.visitAndAssert('/').then(function () {\n var controller = _this5.getController('index');\n\n _this5.setAndFlush(controller, 'foo', 'LEX');\n _this5.assertCurrentPath('/?other_foo=LEX', \"QP mapped correctly without 'as'\");\n\n _this5.setAndFlush(controller, 'foo', 'WOO');\n _this5.assertCurrentPath('/?other_foo=WOO', \"QP updated correctly without 'as'\");\n\n _this5.transitionTo('/?other_foo=NAW');\n assert.equal(controller.get('foo'), 'NAW', 'QP managed correctly on URL transition');\n\n _this5.setAndFlush(controller, 'bar', 'NERK');\n _this5.assertCurrentPath('/?other_bar=NERK&other_foo=NAW', \"QP mapped correctly with 'as'\");\n\n _this5.setAndFlush(controller, 'bar', 'NUKE');\n _this5.assertCurrentPath('/?other_bar=NUKE&other_foo=NAW', \"QP updated correctly with 'as'\");\n });\n };\n\n _class.prototype['@test Routes have a private overridable serializeQueryParamKey hook'] = function testRoutesHaveAPrivateOverridableSerializeQueryParamKeyHook(assert) {\n var _this6 = this;\n\n assert.expect(2);\n\n this.add('route:index', _routing.Route.extend({\n serializeQueryParamKey: _string.dasherize\n }));\n\n this.setSingleQPController('index', 'funTimes', '');\n\n return this.visitAndAssert('/').then(function () {\n var controller = _this6.getController('index');\n\n _this6.setAndFlush(controller, 'funTimes', 'woot');\n _this6.assertCurrentPath('/?fun-times=woot');\n });\n };\n\n _class.prototype['@test Can override inherited QP behavior by specifying queryParams as a computed property'] = function testCanOverrideInheritedQPBehaviorBySpecifyingQueryParamsAsAComputedProperty(assert) {\n var _this7 = this;\n\n assert.expect(3);\n\n this.setSingleQPController('index', 'a', 0, {\n queryParams: (0, _metal.computed)(function () {\n return ['c'];\n }),\n c: true\n });\n\n return this.visitAndAssert('/').then(function () {\n var indexController = _this7.getController('index');\n\n _this7.setAndFlush(indexController, 'a', 1);\n _this7.assertCurrentPath('/', 'QP did not update due to being overriden');\n\n _this7.setAndFlush(indexController, 'c', false);\n _this7.assertCurrentPath('/?c=false', 'QP updated with overridden param');\n });\n };\n\n _class.prototype['@test Can concatenate inherited QP behavior by specifying queryParams as an array'] = function testCanConcatenateInheritedQPBehaviorBySpecifyingQueryParamsAsAnArray(assert) {\n var _this8 = this;\n\n assert.expect(3);\n\n this.setSingleQPController('index', 'a', 0, {\n queryParams: ['c'],\n c: true\n });\n\n return this.visitAndAssert('/').then(function () {\n var indexController = _this8.getController('index');\n\n _this8.setAndFlush(indexController, 'a', 1);\n _this8.assertCurrentPath('/?a=1', 'Inherited QP did update');\n\n _this8.setAndFlush(indexController, 'c', false);\n _this8.assertCurrentPath('/?a=1&c=false', 'New QP did update');\n });\n };\n\n _class.prototype['@test model hooks receives query params'] = function testModelHooksReceivesQueryParams(assert) {\n assert.expect(2);\n\n this.setSingleQPController('index');\n\n this.add('route:index', _routing.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { foo: 'bar' });\n }\n }));\n\n return this.visitAndAssert('/');\n };\n\n _class.prototype['@test model hooks receives query params with dynamic segment params'] = function testModelHooksReceivesQueryParamsWithDynamicSegmentParams(assert) {\n assert.expect(2);\n\n this.router.map(function () {\n this.route('index', { path: '/:id' });\n });\n\n this.setSingleQPController('index');\n\n this.add('route:index', _routing.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { foo: 'bar', id: 'baz' });\n }\n }));\n\n return this.visitAndAssert('/baz');\n };\n\n _class.prototype['@test model hooks receives query params (overridden by incoming url value)'] = function testModelHooksReceivesQueryParamsOverriddenByIncomingUrlValue(assert) {\n assert.expect(2);\n\n this.router.map(function () {\n this.route('index', { path: '/:id' });\n });\n\n this.setSingleQPController('index');\n\n this.add('route:index', _routing.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { foo: 'baz', id: 'boo' });\n }\n }));\n\n return this.visitAndAssert('/boo?foo=baz');\n };\n\n _class.prototype['@test error is thrown if dynamic segment and query param have same name'] = function testErrorIsThrownIfDynamicSegmentAndQueryParamHaveSameName(assert) {\n var _this9 = this;\n\n assert.expect(1);\n\n this.router.map(function () {\n this.route('index', { path: '/:foo' });\n });\n\n this.setSingleQPController('index');\n\n expectAssertion(function () {\n _this9.visitAndAssert('/boo?foo=baz');\n }, 'The route \\'index\\' has both a dynamic segment and query param with name \\'foo\\'. Please rename one to avoid collisions.');\n };\n\n _class.prototype['@test query params have been set by the time setupController is called'] = function testQueryParamsHaveBeenSetByTheTimeSetupControllerIsCalled(assert) {\n assert.expect(2);\n\n this.setSingleQPController('application');\n\n this.add('route:application', _routing.Route.extend({\n setupController: function (controller) {\n assert.equal(controller.get('foo'), 'YEAH', \"controller's foo QP property set before setupController called\");\n }\n }));\n\n return this.visitAndAssert('/?foo=YEAH');\n };\n\n _class.prototype['@test mapped query params have been set by the time setupController is called'] = function testMappedQueryParamsHaveBeenSetByTheTimeSetupControllerIsCalled(assert) {\n assert.expect(2);\n\n this.setSingleQPController('application', { faz: 'foo' });\n\n this.add('route:application', _routing.Route.extend({\n setupController: function (controller) {\n assert.equal(controller.get('faz'), 'YEAH', \"controller's foo QP property set before setupController called\");\n }\n }));\n\n return this.visitAndAssert('/?foo=YEAH');\n };\n\n _class.prototype['@test Route#paramsFor fetches query params with default value'] = function testRouteParamsForFetchesQueryParamsWithDefaultValue(assert) {\n assert.expect(2);\n\n this.router.map(function () {\n this.route('index', { path: '/:something' });\n });\n\n this.setSingleQPController('index');\n\n this.add('route:index', _routing.Route.extend({\n model: function () /* params, transition */{\n assert.deepEqual(this.paramsFor('index'), { something: 'baz', foo: 'bar' }, 'could retrieve params for index');\n }\n }));\n\n return this.visitAndAssert('/baz');\n };\n\n _class.prototype['@test Route#paramsFor fetches query params with non-default value'] = function testRouteParamsForFetchesQueryParamsWithNonDefaultValue(assert) {\n assert.expect(2);\n\n this.router.map(function () {\n this.route('index', { path: '/:something' });\n });\n\n this.setSingleQPController('index');\n\n this.add('route:index', _routing.Route.extend({\n model: function () /* params, transition */{\n assert.deepEqual(this.paramsFor('index'), { something: 'baz', foo: 'boo' }, 'could retrieve params for index');\n }\n }));\n\n return this.visitAndAssert('/baz?foo=boo');\n };\n\n _class.prototype['@test Route#paramsFor fetches default falsy query params'] = function testRouteParamsForFetchesDefaultFalsyQueryParams(assert) {\n assert.expect(2);\n\n this.router.map(function () {\n this.route('index', { path: '/:something' });\n });\n\n this.setSingleQPController('index', 'foo', false);\n\n this.add('route:index', _routing.Route.extend({\n model: function () /* params, transition */{\n assert.deepEqual(this.paramsFor('index'), { something: 'baz', foo: false }, 'could retrieve params for index');\n }\n }));\n\n return this.visitAndAssert('/baz');\n };\n\n _class.prototype['@test Route#paramsFor fetches non-default falsy query params'] = function testRouteParamsForFetchesNonDefaultFalsyQueryParams(assert) {\n assert.expect(2);\n\n this.router.map(function () {\n this.route('index', { path: '/:something' });\n });\n\n this.setSingleQPController('index', 'foo', true);\n\n this.add('route:index', _routing.Route.extend({\n model: function () /* params, transition */{\n assert.deepEqual(this.paramsFor('index'), { something: 'baz', foo: false }, 'could retrieve params for index');\n }\n }));\n\n return this.visitAndAssert('/baz?foo=false');\n };\n\n _class.prototype['@test model hook can query prefix-less application params'] = function testModelHookCanQueryPrefixLessApplicationParams(assert) {\n assert.expect(4);\n\n this.setSingleQPController('application', 'appomg', 'applol');\n this.setSingleQPController('index', 'omg', 'lol');\n\n this.add('route:application', _routing.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { appomg: 'applol' });\n }\n }));\n\n this.add('route:index', _routing.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { omg: 'lol' });\n assert.deepEqual(this.paramsFor('application'), {\n appomg: 'applol'\n });\n }\n }));\n\n return this.visitAndAssert('/');\n };\n\n _class.prototype['@test model hook can query prefix-less application params (overridden by incoming url value)'] = function testModelHookCanQueryPrefixLessApplicationParamsOverriddenByIncomingUrlValue(assert) {\n assert.expect(4);\n\n this.setSingleQPController('application', 'appomg', 'applol');\n this.setSingleQPController('index', 'omg', 'lol');\n\n this.add('route:application', _routing.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { appomg: 'appyes' });\n }\n }));\n\n this.add('route:index', _routing.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { omg: 'yes' });\n assert.deepEqual(this.paramsFor('application'), {\n appomg: 'appyes'\n });\n }\n }));\n\n return this.visitAndAssert('/?appomg=appyes&omg=yes');\n };\n\n _class.prototype['@test can opt into full transition by setting refreshModel in route queryParams'] = function testCanOptIntoFullTransitionBySettingRefreshModelInRouteQueryParams(assert) {\n var _this10 = this;\n\n assert.expect(7);\n\n this.setSingleQPController('application', 'appomg', 'applol');\n this.setSingleQPController('index', 'omg', 'lol');\n\n var appModelCount = 0;\n this.add('route:application', _routing.Route.extend({\n model: function () /* params, transition */{\n appModelCount++;\n }\n }));\n\n var indexModelCount = 0;\n this.add('route:index', _routing.Route.extend({\n queryParams: {\n omg: {\n refreshModel: true\n }\n },\n model: function (params) {\n indexModelCount++;\n\n if (indexModelCount === 1) {\n assert.deepEqual(params, { omg: 'lol' }, 'params are correct on first pass');\n } else if (indexModelCount === 2) {\n assert.deepEqual(params, { omg: 'lex' }, 'params are correct on second pass');\n }\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n assert.equal(appModelCount, 1, 'app model hook ran');\n assert.equal(indexModelCount, 1, 'index model hook ran');\n\n var indexController = _this10.getController('index');\n _this10.setAndFlush(indexController, 'omg', 'lex');\n\n assert.equal(appModelCount, 1, 'app model hook did not run again');\n assert.equal(indexModelCount, 2, 'index model hook ran again due to refreshModel');\n });\n };\n\n _class.prototype['@test refreshModel and replace work together'] = function testRefreshModelAndReplaceWorkTogether(assert) {\n var _this11 = this;\n\n assert.expect(8);\n\n this.setSingleQPController('application', 'appomg', 'applol');\n this.setSingleQPController('index', 'omg', 'lol');\n\n var appModelCount = 0;\n this.add('route:application', _routing.Route.extend({\n model: function () /* params */{\n appModelCount++;\n }\n }));\n\n var indexModelCount = 0;\n this.add('route:index', _routing.Route.extend({\n queryParams: {\n omg: {\n refreshModel: true,\n replace: true\n }\n },\n model: function (params) {\n indexModelCount++;\n\n if (indexModelCount === 1) {\n assert.deepEqual(params, { omg: 'lol' }, 'params are correct on first pass');\n } else if (indexModelCount === 2) {\n assert.deepEqual(params, { omg: 'lex' }, 'params are correct on second pass');\n }\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n assert.equal(appModelCount, 1, 'app model hook ran');\n assert.equal(indexModelCount, 1, 'index model hook ran');\n\n var indexController = _this11.getController('index');\n _this11.expectedReplaceURL = '/?omg=lex';\n _this11.setAndFlush(indexController, 'omg', 'lex');\n\n assert.equal(appModelCount, 1, 'app model hook did not run again');\n assert.equal(indexModelCount, 2, 'index model hook ran again due to refreshModel');\n });\n };\n\n _class.prototype['@test multiple QP value changes only cause a single model refresh'] = function testMultipleQPValueChangesOnlyCauseASingleModelRefresh(assert) {\n var _this12 = this;\n\n assert.expect(2);\n\n this.setSingleQPController('index', 'alex', 'lol');\n this.setSingleQPController('index', 'steely', 'lel');\n\n var refreshCount = 0;\n this.add('route:index', _routing.Route.extend({\n queryParams: {\n alex: {\n refreshModel: true\n },\n steely: {\n refreshModel: true\n }\n },\n refresh: function () {\n refreshCount++;\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n var indexController = _this12.getController('index');\n (0, _runloop.run)(indexController, 'setProperties', {\n alex: 'fran',\n steely: 'david'\n });\n assert.equal(refreshCount, 1, 'index refresh hook only run once');\n });\n };\n\n _class.prototype['@test refreshModel does not cause a second transition during app boot '] = function testRefreshModelDoesNotCauseASecondTransitionDuringAppBoot(assert) {\n assert.expect(1);\n\n this.setSingleQPController('application', 'appomg', 'applol');\n this.setSingleQPController('index', 'omg', 'lol');\n\n this.add('route:index', _routing.Route.extend({\n queryParams: {\n omg: {\n refreshModel: true\n }\n },\n refresh: function () {\n assert.ok(false);\n }\n }));\n\n return this.visitAndAssert('/?appomg=hello&omg=world');\n };\n\n _class.prototype['@test queryParams are updated when a controller property is set and the route is refreshed. Issue #13263 '] = function testQueryParamsAreUpdatedWhenAControllerPropertyIsSetAndTheRouteIsRefreshedIssue13263(assert) {\n var _this13 = this;\n\n this.addTemplate('application', '{{foo}}{{outlet}}');\n\n this.setSingleQPController('application', 'foo', 1, {\n actions: {\n increment: function () {\n this.incrementProperty('foo');\n this.send('refreshRoute');\n }\n }\n });\n\n this.add('route:application', _routing.Route.extend({\n actions: {\n refreshRoute: function () {\n this.refresh();\n }\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n assert.equal((0, _internalTestHelpers.getTextOf)(document.getElementById('test-value')), '1');\n\n (0, _runloop.run)(document.getElementById('test-button'), 'click');\n assert.equal((0, _internalTestHelpers.getTextOf)(document.getElementById('test-value')), '2');\n _this13.assertCurrentPath('/?foo=2');\n\n (0, _runloop.run)(document.getElementById('test-button'), 'click');\n assert.equal((0, _internalTestHelpers.getTextOf)(document.getElementById('test-value')), '3');\n _this13.assertCurrentPath('/?foo=3');\n });\n };\n\n _class.prototype[\"@test Use Ember.get to retrieve query params 'refreshModel' configuration\"] = function testUseEmberGetToRetrieveQueryParamsRefreshModelConfiguration(assert) {\n var _this14 = this;\n\n assert.expect(7);\n\n this.setSingleQPController('application', 'appomg', 'applol');\n this.setSingleQPController('index', 'omg', 'lol');\n\n var appModelCount = 0;\n this.add('route:application', _routing.Route.extend({\n model: function () /* params */{\n appModelCount++;\n }\n }));\n\n var indexModelCount = 0;\n this.add('route:index', _routing.Route.extend({\n queryParams: _runtime.Object.create({\n unknownProperty: function () {\n return { refreshModel: true };\n }\n }),\n model: function (params) {\n indexModelCount++;\n\n if (indexModelCount === 1) {\n assert.deepEqual(params, { omg: 'lol' });\n } else if (indexModelCount === 2) {\n assert.deepEqual(params, { omg: 'lex' });\n }\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n assert.equal(appModelCount, 1);\n assert.equal(indexModelCount, 1);\n\n var indexController = _this14.getController('index');\n _this14.setAndFlush(indexController, 'omg', 'lex');\n\n assert.equal(appModelCount, 1);\n assert.equal(indexModelCount, 2);\n });\n };\n\n _class.prototype['@test can use refreshModel even with URL changes that remove QPs from address bar'] = function testCanUseRefreshModelEvenWithURLChangesThatRemoveQPsFromAddressBar(assert) {\n var _this15 = this;\n\n assert.expect(4);\n\n this.setSingleQPController('index', 'omg', 'lol');\n\n var indexModelCount = 0;\n this.add('route:index', _routing.Route.extend({\n queryParams: {\n omg: {\n refreshModel: true\n }\n },\n model: function (params) {\n indexModelCount++;\n\n var data = void 0;\n if (indexModelCount === 1) {\n data = 'foo';\n } else if (indexModelCount === 2) {\n data = 'lol';\n }\n\n assert.deepEqual(params, { omg: data }, 'index#model receives right data');\n }\n }));\n\n return this.visitAndAssert('/?omg=foo').then(function () {\n _this15.transitionTo('/');\n\n var indexController = _this15.getController('index');\n assert.equal(indexController.get('omg'), 'lol');\n });\n };\n\n _class.prototype['@test can opt into a replace query by specifying replace:true in the Route config hash'] = function testCanOptIntoAReplaceQueryBySpecifyingReplaceTrueInTheRouteConfigHash(assert) {\n var _this16 = this;\n\n assert.expect(2);\n\n this.setSingleQPController('application', 'alex', 'matchneer');\n\n this.add('route:application', _routing.Route.extend({\n queryParams: {\n alex: {\n replace: true\n }\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n var appController = _this16.getController('application');\n _this16.expectedReplaceURL = '/?alex=wallace';\n _this16.setAndFlush(appController, 'alex', 'wallace');\n });\n };\n\n _class.prototype['@test Route query params config can be configured using property name instead of URL key'] = function testRouteQueryParamsConfigCanBeConfiguredUsingPropertyNameInsteadOfURLKey(assert) {\n var _this17 = this;\n\n assert.expect(2);\n\n this.add('controller:application', _controller.default.extend({\n queryParams: [{ commitBy: 'commit_by' }]\n }));\n\n this.add('route:application', _routing.Route.extend({\n queryParams: {\n commitBy: {\n replace: true\n }\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n var appController = _this17.getController('application');\n _this17.expectedReplaceURL = '/?commit_by=igor_seb';\n _this17.setAndFlush(appController, 'commitBy', 'igor_seb');\n });\n };\n\n _class.prototype['@test An explicit replace:false on a changed QP always wins and causes a pushState'] = function testAnExplicitReplaceFalseOnAChangedQPAlwaysWinsAndCausesAPushState(assert) {\n var _this18 = this;\n\n assert.expect(3);\n\n this.add('controller:application', _controller.default.extend({\n queryParams: ['alex', 'steely'],\n alex: 'matchneer',\n steely: 'dan'\n }));\n\n this.add('route:application', _routing.Route.extend({\n queryParams: {\n alex: {\n replace: true\n },\n steely: {\n replace: false\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var appController = _this18.getController('application');\n _this18.expectedPushURL = '/?alex=wallace&steely=jan';\n (0, _runloop.run)(appController, 'setProperties', { alex: 'wallace', steely: 'jan' });\n\n _this18.expectedPushURL = '/?alex=wallace&steely=fran';\n (0, _runloop.run)(appController, 'setProperties', { steely: 'fran' });\n\n _this18.expectedReplaceURL = '/?alex=sriracha&steely=fran';\n (0, _runloop.run)(appController, 'setProperties', { alex: 'sriracha' });\n });\n };\n\n _class.prototype['@test can opt into full transition by setting refreshModel in route queryParams when transitioning from child to parent'] = function testCanOptIntoFullTransitionBySettingRefreshModelInRouteQueryParamsWhenTransitioningFromChildToParent(assert) {\n this.addTemplate('parent', '{{outlet}}');\n this.addTemplate('parent.child', \"{{link-to 'Parent' 'parent' (query-params foo='change') id='parent-link'}}\");\n\n this.router.map(function () {\n this.route('parent', function () {\n this.route('child');\n });\n });\n\n var parentModelCount = 0;\n this.add('route:parent', _routing.Route.extend({\n model: function () {\n parentModelCount++;\n },\n\n queryParams: {\n foo: {\n refreshModel: true\n }\n }\n }));\n\n this.setSingleQPController('parent', 'foo', 'abc');\n\n return this.visit('/parent/child?foo=lol').then(function () {\n assert.equal(parentModelCount, 1);\n\n (0, _runloop.run)(document.getElementById('parent-link'), 'click');\n assert.equal(parentModelCount, 2);\n });\n };\n\n _class.prototype[\"@test Use Ember.get to retrieve query params 'replace' configuration\"] = function testUseEmberGetToRetrieveQueryParamsReplaceConfiguration(assert) {\n var _this19 = this;\n\n assert.expect(2);\n\n this.setSingleQPController('application', 'alex', 'matchneer');\n\n this.add('route:application', _routing.Route.extend({\n queryParams: _runtime.Object.create({\n unknownProperty: function () /* keyName */{\n // We are simulating all qps requiring refresh\n return { replace: true };\n }\n })\n }));\n\n return this.visitAndAssert('/').then(function () {\n var appController = _this19.getController('application');\n _this19.expectedReplaceURL = '/?alex=wallace';\n _this19.setAndFlush(appController, 'alex', 'wallace');\n });\n };\n\n _class.prototype['@test can override incoming QP values in setupController'] = function testCanOverrideIncomingQPValuesInSetupController(assert) {\n var _this20 = this;\n\n assert.expect(3);\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.setSingleQPController('index', 'omg', 'lol');\n\n this.add('route:index', _routing.Route.extend({\n setupController: function (controller) {\n assert.ok(true, 'setupController called');\n controller.set('omg', 'OVERRIDE');\n },\n\n actions: {\n queryParamsDidChange: function () {\n assert.ok(false, \"queryParamsDidChange shouldn't fire\");\n }\n }\n }));\n\n return this.visitAndAssert('/about').then(function () {\n _this20.transitionTo('index');\n _this20.assertCurrentPath('/?omg=OVERRIDE');\n });\n };\n\n _class.prototype['@test can override incoming QP array values in setupController'] = function testCanOverrideIncomingQPArrayValuesInSetupController(assert) {\n var _this21 = this;\n\n assert.expect(3);\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.setSingleQPController('index', 'omg', ['lol']);\n\n this.add('route:index', _routing.Route.extend({\n setupController: function (controller) {\n assert.ok(true, 'setupController called');\n controller.set('omg', ['OVERRIDE']);\n },\n\n actions: {\n queryParamsDidChange: function () {\n assert.ok(false, \"queryParamsDidChange shouldn't fire\");\n }\n }\n }));\n\n return this.visitAndAssert('/about').then(function () {\n _this21.transitionTo('index');\n _this21.assertCurrentPath('/?omg=' + encodeURIComponent(JSON.stringify(['OVERRIDE'])));\n });\n };\n\n _class.prototype['@test URL transitions that remove QPs still register as QP changes'] = function testURLTransitionsThatRemoveQPsStillRegisterAsQPChanges(assert) {\n var _this22 = this;\n\n assert.expect(2);\n\n this.setSingleQPController('index', 'omg', 'lol');\n\n return this.visit('/?omg=borf').then(function () {\n var indexController = _this22.getController('index');\n assert.equal(indexController.get('omg'), 'borf');\n\n _this22.transitionTo('/');\n assert.equal(indexController.get('omg'), 'lol');\n });\n };\n\n _class.prototype['@test Subresource naming style is supported'] = function testSubresourceNamingStyleIsSupported(assert) {\n var _this23 = this;\n\n assert.expect(5);\n\n this.router.map(function () {\n this.route('abc.def', { path: '/abcdef' }, function () {\n this.route('zoo');\n });\n });\n\n this.addTemplate('application', \"{{link-to 'A' 'abc.def' (query-params foo='123') id='one'}}{{link-to 'B' 'abc.def.zoo' (query-params foo='123' bar='456') id='two'}}{{outlet}}\");\n\n this.setSingleQPController('abc.def', 'foo', 'lol');\n this.setSingleQPController('abc.def.zoo', 'bar', 'haha');\n\n return this.visitAndAssert('/').then(function () {\n assert.equal(_this23.$('#one').attr('href'), '/abcdef?foo=123');\n assert.equal(_this23.$('#two').attr('href'), '/abcdef/zoo?bar=456&foo=123');\n\n (0, _runloop.run)(_this23.$('#one'), 'click');\n _this23.assertCurrentPath('/abcdef?foo=123');\n\n (0, _runloop.run)(_this23.$('#two'), 'click');\n _this23.assertCurrentPath('/abcdef/zoo?bar=456&foo=123');\n });\n };\n\n _class.prototype['@test transitionTo supports query params'] = function testTransitionToSupportsQueryParams() {\n var _this24 = this;\n\n this.setSingleQPController('index', 'foo', 'lol');\n\n return this.visitAndAssert('/').then(function () {\n _this24.transitionTo({ queryParams: { foo: 'borf' } });\n _this24.assertCurrentPath('/?foo=borf', 'shorthand supported');\n\n _this24.transitionTo({ queryParams: { 'index:foo': 'blaf' } });\n _this24.assertCurrentPath('/?foo=blaf', 'longform supported');\n\n _this24.transitionTo({ queryParams: { 'index:foo': false } });\n _this24.assertCurrentPath('/?foo=false', 'longform supported (bool)');\n\n _this24.transitionTo({ queryParams: { foo: false } });\n _this24.assertCurrentPath('/?foo=false', 'shorhand supported (bool)');\n });\n };\n\n _class.prototype['@test transitionTo supports query params (multiple)'] = function testTransitionToSupportsQueryParamsMultiple() {\n var _this25 = this;\n\n this.add('controller:index', _controller.default.extend({\n queryParams: ['foo', 'bar'],\n foo: 'lol',\n bar: 'wat'\n }));\n\n return this.visitAndAssert('/').then(function () {\n _this25.transitionTo({ queryParams: { foo: 'borf' } });\n _this25.assertCurrentPath('/?foo=borf', 'shorthand supported');\n\n _this25.transitionTo({ queryParams: { 'index:foo': 'blaf' } });\n _this25.assertCurrentPath('/?foo=blaf', 'longform supported');\n\n _this25.transitionTo({ queryParams: { 'index:foo': false } });\n _this25.assertCurrentPath('/?foo=false', 'longform supported (bool)');\n\n _this25.transitionTo({ queryParams: { foo: false } });\n _this25.assertCurrentPath('/?foo=false', 'shorhand supported (bool)');\n });\n };\n\n _class.prototype[\"@test setting controller QP to empty string doesn't generate null in URL\"] = function testSettingControllerQPToEmptyStringDoesnTGenerateNullInURL(assert) {\n var _this26 = this;\n\n assert.expect(1);\n\n this.setSingleQPController('index', 'foo', '123');\n\n return this.visit('/').then(function () {\n var controller = _this26.getController('index');\n\n _this26.expectedPushURL = '/?foo=';\n _this26.setAndFlush(controller, 'foo', '');\n });\n };\n\n _class.prototype[\"@test setting QP to empty string doesn't generate null in URL\"] = function testSettingQPToEmptyStringDoesnTGenerateNullInURL(assert) {\n var _this27 = this;\n\n assert.expect(1);\n\n this.add('route:index', _routing.Route.extend({\n queryParams: {\n foo: {\n defaultValue: '123'\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var controller = _this27.getController('index');\n\n _this27.expectedPushURL = '/?foo=';\n _this27.setAndFlush(controller, 'foo', '');\n });\n };\n\n _class.prototype['@test A default boolean value deserializes QPs as booleans rather than strings'] = function testADefaultBooleanValueDeserializesQPsAsBooleansRatherThanStrings(assert) {\n var _this28 = this;\n\n assert.expect(3);\n\n this.setSingleQPController('index', 'foo', false);\n\n this.add('route:index', _routing.Route.extend({\n model: function (params) {\n assert.equal(params.foo, true, 'model hook received foo as boolean true');\n }\n }));\n\n return this.visit('/?foo=true').then(function () {\n var controller = _this28.getController('index');\n assert.equal(controller.get('foo'), true);\n\n _this28.transitionTo('/?foo=false');\n assert.equal(controller.get('foo'), false);\n });\n };\n\n _class.prototype['@test Query param without value are empty string'] = function testQueryParamWithoutValueAreEmptyString(assert) {\n var _this29 = this;\n\n assert.expect(1);\n\n this.add('controller:index', _controller.default.extend({\n queryParams: ['foo'],\n foo: ''\n }));\n\n return this.visit('/?foo=').then(function () {\n var controller = _this29.getController('index');\n assert.equal(controller.get('foo'), '');\n });\n };\n\n _class.prototype['@test Array query params can be set'] = function testArrayQueryParamsCanBeSet(assert) {\n var _this30 = this;\n\n assert.expect(2);\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.setSingleQPController('home', 'foo', []);\n\n return this.visit('/').then(function () {\n var controller = _this30.getController('home');\n\n _this30.setAndFlush(controller, 'foo', [1, 2]);\n _this30.assertCurrentPath('/?foo=%5B1%2C2%5D');\n\n _this30.setAndFlush(controller, 'foo', [3, 4]);\n _this30.assertCurrentPath('/?foo=%5B3%2C4%5D');\n });\n };\n\n _class.prototype['@test (de)serialization: arrays'] = function testDeSerializationArrays(assert) {\n var _this31 = this;\n\n assert.expect(4);\n\n this.setSingleQPController('index', 'foo', [1]);\n\n return this.visitAndAssert('/').then(function () {\n _this31.transitionTo({ queryParams: { foo: [2, 3] } });\n _this31.assertCurrentPath('/?foo=%5B2%2C3%5D', 'shorthand supported');\n _this31.transitionTo({ queryParams: { 'index:foo': [4, 5] } });\n _this31.assertCurrentPath('/?foo=%5B4%2C5%5D', 'longform supported');\n _this31.transitionTo({ queryParams: { foo: [] } });\n _this31.assertCurrentPath('/?foo=%5B%5D', 'longform supported');\n });\n };\n\n _class.prototype['@test Url with array query param sets controller property to array'] = function testUrlWithArrayQueryParamSetsControllerPropertyToArray(assert) {\n var _this32 = this;\n\n assert.expect(1);\n\n this.setSingleQPController('index', 'foo', '');\n\n return this.visit('/?foo[]=1&foo[]=2&foo[]=3').then(function () {\n var controller = _this32.getController('index');\n assert.deepEqual(controller.get('foo'), ['1', '2', '3']);\n });\n };\n\n _class.prototype['@test Array query params can be pushed/popped'] = function testArrayQueryParamsCanBePushedPopped(assert) {\n var _this33 = this;\n\n assert.expect(17);\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.setSingleQPController('home', 'foo', (0, _runtime.A)());\n\n return this.visitAndAssert('/').then(function () {\n var controller = _this33.getController('home');\n\n (0, _runloop.run)(controller.foo, 'pushObject', 1);\n _this33.assertCurrentPath('/?foo=%5B1%5D');\n assert.deepEqual(controller.foo, [1]);\n\n (0, _runloop.run)(controller.foo, 'popObject');\n _this33.assertCurrentPath('/');\n assert.deepEqual(controller.foo, []);\n\n (0, _runloop.run)(controller.foo, 'pushObject', 1);\n _this33.assertCurrentPath('/?foo=%5B1%5D');\n assert.deepEqual(controller.foo, [1]);\n\n (0, _runloop.run)(controller.foo, 'popObject');\n _this33.assertCurrentPath('/');\n assert.deepEqual(controller.foo, []);\n\n (0, _runloop.run)(controller.foo, 'pushObject', 1);\n _this33.assertCurrentPath('/?foo=%5B1%5D');\n assert.deepEqual(controller.foo, [1]);\n\n (0, _runloop.run)(controller.foo, 'pushObject', 2);\n _this33.assertCurrentPath('/?foo=%5B1%2C2%5D');\n assert.deepEqual(controller.foo, [1, 2]);\n\n (0, _runloop.run)(controller.foo, 'popObject');\n _this33.assertCurrentPath('/?foo=%5B1%5D');\n assert.deepEqual(controller.foo, [1]);\n\n (0, _runloop.run)(controller.foo, 'unshiftObject', 'lol');\n _this33.assertCurrentPath('/?foo=%5B%22lol%22%2C1%5D');\n assert.deepEqual(controller.foo, ['lol', 1]);\n });\n };\n\n _class.prototype[\"@test Overwriting with array with same content shouldn't refire update\"] = function testOverwritingWithArrayWithSameContentShouldnTRefireUpdate(assert) {\n var _this34 = this;\n\n assert.expect(4);\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n var modelCount = 0;\n this.add('route:home', _routing.Route.extend({\n model: function () {\n modelCount++;\n }\n }));\n\n this.setSingleQPController('home', 'foo', (0, _runtime.A)([1]));\n\n return this.visitAndAssert('/').then(function () {\n assert.equal(modelCount, 1);\n\n var controller = _this34.getController('home');\n _this34.setAndFlush(controller, 'model', (0, _runtime.A)([1]));\n\n assert.equal(modelCount, 1);\n _this34.assertCurrentPath('/');\n });\n };\n\n _class.prototype['@test Defaulting to params hash as the model should not result in that params object being watched'] = function testDefaultingToParamsHashAsTheModelShouldNotResultInThatParamsObjectBeingWatched(assert) {\n var _this35 = this;\n\n assert.expect(1);\n\n this.router.map(function () {\n this.route('other');\n });\n\n // This causes the params hash, which is returned as a route's\n // model if no other model could be resolved given the provided\n // params (and no custom model hook was defined), to be watched,\n // unless we return a copy of the params hash.\n this.setSingleQPController('application', 'woot', 'wat');\n\n this.add('route:other', _routing.Route.extend({\n model: function (p, trans) {\n var m = (0, _meta.peekMeta)(trans[_router_js.PARAMS_SYMBOL].application);\n assert.ok(m === undefined, \"A meta object isn't constructed for this params POJO\");\n }\n }));\n\n return this.visit('/').then(function () {\n _this35.transitionTo('other');\n });\n };\n\n _class.prototype['@test Setting bound query param property to null or undefined does not serialize to url'] = function testSettingBoundQueryParamPropertyToNullOrUndefinedDoesNotSerializeToUrl(assert) {\n var _this36 = this;\n\n assert.expect(9);\n\n this.router.map(function () {\n this.route('home');\n });\n\n this.setSingleQPController('home', 'foo', [1, 2]);\n\n return this.visitAndAssert('/home').then(function () {\n var controller = _this36.getController('home');\n\n assert.deepEqual(controller.get('foo'), [1, 2]);\n _this36.assertCurrentPath('/home');\n\n _this36.setAndFlush(controller, 'foo', (0, _runtime.A)([1, 3]));\n _this36.assertCurrentPath('/home?foo=%5B1%2C3%5D');\n\n return _this36.transitionTo('/home').then(function () {\n assert.deepEqual(controller.get('foo'), [1, 2]);\n _this36.assertCurrentPath('/home');\n\n _this36.setAndFlush(controller, 'foo', null);\n _this36.assertCurrentPath('/home', 'Setting property to null');\n\n _this36.setAndFlush(controller, 'foo', (0, _runtime.A)([1, 3]));\n _this36.assertCurrentPath('/home?foo=%5B1%2C3%5D');\n\n _this36.setAndFlush(controller, 'foo', undefined);\n _this36.assertCurrentPath('/home', 'Setting property to undefined');\n });\n });\n };\n\n _class.prototype['@test {{link-to}} with null or undefined QPs does not get serialized into url'] = function testLinkToWithNullOrUndefinedQPsDoesNotGetSerializedIntoUrl(assert) {\n var _this37 = this;\n\n assert.expect(3);\n\n this.addTemplate('home', \"{{link-to 'Home' 'home' (query-params foo=nullValue) id='null-link'}}{{link-to 'Home' 'home' (query-params foo=undefinedValue) id='undefined-link'}}\");\n\n this.router.map(function () {\n this.route('home');\n });\n\n this.setSingleQPController('home', 'foo', [], {\n nullValue: null,\n undefinedValue: undefined\n });\n\n return this.visitAndAssert('/home').then(function () {\n assert.equal(_this37.$('#null-link').attr('href'), '/home');\n assert.equal(_this37.$('#undefined-link').attr('href'), '/home');\n });\n };\n\n _class.prototype[\"@test A child of a resource route still defaults to parent route's model even if the child route has a query param\"] = function testAChildOfAResourceRouteStillDefaultsToParentRouteSModelEvenIfTheChildRouteHasAQueryParam(assert) {\n assert.expect(2);\n\n this.setSingleQPController('index', 'woot', undefined, {\n woot: undefined\n });\n\n this.add('route:application', _routing.Route.extend({\n model: function () /* p, trans */{\n return { woot: true };\n }\n }));\n\n this.add('route:index', _routing.Route.extend({\n setupController: function (controller, model) {\n assert.deepEqual(model, { woot: true }, 'index route inherited model route from parent route');\n }\n }));\n\n return this.visitAndAssert('/');\n };\n\n _class.prototype['@test opting into replace does not affect transitions between routes'] = function testOptingIntoReplaceDoesNotAffectTransitionsBetweenRoutes(assert) {\n var _this38 = this;\n\n assert.expect(5);\n\n this.addTemplate('application', \"{{link-to 'Foo' 'foo' id='foo-link'}}{{link-to 'Bar' 'bar' id='bar-no-qp-link'}}{{link-to 'Bar' 'bar' (query-params raytiley='isthebest') id='bar-link'}}{{outlet}}\");\n\n this.router.map(function () {\n this.route('foo');\n this.route('bar');\n });\n\n this.setSingleQPController('bar', 'raytiley', 'israd');\n\n this.add('route:bar', _routing.Route.extend({\n queryParams: {\n raytiley: {\n replace: true\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var controller = _this38.getController('bar');\n\n _this38.expectedPushURL = '/foo';\n (0, _runloop.run)(document.getElementById('foo-link'), 'click');\n\n _this38.expectedPushURL = '/bar';\n (0, _runloop.run)(document.getElementById('bar-no-qp-link'), 'click');\n\n _this38.expectedReplaceURL = '/bar?raytiley=woot';\n _this38.setAndFlush(controller, 'raytiley', 'woot');\n\n _this38.expectedPushURL = '/foo';\n (0, _runloop.run)(document.getElementById('foo-link'), 'click');\n\n _this38.expectedPushURL = '/bar?raytiley=isthebest';\n (0, _runloop.run)(document.getElementById('bar-link'), 'click');\n });\n };\n\n _class.prototype[\"@test undefined isn't serialized or deserialized into a string\"] = function testUndefinedIsnTSerializedOrDeserializedIntoAString(assert) {\n var _this39 = this;\n\n assert.expect(4);\n\n this.router.map(function () {\n this.route('example');\n });\n\n this.addTemplate('application', \"{{link-to 'Example' 'example' (query-params foo=undefined) id='the-link'}}\");\n\n this.setSingleQPController('example', 'foo', undefined, {\n foo: undefined\n });\n\n this.add('route:example', _routing.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { foo: undefined });\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n assert.equal(_this39.$('#the-link').attr('href'), '/example', 'renders without undefined qp serialized');\n\n return _this39.transitionTo('example', {\n queryParams: { foo: undefined }\n }).then(function () {\n _this39.assertCurrentPath('/example');\n });\n });\n };\n\n _class.prototype['@test when refreshModel is true and loading hook is undefined, model hook will rerun when QPs change even if previous did not finish'] = function testWhenRefreshModelIsTrueAndLoadingHookIsUndefinedModelHookWillRerunWhenQPsChangeEvenIfPreviousDidNotFinish() {\n return this.refreshModelWhileLoadingTest();\n };\n\n _class.prototype['@test when refreshModel is true and loading hook returns false, model hook will rerun when QPs change even if previous did not finish'] = function testWhenRefreshModelIsTrueAndLoadingHookReturnsFalseModelHookWillRerunWhenQPsChangeEvenIfPreviousDidNotFinish() {\n return this.refreshModelWhileLoadingTest(false);\n };\n\n _class.prototype['@test when refreshModel is true and loading hook returns true, model hook will rerun when QPs change even if previous did not finish'] = function testWhenRefreshModelIsTrueAndLoadingHookReturnsTrueModelHookWillRerunWhenQPsChangeEvenIfPreviousDidNotFinish() {\n return this.refreshModelWhileLoadingTest(true);\n };\n\n _class.prototype[\"@test warn user that Route's queryParams configuration must be an Object, not an Array\"] = function testWarnUserThatRouteSQueryParamsConfigurationMustBeAnObjectNotAnArray(assert) {\n var _this40 = this;\n\n assert.expect(1);\n\n this.add('route:application', _routing.Route.extend({\n queryParams: [{ commitBy: { replace: true } }]\n }));\n\n expectAssertion(function () {\n _this40.visit('/');\n }, 'You passed in `[{\"commitBy\":{\"replace\":true}}]` as the value for `queryParams` but `queryParams` cannot be an Array');\n };\n\n _class.prototype['@test handle route names that clash with Object.prototype properties'] = function testHandleRouteNamesThatClashWithObjectPrototypeProperties(assert) {\n var _this41 = this;\n\n assert.expect(1);\n\n this.router.map(function () {\n this.route('constructor');\n });\n\n this.add('route:constructor', _routing.Route.extend({\n queryParams: {\n foo: {\n defaultValue: '123'\n }\n }\n }));\n\n return this.visit('/').then(function () {\n _this41.transitionTo('constructor', { queryParams: { foo: '999' } });\n var controller = _this41.getController('constructor');\n assert.equal((0, _metal.get)(controller, 'foo'), '999');\n });\n };\n\n return _class;\n }(_internalTestHelpers.QueryParamTestCase));\n});","enifed('ember/tests/routing/query_params_test/model_dependent_state_with_query_params_test', ['ember-babel', '@ember/controller', '@ember/-internals/runtime', '@ember/-internals/routing', '@ember/runloop', '@ember/-internals/metal', 'internal-test-helpers'], function (_emberBabel, _controller, _runtime, _routing, _runloop, _metal, _internalTestHelpers) {\n 'use strict';\n\n var ModelDependentQPTestCase = function (_QueryParamTestCase) {\n (0, _emberBabel.inherits)(ModelDependentQPTestCase, _QueryParamTestCase);\n\n function ModelDependentQPTestCase() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _QueryParamTestCase.apply(this, arguments));\n }\n\n ModelDependentQPTestCase.prototype.boot = function boot() {\n this.setupApplication();\n return this.visitApplication();\n };\n\n ModelDependentQPTestCase.prototype.teardown = function teardown() {\n var _QueryParamTestCase$p;\n\n (_QueryParamTestCase$p = _QueryParamTestCase.prototype.teardown).call.apply(_QueryParamTestCase$p, [this].concat(Array.prototype.slice.call(arguments)));\n this.assert.ok(!this.expectedModelHookParams, 'there should be no pending expectation of expected model hook params');\n };\n\n ModelDependentQPTestCase.prototype.reopenController = function reopenController(name, options) {\n this.application.resolveRegistration('controller:' + name).reopen(options);\n };\n\n ModelDependentQPTestCase.prototype.reopenRoute = function reopenRoute(name, options) {\n this.application.resolveRegistration('route:' + name).reopen(options);\n };\n\n ModelDependentQPTestCase.prototype.queryParamsStickyTest1 = function queryParamsStickyTest1(urlPrefix) {\n var _this2 = this;\n\n var assert = this.assert;\n\n assert.expect(14);\n\n return this.boot().then(function () {\n (0, _runloop.run)(_this2.$link1, 'click');\n _this2.assertCurrentPath(urlPrefix + '/a-1');\n\n _this2.setAndFlush(_this2.controller, 'q', 'lol');\n\n assert.equal(_this2.$link1.getAttribute('href'), urlPrefix + '/a-1?q=lol');\n assert.equal(_this2.$link2.getAttribute('href'), urlPrefix + '/a-2');\n assert.equal(_this2.$link3.getAttribute('href'), urlPrefix + '/a-3');\n\n (0, _runloop.run)(_this2.$link2, 'click');\n\n assert.equal(_this2.controller.get('q'), 'wat');\n assert.equal(_this2.controller.get('z'), 0);\n assert.deepEqual(_this2.controller.get('model'), { id: 'a-2' });\n assert.equal(_this2.$link1.getAttribute('href'), urlPrefix + '/a-1?q=lol');\n assert.equal(_this2.$link2.getAttribute('href'), urlPrefix + '/a-2');\n assert.equal(_this2.$link3.getAttribute('href'), urlPrefix + '/a-3');\n });\n };\n\n ModelDependentQPTestCase.prototype.queryParamsStickyTest2 = function queryParamsStickyTest2(urlPrefix) {\n var _this3 = this;\n\n var assert = this.assert;\n\n assert.expect(24);\n\n return this.boot().then(function () {\n _this3.expectedModelHookParams = { id: 'a-1', q: 'lol', z: 0 };\n _this3.transitionTo(urlPrefix + '/a-1?q=lol');\n\n assert.deepEqual(_this3.controller.get('model'), { id: 'a-1' });\n assert.equal(_this3.controller.get('q'), 'lol');\n assert.equal(_this3.controller.get('z'), 0);\n assert.equal(_this3.$link1.getAttribute('href'), urlPrefix + '/a-1?q=lol');\n assert.equal(_this3.$link2.getAttribute('href'), urlPrefix + '/a-2');\n assert.equal(_this3.$link3.getAttribute('href'), urlPrefix + '/a-3');\n\n _this3.expectedModelHookParams = { id: 'a-2', q: 'lol', z: 0 };\n _this3.transitionTo(urlPrefix + '/a-2?q=lol');\n\n assert.deepEqual(_this3.controller.get('model'), { id: 'a-2' }, \"controller's model changed to a-2\");\n assert.equal(_this3.controller.get('q'), 'lol');\n assert.equal(_this3.controller.get('z'), 0);\n assert.equal(_this3.$link1.getAttribute('href'), urlPrefix + '/a-1?q=lol');\n assert.equal(_this3.$link2.getAttribute('href'), urlPrefix + '/a-2?q=lol');\n assert.equal(_this3.$link3.getAttribute('href'), urlPrefix + '/a-3');\n\n _this3.expectedModelHookParams = { id: 'a-3', q: 'lol', z: 123 };\n _this3.transitionTo(urlPrefix + '/a-3?q=lol&z=123');\n\n assert.equal(_this3.controller.get('q'), 'lol');\n assert.equal(_this3.controller.get('z'), 123);\n assert.equal(_this3.$link1.getAttribute('href'), urlPrefix + '/a-1?q=lol');\n assert.equal(_this3.$link2.getAttribute('href'), urlPrefix + '/a-2?q=lol');\n assert.equal(_this3.$link3.getAttribute('href'), urlPrefix + '/a-3?q=lol&z=123');\n });\n };\n\n ModelDependentQPTestCase.prototype.queryParamsStickyTest3 = function queryParamsStickyTest3(urlPrefix, articleLookup) {\n var _this4 = this;\n\n var assert = this.assert;\n\n assert.expect(32);\n\n this.addTemplate('application', '{{#each articles as |a|}} {{link-to \\'Article\\' \\'' + articleLookup + '\\' a.id id=a.id}} {{/each}}');\n\n return this.boot().then(function () {\n _this4.expectedModelHookParams = { id: 'a-1', q: 'wat', z: 0 };\n _this4.transitionTo(articleLookup, 'a-1');\n\n assert.deepEqual(_this4.controller.get('model'), { id: 'a-1' });\n assert.equal(_this4.controller.get('q'), 'wat');\n assert.equal(_this4.controller.get('z'), 0);\n assert.equal(_this4.$link1.getAttribute('href'), urlPrefix + '/a-1');\n assert.equal(_this4.$link2.getAttribute('href'), urlPrefix + '/a-2');\n assert.equal(_this4.$link3.getAttribute('href'), urlPrefix + '/a-3');\n\n _this4.expectedModelHookParams = { id: 'a-2', q: 'lol', z: 0 };\n _this4.transitionTo(articleLookup, 'a-2', { queryParams: { q: 'lol' } });\n\n assert.deepEqual(_this4.controller.get('model'), { id: 'a-2' });\n assert.equal(_this4.controller.get('q'), 'lol');\n assert.equal(_this4.controller.get('z'), 0);\n assert.equal(_this4.$link1.getAttribute('href'), urlPrefix + '/a-1');\n assert.equal(_this4.$link2.getAttribute('href'), urlPrefix + '/a-2?q=lol');\n assert.equal(_this4.$link3.getAttribute('href'), urlPrefix + '/a-3');\n\n _this4.expectedModelHookParams = { id: 'a-3', q: 'hay', z: 0 };\n _this4.transitionTo(articleLookup, 'a-3', { queryParams: { q: 'hay' } });\n\n assert.deepEqual(_this4.controller.get('model'), { id: 'a-3' });\n assert.equal(_this4.controller.get('q'), 'hay');\n assert.equal(_this4.controller.get('z'), 0);\n assert.equal(_this4.$link1.getAttribute('href'), urlPrefix + '/a-1');\n assert.equal(_this4.$link2.getAttribute('href'), urlPrefix + '/a-2?q=lol');\n assert.equal(_this4.$link3.getAttribute('href'), urlPrefix + '/a-3?q=hay');\n\n _this4.expectedModelHookParams = { id: 'a-2', q: 'lol', z: 1 };\n _this4.transitionTo(articleLookup, 'a-2', { queryParams: { z: 1 } });\n\n assert.deepEqual(_this4.controller.get('model'), { id: 'a-2' });\n assert.equal(_this4.controller.get('q'), 'lol');\n assert.equal(_this4.controller.get('z'), 1);\n assert.equal(_this4.$link1.getAttribute('href'), urlPrefix + '/a-1');\n assert.equal(_this4.$link2.getAttribute('href'), urlPrefix + '/a-2?q=lol&z=1');\n assert.equal(_this4.$link3.getAttribute('href'), urlPrefix + '/a-3?q=hay');\n });\n };\n\n ModelDependentQPTestCase.prototype.queryParamsStickyTest4 = function queryParamsStickyTest4(urlPrefix, articleLookup) {\n var _this5 = this;\n\n var assert = this.assert;\n\n assert.expect(24);\n\n this.setupApplication();\n\n this.reopenController(articleLookup, {\n queryParams: { q: { scope: 'controller' } }\n });\n\n return this.visitApplication().then(function () {\n (0, _runloop.run)(_this5.$link1, 'click');\n _this5.assertCurrentPath(urlPrefix + '/a-1');\n\n _this5.setAndFlush(_this5.controller, 'q', 'lol');\n\n assert.equal(_this5.$link1.getAttribute('href'), urlPrefix + '/a-1?q=lol');\n assert.equal(_this5.$link2.getAttribute('href'), urlPrefix + '/a-2?q=lol');\n assert.equal(_this5.$link3.getAttribute('href'), urlPrefix + '/a-3?q=lol');\n\n (0, _runloop.run)(_this5.$link2, 'click');\n\n assert.equal(_this5.controller.get('q'), 'lol');\n assert.equal(_this5.controller.get('z'), 0);\n assert.deepEqual(_this5.controller.get('model'), { id: 'a-2' });\n\n assert.equal(_this5.$link1.getAttribute('href'), urlPrefix + '/a-1?q=lol');\n assert.equal(_this5.$link2.getAttribute('href'), urlPrefix + '/a-2?q=lol');\n assert.equal(_this5.$link3.getAttribute('href'), urlPrefix + '/a-3?q=lol');\n\n _this5.expectedModelHookParams = { id: 'a-3', q: 'haha', z: 123 };\n _this5.transitionTo(urlPrefix + '/a-3?q=haha&z=123');\n\n assert.deepEqual(_this5.controller.get('model'), { id: 'a-3' });\n assert.equal(_this5.controller.get('q'), 'haha');\n assert.equal(_this5.controller.get('z'), 123);\n\n assert.equal(_this5.$link1.getAttribute('href'), urlPrefix + '/a-1?q=haha');\n assert.equal(_this5.$link2.getAttribute('href'), urlPrefix + '/a-2?q=haha');\n assert.equal(_this5.$link3.getAttribute('href'), urlPrefix + '/a-3?q=haha&z=123');\n\n _this5.setAndFlush(_this5.controller, 'q', 'woot');\n\n assert.equal(_this5.$link1.getAttribute('href'), urlPrefix + '/a-1?q=woot');\n assert.equal(_this5.$link2.getAttribute('href'), urlPrefix + '/a-2?q=woot');\n assert.equal(_this5.$link3.getAttribute('href'), urlPrefix + '/a-3?q=woot&z=123');\n });\n };\n\n ModelDependentQPTestCase.prototype.queryParamsStickyTest5 = function queryParamsStickyTest5(urlPrefix, commentsLookupKey) {\n var _this6 = this;\n\n var assert = this.assert;\n\n assert.expect(12);\n\n return this.boot().then(function () {\n _this6.transitionTo(commentsLookupKey, 'a-1');\n\n var commentsCtrl = _this6.getController(commentsLookupKey);\n assert.equal(commentsCtrl.get('page'), 1);\n _this6.assertCurrentPath(urlPrefix + '/a-1/comments');\n\n _this6.setAndFlush(commentsCtrl, 'page', 2);\n _this6.assertCurrentPath(urlPrefix + '/a-1/comments?page=2');\n\n _this6.setAndFlush(commentsCtrl, 'page', 3);\n _this6.assertCurrentPath(urlPrefix + '/a-1/comments?page=3');\n\n _this6.transitionTo(commentsLookupKey, 'a-2');\n assert.equal(commentsCtrl.get('page'), 1);\n _this6.assertCurrentPath(urlPrefix + '/a-2/comments');\n\n _this6.transitionTo(commentsLookupKey, 'a-1');\n assert.equal(commentsCtrl.get('page'), 3);\n _this6.assertCurrentPath(urlPrefix + '/a-1/comments?page=3');\n });\n };\n\n ModelDependentQPTestCase.prototype.queryParamsStickyTest6 = function queryParamsStickyTest6(urlPrefix, articleLookup, commentsLookup) {\n var _this7 = this;\n\n var assert = this.assert;\n\n assert.expect(13);\n\n this.setupApplication();\n\n this.reopenRoute(articleLookup, {\n resetController: function (controller, isExiting) {\n this.controllerFor(commentsLookup).set('page', 1);\n if (isExiting) {\n controller.set('q', 'imdone');\n }\n }\n });\n\n this.addTemplate('about', '{{link-to \\'A\\' \\'' + commentsLookup + '\\' \\'a-1\\' id=\\'one\\'}} {{link-to \\'B\\' \\'' + commentsLookup + '\\' \\'a-2\\' id=\\'two\\'}}');\n\n return this.visitApplication().then(function () {\n _this7.transitionTo(commentsLookup, 'a-1');\n\n var commentsCtrl = _this7.getController(commentsLookup);\n assert.equal(commentsCtrl.get('page'), 1);\n _this7.assertCurrentPath(urlPrefix + '/a-1/comments');\n\n _this7.setAndFlush(commentsCtrl, 'page', 2);\n _this7.assertCurrentPath(urlPrefix + '/a-1/comments?page=2');\n\n _this7.transitionTo(commentsLookup, 'a-2');\n assert.equal(commentsCtrl.get('page'), 1);\n assert.equal(_this7.controller.get('q'), 'wat');\n\n _this7.transitionTo(commentsLookup, 'a-1');\n\n _this7.assertCurrentPath(urlPrefix + '/a-1/comments');\n assert.equal(commentsCtrl.get('page'), 1);\n\n _this7.transitionTo('about');\n assert.equal(document.getElementById('one').getAttribute('href'), urlPrefix + '/a-1/comments?q=imdone');\n assert.equal(document.getElementById('two').getAttribute('href'), urlPrefix + '/a-2/comments');\n });\n };\n\n return ModelDependentQPTestCase;\n }(_internalTestHelpers.QueryParamTestCase);\n\n (0, _internalTestHelpers.moduleFor)('Query Params - model-dependent state', function (_ModelDependentQPTest) {\n (0, _emberBabel.inherits)(_class, _ModelDependentQPTest);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ModelDependentQPTest.apply(this, arguments));\n }\n\n _class.prototype.setupApplication = function setupApplication() {\n this.router.map(function () {\n this.route('article', { path: '/a/:id' }, function () {\n this.route('comments', { resetNamespace: true });\n });\n this.route('about');\n });\n\n var articles = (0, _runtime.A)([{ id: 'a-1' }, { id: 'a-2' }, { id: 'a-3' }]);\n\n this.add('controller:application', _controller.default.extend({\n articles: articles\n }));\n\n var self = this;\n var assert = this.assert;\n this.add('route:article', _routing.Route.extend({\n model: function (params) {\n if (self.expectedModelHookParams) {\n assert.deepEqual(params, self.expectedModelHookParams, 'the ArticleRoute model hook received the expected merged dynamic segment + query params hash');\n self.expectedModelHookParams = null;\n }\n return articles.findBy('id', params.id);\n }\n }));\n\n this.add('controller:article', _controller.default.extend({\n queryParams: ['q', 'z'],\n q: 'wat',\n z: 0\n }));\n\n this.add('controller:comments', _controller.default.extend({\n queryParams: 'page',\n page: 1\n }));\n\n this.addTemplate('application', \"{{#each articles as |a|}} 1{{link-to 'Article' 'article' a id=a.id}} {{/each}} {{outlet}}\");\n };\n\n _class.prototype.visitApplication = function visitApplication() {\n var _this9 = this;\n\n return this.visit('/').then(function () {\n var assert = _this9.assert;\n\n _this9.$link1 = document.getElementById('a-1');\n _this9.$link2 = document.getElementById('a-2');\n _this9.$link3 = document.getElementById('a-3');\n\n assert.equal(_this9.$link1.getAttribute('href'), '/a/a-1');\n assert.equal(_this9.$link2.getAttribute('href'), '/a/a-2');\n assert.equal(_this9.$link3.getAttribute('href'), '/a/a-3');\n\n _this9.controller = _this9.getController('article');\n });\n };\n\n _class.prototype[\"@test query params have 'model' stickiness by default\"] = function testQueryParamsHaveModelStickinessByDefault() {\n return this.queryParamsStickyTest1('/a');\n };\n\n _class.prototype[\"@test query params have 'model' stickiness by default (url changes)\"] = function testQueryParamsHaveModelStickinessByDefaultUrlChanges() {\n return this.queryParamsStickyTest2('/a');\n };\n\n _class.prototype[\"@test query params have 'model' stickiness by default (params-based transitions)\"] = function testQueryParamsHaveModelStickinessByDefaultParamsBasedTransitions() {\n return this.queryParamsStickyTest3('/a', 'article');\n };\n\n _class.prototype[\"@test 'controller' stickiness shares QP state between models\"] = function testControllerStickinessSharesQPStateBetweenModels() {\n return this.queryParamsStickyTest4('/a', 'article');\n };\n\n _class.prototype[\"@test 'model' stickiness is scoped to current or first dynamic parent route\"] = function testModelStickinessIsScopedToCurrentOrFirstDynamicParentRoute() {\n return this.queryParamsStickyTest5('/a', 'comments');\n };\n\n _class.prototype['@test can reset query params using the resetController hook'] = function testCanResetQueryParamsUsingTheResetControllerHook() {\n return this.queryParamsStickyTest6('/a', 'article', 'comments');\n };\n\n return _class;\n }(ModelDependentQPTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Query Params - model-dependent state (nested)', function (_ModelDependentQPTest2) {\n (0, _emberBabel.inherits)(_class2, _ModelDependentQPTest2);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ModelDependentQPTest2.apply(this, arguments));\n }\n\n _class2.prototype.setupApplication = function setupApplication() {\n this.router.map(function () {\n this.route('site', function () {\n this.route('article', { path: '/a/:id' }, function () {\n this.route('comments');\n });\n });\n this.route('about');\n });\n\n var site_articles = (0, _runtime.A)([{ id: 'a-1' }, { id: 'a-2' }, { id: 'a-3' }]);\n\n this.add('controller:application', _controller.default.extend({\n articles: site_articles\n }));\n\n var self = this;\n var assert = this.assert;\n this.add('route:site.article', _routing.Route.extend({\n model: function (params) {\n if (self.expectedModelHookParams) {\n assert.deepEqual(params, self.expectedModelHookParams, 'the ArticleRoute model hook received the expected merged dynamic segment + query params hash');\n self.expectedModelHookParams = null;\n }\n return site_articles.findBy('id', params.id);\n }\n }));\n\n this.add('controller:site.article', _controller.default.extend({\n queryParams: ['q', 'z'],\n q: 'wat',\n z: 0\n }));\n\n this.add('controller:site.article.comments', _controller.default.extend({\n queryParams: 'page',\n page: 1\n }));\n\n this.addTemplate('application', \"{{#each articles as |a|}} {{link-to 'Article' 'site.article' a id=a.id}} {{/each}} {{outlet}}\");\n };\n\n _class2.prototype.visitApplication = function visitApplication() {\n var _this11 = this;\n\n return this.visit('/').then(function () {\n var assert = _this11.assert;\n\n _this11.$link1 = document.getElementById('a-1');\n _this11.$link2 = document.getElementById('a-2');\n _this11.$link3 = document.getElementById('a-3');\n\n assert.equal(_this11.$link1.getAttribute('href'), '/site/a/a-1');\n assert.equal(_this11.$link2.getAttribute('href'), '/site/a/a-2');\n assert.equal(_this11.$link3.getAttribute('href'), '/site/a/a-3');\n\n _this11.controller = _this11.getController('site.article');\n });\n };\n\n _class2.prototype[\"@test query params have 'model' stickiness by default\"] = function testQueryParamsHaveModelStickinessByDefault() {\n return this.queryParamsStickyTest1('/site/a');\n };\n\n _class2.prototype[\"@test query params have 'model' stickiness by default (url changes)\"] = function testQueryParamsHaveModelStickinessByDefaultUrlChanges() {\n return this.queryParamsStickyTest2('/site/a');\n };\n\n _class2.prototype[\"@test query params have 'model' stickiness by default (params-based transitions)\"] = function testQueryParamsHaveModelStickinessByDefaultParamsBasedTransitions() {\n return this.queryParamsStickyTest3('/site/a', 'site.article');\n };\n\n _class2.prototype[\"@test 'controller' stickiness shares QP state between models\"] = function testControllerStickinessSharesQPStateBetweenModels() {\n return this.queryParamsStickyTest4('/site/a', 'site.article');\n };\n\n _class2.prototype[\"@test 'model' stickiness is scoped to current or first dynamic parent route\"] = function testModelStickinessIsScopedToCurrentOrFirstDynamicParentRoute() {\n return this.queryParamsStickyTest5('/site/a', 'site.article.comments');\n };\n\n _class2.prototype['@test can reset query params using the resetController hook'] = function testCanResetQueryParamsUsingTheResetControllerHook() {\n return this.queryParamsStickyTest6('/site/a', 'site.article', 'site.article.comments');\n };\n\n return _class2;\n }(ModelDependentQPTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Query Params - model-dependent state (nested & more than 1 dynamic segment)', function (_ModelDependentQPTest3) {\n (0, _emberBabel.inherits)(_class3, _ModelDependentQPTest3);\n\n function _class3() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ModelDependentQPTest3.apply(this, arguments));\n }\n\n _class3.prototype.setupApplication = function setupApplication() {\n this.router.map(function () {\n this.route('site', { path: '/site/:site_id' }, function () {\n this.route('article', { path: '/a/:article_id' }, function () {\n this.route('comments');\n });\n });\n });\n\n var sites = (0, _runtime.A)([{ id: 's-1' }, { id: 's-2' }, { id: 's-3' }]);\n var site_articles = (0, _runtime.A)([{ id: 'a-1' }, { id: 'a-2' }, { id: 'a-3' }]);\n\n this.add('controller:application', _controller.default.extend({\n siteArticles: site_articles,\n sites: sites,\n allSitesAllArticles: (0, _metal.computed)({\n get: function () {\n var ret = [];\n var siteArticles = this.siteArticles;\n var sites = this.sites;\n sites.forEach(function (site) {\n ret = ret.concat(siteArticles.map(function (article) {\n return {\n id: site.id + '-' + article.id,\n site_id: site.id,\n article_id: article.id\n };\n }));\n });\n return ret;\n }\n })\n }));\n\n var self = this;\n var assert = this.assert;\n this.add('route:site', _routing.Route.extend({\n model: function (params) {\n if (self.expectedSiteModelHookParams) {\n assert.deepEqual(params, self.expectedSiteModelHookParams, 'the SiteRoute model hook received the expected merged dynamic segment + query params hash');\n self.expectedSiteModelHookParams = null;\n }\n return sites.findBy('id', params.site_id);\n }\n }));\n\n this.add('route:site.article', _routing.Route.extend({\n model: function (params) {\n if (self.expectedArticleModelHookParams) {\n assert.deepEqual(params, self.expectedArticleModelHookParams, 'the SiteArticleRoute model hook received the expected merged dynamic segment + query params hash');\n self.expectedArticleModelHookParams = null;\n }\n return site_articles.findBy('id', params.article_id);\n }\n }));\n\n this.add('controller:site', _controller.default.extend({\n queryParams: ['country'],\n country: 'au'\n }));\n\n this.add('controller:site.article', _controller.default.extend({\n queryParams: ['q', 'z'],\n q: 'wat',\n z: 0\n }));\n\n this.add('controller:site.article.comments', _controller.default.extend({\n queryParams: ['page'],\n page: 1\n }));\n\n this.addTemplate('application', \"{{#each allSitesAllArticles as |a|}} {{#link-to 'site.article' a.site_id a.article_id id=a.id}}Article [{{a.site_id}}] [{{a.article_id}}]{{/link-to}} {{/each}} {{outlet}}\");\n };\n\n _class3.prototype.visitApplication = function visitApplication() {\n var _this13 = this;\n\n return this.visit('/').then(function () {\n var assert = _this13.assert;\n\n _this13.links = {};\n _this13.links['s-1-a-1'] = document.getElementById('s-1-a-1');\n _this13.links['s-1-a-2'] = document.getElementById('s-1-a-2');\n _this13.links['s-1-a-3'] = document.getElementById('s-1-a-3');\n _this13.links['s-2-a-1'] = document.getElementById('s-2-a-1');\n _this13.links['s-2-a-2'] = document.getElementById('s-2-a-2');\n _this13.links['s-2-a-3'] = document.getElementById('s-2-a-3');\n _this13.links['s-3-a-1'] = document.getElementById('s-3-a-1');\n _this13.links['s-3-a-2'] = document.getElementById('s-3-a-2');\n _this13.links['s-3-a-3'] = document.getElementById('s-3-a-3');\n\n assert.equal(_this13.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1');\n assert.equal(_this13.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2');\n assert.equal(_this13.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3');\n assert.equal(_this13.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1');\n assert.equal(_this13.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2');\n assert.equal(_this13.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3');\n assert.equal(_this13.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1');\n assert.equal(_this13.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2');\n assert.equal(_this13.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n _this13.site_controller = _this13.getController('site');\n _this13.article_controller = _this13.getController('site.article');\n });\n };\n\n _class3.prototype[\"@test query params have 'model' stickiness by default\"] = function testQueryParamsHaveModelStickinessByDefault(assert) {\n var _this14 = this;\n\n assert.expect(59);\n\n return this.boot().then(function () {\n (0, _runloop.run)(_this14.links['s-1-a-1'], 'click');\n assert.deepEqual(_this14.site_controller.get('model'), { id: 's-1' });\n assert.deepEqual(_this14.article_controller.get('model'), { id: 'a-1' });\n _this14.assertCurrentPath('/site/s-1/a/a-1');\n\n _this14.setAndFlush(_this14.article_controller, 'q', 'lol');\n\n assert.equal(_this14.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?q=lol');\n assert.equal(_this14.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2');\n assert.equal(_this14.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3');\n assert.equal(_this14.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?q=lol');\n assert.equal(_this14.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2');\n assert.equal(_this14.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3');\n assert.equal(_this14.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=lol');\n assert.equal(_this14.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2');\n assert.equal(_this14.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n _this14.setAndFlush(_this14.site_controller, 'country', 'us');\n\n assert.equal(_this14.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?country=us&q=lol');\n assert.equal(_this14.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?country=us');\n assert.equal(_this14.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?country=us');\n assert.equal(_this14.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?q=lol');\n assert.equal(_this14.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2');\n assert.equal(_this14.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3');\n assert.equal(_this14.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=lol');\n assert.equal(_this14.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2');\n assert.equal(_this14.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n (0, _runloop.run)(_this14.links['s-1-a-2'], 'click');\n\n assert.equal(_this14.site_controller.get('country'), 'us');\n assert.equal(_this14.article_controller.get('q'), 'wat');\n assert.equal(_this14.article_controller.get('z'), 0);\n assert.deepEqual(_this14.site_controller.get('model'), { id: 's-1' });\n assert.deepEqual(_this14.article_controller.get('model'), { id: 'a-2' });\n assert.equal(_this14.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?country=us&q=lol');\n assert.equal(_this14.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?country=us');\n assert.equal(_this14.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?country=us');\n assert.equal(_this14.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?q=lol');\n assert.equal(_this14.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2');\n assert.equal(_this14.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3');\n assert.equal(_this14.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=lol');\n assert.equal(_this14.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2');\n assert.equal(_this14.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n (0, _runloop.run)(_this14.links['s-2-a-2'], 'click');\n\n assert.equal(_this14.site_controller.get('country'), 'au');\n assert.equal(_this14.article_controller.get('q'), 'wat');\n assert.equal(_this14.article_controller.get('z'), 0);\n assert.deepEqual(_this14.site_controller.get('model'), { id: 's-2' });\n assert.deepEqual(_this14.article_controller.get('model'), { id: 'a-2' });\n assert.equal(_this14.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?country=us&q=lol');\n assert.equal(_this14.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?country=us');\n assert.equal(_this14.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?country=us');\n assert.equal(_this14.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?q=lol');\n assert.equal(_this14.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2');\n assert.equal(_this14.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3');\n assert.equal(_this14.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=lol');\n assert.equal(_this14.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2');\n assert.equal(_this14.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n });\n };\n\n _class3.prototype[\"@test query params have 'model' stickiness by default (url changes)\"] = function testQueryParamsHaveModelStickinessByDefaultUrlChanges(assert) {\n var _this15 = this;\n\n assert.expect(88);\n\n return this.boot().then(function () {\n _this15.expectedSiteModelHookParams = { site_id: 's-1', country: 'au' };\n _this15.expectedArticleModelHookParams = {\n article_id: 'a-1',\n q: 'lol',\n z: 0\n };\n _this15.transitionTo('/site/s-1/a/a-1?q=lol');\n\n assert.deepEqual(_this15.site_controller.get('model'), { id: 's-1' }, \"site controller's model is s-1\");\n assert.deepEqual(_this15.article_controller.get('model'), { id: 'a-1' }, \"article controller's model is a-1\");\n assert.equal(_this15.site_controller.get('country'), 'au');\n assert.equal(_this15.article_controller.get('q'), 'lol');\n assert.equal(_this15.article_controller.get('z'), 0);\n assert.equal(_this15.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?q=lol');\n assert.equal(_this15.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2');\n assert.equal(_this15.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3');\n assert.equal(_this15.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?q=lol');\n assert.equal(_this15.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2');\n assert.equal(_this15.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3');\n assert.equal(_this15.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=lol');\n assert.equal(_this15.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2');\n assert.equal(_this15.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n _this15.expectedSiteModelHookParams = { site_id: 's-2', country: 'us' };\n _this15.expectedArticleModelHookParams = {\n article_id: 'a-1',\n q: 'lol',\n z: 0\n };\n _this15.transitionTo('/site/s-2/a/a-1?country=us&q=lol');\n\n assert.deepEqual(_this15.site_controller.get('model'), { id: 's-2' }, \"site controller's model is s-2\");\n assert.deepEqual(_this15.article_controller.get('model'), { id: 'a-1' }, \"article controller's model is a-1\");\n assert.equal(_this15.site_controller.get('country'), 'us');\n assert.equal(_this15.article_controller.get('q'), 'lol');\n assert.equal(_this15.article_controller.get('z'), 0);\n assert.equal(_this15.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?q=lol');\n assert.equal(_this15.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2');\n assert.equal(_this15.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3');\n assert.equal(_this15.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?country=us&q=lol');\n assert.equal(_this15.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?country=us');\n assert.equal(_this15.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?country=us');\n assert.equal(_this15.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=lol');\n assert.equal(_this15.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2');\n assert.equal(_this15.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n _this15.expectedSiteModelHookParams = { site_id: 's-2', country: 'us' };\n _this15.expectedArticleModelHookParams = {\n article_id: 'a-2',\n q: 'lol',\n z: 0\n };\n _this15.transitionTo('/site/s-2/a/a-2?country=us&q=lol');\n\n assert.deepEqual(_this15.site_controller.get('model'), { id: 's-2' }, \"site controller's model is s-2\");\n assert.deepEqual(_this15.article_controller.get('model'), { id: 'a-2' }, \"article controller's model is a-2\");\n assert.equal(_this15.site_controller.get('country'), 'us');\n assert.equal(_this15.article_controller.get('q'), 'lol');\n assert.equal(_this15.article_controller.get('z'), 0);\n assert.equal(_this15.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?q=lol');\n assert.equal(_this15.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol');\n assert.equal(_this15.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3');\n assert.equal(_this15.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?country=us&q=lol');\n assert.equal(_this15.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?country=us&q=lol');\n assert.equal(_this15.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?country=us');\n assert.equal(_this15.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=lol');\n assert.equal(_this15.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?q=lol');\n assert.equal(_this15.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n _this15.expectedSiteModelHookParams = { site_id: 's-2', country: 'us' };\n _this15.expectedArticleModelHookParams = {\n article_id: 'a-3',\n q: 'lol',\n z: 123\n };\n _this15.transitionTo('/site/s-2/a/a-3?country=us&q=lol&z=123');\n\n assert.deepEqual(_this15.site_controller.get('model'), { id: 's-2' }, \"site controller's model is s-2\");\n assert.deepEqual(_this15.article_controller.get('model'), { id: 'a-3' }, \"article controller's model is a-3\");\n assert.equal(_this15.site_controller.get('country'), 'us');\n assert.equal(_this15.article_controller.get('q'), 'lol');\n assert.equal(_this15.article_controller.get('z'), 123);\n assert.equal(_this15.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?q=lol');\n assert.equal(_this15.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol');\n assert.equal(_this15.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?q=lol&z=123');\n assert.equal(_this15.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?country=us&q=lol');\n assert.equal(_this15.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?country=us&q=lol');\n assert.equal(_this15.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?country=us&q=lol&z=123');\n assert.equal(_this15.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=lol');\n assert.equal(_this15.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?q=lol');\n assert.equal(_this15.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3?q=lol&z=123');\n\n _this15.expectedSiteModelHookParams = { site_id: 's-3', country: 'nz' };\n _this15.expectedArticleModelHookParams = {\n article_id: 'a-3',\n q: 'lol',\n z: 123\n };\n _this15.transitionTo('/site/s-3/a/a-3?country=nz&q=lol&z=123');\n\n assert.deepEqual(_this15.site_controller.get('model'), { id: 's-3' }, \"site controller's model is s-3\");\n assert.deepEqual(_this15.article_controller.get('model'), { id: 'a-3' }, \"article controller's model is a-3\");\n assert.equal(_this15.site_controller.get('country'), 'nz');\n assert.equal(_this15.article_controller.get('q'), 'lol');\n assert.equal(_this15.article_controller.get('z'), 123);\n assert.equal(_this15.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?q=lol');\n assert.equal(_this15.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol');\n assert.equal(_this15.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?q=lol&z=123');\n assert.equal(_this15.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?country=us&q=lol');\n assert.equal(_this15.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?country=us&q=lol');\n assert.equal(_this15.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?country=us&q=lol&z=123');\n assert.equal(_this15.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?country=nz&q=lol');\n assert.equal(_this15.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?country=nz&q=lol');\n assert.equal(_this15.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3?country=nz&q=lol&z=123');\n });\n };\n\n _class3.prototype[\"@test query params have 'model' stickiness by default (params-based transitions)\"] = function testQueryParamsHaveModelStickinessByDefaultParamsBasedTransitions(assert) {\n var _this16 = this;\n\n assert.expect(118);\n\n return this.boot().then(function () {\n _this16.expectedSiteModelHookParams = { site_id: 's-1', country: 'au' };\n _this16.expectedArticleModelHookParams = {\n article_id: 'a-1',\n q: 'wat',\n z: 0\n };\n _this16.transitionTo('site.article', 's-1', 'a-1');\n\n assert.deepEqual(_this16.site_controller.get('model'), { id: 's-1' });\n assert.deepEqual(_this16.article_controller.get('model'), { id: 'a-1' });\n assert.equal(_this16.site_controller.get('country'), 'au');\n assert.equal(_this16.article_controller.get('q'), 'wat');\n assert.equal(_this16.article_controller.get('z'), 0);\n assert.equal(_this16.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1');\n assert.equal(_this16.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2');\n assert.equal(_this16.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3');\n assert.equal(_this16.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1');\n assert.equal(_this16.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2');\n assert.equal(_this16.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3');\n assert.equal(_this16.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1');\n assert.equal(_this16.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2');\n assert.equal(_this16.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n _this16.expectedSiteModelHookParams = { site_id: 's-1', country: 'au' };\n _this16.expectedArticleModelHookParams = {\n article_id: 'a-2',\n q: 'lol',\n z: 0\n };\n _this16.transitionTo('site.article', 's-1', 'a-2', {\n queryParams: { q: 'lol' }\n });\n\n assert.deepEqual(_this16.site_controller.get('model'), { id: 's-1' });\n assert.deepEqual(_this16.article_controller.get('model'), { id: 'a-2' });\n assert.equal(_this16.site_controller.get('country'), 'au');\n assert.equal(_this16.article_controller.get('q'), 'lol');\n assert.equal(_this16.article_controller.get('z'), 0);\n assert.equal(_this16.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1');\n assert.equal(_this16.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol');\n assert.equal(_this16.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3');\n assert.equal(_this16.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1');\n assert.equal(_this16.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?q=lol');\n assert.equal(_this16.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3');\n assert.equal(_this16.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1');\n assert.equal(_this16.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?q=lol');\n assert.equal(_this16.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n _this16.expectedSiteModelHookParams = { site_id: 's-1', country: 'au' };\n _this16.expectedArticleModelHookParams = {\n article_id: 'a-3',\n q: 'hay',\n z: 0\n };\n _this16.transitionTo('site.article', 's-1', 'a-3', {\n queryParams: { q: 'hay' }\n });\n\n assert.deepEqual(_this16.site_controller.get('model'), { id: 's-1' });\n assert.deepEqual(_this16.article_controller.get('model'), { id: 'a-3' });\n assert.equal(_this16.site_controller.get('country'), 'au');\n assert.equal(_this16.article_controller.get('q'), 'hay');\n assert.equal(_this16.article_controller.get('z'), 0);\n assert.equal(_this16.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1');\n assert.equal(_this16.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol');\n assert.equal(_this16.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?q=hay');\n assert.equal(_this16.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1');\n assert.equal(_this16.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?q=lol');\n assert.equal(_this16.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?q=hay');\n assert.equal(_this16.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1');\n assert.equal(_this16.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?q=lol');\n assert.equal(_this16.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3?q=hay');\n\n _this16.expectedSiteModelHookParams = { site_id: 's-1', country: 'au' };\n _this16.expectedArticleModelHookParams = {\n article_id: 'a-2',\n q: 'lol',\n z: 1\n };\n _this16.transitionTo('site.article', 's-1', 'a-2', {\n queryParams: { z: 1 }\n });\n\n assert.deepEqual(_this16.site_controller.get('model'), { id: 's-1' });\n assert.deepEqual(_this16.article_controller.get('model'), { id: 'a-2' });\n assert.equal(_this16.site_controller.get('country'), 'au');\n assert.equal(_this16.article_controller.get('q'), 'lol');\n assert.equal(_this16.article_controller.get('z'), 1);\n assert.equal(_this16.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1');\n assert.equal(_this16.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol&z=1');\n assert.equal(_this16.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?q=hay');\n assert.equal(_this16.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1');\n assert.equal(_this16.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?q=lol&z=1');\n assert.equal(_this16.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?q=hay');\n assert.equal(_this16.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1');\n assert.equal(_this16.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?q=lol&z=1');\n assert.equal(_this16.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3?q=hay');\n\n _this16.expectedSiteModelHookParams = { site_id: 's-2', country: 'us' };\n _this16.expectedArticleModelHookParams = {\n article_id: 'a-2',\n q: 'lol',\n z: 1\n };\n _this16.transitionTo('site.article', 's-2', 'a-2', {\n queryParams: { country: 'us' }\n });\n\n assert.deepEqual(_this16.site_controller.get('model'), { id: 's-2' });\n assert.deepEqual(_this16.article_controller.get('model'), { id: 'a-2' });\n assert.equal(_this16.site_controller.get('country'), 'us');\n assert.equal(_this16.article_controller.get('q'), 'lol');\n assert.equal(_this16.article_controller.get('z'), 1);\n assert.equal(_this16.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1');\n assert.equal(_this16.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol&z=1');\n assert.equal(_this16.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?q=hay');\n assert.equal(_this16.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?country=us');\n assert.equal(_this16.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?country=us&q=lol&z=1');\n assert.equal(_this16.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?country=us&q=hay');\n assert.equal(_this16.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1');\n assert.equal(_this16.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?q=lol&z=1');\n assert.equal(_this16.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3?q=hay');\n\n _this16.expectedSiteModelHookParams = { site_id: 's-2', country: 'us' };\n _this16.expectedArticleModelHookParams = {\n article_id: 'a-1',\n q: 'yeah',\n z: 0\n };\n _this16.transitionTo('site.article', 's-2', 'a-1', {\n queryParams: { q: 'yeah' }\n });\n\n assert.deepEqual(_this16.site_controller.get('model'), { id: 's-2' });\n assert.deepEqual(_this16.article_controller.get('model'), { id: 'a-1' });\n assert.equal(_this16.site_controller.get('country'), 'us');\n assert.equal(_this16.article_controller.get('q'), 'yeah');\n assert.equal(_this16.article_controller.get('z'), 0);\n assert.equal(_this16.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?q=yeah');\n assert.equal(_this16.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol&z=1');\n assert.equal(_this16.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?q=hay');\n assert.equal(_this16.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?country=us&q=yeah');\n assert.equal(_this16.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?country=us&q=lol&z=1');\n assert.equal(_this16.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?country=us&q=hay');\n assert.equal(_this16.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=yeah');\n assert.equal(_this16.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?q=lol&z=1');\n assert.equal(_this16.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3?q=hay');\n\n _this16.expectedSiteModelHookParams = { site_id: 's-3', country: 'nz' };\n _this16.expectedArticleModelHookParams = {\n article_id: 'a-3',\n q: 'hay',\n z: 3\n };\n _this16.transitionTo('site.article', 's-3', 'a-3', {\n queryParams: { country: 'nz', z: 3 }\n });\n\n assert.deepEqual(_this16.site_controller.get('model'), { id: 's-3' });\n assert.deepEqual(_this16.article_controller.get('model'), { id: 'a-3' });\n assert.equal(_this16.site_controller.get('country'), 'nz');\n assert.equal(_this16.article_controller.get('q'), 'hay');\n assert.equal(_this16.article_controller.get('z'), 3);\n assert.equal(_this16.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?q=yeah');\n assert.equal(_this16.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol&z=1');\n assert.equal(_this16.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?q=hay&z=3');\n assert.equal(_this16.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?country=us&q=yeah');\n assert.equal(_this16.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?country=us&q=lol&z=1');\n assert.equal(_this16.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?country=us&q=hay&z=3');\n assert.equal(_this16.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?country=nz&q=yeah');\n assert.equal(_this16.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?country=nz&q=lol&z=1');\n assert.equal(_this16.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3?country=nz&q=hay&z=3');\n });\n };\n\n return _class3;\n }(ModelDependentQPTestCase));\n});","enifed('ember/tests/routing/query_params_test/overlapping_query_params_test', ['ember-babel', '@ember/controller', '@ember/-internals/routing', '@ember/runloop', '@ember/-internals/metal', 'internal-test-helpers'], function (_emberBabel, _controller, _routing, _runloop, _metal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Query Params - overlapping query param property names', function (_QueryParamTestCase) {\n (0, _emberBabel.inherits)(_class, _QueryParamTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _QueryParamTestCase.apply(this, arguments));\n }\n\n _class.prototype.setupBase = function setupBase() {\n this.router.map(function () {\n this.route('parent', function () {\n this.route('child');\n });\n });\n\n return this.visit('/parent/child');\n };\n\n _class.prototype['@test can remap same-named qp props'] = function testCanRemapSameNamedQpProps(assert) {\n var _this2 = this;\n\n assert.expect(7);\n\n this.setMappedQPController('parent');\n this.setMappedQPController('parent.child', 'page', 'childPage');\n\n return this.setupBase().then(function () {\n _this2.assertCurrentPath('/parent/child');\n\n var parentController = _this2.getController('parent');\n var parentChildController = _this2.getController('parent.child');\n\n _this2.setAndFlush(parentController, 'page', 2);\n _this2.assertCurrentPath('/parent/child?parentPage=2');\n _this2.setAndFlush(parentController, 'page', 1);\n _this2.assertCurrentPath('/parent/child');\n\n _this2.setAndFlush(parentChildController, 'page', 2);\n _this2.assertCurrentPath('/parent/child?childPage=2');\n _this2.setAndFlush(parentChildController, 'page', 1);\n _this2.assertCurrentPath('/parent/child');\n\n (0, _runloop.run)(function () {\n parentController.set('page', 2);\n parentChildController.set('page', 2);\n });\n\n _this2.assertCurrentPath('/parent/child?childPage=2&parentPage=2');\n\n (0, _runloop.run)(function () {\n parentController.set('page', 1);\n parentChildController.set('page', 1);\n });\n\n _this2.assertCurrentPath('/parent/child');\n });\n };\n\n _class.prototype['@test query params can be either controller property or url key'] = function testQueryParamsCanBeEitherControllerPropertyOrUrlKey(assert) {\n var _this3 = this;\n\n assert.expect(3);\n\n this.setMappedQPController('parent');\n\n return this.setupBase().then(function () {\n _this3.assertCurrentPath('/parent/child');\n\n _this3.transitionTo('parent.child', { queryParams: { page: 2 } });\n _this3.assertCurrentPath('/parent/child?parentPage=2');\n\n _this3.transitionTo('parent.child', { queryParams: { parentPage: 3 } });\n _this3.assertCurrentPath('/parent/child?parentPage=3');\n });\n };\n\n _class.prototype['@test query param matching a url key and controller property'] = function testQueryParamMatchingAUrlKeyAndControllerProperty(assert) {\n var _this4 = this;\n\n assert.expect(3);\n\n this.setMappedQPController('parent', 'page', 'parentPage');\n this.setMappedQPController('parent.child', 'index', 'page');\n\n return this.setupBase().then(function () {\n _this4.transitionTo('parent.child', { queryParams: { page: 2 } });\n _this4.assertCurrentPath('/parent/child?parentPage=2');\n\n _this4.transitionTo('parent.child', { queryParams: { parentPage: 3 } });\n _this4.assertCurrentPath('/parent/child?parentPage=3');\n\n _this4.transitionTo('parent.child', {\n queryParams: { index: 2, page: 2 }\n });\n _this4.assertCurrentPath('/parent/child?page=2&parentPage=2');\n });\n };\n\n _class.prototype['@test query param matching same property on two controllers use the urlKey higher in the chain'] = function testQueryParamMatchingSamePropertyOnTwoControllersUseTheUrlKeyHigherInTheChain(assert) {\n var _this5 = this;\n\n assert.expect(4);\n\n this.setMappedQPController('parent', 'page', 'parentPage');\n this.setMappedQPController('parent.child', 'page', 'childPage');\n\n return this.setupBase().then(function () {\n _this5.transitionTo('parent.child', { queryParams: { page: 2 } });\n _this5.assertCurrentPath('/parent/child?parentPage=2');\n\n _this5.transitionTo('parent.child', { queryParams: { parentPage: 3 } });\n _this5.assertCurrentPath('/parent/child?parentPage=3');\n\n _this5.transitionTo('parent.child', {\n queryParams: { childPage: 2, page: 2 }\n });\n _this5.assertCurrentPath('/parent/child?childPage=2&parentPage=2');\n\n _this5.transitionTo('parent.child', {\n queryParams: { childPage: 3, parentPage: 4 }\n });\n _this5.assertCurrentPath('/parent/child?childPage=3&parentPage=4');\n });\n };\n\n _class.prototype['@test query params does not error when a query parameter exists for route instances that share a controller'] = function testQueryParamsDoesNotErrorWhenAQueryParameterExistsForRouteInstancesThatShareAController(assert) {\n var _this6 = this;\n\n assert.expect(1);\n\n var parentController = _controller.default.extend({\n queryParams: { page: 'page' }\n });\n this.add('controller:parent', parentController);\n this.add('route:parent.child', _routing.Route.extend({ controllerName: 'parent' }));\n\n return this.setupBase('/parent').then(function () {\n _this6.transitionTo('parent.child', { queryParams: { page: 2 } });\n _this6.assertCurrentPath('/parent/child?page=2');\n });\n };\n\n _class.prototype['@test query params in the same route hierarchy with the same url key get auto-scoped'] = function testQueryParamsInTheSameRouteHierarchyWithTheSameUrlKeyGetAutoScoped(assert) {\n var _this7 = this;\n\n assert.expect(1);\n\n this.setMappedQPController('parent');\n this.setMappedQPController('parent.child');\n\n expectAssertion(function () {\n _this7.setupBase();\n }, \"You're not allowed to have more than one controller property map to the same query param key, but both `parent:page` and `parent.child:page` map to `parentPage`. You can fix this by mapping one of the controller properties to a different query param key via the `as` config option, e.g. `page: { as: 'other-page' }`\");\n };\n\n _class.prototype['@test Support shared but overridable mixin pattern'] = function testSupportSharedButOverridableMixinPattern(assert) {\n var _this8 = this;\n\n assert.expect(7);\n\n var HasPage = _metal.Mixin.create({\n queryParams: 'page',\n page: 1\n });\n\n this.add('controller:parent', _controller.default.extend(HasPage, {\n queryParams: { page: 'yespage' }\n }));\n\n this.add('controller:parent.child', _controller.default.extend(HasPage));\n\n return this.setupBase().then(function () {\n _this8.assertCurrentPath('/parent/child');\n\n var parentController = _this8.getController('parent');\n var parentChildController = _this8.getController('parent.child');\n\n _this8.setAndFlush(parentChildController, 'page', 2);\n _this8.assertCurrentPath('/parent/child?page=2');\n assert.equal(parentController.get('page'), 1);\n assert.equal(parentChildController.get('page'), 2);\n\n _this8.setAndFlush(parentController, 'page', 2);\n _this8.assertCurrentPath('/parent/child?page=2&yespage=2');\n assert.equal(parentController.get('page'), 2);\n assert.equal(parentChildController.get('page'), 2);\n });\n };\n\n return _class;\n }(_internalTestHelpers.QueryParamTestCase));\n});","enifed('ember/tests/routing/query_params_test/query_param_async_get_handler_test', ['ember-babel', '@ember/-internals/metal', '@ember/-internals/runtime', '@ember/-internals/routing', 'internal-test-helpers'], function (_emberBabel, _metal, _runtime, _routing, _internalTestHelpers) {\n 'use strict';\n\n // These tests mimic what happens with lazily loaded Engines.\n (0, _internalTestHelpers.moduleFor)('Query Params - async get handler', function (_QueryParamTestCase) {\n (0, _emberBabel.inherits)(_class, _QueryParamTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _QueryParamTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test can render a link to an asynchronously loaded route without fetching the route'] = function testCanRenderALinkToAnAsynchronouslyLoadedRouteWithoutFetchingTheRoute(assert) {\n var _this2 = this;\n\n assert.expect(4);\n\n this.router.map(function () {\n this.route('post', { path: '/post/:id' });\n });\n\n this.setSingleQPController('post');\n\n var setupAppTemplate = function () {\n _this2.addTemplate('application', '\\n {{link-to \\'Post\\' \\'post\\' 1337 (query-params foo=\\'bar\\') class=\\'post-link is-1337\\'}}\\n {{link-to \\'Post\\' \\'post\\' 7331 (query-params foo=\\'boo\\') class=\\'post-link is-7331\\'}}\\n {{outlet}}\\n ');\n };\n\n setupAppTemplate();\n\n return this.visitAndAssert('/').then(function () {\n assert.equal(_this2.$('.post-link.is-1337').attr('href'), '/post/1337?foo=bar', 'renders correctly with default QP value');\n assert.equal(_this2.$('.post-link.is-7331').attr('href'), '/post/7331?foo=boo', 'renders correctly with non-default QP value');\n assert.deepEqual(_this2.fetchedHandlers, ['application', 'index'], 'only fetched the handlers for the route we\\'re on');\n });\n };\n\n _class.prototype['@test can transitionTo to an asynchronously loaded route with simple query params'] = function testCanTransitionToToAnAsynchronouslyLoadedRouteWithSimpleQueryParams(assert) {\n var _this3 = this;\n\n assert.expect(6);\n\n this.router.map(function () {\n this.route('post', { path: '/post/:id' });\n this.route('posts');\n });\n\n this.setSingleQPController('post');\n\n var postController = void 0;\n return this.visitAndAssert('/').then(function () {\n postController = _this3.getController('post');\n\n return _this3.transitionTo('posts').then(function () {\n _this3.assertCurrentPath('/posts');\n });\n }).then(function () {\n return _this3.transitionTo('post', 1337, {\n queryParams: { foo: 'boo' }\n }).then(function () {\n assert.equal(postController.get('foo'), 'boo', 'simple QP is correctly set on controller');\n _this3.assertCurrentPath('/post/1337?foo=boo');\n });\n }).then(function () {\n return _this3.transitionTo('post', 1337, {\n queryParams: { foo: 'bar' }\n }).then(function () {\n assert.equal(postController.get('foo'), 'bar', 'simple QP is correctly set with default value');\n _this3.assertCurrentPath('/post/1337');\n });\n });\n };\n\n _class.prototype['@test can transitionTo to an asynchronously loaded route with array query params'] = function testCanTransitionToToAnAsynchronouslyLoadedRouteWithArrayQueryParams(assert) {\n var _this4 = this;\n\n assert.expect(5);\n\n this.router.map(function () {\n this.route('post', { path: '/post/:id' });\n });\n\n this.setSingleQPController('post', 'comments', []);\n\n var postController = void 0;\n return this.visitAndAssert('/').then(function () {\n postController = _this4.getController('post');\n return _this4.transitionTo('post', 1337, {\n queryParams: { comments: [1, 2] }\n }).then(function () {\n assert.deepEqual(postController.get('comments'), [1, 2], 'array QP is correctly set with default value');\n _this4.assertCurrentPath('/post/1337?comments=%5B1%2C2%5D');\n });\n }).then(function () {\n return _this4.transitionTo('post', 1338).then(function () {\n assert.deepEqual(postController.get('comments'), [], 'array QP is correctly set on controller');\n _this4.assertCurrentPath('/post/1338');\n });\n });\n };\n\n _class.prototype['@test can transitionTo to an asynchronously loaded route with mapped query params'] = function testCanTransitionToToAnAsynchronouslyLoadedRouteWithMappedQueryParams(assert) {\n var _this5 = this;\n\n assert.expect(7);\n\n this.router.map(function () {\n this.route('post', { path: '/post/:id' }, function () {\n this.route('index', { path: '/' });\n });\n });\n\n this.setSingleQPController('post');\n this.setMappedQPController('post.index', 'comment', 'note');\n\n var postController = void 0;\n var postIndexController = void 0;\n\n return this.visitAndAssert('/').then(function () {\n postController = _this5.getController('post');\n postIndexController = _this5.getController('post.index');\n\n return _this5.transitionTo('post.index', 1337, {\n queryParams: { note: 6, foo: 'boo' }\n }).then(function () {\n assert.equal(postController.get('foo'), 'boo', 'simple QP is correctly set on controller');\n assert.equal(postIndexController.get('comment'), 6, 'mapped QP is correctly set on controller');\n _this5.assertCurrentPath('/post/1337?foo=boo¬e=6');\n });\n }).then(function () {\n return _this5.transitionTo('post', 1337, {\n queryParams: { foo: 'bar' }\n }).then(function () {\n assert.equal(postController.get('foo'), 'bar', 'simple QP is correctly set with default value');\n assert.equal(postIndexController.get('comment'), 6, 'mapped QP retains value scoped to model');\n _this5.assertCurrentPath('/post/1337?note=6');\n });\n });\n };\n\n _class.prototype['@test can transitionTo with a URL'] = function testCanTransitionToWithAURL(assert) {\n var _this6 = this;\n\n assert.expect(7);\n\n this.router.map(function () {\n this.route('post', { path: '/post/:id' }, function () {\n this.route('index', { path: '/' });\n });\n });\n\n this.setSingleQPController('post');\n this.setMappedQPController('post.index', 'comment', 'note');\n\n var postController = void 0;\n var postIndexController = void 0;\n\n return this.visitAndAssert('/').then(function () {\n postController = _this6.getController('post');\n postIndexController = _this6.getController('post.index');\n\n return _this6.transitionTo('/post/1337?foo=boo¬e=6').then(function () {\n assert.equal(postController.get('foo'), 'boo', 'simple QP is correctly deserialized on controller');\n assert.equal(postIndexController.get('comment'), 6, 'mapped QP is correctly deserialized on controller');\n _this6.assertCurrentPath('/post/1337?foo=boo¬e=6');\n });\n }).then(function () {\n return _this6.transitionTo('/post/1337?note=6').then(function () {\n assert.equal(postController.get('foo'), 'bar', 'simple QP is correctly deserialized with default value');\n assert.equal(postIndexController.get('comment'), 6, 'mapped QP retains value scoped to model');\n _this6.assertCurrentPath('/post/1337?note=6');\n });\n });\n };\n\n _class.prototype[\"@test undefined isn't serialized or deserialized into a string\"] = function testUndefinedIsnTSerializedOrDeserializedIntoAString(assert) {\n var _this7 = this;\n\n assert.expect(4);\n\n this.router.map(function () {\n this.route('example');\n });\n\n this.addTemplate('application', \"{{link-to 'Example' 'example' (query-params foo=undefined) id='the-link'}}\");\n\n this.setSingleQPController('example', 'foo', undefined, {\n foo: undefined\n });\n\n this.add('route:example', _routing.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { foo: undefined });\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n assert.equal(_this7.$('#the-link').attr('href'), '/example', 'renders without undefined qp serialized');\n\n return _this7.transitionTo('example', {\n queryParams: { foo: undefined }\n }).then(function () {\n _this7.assertCurrentPath('/example');\n });\n });\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'routerOptions',\n get: function () {\n var fetchedHandlers = this.fetchedHandlers = [];\n\n return {\n location: 'test',\n\n init: function () {\n this._super.apply(this, arguments);\n this._seenHandlers = Object.create(null);\n this._handlerPromises = Object.create(null);\n },\n setupRouter: function () {\n this._super.apply(this, arguments);\n var handlerPromises = this._handlerPromises,\n seenHandlers = this._seenHandlers;\n\n var getRoute = this._routerMicrolib.getRoute;\n\n this._routerMicrolib.getRoute = function (routeName) {\n fetchedHandlers.push(routeName);\n\n // Cache the returns so we don't have more than one Promise for a\n // given handler.\n return handlerPromises[routeName] || (handlerPromises[routeName] = new _runtime.RSVP.Promise(function (resolve) {\n setTimeout(function () {\n var handler = getRoute(routeName);\n\n seenHandlers[routeName] = handler;\n\n resolve(handler);\n }, 10);\n }));\n };\n },\n _getQPMeta: function (routeInfo) {\n var handler = this._seenHandlers[routeInfo.name];\n if (handler) {\n return (0, _metal.get)(handler, '_qp');\n }\n }\n };\n }\n }]);\n\n return _class;\n }(_internalTestHelpers.QueryParamTestCase));\n});","enifed('ember/tests/routing/query_params_test/query_params_paramless_link_to_test', ['ember-babel', '@ember/controller', 'internal-test-helpers'], function (_emberBabel, _controller, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Query Params - paramless link-to', function (_QueryParamTestCase) {\n (0, _emberBabel.inherits)(_class, _QueryParamTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _QueryParamTestCase.apply(this, arguments));\n }\n\n _class.prototype.testParamlessLinks = function testParamlessLinks(assert, routeName) {\n assert.expect(1);\n\n this.addTemplate(routeName, \"{{link-to 'index' 'index' id='index-link'}}\");\n\n this.add('controller:' + routeName, _controller.default.extend({\n queryParams: ['foo'],\n foo: 'wat'\n }));\n\n return this.visit('/?foo=YEAH').then(function () {\n assert.equal(document.getElementById('index-link').getAttribute('href'), '/?foo=YEAH');\n });\n };\n\n _class.prototype[\"@test param-less links in an app booted with query params in the URL don't reset the query params: application\"] = function testParamLessLinksInAnAppBootedWithQueryParamsInTheURLDonTResetTheQueryParamsApplication(assert) {\n return this.testParamlessLinks(assert, 'application');\n };\n\n _class.prototype[\"@test param-less links in an app booted with query params in the URL don't reset the query params: index\"] = function testParamLessLinksInAnAppBootedWithQueryParamsInTheURLDonTResetTheQueryParamsIndex(assert) {\n return this.testParamlessLinks(assert, 'index');\n };\n\n return _class;\n }(_internalTestHelpers.QueryParamTestCase));\n});","enifed('ember/tests/routing/query_params_test/shared_state_test', ['ember-babel', '@ember/controller', '@ember/service', '@ember/runloop', 'internal-test-helpers'], function (_emberBabel, _controller, _service, _runloop, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Query Params - shared service state', function (_QueryParamTestCase) {\n (0, _emberBabel.inherits)(_class, _QueryParamTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _QueryParamTestCase.apply(this, arguments));\n }\n\n _class.prototype.boot = function boot() {\n this.setupApplication();\n return this.visitApplication();\n };\n\n _class.prototype.setupApplication = function setupApplication() {\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('dashboard');\n });\n\n this.add('service:filters', _service.default.extend({\n shared: true\n }));\n\n this.add('controller:home', _controller.default.extend({\n filters: (0, _service.inject)()\n }));\n\n this.add('controller:dashboard', _controller.default.extend({\n filters: (0, _service.inject)(),\n queryParams: [{ 'filters.shared': 'shared' }]\n }));\n\n this.addTemplate('application', '{{link-to \\'Home\\' \\'home\\' }}
{{outlet}}
');\n this.addTemplate('home', '{{link-to \\'Dashboard\\' \\'dashboard\\' }}{{input type=\"checkbox\" id=\\'filters-checkbox\\' checked=(mut filters.shared) }}');\n this.addTemplate('dashboard', '{{link-to \\'Home\\' \\'home\\' }}');\n };\n\n _class.prototype.visitApplication = function visitApplication() {\n return this.visit('/');\n };\n\n _class.prototype['@test can modify shared state before transition'] = function testCanModifySharedStateBeforeTransition(assert) {\n var _this2 = this;\n\n assert.expect(1);\n\n return this.boot().then(function () {\n _this2.$input = document.getElementById('filters-checkbox');\n\n // click the checkbox once to set filters.shared to false\n (0, _runloop.run)(_this2.$input, 'click');\n\n return _this2.visit('/dashboard').then(function () {\n assert.ok(true, 'expecting navigating to dashboard to succeed');\n });\n });\n };\n\n _class.prototype['@test can modify shared state back to the default value before transition'] = function testCanModifySharedStateBackToTheDefaultValueBeforeTransition(assert) {\n var _this3 = this;\n\n assert.expect(1);\n\n return this.boot().then(function () {\n _this3.$input = document.getElementById('filters-checkbox');\n\n // click the checkbox twice to set filters.shared to false and back to true\n (0, _runloop.run)(_this3.$input, 'click');\n (0, _runloop.run)(_this3.$input, 'click');\n\n return _this3.visit('/dashboard').then(function () {\n assert.ok(true, 'expecting navigating to dashboard to succeed');\n });\n });\n };\n\n return _class;\n }(_internalTestHelpers.QueryParamTestCase));\n});","enifed('ember/tests/routing/router_map_test', ['ember-babel', 'internal-test-helpers', '@ember/runloop', '@ember/-internals/routing'], function (_emberBabel, _internalTestHelpers, _runloop, _routing) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Router.map', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Router.map returns an Ember Router class'] = function testRouterMapReturnsAnEmberRouterClass(assert) {\n assert.expect(1);\n\n var ret = this.router.map(function () {\n this.route('hello');\n });\n\n assert.ok(_routing.Router.detect(ret));\n };\n\n _class.prototype['@test Router.map can be called multiple times'] = function testRouterMapCanBeCalledMultipleTimes(assert) {\n var _this2 = this;\n\n assert.expect(2);\n\n this.addTemplate('hello', 'Hello!');\n this.addTemplate('goodbye', 'Goodbye!');\n\n this.router.map(function () {\n this.route('hello');\n });\n\n this.router.map(function () {\n this.route('goodbye');\n });\n\n return (0, _runloop.run)(function () {\n return _this2.visit('/hello').then(function () {\n _this2.assertText('Hello!');\n }).then(function () {\n return _this2.visit('/goodbye');\n }).then(function () {\n _this2.assertText('Goodbye!');\n });\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/routing/router_service_test/basic_test', ['ember-babel', '@ember/-internals/routing', '@ember/-internals/metal', 'internal-test-helpers'], function (_emberBabel, _routing, _metal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Router Service - main', function (_RouterTestCase) {\n (0, _emberBabel.inherits)(_class, _RouterTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test RouterService#currentRouteName is correctly set for top level route'] = function testRouterServiceCurrentRouteNameIsCorrectlySetForTopLevelRoute(assert) {\n var _this2 = this;\n\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n assert.expect(6);\n } else {\n assert.expect(1);\n }\n\n return this.visit('/').then(function () {\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n var currentRoute = _this2.routerService.currentRoute;\n var name = currentRoute.name,\n localName = currentRoute.localName,\n params = currentRoute.params,\n paramNames = currentRoute.paramNames,\n queryParams = currentRoute.queryParams;\n\n assert.equal(name, 'parent.index');\n assert.equal(localName, 'index');\n assert.deepEqual(params, {});\n assert.deepEqual(queryParams, {});\n assert.deepEqual(paramNames, []);\n }\n\n assert.equal(_this2.routerService.get('currentRouteName'), 'parent.index');\n });\n };\n\n _class.prototype['@test RouterService#currentRouteName is correctly set for child route'] = function testRouterServiceCurrentRouteNameIsCorrectlySetForChildRoute(assert) {\n var _this3 = this;\n\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n assert.expect(6);\n } else {\n assert.expect(1);\n }\n\n return this.visit('/child').then(function () {\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n var currentRoute = _this3.routerService.currentRoute;\n var name = currentRoute.name,\n localName = currentRoute.localName,\n params = currentRoute.params,\n paramNames = currentRoute.paramNames,\n queryParams = currentRoute.queryParams;\n\n assert.equal(name, 'parent.child');\n assert.equal(localName, 'child');\n assert.deepEqual(params, {});\n assert.deepEqual(queryParams, {});\n assert.deepEqual(paramNames, []);\n }\n\n assert.equal(_this3.routerService.get('currentRouteName'), 'parent.child');\n });\n };\n\n _class.prototype['@test RouterService#currentRouteName is correctly set after transition'] = function testRouterServiceCurrentRouteNameIsCorrectlySetAfterTransition(assert) {\n var _this4 = this;\n\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n assert.expect(5);\n } else {\n assert.expect(1);\n }\n\n return this.visit('/child').then(function () {\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n var currentRoute = _this4.routerService.currentRoute;\n var name = currentRoute.name,\n localName = currentRoute.localName;\n\n assert.equal(name, 'parent.child');\n assert.equal(localName, 'child');\n }\n\n return _this4.routerService.transitionTo('parent.sister');\n }).then(function () {\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n var currentRoute = _this4.routerService.currentRoute;\n var name = currentRoute.name,\n localName = currentRoute.localName;\n\n assert.equal(name, 'parent.sister');\n assert.equal(localName, 'sister');\n }\n assert.equal(_this4.routerService.get('currentRouteName'), 'parent.sister');\n });\n };\n\n _class.prototype['@test RouterService#currentRouteName is correctly set on each transition'] = function testRouterServiceCurrentRouteNameIsCorrectlySetOnEachTransition(assert) {\n var _this5 = this;\n\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n assert.expect(9);\n } else {\n assert.expect(3);\n }\n\n return this.visit('/child').then(function () {\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n var currentRoute = _this5.routerService.currentRoute;\n var name = currentRoute.name,\n localName = currentRoute.localName;\n\n assert.equal(name, 'parent.child');\n assert.equal(localName, 'child');\n }\n assert.equal(_this5.routerService.get('currentRouteName'), 'parent.child');\n\n return _this5.visit('/sister');\n }).then(function () {\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n var currentRoute = _this5.routerService.currentRoute;\n var name = currentRoute.name,\n localName = currentRoute.localName;\n\n assert.equal(name, 'parent.sister');\n assert.equal(localName, 'sister');\n }\n assert.equal(_this5.routerService.get('currentRouteName'), 'parent.sister');\n\n return _this5.visit('/brother');\n }).then(function () {\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n var currentRoute = _this5.routerService.currentRoute;\n var name = currentRoute.name,\n localName = currentRoute.localName;\n\n assert.equal(name, 'parent.brother');\n assert.equal(localName, 'brother');\n }\n assert.equal(_this5.routerService.get('currentRouteName'), 'parent.brother');\n });\n };\n\n _class.prototype['@test RouterService#rootURL is correctly set to the default value'] = function testRouterServiceRootURLIsCorrectlySetToTheDefaultValue(assert) {\n var _this6 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n assert.equal(_this6.routerService.get('rootURL'), '/');\n });\n };\n\n _class.prototype['@test RouterService#rootURL is correctly set to a custom value'] = function testRouterServiceRootURLIsCorrectlySetToACustomValue(assert) {\n var _this7 = this;\n\n assert.expect(1);\n\n this.add('route:parent.index', _routing.Route.extend({\n init: function () {\n this._super();\n (0, _metal.set)(this._router, 'rootURL', '/homepage');\n }\n }));\n\n return this.visit('/').then(function () {\n assert.equal(_this7.routerService.get('rootURL'), '/homepage');\n });\n };\n\n _class.prototype['@test RouterService#location is correctly delegated from router:main'] = function testRouterServiceLocationIsCorrectlyDelegatedFromRouterMain(assert) {\n var _this8 = this;\n\n assert.expect(2);\n\n return this.visit('/').then(function () {\n var location = _this8.routerService.get('location');\n assert.ok(location);\n assert.ok(location instanceof _routing.NoneLocation);\n });\n };\n\n return _class;\n }(_internalTestHelpers.RouterTestCase));\n});","enifed('ember/tests/routing/router_service_test/currenturl_lifecycle_test', ['ember-babel', '@ember/service', '@ember/object/computed', '@ember/-internals/glimmer', '@ember/-internals/routing', '@ember/-internals/metal', 'internal-test-helpers', '@ember/-internals/runtime'], function (_emberBabel, _service, _computed, _glimmer, _routing, _metal, _internalTestHelpers, _runtime) {\n 'use strict';\n\n var results = [];\n var ROUTE_NAMES = ['index', 'child', 'sister', 'brother', 'loading'];\n\n var InstrumentedRoute = _routing.Route.extend({\n routerService: (0, _service.inject)('router'),\n\n beforeModel: function () {\n var service = (0, _metal.get)(this, 'routerService');\n results.push([service.get('currentRouteName'), 'beforeModel', service.get('currentURL')]);\n },\n model: function () {\n var service = (0, _metal.get)(this, 'routerService');\n results.push([service.get('currentRouteName'), 'model', service.get('currentURL')]);\n return new _runtime.RSVP.Promise(function (resolve) {\n setTimeout(resolve, 200);\n });\n },\n afterModel: function () {\n var service = (0, _metal.get)(this, 'routerService');\n results.push([service.get('currentRouteName'), 'afterModel', service.get('currentURL')]);\n }\n });\n\n (0, _internalTestHelpers.moduleFor)('Router Service - currentURL | currentRouteName', function (_RouterTestCase) {\n (0, _emberBabel.inherits)(_class, _RouterTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase.apply(this, arguments));\n\n results = [];\n\n ROUTE_NAMES.forEach(function (name) {\n var routeName = 'parent.' + name;\n _this.add('route:' + routeName, InstrumentedRoute.extend());\n _this.addTemplate(routeName, '{{current-url}}');\n });\n\n var CurrenURLComponent = _glimmer.Component.extend({\n routerService: (0, _service.inject)('router'),\n currentURL: (0, _computed.readOnly)('routerService.currentURL'),\n currentRouteName: (0, _computed.readOnly)('routerService.currentRouteName')\n });\n\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n CurrenURLComponent.reopen({\n currentRoute: (0, _computed.readOnly)('routerService.currentRoute')\n });\n }\n\n _this.addComponent('current-url', {\n ComponentClass: CurrenURLComponent,\n template: true /* EMBER_ROUTING_ROUTER_SERVICE */ ? '{{currentURL}}-{{currentRouteName}}-{{currentRoute.name}}' : '{{currentURL}}-{{currentRouteName}}'\n });\n return _this;\n }\n\n _class.prototype['@test RouterService#currentURL is correctly set for top level route'] = function testRouterServiceCurrentURLIsCorrectlySetForTopLevelRoute(assert) {\n var _this2 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n assert.equal(_this2.routerService.get('currentURL'), '/');\n });\n };\n\n _class.prototype['@test RouterService#currentURL is correctly set for child route'] = function testRouterServiceCurrentURLIsCorrectlySetForChildRoute(assert) {\n var _this3 = this;\n\n assert.expect(1);\n\n return this.visit('/child').then(function () {\n assert.equal(_this3.routerService.get('currentURL'), '/child');\n });\n };\n\n _class.prototype['@test RouterService#currentURL is correctly set after transition'] = function testRouterServiceCurrentURLIsCorrectlySetAfterTransition(assert) {\n var _this4 = this;\n\n assert.expect(1);\n\n return this.visit('/child').then(function () {\n return _this4.routerService.transitionTo('parent.sister');\n }).then(function () {\n assert.equal(_this4.routerService.get('currentURL'), '/sister');\n });\n };\n\n _class.prototype['@test RouterService#currentURL is correctly set on each transition'] = function testRouterServiceCurrentURLIsCorrectlySetOnEachTransition(assert) {\n var _this5 = this;\n\n assert.expect(3);\n\n return this.visit('/child').then(function () {\n assert.equal(_this5.routerService.get('currentURL'), '/child');\n\n return _this5.visit('/sister');\n }).then(function () {\n assert.equal(_this5.routerService.get('currentURL'), '/sister');\n\n return _this5.visit('/brother');\n }).then(function () {\n assert.equal(_this5.routerService.get('currentURL'), '/brother');\n });\n };\n\n _class.prototype['@test RouterService#currentURL is not set during lifecycle hooks'] = function testRouterServiceCurrentURLIsNotSetDuringLifecycleHooks(assert) {\n var _this6 = this;\n\n assert.expect(2);\n\n return this.visit('/').then(function () {\n assert.deepEqual(results, [[null, 'beforeModel', null], [null, 'model', null], ['parent.loading', 'afterModel', '/']]);\n\n results = [];\n\n return _this6.visit('/child');\n }).then(function () {\n assert.deepEqual(results, [['parent.index', 'beforeModel', '/'], ['parent.index', 'model', '/'], ['parent.loading', 'afterModel', '/child']]);\n });\n };\n\n _class.prototype['@test RouterService#currentURL is correctly set with component after consecutive visits'] = function testRouterServiceCurrentURLIsCorrectlySetWithComponentAfterConsecutiveVisits(assert) {\n var _this7 = this;\n\n assert.expect(3);\n\n return this.visit('/').then(function () {\n var text = '/-parent.index';\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n text = '/-parent.index-parent.index';\n }\n _this7.assertText(text);\n\n return _this7.visit('/child');\n }).then(function () {\n var text = '/child-parent.child';\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n text = '/child-parent.child-parent.child';\n }\n _this7.assertText(text);\n\n return _this7.visit('/');\n }).then(function () {\n var text = '/-parent.index';\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n text = '/-parent.index-parent.index';\n }\n _this7.assertText(text);\n });\n };\n\n return _class;\n }(_internalTestHelpers.RouterTestCase));\n});","enifed('ember/tests/routing/router_service_test/events_test', ['ember-babel', 'internal-test-helpers', '@ember/service', '@ember/-internals/routing'], function (_emberBabel, _internalTestHelpers, _service, _routing) {\n 'use strict';\n\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n (0, _internalTestHelpers.moduleFor)('Router Service - events', function (_RouterTestCase) {\n (0, _emberBabel.inherits)(_class, _RouterTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test initial render'] = function testInitialRender(assert) {\n assert.expect(12);\n this.add('route:application', _routing.Route.extend({\n router: (0, _service.inject)('router'),\n init: function () {\n var _this2 = this;\n\n this._super.apply(this, arguments);\n this.router.on('routeWillChange', function (transition) {\n assert.ok(transition);\n assert.equal(transition.from, undefined);\n assert.equal(transition.to.name, 'parent.index');\n assert.equal(transition.to.localName, 'index');\n });\n\n this.router.on('routeDidChange', function (transition) {\n assert.ok(transition);\n assert.ok(_this2.router.currentURL, 'has URL ' + _this2.router.currentURL);\n assert.equal(_this2.router.currentURL, '/');\n assert.ok(_this2.router.currentRouteName, 'has route name ' + _this2.router.currentRouteName);\n assert.equal(_this2.router.currentRouteName, 'parent.index');\n assert.equal(transition.from, undefined);\n assert.equal(transition.to.name, 'parent.index');\n assert.equal(transition.to.localName, 'index');\n });\n }\n }));\n return this.visit('/');\n };\n\n _class.prototype['@test subsequent visits'] = function testSubsequentVisits(assert) {\n var _this4 = this;\n\n assert.expect(24);\n var toParent = true;\n\n this.add('route:application', _routing.Route.extend({\n router: (0, _service.inject)('router'),\n init: function () {\n var _this3 = this;\n\n this._super.apply(this, arguments);\n this.router.on('routeWillChange', function (transition) {\n if (toParent) {\n assert.equal(_this3.router.currentURL, null, 'starts as null');\n assert.equal(transition.from, undefined);\n assert.equal(transition.to.name, 'parent.child');\n assert.equal(transition.to.localName, 'child');\n assert.equal(transition.to.parent.name, 'parent', 'parent node');\n assert.equal(transition.to.parent.child, transition.to, 'parents child node is the `to`');\n assert.equal(transition.to.parent.parent.name, 'application', 'top level');\n assert.equal(transition.to.parent.parent.parent, null, 'top level');\n } else {\n assert.equal(_this3.router.currentURL, '/child', 'not changed until transition');\n assert.notEqual(transition.from, undefined);\n assert.equal(transition.from.name, 'parent.child');\n assert.equal(transition.from.localName, 'child');\n assert.equal(transition.to.localName, 'sister');\n assert.equal(transition.to.name, 'parent.sister');\n }\n });\n\n this.router.on('routeDidChange', function (transition) {\n if (toParent) {\n assert.equal(_this3.router.currentURL, '/child');\n assert.equal(transition.from, undefined);\n assert.equal(transition.to.name, 'parent.child');\n assert.equal(transition.to.localName, 'child');\n } else {\n assert.equal(_this3.router.currentURL, '/sister');\n assert.notEqual(transition.from, undefined);\n assert.equal(transition.from.name, 'parent.child');\n assert.equal(transition.from.localName, 'child');\n assert.equal(transition.to.localName, 'sister');\n assert.equal(transition.to.name, 'parent.sister');\n }\n });\n }\n }));\n return this.visit('/child').then(function () {\n toParent = false;\n return _this4.routerService.transitionTo('parent.sister');\n });\n };\n\n _class.prototype['@test redirection with `transitionTo`'] = function testRedirectionWithTransitionTo(assert) {\n assert.expect(8);\n var toChild = false;\n var toSister = false;\n\n this.add('route:parent', _routing.Route.extend({\n model: function () {\n this.transitionTo('parent.child');\n }\n }));\n\n this.add('route:parent.child', _routing.Route.extend({\n model: function () {\n this.transitionTo('parent.sister');\n }\n }));\n\n this.add('route:application', _routing.Route.extend({\n router: (0, _service.inject)('router'),\n init: function () {\n this._super.apply(this, arguments);\n\n this.router.on('routeWillChange', function (transition) {\n assert.equal(transition.from, undefined, 'initial');\n if (toChild) {\n if (toSister) {\n assert.equal(transition.to.name, 'parent.sister', 'going to /sister');\n } else {\n assert.equal(transition.to.name, 'parent.child', 'going to /child');\n toSister = true;\n }\n } else {\n // Going to `/`\n assert.equal(transition.to.name, 'parent.index', 'going to /');\n toChild = true;\n }\n });\n\n this.router.on('routeDidChange', function (transition) {\n assert.equal(transition.from, undefined, 'initial');\n assert.equal(transition.to.name, 'parent.sister', 'landed on /sister');\n });\n }\n }));\n return this.visit('/');\n };\n\n _class.prototype['@test redirection with `replaceWith`'] = function testRedirectionWithReplaceWith(assert) {\n assert.expect(8);\n var toChild = false;\n var toSister = false;\n\n this.add('route:parent', _routing.Route.extend({\n model: function () {\n this.replaceWith('parent.child');\n }\n }));\n\n this.add('route:parent.child', _routing.Route.extend({\n model: function () {\n this.replaceWith('parent.sister');\n }\n }));\n\n this.add('route:application', _routing.Route.extend({\n router: (0, _service.inject)('router'),\n init: function () {\n this._super.apply(this, arguments);\n\n this.router.on('routeWillChange', function (transition) {\n assert.equal(transition.from, undefined, 'initial');\n if (toChild) {\n if (toSister) {\n assert.equal(transition.to.name, 'parent.sister', 'going to /sister');\n } else {\n assert.equal(transition.to.name, 'parent.child', 'going to /child');\n toSister = true;\n }\n } else {\n // Going to `/`\n assert.equal(transition.to.name, 'parent.index', 'going to /');\n toChild = true;\n }\n });\n\n this.router.on('routeDidChange', function (transition) {\n assert.equal(transition.from, undefined, 'initial');\n assert.equal(transition.to.name, 'parent.sister', 'landed on /sister');\n });\n }\n }));\n return this.visit('/');\n };\n\n _class.prototype['@test nested redirection with `transitionTo`'] = function testNestedRedirectionWithTransitionTo(assert) {\n var _this5 = this;\n\n assert.expect(11);\n var toChild = false;\n var toSister = false;\n\n this.add('route:parent.child', _routing.Route.extend({\n model: function () {\n this.transitionTo('parent.sister');\n }\n }));\n\n this.add('route:application', _routing.Route.extend({\n router: (0, _service.inject)('router'),\n init: function () {\n this._super.apply(this, arguments);\n\n this.router.on('routeWillChange', function (transition) {\n if (toChild) {\n assert.equal(transition.from.name, 'parent.index');\n if (toSister) {\n assert.equal(transition.to.name, 'parent.sister', 'going to /sister');\n } else {\n assert.equal(transition.to.name, 'parent.child', 'going to /child');\n toSister = true;\n }\n } else {\n // Going to `/`\n assert.equal(transition.to.name, 'parent.index', 'going to /');\n assert.equal(transition.from, undefined, 'initial');\n }\n });\n\n this.router.on('routeDidChange', function (transition) {\n if (toSister) {\n assert.equal(transition.from.name, 'parent.index', 'initial');\n assert.equal(transition.to.name, 'parent.sister', 'landed on /sister');\n } else {\n assert.equal(transition.from, undefined, 'initial');\n assert.equal(transition.to.name, 'parent.index', 'landed on /');\n }\n });\n }\n }));\n return this.visit('/').then(function () {\n toChild = true;\n return _this5.routerService.transitionTo('/child').catch(function (e) {\n assert.equal(e.name, 'TransitionAborted', 'Transition aborted');\n });\n });\n };\n\n _class.prototype['@test nested redirection with `replaceWith`'] = function testNestedRedirectionWithReplaceWith(assert) {\n var _this6 = this;\n\n assert.expect(11);\n var toChild = false;\n var toSister = false;\n\n this.add('route:parent.child', _routing.Route.extend({\n model: function () {\n this.replaceWith('parent.sister');\n }\n }));\n\n this.add('route:application', _routing.Route.extend({\n router: (0, _service.inject)('router'),\n init: function () {\n this._super.apply(this, arguments);\n\n this.router.on('routeWillChange', function (transition) {\n if (toChild) {\n assert.equal(transition.from.name, 'parent.index');\n if (toSister) {\n assert.equal(transition.to.name, 'parent.sister', 'going to /sister');\n } else {\n assert.equal(transition.to.name, 'parent.child', 'going to /child');\n toSister = true;\n }\n } else {\n // Going to `/`\n assert.equal(transition.to.name, 'parent.index', 'going to /');\n assert.equal(transition.from, undefined, 'initial');\n }\n });\n\n this.router.on('routeDidChange', function (transition) {\n if (toSister) {\n assert.equal(transition.from.name, 'parent.index', 'initial');\n assert.equal(transition.to.name, 'parent.sister', 'landed on /sister');\n } else {\n assert.equal(transition.from, undefined, 'initial');\n assert.equal(transition.to.name, 'parent.index', 'landed on /');\n }\n });\n }\n }));\n return this.visit('/').then(function () {\n toChild = true;\n return _this6.routerService.transitionTo('/child').catch(function (e) {\n assert.equal(e.name, 'TransitionAborted', 'Transition aborted');\n });\n });\n };\n\n _class.prototype['@test aborted transition'] = function testAbortedTransition(assert) {\n var _this7 = this;\n\n assert.expect(11);\n var didAbort = false;\n var toChild = false;\n\n this.add('route:parent.child', _routing.Route.extend({\n model: function (_model, transition) {\n didAbort = true;\n transition.abort();\n }\n }));\n\n this.add('route:application', _routing.Route.extend({\n router: (0, _service.inject)('router'),\n init: function () {\n this._super.apply(this, arguments);\n\n this.router.on('routeWillChange', function (transition) {\n if (didAbort) {\n assert.equal(transition.to.name, 'parent.index', 'transition aborted');\n assert.equal(transition.from.name, 'parent.index', 'transition aborted');\n } else if (toChild) {\n assert.equal(transition.from.name, 'parent.index', 'from /');\n assert.equal(transition.to.name, 'parent.child', 'to /child');\n } else {\n assert.equal(transition.to.name, 'parent.index', 'going to /');\n assert.equal(transition.from, undefined, 'initial');\n }\n });\n\n this.router.on('routeDidChange', function (transition) {\n if (didAbort) {\n assert.equal(transition.to.name, 'parent.index', 'landed on /');\n assert.equal(transition.from.name, 'parent.index', 'initial');\n } else {\n assert.equal(transition.to.name, 'parent.index', 'transition aborted');\n assert.equal(transition.from, undefined, 'transition aborted');\n }\n });\n }\n }));\n return this.visit('/').then(function () {\n toChild = true;\n return _this7.routerService.transitionTo('/child').catch(function (e) {\n assert.equal(e.name, 'TransitionAborted', 'Transition aborted');\n });\n });\n };\n\n _class.prototype['@test query param transitions'] = function testQueryParamTransitions(assert) {\n var _this8 = this;\n\n assert.expect(15);\n var initial = true;\n var addQP = false;\n var removeQP = false;\n\n this.add('route:application', _routing.Route.extend({\n router: (0, _service.inject)('router'),\n init: function () {\n this._super.apply(this, arguments);\n\n this.router.on('routeWillChange', function (transition) {\n assert.equal(transition.to.name, 'parent.index');\n if (initial) {\n assert.equal(transition.from, null);\n assert.deepEqual(transition.to.queryParams, { a: 'true' });\n } else if (addQP) {\n assert.deepEqual(transition.from.queryParams, { a: 'true' });\n assert.deepEqual(transition.to.queryParams, { a: 'false', b: 'b' });\n } else if (removeQP) {\n assert.deepEqual(transition.from.queryParams, { a: 'false', b: 'b' });\n assert.deepEqual(transition.to.queryParams, { a: 'false' });\n } else {\n assert.ok(false, 'never');\n }\n });\n\n this.router.on('routeDidChange', function (transition) {\n if (initial) {\n assert.equal(transition.from, null);\n assert.deepEqual(transition.to.queryParams, { a: 'true' });\n } else if (addQP) {\n assert.deepEqual(transition.from.queryParams, { a: 'true' });\n assert.deepEqual(transition.to.queryParams, { a: 'false', b: 'b' });\n } else if (removeQP) {\n assert.deepEqual(transition.from.queryParams, { a: 'false', b: 'b' });\n assert.deepEqual(transition.to.queryParams, { a: 'false' });\n } else {\n assert.ok(false, 'never');\n }\n });\n }\n }));\n\n return this.visit('/?a=true').then(function () {\n addQP = true;\n initial = false;\n return _this8.routerService.transitionTo('/?a=false&b=b');\n }).then(function () {\n removeQP = true;\n addQP = false;\n return _this8.routerService.transitionTo('/?a=false');\n });\n };\n\n _class.prototype['@test query param redirects with `transitionTo`'] = function testQueryParamRedirectsWithTransitionTo(assert) {\n assert.expect(6);\n var toSister = false;\n\n this.add('route:parent.child', _routing.Route.extend({\n model: function () {\n toSister = true;\n this.transitionTo('/sister?a=a');\n }\n }));\n\n this.add('route:application', _routing.Route.extend({\n router: (0, _service.inject)('router'),\n init: function () {\n this._super.apply(this, arguments);\n\n this.router.on('routeWillChange', function (transition) {\n if (toSister) {\n assert.equal(transition.to.name, 'parent.sister');\n assert.deepEqual(transition.to.queryParams, { a: 'a' });\n } else {\n assert.equal(transition.to.name, 'parent.child');\n assert.deepEqual(transition.to.queryParams, {});\n }\n });\n\n this.router.on('routeDidChange', function (transition) {\n assert.equal(transition.to.name, 'parent.sister');\n assert.deepEqual(transition.to.queryParams, { a: 'a' });\n });\n }\n }));\n\n return this.visit('/child');\n };\n\n _class.prototype['@test query param redirects with `replaceWith`'] = function testQueryParamRedirectsWithReplaceWith(assert) {\n assert.expect(6);\n var toSister = false;\n\n this.add('route:parent.child', _routing.Route.extend({\n model: function () {\n toSister = true;\n this.replaceWith('/sister?a=a');\n }\n }));\n\n this.add('route:application', _routing.Route.extend({\n router: (0, _service.inject)('router'),\n init: function () {\n this._super.apply(this, arguments);\n\n this.router.on('routeWillChange', function (transition) {\n if (toSister) {\n assert.equal(transition.to.name, 'parent.sister');\n assert.deepEqual(transition.to.queryParams, { a: 'a' });\n } else {\n assert.equal(transition.to.name, 'parent.child');\n assert.deepEqual(transition.to.queryParams, {});\n }\n });\n\n this.router.on('routeDidChange', function (transition) {\n assert.equal(transition.to.name, 'parent.sister');\n assert.deepEqual(transition.to.queryParams, { a: 'a' });\n });\n }\n }));\n\n return this.visit('/child');\n };\n\n _class.prototype['@test params'] = function testParams(assert) {\n var _this9 = this;\n\n assert.expect(14);\n\n var inital = true;\n\n this.add('route:dynamic', _routing.Route.extend({\n model: function (params) {\n if (inital) {\n assert.deepEqual(params, { dynamic_id: '123' });\n } else {\n assert.deepEqual(params, { dynamic_id: '1' });\n }\n return params;\n }\n }));\n\n this.add('route:application', _routing.Route.extend({\n router: (0, _service.inject)('router'),\n init: function () {\n this._super.apply(this, arguments);\n\n this.router.on('routeWillChange', function (transition) {\n assert.equal(transition.to.name, 'dynamic');\n if (inital) {\n assert.deepEqual(transition.to.paramNames, ['dynamic_id']);\n assert.deepEqual(transition.to.params, { dynamic_id: '123' });\n } else {\n assert.deepEqual(transition.to.paramNames, ['dynamic_id']);\n assert.deepEqual(transition.to.params, { dynamic_id: '1' });\n }\n });\n\n this.router.on('routeDidChange', function (transition) {\n assert.equal(transition.to.name, 'dynamic');\n assert.deepEqual(transition.to.paramNames, ['dynamic_id']);\n if (inital) {\n assert.deepEqual(transition.to.params, { dynamic_id: '123' });\n } else {\n assert.deepEqual(transition.to.params, { dynamic_id: '1' });\n }\n });\n }\n }));\n\n return this.visit('/dynamic/123').then(function () {\n inital = false;\n return _this9.routerService.transitionTo('dynamic', 1);\n });\n };\n\n _class.prototype['@test nested params'] = function testNestedParams(assert) {\n var _this10 = this;\n\n assert.expect(30);\n var initial = true;\n\n this.add('route:dynamicWithChild', _routing.Route.extend({\n model: function (params) {\n if (initial) {\n assert.deepEqual(params, { dynamic_id: '123' });\n } else {\n assert.deepEqual(params, { dynamic_id: '456' });\n }\n return params.dynamic_id;\n }\n }));\n\n this.add('route:dynamicWithChild.child', _routing.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { child_id: '456' });\n return params.child_id;\n }\n }));\n\n this.add('route:application', _routing.Route.extend({\n router: (0, _service.inject)('router'),\n init: function () {\n this._super.apply(this, arguments);\n\n this.router.on('routeWillChange', function (transition) {\n assert.equal(transition.to.name, 'dynamicWithChild.child');\n assert.deepEqual(transition.to.paramNames, ['child_id']);\n assert.deepEqual(transition.to.params, { child_id: '456' });\n assert.deepEqual(transition.to.parent.paramNames, ['dynamic_id']);\n if (initial) {\n assert.deepEqual(transition.to.parent.params, { dynamic_id: '123' });\n } else {\n assert.deepEqual(transition.from.attributes, '456');\n assert.deepEqual(transition.from.parent.attributes, '123');\n assert.deepEqual(transition.to.parent.params, { dynamic_id: '456' });\n }\n });\n\n this.router.on('routeDidChange', function (transition) {\n assert.equal(transition.to.name, 'dynamicWithChild.child');\n assert.deepEqual(transition.to.paramNames, ['child_id']);\n assert.deepEqual(transition.to.params, { child_id: '456' });\n assert.deepEqual(transition.to.parent.paramNames, ['dynamic_id']);\n if (initial) {\n assert.deepEqual(transition.to.parent.params, { dynamic_id: '123' });\n } else {\n assert.deepEqual(transition.from.attributes, '456');\n assert.deepEqual(transition.from.parent.attributes, '123');\n assert.deepEqual(transition.to.attributes, '456');\n assert.deepEqual(transition.to.parent.attributes, '456');\n assert.deepEqual(transition.to.parent.params, { dynamic_id: '456' });\n }\n });\n }\n }));\n\n return this.visit('/dynamic-with-child/123/456').then(function () {\n initial = false;\n return _this10.routerService.transitionTo('/dynamic-with-child/456/456');\n });\n };\n\n return _class;\n }(_internalTestHelpers.RouterTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Router Service - deprecated events', function (_RouterTestCase2) {\n (0, _emberBabel.inherits)(_class2, _RouterTestCase2);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase2.apply(this, arguments));\n }\n\n _class2.prototype['@test willTransition events are deprecated'] = function testWillTransitionEventsAreDeprecated() {\n var _this12 = this;\n\n return this.visit('/').then(function () {\n expectDeprecation(function () {\n _this12.routerService['_router'].on('willTransition', function () {});\n }, 'You attempted to listen to the \"willTransition\" event which is deprecated. Please inject the router service and listen to the \"routeWillChange\" event.');\n });\n };\n\n _class2.prototype['@test willTransition events are deprecated on routes'] = function testWillTransitionEventsAreDeprecatedOnRoutes() {\n var _this13 = this;\n\n this.add('route:application', _routing.Route.extend({\n init: function () {\n this._super.apply(this, arguments);\n this.on('willTransition', function () {});\n }\n }));\n expectDeprecation(function () {\n return _this13.visit('/');\n }, 'You attempted to listen to the \"willTransition\" event which is deprecated. Please inject the router service and listen to the \"routeWillChange\" event.');\n };\n\n _class2.prototype['@test didTransition events are deprecated on routes'] = function testDidTransitionEventsAreDeprecatedOnRoutes() {\n var _this14 = this;\n\n this.add('route:application', _routing.Route.extend({\n init: function () {\n this._super.apply(this, arguments);\n this.on('didTransition', function () {});\n }\n }));\n expectDeprecation(function () {\n return _this14.visit('/');\n }, 'You attempted to listen to the \"didTransition\" event which is deprecated. Please inject the router service and listen to the \"routeDidChange\" event.');\n };\n\n _class2.prototype['@test other events are not deprecated on routes'] = function testOtherEventsAreNotDeprecatedOnRoutes() {\n var _this15 = this;\n\n this.add('route:application', _routing.Route.extend({\n init: function () {\n this._super.apply(this, arguments);\n this.on('fixx', function () {});\n }\n }));\n expectNoDeprecation(function () {\n return _this15.visit('/');\n });\n };\n\n _class2.prototype['@test didTransition events are deprecated'] = function testDidTransitionEventsAreDeprecated() {\n var _this16 = this;\n\n return this.visit('/').then(function () {\n expectDeprecation(function () {\n _this16.routerService['_router'].on('didTransition', function () {});\n }, 'You attempted to listen to the \"didTransition\" event which is deprecated. Please inject the router service and listen to the \"routeDidChange\" event.');\n });\n };\n\n _class2.prototype['@test other events are not deprecated'] = function testOtherEventsAreNotDeprecated() {\n var _this17 = this;\n\n return this.visit('/').then(function () {\n expectNoDeprecation(function () {\n _this17.routerService['_router'].on('wat', function () {});\n });\n });\n };\n\n return _class2;\n }(_internalTestHelpers.RouterTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Router Service: deprecated willTransition hook', function (_RouterTestCase3) {\n (0, _emberBabel.inherits)(_class3, _RouterTestCase3);\n\n function _class3() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase3.apply(this, arguments));\n }\n\n _class3.prototype['@test willTransition hook is deprecated'] = function testWillTransitionHookIsDeprecated() {\n var _this19 = this;\n\n expectDeprecation(function () {\n return _this19.visit('/');\n }, 'You attempted to override the \"willTransition\" method which is deprecated. Please inject the router service and listen to the \"routeWillChange\" event.');\n };\n\n (0, _emberBabel.createClass)(_class3, [{\n key: 'routerOptions',\n get: function () {\n return {\n willTransition: function () {\n this._super.apply(this, arguments);\n // Overrides\n }\n };\n }\n }]);\n\n return _class3;\n }(_internalTestHelpers.RouterTestCase));\n (0, _internalTestHelpers.moduleFor)('Router Service: deprecated didTransition hook', function (_RouterTestCase4) {\n (0, _emberBabel.inherits)(_class4, _RouterTestCase4);\n\n function _class4() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase4.apply(this, arguments));\n }\n\n _class4.prototype['@test didTransition hook is deprecated'] = function testDidTransitionHookIsDeprecated() {\n var _this21 = this;\n\n expectDeprecation(function () {\n return _this21.visit('/');\n }, 'You attempted to override the \"didTransition\" method which is deprecated. Please inject the router service and listen to the \"routeDidChange\" event.');\n };\n\n (0, _emberBabel.createClass)(_class4, [{\n key: 'routerOptions',\n get: function () {\n return {\n didTransition: function () {\n this._super.apply(this, arguments);\n // Overrides\n }\n };\n }\n }]);\n\n return _class4;\n }(_internalTestHelpers.RouterTestCase));\n }\n});","enifed('ember/tests/routing/router_service_test/isActive_test', ['ember-babel', '@ember/controller', 'internal-test-helpers'], function (_emberBabel, _controller, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Router Service - isActive', function (_RouterTestCase) {\n (0, _emberBabel.inherits)(_class, _RouterTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test RouterService#isActive returns true for simple route'] = function testRouterServiceIsActiveReturnsTrueForSimpleRoute(assert) {\n var _this2 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n return _this2.routerService.transitionTo('parent.child');\n }).then(function () {\n return _this2.routerService.transitionTo('parent.sister');\n }).then(function () {\n assert.ok(_this2.routerService.isActive('parent.sister'));\n });\n };\n\n _class.prototype['@test RouterService#isActive returns true for simple route with dynamic segments'] = function testRouterServiceIsActiveReturnsTrueForSimpleRouteWithDynamicSegments(assert) {\n var _this3 = this;\n\n assert.expect(1);\n\n var dynamicModel = { id: 1 };\n\n return this.visit('/').then(function () {\n return _this3.routerService.transitionTo('dynamic', dynamicModel);\n }).then(function () {\n assert.ok(_this3.routerService.isActive('dynamic', dynamicModel));\n });\n };\n\n _class.prototype['@test RouterService#isActive does not eagerly instantiate controller for query params'] = function testRouterServiceIsActiveDoesNotEagerlyInstantiateControllerForQueryParams(assert) {\n var _this4 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({ sort: 'ASC' });\n\n this.add('controller:parent.sister', _controller.default.extend({\n queryParams: ['sort'],\n sort: 'ASC',\n\n init: function () {\n assert.ok(false, 'should never create');\n this._super.apply(this, arguments);\n }\n }));\n\n return this.visit('/').then(function () {\n return _this4.routerService.transitionTo('parent.brother');\n }).then(function () {\n assert.notOk(_this4.routerService.isActive('parent.sister', queryParams));\n });\n };\n\n _class.prototype['@test RouterService#isActive is correct for simple route with basic query params'] = function testRouterServiceIsActiveIsCorrectForSimpleRouteWithBasicQueryParams(assert) {\n var _this5 = this;\n\n assert.expect(2);\n\n var queryParams = this.buildQueryParams({ sort: 'ASC' });\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: ['sort'],\n sort: 'ASC'\n }));\n\n return this.visit('/').then(function () {\n return _this5.routerService.transitionTo('parent.child', queryParams);\n }).then(function () {\n assert.ok(_this5.routerService.isActive('parent.child', queryParams));\n assert.notOk(_this5.routerService.isActive('parent.child', _this5.buildQueryParams({ sort: 'DESC' })));\n });\n };\n\n _class.prototype['@test RouterService#isActive for simple route with array as query params'] = function testRouterServiceIsActiveForSimpleRouteWithArrayAsQueryParams(assert) {\n var _this6 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({ sort: ['ascending'] });\n\n return this.visit('/').then(function () {\n return _this6.routerService.transitionTo('parent.child', queryParams);\n }).then(function () {\n assert.notOk(_this6.routerService.isActive('parent.child', _this6.buildQueryParams({ sort: 'descending' })));\n });\n };\n\n return _class;\n }(_internalTestHelpers.RouterTestCase));\n});","enifed('ember/tests/routing/router_service_test/recognize_test', ['ember-babel', 'internal-test-helpers', '@ember/-internals/routing'], function (_emberBabel, _internalTestHelpers, _routing) {\n 'use strict';\n\n if (true /* EMBER_ROUTING_ROUTER_SERVICE */) {\n (0, _internalTestHelpers.moduleFor)('Router Service - recognize', function (_RouterTestCase) {\n (0, _emberBabel.inherits)(_class, _RouterTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test returns a RouteInfo for recognized URL'] = function testReturnsARouteInfoForRecognizedURL(assert) {\n var _this2 = this;\n\n return this.visit('/').then(function () {\n var routeInfo = _this2.routerService.recognize('/dynamic-with-child/123/1?a=b');\n assert.ok(routeInfo);\n var name = routeInfo.name,\n localName = routeInfo.localName,\n parent = routeInfo.parent,\n child = routeInfo.child,\n params = routeInfo.params,\n queryParams = routeInfo.queryParams,\n paramNames = routeInfo.paramNames;\n\n assert.equal(name, 'dynamicWithChild.child');\n assert.equal(localName, 'child');\n assert.ok(parent);\n assert.equal(parent.name, 'dynamicWithChild');\n assert.notOk(child);\n assert.deepEqual(params, { child_id: '1' });\n assert.deepEqual(queryParams, { a: 'b' });\n assert.deepEqual(paramNames, ['child_id']);\n });\n };\n\n _class.prototype['@test does not transition'] = function testDoesNotTransition(assert) {\n var _this3 = this;\n\n this.addTemplate('parent', 'Parent');\n this.addTemplate('dynamic-with-child.child', 'Dynamic Child');\n\n return this.visit('/').then(function () {\n _this3.routerService.recognize('/dynamic-with-child/123/1?a=b');\n _this3.assertText('Parent', 'Did not transition and cause render');\n assert.equal(_this3.routerService.currentURL, '/', 'Did not transition');\n });\n };\n\n _class.prototype['@test respects the usage of a different rootURL'] = function testRespectsTheUsageOfADifferentRootURL(assert) {\n var _this4 = this;\n\n this.router.reopen({\n rootURL: '/app/'\n });\n\n return this.visit('/app').then(function () {\n var routeInfo = _this4.routerService.recognize('/app/child/');\n assert.ok(routeInfo);\n var name = routeInfo.name,\n localName = routeInfo.localName,\n parent = routeInfo.parent;\n\n assert.equal(name, 'parent.child');\n assert.equal(localName, 'child');\n assert.equal(parent.name, 'parent');\n });\n };\n\n _class.prototype['@test must include rootURL'] = function testMustIncludeRootURL() {\n var _this5 = this;\n\n this.addTemplate('parent', 'Parent');\n this.addTemplate('dynamic-with-child.child', 'Dynamic Child');\n\n this.router.reopen({\n rootURL: '/app/'\n });\n\n return this.visit('/app').then(function () {\n expectAssertion(function () {\n _this5.routerService.recognize('/dynamic-with-child/123/1?a=b');\n }, 'You must pass a url that begins with the application\\'s rootURL \"/app/\"');\n });\n };\n\n _class.prototype['@test returns `null` if URL is not recognized'] = function testReturnsNullIfURLIsNotRecognized(assert) {\n var _this6 = this;\n\n return this.visit('/').then(function () {\n var routeInfo = _this6.routerService.recognize('/foo');\n assert.equal(routeInfo, null);\n });\n };\n\n return _class;\n }(_internalTestHelpers.RouterTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Router Service - recognizeAndLoad', function (_RouterTestCase2) {\n (0, _emberBabel.inherits)(_class2, _RouterTestCase2);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase2.apply(this, arguments));\n }\n\n _class2.prototype['@test returns a RouteInfoWithAttributes for recognized URL'] = function testReturnsARouteInfoWithAttributesForRecognizedURL(assert) {\n var _this8 = this;\n\n this.add('route:dynamicWithChild', _routing.Route.extend({\n model: function (params) {\n return { name: 'dynamicWithChild', data: params.dynamic_id };\n }\n }));\n this.add('route:dynamicWithChild.child', _routing.Route.extend({\n model: function (params) {\n return { name: 'dynamicWithChild.child', data: params.child_id };\n }\n }));\n\n return this.visit('/').then(function () {\n return _this8.routerService.recognizeAndLoad('/dynamic-with-child/123/1?a=b');\n }).then(function (routeInfoWithAttributes) {\n assert.ok(routeInfoWithAttributes);\n var name = routeInfoWithAttributes.name,\n localName = routeInfoWithAttributes.localName,\n parent = routeInfoWithAttributes.parent,\n attributes = routeInfoWithAttributes.attributes,\n paramNames = routeInfoWithAttributes.paramNames,\n params = routeInfoWithAttributes.params,\n queryParams = routeInfoWithAttributes.queryParams;\n\n assert.equal(name, 'dynamicWithChild.child');\n assert.equal(localName, 'child');\n assert.equal(parent.name, 'dynamicWithChild');\n assert.deepEqual(params, { child_id: '1' });\n assert.deepEqual(queryParams, { a: 'b' });\n assert.deepEqual(paramNames, ['child_id']);\n assert.deepEqual(attributes, { name: 'dynamicWithChild.child', data: '1' });\n assert.deepEqual(parent.attributes, { name: 'dynamicWithChild', data: '123' });\n assert.deepEqual(parent.paramNames, ['dynamic_id']);\n assert.deepEqual(parent.params, { dynamic_id: '123' });\n });\n };\n\n _class2.prototype['@test does not transition'] = function testDoesNotTransition(assert) {\n var _this9 = this;\n\n this.addTemplate('parent', 'Parent{{outlet}}');\n this.addTemplate('parent.child', 'Child');\n\n this.add('route:parent.child', _routing.Route.extend({\n model: function () {\n return { name: 'child', data: ['stuff'] };\n }\n }));\n return this.visit('/').then(function () {\n _this9.routerService.on('routeWillChange', function () {\n return assert.ok(false);\n });\n _this9.routerService.on('routeDidChange', function () {\n return assert.ok(false);\n });\n return _this9.routerService.recognizeAndLoad('/child');\n }).then(function () {\n assert.equal(_this9.routerService.currentURL, '/');\n _this9.assertText('Parent');\n });\n };\n\n _class2.prototype['@test respects the usage of a different rootURL'] = function testRespectsTheUsageOfADifferentRootURL(assert) {\n var _this10 = this;\n\n this.router.reopen({\n rootURL: '/app/'\n });\n\n return this.visit('/app').then(function () {\n return _this10.routerService.recognizeAndLoad('/app/child/');\n }).then(function (routeInfoWithAttributes) {\n assert.ok(routeInfoWithAttributes);\n var name = routeInfoWithAttributes.name,\n localName = routeInfoWithAttributes.localName,\n parent = routeInfoWithAttributes.parent;\n\n assert.equal(name, 'parent.child');\n assert.equal(localName, 'child');\n assert.equal(parent.name, 'parent');\n });\n };\n\n _class2.prototype['@test must include rootURL'] = function testMustIncludeRootURL() {\n var _this11 = this;\n\n this.router.reopen({\n rootURL: '/app/'\n });\n\n return this.visit('/app').then(function () {\n expectAssertion(function () {\n _this11.routerService.recognizeAndLoad('/dynamic-with-child/123/1?a=b');\n }, 'You must pass a url that begins with the application\\'s rootURL \"/app/\"');\n });\n };\n\n _class2.prototype['@test rejects if url is not recognized'] = function testRejectsIfUrlIsNotRecognized(assert) {\n var _this12 = this;\n\n this.addTemplate('parent', 'Parent{{outlet}}');\n this.addTemplate('parent.child', 'Child');\n\n this.add('route:parent.child', _routing.Route.extend({\n model: function () {\n return { name: 'child', data: ['stuff'] };\n }\n }));\n return this.visit('/').then(function () {\n return _this12.routerService.recognizeAndLoad('/foo');\n }).then(function () {\n assert.ok(false, 'never');\n }, function (reason) {\n assert.equal(reason, 'URL /foo was not recognized');\n });\n };\n\n _class2.prototype['@test rejects if there is an unhandled error'] = function testRejectsIfThereIsAnUnhandledError(assert) {\n var _this13 = this;\n\n this.addTemplate('parent', 'Parent{{outlet}}');\n this.addTemplate('parent.child', 'Child');\n\n this.add('route:parent.child', _routing.Route.extend({\n model: function () {\n throw Error('Unhandled');\n }\n }));\n return this.visit('/').then(function () {\n return _this13.routerService.recognizeAndLoad('/child');\n }).then(function () {\n assert.ok(false, 'never');\n }, function (err) {\n assert.equal(err.message, 'Unhandled');\n });\n };\n\n return _class2;\n }(_internalTestHelpers.RouterTestCase));\n }\n});","enifed('ember/tests/routing/router_service_test/replaceWith_test', ['ember-babel', '@ember/-internals/routing', 'internal-test-helpers', 'router_js', '@ember/controller'], function (_emberBabel, _routing, _internalTestHelpers, _router_js, _controller) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Router Service - replaceWith', function (_RouterTestCase) {\n (0, _emberBabel.inherits)(_class, _RouterTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase.apply(this, arguments));\n\n var testCase = _this;\n testCase.state = [];\n\n _this.add('location:test', _routing.NoneLocation.extend({\n setURL: function (path) {\n testCase.state.push(path);\n this.set('path', path);\n },\n replaceURL: function (path) {\n testCase.state.splice(testCase.state.length - 1, 1, path);\n this.set('path', path);\n }\n }));\n return _this;\n }\n\n _class.prototype['@test RouterService#replaceWith returns a Transition'] = function testRouterServiceReplaceWithReturnsATransition(assert) {\n var _this2 = this;\n\n assert.expect(1);\n\n var transition = void 0;\n\n return this.visit('/').then(function () {\n transition = _this2.routerService.replaceWith('parent.child');\n\n assert.ok(transition instanceof _router_js.InternalTransition);\n\n return transition;\n });\n };\n\n _class.prototype['@test RouterService#replaceWith with basic route replaces location'] = function testRouterServiceReplaceWithWithBasicRouteReplacesLocation(assert) {\n var _this3 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n return _this3.routerService.transitionTo('parent.child');\n }).then(function () {\n return _this3.routerService.transitionTo('parent.sister');\n }).then(function () {\n return _this3.routerService.replaceWith('parent.brother');\n }).then(function () {\n assert.deepEqual(_this3.state, ['/', '/child', '/brother']);\n });\n };\n\n _class.prototype['@test RouterService#replaceWith with basic route using URLs replaces location'] = function testRouterServiceReplaceWithWithBasicRouteUsingURLsReplacesLocation(assert) {\n var _this4 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n return _this4.routerService.transitionTo('/child');\n }).then(function () {\n return _this4.routerService.transitionTo('/sister');\n }).then(function () {\n return _this4.routerService.replaceWith('/brother');\n }).then(function () {\n assert.deepEqual(_this4.state, ['/', '/child', '/brother']);\n });\n };\n\n _class.prototype['@test RouterService#replaceWith transitioning back to previously visited route replaces location'] = function testRouterServiceReplaceWithTransitioningBackToPreviouslyVisitedRouteReplacesLocation(assert) {\n var _this5 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n return _this5.routerService.transitionTo('parent.child');\n }).then(function () {\n return _this5.routerService.transitionTo('parent.sister');\n }).then(function () {\n return _this5.routerService.transitionTo('parent.brother');\n }).then(function () {\n return _this5.routerService.replaceWith('parent.sister');\n }).then(function () {\n assert.deepEqual(_this5.state, ['/', '/child', '/sister', '/sister']);\n });\n };\n\n _class.prototype['@test RouterService#replaceWith with basic query params does not remove query param defaults'] = function testRouterServiceReplaceWithWithBasicQueryParamsDoesNotRemoveQueryParamDefaults(assert) {\n var _this6 = this;\n\n assert.expect(1);\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: ['sort'],\n sort: 'ASC'\n }));\n\n var queryParams = this.buildQueryParams({ sort: 'ASC' });\n\n return this.visit('/').then(function () {\n return _this6.routerService.transitionTo('parent.brother');\n }).then(function () {\n return _this6.routerService.replaceWith('parent.sister');\n }).then(function () {\n return _this6.routerService.replaceWith('parent.child', queryParams);\n }).then(function () {\n assert.deepEqual(_this6.state, ['/', '/child?sort=ASC']);\n });\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'routerOptions',\n get: function () {\n return {\n location: 'test'\n };\n }\n }]);\n\n return _class;\n }(_internalTestHelpers.RouterTestCase));\n});","enifed('ember/tests/routing/router_service_test/transitionTo_test', ['ember-babel', '@ember/service', '@ember/-internals/glimmer', '@ember/-internals/routing', '@ember/controller', '@ember/runloop', '@ember/-internals/metal', 'internal-test-helpers', 'router_js'], function (_emberBabel, _service, _glimmer, _routing, _controller, _runloop, _metal, _internalTestHelpers, _router_js) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Router Service - transitionTo', function (_RouterTestCase) {\n (0, _emberBabel.inherits)(_class, _RouterTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase.apply(this, arguments));\n\n var testCase = _this;\n testCase.state = [];\n\n _this.add('location:test', _routing.NoneLocation.extend({\n setURL: function (path) {\n testCase.state.push(path);\n this.set('path', path);\n },\n replaceURL: function (path) {\n testCase.state.splice(testCase.state.length - 1, 1, path);\n this.set('path', path);\n }\n }));\n return _this;\n }\n\n _class.prototype['@test RouterService#transitionTo returns a Transition'] = function testRouterServiceTransitionToReturnsATransition(assert) {\n var _this2 = this;\n\n assert.expect(1);\n\n var transition = void 0;\n\n return this.visit('/').then(function () {\n transition = _this2.routerService.transitionTo('parent.child');\n\n assert.ok(transition instanceof _router_js.InternalTransition);\n\n return transition;\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with basic route updates location'] = function testRouterServiceTransitionToWithBasicRouteUpdatesLocation(assert) {\n var _this3 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n return _this3.routerService.transitionTo('parent.child');\n }).then(function () {\n return _this3.routerService.transitionTo('parent.sister');\n }).then(function () {\n return _this3.routerService.transitionTo('parent.brother');\n }).then(function () {\n assert.deepEqual(_this3.state, ['/', '/child', '/sister', '/brother']);\n });\n };\n\n _class.prototype['@test RouterService#transitionTo transitioning back to previously visited route updates location'] = function testRouterServiceTransitionToTransitioningBackToPreviouslyVisitedRouteUpdatesLocation(assert) {\n var _this4 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n return _this4.routerService.transitionTo('parent.child');\n }).then(function () {\n return _this4.routerService.transitionTo('parent.sister');\n }).then(function () {\n return _this4.routerService.transitionTo('parent.brother');\n }).then(function () {\n return _this4.routerService.transitionTo('parent.sister');\n }).then(function () {\n assert.deepEqual(_this4.state, ['/', '/child', '/sister', '/brother', '/sister']);\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with basic route'] = function testRouterServiceTransitionToWithBasicRoute(assert) {\n var _this5 = this;\n\n assert.expect(1);\n\n var componentInstance = void 0;\n\n this.addTemplate('parent.index', '{{foo-bar}}');\n\n this.addComponent('foo-bar', {\n ComponentClass: _glimmer.Component.extend({\n routerService: (0, _service.inject)('router'),\n init: function () {\n this._super();\n componentInstance = this;\n },\n\n actions: {\n transitionToSister: function () {\n (0, _metal.get)(this, 'routerService').transitionTo('parent.sister');\n }\n }\n }),\n template: 'foo-bar'\n });\n\n return this.visit('/').then(function () {\n (0, _runloop.run)(function () {\n componentInstance.send('transitionToSister');\n });\n\n assert.equal(_this5.routerService.get('currentRouteName'), 'parent.sister');\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with basic route using URL'] = function testRouterServiceTransitionToWithBasicRouteUsingURL(assert) {\n var _this6 = this;\n\n assert.expect(1);\n\n var componentInstance = void 0;\n\n this.addTemplate('parent.index', '{{foo-bar}}');\n\n this.addComponent('foo-bar', {\n ComponentClass: _glimmer.Component.extend({\n routerService: (0, _service.inject)('router'),\n init: function () {\n this._super();\n componentInstance = this;\n },\n\n actions: {\n transitionToSister: function () {\n (0, _metal.get)(this, 'routerService').transitionTo('/sister');\n }\n }\n }),\n template: 'foo-bar'\n });\n\n return this.visit('/').then(function () {\n (0, _runloop.run)(function () {\n componentInstance.send('transitionToSister');\n });\n\n assert.equal(_this6.routerService.get('currentRouteName'), 'parent.sister');\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with dynamic segment'] = function testRouterServiceTransitionToWithDynamicSegment(assert) {\n var _this7 = this;\n\n assert.expect(3);\n\n var componentInstance = void 0;\n var dynamicModel = { id: 1, contents: 'much dynamicism' };\n\n this.addTemplate('parent.index', '{{foo-bar}}');\n this.addTemplate('dynamic', '{{model.contents}}');\n\n this.addComponent('foo-bar', {\n ComponentClass: _glimmer.Component.extend({\n routerService: (0, _service.inject)('router'),\n init: function () {\n this._super();\n componentInstance = this;\n },\n\n actions: {\n transitionToDynamic: function () {\n (0, _metal.get)(this, 'routerService').transitionTo('dynamic', dynamicModel);\n }\n }\n }),\n template: 'foo-bar'\n });\n\n return this.visit('/').then(function () {\n (0, _runloop.run)(function () {\n componentInstance.send('transitionToDynamic');\n });\n\n assert.equal(_this7.routerService.get('currentRouteName'), 'dynamic');\n assert.equal(_this7.routerService.get('currentURL'), '/dynamic/1');\n _this7.assertText('much dynamicism');\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with dynamic segment and model hook'] = function testRouterServiceTransitionToWithDynamicSegmentAndModelHook(assert) {\n var _this8 = this;\n\n assert.expect(3);\n\n var componentInstance = void 0;\n var dynamicModel = { id: 1, contents: 'much dynamicism' };\n\n this.add('route:dynamic', _routing.Route.extend({\n model: function () {\n return dynamicModel;\n }\n }));\n\n this.addTemplate('parent.index', '{{foo-bar}}');\n this.addTemplate('dynamic', '{{model.contents}}');\n\n this.addComponent('foo-bar', {\n ComponentClass: _glimmer.Component.extend({\n routerService: (0, _service.inject)('router'),\n init: function () {\n this._super();\n componentInstance = this;\n },\n\n actions: {\n transitionToDynamic: function () {\n (0, _metal.get)(this, 'routerService').transitionTo('dynamic', 1);\n }\n }\n }),\n template: 'foo-bar'\n });\n\n return this.visit('/').then(function () {\n (0, _runloop.run)(function () {\n componentInstance.send('transitionToDynamic');\n });\n\n assert.equal(_this8.routerService.get('currentRouteName'), 'dynamic');\n assert.equal(_this8.routerService.get('currentURL'), '/dynamic/1');\n _this8.assertText('much dynamicism');\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with basic query params does not remove query param defaults'] = function testRouterServiceTransitionToWithBasicQueryParamsDoesNotRemoveQueryParamDefaults(assert) {\n var _this9 = this;\n\n assert.expect(1);\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: ['sort'],\n sort: 'ASC'\n }));\n\n var queryParams = this.buildQueryParams({ sort: 'ASC' });\n\n return this.visit('/').then(function () {\n return _this9.routerService.transitionTo('parent.child', queryParams);\n }).then(function () {\n assert.equal(_this9.routerService.get('currentURL'), '/child?sort=ASC');\n });\n };\n\n _class.prototype['@test RouterService#transitionTo passing only queryParams works'] = function testRouterServiceTransitionToPassingOnlyQueryParamsWorks(assert) {\n var _this10 = this;\n\n assert.expect(2);\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: ['sort']\n }));\n\n var queryParams = this.buildQueryParams({ sort: 'DESC' });\n\n return this.visit('/').then(function () {\n return _this10.routerService.transitionTo('parent.child');\n }).then(function () {\n assert.equal(_this10.routerService.get('currentURL'), '/child');\n }).then(function () {\n return _this10.routerService.transitionTo(queryParams);\n }).then(function () {\n assert.equal(_this10.routerService.get('currentURL'), '/child?sort=DESC');\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with unspecified query params'] = function testRouterServiceTransitionToWithUnspecifiedQueryParams(assert) {\n var _this11 = this;\n\n assert.expect(1);\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: ['sort', 'page', 'category', 'extra'],\n sort: 'ASC',\n page: null,\n category: undefined\n }));\n\n var queryParams = this.buildQueryParams({ sort: 'ASC' });\n\n return this.visit('/').then(function () {\n return _this11.routerService.transitionTo('parent.child', queryParams);\n }).then(function () {\n assert.equal(_this11.routerService.get('currentURL'), '/child?sort=ASC');\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with aliased query params uses the original provided key'] = function testRouterServiceTransitionToWithAliasedQueryParamsUsesTheOriginalProvidedKey(assert) {\n var _this12 = this;\n\n assert.expect(1);\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: {\n cont_sort: 'url_sort'\n },\n cont_sort: 'ASC'\n }));\n\n var queryParams = this.buildQueryParams({ url_sort: 'ASC' });\n\n return this.visit('/').then(function () {\n return _this12.routerService.transitionTo('parent.child', queryParams);\n }).then(function () {\n assert.equal(_this12.routerService.get('currentURL'), '/child?url_sort=ASC');\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with aliased query params uses the original provided key when controller property name'] = function testRouterServiceTransitionToWithAliasedQueryParamsUsesTheOriginalProvidedKeyWhenControllerPropertyName(assert) {\n var _this13 = this;\n\n assert.expect(1);\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: {\n cont_sort: 'url_sort'\n },\n cont_sort: 'ASC'\n }));\n\n var queryParams = this.buildQueryParams({ cont_sort: 'ASC' });\n\n return this.visit('/').then(function () {\n expectAssertion(function () {\n return _this13.routerService.transitionTo('parent.child', queryParams);\n }, 'You passed the `cont_sort` query parameter during a transition into parent.child, please update to url_sort');\n });\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'routerOptions',\n get: function () {\n return {\n location: 'test'\n };\n }\n }]);\n\n return _class;\n }(_internalTestHelpers.RouterTestCase));\n});","enifed('ember/tests/routing/router_service_test/urlFor_test', ['ember-babel', '@ember/controller', '@ember/string', '@ember/-internals/routing', '@ember/-internals/metal', 'internal-test-helpers'], function (_emberBabel, _controller, _string, _routing, _metal, _internalTestHelpers) {\n 'use strict';\n\n function setupController(app, name) {\n var controllerName = (0, _string.capitalize)(name) + 'Controller';\n\n Object.defineProperty(app, controllerName, {\n get: function () {\n throw new Error('Generating a URL should not require instantiation of a ' + controllerName + '.');\n }\n });\n }\n\n (0, _internalTestHelpers.moduleFor)('Router Service - urlFor', function (_RouterTestCase) {\n (0, _emberBabel.inherits)(_class, _RouterTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route'] = function testRouterServiceUrlForReturnsURLForSimpleRoute(assert) {\n var _this2 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n var expectedURL = _this2.routerService.urlFor('parent.child');\n\n assert.equal('/child', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with dynamic segments'] = function testRouterServiceUrlForReturnsURLForSimpleRouteWithDynamicSegments(assert) {\n var _this3 = this;\n\n assert.expect(1);\n\n setupController(this.application, 'dynamic');\n\n var dynamicModel = { id: 1, contents: 'much dynamicism' };\n\n return this.visit('/').then(function () {\n var expectedURL = _this3.routerService.urlFor('dynamic', dynamicModel);\n\n assert.equal('/dynamic/1', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with basic query params'] = function testRouterServiceUrlForReturnsURLForSimpleRouteWithBasicQueryParams(assert) {\n var _this4 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({ foo: 'bar' });\n\n return this.visit('/').then(function () {\n var expectedURL = _this4.routerService.urlFor('parent.child', queryParams);\n\n assert.equal('/child?foo=bar', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with basic query params and default value'] = function testRouterServiceUrlForReturnsURLForSimpleRouteWithBasicQueryParamsAndDefaultValue(assert) {\n var _this5 = this;\n\n assert.expect(1);\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: ['sort'],\n sort: 'ASC'\n }));\n\n var queryParams = this.buildQueryParams({ sort: 'ASC' });\n\n return this.visit('/').then(function () {\n var expectedURL = _this5.routerService.urlFor('parent.child', queryParams);\n\n assert.equal('/child?sort=ASC', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with basic query params and default value with stickyness'] = function testRouterServiceUrlForReturnsURLForSimpleRouteWithBasicQueryParamsAndDefaultValueWithStickyness(assert) {\n var _this6 = this;\n\n assert.expect(2);\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: ['sort', 'foo'],\n sort: 'ASC'\n }));\n\n return this.visit('/child/?sort=DESC').then(function () {\n var controller = _this6.applicationInstance.lookup('controller:parent.child');\n assert.equal((0, _metal.get)(controller, 'sort'), 'DESC', 'sticky is set');\n\n var queryParams = _this6.buildQueryParams({ foo: 'derp' });\n var actual = _this6.routerService.urlFor('parent.child', queryParams);\n\n assert.equal(actual, '/child?foo=derp', 'does not use \"stickiness\"');\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with array as query params'] = function testRouterServiceUrlForReturnsURLForSimpleRouteWithArrayAsQueryParams(assert) {\n var _this7 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({\n selectedItems: ['a', 'b', 'c']\n });\n\n return this.visit('/').then(function () {\n var expectedURL = _this7.routerService.urlFor('parent.child', queryParams);\n\n assert.equal('/child?selectedItems[]=a&selectedItems[]=b&selectedItems[]=c', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with null query params'] = function testRouterServiceUrlForReturnsURLForSimpleRouteWithNullQueryParams(assert) {\n var _this8 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({ foo: null });\n\n return this.visit('/').then(function () {\n var expectedURL = _this8.routerService.urlFor('parent.child', queryParams);\n\n assert.equal('/child', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with undefined query params'] = function testRouterServiceUrlForReturnsURLForSimpleRouteWithUndefinedQueryParams(assert) {\n var _this9 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({ foo: undefined });\n\n return this.visit('/').then(function () {\n var expectedURL = _this9.routerService.urlFor('parent.child', queryParams);\n\n assert.equal('/child', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with dynamic segments and basic query params'] = function testRouterServiceUrlForReturnsURLForSimpleRouteWithDynamicSegmentsAndBasicQueryParams(assert) {\n var _this10 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({ foo: 'bar' });\n\n return this.visit('/').then(function () {\n var expectedURL = _this10.routerService.urlFor('dynamic', { id: 1 }, queryParams);\n\n assert.equal('/dynamic/1?foo=bar', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with dynamic segments and array as query params'] = function testRouterServiceUrlForReturnsURLForSimpleRouteWithDynamicSegmentsAndArrayAsQueryParams(assert) {\n var _this11 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({\n selectedItems: ['a', 'b', 'c']\n });\n\n return this.visit('/').then(function () {\n var expectedURL = _this11.routerService.urlFor('dynamic', { id: 1 }, queryParams);\n\n assert.equal('/dynamic/1?selectedItems[]=a&selectedItems[]=b&selectedItems[]=c', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with dynamic segments and null query params'] = function testRouterServiceUrlForReturnsURLForSimpleRouteWithDynamicSegmentsAndNullQueryParams(assert) {\n var _this12 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({ foo: null });\n\n return this.visit('/').then(function () {\n var expectedURL = _this12.routerService.urlFor('dynamic', { id: 1 }, queryParams);\n\n assert.equal('/dynamic/1', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with dynamic segments and undefined query params'] = function testRouterServiceUrlForReturnsURLForSimpleRouteWithDynamicSegmentsAndUndefinedQueryParams(assert) {\n var _this13 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({ foo: undefined });\n\n return this.visit('/').then(function () {\n var expectedURL = _this13.routerService.urlFor('dynamic', { id: 1 }, queryParams);\n\n assert.equal('/dynamic/1', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor correctly transitions to route via generated path'] = function testRouterServiceUrlForCorrectlyTransitionsToRouteViaGeneratedPath(assert) {\n var _this14 = this;\n\n assert.expect(1);\n\n var expectedURL = void 0;\n\n return this.visit('/').then(function () {\n expectedURL = _this14.routerService.urlFor('parent.child');\n\n return _this14.routerService.transitionTo(expectedURL);\n }).then(function () {\n assert.equal(expectedURL, _this14.routerService.get('currentURL'));\n });\n };\n\n _class.prototype['@test RouterService#urlFor correctly transitions to route via generated path with dynamic segments'] = function testRouterServiceUrlForCorrectlyTransitionsToRouteViaGeneratedPathWithDynamicSegments(assert) {\n var _this15 = this;\n\n assert.expect(1);\n\n var expectedURL = void 0;\n var dynamicModel = { id: 1 };\n\n this.add('route:dynamic', _routing.Route.extend({\n model: function () {\n return dynamicModel;\n }\n }));\n\n return this.visit('/').then(function () {\n expectedURL = _this15.routerService.urlFor('dynamic', dynamicModel);\n\n return _this15.routerService.transitionTo(expectedURL);\n }).then(function () {\n assert.equal(expectedURL, _this15.routerService.get('currentURL'));\n });\n };\n\n _class.prototype['@test RouterService#urlFor correctly transitions to route via generated path with query params'] = function testRouterServiceUrlForCorrectlyTransitionsToRouteViaGeneratedPathWithQueryParams(assert) {\n var _this16 = this;\n\n assert.expect(1);\n\n var expectedURL = void 0;\n var actualURL = void 0;\n var queryParams = this.buildQueryParams({ foo: 'bar' });\n\n return this.visit('/').then(function () {\n expectedURL = _this16.routerService.urlFor('parent.child', queryParams);\n\n return _this16.routerService.transitionTo(expectedURL);\n }).then(function () {\n actualURL = _this16.routerService.get('currentURL') + '?foo=bar';\n\n assert.equal(expectedURL, actualURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor correctly transitions to route via generated path with dynamic segments and query params'] = function testRouterServiceUrlForCorrectlyTransitionsToRouteViaGeneratedPathWithDynamicSegmentsAndQueryParams(assert) {\n var _this17 = this;\n\n assert.expect(1);\n\n var expectedURL = void 0;\n var actualURL = void 0;\n var queryParams = this.buildQueryParams({ foo: 'bar' });\n var dynamicModel = { id: 1 };\n\n this.add('route:dynamic', _routing.Route.extend({\n model: function () {\n return dynamicModel;\n }\n }));\n\n return this.visit('/').then(function () {\n expectedURL = _this17.routerService.urlFor('dynamic', dynamicModel, queryParams);\n\n return _this17.routerService.transitionTo(expectedURL);\n }).then(function () {\n actualURL = _this17.routerService.get('currentURL') + '?foo=bar';\n\n assert.equal(expectedURL, actualURL);\n });\n };\n\n return _class;\n }(_internalTestHelpers.RouterTestCase));\n});","enifed('ember/tests/routing/substates_test', ['ember-babel', '@ember/-internals/runtime', '@ember/-internals/routing', 'internal-test-helpers'], function (_emberBabel, _runtime, _routing, _internalTestHelpers) {\n 'use strict';\n\n var counter = void 0;\n\n function step(assert, expectedValue, description) {\n assert.equal(counter, expectedValue, 'Step ' + expectedValue + ': ' + description);\n counter++;\n }\n\n (0, _internalTestHelpers.moduleFor)('Loading/Error Substates', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n\n counter = 1;\n\n _this.addTemplate('application', '
{{outlet}}
');\n _this.addTemplate('index', 'INDEX');\n return _this;\n }\n\n _class.prototype.getController = function getController(name) {\n return this.applicationInstance.lookup('controller:' + name);\n };\n\n _class.prototype['@test Slow promise from a child route of application enters nested loading state'] = function testSlowPromiseFromAChildRouteOfApplicationEntersNestedLoadingState(assert) {\n var _this2 = this;\n\n var turtleDeferred = _runtime.RSVP.defer();\n\n this.router.map(function () {\n this.route('turtle');\n });\n\n this.add('route:application', _routing.Route.extend({\n setupController: function () {\n step(assert, 2, 'ApplicationRoute#setupController');\n }\n }));\n\n this.add('route:turtle', _routing.Route.extend({\n model: function () {\n step(assert, 1, 'TurtleRoute#model');\n return turtleDeferred.promise;\n }\n }));\n this.addTemplate('turtle', 'TURTLE');\n this.addTemplate('loading', 'LOADING');\n\n var promise = this.visit('/turtle').then(function () {\n text = _this2.$('#app').text();\n assert.equal(text, 'TURTLE', 'turtle template has loaded and replaced the loading template');\n });\n\n var text = this.$('#app').text();\n assert.equal(text, 'LOADING', 'The Loading template is nested in application template\\'s outlet');\n\n turtleDeferred.resolve();\n return promise;\n };\n\n _class.prototype['@test Slow promises returned from ApplicationRoute#model don\\'t enter LoadingRoute'] = function (assert) {\n var _this3 = this;\n\n var appDeferred = _runtime.RSVP.defer();\n\n this.add('route:application', _routing.Route.extend({\n model: function () {\n return appDeferred.promise;\n }\n }));\n this.add('route:loading', _routing.Route.extend({\n setupController: function () {\n assert.ok(false, 'shouldn\\'t get here');\n }\n }));\n\n var promise = this.visit('/').then(function () {\n var text = _this3.$('#app').text();\n\n assert.equal(text, 'INDEX', 'index template has been rendered');\n });\n\n if (this.element) {\n assert.equal(this.element.textContent, '');\n }\n\n appDeferred.resolve();\n\n return promise;\n };\n\n _class.prototype['@test Don\\'t enter loading route unless either route or template defined'] = function (assert) {\n var _this4 = this;\n\n var deferred = _runtime.RSVP.defer();\n\n this.router.map(function () {\n this.route('dummy');\n });\n this.add('route:dummy', _routing.Route.extend({\n model: function () {\n return deferred.promise;\n }\n }));\n this.addTemplate('dummy', 'DUMMY');\n\n return this.visit('/').then(function () {\n var promise = _this4.visit('/dummy').then(function () {\n var text = _this4.$('#app').text();\n\n assert.equal(text, 'DUMMY', 'dummy template has been rendered');\n });\n\n assert.ok(_this4.currentPath !== 'loading', '\\n loading state not entered\\n ');\n deferred.resolve();\n\n return promise;\n });\n };\n\n _class.prototype['@test Enter loading route only if loadingRoute is defined'] = function testEnterLoadingRouteOnlyIfLoadingRouteIsDefined(assert) {\n var _this5 = this;\n\n var deferred = _runtime.RSVP.defer();\n\n this.router.map(function () {\n this.route('dummy');\n });\n\n this.add('route:dummy', _routing.Route.extend({\n model: function () {\n step(assert, 1, 'DummyRoute#model');\n return deferred.promise;\n }\n }));\n this.add('route:loading', _routing.Route.extend({\n setupController: function () {\n step(assert, 2, 'LoadingRoute#setupController');\n }\n }));\n this.addTemplate('dummy', 'DUMMY');\n\n return this.visit('/').then(function () {\n var promise = _this5.visit('/dummy').then(function () {\n var text = _this5.$('#app').text();\n\n assert.equal(text, 'DUMMY', 'dummy template has been rendered');\n });\n\n assert.equal(_this5.currentPath, 'loading', 'loading state entered');\n deferred.resolve();\n\n return promise;\n });\n };\n\n _class.prototype['@test Slow promises returned from ApplicationRoute#model enter ApplicationLoadingRoute if present'] = function testSlowPromisesReturnedFromApplicationRouteModelEnterApplicationLoadingRouteIfPresent(assert) {\n var _this6 = this;\n\n var appDeferred = _runtime.RSVP.defer();\n\n this.add('route:application', _routing.Route.extend({\n model: function () {\n return appDeferred.promise;\n }\n }));\n var loadingRouteEntered = false;\n this.add('route:application_loading', _routing.Route.extend({\n setupController: function () {\n loadingRouteEntered = true;\n }\n }));\n\n var promise = this.visit('/').then(function () {\n assert.equal(_this6.$('#app').text(), 'INDEX', 'index route loaded');\n });\n assert.ok(loadingRouteEntered, 'ApplicationLoadingRoute was entered');\n appDeferred.resolve();\n\n return promise;\n };\n\n _class.prototype['@test Slow promises returned from ApplicationRoute#model enter application_loading if template present'] = function testSlowPromisesReturnedFromApplicationRouteModelEnterApplication_loadingIfTemplatePresent(assert) {\n var _this7 = this;\n\n var appDeferred = _runtime.RSVP.defer();\n\n this.addTemplate('application_loading', '\\n
TOPLEVEL LOADING
\\n ');\n this.add('route:application', _routing.Route.extend({\n model: function () {\n return appDeferred.promise;\n }\n }));\n\n var promise = this.visit('/').then(function () {\n var length = _this7.$('#toplevel-loading').length;\n text = _this7.$('#app').text();\n\n assert.equal(length, 0, 'top-level loading view has been entirely removed from the DOM');\n assert.equal(text, 'INDEX', 'index has fully rendered');\n });\n var text = this.$('#toplevel-loading').text();\n\n assert.equal(text, 'TOPLEVEL LOADING', 'still loading the top level');\n appDeferred.resolve();\n\n return promise;\n };\n\n _class.prototype['@test Prioritized substate entry works with preserved-namespace nested routes'] = function testPrioritizedSubstateEntryWorksWithPreservedNamespaceNestedRoutes(assert) {\n var _this8 = this;\n\n var deferred = _runtime.RSVP.defer();\n\n this.addTemplate('foo.bar_loading', 'FOOBAR LOADING');\n this.addTemplate('foo.bar.index', 'YAY');\n\n this.router.map(function () {\n this.route('foo', function () {\n this.route('bar', { path: '/bar' }, function () {});\n });\n });\n\n this.add('route:foo.bar', _routing.Route.extend({\n model: function () {\n return deferred.promise;\n }\n }));\n\n return this.visit('/').then(function () {\n var promise = _this8.visit('/foo/bar').then(function () {\n text = _this8.$('#app').text();\n\n assert.equal(text, 'YAY', 'foo.bar.index fully loaded');\n });\n var text = _this8.$('#app').text();\n\n assert.equal(text, 'FOOBAR LOADING', 'foo.bar_loading was entered (as opposed to something like foo/foo/bar_loading)');\n deferred.resolve();\n\n return promise;\n });\n };\n\n _class.prototype['@test Prioritized substate entry works with reset-namespace nested routes'] = function testPrioritizedSubstateEntryWorksWithResetNamespaceNestedRoutes(assert) {\n var _this9 = this;\n\n var deferred = _runtime.RSVP.defer();\n\n this.addTemplate('bar_loading', 'BAR LOADING');\n this.addTemplate('bar.index', 'YAY');\n\n this.router.map(function () {\n this.route('foo', function () {\n this.route('bar', { path: '/bar', resetNamespace: true }, function () {});\n });\n });\n\n this.add('route:bar', _routing.Route.extend({\n model: function () {\n return deferred.promise;\n }\n }));\n\n return this.visit('/').then(function () {\n var promise = _this9.visit('/foo/bar').then(function () {\n text = _this9.$('#app').text();\n\n assert.equal(text, 'YAY', 'bar.index fully loaded');\n });\n\n var text = _this9.$('#app').text();\n\n assert.equal(text, 'BAR LOADING', 'foo.bar_loading was entered (as opposed to something likefoo/foo/bar_loading)');\n deferred.resolve();\n\n return promise;\n });\n };\n\n _class.prototype['@test Prioritized loading substate entry works with preserved-namespace nested routes'] = function testPrioritizedLoadingSubstateEntryWorksWithPreservedNamespaceNestedRoutes(assert) {\n var _this10 = this;\n\n var deferred = _runtime.RSVP.defer();\n\n this.addTemplate('foo.bar_loading', 'FOOBAR LOADING');\n this.addTemplate('foo.bar', 'YAY');\n\n this.router.map(function () {\n this.route('foo', function () {\n this.route('bar');\n });\n });\n\n this.add('route:foo.bar', _routing.Route.extend({\n model: function () {\n return deferred.promise;\n }\n }));\n\n var promise = this.visit('/foo/bar').then(function () {\n text = _this10.$('#app').text();\n\n assert.equal(text, 'YAY', 'foo.bar has rendered');\n });\n var text = this.$('#app').text();\n\n assert.equal(text, 'FOOBAR LOADING', 'foo.bar_loading was entered (as opposed to something like foo/foo/bar_loading)');\n deferred.resolve();\n\n return promise;\n };\n\n _class.prototype['@test Prioritized error substate entry works with preserved-namespaec nested routes'] = function testPrioritizedErrorSubstateEntryWorksWithPreservedNamespaecNestedRoutes(assert) {\n var _this11 = this;\n\n this.addTemplate('foo.bar_error', 'FOOBAR ERROR: {{model.msg}}');\n this.addTemplate('foo.bar', 'YAY');\n\n this.router.map(function () {\n this.route('foo', function () {\n this.route('bar');\n });\n });\n\n this.add('route:foo.bar', _routing.Route.extend({\n model: function () {\n return _runtime.RSVP.reject({\n msg: 'did it broke?'\n });\n }\n }));\n\n return this.visit('/').then(function () {\n return _this11.visit('/foo/bar').then(function () {\n var text = _this11.$('#app').text();\n assert.equal(text, 'FOOBAR ERROR: did it broke?', 'foo.bar_error was entered (as opposed to something like foo/foo/bar_error)');\n });\n });\n };\n\n _class.prototype['@test Prioritized loading substate entry works with auto-generated index routes'] = function testPrioritizedLoadingSubstateEntryWorksWithAutoGeneratedIndexRoutes(assert) {\n var _this12 = this;\n\n var deferred = _runtime.RSVP.defer();\n this.addTemplate('foo.index_loading', 'FOO LOADING');\n this.addTemplate('foo.index', 'YAY');\n this.addTemplate('foo', '{{outlet}}');\n\n this.router.map(function () {\n this.route('foo', function () {\n this.route('bar');\n });\n });\n\n this.add('route:foo.index', _routing.Route.extend({\n model: function () {\n return deferred.promise;\n }\n }));\n this.add('route:foo', _routing.Route.extend({\n model: function () {\n return true;\n }\n }));\n\n var promise = this.visit('/foo').then(function () {\n text = _this12.$('#app').text();\n\n assert.equal(text, 'YAY', 'foo.index was rendered');\n });\n var text = this.$('#app').text();\n assert.equal(text, 'FOO LOADING', 'foo.index_loading was entered');\n\n deferred.resolve();\n\n return promise;\n };\n\n _class.prototype['@test Prioritized error substate entry works with auto-generated index routes'] = function testPrioritizedErrorSubstateEntryWorksWithAutoGeneratedIndexRoutes(assert) {\n var _this13 = this;\n\n this.addTemplate('foo.index_error', 'FOO ERROR: {{model.msg}}');\n this.addTemplate('foo.index', 'YAY');\n this.addTemplate('foo', '{{outlet}}');\n\n this.router.map(function () {\n this.route('foo', function () {\n this.route('bar');\n });\n });\n\n this.add('route:foo.index', _routing.Route.extend({\n model: function () {\n return _runtime.RSVP.reject({\n msg: 'did it broke?'\n });\n }\n }));\n this.add('route:foo', _routing.Route.extend({\n model: function () {\n return true;\n }\n }));\n\n return this.visit('/').then(function () {\n return _this13.visit('/foo').then(function () {\n var text = _this13.$('#app').text();\n\n assert.equal(text, 'FOO ERROR: did it broke?', 'foo.index_error was entered');\n });\n });\n };\n\n _class.prototype['@test Rejected promises returned from ApplicationRoute transition into top-level application_error'] = function testRejectedPromisesReturnedFromApplicationRouteTransitionIntoTopLevelApplication_error(assert) {\n var _this14 = this;\n\n var reject = true;\n\n this.addTemplate('index', '
INDEX
');\n this.add('route:application', _routing.Route.extend({\n init: function () {\n this._super.apply(this, arguments);\n },\n model: function () {\n if (reject) {\n return _runtime.RSVP.reject({ msg: 'BAD NEWS BEARS' });\n } else {\n return {};\n }\n }\n }));\n\n this.addTemplate('application_error', '\\n

TOPLEVEL ERROR: {{model.msg}}

\\n ');\n\n return this.visit('/').then(function () {\n var text = _this14.$('#toplevel-error').text();\n assert.equal(text, 'TOPLEVEL ERROR: BAD NEWS BEARS', 'toplevel error rendered');\n reject = false;\n }).then(function () {\n return _this14.visit('/');\n }).then(function () {\n var text = _this14.$('#index').text();\n assert.equal(text, 'INDEX', 'the index route resolved');\n });\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'currentPath',\n get: function () {\n return this.getController('application').get('currentPath');\n }\n }]);\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Loading/Error Substates - nested routes', function (_ApplicationTestCase2) {\n (0, _emberBabel.inherits)(_class2, _ApplicationTestCase2);\n\n function _class2() {\n\n var _this15 = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase2.apply(this, arguments));\n\n counter = 1;\n\n _this15.addTemplate('application', '
{{outlet}}
');\n _this15.addTemplate('index', 'INDEX');\n _this15.addTemplate('grandma', 'GRANDMA {{outlet}}');\n _this15.addTemplate('mom', 'MOM');\n\n _this15.router.map(function () {\n this.route('grandma', function () {\n this.route('mom', { resetNamespace: true }, function () {\n this.route('sally');\n this.route('this-route-throws');\n });\n this.route('puppies');\n });\n this.route('memere', { path: '/memere/:seg' }, function () {});\n });\n\n _this15.visit('/');\n return _this15;\n }\n\n _class2.prototype.getController = function getController(name) {\n return this.applicationInstance.lookup('controller:' + name);\n };\n\n _class2.prototype['@test ApplicationRoute#currentPath reflects loading state path'] = function testApplicationRouteCurrentPathReflectsLoadingStatePath(assert) {\n var _this16 = this;\n\n var momDeferred = _runtime.RSVP.defer();\n\n this.addTemplate('grandma.loading', 'GRANDMALOADING');\n\n this.add('route:mom', _routing.Route.extend({\n model: function () {\n return momDeferred.promise;\n }\n }));\n\n var promise = this.visit('/grandma/mom').then(function () {\n text = _this16.$('#app').text();\n\n assert.equal(text, 'GRANDMA MOM', 'Grandma.mom loaded text is displayed');\n assert.equal(_this16.currentPath, 'grandma.mom.index', 'currentPath reflects final state');\n });\n var text = this.$('#app').text();\n\n assert.equal(text, 'GRANDMA GRANDMALOADING', 'Grandma.mom loading text displayed');\n\n assert.equal(this.currentPath, 'grandma.loading', 'currentPath reflects loading state');\n\n momDeferred.resolve();\n\n return promise;\n };\n\n _class2.prototype['@test Loading actions bubble to root but don\\'t enter substates above pivot '] = function (assert) {\n var _this17 = this;\n\n var sallyDeferred = _runtime.RSVP.defer();\n var puppiesDeferred = _runtime.RSVP.defer();\n\n this.add('route:application', _routing.Route.extend({\n actions: {\n loading: function () {\n assert.ok(true, 'loading action received on ApplicationRoute');\n }\n }\n }));\n\n this.add('route:mom.sally', _routing.Route.extend({\n model: function () {\n return sallyDeferred.promise;\n }\n }));\n\n this.add('route:grandma.puppies', _routing.Route.extend({\n model: function () {\n return puppiesDeferred.promise;\n }\n }));\n\n var promise = this.visit('/grandma/mom/sally');\n assert.equal(this.currentPath, 'index', 'Initial route fully loaded');\n\n sallyDeferred.resolve();\n\n promise.then(function () {\n assert.equal(_this17.currentPath, 'grandma.mom.sally', 'transition completed');\n\n var visit = _this17.visit('/grandma/puppies');\n assert.equal(_this17.currentPath, 'grandma.mom.sally', 'still in initial state because the only loading state is above the pivot route');\n\n return visit;\n }).then(function () {\n _this17.runTask(function () {\n return puppiesDeferred.resolve();\n });\n\n assert.equal(_this17.currentPath, 'grandma.puppies', 'Finished transition');\n });\n\n return promise;\n };\n\n _class2.prototype['@test Default error event moves into nested route'] = function testDefaultErrorEventMovesIntoNestedRoute(assert) {\n var _this18 = this;\n\n this.addTemplate('grandma.error', 'ERROR: {{model.msg}}');\n\n this.add('route:mom.sally', _routing.Route.extend({\n model: function () {\n step(assert, 1, 'MomSallyRoute#model');\n return _runtime.RSVP.reject({\n msg: 'did it broke?'\n });\n },\n\n actions: {\n error: function () {\n step(assert, 2, 'MomSallyRoute#actions.error');\n return true;\n }\n }\n }));\n\n return this.visit('/grandma/mom/sally').then(function () {\n step(assert, 3, 'App finished loading');\n\n var text = _this18.$('#app').text();\n\n assert.equal(text, 'GRANDMA ERROR: did it broke?', 'error bubbles');\n assert.equal(_this18.currentPath, 'grandma.error', 'Initial route fully loaded');\n });\n };\n\n _class2.prototype['@test Non-bubbled errors that re-throw aren\\'t swallowed'] = function (assert) {\n var _this19 = this;\n\n this.add('route:mom.sally', _routing.Route.extend({\n model: function () {\n return _runtime.RSVP.reject({\n msg: 'did it broke?'\n });\n },\n\n actions: {\n error: function (err) {\n // returns undefined which is falsey\n throw err;\n }\n }\n }));\n\n assert.throws(function () {\n _this19.visit('/grandma/mom/sally');\n }, function (err) {\n return err.msg === 'did it broke?';\n }, 'it broke');\n\n return this.runLoopSettled();\n };\n\n _class2.prototype['@test Handled errors that re-throw aren\\'t swallowed'] = function (assert) {\n var _this20 = this;\n\n var handledError = void 0;\n\n this.add('route:mom.sally', _routing.Route.extend({\n model: function () {\n step(assert, 1, 'MomSallyRoute#model');\n return _runtime.RSVP.reject({\n msg: 'did it broke?'\n });\n },\n\n actions: {\n error: function (err) {\n step(assert, 2, 'MomSallyRoute#actions.error');\n handledError = err;\n this.transitionTo('mom.this-route-throws');\n\n return false;\n }\n }\n }));\n\n this.add('route:mom.this-route-throws', _routing.Route.extend({\n model: function () {\n step(assert, 3, 'MomThisRouteThrows#model');\n throw handledError;\n }\n }));\n\n assert.throws(function () {\n _this20.visit('/grandma/mom/sally');\n }, function (err) {\n return err.msg === 'did it broke?';\n }, 'it broke');\n\n return this.runLoopSettled();\n };\n\n _class2.prototype['@test errors that are bubbled are thrown at a higher level if not handled'] = function testErrorsThatAreBubbledAreThrownAtAHigherLevelIfNotHandled(assert) {\n var _this21 = this;\n\n this.add('route:mom.sally', _routing.Route.extend({\n model: function () {\n step(assert, 1, 'MomSallyRoute#model');\n return _runtime.RSVP.reject({\n msg: 'did it broke?'\n });\n },\n\n actions: {\n error: function () {\n step(assert, 2, 'MomSallyRoute#actions.error');\n return true;\n }\n }\n }));\n\n assert.throws(function () {\n _this21.visit('/grandma/mom/sally');\n }, function (err) {\n return err.msg == 'did it broke?';\n }, 'Correct error was thrown');\n\n return this.runLoopSettled();\n };\n\n _class2.prototype['@test Handled errors that are thrown through rejection aren\\'t swallowed'] = function (assert) {\n var _this22 = this;\n\n var handledError = void 0;\n\n this.add('route:mom.sally', _routing.Route.extend({\n model: function () {\n step(assert, 1, 'MomSallyRoute#model');\n return _runtime.RSVP.reject({\n msg: 'did it broke?'\n });\n },\n\n actions: {\n error: function (err) {\n step(assert, 2, 'MomSallyRoute#actions.error');\n handledError = err;\n this.transitionTo('mom.this-route-throws');\n\n return false;\n }\n }\n }));\n\n this.add('route:mom.this-route-throws', _routing.Route.extend({\n model: function () {\n step(assert, 3, 'MomThisRouteThrows#model');\n return _runtime.RSVP.reject(handledError);\n }\n }));\n\n assert.throws(function () {\n _this22.visit('/grandma/mom/sally');\n }, function (err) {\n return err.msg === 'did it broke?';\n }, 'it broke');\n\n return this.runLoopSettled();\n };\n\n _class2.prototype['@test Default error events move into nested route, prioritizing more specifically named error routes - NEW'] = function testDefaultErrorEventsMoveIntoNestedRoutePrioritizingMoreSpecificallyNamedErrorRoutesNEW(assert) {\n var _this23 = this;\n\n this.addTemplate('grandma.error', 'ERROR: {{model.msg}}');\n this.addTemplate('mom_error', 'MOM ERROR: {{model.msg}}');\n\n this.add('route:mom.sally', _routing.Route.extend({\n model: function () {\n step(assert, 1, 'MomSallyRoute#model');\n return _runtime.RSVP.reject({\n msg: 'did it broke?'\n });\n },\n\n actions: {\n error: function () {\n step(assert, 2, 'MomSallyRoute#actions.error');\n return true;\n }\n }\n }));\n\n return this.visit('/grandma/mom/sally').then(function () {\n step(assert, 3, 'Application finished booting');\n\n assert.equal(_this23.$('#app').text(), 'GRANDMA MOM ERROR: did it broke?', 'the more specifically named mome error substate was entered over the other error route');\n\n assert.equal(_this23.currentPath, 'grandma.mom_error', 'Initial route fully loaded');\n });\n };\n\n _class2.prototype['@test Slow promises waterfall on startup'] = function testSlowPromisesWaterfallOnStartup(assert) {\n var _this24 = this;\n\n var grandmaDeferred = _runtime.RSVP.defer();\n var sallyDeferred = _runtime.RSVP.defer();\n\n this.addTemplate('loading', 'LOADING');\n this.addTemplate('mom', 'MOM {{outlet}}');\n this.addTemplate('mom.loading', 'MOMLOADING');\n this.addTemplate('mom.sally', 'SALLY');\n\n this.add('route:grandma', _routing.Route.extend({\n model: function () {\n step(assert, 1, 'GrandmaRoute#model');\n return grandmaDeferred.promise;\n }\n }));\n\n this.add('route:mom', _routing.Route.extend({\n model: function () {\n step(assert, 2, 'MomRoute#model');\n return {};\n }\n }));\n\n this.add('route:mom.sally', _routing.Route.extend({\n model: function () {\n step(assert, 3, 'SallyRoute#model');\n return sallyDeferred.promise;\n },\n setupController: function () {\n step(assert, 4, 'SallyRoute#setupController');\n }\n }));\n\n var promise = this.visit('/grandma/mom/sally').then(function () {\n text = _this24.$('#app').text();\n\n assert.equal(text, 'GRANDMA MOM SALLY', 'Sally template displayed');\n });\n var text = this.$('#app').text();\n\n assert.equal(text, 'LOADING', 'The loading template is nested in application template\\'s outlet');\n\n this.runTask(function () {\n return grandmaDeferred.resolve();\n });\n text = this.$('#app').text();\n\n assert.equal(text, 'GRANDMA MOM MOMLOADING', 'Mom\\'s child loading route is displayed due to sally\\'s slow promise');\n\n sallyDeferred.resolve();\n\n return promise;\n };\n\n _class2.prototype['@test Enter child loading state of pivot route'] = function testEnterChildLoadingStateOfPivotRoute(assert) {\n var _this25 = this;\n\n var deferred = _runtime.RSVP.defer();\n this.addTemplate('grandma.loading', 'GMONEYLOADING');\n\n this.add('route:mom.sally', _routing.Route.extend({\n setupController: function () {\n step(assert, 1, 'SallyRoute#setupController');\n }\n }));\n\n this.add('route:grandma.puppies', _routing.Route.extend({\n model: function () {\n return deferred.promise;\n }\n }));\n\n return this.visit('/grandma/mom/sally').then(function () {\n assert.equal(_this25.currentPath, 'grandma.mom.sally', 'Initial route fully loaded');\n\n var promise = _this25.visit('/grandma/puppies').then(function () {\n assert.equal(_this25.currentPath, 'grandma.puppies', 'Finished transition');\n });\n\n assert.equal(_this25.currentPath, 'grandma.loading', 'in pivot route\\'s child loading state');\n deferred.resolve();\n\n return promise;\n });\n };\n\n _class2.prototype['@test Error events that aren\\'t bubbled don\\'t throw application assertions'] = function (assert) {\n this.add('route:mom.sally', _routing.Route.extend({\n model: function () {\n step(assert, 1, 'MomSallyRoute#model');\n return _runtime.RSVP.reject({\n msg: 'did it broke?'\n });\n },\n\n actions: {\n error: function (err) {\n step(assert, 2, 'MomSallyRoute#actions.error');\n assert.equal(err.msg, 'did it broke?', 'it didn\\'t break');\n return false;\n }\n }\n }));\n\n return this.visit('/grandma/mom/sally');\n };\n\n _class2.prototype['@test Handled errors that bubble can be handled at a higher level'] = function testHandledErrorsThatBubbleCanBeHandledAtAHigherLevel(assert) {\n var handledError = void 0;\n\n this.add('route:mom', _routing.Route.extend({\n actions: {\n error: function (err) {\n step(assert, 3, 'MomRoute#actions.error');\n assert.equal(err, handledError, 'error handled and rebubbled is handleable at higher route');\n }\n }\n }));\n\n this.add('route:mom.sally', _routing.Route.extend({\n model: function () {\n step(assert, 1, 'MomSallyRoute#model');\n return _runtime.RSVP.reject({\n msg: 'did it broke?'\n });\n },\n\n actions: {\n error: function (err) {\n step(assert, 2, 'MomSallyRoute#actions.error');\n handledError = err;\n\n return true;\n }\n }\n }));\n\n return this.visit('/grandma/mom/sally');\n };\n\n _class2.prototype['@test Setting a query param during a slow transition should work'] = function testSettingAQueryParamDuringASlowTransitionShouldWork(assert) {\n var _this26 = this;\n\n var deferred = _runtime.RSVP.defer();\n this.addTemplate('memere.loading', 'MMONEYLOADING');\n\n this.add('route:grandma', _routing.Route.extend({\n beforeModel: function () {\n this.transitionTo('memere', 1);\n }\n }));\n\n this.add('route:memere', _routing.Route.extend({\n queryParams: {\n test: { defaultValue: 1 }\n }\n }));\n\n this.add('route:memere.index', _routing.Route.extend({\n model: function () {\n return deferred.promise;\n }\n }));\n\n var promise = this.visit('/grandma').then(function () {\n assert.equal(_this26.currentPath, 'memere.index', 'Transition should be complete');\n });\n var memereController = this.getController('memere');\n\n assert.equal(this.currentPath, 'memere.loading', 'Initial route should be loading');\n\n memereController.set('test', 3);\n\n assert.equal(this.currentPath, 'memere.loading', 'Initial route should still be loading');\n\n assert.equal(memereController.get('test'), 3, 'Controller query param value should have changed');\n deferred.resolve();\n\n return promise;\n };\n\n (0, _emberBabel.createClass)(_class2, [{\n key: 'currentPath',\n get: function () {\n return this.getController('application').get('currentPath');\n }\n }]);\n\n return _class2;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/routing/toplevel_dom_test', ['ember-babel', '@ember/-internals/environment', 'internal-test-helpers'], function (_emberBabel, _environment, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Top Level DOM Structure', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n\n _this._APPLICATION_TEMPLATE_WRAPPER = _environment.ENV._APPLICATION_TEMPLATE_WRAPPER;\n return _this;\n }\n\n _class.prototype.teardown = function teardown() {\n _ApplicationTestCase.prototype.teardown.call(this);\n _environment.ENV._APPLICATION_TEMPLATE_WRAPPER = this._APPLICATION_TEMPLATE_WRAPPER;\n };\n\n _class.prototype['@test topmost template with wrapper'] = function testTopmostTemplateWithWrapper() {\n var _this2 = this;\n\n _environment.ENV._APPLICATION_TEMPLATE_WRAPPER = true;\n\n this.addTemplate('application', 'hello world');\n\n return this.visit('/').then(function () {\n _this2.assertComponentElement(_this2.element, { content: 'hello world' });\n });\n };\n\n _class.prototype['@test topmost template without wrapper'] = function testTopmostTemplateWithoutWrapper() {\n var _this3 = this;\n\n _environment.ENV._APPLICATION_TEMPLATE_WRAPPER = false;\n\n this.addTemplate('application', 'hello world');\n\n return this.visit('/').then(function () {\n _this3.assertInnerHTML('hello world');\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/service_injection_test', ['ember-babel', '@ember/-internals/owner', '@ember/controller', '@ember/service', '@ember/-internals/runtime', 'internal-test-helpers', '@ember/-internals/metal'], function (_emberBabel, _owner, _controller, _service, _runtime, _internalTestHelpers, _metal) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Service Injection', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Service can be injected and is resolved'] = function testServiceCanBeInjectedAndIsResolved(assert) {\n var _this2 = this;\n\n this.add('controller:application', _controller.default.extend({\n myService: (0, _service.inject)('my-service')\n }));\n var MyService = _service.default.extend();\n this.add('service:my-service', MyService);\n this.addTemplate('application', '');\n\n this.visit('/').then(function () {\n var controller = _this2.applicationInstance.lookup('controller:application');\n assert.ok(controller.get('myService') instanceof MyService);\n });\n };\n\n _class.prototype['@test Service can be an object proxy and access owner in init GH#16484'] = function testServiceCanBeAnObjectProxyAndAccessOwnerInInitGH16484(assert) {\n var _this3 = this;\n\n var serviceOwner = void 0;\n\n this.add('controller:application', _controller.default.extend({\n myService: (0, _service.inject)('my-service')\n }));\n var MyService = _service.default.extend(_runtime._ProxyMixin, {\n init: function () {\n this._super.apply(this, arguments);\n\n serviceOwner = (0, _owner.getOwner)(this);\n }\n });\n this.add('service:my-service', MyService);\n this.addTemplate('application', '');\n\n this.visit('/').then(function (instance) {\n var controller = _this3.applicationInstance.lookup('controller:application');\n assert.ok(controller.get('myService') instanceof MyService);\n assert.equal(serviceOwner, instance, 'should be able to `getOwner` in init');\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Service Injection with ES5 Getters', function (_ApplicationTestCase2) {\n (0, _emberBabel.inherits)(_class2, _ApplicationTestCase2);\n\n function _class2() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase2.apply(this, arguments));\n }\n\n _class2.prototype['@test Service can be injected and is resolved without calling `get`'] = function testServiceCanBeInjectedAndIsResolvedWithoutCallingGet(assert) {\n var _this5 = this;\n\n this.add('controller:application', _controller.default.extend({\n myService: (0, _service.inject)('my-service')\n }));\n var MyService = _service.default.extend({\n name: (0, _metal.computed)(function () {\n return 'The service name';\n })\n });\n this.add('service:my-service', MyService);\n this.addTemplate('application', '');\n\n this.visit('/').then(function () {\n var controller = _this5.applicationInstance.lookup('controller:application');\n assert.ok(controller.myService instanceof MyService);\n assert.equal(controller.myService.name, 'The service name', 'service property accessible');\n });\n };\n\n return _class2;\n }(_internalTestHelpers.ApplicationTestCase));\n\n if (false /* EMBER_MODULE_UNIFICATION */) {\n (0, _internalTestHelpers.moduleFor)('Service Injection (MU)', function (_ApplicationTestCase3) {\n (0, _emberBabel.inherits)(_class3, _ApplicationTestCase3);\n\n function _class3() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase3.apply(this, arguments));\n }\n\n _class3.prototype['@test Service can be injected with source and is resolved'] = function testServiceCanBeInjectedWithSourceAndIsResolved(assert) {\n var _this7 = this;\n\n var source = 'controller:src/ui/routes/application/controller';\n this.add('controller:application', _controller.default.extend({\n myService: (0, _service.inject)('my-service', { source: source })\n }));\n var MyService = _service.default.extend();\n this.add({\n specifier: 'service:my-service',\n source: source\n }, MyService);\n\n return this.visit('/').then(function () {\n var controller = _this7.applicationInstance.lookup('controller:application');\n\n assert.ok(controller.get('myService') instanceof MyService);\n });\n };\n\n _class3.prototype['@test Services can be injected with same name, different source, and resolve different instances'] = function testServicesCanBeInjectedWithSameNameDifferentSourceAndResolveDifferentInstances(assert) {\n var _this8 = this;\n\n // This test implies that there is a file src/ui/routes/route-a/-services/my-service\n var routeASource = 'controller:src/ui/routes/route-a/controller';\n // This test implies that there is a file src/ui/routes/route-b/-services/my-service\n var routeBSource = 'controller:src/ui/routes/route-b/controller';\n\n this.add('controller:route-a', _controller.default.extend({\n myService: (0, _service.inject)('my-service', { source: routeASource })\n }));\n\n this.add('controller:route-b', _controller.default.extend({\n myService: (0, _service.inject)('my-service', { source: routeBSource })\n }));\n\n var LocalLookupService = _service.default.extend();\n this.add({\n specifier: 'service:my-service',\n source: routeASource\n }, LocalLookupService);\n\n var MyService = _service.default.extend();\n this.add({\n specifier: 'service:my-service',\n source: routeBSource\n }, MyService);\n\n return this.visit('/').then(function () {\n var controllerA = _this8.applicationInstance.lookup('controller:route-a');\n var serviceFromControllerA = controllerA.get('myService');\n assert.ok(serviceFromControllerA instanceof LocalLookupService, 'local lookup service is returned');\n\n var controllerB = _this8.applicationInstance.lookup('controller:route-b');\n var serviceFromControllerB = controllerB.get('myService');\n assert.ok(serviceFromControllerB instanceof MyService, 'global service is returned');\n\n assert.notStrictEqual(serviceFromControllerA, serviceFromControllerB);\n });\n };\n\n _class3.prototype['@test Services can be injected with same name, different source, but same resolution result, and share an instance'] = function testServicesCanBeInjectedWithSameNameDifferentSourceButSameResolutionResultAndShareAnInstance(assert) {\n var _this9 = this;\n\n var routeASource = 'controller:src/ui/routes/route-a/controller';\n var routeBSource = 'controller:src/ui/routes/route-b/controller';\n\n this.add('controller:route-a', _controller.default.extend({\n myService: (0, _service.inject)('my-service', { source: routeASource })\n }));\n\n this.add('controller:route-b', _controller.default.extend({\n myService: (0, _service.inject)('my-service', { source: routeBSource })\n }));\n\n var MyService = _service.default.extend();\n this.add({\n specifier: 'service:my-service'\n }, MyService);\n\n return this.visit('/').then(function () {\n var controllerA = _this9.applicationInstance.lookup('controller:route-a');\n var serviceFromControllerA = controllerA.get('myService');\n assert.ok(serviceFromControllerA instanceof MyService);\n\n var controllerB = _this9.applicationInstance.lookup('controller:route-b');\n assert.strictEqual(serviceFromControllerA, controllerB.get('myService'));\n });\n };\n\n /*\n * This test demonstrates a failure in the caching system of ember's\n * container around singletons and and local lookup. The local lookup\n * is cached and the global injection is then looked up incorrectly.\n *\n * The paractical rules of Ember's module unification config are such\n * that services cannot be locally looked up, thus this case is really\n * just a demonstration of what could go wrong if we permit arbitrary\n * configuration (such as a singleton type that has local lookup).\n */\n\n _class3.prototype['@test Services can be injected with same name, one with source one without, and share an instance'] = function testServicesCanBeInjectedWithSameNameOneWithSourceOneWithoutAndShareAnInstance(assert) {\n var _this10 = this;\n\n var routeASource = 'controller:src/ui/routes/route-a/controller';\n this.add('controller:route-a', _controller.default.extend({\n myService: (0, _service.inject)('my-service', { source: routeASource })\n }));\n\n this.add('controller:route-b', _controller.default.extend({\n myService: (0, _service.inject)('my-service')\n }));\n\n var MyService = _service.default.extend();\n this.add({\n specifier: 'service:my-service'\n }, MyService);\n\n return this.visit('/').then(function () {\n var controllerA = _this10.applicationInstance.lookup('controller:route-a');\n var serviceFromControllerA = controllerA.get('myService');\n assert.ok(serviceFromControllerA instanceof MyService, 'global service is returned');\n\n var controllerB = _this10.applicationInstance.lookup('controller:route-b');\n var serviceFromControllerB = controllerB.get('myService');\n assert.ok(serviceFromControllerB instanceof MyService, 'global service is returned');\n\n assert.strictEqual(serviceFromControllerA, serviceFromControllerB);\n });\n };\n\n _class3.prototype['@test Service with namespace can be injected and is resolved'] = function testServiceWithNamespaceCanBeInjectedAndIsResolved(assert) {\n var _this11 = this;\n\n this.add('controller:application', _controller.default.extend({\n myService: (0, _service.inject)('my-namespace::my-service')\n }));\n var MyService = _service.default.extend();\n this.add({\n specifier: 'service:my-service',\n namespace: 'my-namespace'\n }, MyService);\n\n this.visit('/').then(function () {\n var controller = _this11.applicationInstance.lookup('controller:application');\n assert.ok(controller.get('myService') instanceof MyService);\n });\n };\n\n return _class3;\n }(_internalTestHelpers.ApplicationTestCase));\n }\n});","enifed('ember/tests/view_instrumentation_test', ['ember-babel', '@ember/instrumentation', 'internal-test-helpers'], function (_emberBabel, _instrumentation, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('View Instrumentation', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.call(this));\n\n _this.addTemplate('application', '{{outlet}}');\n _this.addTemplate('index', '

Index

');\n _this.addTemplate('posts', '

Posts

');\n\n _this.router.map(function () {\n this.route('posts');\n });\n return _this;\n }\n\n _class.prototype.teardown = function teardown() {\n (0, _instrumentation.reset)();\n _ApplicationTestCase.prototype.teardown.call(this);\n };\n\n _class.prototype['@test Nodes without view instances are instrumented'] = function testNodesWithoutViewInstancesAreInstrumented(assert) {\n var _this2 = this;\n\n var called = false;\n\n (0, _instrumentation.subscribe)('render', {\n before: function () {\n called = true;\n },\n after: function () {}\n });\n\n return this.visit('/').then(function () {\n assert.equal(_this2.textValue(), 'Index', 'It rendered the correct template');\n\n assert.ok(called, 'Instrumentation called on first render');\n called = false;\n\n return _this2.visit('/posts');\n }).then(function () {\n assert.equal(_this2.textValue(), 'Posts', 'It rendered the correct template');\n assert.ok(called, 'Instrumentation called on transition to non-view backed route');\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('internal-test-helpers/index', ['exports', 'internal-test-helpers/lib/factory', 'internal-test-helpers/lib/build-owner', 'internal-test-helpers/lib/confirm-export', 'internal-test-helpers/lib/equal-inner-html', 'internal-test-helpers/lib/equal-tokens', 'internal-test-helpers/lib/module-for', 'internal-test-helpers/lib/strip', 'internal-test-helpers/lib/apply-mixins', 'internal-test-helpers/lib/get-text-of', 'internal-test-helpers/lib/matchers', 'internal-test-helpers/lib/run', 'internal-test-helpers/lib/test-cases/abstract', 'internal-test-helpers/lib/test-cases/abstract-application', 'internal-test-helpers/lib/test-cases/application', 'internal-test-helpers/lib/test-cases/query-param', 'internal-test-helpers/lib/test-cases/abstract-rendering', 'internal-test-helpers/lib/test-cases/rendering', 'internal-test-helpers/lib/test-cases/router', 'internal-test-helpers/lib/test-cases/autoboot-application', 'internal-test-helpers/lib/test-cases/default-resolver-application', 'internal-test-helpers/lib/test-resolver', 'internal-test-helpers/lib/browser-detect', 'internal-test-helpers/lib/registry-check'], function (exports, _factory, _buildOwner, _confirmExport, _equalInnerHtml, _equalTokens, _moduleFor, _strip, _applyMixins, _getTextOf, _matchers, _run, _abstract, _abstractApplication, _application, _queryParam, _abstractRendering, _rendering, _router, _autobootApplication, _defaultResolverApplication, _testResolver, _browserDetect, _registryCheck) {\n 'use strict';\n\n Object.defineProperty(exports, 'factory', {\n enumerable: true,\n get: function () {\n return _factory.default;\n }\n });\n Object.defineProperty(exports, 'buildOwner', {\n enumerable: true,\n get: function () {\n return _buildOwner.default;\n }\n });\n Object.defineProperty(exports, 'confirmExport', {\n enumerable: true,\n get: function () {\n return _confirmExport.default;\n }\n });\n Object.defineProperty(exports, 'equalInnerHTML', {\n enumerable: true,\n get: function () {\n return _equalInnerHtml.default;\n }\n });\n Object.defineProperty(exports, 'equalTokens', {\n enumerable: true,\n get: function () {\n return _equalTokens.default;\n }\n });\n Object.defineProperty(exports, 'moduleFor', {\n enumerable: true,\n get: function () {\n return _moduleFor.default;\n }\n });\n Object.defineProperty(exports, 'strip', {\n enumerable: true,\n get: function () {\n return _strip.default;\n }\n });\n Object.defineProperty(exports, 'applyMixins', {\n enumerable: true,\n get: function () {\n return _applyMixins.default;\n }\n });\n Object.defineProperty(exports, 'getTextOf', {\n enumerable: true,\n get: function () {\n return _getTextOf.default;\n }\n });\n Object.defineProperty(exports, 'equalsElement', {\n enumerable: true,\n get: function () {\n return _matchers.equalsElement;\n }\n });\n Object.defineProperty(exports, 'classes', {\n enumerable: true,\n get: function () {\n return _matchers.classes;\n }\n });\n Object.defineProperty(exports, 'styles', {\n enumerable: true,\n get: function () {\n return _matchers.styles;\n }\n });\n Object.defineProperty(exports, 'regex', {\n enumerable: true,\n get: function () {\n return _matchers.regex;\n }\n });\n Object.defineProperty(exports, 'runAppend', {\n enumerable: true,\n get: function () {\n return _run.runAppend;\n }\n });\n Object.defineProperty(exports, 'runDestroy', {\n enumerable: true,\n get: function () {\n return _run.runDestroy;\n }\n });\n Object.defineProperty(exports, 'AbstractTestCase', {\n enumerable: true,\n get: function () {\n return _abstract.default;\n }\n });\n Object.defineProperty(exports, 'AbstractApplicationTestCase', {\n enumerable: true,\n get: function () {\n return _abstractApplication.default;\n }\n });\n Object.defineProperty(exports, 'ApplicationTestCase', {\n enumerable: true,\n get: function () {\n return _application.default;\n }\n });\n Object.defineProperty(exports, 'QueryParamTestCase', {\n enumerable: true,\n get: function () {\n return _queryParam.default;\n }\n });\n Object.defineProperty(exports, 'AbstractRenderingTestCase', {\n enumerable: true,\n get: function () {\n return _abstractRendering.default;\n }\n });\n Object.defineProperty(exports, 'RenderingTestCase', {\n enumerable: true,\n get: function () {\n return _rendering.default;\n }\n });\n Object.defineProperty(exports, 'RouterTestCase', {\n enumerable: true,\n get: function () {\n return _router.default;\n }\n });\n Object.defineProperty(exports, 'AutobootApplicationTestCase', {\n enumerable: true,\n get: function () {\n return _autobootApplication.default;\n }\n });\n Object.defineProperty(exports, 'DefaultResolverApplicationTestCase', {\n enumerable: true,\n get: function () {\n return _defaultResolverApplication.default;\n }\n });\n Object.defineProperty(exports, 'TestResolver', {\n enumerable: true,\n get: function () {\n return _testResolver.default;\n }\n });\n Object.defineProperty(exports, 'ModuleBasedTestResolver', {\n enumerable: true,\n get: function () {\n return _testResolver.ModuleBasedResolver;\n }\n });\n Object.defineProperty(exports, 'isIE11', {\n enumerable: true,\n get: function () {\n return _browserDetect.isIE11;\n }\n });\n Object.defineProperty(exports, 'isEdge', {\n enumerable: true,\n get: function () {\n return _browserDetect.isEdge;\n }\n });\n Object.defineProperty(exports, 'verifyInjection', {\n enumerable: true,\n get: function () {\n return _registryCheck.verifyInjection;\n }\n });\n Object.defineProperty(exports, 'verifyRegistration', {\n enumerable: true,\n get: function () {\n return _registryCheck.verifyRegistration;\n }\n });\n});","enifed('internal-test-helpers/lib/apply-mixins', ['exports', '@ember/polyfills', 'internal-test-helpers/lib/get-all-property-names'], function (exports, _polyfills, _getAllPropertyNames) {\n 'use strict';\n\n exports.default = applyMixins;\n\n\n function isGenerator(mixin) {\n return Array.isArray(mixin.cases) && typeof mixin.generate === 'function';\n }\n\n function applyMixins(TestClass) {\n for (var _len = arguments.length, mixins = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n mixins[_key - 1] = arguments[_key];\n }\n\n mixins.forEach(function (mixinOrGenerator) {\n var mixin = void 0;\n\n if (isGenerator(mixinOrGenerator)) {\n var generator = mixinOrGenerator;\n mixin = {};\n\n generator.cases.forEach(function (value, idx) {\n (0, _polyfills.assign)(mixin, generator.generate(value, idx));\n });\n\n (0, _polyfills.assign)(TestClass.prototype, mixin);\n } else if (typeof mixinOrGenerator === 'function') {\n var properties = (0, _getAllPropertyNames.default)(mixinOrGenerator);\n mixin = new mixinOrGenerator();\n\n properties.forEach(function (name) {\n TestClass.prototype[name] = function () {\n return mixin[name].apply(mixin, arguments);\n };\n });\n } else {\n mixin = mixinOrGenerator;\n (0, _polyfills.assign)(TestClass.prototype, mixin);\n }\n });\n\n return TestClass;\n }\n});","enifed('internal-test-helpers/lib/browser-detect', ['exports'], function (exports) {\n 'use strict';\n\n // `window.ActiveXObject` is \"falsey\" in IE11 (but not `undefined` or `false`)\n // `\"ActiveXObject\" in window` returns `true` in all IE versions\n // only IE11 will pass _both_ of these conditions\n var isIE11 = exports.isIE11 = !window.ActiveXObject && 'ActiveXObject' in window;\n var isEdge = exports.isEdge = /Edge/.test(navigator.userAgent);\n});","enifed('internal-test-helpers/lib/build-owner', ['exports', '@ember/-internals/container', '@ember/-internals/routing', '@ember/application/instance', '@ember/application', '@ember/-internals/runtime'], function (exports, _container, _routing, _instance, _application, _runtime) {\n 'use strict';\n\n exports.default = buildOwner;\n\n\n var ResolverWrapper = function () {\n function ResolverWrapper(resolver) {\n\n this.resolver = resolver;\n }\n\n ResolverWrapper.prototype.create = function create() {\n return this.resolver;\n };\n\n return ResolverWrapper;\n }();\n\n function buildOwner() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var ownerOptions = options.ownerOptions || {};\n var resolver = options.resolver;\n var bootOptions = options.bootOptions || {};\n\n var Owner = _runtime.Object.extend(_runtime.RegistryProxyMixin, _runtime.ContainerProxyMixin);\n\n var namespace = _runtime.Object.create({\n Resolver: new ResolverWrapper(resolver)\n });\n\n var fallbackRegistry = _application.default.buildRegistry(namespace);\n fallbackRegistry.register('router:main', _routing.Router);\n\n var registry = new _container.Registry({\n fallback: fallbackRegistry\n });\n\n _instance.default.setupRegistry(registry, bootOptions);\n\n var owner = Owner.create({\n __registry__: registry,\n __container__: null\n }, ownerOptions);\n\n var container = registry.container({ owner: owner });\n owner.__container__ = container;\n\n return owner;\n }\n});","enifed('internal-test-helpers/lib/confirm-export', ['exports', 'require'], function (exports, _require2) {\n 'use strict';\n\n exports.default = confirmExport;\n\n\n function getDescriptor(obj, path) {\n var parts = path.split('.');\n var value = obj;\n for (var i = 0; i < parts.length - 1; i++) {\n var part = parts[i];\n value = value[part];\n if (!value) {\n return undefined;\n }\n }\n var last = parts[parts.length - 1];\n return Object.getOwnPropertyDescriptor(value, last);\n }\n\n function confirmExport(Ember, assert, path, moduleId, exportName) {\n try {\n var desc = getDescriptor(Ember, path);\n assert.ok(desc, 'the ' + path + ' property exists on the Ember global');\n\n if (typeof exportName === 'string') {\n var mod = (0, _require2.default)(moduleId);\n assert.equal(desc.value, mod[exportName], 'Ember.' + path + ' is exported correctly');\n assert.notEqual(mod[exportName], undefined, 'Ember.' + path + ' is not `undefined`');\n } else if ('value' in desc) {\n assert.equal(desc.value, exportName.value, 'Ember.' + path + ' is exported correctly');\n } else {\n var _mod = (0, _require2.default)(moduleId);\n assert.equal(desc.get, _mod[exportName.get], 'Ember.' + path + ' getter is exported correctly');\n assert.notEqual(desc.get, undefined, 'Ember.' + path + ' getter is not undefined');\n\n if (exportName.set) {\n assert.equal(desc.set, _mod[exportName.set], 'Ember.' + path + ' setter is exported correctly');\n assert.notEqual(desc.set, undefined, 'Ember.' + path + ' setter is not undefined');\n }\n }\n } catch (error) {\n assert.pushResult({\n result: false,\n message: 'An error occured while testing ' + path + ' is exported from ' + moduleId + '.',\n source: error\n });\n }\n }\n});","enifed('internal-test-helpers/lib/ember-dev/assertion', ['exports', 'internal-test-helpers/lib/ember-dev/utils'], function (exports, _utils) {\n 'use strict';\n\n var BREAK = {};\n /*\n This assertion class is used to test assertions made using Ember.assert.\n It injects two helpers onto `window`:\n \n - expectAssertion(func: Function, [expectedMessage: String | RegExp])\n \n This function calls `func` and asserts that `Ember.assert` is invoked during\n the execution. Moreover, it takes a String or a RegExp as a second optional\n argument that can be used to test if a specific assertion message was\n generated.\n \n - ignoreAssertion(func: Function)\n \n This function calls `func` and disables `Ember.assert` during the execution.\n In particular, this prevents `Ember.assert` from throw errors that would\n disrupt the control flow.\n */\n\n var AssertionAssert = function () {\n function AssertionAssert(env) {\n\n this.env = env;\n }\n\n AssertionAssert.prototype.reset = function reset() {};\n\n AssertionAssert.prototype.assert = function assert() {};\n\n AssertionAssert.prototype.inject = function inject() {\n var _this = this;\n\n var expectAssertion = function (func, expectedMessage) {\n var assert = QUnit.config.current.assert;\n\n if (_this.env.runningProdBuild) {\n assert.ok(true, 'Assertions disabled in production builds.');\n return;\n }\n var sawCall = false;\n var actualMessage = undefined;\n // The try-catch statement is used to \"exit\" `func` as soon as\n // the first useful assertion has been produced.\n try {\n (0, _utils.callWithStub)(_this.env, 'assert', func, function (message, test) {\n sawCall = true;\n if ((0, _utils.checkTest)(test)) {\n return;\n }\n actualMessage = message;\n throw BREAK;\n });\n } catch (e) {\n if (e !== BREAK) {\n throw e;\n }\n }\n check(assert, sawCall, actualMessage, expectedMessage);\n };\n var ignoreAssertion = function (func) {\n (0, _utils.callWithStub)(_this.env, 'assert', func);\n };\n window.expectAssertion = expectAssertion;\n window.ignoreAssertion = ignoreAssertion;\n };\n\n AssertionAssert.prototype.restore = function restore() {\n window.expectAssertion = null;\n window.ignoreAssertion = null;\n };\n\n return AssertionAssert;\n }();\n\n exports.default = AssertionAssert;\n\n\n function check(assert, sawCall, actualMessage, expectedMessage) {\n // Run assertions in an order that is useful when debugging a test failure.\n if (!sawCall) {\n assert.ok(false, 'Expected Ember.assert to be called (Not called with any value).');\n } else if (!actualMessage) {\n assert.ok(false, 'Expected a failing Ember.assert (Ember.assert called, but without a failing test).');\n } else {\n if (expectedMessage) {\n if (expectedMessage instanceof RegExp) {\n assert.ok(expectedMessage.test(actualMessage), 'Expected failing Ember.assert: \\'' + expectedMessage + '\\', but got \\'' + actualMessage + '\\'.');\n } else {\n assert.equal(actualMessage, expectedMessage, 'Expected failing Ember.assert: \\'' + expectedMessage + '\\', but got \\'' + actualMessage + '\\'.');\n }\n } else {\n // Positive assertion that assert was called\n assert.ok(true, 'Expected a failing Ember.assert.');\n }\n }\n }\n});","enifed('internal-test-helpers/lib/ember-dev/containers', ['exports', '@ember/-internals/container'], function (exports, _container) {\n 'use strict';\n\n function ContainersAssert(env) {\n this.env = env;\n }\n\n var containerLeakTracking = _container.Container._leakTracking;\n\n ContainersAssert.prototype = {\n reset: function () {},\n inject: function () {},\n assert: function () {\n if (containerLeakTracking === undefined) return;\n var _QUnit = QUnit,\n config = _QUnit.config;\n var _config$current = config.current,\n testName = _config$current.testName,\n testId = _config$current.testId,\n moduleName = _config$current.module.name,\n originalFinish = _config$current.finish;\n\n config.current.finish = function () {\n originalFinish.call(this);\n originalFinish = undefined;\n config.queue.unshift(function () {\n if (containerLeakTracking.hasContainers()) {\n containerLeakTracking.reset();\n // eslint-disable-next-line no-console\n console.assert(false, 'Leaked container after test ' + moduleName + ': ' + testName + ' testId=' + testId);\n }\n });\n };\n },\n restore: function () {}\n };\n\n exports.default = ContainersAssert;\n});","enifed('internal-test-helpers/lib/ember-dev/debug', ['exports', 'internal-test-helpers/lib/ember-dev/method-call-tracker'], function (exports, _methodCallTracker) {\n 'use strict';\n\n var DebugAssert = function () {\n function DebugAssert(methodName, env) {\n\n this.methodName = methodName;\n this.env = env;\n this.tracker = null;\n }\n\n DebugAssert.prototype.inject = function inject() {};\n\n DebugAssert.prototype.restore = function restore() {\n this.reset();\n };\n\n DebugAssert.prototype.reset = function reset() {\n if (this.tracker) {\n this.tracker.restoreMethod();\n }\n this.tracker = null;\n };\n\n DebugAssert.prototype.assert = function assert() {\n if (this.tracker) {\n this.tracker.assert();\n }\n };\n // Run an expectation callback within the context of a new tracker, optionally\n // accepting a function to run, which asserts immediately\n\n\n DebugAssert.prototype.runExpectation = function runExpectation(func, callback) {\n var originalTracker = null;\n // When helpers are passed a callback, they get a new tracker context\n if (func) {\n originalTracker = this.tracker;\n this.tracker = null;\n }\n if (!this.tracker) {\n this.tracker = new _methodCallTracker.default(this.env, this.methodName);\n }\n // Yield to caller with tracker instance\n callback(this.tracker);\n // Once the given callback is invoked, the pending assertions should be\n // flushed immediately\n if (func) {\n func();\n this.assert();\n this.reset();\n this.tracker = originalTracker;\n }\n };\n\n return DebugAssert;\n }();\n\n exports.default = DebugAssert;\n});","enifed('internal-test-helpers/lib/ember-dev/deprecation', ['exports', 'ember-babel', 'internal-test-helpers/lib/ember-dev/debug', 'internal-test-helpers/lib/ember-dev/utils'], function (exports, _emberBabel, _debug, _utils) {\n 'use strict';\n\n var DeprecationAssert = function (_DebugAssert) {\n (0, _emberBabel.inherits)(DeprecationAssert, _DebugAssert);\n\n function DeprecationAssert(env) {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _DebugAssert.call(this, 'deprecate', env));\n }\n\n DeprecationAssert.prototype.inject = function inject() {\n var _this2 = this;\n\n // Expects no deprecation to happen within a function, or if no function is\n // passed, from the time of calling until the end of the test.\n //\n // expectNoDeprecation(function() {\n // fancyNewThing();\n // });\n //\n // expectNoDeprecation();\n // Ember.deprecate(\"Old And Busted\");\n //\n var expectNoDeprecation = function (func) {\n if (typeof func !== 'function') {\n func = undefined;\n }\n _this2.runExpectation(func, function (tracker) {\n if (tracker.isExpectingCalls()) {\n throw new Error('expectNoDeprecation was called after expectDeprecation was called!');\n }\n tracker.expectNoCalls();\n });\n };\n // Expect a deprecation to happen within a function, or if no function\n // is pass, from the time of calling until the end of the test. Can be called\n // multiple times to assert deprecations with different specific messages\n // were fired.\n //\n // expectDeprecation(function() {\n // Ember.deprecate(\"Old And Busted\");\n // }, /* optionalStringOrRegex */);\n //\n // expectDeprecation(/* optionalStringOrRegex */);\n // Ember.deprecate(\"Old And Busted\");\n //\n var expectDeprecation = function (func, message) {\n var actualFunc = void 0;\n if (typeof func !== 'function') {\n message = func;\n actualFunc = undefined;\n } else {\n actualFunc = func;\n }\n _this2.runExpectation(actualFunc, function (tracker) {\n if (tracker.isExpectingNoCalls()) {\n throw new Error('expectDeprecation was called after expectNoDeprecation was called!');\n }\n tracker.expectCall(message, ['id', 'until']);\n });\n };\n var ignoreDeprecation = function (func) {\n (0, _utils.callWithStub)(_this2.env, 'deprecate', func);\n };\n window.expectNoDeprecation = expectNoDeprecation;\n window.expectDeprecation = expectDeprecation;\n window.ignoreDeprecation = ignoreDeprecation;\n };\n\n DeprecationAssert.prototype.restore = function restore() {\n _DebugAssert.prototype.restore.call(this);\n window.expectDeprecation = null;\n window.expectNoDeprecation = null;\n window.ignoreDeprecation = null;\n };\n\n return DeprecationAssert;\n }(_debug.default);\n\n exports.default = DeprecationAssert;\n});","enifed('internal-test-helpers/lib/ember-dev/index', ['exports', 'internal-test-helpers/lib/ember-dev/deprecation', 'internal-test-helpers/lib/ember-dev/warning', 'internal-test-helpers/lib/ember-dev/assertion', 'internal-test-helpers/lib/ember-dev/run-loop', 'internal-test-helpers/lib/ember-dev/namespaces', 'internal-test-helpers/lib/ember-dev/containers', 'internal-test-helpers/lib/ember-dev/utils'], function (exports, _deprecation, _warning, _assertion, _runLoop, _namespaces, _containers, _utils) {\n 'use strict';\n\n var EmberDevTestHelperAssert = (0, _utils.buildCompositeAssert)([_deprecation.default, _warning.default, _assertion.default, _runLoop.default, _namespaces.default, _containers.default]);\n\n exports.default = EmberDevTestHelperAssert;\n});","enifed('internal-test-helpers/lib/ember-dev/method-call-tracker', ['exports', 'internal-test-helpers/lib/ember-dev/utils'], function (exports, _utils) {\n 'use strict';\n\n var MethodCallTracker = function () {\n function MethodCallTracker(env, methodName) {\n\n this._env = env;\n this._methodName = methodName;\n this._isExpectingNoCalls = false;\n this._expectedMessages = [];\n this._expectedOptionLists = [];\n this._actuals = [];\n this._originalMethod = undefined;\n }\n\n MethodCallTracker.prototype.stubMethod = function stubMethod() {\n var _this = this;\n\n if (this._originalMethod) {\n // Method is already stubbed\n return;\n }\n var env = this._env;\n var methodName = this._methodName;\n this._originalMethod = env.getDebugFunction(methodName);\n env.setDebugFunction(methodName, function (message, test, options) {\n var resultOfTest = (0, _utils.checkTest)(test);\n _this._actuals.push([message, resultOfTest, options]);\n });\n };\n\n MethodCallTracker.prototype.restoreMethod = function restoreMethod() {\n if (this._originalMethod) {\n this._env.setDebugFunction(this._methodName, this._originalMethod);\n }\n };\n\n MethodCallTracker.prototype.expectCall = function expectCall(message, options) {\n this.stubMethod();\n this._expectedMessages.push(message || /.*/);\n this._expectedOptionLists.push(options);\n };\n\n MethodCallTracker.prototype.expectNoCalls = function expectNoCalls() {\n this.stubMethod();\n this._isExpectingNoCalls = true;\n };\n\n MethodCallTracker.prototype.isExpectingNoCalls = function isExpectingNoCalls() {\n return this._isExpectingNoCalls;\n };\n\n MethodCallTracker.prototype.isExpectingCalls = function isExpectingCalls() {\n return !this._isExpectingNoCalls && this._expectedMessages.length;\n };\n\n MethodCallTracker.prototype.assert = function assert() {\n var assert = QUnit.config.current.assert;\n\n var env = this._env;\n var methodName = this._methodName;\n var isExpectingNoCalls = this._isExpectingNoCalls;\n var expectedMessages = this._expectedMessages;\n var expectedOptionLists = this._expectedOptionLists;\n var actuals = this._actuals;\n var o = void 0,\n i = void 0,\n j = void 0;\n if (!isExpectingNoCalls && expectedMessages.length === 0 && actuals.length === 0) {\n return;\n }\n if (env.runningProdBuild) {\n assert.ok(true, 'calls to Ember.' + methodName + ' disabled in production builds.');\n return;\n }\n if (isExpectingNoCalls) {\n var actualMessages = [];\n for (i = 0; i < actuals.length; i++) {\n if (!actuals[i][1]) {\n actualMessages.push(actuals[i][0]);\n }\n }\n assert.ok(actualMessages.length === 0, 'Expected no Ember.' + methodName + ' calls, got ' + actuals.length + ': ' + actualMessages.join(', '));\n return;\n }\n var actual = void 0;\n var match = undefined;\n for (o = 0; o < expectedMessages.length; o++) {\n var expectedMessage = expectedMessages[o];\n var expectedOptionList = expectedOptionLists[o];\n for (i = 0; i < actuals.length; i++) {\n var matchesMessage = false;\n var matchesOptionList = false;\n actual = actuals[i];\n if (actual[1] === true) {\n continue;\n }\n if (expectedMessage instanceof RegExp && expectedMessage.test(actual[0])) {\n matchesMessage = true;\n } else if (expectedMessage === actual[0]) {\n matchesMessage = true;\n }\n if (expectedOptionList === undefined) {\n matchesOptionList = true;\n } else if (actual[2]) {\n matchesOptionList = true;\n for (j = 0; j < expectedOptionList.length; j++) {\n matchesOptionList = matchesOptionList && actual[2].hasOwnProperty(expectedOptionList[j]);\n }\n }\n if (matchesMessage && matchesOptionList) {\n match = actual;\n break;\n }\n }\n var expectedOptionsMessage = expectedOptionList ? 'and options: { ' + expectedOptionList.join(', ') + ' }' : 'and no options';\n var actualOptionsMessage = actual && actual[2] ? 'and options: { ' + Object.keys(actual[2]).join(', ') + ' }' : 'and no options';\n if (!actual) {\n assert.ok(false, 'Received no Ember.' + methodName + ' calls at all, expecting: ' + expectedMessage);\n } else if (match && !match[1]) {\n assert.ok(true, 'Received failing Ember.' + methodName + ' call with message: ' + match[0]);\n } else if (match && match[1]) {\n assert.ok(false, 'Expected failing Ember.' + methodName + ' call, got succeeding with message: ' + match[0]);\n } else if (actual[1]) {\n assert.ok(false, 'Did not receive failing Ember.' + methodName + ' call matching \\'' + expectedMessage + '\\' ' + expectedOptionsMessage + ', last was success with \\'' + actual[0] + '\\' ' + actualOptionsMessage);\n } else if (!actual[1]) {\n assert.ok(false, 'Did not receive failing Ember.' + methodName + ' call matching \\'' + expectedMessage + '\\' ' + expectedOptionsMessage + ', last was failure with \\'' + actual[0] + '\\' ' + actualOptionsMessage);\n }\n }\n };\n\n return MethodCallTracker;\n }();\n\n exports.default = MethodCallTracker;\n});","enifed('internal-test-helpers/lib/ember-dev/namespaces', ['exports', '@ember/runloop', '@ember/-internals/metal'], function (exports, _runloop, _metal) {\n 'use strict';\n\n function NamespacesAssert(env) {\n this.env = env;\n }\n\n NamespacesAssert.prototype = {\n reset: function () {},\n inject: function () {},\n assert: function () {\n var assert = QUnit.config.current.assert;\n\n if (_metal.NAMESPACES.length > 0) {\n assert.ok(false, 'Should not have any NAMESPACES after tests');\n (0, _runloop.run)(function () {\n var namespaces = _metal.NAMESPACES.slice();\n for (var i = 0; i < namespaces.length; i++) {\n namespaces[i].destroy();\n }\n });\n }\n var keys = Object.keys(_metal.NAMESPACES_BY_ID);\n if (keys.length > 0) {\n assert.ok(false, 'Should not have any NAMESPACES_BY_ID after tests');\n for (var i = 0; i < keys.length; i++) {\n delete _metal.NAMESPACES_BY_ID[keys[i]];\n }\n }\n },\n restore: function () {}\n };\n\n exports.default = NamespacesAssert;\n});","enifed('internal-test-helpers/lib/ember-dev/run-loop', ['exports', '@ember/runloop'], function (exports, _runloop) {\n 'use strict';\n\n function RunLoopAssertion(env) {\n this.env = env;\n }\n\n RunLoopAssertion.prototype = {\n reset: function () {},\n inject: function () {},\n assert: function () {\n var assert = QUnit.config.current.assert;\n\n if ((0, _runloop.getCurrentRunLoop)()) {\n assert.ok(false, 'Should not be in a run loop at end of test');\n while ((0, _runloop.getCurrentRunLoop)()) {\n (0, _runloop.end)();\n }\n }\n\n if ((0, _runloop.hasScheduledTimers)()) {\n assert.ok(false, 'Ember run should not have scheduled timers at end of test');\n (0, _runloop.cancelTimers)();\n }\n },\n restore: function () {}\n };\n\n exports.default = RunLoopAssertion;\n});","enifed(\"internal-test-helpers/lib/ember-dev/setup-qunit\", [\"exports\"], function (exports) {\n \"use strict\";\n\n exports.default = setupQUnit;\n function setupQUnit(assertion, _qunitGlobal) {\n var qunitGlobal = QUnit;\n if (_qunitGlobal) {\n qunitGlobal = _qunitGlobal;\n }\n var originalModule = qunitGlobal.module;\n qunitGlobal.module = function (name, _options) {\n var options = _options || {};\n var originalSetup = options.setup || options.beforeEach || function () {};\n var originalTeardown = options.teardown || options.afterEach || function () {};\n delete options.setup;\n delete options.teardown;\n options.beforeEach = function () {\n assertion.reset();\n assertion.inject();\n return originalSetup.apply(this, arguments);\n };\n options.afterEach = function () {\n var result = originalTeardown.apply(this, arguments);\n assertion.assert();\n assertion.restore();\n return result;\n };\n return originalModule(name, options);\n };\n }\n});","enifed('internal-test-helpers/lib/ember-dev/utils', ['exports'], function (exports) {\n 'use strict';\n\n exports.buildCompositeAssert = buildCompositeAssert;\n exports.callWithStub = callWithStub;\n exports.checkTest = checkTest;\n function callForEach(prop, func) {\n return function () {\n for (var i = 0, l = this[prop].length; i < l; i++) {\n this[prop][i][func]();\n }\n };\n }\n function buildCompositeAssert(assertClasses) {\n function Composite(env) {\n this.asserts = assertClasses.map(function (Assert) {\n return new Assert(env);\n });\n }\n Composite.prototype = {\n reset: callForEach('asserts', 'reset'),\n inject: callForEach('asserts', 'inject'),\n assert: callForEach('asserts', 'assert'),\n restore: callForEach('asserts', 'restore')\n };\n return Composite;\n }\n function noop() {}\n function callWithStub(env, name, func) {\n var debugStub = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : noop;\n\n var originalFunc = env.getDebugFunction(name);\n try {\n env.setDebugFunction(name, debugStub);\n func();\n } finally {\n env.setDebugFunction(name, originalFunc);\n }\n }\n function checkTest(test) {\n return typeof test === 'function' ? test() : test;\n }\n});","enifed('internal-test-helpers/lib/ember-dev/warning', ['exports', 'ember-babel', 'internal-test-helpers/lib/ember-dev/debug', 'internal-test-helpers/lib/ember-dev/utils'], function (exports, _emberBabel, _debug, _utils) {\n 'use strict';\n\n var WarningAssert = function (_DebugAssert) {\n (0, _emberBabel.inherits)(WarningAssert, _DebugAssert);\n\n function WarningAssert(env) {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _DebugAssert.call(this, 'warn', env));\n }\n\n WarningAssert.prototype.inject = function inject() {\n var _this2 = this;\n\n // Expects no warning to happen within a function, or if no function is\n // passed, from the time of calling until the end of the test.\n //\n // expectNoWarning(function() {\n // fancyNewThing();\n // });\n //\n // expectNoWarning();\n // Ember.warn(\"Oh snap, didn't expect that\");\n //\n var expectNoWarning = function (func) {\n if (typeof func !== 'function') {\n func = undefined;\n }\n _this2.runExpectation(func, function (tracker) {\n if (tracker.isExpectingCalls()) {\n throw new Error('expectNoWarning was called after expectWarning was called!');\n }\n tracker.expectNoCalls();\n });\n };\n // Expect a warning to happen within a function, or if no function is\n // passed, from the time of calling until the end of the test. Can be called\n // multiple times to assert warnings with different specific messages\n // happened.\n //\n // expectWarning(function() {\n // Ember.warn(\"Times they are a-changin'\");\n // }, /* optionalStringOrRegex */);\n //\n // expectWarning(/* optionalStringOrRegex */);\n // Ember.warn(\"Times definitely be changin'\");\n //\n var expectWarning = function (func, message) {\n var actualFunc = void 0;\n if (typeof func !== 'function') {\n message = func;\n actualFunc = undefined;\n } else {\n actualFunc = func;\n }\n _this2.runExpectation(actualFunc, function (tracker) {\n if (tracker.isExpectingNoCalls()) {\n throw new Error('expectWarning was called after expectNoWarning was called!');\n }\n tracker.expectCall(message);\n });\n };\n var ignoreWarning = function (func) {\n (0, _utils.callWithStub)(_this2.env, 'warn', func);\n };\n window.expectNoWarning = expectNoWarning;\n window.expectWarning = expectWarning;\n window.ignoreWarning = ignoreWarning;\n };\n\n WarningAssert.prototype.restore = function restore() {\n _DebugAssert.prototype.restore.call(this);\n window.expectWarning = null;\n window.expectNoWarning = null;\n window.ignoreWarning = null;\n };\n\n return WarningAssert;\n }(_debug.default);\n\n exports.default = WarningAssert;\n});","enifed('internal-test-helpers/lib/equal-inner-html', ['exports'], function (exports) {\n 'use strict';\n\n exports.default = equalInnerHTML;\n // detect side-effects of cloning svg elements in IE9-11\n var ieSVGInnerHTML = function () {\n if (!document.createElementNS) {\n return false;\n }\n var div = document.createElement('div');\n var node = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n div.appendChild(node);\n var clone = div.cloneNode(true);\n return clone.innerHTML === '';\n }();\n\n function normalizeInnerHTML(actualHTML) {\n if (ieSVGInnerHTML) {\n // Replace `` with ``, etc.\n // drop namespace attribute\n // replace self-closing elements\n actualHTML = actualHTML.replace(/ xmlns=\"[^\"]+\"/, '').replace(/<([^ >]+) [^\\/>]*\\/>/gi, function (tag, tagName) {\n return tag.slice(0, tag.length - 3) + '>';\n });\n }\n\n return actualHTML;\n }\n\n function equalInnerHTML(assert, fragment, html) {\n var actualHTML = normalizeInnerHTML(fragment.innerHTML);\n\n assert.pushResult({\n result: actualHTML === html,\n actual: actualHTML,\n expected: html\n });\n }\n});","enifed('internal-test-helpers/lib/equal-tokens', ['exports', 'simple-html-tokenizer'], function (exports, _simpleHtmlTokenizer) {\n 'use strict';\n\n exports.default = equalTokens;\n\n\n function generateTokens(containerOrHTML) {\n if (typeof containerOrHTML === 'string') {\n return {\n tokens: (0, _simpleHtmlTokenizer.tokenize)(containerOrHTML),\n html: containerOrHTML\n };\n } else {\n return {\n tokens: (0, _simpleHtmlTokenizer.tokenize)(containerOrHTML.innerHTML),\n html: containerOrHTML.innerHTML\n };\n }\n }\n\n function normalizeTokens(tokens) {\n tokens.forEach(function (token) {\n if (token.type === 'StartTag') {\n token.attributes = token.attributes.sort(function (a, b) {\n if (a[0] > b[0]) {\n return 1;\n }\n if (a[0] < b[0]) {\n return -1;\n }\n return 0;\n });\n }\n });\n }\n\n function equalTokens(actualContainer, expectedHTML) {\n var message = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n var actual = generateTokens(actualContainer);\n var expected = generateTokens(expectedHTML);\n\n normalizeTokens(actual.tokens);\n normalizeTokens(expected.tokens);\n\n var assert = QUnit.config.current.assert;\n\n var equiv = QUnit.equiv(actual.tokens, expected.tokens);\n\n if (equiv && expected.html !== actual.html) {\n assert.deepEqual(actual.tokens, expected.tokens, message);\n } else {\n assert.pushResult({\n result: QUnit.equiv(actual.tokens, expected.tokens),\n actual: actual.html,\n expected: expected.html,\n message: message\n });\n }\n }\n});","enifed('internal-test-helpers/lib/factory', ['exports'], function (exports) {\n 'use strict';\n\n exports.default = factory;\n function setProperties(object, properties) {\n for (var key in properties) {\n if (properties.hasOwnProperty(key)) {\n object[key] = properties[key];\n }\n }\n }\n\n var guids = 0;\n\n function factory() {\n /*jshint validthis: true */\n\n function Klass(options) {\n setProperties(this, options);\n this._guid = guids++;\n this.isDestroyed = false;\n }\n\n Klass.prototype.constructor = Klass;\n Klass.prototype.destroy = function () {\n this.isDestroyed = true;\n };\n\n Klass.prototype.toString = function () {\n return '';\n };\n\n Klass.create = create;\n Klass.extend = extend;\n Klass.reopen = extend;\n Klass.reopenClass = reopenClass;\n\n return Klass;\n\n function create(options) {\n return new this.prototype.constructor(options);\n }\n\n function reopenClass(options) {\n setProperties(this, options);\n }\n\n function extend(options) {\n function Child(options) {\n Klass.call(this, options);\n }\n\n var Parent = this;\n\n Child.prototype = new Parent();\n Child.prototype.constructor = Child;\n\n setProperties(Child, Klass);\n setProperties(Child.prototype, options);\n\n Child.create = create;\n Child.extend = extend;\n Child.reopen = extend;\n\n Child.reopenClass = reopenClass;\n\n return Child;\n }\n }\n});","enifed(\"internal-test-helpers/lib/get-all-property-names\", [\"exports\"], function (exports) {\n \"use strict\";\n\n exports.default = getAllPropertyNames;\n function getAllPropertyNames(Klass) {\n var proto = Klass.prototype;\n var properties = new Set();\n\n while (proto !== Object.prototype) {\n var names = Object.getOwnPropertyNames(proto);\n names.forEach(function (name) {\n return properties.add(name);\n });\n proto = Object.getPrototypeOf(proto);\n }\n\n return properties;\n }\n});","enifed(\"internal-test-helpers/lib/get-text-of\", [\"exports\"], function (exports) {\n \"use strict\";\n\n exports.default = getTextOf;\n function getTextOf(elem) {\n return elem.textContent.trim();\n }\n});","enifed('internal-test-helpers/lib/matchers', ['exports'], function (exports) {\n 'use strict';\n\n exports.regex = regex;\n exports.classes = classes;\n exports.styles = styles;\n exports.equalsElement = equalsElement;\n var HTMLElement = window.HTMLElement;\n var MATCHER_BRAND = '3d4ef194-13be-4ccf-8dc7-862eea02c93e';\n\n function isMatcher(obj) {\n return typeof obj === 'object' && obj !== null && MATCHER_BRAND in obj;\n }\n\n function equalsAttr(expected) {\n var _ref;\n\n return _ref = {}, _ref[MATCHER_BRAND] = true, _ref.match = function (actual) {\n return expected === actual;\n }, _ref.expected = function () {\n return expected;\n }, _ref.message = function () {\n return 'should equal ' + this.expected();\n }, _ref;\n }\n\n function regex(r) {\n var _ref2;\n\n return _ref2 = {}, _ref2[MATCHER_BRAND] = true, _ref2.match = function (v) {\n return r.test(v);\n }, _ref2.expected = function () {\n return r.toString();\n }, _ref2.message = function () {\n return 'should match ' + this.expected();\n }, _ref2;\n }\n\n function classes(expected) {\n var _ref3;\n\n return _ref3 = {}, _ref3[MATCHER_BRAND] = true, _ref3.match = function (actual) {\n actual = actual.trim();\n return actual && expected.split(/\\s+/).sort().join(' ') === actual.trim().split(/\\s+/).sort().join(' ');\n }, _ref3.expected = function () {\n return expected;\n }, _ref3.message = function () {\n return 'should match ' + this.expected();\n }, _ref3;\n }\n\n function styles(expected) {\n var _ref4;\n\n return _ref4 = {}, _ref4[MATCHER_BRAND] = true, _ref4.match = function (actual) {\n // coerce `null` or `undefined` to an empty string\n // needed for matching empty styles on IE9 - IE11\n actual = actual || '';\n actual = actual.trim();\n\n return expected.split(';').map(function (s) {\n return s.trim();\n }).filter(function (s) {\n return s;\n }).sort().join('; ') === actual.split(';').map(function (s) {\n return s.trim();\n }).filter(function (s) {\n return s;\n }).sort().join('; ');\n }, _ref4.expected = function () {\n return expected;\n }, _ref4.message = function () {\n return 'should match ' + this.expected();\n }, _ref4;\n }\n\n function equalsElement(assert, element, tagName, attributes, content) {\n assert.pushResult({\n result: element.tagName === tagName.toUpperCase(),\n actual: element.tagName.toLowerCase(),\n expected: tagName,\n message: 'expect tagName to be ' + tagName\n });\n\n var expectedAttrs = {};\n var expectedCount = 0;\n\n for (var name in attributes) {\n var expected = attributes[name];\n if (expected !== null) {\n expectedCount++;\n }\n\n var matcher = isMatcher(expected) ? expected : equalsAttr(expected);\n\n expectedAttrs[name] = matcher;\n\n assert.pushResult({\n result: expectedAttrs[name].match(element.getAttribute(name)),\n actual: element.getAttribute(name),\n expected: matcher.expected(),\n message: 'Element\\'s ' + name + ' attribute ' + matcher.message()\n });\n }\n\n var actualAttributes = {};\n\n for (var i = 0, l = element.attributes.length; i < l; i++) {\n actualAttributes[element.attributes[i].name] = element.attributes[i].value;\n }\n\n if (!(element instanceof HTMLElement)) {\n assert.pushResult({\n result: element instanceof HTMLElement,\n message: 'Element must be an HTML Element, not an SVG Element'\n });\n } else {\n assert.pushResult({\n result: element.attributes.length === expectedCount || !attributes,\n actual: element.attributes.length,\n expected: expectedCount,\n message: 'Expected ' + expectedCount + ' attributes; got ' + element.outerHTML\n });\n\n if (content !== null) {\n assert.pushResult({\n result: element.innerHTML === content,\n actual: element.innerHTML,\n expected: content,\n message: 'The element had \\'' + content + '\\' as its content'\n });\n }\n }\n }\n});","enifed('internal-test-helpers/lib/module-for', ['exports', '@ember/canary-features', 'internal-test-helpers/lib/apply-mixins', 'internal-test-helpers/lib/get-all-property-names', 'rsvp'], function (exports, _canaryFeatures, _applyMixins, _getAllPropertyNames, _rsvp) {\n 'use strict';\n\n exports.default = moduleFor;\n function moduleFor(description, TestClass) {\n QUnit.module(description, {\n beforeEach: function () {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var instance = new (Function.prototype.bind.apply(TestClass, [null].concat(args)))();\n this.instance = instance;\n if (instance.beforeEach) {\n return instance.beforeEach.apply(instance, args);\n }\n },\n\n afterEach: function () {\n var promises = [];\n var instance = this.instance;\n this.instance = null;\n if (instance.teardown) {\n promises.push(instance.teardown());\n }\n if (instance.afterEach) {\n promises.push(instance.afterEach());\n }\n\n // this seems odd, but actually saves significant time\n // in the test suite\n //\n // returning a promise from a QUnit test always adds a 13ms\n // delay to the test, this filtering prevents returning a\n // promise when it is not needed\n //\n // Remove after we can update to QUnit that includes\n // https://github.com/qunitjs/qunit/pull/1246\n var filteredPromises = promises.filter(Boolean);\n if (filteredPromises.length > 0) {\n return (0, _rsvp.all)(filteredPromises);\n }\n }\n });\n\n for (var _len = arguments.length, mixins = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n mixins[_key - 2] = arguments[_key];\n }\n\n if (mixins.length > 0) {\n _applyMixins.default.apply(undefined, [TestClass].concat(mixins));\n }\n\n var properties = (0, _getAllPropertyNames.default)(TestClass);\n properties.forEach(generateTest);\n\n function shouldTest(features) {\n return features.every(function (feature) {\n if (feature[0] === '!' && (0, _canaryFeatures.isEnabled)(feature.slice(1))) {\n return false;\n } else if (!(0, _canaryFeatures.isEnabled)(feature)) {\n return false;\n } else {\n return true;\n }\n });\n }\n\n function generateTest(name) {\n if (name.indexOf('@test ') === 0) {\n QUnit.test(name.slice(5), function (assert) {\n return this.instance[name](assert);\n });\n } else if (name.indexOf('@only ') === 0) {\n QUnit.only(name.slice(5), function (assert) {\n return this.instance[name](assert);\n });\n } else if (name.indexOf('@skip ') === 0) {\n QUnit.skip(name.slice(5), function (assert) {\n return this.instance[name](assert);\n });\n } else {\n var match = /^@feature\\(([A-Z_a-z-!]+)\\) /.exec(name);\n\n if (match) {\n var features = match[1].replace(/ /g, '').split(',');\n\n if (shouldTest(features)) {\n QUnit.test(name.slice(match[0].length), function (assert) {\n return this.instance[name](assert);\n });\n }\n }\n }\n }\n }\n});","enifed('internal-test-helpers/lib/registry-check', ['exports'], function (exports) {\n 'use strict';\n\n exports.verifyRegistration = verifyRegistration;\n exports.verifyInjection = verifyInjection;\n function verifyRegistration(assert, owner, fullName) {\n assert.ok(owner.resolveRegistration(fullName), 'has registration: ' + fullName);\n }\n\n function verifyInjection(assert, owner, fullName, property, injectionName) {\n var registry = owner.__registry__;\n var injections = void 0;\n\n if (fullName.indexOf(':') === -1) {\n injections = registry.getTypeInjections(fullName);\n } else {\n injections = registry.getInjections(registry.normalize(fullName));\n }\n\n var normalizedName = registry.normalize(injectionName);\n var hasInjection = false;\n var injection = void 0;\n\n for (var i = 0, l = injections.length; i < l; i++) {\n injection = injections[i];\n if (injection.property === property && injection.specifier === normalizedName) {\n hasInjection = true;\n break;\n }\n }\n\n assert.ok(hasInjection, 'has injection: ' + fullName + '.' + property + ' = ' + injectionName);\n }\n});","enifed('internal-test-helpers/lib/run', ['exports', '@ember/runloop'], function (exports, _runloop) {\n 'use strict';\n\n exports.runAppend = runAppend;\n exports.runDestroy = runDestroy;\n function runAppend(view) {\n (0, _runloop.run)(view, 'appendTo', document.getElementById('qunit-fixture'));\n }\n\n function runDestroy(toDestroy) {\n if (toDestroy) {\n (0, _runloop.run)(toDestroy, 'destroy');\n }\n }\n});","enifed('internal-test-helpers/lib/strip', ['exports'], function (exports) {\n 'use strict';\n\n exports.default = strip;\n function strip(_ref) {\n for (var _len = arguments.length, values = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n values[_key - 1] = arguments[_key];\n }\n\n var strings = _ref.slice(0);\n\n var str = strings.map(function (string, index) {\n var interpolated = values[index];\n return string + (interpolated !== undefined ? interpolated : '');\n }).join('');\n return str.split('\\n').map(function (s) {\n return s.trim();\n }).join('');\n }\n});","enifed('internal-test-helpers/lib/system/synthetic-events', ['exports', '@ember/runloop', '@ember/polyfills'], function (exports, _runloop, _polyfills) {\n 'use strict';\n\n exports.elMatches = undefined;\n exports.matches = matches;\n exports.click = click;\n exports.focus = focus;\n exports.blur = blur;\n exports.fireEvent = fireEvent;\n\n\n var DEFAULT_EVENT_OPTIONS = { canBubble: true, cancelable: true };\n /* globals Element */\n\n var KEYBOARD_EVENT_TYPES = ['keydown', 'keypress', 'keyup'];\n var MOUSE_EVENT_TYPES = ['click', 'mousedown', 'mouseup', 'dblclick', 'mouseenter', 'mouseleave', 'mousemove', 'mouseout', 'mouseover'];\n\n var elMatches = exports.elMatches = typeof Element !== 'undefined' && (Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector);\n\n function matches(el, selector) {\n return elMatches.call(el, selector);\n }\n\n function isFocusable(el) {\n var focusableTags = ['INPUT', 'BUTTON', 'LINK', 'SELECT', 'A', 'TEXTAREA'];\n var tagName = el.tagName,\n type = el.type;\n\n if (type === 'hidden') {\n return false;\n }\n\n return focusableTags.indexOf(tagName) > -1 || el.contentEditable === 'true';\n }\n\n function click(el) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n (0, _runloop.run)(function () {\n return fireEvent(el, 'mousedown', options);\n });\n focus(el);\n (0, _runloop.run)(function () {\n return fireEvent(el, 'mouseup', options);\n });\n (0, _runloop.run)(function () {\n return fireEvent(el, 'click', options);\n });\n }\n\n function focus(el) {\n if (!el) {\n return;\n }\n if (isFocusable(el)) {\n (0, _runloop.run)(null, function () {\n var browserIsNotFocused = document.hasFocus && !document.hasFocus();\n\n // Firefox does not trigger the `focusin` event if the window\n // does not have focus. If the document doesn't have focus just\n // use trigger('focusin') instead.\n if (browserIsNotFocused) {\n fireEvent(el, 'focusin');\n }\n\n // makes `document.activeElement` be `el`. If the browser is focused, it also fires a focus event\n el.focus();\n\n // if the browser is not focused the previous `el.focus()` didn't fire an event, so we simulate it\n if (browserIsNotFocused) {\n fireEvent(el, 'focus');\n }\n });\n }\n }\n\n function blur(el) {\n if (isFocusable(el)) {\n (0, _runloop.run)(null, function () {\n var browserIsNotFocused = document.hasFocus && !document.hasFocus();\n\n fireEvent(el, 'focusout');\n\n // makes `document.activeElement` be `body`.\n // If the browser is focused, it also fires a blur event\n el.blur();\n\n // Chrome/Firefox does not trigger the `blur` event if the window\n // does not have focus. If the document does not have focus then\n // fire `blur` event via native event.\n if (browserIsNotFocused) {\n fireEvent(el, 'blur');\n }\n });\n }\n }\n\n function fireEvent(element, type) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (!element) {\n return;\n }\n var event = void 0;\n if (KEYBOARD_EVENT_TYPES.indexOf(type) > -1) {\n event = buildKeyboardEvent(type, options);\n } else if (MOUSE_EVENT_TYPES.indexOf(type) > -1) {\n var rect = element.getBoundingClientRect();\n var x = rect.left + 1;\n var y = rect.top + 1;\n var simulatedCoordinates = {\n screenX: x + 5,\n screenY: y + 95,\n clientX: x,\n clientY: y\n };\n event = buildMouseEvent(type, (0, _polyfills.assign)(simulatedCoordinates, options));\n } else {\n event = buildBasicEvent(type, options);\n }\n element.dispatchEvent(event);\n\n return event;\n }\n\n function buildBasicEvent(type) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var event = document.createEvent('Events');\n event.initEvent(type, true, true);\n (0, _polyfills.assign)(event, options);\n return event;\n }\n\n function buildMouseEvent(type) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var event = void 0;\n try {\n event = document.createEvent('MouseEvents');\n var eventOpts = (0, _polyfills.assign)({}, DEFAULT_EVENT_OPTIONS, options);\n\n event.initMouseEvent(type, eventOpts.canBubble, eventOpts.cancelable, window, eventOpts.detail, eventOpts.screenX, eventOpts.screenY, eventOpts.clientX, eventOpts.clientY, eventOpts.ctrlKey, eventOpts.altKey, eventOpts.shiftKey, eventOpts.metaKey, eventOpts.button, eventOpts.relatedTarget);\n } catch (e) {\n event = buildBasicEvent(type, options);\n }\n return event;\n }\n\n function buildKeyboardEvent(type) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var event = void 0;\n try {\n event = document.createEvent('KeyEvents');\n var eventOpts = (0, _polyfills.assign)({}, DEFAULT_EVENT_OPTIONS, options);\n event.initKeyEvent(type, eventOpts.canBubble, eventOpts.cancelable, window, eventOpts.ctrlKey, eventOpts.altKey, eventOpts.shiftKey, eventOpts.metaKey, eventOpts.keyCode, eventOpts.charCode);\n } catch (e) {\n event = buildBasicEvent(type, options);\n }\n return event;\n }\n});","enifed('internal-test-helpers/lib/test-cases/abstract-application', ['exports', 'ember-babel', 'ember-template-compiler', '@ember/-internals/environment', 'internal-test-helpers/lib/test-cases/abstract', 'internal-test-helpers/lib/run'], function (exports, _emberBabel, _emberTemplateCompiler, _environment, _abstract, _run) {\n 'use strict';\n\n var AbstractApplicationTestCase = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(AbstractApplicationTestCase, _AbstractTestCase);\n\n function AbstractApplicationTestCase() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n AbstractApplicationTestCase.prototype._ensureInstance = function _ensureInstance(bootOptions) {\n var _this2 = this;\n\n if (this._applicationInstancePromise) {\n return this._applicationInstancePromise;\n }\n\n return this._applicationInstancePromise = this.runTask(function () {\n return _this2.application.boot();\n }).then(function (app) {\n _this2.applicationInstance = app.buildInstance();\n\n return _this2.applicationInstance.boot(bootOptions);\n });\n };\n\n AbstractApplicationTestCase.prototype.visit = function visit(url, options) {\n var _this3 = this;\n\n // TODO: THIS IS HORRIBLE\n // the promise returned by `ApplicationInstance.protoype.visit` does **not**\n // currently guarantee rendering is completed\n return this.runTask(function () {\n return _this3._ensureInstance(options).then(function (instance) {\n return instance.visit(url);\n });\n });\n };\n\n AbstractApplicationTestCase.prototype.afterEach = function afterEach() {\n (0, _run.runDestroy)(this.applicationInstance);\n (0, _run.runDestroy)(this.application);\n\n _AbstractTestCase.prototype.teardown.call(this);\n };\n\n AbstractApplicationTestCase.prototype.compile = function compile() /* string, options */{\n return _emberTemplateCompiler.compile.apply(undefined, arguments);\n };\n\n (0, _emberBabel.createClass)(AbstractApplicationTestCase, [{\n key: 'element',\n get: function () {\n if (this._element) {\n return this._element;\n } else if (_environment.ENV._APPLICATION_TEMPLATE_WRAPPER) {\n return this._element = document.querySelector('#qunit-fixture > div.ember-view');\n } else {\n return this._element = document.querySelector('#qunit-fixture');\n }\n },\n set: function (element) {\n this._element = element;\n }\n }, {\n key: 'applicationOptions',\n get: function () {\n return {\n rootElement: '#qunit-fixture'\n };\n }\n }, {\n key: 'routerOptions',\n get: function () {\n return {\n location: 'none'\n };\n }\n }, {\n key: 'router',\n get: function () {\n return this.application.resolveRegistration('router:main');\n }\n }]);\n\n return AbstractApplicationTestCase;\n }(_abstract.default);\n\n exports.default = AbstractApplicationTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/abstract-rendering', ['exports', 'ember-babel', '@ember/polyfills', 'ember-template-compiler', '@ember/-internals/views', '@ember/-internals/glimmer', 'internal-test-helpers/lib/test-resolver', 'internal-test-helpers/lib/test-cases/abstract', 'internal-test-helpers/lib/build-owner', 'internal-test-helpers/lib/run'], function (exports, _emberBabel, _polyfills, _emberTemplateCompiler, _views, _glimmer, _testResolver, _abstract, _buildOwner, _run) {\n 'use strict';\n\n var TextNode = window.Text;\n\n var AbstractRenderingTestCase = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(AbstractRenderingTestCase, _AbstractTestCase);\n\n function AbstractRenderingTestCase() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n\n var bootOptions = _this.getBootOptions();\n\n var owner = _this.owner = (0, _buildOwner.default)({\n ownerOptions: _this.getOwnerOptions(),\n resolver: _this.getResolver(),\n bootOptions: bootOptions\n });\n\n _this.renderer = _this.owner.lookup('renderer:-dom');\n _this.element = document.querySelector('#qunit-fixture');\n _this.component = null;\n\n owner.register('event_dispatcher:main', _views.EventDispatcher);\n owner.inject('event_dispatcher:main', '_viewRegistry', '-view-registry:main');\n if (!bootOptions || bootOptions.isInteractive !== false) {\n owner.lookup('event_dispatcher:main').setup(_this.getCustomDispatcherEvents(), _this.element);\n }\n return _this;\n }\n\n AbstractRenderingTestCase.prototype.compile = function compile() {\n return _emberTemplateCompiler.compile.apply(undefined, arguments);\n };\n\n AbstractRenderingTestCase.prototype.getCustomDispatcherEvents = function getCustomDispatcherEvents() {\n return {};\n };\n\n AbstractRenderingTestCase.prototype.getOwnerOptions = function getOwnerOptions() {};\n\n AbstractRenderingTestCase.prototype.getBootOptions = function getBootOptions() {};\n\n AbstractRenderingTestCase.prototype.getResolver = function getResolver() {\n return new _testResolver.ModuleBasedResolver();\n };\n\n AbstractRenderingTestCase.prototype.add = function add(specifier, factory) {\n this.resolver.add(specifier, factory);\n };\n\n AbstractRenderingTestCase.prototype.addTemplate = function addTemplate(templateName, templateString) {\n if (typeof templateName === 'string') {\n this.resolver.add('template:' + templateName, this.compile(templateString, {\n moduleName: templateName\n }));\n } else {\n this.resolver.add(templateName, this.compile(templateString, {\n moduleName: templateName.moduleName\n }));\n }\n };\n\n AbstractRenderingTestCase.prototype.addComponent = function addComponent(name, _ref) {\n var _ref$ComponentClass = _ref.ComponentClass,\n ComponentClass = _ref$ComponentClass === undefined ? null : _ref$ComponentClass,\n _ref$template = _ref.template,\n template = _ref$template === undefined ? null : _ref$template;\n\n if (ComponentClass) {\n this.resolver.add('component:' + name, ComponentClass);\n }\n\n if (typeof template === 'string') {\n this.resolver.add('template:components/' + name, this.compile(template, {\n moduleName: 'components/' + name\n }));\n }\n };\n\n AbstractRenderingTestCase.prototype.afterEach = function afterEach() {\n try {\n if (this.component) {\n (0, _run.runDestroy)(this.component);\n }\n if (this.owner) {\n (0, _run.runDestroy)(this.owner);\n }\n } finally {\n (0, _glimmer._resetRenderers)();\n }\n };\n\n AbstractRenderingTestCase.prototype.render = function render(templateStr) {\n var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var owner = this.owner;\n\n owner.register('template:-top-level', this.compile(templateStr, {\n moduleName: '-top-level'\n }));\n\n var attrs = (0, _polyfills.assign)({}, context, {\n tagName: '',\n layoutName: '-top-level'\n });\n\n owner.register('component:-top-level', _glimmer.Component.extend(attrs));\n\n this.component = owner.lookup('component:-top-level');\n\n (0, _run.runAppend)(this.component);\n };\n\n AbstractRenderingTestCase.prototype.rerender = function rerender() {\n this.component.rerender();\n };\n\n AbstractRenderingTestCase.prototype.registerHelper = function registerHelper(name, funcOrClassBody) {\n var type = typeof funcOrClassBody;\n\n if (type === 'function') {\n this.owner.register('helper:' + name, (0, _glimmer.helper)(funcOrClassBody));\n } else if (type === 'object' && type !== null) {\n this.owner.register('helper:' + name, _glimmer.Helper.extend(funcOrClassBody));\n } else {\n throw new Error('Cannot register ' + funcOrClassBody + ' as a helper');\n }\n };\n\n AbstractRenderingTestCase.prototype.registerPartial = function registerPartial(name, template) {\n var owner = this.env.owner || this.owner;\n if (typeof template === 'string') {\n owner.register('template:' + name, this.compile(template, { moduleName: 'my-app/templates/-' + name + '.hbs' }));\n }\n };\n\n AbstractRenderingTestCase.prototype.registerComponent = function registerComponent(name, _ref2) {\n var _ref2$ComponentClass = _ref2.ComponentClass,\n ComponentClass = _ref2$ComponentClass === undefined ? _glimmer.Component : _ref2$ComponentClass,\n _ref2$template = _ref2.template,\n template = _ref2$template === undefined ? null : _ref2$template;\n var owner = this.owner;\n\n if (ComponentClass) {\n owner.register('component:' + name, ComponentClass);\n }\n\n if (typeof template === 'string') {\n owner.register('template:components/' + name, this.compile(template, {\n moduleName: 'my-app/templates/components/' + name + '.hbs'\n }));\n }\n };\n\n AbstractRenderingTestCase.prototype.registerComponentManager = function registerComponentManager(name, manager) {\n var owner = this.env.owner || this.owner;\n owner.register('component-manager:' + name, manager);\n };\n\n AbstractRenderingTestCase.prototype.registerTemplate = function registerTemplate(name, template) {\n var owner = this.owner;\n\n if (typeof template === 'string') {\n owner.register('template:' + name, this.compile(template, {\n moduleName: 'my-app/templates/' + name + '.hbs'\n }));\n } else {\n throw new Error('Registered template \"' + name + '\" must be a string');\n }\n };\n\n AbstractRenderingTestCase.prototype.registerService = function registerService(name, klass) {\n this.owner.register('service:' + name, klass);\n };\n\n AbstractRenderingTestCase.prototype.assertTextNode = function assertTextNode(node, text) {\n if (!(node instanceof TextNode)) {\n throw new Error('Expecting a text node, but got ' + node);\n }\n\n this.assert.strictEqual(node.textContent, text, 'node.textContent');\n };\n\n (0, _emberBabel.createClass)(AbstractRenderingTestCase, [{\n key: 'resolver',\n get: function () {\n return this.owner.__registry__.fallback.resolver;\n }\n }, {\n key: 'context',\n get: function () {\n return this.component;\n }\n }]);\n\n return AbstractRenderingTestCase;\n }(_abstract.default);\n\n exports.default = AbstractRenderingTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/abstract', ['exports', 'ember-babel', '@ember/polyfills', '@ember/runloop', 'internal-test-helpers/lib/test-cases/node-query', 'internal-test-helpers/lib/equal-inner-html', 'internal-test-helpers/lib/equal-tokens', 'internal-test-helpers/lib/matchers', 'rsvp'], function (exports, _emberBabel, _polyfills, _runloop, _nodeQuery, _equalInnerHtml, _equalTokens, _matchers, _rsvp) {\n 'use strict';\n\n var TextNode = window.Text;\n /* global Element */\n\n var HTMLElement = window.HTMLElement;\n var Comment = window.Comment;\n\n function isMarker(node) {\n if (node instanceof Comment && node.textContent === '') {\n return true;\n }\n\n if (node instanceof TextNode && node.textContent === '') {\n return true;\n }\n\n return false;\n }\n\n var AbstractTestCase = function () {\n function AbstractTestCase(assert) {\n\n this.element = null;\n this.snapshot = null;\n this.assert = assert;\n\n var fixture = this.fixture;\n\n if (fixture) {\n this.setupFixture(fixture);\n }\n }\n\n AbstractTestCase.prototype.teardown = function teardown() {};\n\n AbstractTestCase.prototype.afterEach = function afterEach() {};\n\n AbstractTestCase.prototype.runTask = function runTask(callback) {\n return (0, _runloop.run)(callback);\n };\n\n AbstractTestCase.prototype.runTaskNext = function runTaskNext() {\n return new _rsvp.Promise(function (resolve) {\n return (0, _runloop.next)(resolve);\n });\n };\n\n AbstractTestCase.prototype.setupFixture = function setupFixture(innerHTML) {\n var fixture = document.getElementById('qunit-fixture');\n fixture.innerHTML = innerHTML;\n };\n\n // The following methods require `this.element` to work\n\n AbstractTestCase.prototype.nthChild = function nthChild(n) {\n var i = 0;\n var node = this.element.firstChild;\n\n while (node) {\n if (!isMarker(node)) {\n i++;\n }\n\n if (i > n) {\n break;\n } else {\n node = node.nextSibling;\n }\n }\n\n return node;\n };\n\n AbstractTestCase.prototype.$ = function $(sel) {\n if (sel instanceof Element) {\n return _nodeQuery.default.element(sel);\n } else if (typeof sel === 'string') {\n return _nodeQuery.default.query(sel, this.element);\n } else if (sel !== undefined) {\n throw new Error('Invalid this.$(' + sel + ')');\n } else {\n return _nodeQuery.default.element(this.element);\n }\n };\n\n AbstractTestCase.prototype.wrap = function wrap(element) {\n return _nodeQuery.default.element(element);\n };\n\n AbstractTestCase.prototype.click = function click(selector) {\n var element = void 0;\n if (typeof selector === 'string') {\n element = this.element.querySelector(selector);\n } else {\n element = selector;\n }\n\n var event = element.click();\n\n return this.runLoopSettled(event);\n };\n\n // TODO: Find a better name 😎\n\n\n AbstractTestCase.prototype.runLoopSettled = function runLoopSettled(value) {\n return new _rsvp.Promise(function (resolve) {\n // Every 5ms, poll for the async thing to have finished\n var watcher = setInterval(function () {\n // If there are scheduled timers or we are inside of a run loop, keep polling\n if ((0, _runloop.hasScheduledTimers)() || (0, _runloop.getCurrentRunLoop)()) {\n return;\n }\n\n // Stop polling\n clearInterval(watcher);\n\n // Synchronously resolve the promise\n resolve(value);\n }, 5);\n });\n };\n\n AbstractTestCase.prototype.textValue = function textValue() {\n return this.element.textContent;\n };\n\n AbstractTestCase.prototype.takeSnapshot = function takeSnapshot() {\n var snapshot = this.snapshot = [];\n\n var node = this.element.firstChild;\n\n while (node) {\n if (!isMarker(node)) {\n snapshot.push(node);\n }\n\n node = node.nextSibling;\n }\n\n return snapshot;\n };\n\n AbstractTestCase.prototype.assertText = function assertText(text) {\n this.assert.strictEqual(this.textValue(), text, '#qunit-fixture content should be: `' + text + '`');\n };\n\n AbstractTestCase.prototype.assertInnerHTML = function assertInnerHTML(html) {\n (0, _equalInnerHtml.default)(this.assert, this.element, html);\n };\n\n AbstractTestCase.prototype.assertHTML = function assertHTML(html) {\n (0, _equalTokens.default)(this.element, html, '#qunit-fixture content should be: `' + html + '`');\n };\n\n AbstractTestCase.prototype.assertElement = function assertElement(node, _ref) {\n var _ref$ElementType = _ref.ElementType,\n ElementType = _ref$ElementType === undefined ? HTMLElement : _ref$ElementType,\n tagName = _ref.tagName,\n _ref$attrs = _ref.attrs,\n attrs = _ref$attrs === undefined ? null : _ref$attrs,\n _ref$content = _ref.content,\n content = _ref$content === undefined ? null : _ref$content;\n\n if (!(node instanceof ElementType)) {\n throw new Error('Expecting a ' + ElementType.name + ', but got ' + node);\n }\n\n (0, _matchers.equalsElement)(this.assert, node, tagName, attrs, content);\n };\n\n AbstractTestCase.prototype.assertComponentElement = function assertComponentElement(node, _ref2) {\n var _ref2$ElementType = _ref2.ElementType,\n ElementType = _ref2$ElementType === undefined ? HTMLElement : _ref2$ElementType,\n _ref2$tagName = _ref2.tagName,\n tagName = _ref2$tagName === undefined ? 'div' : _ref2$tagName,\n _ref2$attrs = _ref2.attrs,\n attrs = _ref2$attrs === undefined ? null : _ref2$attrs,\n _ref2$content = _ref2.content,\n content = _ref2$content === undefined ? null : _ref2$content;\n\n attrs = (0, _polyfills.assign)({}, { id: (0, _matchers.regex)(/^ember\\d*$/), class: (0, _matchers.classes)('ember-view') }, attrs || {});\n this.assertElement(node, { ElementType: ElementType, tagName: tagName, attrs: attrs, content: content });\n };\n\n AbstractTestCase.prototype.assertSameNode = function assertSameNode(actual, expected) {\n this.assert.strictEqual(actual, expected, 'DOM node stability');\n };\n\n AbstractTestCase.prototype.assertInvariants = function assertInvariants(oldSnapshot, newSnapshot) {\n oldSnapshot = oldSnapshot || this.snapshot;\n newSnapshot = newSnapshot || this.takeSnapshot();\n\n this.assert.strictEqual(newSnapshot.length, oldSnapshot.length, 'Same number of nodes');\n\n for (var i = 0; i < oldSnapshot.length; i++) {\n this.assertSameNode(newSnapshot[i], oldSnapshot[i]);\n }\n };\n\n AbstractTestCase.prototype.assertPartialInvariants = function assertPartialInvariants(start, end) {\n this.assertInvariants(this.snapshot, this.takeSnapshot().slice(start, end));\n };\n\n AbstractTestCase.prototype.assertStableRerender = function assertStableRerender() {\n var _this = this;\n\n this.takeSnapshot();\n this.runTask(function () {\n return _this.rerender();\n });\n this.assertInvariants();\n };\n\n (0, _emberBabel.createClass)(AbstractTestCase, [{\n key: 'firstChild',\n get: function () {\n return this.nthChild(0);\n }\n }, {\n key: 'nodesCount',\n get: function () {\n var count = 0;\n var node = this.element.firstChild;\n\n while (node) {\n if (!isMarker(node)) {\n count++;\n }\n\n node = node.nextSibling;\n }\n\n return count;\n }\n }]);\n\n return AbstractTestCase;\n }();\n\n exports.default = AbstractTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/application', ['exports', 'ember-babel', 'internal-test-helpers/lib/test-cases/test-resolver-application', '@ember/application', '@ember/-internals/routing', '@ember/polyfills'], function (exports, _emberBabel, _testResolverApplication, _application, _routing, _polyfills) {\n 'use strict';\n\n var ApplicationTestCase = function (_TestResolverApplicat) {\n (0, _emberBabel.inherits)(ApplicationTestCase, _TestResolverApplicat);\n\n function ApplicationTestCase() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _TestResolverApplicat.apply(this, arguments));\n\n var applicationOptions = _this.applicationOptions;\n\n _this.application = _this.runTask(_this.createApplication.bind(_this, applicationOptions));\n\n _this.resolver = _this.application.__registry__.resolver;\n\n if (_this.resolver) {\n _this.resolver.add('router:main', _routing.Router.extend(_this.routerOptions));\n }\n return _this;\n }\n\n ApplicationTestCase.prototype.createApplication = function createApplication() {\n var myOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var MyApplication = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _application.default;\n\n return MyApplication.create(myOptions);\n };\n\n ApplicationTestCase.prototype.transitionTo = function transitionTo() {\n var _this2 = this,\n _arguments = arguments;\n\n return this.runTask(function () {\n var _appRouter;\n\n return (_appRouter = _this2.appRouter).transitionTo.apply(_appRouter, _arguments);\n });\n };\n\n (0, _emberBabel.createClass)(ApplicationTestCase, [{\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_TestResolverApplicat.prototype.applicationOptions, {\n autoboot: false\n });\n }\n }, {\n key: 'appRouter',\n get: function () {\n return this.applicationInstance.lookup('router:main');\n }\n }]);\n\n return ApplicationTestCase;\n }(_testResolverApplication.default);\n\n exports.default = ApplicationTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/autoboot-application', ['exports', 'ember-babel', 'internal-test-helpers/lib/test-cases/test-resolver-application', '@ember/application', '@ember/polyfills', '@ember/-internals/routing'], function (exports, _emberBabel, _testResolverApplication, _application, _polyfills, _routing) {\n 'use strict';\n\n var AutobootApplicationTestCase = function (_TestResolverApplicat) {\n (0, _emberBabel.inherits)(AutobootApplicationTestCase, _TestResolverApplicat);\n\n function AutobootApplicationTestCase() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _TestResolverApplicat.apply(this, arguments));\n }\n\n AutobootApplicationTestCase.prototype.createApplication = function createApplication(options) {\n var MyApplication = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _application.default;\n\n var myOptions = (0, _polyfills.assign)(this.applicationOptions, options);\n var application = this.application = MyApplication.create(myOptions);\n this.resolver = application.__registry__.resolver;\n\n if (this.resolver) {\n this.resolver.add('router:main', _routing.Router.extend(this.routerOptions));\n }\n\n return application;\n };\n\n AutobootApplicationTestCase.prototype.visit = function visit(url) {\n var _this2 = this;\n\n return this.application.boot().then(function () {\n return _this2.applicationInstance.visit(url);\n });\n };\n\n (0, _emberBabel.createClass)(AutobootApplicationTestCase, [{\n key: 'applicationInstance',\n get: function () {\n var application = this.application;\n\n if (!application) {\n return undefined;\n }\n\n return application.__deprecatedInstance__;\n }\n }]);\n\n return AutobootApplicationTestCase;\n }(_testResolverApplication.default);\n\n exports.default = AutobootApplicationTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/default-resolver-application', ['exports', 'ember-babel', 'internal-test-helpers/lib/test-cases/abstract-application', '@ember/application/globals-resolver', '@ember/application', '@ember/-internals/glimmer', '@ember/polyfills', '@ember/-internals/routing'], function (exports, _emberBabel, _abstractApplication, _globalsResolver, _application, _glimmer, _polyfills, _routing) {\n 'use strict';\n\n var ApplicationTestCase = function (_AbstractApplicationT) {\n (0, _emberBabel.inherits)(ApplicationTestCase, _AbstractApplicationT);\n\n function ApplicationTestCase() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractApplicationT.apply(this, arguments));\n }\n\n ApplicationTestCase.prototype.createApplication = function createApplication() {\n var application = this.application = _application.default.create(this.applicationOptions);\n application.Router = _routing.Router.extend(this.routerOptions);\n return application;\n };\n\n ApplicationTestCase.prototype.afterEach = function afterEach() {\n (0, _glimmer.setTemplates)({});\n return _AbstractApplicationT.prototype.afterEach.call(this);\n };\n\n ApplicationTestCase.prototype.transitionTo = function transitionTo() {\n var _this2 = this,\n _arguments = arguments;\n\n return this.runTask(function () {\n var _appRouter;\n\n return (_appRouter = _this2.appRouter).transitionTo.apply(_appRouter, _arguments);\n });\n };\n\n ApplicationTestCase.prototype.addTemplate = function addTemplate(name, templateString) {\n var compiled = this.compile(templateString);\n (0, _glimmer.setTemplate)(name, compiled);\n return compiled;\n };\n\n (0, _emberBabel.createClass)(ApplicationTestCase, [{\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_AbstractApplicationT.prototype.applicationOptions, {\n name: 'TestApp',\n autoboot: false,\n Resolver: _globalsResolver.default\n });\n }\n }, {\n key: 'appRouter',\n get: function () {\n return this.applicationInstance.lookup('router:main');\n }\n }]);\n\n return ApplicationTestCase;\n }(_abstractApplication.default);\n\n exports.default = ApplicationTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/node-query', ['exports', '@ember/debug', 'internal-test-helpers/lib/system/synthetic-events'], function (exports, _debug, _syntheticEvents) {\n 'use strict';\n\n /* global Node */\n\n var NodeQuery = function () {\n NodeQuery.query = function query(selector) {\n var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;\n\n false && !(context && context instanceof Node) && (0, _debug.assert)('Invalid second parameter to NodeQuery.query', context && context instanceof Node);\n\n return new NodeQuery(toArray(context.querySelectorAll(selector)));\n };\n\n NodeQuery.element = function element(_element) {\n return new NodeQuery([_element]);\n };\n\n function NodeQuery(nodes) {\n\n false && !Array.isArray(nodes) && (0, _debug.assert)('NodeQuery must be initialized with a literal array', Array.isArray(nodes));\n\n this.nodes = nodes;\n\n for (var i = 0; i < nodes.length; i++) {\n this[i] = nodes[i];\n }\n\n this.length = nodes.length;\n\n Object.freeze(this);\n }\n\n NodeQuery.prototype.find = function find(selector) {\n assertSingle(this);\n\n return this[0].querySelector(selector);\n };\n\n NodeQuery.prototype.findAll = function findAll(selector) {\n var nodes = [];\n\n this.nodes.forEach(function (node) {\n nodes.push.apply(nodes, node.querySelectorAll(selector));\n });\n\n return new NodeQuery(nodes);\n };\n\n NodeQuery.prototype.trigger = function trigger(eventName, options) {\n return this.nodes.map(function (node) {\n return (0, _syntheticEvents.fireEvent)(node, eventName, options);\n });\n };\n\n NodeQuery.prototype.click = function click() {\n return this.trigger('click');\n };\n\n NodeQuery.prototype.focus = function focus() {\n this.nodes.forEach(_syntheticEvents.focus);\n };\n\n NodeQuery.prototype.text = function text() {\n return this.nodes.map(function (node) {\n return node.textContent;\n }).join('');\n };\n\n NodeQuery.prototype.attr = function attr(name) {\n if (arguments.length !== 1) {\n throw new Error('not implemented');\n }\n\n assertSingle(this);\n\n return this.nodes[0].getAttribute(name);\n };\n\n NodeQuery.prototype.prop = function prop(name, value) {\n if (arguments.length > 1) {\n return this.setProp(name, value);\n }\n\n assertSingle(this);\n\n return this.nodes[0][name];\n };\n\n NodeQuery.prototype.setProp = function setProp(name, value) {\n this.nodes.forEach(function (node) {\n return node[name] = value;\n });\n\n return this;\n };\n\n NodeQuery.prototype.val = function val(value) {\n if (arguments.length === 1) {\n return this.setProp('value', value);\n }\n\n return this.prop('value');\n };\n\n NodeQuery.prototype.is = function is(selector) {\n return this.nodes.every(function (node) {\n return (0, _syntheticEvents.matches)(node, selector);\n });\n };\n\n NodeQuery.prototype.hasClass = function hasClass(className) {\n return this.is('.' + className);\n };\n\n return NodeQuery;\n }();\n\n exports.default = NodeQuery;\n\n\n function assertSingle(nodeQuery) {\n if (nodeQuery.length !== 1) {\n throw new Error('attr(name) called on a NodeQuery with ' + this.nodes.length + ' elements. Expected one element.');\n }\n }\n\n function toArray(nodes) {\n var out = [];\n\n for (var i = 0; i < nodes.length; i++) {\n out.push(nodes[i]);\n }\n\n return out;\n }\n});","enifed('internal-test-helpers/lib/test-cases/query-param', ['exports', 'ember-babel', '@ember/controller', '@ember/-internals/routing', '@ember/runloop', 'internal-test-helpers/lib/test-cases/application'], function (exports, _emberBabel, _controller, _routing, _runloop, _application) {\n 'use strict';\n\n var QueryParamTestCase = function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(QueryParamTestCase, _ApplicationTestCase);\n\n function QueryParamTestCase() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n\n var testCase = _this;\n testCase.expectedPushURL = null;\n testCase.expectedReplaceURL = null;\n\n _this.add('location:test', _routing.NoneLocation.extend({\n setURL: function (path) {\n if (testCase.expectedReplaceURL) {\n testCase.assert.ok(false, 'pushState occurred but a replaceState was expected');\n }\n\n if (testCase.expectedPushURL) {\n testCase.assert.equal(path, testCase.expectedPushURL, 'an expected pushState occurred');\n testCase.expectedPushURL = null;\n }\n\n this.set('path', path);\n },\n replaceURL: function (path) {\n if (testCase.expectedPushURL) {\n testCase.assert.ok(false, 'replaceState occurred but a pushState was expected');\n }\n\n if (testCase.expectedReplaceURL) {\n testCase.assert.equal(path, testCase.expectedReplaceURL, 'an expected replaceState occurred');\n testCase.expectedReplaceURL = null;\n }\n\n this.set('path', path);\n }\n }));\n return _this;\n }\n\n QueryParamTestCase.prototype.visitAndAssert = function visitAndAssert(path) {\n var _this2 = this;\n\n return this.visit.apply(this, arguments).then(function () {\n _this2.assertCurrentPath(path);\n });\n };\n\n QueryParamTestCase.prototype.getController = function getController(name) {\n return this.applicationInstance.lookup('controller:' + name);\n };\n\n QueryParamTestCase.prototype.getRoute = function getRoute(name) {\n return this.applicationInstance.lookup('route:' + name);\n };\n\n QueryParamTestCase.prototype.setAndFlush = function setAndFlush(obj, prop, value) {\n return (0, _runloop.run)(obj, 'set', prop, value);\n };\n\n QueryParamTestCase.prototype.assertCurrentPath = function assertCurrentPath(path) {\n var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'current path equals \\'' + path + '\\'';\n\n this.assert.equal(this.appRouter.get('location.path'), path, message);\n };\n\n /**\n Sets up a Controller for a given route with a single query param and default\n value. Can optionally extend the controller with an object.\n @public\n @method setSingleQPController\n */\n\n QueryParamTestCase.prototype.setSingleQPController = function setSingleQPController(routeName) {\n var param = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'foo';\n\n var _Controller$extend;\n\n var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'bar';\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n this.add('controller:' + routeName, _controller.default.extend((_Controller$extend = {\n queryParams: [param]\n }, _Controller$extend[param] = defaultValue, _Controller$extend), options));\n };\n\n /**\n Sets up a Controller for a given route with a custom property/url key mapping.\n @public\n @method setMappedQPController\n */\n\n QueryParamTestCase.prototype.setMappedQPController = function setMappedQPController(routeName) {\n var prop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'page';\n var urlKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'parentPage';\n\n var _queryParams, _Controller$extend2;\n\n var defaultValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n\n this.add('controller:' + routeName, _controller.default.extend((_Controller$extend2 = {\n queryParams: (_queryParams = {}, _queryParams[prop] = urlKey, _queryParams)\n }, _Controller$extend2[prop] = defaultValue, _Controller$extend2), options));\n };\n\n (0, _emberBabel.createClass)(QueryParamTestCase, [{\n key: 'routerOptions',\n get: function () {\n return {\n location: 'test'\n };\n }\n }]);\n\n return QueryParamTestCase;\n }(_application.default);\n\n exports.default = QueryParamTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/rendering', ['exports', 'ember-babel', 'internal-test-helpers/lib/test-cases/abstract-rendering', '@ember/-internals/container'], function (exports, _emberBabel, _abstractRendering, _container) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['template-compiler:main'], ['template-compiler:main']);\n\n var RenderingTestCase = function (_AbstractRenderingTes) {\n (0, _emberBabel.inherits)(RenderingTestCase, _AbstractRenderingTes);\n\n function RenderingTestCase() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractRenderingTes.apply(this, arguments));\n\n var owner = _this.owner;\n\n _this.env = owner.lookup('service:-glimmer-environment');\n _this.templateOptions = owner.lookup((0, _container.privatize)(_templateObject));\n _this.compileTimeLookup = _this.templateOptions.resolver;\n _this.runtimeResolver = _this.compileTimeLookup.resolver;\n return _this;\n }\n\n return RenderingTestCase;\n }(_abstractRendering.default);\n\n exports.default = RenderingTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/router', ['exports', 'ember-babel', 'internal-test-helpers/lib/test-cases/application'], function (exports, _emberBabel, _application) {\n 'use strict';\n\n var RouterTestCase = function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(RouterTestCase, _ApplicationTestCase);\n\n function RouterTestCase() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n\n _this.router.map(function () {\n this.route('parent', { path: '/' }, function () {\n this.route('child');\n this.route('sister');\n this.route('brother');\n });\n this.route('dynamic', { path: '/dynamic/:dynamic_id' });\n this.route('dynamicWithChild', { path: '/dynamic-with-child/:dynamic_id' }, function () {\n this.route('child', { path: '/:child_id' });\n });\n });\n return _this;\n }\n\n RouterTestCase.prototype.buildQueryParams = function buildQueryParams(queryParams) {\n return {\n queryParams: queryParams\n };\n };\n\n (0, _emberBabel.createClass)(RouterTestCase, [{\n key: 'routerService',\n get: function () {\n return this.applicationInstance.lookup('service:router');\n }\n }]);\n\n return RouterTestCase;\n }(_application.default);\n\n exports.default = RouterTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/test-resolver-application', ['exports', 'ember-babel', 'internal-test-helpers/lib/test-cases/abstract-application', 'internal-test-helpers/lib/test-resolver', '@ember/-internals/glimmer', '@ember/polyfills'], function (exports, _emberBabel, _abstractApplication, _testResolver, _glimmer, _polyfills) {\n 'use strict';\n\n var TestResolverApplicationTestCase = function (_AbstractApplicationT) {\n (0, _emberBabel.inherits)(TestResolverApplicationTestCase, _AbstractApplicationT);\n\n function TestResolverApplicationTestCase() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractApplicationT.apply(this, arguments));\n }\n\n TestResolverApplicationTestCase.prototype.add = function add(specifier, factory) {\n this.resolver.add(specifier, factory);\n };\n\n TestResolverApplicationTestCase.prototype.addTemplate = function addTemplate(templateName, templateString) {\n this.resolver.add('template:' + templateName, this.compile(templateString, {\n moduleName: 'my-app/templates/' + templateName + '.hbs'\n }));\n };\n\n TestResolverApplicationTestCase.prototype.addComponent = function addComponent(name, _ref) {\n var _ref$ComponentClass = _ref.ComponentClass,\n ComponentClass = _ref$ComponentClass === undefined ? _glimmer.Component : _ref$ComponentClass,\n _ref$template = _ref.template,\n template = _ref$template === undefined ? null : _ref$template;\n\n if (ComponentClass) {\n this.resolver.add('component:' + name, ComponentClass);\n }\n\n if (typeof template === 'string') {\n this.resolver.add('template:components/' + name, this.compile(template, {\n moduleName: 'my-app/templates/components/' + name + '.hbs'\n }));\n }\n };\n\n (0, _emberBabel.createClass)(TestResolverApplicationTestCase, [{\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_AbstractApplicationT.prototype.applicationOptions, {\n Resolver: _testResolver.ModuleBasedResolver\n });\n }\n }]);\n\n return TestResolverApplicationTestCase;\n }(_abstractApplication.default);\n\n exports.default = TestResolverApplicationTestCase;\n});","enifed('internal-test-helpers/lib/test-resolver', ['exports', 'ember-babel', 'ember-template-compiler'], function (exports, _emberBabel, _emberTemplateCompiler) {\n 'use strict';\n\n exports.ModuleBasedResolver = undefined;\n\n\n var DELIMITER = '%';\n\n function serializeKey(specifier, source, namespace) {\n var _specifier$split = specifier.split(':'),\n type = _specifier$split[0],\n name = _specifier$split[1];\n\n return type + '://' + [name, namespace ? '[source invalid due to namespace]' : source, namespace].join(DELIMITER);\n }\n\n var Resolver = function () {\n function Resolver() {\n\n this._registered = {};\n }\n\n Resolver.prototype.resolve = function resolve(specifier) {\n return this._registered[specifier] || this._registered[serializeKey(specifier)];\n };\n\n Resolver.prototype.expandLocalLookup = function expandLocalLookup(specifier, source, namespace) {\n if (specifier.indexOf('://') !== -1) {\n return specifier; // an already expanded specifier\n }\n\n if (source || namespace) {\n var key = serializeKey(specifier, source, namespace);\n if (this._registered[key]) {\n return key; // like local lookup\n }\n\n key = serializeKey(specifier);\n if (this._registered[key]) {\n return specifier; // top level resolution despite source/namespace\n }\n }\n\n return specifier; // didn't know how to expand it\n };\n\n Resolver.prototype.add = function add(lookup, factory) {\n var key = void 0;\n switch (typeof lookup) {\n case 'string':\n if (lookup.indexOf(':') === -1) {\n throw new Error('Specifiers added to the resolver must be in the format of type:name');\n }\n key = serializeKey(lookup);\n break;\n case 'object':\n key = serializeKey(lookup.specifier, lookup.source, lookup.namespace);\n break;\n default:\n throw new Error('Specifier string has an unknown type');\n }\n\n return this._registered[key] = factory;\n };\n\n Resolver.prototype.addTemplate = function addTemplate(templateName, template) {\n var templateType = typeof template;\n if (templateType !== 'string') {\n throw new Error('You called addTemplate for \"' + templateName + '\" with a template argument of type of \\'' + templateType + '\\'. addTemplate expects an argument of an uncompiled template as a string.');\n }\n return this._registered[serializeKey('template:' + templateName)] = (0, _emberTemplateCompiler.compile)(template, {\n moduleName: 'my-app/templates/' + templateName + '.hbs'\n });\n };\n\n Resolver.create = function create() {\n return new this();\n };\n\n return Resolver;\n }();\n\n exports.default = Resolver;\n\n\n /*\n * A resolver with moduleBasedResolver = true handles error and loading\n * substates differently than a standard resolver.\n */\n\n var ModuleBasedResolver = function (_Resolver) {\n (0, _emberBabel.inherits)(ModuleBasedResolver, _Resolver);\n\n function ModuleBasedResolver() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _Resolver.apply(this, arguments));\n }\n\n (0, _emberBabel.createClass)(ModuleBasedResolver, [{\n key: 'moduleBasedResolver',\n get: function () {\n return true;\n }\n }]);\n\n return ModuleBasedResolver;\n }(Resolver);\n\n exports.ModuleBasedResolver = ModuleBasedResolver;\n});","enifed('internal-test-helpers/tests/index-test', ['ember-babel', 'internal-test-helpers'], function (_emberBabel, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('internal-test-helpers', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test module present'] = function testModulePresent(assert) {\n assert.ok(true, 'each package needs at least one test to be able to run through `npm test`');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","/*global enifed, module */\nenifed('node-module', ['exports'], function(_exports) {\n var IS_NODE = typeof module === 'object' && typeof module.require === 'function';\n if (IS_NODE) {\n _exports.require = module.require;\n _exports.module = module;\n _exports.IS_NODE = IS_NODE;\n } else {\n _exports.require = null;\n _exports.module = null;\n _exports.IS_NODE = IS_NODE;\n }\n});\n"],"names":[],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/ZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7YA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7eA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5aA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5ZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1pCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC98CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5gHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACr5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtuBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACj8BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;","file":"ember-tests.prod.js"}