{"version":3,"sources":["vendor/ember-cli/app-prefix.js","timetracker/adapters/admin-project.js","timetracker/adapters/admin-user.js","timetracker/adapters/application.js","timetracker/adapters/project-report-timer.js","timetracker/adapters/project.js","timetracker/adapters/timer.js","timetracker/adapters/user-report-timer.js","timetracker/adapters/user.js","timetracker/app.js","timetracker/breakpoints.js","timetracker/components/edit-profile.js","timetracker/components/full-calendar.js","timetracker/components/login-form.js","timetracker/components/new-timer-list.js","timetracker/components/pikaday-input.js","timetracker/components/pikaday-inputless.js","timetracker/components/project-administration.js","timetracker/components/recent-timers.js","timetracker/components/report-parameters.js","timetracker/components/report-table.js","timetracker/components/time-picker.js","timetracker/components/timeline-view-component.js","timetracker/components/tt-table.js","timetracker/components/ui-accordion.js","timetracker/components/ui-checkbox.js","timetracker/components/ui-dimmer.js","timetracker/components/ui-dropdown.js","timetracker/components/ui-embed.js","timetracker/components/ui-modal.js","timetracker/components/ui-nag.js","timetracker/components/ui-popup.js","timetracker/components/ui-progress.js","timetracker/components/ui-radio.js","timetracker/components/ui-rating.js","timetracker/components/ui-search.js","timetracker/components/ui-shape.js","timetracker/components/ui-sidebar.js","timetracker/components/ui-sticky.js","timetracker/components/user-administration.js","timetracker/constants.js","timetracker/helpers/and.js","timetracker/helpers/app-version.js","timetracker/helpers/eq.js","timetracker/helpers/gt.js","timetracker/helpers/gte.js","timetracker/helpers/is-array.js","timetracker/helpers/is-equal.js","timetracker/helpers/lt.js","timetracker/helpers/lte.js","timetracker/helpers/map-value.js","timetracker/helpers/not-eq.js","timetracker/helpers/not.js","timetracker/helpers/or.js","timetracker/helpers/pluralize.js","timetracker/helpers/route-action.js","timetracker/helpers/singularize.js","timetracker/helpers/t.js","timetracker/helpers/xor.js","timetracker/index.js","timetracker/initializers/app-version.js","timetracker/initializers/container-debug-adapter.js","timetracker/initializers/data-adapter.js","timetracker/initializers/ember-data.js","timetracker/initializers/ember-i18n.js","timetracker/initializers/export-application-global.js","timetracker/initializers/injectStore.js","timetracker/initializers/metrics.js","timetracker/initializers/raven.js","timetracker/initializers/responsive.js","timetracker/initializers/store.js","timetracker/initializers/transforms.js","timetracker/instance-initializers/ember-data.js","timetracker/instance-initializers/ember-i18n.js","timetracker/instance-initializers/raven-setup.js","timetracker/locales/en/config.js","timetracker/locales/en/translations.js","timetracker/mixins/base.js","timetracker/mixins/promise-resolver.js","timetracker/models/admin-project.js","timetracker/models/admin-user.js","timetracker/models/project-report-timer.js","timetracker/models/project.js","timetracker/models/timer.js","timetracker/models/user-report-timer.js","timetracker/models/user.js","timetracker/resolver.js","timetracker/router.js","timetracker/routes/application.js","timetracker/routes/authenticated.js","timetracker/routes/authenticated/features.js","timetracker/routes/authenticated/features/index.js","timetracker/routes/authenticated/features/reports.js","timetracker/routes/authenticated/features/timeline.js","timetracker/routes/authenticated/features/timers.js","timetracker/routes/authenticated/manage.js","timetracker/routes/authenticated/manage/administration.js","timetracker/routes/authenticated/manage/profile.js","timetracker/routes/login.js","timetracker/routes/not-found.js","timetracker/routes/unauthorized.js","timetracker/serializers/admin-project.js","timetracker/serializers/admin-user.js","timetracker/serializers/project-report-timer.js","timetracker/serializers/project.js","timetracker/serializers/timer.js","timetracker/serializers/user-report-timer.js","timetracker/serializers/user.js","timetracker/services/ajax.js","timetracker/services/i18n.js","timetracker/services/login-service.js","timetracker/services/media.js","timetracker/services/metrics.js","timetracker/services/raven.js","timetracker/services/sync-service.js","timetracker/templates/application-loading.js","timetracker/templates/application.js","timetracker/templates/authenticated.js","timetracker/templates/authenticated/features.js","timetracker/templates/authenticated/features/features-sidebar.js","timetracker/templates/authenticated/features/reports.js","timetracker/templates/authenticated/features/timeline.js","timetracker/templates/authenticated/features/timers.js","timetracker/templates/authenticated/manage.js","timetracker/templates/authenticated/manage/administration.js","timetracker/templates/authenticated/manage/manage-sidebar.js","timetracker/templates/authenticated/manage/profile.js","timetracker/templates/components/edit-profile.js","timetracker/templates/components/login-form.js","timetracker/templates/components/new-timer-list.js","timetracker/templates/components/project-administration.js","timetracker/templates/components/recent-timers.js","timetracker/templates/components/report-parameters.js","timetracker/templates/components/report-table.js","timetracker/templates/components/time-picker.js","timetracker/templates/components/timeline-view-component.js","timetracker/templates/components/tt-table.js","timetracker/templates/components/ui-accordion.js","timetracker/templates/components/ui-checkbox.js","timetracker/templates/components/ui-dimmer.js","timetracker/templates/components/ui-dropdown.js","timetracker/templates/components/ui-embed.js","timetracker/templates/components/ui-modal.js","timetracker/templates/components/ui-nag.js","timetracker/templates/components/ui-popup.js","timetracker/templates/components/ui-progress.js","timetracker/templates/components/ui-radio.js","timetracker/templates/components/ui-rating.js","timetracker/templates/components/ui-search.js","timetracker/templates/components/ui-shape.js","timetracker/templates/components/ui-sidebar.js","timetracker/templates/components/ui-sticky.js","timetracker/templates/components/user-administration.js","timetracker/templates/login.js","timetracker/templates/not-found.js","timetracker/templates/unauthorized.js","timetracker/utils/analytics.js","timetracker/utils/application-setup.js","timetracker/utils/can-use-dom.js","timetracker/utils/get-promise-content.js","timetracker/utils/i18n/compile-template.js","timetracker/utils/i18n/missing-message.js","timetracker/utils/is-fulfilled.js","timetracker/utils/is-promise.js","timetracker/utils/logger.js","timetracker/utils/network-error-event-broadcast.js","timetracker/utils/network-error-handler.js","timetracker/utils/network-request.js","timetracker/utils/object-transforms.js","timetracker/utils/recent-timers-aggregate.js","timetracker/utils/smart-resolve.js","timetracker/utils/string-util.js","timetracker/utils/sync-modal-handler-util.js","timetracker/utils/timeline-util.js","timetracker/utils/timer-util.js","timetracker/utils/uuid-generator.js","vendor/ember-cli/app-suffix.js","vendor/ember-cli/app-config.js","vendor/ember-cli/app-boot.js"],"sourcesContent":["\"use strict\";\n\n\n","define('timetracker/adapters/admin-project', ['exports', 'timetracker/adapters/project'], function (exports, _project) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _project.default;\n});","define('timetracker/adapters/admin-user', ['exports', 'timetracker/adapters/user'], function (exports, _user) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _user.default;\n});","define('timetracker/adapters/application', ['exports', 'ember-data', 'timetracker/config/environment', 'timetracker/utils/network-request', 'timetracker/utils/network-error-handler'], function (exports, _emberData, _environment, _networkRequest, _networkErrorHandler) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberData.default.Adapter.extend({\n    // url of the resource\n    host: _environment.default.APP.host,\n    // apiVersion in the url for the resource\n    apiVersion: _environment.default.APP.apiVersion,\n\n    buildURL: function buildURL() {\n      return _networkRequest.default.buildURL.apply(_networkRequest.default, arguments);\n    },\n\n\n    /**\n     sendAjax method is used to send ajax request to the server.\n     It sends an http request, waits for the response, on successful response\n     returns the data on the response\n     @method sendAjax\n     @param {string} url\n     the url of the server\n     @param {string} requestMethod\n     the type of request method to be used\n     @param {object} options\n     if the request has optional body to be send, it is passed as data\n     @return {promise}\n     Returns a promise object that if succeeds resolves to payload\n     */\n    sendAjax: function sendAjax(url, requestMethod, options) {\n      var hash = this.setRequestParameters(url, requestMethod, options);\n      return _networkRequest.default.makeAPIRequest(hash).then(function (response) {\n        return response;\n      }, function (reason) {\n        var error = new _emberData.default.AdapterError(_networkErrorHandler.default.handleErrorResponse(reason, url));\n        return Ember.RSVP.Promise.reject(error);\n      });\n    },\n    setRequestParameters: function setRequestParameters() {\n      return _networkRequest.default.setRequestParameters.apply(_networkRequest.default, arguments);\n    }\n  });\n});","define('timetracker/adapters/project-report-timer', ['exports', 'timetracker/adapters/application'], function (exports, _application) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _application.default.extend({\n\n    /**\n     This method is invoked by store for query method on store\n     @method query\n     @param {string} store\n     Store class that invoked the method\n     @param {string} type\n     Type of request method\n     @param {object} params\n     Extra parameters for method, contains data to be send, query parameters.\n     @return {Promise} a promise from ajax request defined in application adapter\n     */\n    query: function query(store, type, params) {\n      var queryParams = {\n        projectId: params.data.reportFor.get('id'),\n        from: params.data.fromDate,\n        to: params.data.toDate\n      };\n      var url = this.buildURL('projectReport', queryParams);\n      return this.sendAjax(url, 'GET');\n    }\n  });\n});","define('timetracker/adapters/project', ['exports', 'timetracker/adapters/application'], function (exports, _application) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _application.default.extend({\n    findAll: function findAll(store, type, changeToken) {\n      var queryParams = void 0;\n      if (changeToken) {\n        queryParams = {\n          changeToken: changeToken\n        };\n      }\n      var url = this.buildURL('getProjects', queryParams);\n      return this.sendAjax(url, 'GET');\n    },\n    createRecord: function createRecord(store, type, snapshot) {\n      var url = this.buildURL('createProject');\n      var record = snapshot.record;\n      var data = {\n        projectId: record.get('projectId'),\n        name: record.get('name'),\n        colorCode: record.get('colorCode'),\n        archived: record.get('archived'),\n        userIds: record.get('userIds')\n      };\n      return this.sendAjax(url, 'POST', { data: data });\n    },\n    updateRecord: function updateRecord(store, type, snapshot) {\n      var url = this.buildURL('updateProject');\n      var record = snapshot.record;\n      var data = {\n        projectId: record.get('projectId'),\n        name: record.get('name'),\n        colorCode: record.get('colorCode'),\n        archived: record.get('archived'),\n        changeToken: record.get('changeToken'),\n        userIds: record.get('userIds')\n      };\n      return this.sendAjax(url, 'POST', { data: data });\n    }\n  });\n});","define('timetracker/adapters/timer', ['exports', 'timetracker/adapters/application', 'moment'], function (exports, _application, _moment) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _application.default.extend({\n    findAll: function findAll(store, type, changeToken) {\n      var queryParams = void 0;\n      if (changeToken) {\n        queryParams = {\n          changeToken: changeToken\n        };\n      }\n      var url = this.buildURL('getTimers', queryParams);\n      return this.sendAjax(url, 'GET');\n    },\n    createRecord: function createRecord(store, type, snapshot) {\n      var url = this.buildURL('createTimer');\n      var record = snapshot.record;\n      var data = {\n        timerId: record.get('timerId'),\n        projectId: record.get('projectId'),\n        startTime: (0, _moment.default)(record.get('startTime')).format(),\n        endTime: record.get('endTime') ? (0, _moment.default)(record.get('endTime')).format() : null,\n        archived: record.get('archived')\n      };\n      return this.sendAjax(url, 'POST', { data: data });\n    },\n    updateRecord: function updateRecord(store, type, snapshot) {\n      var url = this.buildURL('updateTimer');\n      var record = snapshot.record;\n      var data = {\n        timerId: record.get('id'),\n        projectId: record.get('projectId'),\n        startTime: (0, _moment.default)(record.get('startTime')).format(),\n        endTime: record.get('endTime') ? (0, _moment.default)(record.get('endTime')).format() : null,\n        archived: record.get('archived'),\n        changeToken: record.get('changeToken')\n      };\n      return this.sendAjax(url, 'POST', { data: data });\n    }\n  });\n});","define('timetracker/adapters/user-report-timer', ['exports', 'timetracker/adapters/application'], function (exports, _application) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _application.default.extend({\n\n    /**\n     This method is invoked by store for query method on store\n     @method query\n     @param {string} store\n     Store class that invoked the method\n     @param {string} type\n     Type of request method\n     @param {object} params\n     Extra parameters for method, contains data to be send, query parameters.\n     @return {Promise} a promise from ajax request defined in application adapter\n     */\n    query: function query(store, type, params) {\n      var queryParams = {\n        userId: params.data.reportFor.id,\n        from: params.data.fromDate,\n        to: params.data.toDate\n      };\n      var url = this.buildURL('userReport', queryParams);\n      return this.sendAjax(url, 'GET');\n    }\n  });\n});","define('timetracker/adapters/user', ['exports', 'timetracker/adapters/application'], function (exports, _application) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _application.default.extend({\n    findAll: function findAll() {\n      var url = this.buildURL('getUsers');\n      return this.sendAjax(url, 'GET');\n    },\n    createRecord: function createRecord(store, type, snapshot) {\n      var url = this.buildURL('createUser');\n      var record = snapshot.record;\n      var data = {\n        userId: record.get('userId'),\n        password: record.get('password'),\n        name: record.get('name'),\n        emailId: record.get('emailId'),\n        disabled: record.get('disabled'),\n        passwordChangeRequired: record.get('passwordChangeRequired'),\n        canManageProjects: record.get('canManageProjects'),\n        canManageUsers: record.get('canManageUsers'),\n        canChangeBillingDetails: record.get('canChangeBillingDetails')\n      };\n      return this.sendAjax(url, 'POST', { data: data });\n    },\n    updateRecord: function updateRecord(store, type, snapshot) {\n      var url = this.buildURL('updateUser');\n      var record = snapshot.record;\n      var data = {\n        userId: record.get('userId'),\n        name: record.get('name'),\n        emailId: record.get('emailId'),\n        disabled: record.get('disabled'),\n        passwordChangeRequired: record.get('passwordChangeRequired'),\n        canManageProjects: record.get('canManageProjects'),\n        canManageUsers: record.get('canManageUsers'),\n        canChangeBillingDetails: record.get('canChangeBillingDetails')\n      };\n      return this.sendAjax(url, 'POST', { data: data });\n    }\n  });\n});","define('timetracker/app', ['exports', 'timetracker/resolver', 'ember-load-initializers', 'timetracker/config/environment'], function (exports, _resolver, _emberLoadInitializers, _environment) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  var App = Ember.Application.extend({\n    modulePrefix: _environment.default.modulePrefix,\n    podModulePrefix: _environment.default.podModulePrefix,\n    Resolver: _resolver.default\n  });\n\n  (0, _emberLoadInitializers.default)(App, _environment.default.modulePrefix);\n\n  exports.default = App;\n});","define('timetracker/breakpoints', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    mobile: '(max-width: 767px)',\n    tablet: '(min-width: 768px) and (max-width: 991px)',\n    desktop: '(min-width: 992px) and (max-width: 1200px)'\n  };\n});","define('timetracker/components/edit-profile', ['exports', 'timetracker/utils/network-request', 'timetracker/constants', 'timetracker/utils/logger', 'timetracker/utils/string-util'], function (exports, _networkRequest, _constants, _logger, _stringUtil) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Component.extend({\n\n    oldPassword: null,\n    newPassword: null,\n    confirmedPassword: null,\n    userName: null,\n    userEmail: null,\n\n    enablePasswordUpdate: Ember.observer('oldPassword', 'newPassword', 'confirmedPassword', function () {\n      var _getProperties = this.getProperties('oldPassword', 'newPassword', 'confirmedPassword'),\n          oldPassword = _getProperties.oldPassword,\n          newPassword = _getProperties.newPassword,\n          confirmedPassword = _getProperties.confirmedPassword;\n\n      var buttonRef = Ember.$('.update-password-button');\n      var confirmPasswordInputRef = Ember.$('.confirmPasswordInput');\n      var oldPasswordInputRef = Ember.$('.oldPasswordInput');\n      var oldPasswordMessageRef = Ember.$('.wrong-old-password-message');\n      var confirmPasswordMessageRef = Ember.$('.confirm-password-error-message');\n      if (oldPassword && newPassword && confirmedPassword) {\n        this.toggleInputErrorState(oldPasswordInputRef, false, oldPasswordMessageRef);\n        Ember.$('.message.change-password-success').addClass('hidden');\n        if (newPassword === confirmedPassword) {\n          this.toggleInputErrorState(confirmPasswordInputRef, false, confirmPasswordMessageRef);\n          return this._enableButton(buttonRef);\n        }\n        this.toggleInputErrorState(confirmPasswordInputRef, true, confirmPasswordMessageRef);\n        return this._disableButton(buttonRef);\n      }\n      this.toggleInputErrorState(confirmPasswordInputRef, false, confirmPasswordMessageRef);\n      this._disableButton(buttonRef);\n    }),\n\n    enableNameUpdateButton: Ember.observer('userName', function () {\n      var name = this.get('userName');\n      var buttonRef = Ember.$('.update-name-button');\n      Ember.$('.message.change-name-success').addClass('hidden');\n      Ember.$('.message.change-name-failure').addClass('hidden');\n      if (name) {\n        return this._enableButton(buttonRef);\n      }\n      this._disableButton(buttonRef);\n    }),\n\n    didReceiveAttrs: function didReceiveAttrs() {\n      var user = this.get('user');\n      this.setProperties({\n        userName: user.name,\n        userEmail: user.emailId\n      });\n    },\n\n\n    actions: {\n      updatePassword: function updatePassword() {\n        var _this = this;\n\n        var buttonRef = Ember.$('.update-password-button');\n        var path = 'changePassword';\n        var data = {\n          oldPassword: this.get('oldPassword'),\n          newPassword: this.get('newPassword')\n        };\n        this._showSpinner(buttonRef);\n        this._disableButton(buttonRef);\n        this._sendRequest(path, 'POST', data).then(function () {\n          _this.setProperties({\n            oldPassword: null,\n            newPassword: null,\n            confirmedPassword: null\n          });\n          Ember.$('.message.change-password-success').removeClass('hidden');\n          _this._hideSpinner(buttonRef);\n        }).catch(function (reason) {\n          if (reason.status === _constants.default.RESPONSE_CODES.UNAUTHORIZED_ERROR) {\n            _this.set('oldPassword', null);\n            var oldPasswordInputRef = Ember.$('.oldPasswordInput');\n            var messageRef = Ember.$('.message.wrong-old-password-message');\n            _this.toggleInputErrorState(oldPasswordInputRef, true, messageRef);\n            oldPasswordInputRef.focus();\n            _this._hideSpinner(buttonRef);\n          } else {\n            _logger.default.debug('Unknown status code: ' + reason.status);\n            _this._hideSpinner(buttonRef);\n          }\n        });\n      },\n      updateName: function updateName() {\n        var _this2 = this;\n\n        var buttonRef = Ember.$('.update-name-button');\n        var path = 'changeName';\n        var newName = this.get('userName');\n        var data = {\n          name: _stringUtil.default.condenseSpace(newName)\n        };\n        this._showSpinner(buttonRef);\n        this._disableButton(buttonRef);\n        this._sendRequest(path, 'POST', data).then(function () {\n          Ember.$('.message.change-name-success').removeClass('hidden');\n          _this2._hideSpinner(buttonRef);\n          _this2.set('user.name', newName);\n        }).catch(function (reason) {\n          Ember.$('.message.change-name-failure').removeClass('hidden');\n          _this2._hideSpinner(buttonRef);\n          _logger.default.debug('Update Name failure status code: ' + reason.status);\n        });\n      }\n    },\n\n    _sendRequest: function _sendRequest(path, method, data) {\n      var url = _networkRequest.default.buildURL(path);\n      var hash = _networkRequest.default.setRequestParameters(url, method, { data: data });\n      return _networkRequest.default.makeAPIRequest(hash);\n    },\n\n\n    _showSpinner: function _showSpinner(buttonRef) {\n      buttonRef.find('.button-spinner').css('display', 'block');\n      buttonRef.find('.button-text').css('display', 'none');\n    },\n\n    _hideSpinner: function _hideSpinner(buttonRef) {\n      buttonRef.find('.button-spinner').css('display', 'none');\n      buttonRef.find('.button-text').css('display', 'block');\n    },\n\n    _enableButton: function _enableButton(buttonRef) {\n      buttonRef.prop('disabled', false);\n    },\n    _disableButton: function _disableButton(buttonRef) {\n      buttonRef.prop('disabled', true);\n    },\n    toggleInputErrorState: function toggleInputErrorState(inputRef, errorState, messageRef) {\n      if (errorState) {\n        inputRef.addClass('input-error-state');\n        messageRef.removeClass('hidden');\n      } else {\n        inputRef.removeClass('input-error-state');\n        messageRef.addClass('hidden');\n      }\n    }\n  });\n});","define('timetracker/components/full-calendar', ['exports', 'ember-fullcalendar/components/full-calendar'], function (exports, _fullCalendar) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _fullCalendar.default;\n    }\n  });\n});","define('timetracker/components/login-form', ['exports', 'timetracker/constants', 'timetracker/utils/logger', 'timetracker/utils/string-util', 'timetracker/utils/analytics'], function (exports, _constants, _logger, _stringUtil, _analytics) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Component.extend({\n\n    loginErrorMessage: null,\n    modalErrorMessage: null,\n\n    teamName: null,\n    emailId: null,\n    password: null,\n\n    i18n: Ember.inject.service(),\n    metrics: Ember.inject.service(),\n\n    inputsObserver: Ember.observer('teamName', 'emailId', 'password', function () {\n      var _getProperties = this.getProperties('teamName', 'emailId', 'password'),\n          teamName = _getProperties.teamName,\n          emailId = _getProperties.emailId,\n          password = _getProperties.password;\n\n      if (teamName && emailId && password) {\n        this._enableLogin();\n        this._clearLoginErrorMessage();\n      } else if (!teamName || !emailId || !password) {\n        this._disableLogin();\n      }\n    }),\n\n    actions: {\n\n      didClickOnLogin: function didClickOnLogin() {\n        this._clearLoginErrorMessage();\n        var condensedTeamName = _stringUtil.default.condenseSpace(this.get('teamName'));\n        var condensedEmailId = _stringUtil.default.condenseSpace(this.get('emailId'));\n        var password = this.get('password');\n        this._login({ teamName: condensedTeamName, emailId: condensedEmailId, password: password });\n      },\n\n      openForgotPasswordModal: function openForgotPasswordModal() {\n        var self = this;\n        Ember.$('.forgot-password-modal').modal({\n          onApprove: function onApprove() {\n            var teamName = self.get('teamName');\n            var emailId = self.get('emailId');\n            Ember.$('.forgot-password-modal input').removeClass('error');\n            if (!teamName || !emailId) {\n              if (!teamName) {\n                self.set('teamName', '');\n                Ember.$('.forgot-password-modal input.team').addClass('error');\n              }\n              if (!emailId) {\n                self.set('emailId', '');\n                Ember.$('.forgot-password-modal input.email').addClass('error');\n              }\n              return false;\n            }\n            var condensedTeamName = _stringUtil.default.condenseSpace(teamName);\n            var condensedEmailId = _stringUtil.default.condenseSpace(emailId);\n            self.get('forgotPassword')(condensedEmailId, condensedTeamName).then(function () {\n              Ember.$('.forgot-password-modal').modal('hide');\n            }).catch(function (reason) {\n              var message = self._makeErrorMessageForFailedRequest(reason);\n              self.setModalErrorMessage(message);\n            });\n            return false;\n          },\n          onHide: function onHide() {\n            self._disableLogin();\n            self.set('modalErrorMessage', null);\n          }\n        }).modal('show');\n      }\n    },\n\n    _clearLoginErrorMessage: function _clearLoginErrorMessage() {\n      this.set('loginErrorMessage', null);\n    },\n\n    _setLoginErrorMessage: function _setLoginErrorMessage(message) {\n      this.set('loginErrorMessage', message);\n    },\n\n    setModalErrorMessage: function setModalErrorMessage(message) {\n      this.set('modalErrorMessage', message);\n    },\n\n    _login: function _login(loginCredentials) {\n      var _this = this;\n\n      // Disable 'Sign In' button until the server responds and show spinner\n      this._showSpinner();\n      // call login action in the containing route\n      // handle errors here and let route handle the success\n      this.get('login')(loginCredentials).then(function () {\n        _analytics.default.sendSuccessfulLoginEvent(_this.get('metrics'));\n      }).catch(function (reason) {\n        // Set error message on login failure\n        var message = _this._makeErrorMessageForFailedRequest(reason);\n        _this._setLoginErrorMessage(message);\n        _this._hideSpinner();\n        _analytics.default.sendFailedLoginEvent(_this.get('metrics'));\n      });\n    },\n\n    _makeErrorMessageForFailedRequest: function _makeErrorMessageForFailedRequest(failureReason) {\n      var statusCode = failureReason.status;\n      var errorMessage = void 0;\n      var emptyErrorCode = '';\n      var errorCode = failureReason.responseJSON ? failureReason.responseJSON.errorCode : emptyErrorCode;\n      var i18n = this.get('i18n');\n      var responseCode = _constants.default.RESPONSE_CODES;\n      if (statusCode === responseCode.UNAUTHORIZED_ERROR) {\n        switch (errorCode) {\n          case _constants.default.RESPONSE_401_ERRORS.INVALID_CREDENTIALS:\n          case emptyErrorCode:\n            errorMessage = i18n.t('messages.unauthorizedLogin');\n            break;\n          case _constants.default.RESPONSE_401_ERRORS.USER_DISABLED:\n            errorMessage = i18n.t('messages.userIsDisabled');\n            break;\n          default:\n            _logger.default.error('Unknown error code: ' + errorCode);\n        }\n      } else if (statusCode === responseCode.BAD_REQUEST) {\n        switch (errorCode) {\n          case _constants.default.RESPONSE_400_ERRORS.TOO_MANY_ATTEMPTS:\n            errorMessage = i18n.t('messages.tooManyAttemptsForgotPassword');\n            break;\n          case _constants.default.RESPONSE_400_ERRORS.USER_DOES_NOT_EXIST:\n            errorMessage = i18n.t('messages.userDoesNotExistForgotPasssword');\n            break;\n          case _constants.default.RESPONSE_400_ERRORS.EMAIL_ID_NOT_VERIFIED:\n            this._showEmailNotVerifiedModal();\n            break;\n          case emptyErrorCode:\n            errorMessage = i18n.t('messages.genericError');\n            break;\n          default:\n            _logger.default.error('Unknown error code: ' + errorCode);\n        }\n      } else if (statusCode === responseCode.SERVER_ERROR) {\n        errorMessage = i18n.t('messages.genericError');\n      } else if (statusCode === responseCode.SERVICE_UNAVAILABLE_502 || statusCode === responseCode.SERVICE_UNAVAILABLE_503) {\n        errorMessage = i18n.t('messages.serviceUnavailable');\n      } else if (statusCode === responseCode.NETWORK_ERROR) {\n        errorMessage = i18n.t('messages.networkError');\n      } else {\n        errorMessage = i18n.t('messages.unexpectedError');\n        _logger.default.error('Unknown status code: ' + statusCode);\n      }\n      if (statusCode !== responseCode.UNAUTHORIZED_ERROR) {\n        this._enableLogin();\n      }\n      return errorMessage;\n    },\n\n    _showEmailNotVerifiedModal: function _showEmailNotVerifiedModal() {\n      var self = this;\n      Ember.$('.modal.ui.email-not-verified').modal({\n        closable: false,\n        onApprove: function onApprove() {\n          var email = self.get('emailId');\n          var team = self.get('teamName');\n          self.get('resendVerifyEmail')(email, team);\n        }\n      }).modal('show');\n    },\n\n\n    _showSpinner: function _showSpinner() {\n      this._disableLogin();\n      Ember.$('.login-button-spinner').css('display', 'block');\n      Ember.$('.login-button-text').css('display', 'none');\n    },\n\n    _hideSpinner: function _hideSpinner() {\n      // Show 'Sign In' and hide spinner\n      Ember.$('.login-button-spinner').css('display', 'none');\n      Ember.$('.login-button-text').css('display', 'inline');\n    },\n\n    _enableLogin: function _enableLogin() {\n      Ember.$('.login-button').prop('disabled', false);\n    },\n    _disableLogin: function _disableLogin() {\n      Ember.$('.login-button').prop('disabled', true);\n    }\n  });\n});","define('timetracker/components/new-timer-list', ['exports', 'timetracker/constants'], function (exports, _constants) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Component.extend({\n\n    projectListViewData: null,\n    searchText: null,\n\n    i18n: Ember.inject.service(),\n    loginService: Ember.inject.service(),\n\n    actions: {\n      pushProjectsButtonLeft: function pushProjectsButtonLeft() {\n        Ember.$('#sidebar-toggle-button').removeClass('moving-button-out');\n        Ember.$('#sidebar-toggle-button').addClass('moving-button-in');\n      },\n      pushProjectsButtonRight: function pushProjectsButtonRight() {\n        Ember.$('#sidebar-toggle-button').removeClass('moving-button-in');\n        Ember.$('#sidebar-toggle-button').addClass('moving-button-out');\n      }\n    },\n\n    didRender: function didRender() {\n      this.createProjectList();\n    },\n\n    willDestroy: function willDestroy() {\n      Ember.$(this.get('element')).empty();\n    },\n    willUpdate: function willUpdate() {\n      Ember.$('.sidebar-projects-list').empty();\n    },\n    _startNewTimer: function _startNewTimer(project) {\n      var selectedProject = {\n        projectId: project.get('id'),\n        name: project.get('name'),\n        colorCode: project.get('colorCode')\n      };\n      this.sendAction('timerClicked', selectedProject);\n      Ember.$('#projects-sidebar').sidebar('hide');\n    },\n\n\n    createProjectList: function createProjectList() {\n      var sidebarMenu = Ember.$('.sidebar-projects-list');\n      var projects = this.get('allProjects');\n      var i18n = this.get('i18n');\n      var self = this;\n      if (projects.length === 0) {\n        if (this.get('loginService').user.canManageProjects) {\n          sidebarMenu.append(this.createTagForMessage(i18n.t('messages.emptyProjectsAdminMessage'), 'div'));\n          var link = this.createTagForMessage(i18n.t('messages.emptyProjectsAdminLink'), 'a');\n          Ember.$(link).click(function () {\n            self.sendAction('transitionToAdminPage');\n          });\n          return sidebarMenu.append(link);\n        }\n        return sidebarMenu.append(this.createTagForMessage(i18n.t('messages.emptyProjectsNonAdmin'), 'div'));\n      }\n      var searchText = this.get('searchText');\n      var filteredProjects = void 0;\n      if (searchText) {\n        var searchExpression = new RegExp(this.get('searchText'), 'i');\n        filteredProjects = projects.filter(function (item) {\n          return item.get('name').search(searchExpression) >= 0;\n        });\n        if (filteredProjects.length === 0) {\n          return sidebarMenu.append(this.createTagForMessage(i18n.t('messages.emptyProjectsSearch'), 'div'));\n        }\n      } else {\n        filteredProjects = projects;\n      }\n\n      var _loop = function _loop(i, l) {\n        var record = filteredProjects[i];\n        var div = document.createElement('div');\n        var divRef = Ember.$(div);\n        var projectColor = _constants.default.PROJECT_COLORS[record.get('colorCode')];\n        divRef.addClass('projects-list-item');\n        divRef.prop('title', 'start timer for ' + record.get('name'));\n        var colorBox = document.createElement('div');\n        var colorBoxRef = Ember.$(colorBox);\n        colorBoxRef.addClass('projects-sidebar-list-color-box');\n        colorBoxRef.css('backgroundColor', projectColor);\n        div.appendChild(colorBox);\n        var projectName = document.createTextNode(record.get('name'));\n        var span = document.createElement('span');\n        var spanRef = Ember.$(span);\n        spanRef.addClass('project-sidebar-list-text');\n        span.appendChild(projectName);\n        div.appendChild(span);\n        div.onclick = function () {\n          self._startNewTimer(record);\n        };\n        sidebarMenu.append(div);\n      };\n\n      for (var i = 0, l = filteredProjects.length; i < l; i++) {\n        _loop(i, l);\n      }\n    },\n\n    createTagForMessage: function createTagForMessage(message) {\n      var tagType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'div';\n\n      var tag = document.createElement(tagType);\n      var tagRef = Ember.$(tag);\n      tagRef.addClass('empty-projects-message');\n      tagRef.append(document.createTextNode(message));\n      return tag;\n    }\n  });\n});","define('timetracker/components/pikaday-input', ['exports', 'ember-pikaday/components/pikaday-input'], function (exports, _pikadayInput) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _pikadayInput.default;\n});","define('timetracker/components/pikaday-inputless', ['exports', 'ember-pikaday/components/pikaday-inputless'], function (exports, _pikadayInputless) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _pikadayInputless.default;\n    }\n  });\n});","define('timetracker/components/project-administration', ['exports', 'timetracker/constants', 'ember-uuid', 'timetracker/utils/string-util', 'timetracker/utils/analytics'], function (exports, _constants, _emberUuid, _stringUtil, _analytics) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Component.extend({\n\n    store: Ember.inject.service(),\n    metrics: Ember.inject.service(),\n\n    projectSearchText: '',\n    userSearchText: '',\n    projectList: null,\n    selectedProject: null,\n    projectName: '',\n    projectColor: '',\n    usersInProject: [],\n    disabledUsersInProject: [],\n    usersSearchList: [],\n    projectUsersList: [],\n    isEditMode: false,\n    isNewProject: false,\n    userToAdd: null,\n    isColorPickerInitialized: false,\n    updateMS: 100,\n    projects: null,\n    users: null,\n\n    allUsersShowed: true,\n\n    didReceiveAttrs: function didReceiveAttrs() {\n      this.set('projectList', Ember.copy(this.get('projects').sortBy('name'), false));\n    },\n    toggleAllUsers: function toggleAllUsers(shouldShow) {\n      if (!this.get('isEditMode')) {\n        return;\n      }\n      var isVisible = this.get('allUsersShowed');\n      if (shouldShow === isVisible) {\n        return;\n      }\n      var checkboxRef = Ember.$('.users-in-project-list-container .all-users');\n      checkboxRef.transition('slide right');\n      this.set('allUsersShowed', shouldShow);\n    },\n\n\n    actions: {\n      searchProjects: function searchProjects() {\n        this.set('projectList', _stringUtil.default.searchList(this.get('projects'), this.get('projectSearchText')));\n      },\n      searchUsers: function searchUsers() {\n        var searchText = this.get('userSearchText');\n        this.toggleAllUsers(searchText.length === 0);\n        var filterList = _stringUtil.default.searchList(this.get('usersSearchList'), searchText);\n        var userList = this.get('isEditMode') ? 'projectUsersList' : 'usersInProject';\n        this.set(userList, filterList);\n      },\n      projectSelected: function projectSelected(project) {\n        this.clearErrorMessages();\n        this.initializeSelectedProject(project);\n      },\n      enableEditing: function enableEditing() {\n        this.clearErrorMessages();\n        var enabledUsers = this.get('users').sortBy('name').filterBy('disabled', false);\n        var isNewProject = this.get('isNewProject');\n        var currentUser = this.get('users').findBy('id', this.get('currentUser').userId);\n        this.setProperties({\n          isEditMode: true,\n          projectUsersList: Ember.copy(enabledUsers, false),\n          userSearchText: '',\n          usersSearchList: Ember.copy(enabledUsers, false),\n          usersInProject: isNewProject ? [currentUser] : this.getActiveUsersInProject(this.get('selectedProject'))\n        });\n        this.checkExistingUsersInProject();\n        Ember.run.later(this, function () {\n          this.updateProjectColorDiv();\n          this.initializeColorPicker();\n          this.initializeCheckboxes();\n        }, this.get('updateMS'));\n      },\n      cancelEditing: function cancelEditing() {\n        this.clearErrorMessages();\n        var isNewProject = this.get('isNewProject');\n        if (!isNewProject) {\n          this.initializeSelectedProject(this.get('selectedProject'));\n        } else {\n          this.setProperties({\n            selectedProject: null,\n            isColorPickerInitialized: false,\n            isNewProject: false\n          });\n        }\n      },\n      addProject: function addProject() {\n        this.setProperties({\n          isNewProject: true,\n          selectedProject: {},\n          projectName: '',\n          projectColor: _constants.default.DEFAULT_PROJECT_COLOR,\n          projectSearchText: '',\n          projectList: Ember.copy(this.get('projects').sortBy('name'), false)\n        });\n        this.send('enableEditing');\n      },\n      changeColor: function changeColor(text, selectedColor) {\n        this.set('projectColor', selectedColor);\n        this.updateProjectColorDiv();\n      },\n      saveProject: function saveProject() {\n        var isNewProject = this.get('isNewProject');\n\n        var _getProperties = this.getProperties('projectName', 'projectColor', 'selectedProject'),\n            projectName = _getProperties.projectName,\n            projectColor = _getProperties.projectColor,\n            selectedProject = _getProperties.selectedProject;\n\n        this.clearErrorMessages();\n        var condensedProjectName = projectName ? _stringUtil.default.condenseSpace(projectName) : '';\n        if (!projectName || condensedProjectName.length <= 0) {\n          this.set('projectName', null);\n          return Ember.$('.project-name-required').removeClass('hidden');\n        }\n        var selectedUsers = this.get('usersSearchList').filterBy('checked', true);\n        if (selectedUsers.length === 0) {\n          return Ember.$('.empty-user-list').removeClass('hidden');\n        }\n        var doesNameAlreadyExist = this.get('projects').any(function (item) {\n          if (isNewProject) {\n            return item.get('name') === condensedProjectName;\n          }\n          return item.get('name') === condensedProjectName && selectedProject.get('projectId') !== item.id;\n        });\n        if (doesNameAlreadyExist) {\n          return Ember.$('.project-name-exist').removeClass('hidden');\n        }\n        this.executeProjectSave(condensedProjectName, projectColor, selectedUsers);\n      },\n      archiveUnarchiveClicked: function archiveUnarchiveClicked() {\n        var selectedProject = this.get('selectedProject');\n        selectedProject.set('archived', !selectedProject.get('archived'));\n        selectedProject.save().catch(function () {\n          selectedProject.rollbackAttributes();\n        });\n      }\n    },\n\n    clearErrorMessages: function clearErrorMessages() {\n      Ember.$('.project-name-required, .project-name-exist, .empty-user-list').addClass('hidden');\n    },\n    updateProjectColorDiv: function updateProjectColorDiv() {\n      var color = _constants.default.PROJECT_COLORS[this.get('projectColor')];\n      Ember.$('#selected-project-color').css('background-color', color);\n    },\n    checkExistingUsersInProject: function checkExistingUsersInProject() {\n      var projectUsersList = this.get('projectUsersList');\n      var usersInProject = this.get('usersInProject');\n      projectUsersList.forEach(function (user) {\n        user.set('checked', usersInProject.includes(user));\n      });\n      this.set('projectUsersList', projectUsersList);\n    },\n    initializeColorPicker: function initializeColorPicker() {\n      if (this.get('isColorPickerInitialized')) {\n        return;\n      }\n      Ember.run.later(this, function () {\n        var colorPickerRef = Ember.$('.menu.project-color-container');\n        var colors = _constants.default.PROJECT_COLORS;\n        for (var key in colors) {\n          var colorBox = document.createElement('span');\n          var colorBoxRef = Ember.$(colorBox);\n          colorBoxRef.addClass('color-rectangle item');\n          colorBoxRef.css('backgroundColor', colors[key]);\n          colorBoxRef.attr('data-value', key);\n          colorPickerRef.append(colorBox);\n        }\n        this.set('isColorPickerInitialized', true);\n      }, this.get('updateMS'));\n    },\n    getActiveUsersInProject: function getActiveUsersInProject(project) {\n      var currentUserListIds = project.get('userIds');\n      return this.get('users').filter(function (user) {\n        return currentUserListIds.indexOf(user.id) >= 0 && user.get('disabled') === false;\n      }).sortBy('name');\n    },\n    initializeSelectedProject: function initializeSelectedProject(project) {\n      var currentUserListIds = project.get('userIds');\n      var activeUsersInProject = this.getActiveUsersInProject(project);\n      var disabledUsersInProject = this.get('users').filter(function (user) {\n        return currentUserListIds.indexOf(user.id) >= 0 && user.get('disabled') === true;\n      });\n      this.setProperties({\n        selectedProject: project,\n        projectName: project.get('name'),\n        projectColor: project.get('colorCode'),\n        disabledUsersInProject: disabledUsersInProject,\n        usersInProject: activeUsersInProject,\n        usersSearchList: activeUsersInProject,\n        userSearchText: '',\n        isNewProject: false,\n        isEditMode: false\n      });\n      Ember.run.later(this, function () {\n        this.updateProjectColorDiv();\n      }, this.get('updateMS'));\n    },\n    initializeCheckboxes: function initializeCheckboxes() {\n      var selectAllCheckbox = Ember.$('.all-users .ui.checkbox');\n      var userListCheckboxes = Ember.$('.users-in-project-list-content .ui.checkbox');\n      var self = this;\n      selectAllCheckbox.checkbox({\n        onChange: function onChange() {\n          var shouldSelectAll = selectAllCheckbox.checkbox('is checked');\n          var users = self.get('usersSearchList').sortBy('name');\n          users.setEach('checked', shouldSelectAll);\n          self.setProperties({ usersSearchList: users, projectUsersList: users, userSearchText: '' });\n        }\n      });\n\n      this.updateAllUserCheckbox(userListCheckboxes, selectAllCheckbox);\n      userListCheckboxes.checkbox({\n        onChange: function onChange() {\n          self.updateAllUserCheckbox(userListCheckboxes, selectAllCheckbox);\n        }\n      });\n    },\n    updateAllUserCheckbox: function updateAllUserCheckbox(userListCheckboxes, selectAllCheckbox) {\n      var isSingleUser = userListCheckboxes.length === 1;\n      var checkedListBoolean = userListCheckboxes.checkbox('is checked');\n      checkedListBoolean = isSingleUser ? [checkedListBoolean] : checkedListBoolean;\n      var isAnyChecked = checkedListBoolean.indexOf(true);\n      var isAnyUnchecked = checkedListBoolean.indexOf(false);\n      if (isAnyChecked >= 0 && isAnyUnchecked < 0) {\n        selectAllCheckbox.checkbox('set checked');\n      } else if (isAnyUnchecked >= 0 && isAnyChecked < 0) {\n        selectAllCheckbox.checkbox('set unchecked');\n      } else {\n        selectAllCheckbox.checkbox('set indeterminate');\n      }\n    },\n    executeProjectSave: function executeProjectSave(projectName, projectColor, usersInProject) {\n      var store = this.get('store');\n      var selectedProject = this.get('selectedProject');\n      var userIds = [];\n      var projectId = void 0;\n      var self = this;\n      var disabledUsersInProject = this.get('disabledUsersInProject');\n      usersInProject.forEach(function (user) {\n        return userIds.push(user.id);\n      });\n      disabledUsersInProject.forEach(function (user) {\n        return userIds.push(user.id);\n      });\n      if (selectedProject.id) {\n        selectedProject.setProperties({\n          name: projectName,\n          colorCode: projectColor,\n          userIds: userIds\n        });\n        selectedProject.save().catch(function (reason) {\n          self.sendAction('handleError', reason);\n          selectedProject.rollbackAttributes();\n          self.set('selectedProject', null);\n        });\n        this.initializeSelectedProject(selectedProject);\n        _analytics.default.sendProjectModifiedEvent(this.get('metrics'));\n      } else {\n        projectId = (0, _emberUuid.v4)();\n        var newProject = {\n          projectId: projectId,\n          id: projectId,\n          name: projectName,\n          colorCode: projectColor,\n          archived: false,\n          userIds: userIds\n        };\n        var record = store.createRecord('admin-project', newProject);\n        record.save().catch(function (reason) {\n          self.sendAction('handleError', reason);\n          record.rollbackAttributes();\n          self.set('selectedProject', null);\n          self.resetProjectsList();\n        });\n        this.initializeSelectedProject(record);\n        _analytics.default.sendProjectCreatedEvent(this.get('metrics'));\n      }\n      this.resetProjectsList();\n    },\n    resetProjectsList: function resetProjectsList() {\n      var projects = this.get('store').peekAll('admin-project');\n      this.setProperties({\n        projectList: projects.sortBy('name'),\n        projects: projects,\n        projectSearchText: ''\n      });\n    }\n  });\n});","define('timetracker/components/recent-timers', ['exports', 'moment', 'timetracker/constants', 'timetracker/utils/timeline-util'], function (exports, _moment, _constants, _timelineUtil) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Component.extend({\n\n    // this variables will determine if setInterval function is running or not\n    // setIntervalId will contain the id returned from setInterval function if one is running\n    timerIsRunning: false,\n    setIntervalId: null,\n    timeoutId: null,\n    totalMinutesToday: 0, // default value\n\n    i18n: Ember.inject.service(),\n\n    showRecentTimers: function showRecentTimers() {\n      var _this = this;\n\n      var totalMinutes = 0;\n      var hourMinutes = 60;\n      var i18n = this.get('i18n');\n      var e = Ember.$('.recent-timers-wrapper');\n      var recentTimers = this.get('recentTimers').sortBy('name');\n      if (recentTimers.length === 0) {\n        var div = document.createElement('div');\n        var divRef = Ember.$(div);\n        divRef.addClass('empty-recent-timers-message');\n        var message = document.createTextNode(i18n.t('messages.emptyRecentTimers'));\n        div.appendChild(message);\n        e.append(div);\n      }\n\n      var _loop = function _loop(i, l) {\n        var recentTimer = recentTimers[i];\n        var div = document.createElement('div');\n        var divRef = Ember.$(div);\n        var projectColor = _constants.default.PROJECT_COLORS[recentTimer.colorCode];\n        divRef.addClass('recent-timer-container ellipsis');\n        divRef.css('color', projectColor);\n        var timer = document.createElement('div');\n        timer.setAttribute('id', recentTimer.projectId);\n        var timerRef = Ember.$(timer);\n        timerRef.addClass('recent-timer');\n        timerRef.css('backgroundColor', projectColor);\n        totalMinutes += parseInt(recentTimer.hours, 10) * hourMinutes + parseInt(recentTimer.minutes, 10);\n        var timerValue = document.createTextNode(recentTimer.hours + ':' + recentTimer.minutes);\n        timer.appendChild(timerValue);\n        var self = _this;\n        timer.onclick = function () {\n          self.sendAction('timerClicked', recentTimer);\n        };\n        // check if any of the timers are running, accordingly update the view\n        if (recentTimer.timerRunning) {\n          var runningTimer = _this.makeCurrentTimerDiv(recentTimer.colorCode, recentTimer.runningTimerHours, recentTimer.runningTimerMinutes);\n          div.appendChild(runningTimer);\n          timerRef.addClass('active-timer');\n          _this.set('timerIsRunning', true);\n          _this.setRunningTimer(recentTimers[i], timer, runningTimer);\n        }\n\n        div.appendChild(timer);\n        var projectName = document.createTextNode(recentTimers[i].name);\n        div.appendChild(projectName);\n        e.append(div);\n      };\n\n      for (var i = 0, l = recentTimers.length; i < l; i++) {\n        _loop(i, l);\n      }\n      this.set('totalMinutesToday', totalMinutes);\n      this.renderTotalTime();\n    },\n\n    setRunningTimer: function setRunningTimer(timerObject, timer, runningTimer) {\n\n      var initialTimerMS = (60 - parseInt(timerObject.runningTimerSeconds, 10)) * 1000; // eslint-disable-line\n      var intervalTimerMS = _constants.default.TIMER_UPDATE_MS;\n      var timeoutId = Ember.run.later(this, function () {\n\n        var self = this;\n        if (this.get('timerIsRunning') === false) {\n          return;\n        }\n        this.incrementTime(timerObject, timer, runningTimer);\n        var setIntervalId = setInterval(function () {\n\n          self.incrementTime(timerObject, timer, runningTimer);\n        }, intervalTimerMS);\n        this.setProperties({ setIntervalId: setIntervalId, timerIsRunning: true });\n      }, initialTimerMS);\n      this.set('timeoutId', timeoutId);\n    },\n\n    clearRunningTimer: function clearRunningTimer() {\n      var _getProperties = this.getProperties('timeoutId', 'setIntervalId'),\n          timeoutId = _getProperties.timeoutId,\n          setIntervalId = _getProperties.setIntervalId;\n\n      if (timeoutId) {\n        Ember.run.cancel(timeoutId);\n      }\n      if (setIntervalId) {\n        clearInterval(setIntervalId);\n      }\n      this.setProperties({ setIntervalId: null, timeoutId: null, timerIsRunning: false });\n    },\n\n    makeCurrentTimerDiv: function makeCurrentTimerDiv(colorCode, hours, minutes) {\n      var div = document.createElement('div');\n      var divRef = Ember.$(div);\n      divRef.addClass('running-timer');\n      divRef.css('backgroundColor', _constants.default.PROJECT_COLORS[colorCode]);\n      var runningTimerValue = document.createTextNode(hours + ':' + minutes);\n      div.appendChild(runningTimerValue);\n      return div;\n    },\n\n    addMinute: function addMinute(hourString, minuteString) {\n      var lastMinuteOfHour = 59;\n      var hours = parseInt(hourString, 10);\n      var minutes = parseInt(minuteString, 10);\n      var newMinute = void 0;\n      if (minutes === lastMinuteOfHour) {\n        hours += 1;\n        newMinute = '00';\n      } else {\n        minutes += 1;\n        // add preceding 0 for minutes < 10\n        // eslint-disable-next-line no-magic-numbers\n        newMinute = minutes < 10 ? '0' + minutes : '' + minutes;\n      }\n      var newHour = '' + hours;\n      return { newHour: newHour, newMinute: newMinute };\n    },\n    incrementTime: function incrementTime(timerObject, timerViewObject, runningTimer) {\n      // increment time for projectTimer\n      var now = (0, _moment.default)();\n      // projectTimer hours and minutes to reset at beginning of day\n      if (now.hours === 0 && now.minutes === 0) {\n        timerObject.hours = '0';\n        timerObject.minutes = '00';\n      } else {\n        var _addMinute = this.addMinute(timerObject.hours, timerObject.minutes),\n            _newHour = _addMinute.newHour,\n            _newMinute = _addMinute.newMinute;\n\n        timerObject.hours = _newHour;\n        timerObject.minutes = _newMinute;\n      }\n      // update the dom\n      var timerValue = timerViewObject.childNodes[0];\n      timerValue.nodeValue = timerObject.hours + ':' + timerObject.minutes;\n\n      // increment time for running timer\n\n      var _addMinute2 = this.addMinute(timerObject.runningTimerHours, timerObject.runningTimerMinutes),\n          newHour = _addMinute2.newHour,\n          newMinute = _addMinute2.newMinute;\n\n      timerObject.runningTimerHours = newHour;\n      timerObject.runningTimerMinutes = newMinute;\n      var rt = runningTimer.childNodes[0];\n      rt.nodeValue = timerObject.runningTimerHours + ':' + timerObject.runningTimerMinutes;\n      this.incrementProperty('totalMinutesToday');\n      this.renderTotalTime();\n    },\n    didRender: function didRender() {\n      this._super.apply(this, arguments);\n      this.showRecentTimers();\n    },\n    willUpdate: function willUpdate() {\n      this.clearRunningTimer();\n      Ember.$('.recent-timers-wrapper').empty();\n    },\n    willDestroyElement: function willDestroyElement() {\n      this.clearRunningTimer();\n      Ember.$(this.get('element')).empty();\n    },\n    renderTotalTime: function renderTotalTime() {\n      var totalMinutes = this.get('totalMinutesToday');\n      var i18n = this.get('i18n');\n      var formattedTime = _timelineUtil.default.getHourMinuteStringFromMinutes(totalMinutes, i18n);\n      if (formattedTime) {\n        formattedTime += ' ' + i18n.t('strings.time.today');\n      } else {\n        formattedTime = '';\n      }\n      var target = Ember.$('.timers-screen-total-time span');\n      target.empty();\n      target.append(document.createTextNode(formattedTime));\n    }\n  });\n});","define('timetracker/components/report-parameters', ['exports', 'timetracker/constants', 'moment'], function (exports, _constants, _moment) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Component.extend({\n\n    i18n: Ember.inject.service(),\n\n    fromDate: null,\n    toDate: null,\n    showDayNames: false,\n    timeZone: null,\n    projects: null,\n    users: null,\n    selectedProjects: [],\n    selectedUsers: [],\n    reportType: null,\n    reportTypes: [_constants.default.JSON, _constants.default.CSV, _constants.default.EXCEL],\n    weekStart: _constants.default.FIRST_WEEK_DAY,\n\n    parameterContainerIsShowed: true,\n\n    init: function init() {\n      this._super.apply(this, arguments);\n      var today = new Date();\n      this.setProperties({\n        fromMaxDate: today,\n        toMaxDate: today,\n        timeZone: (0, _moment.default)(today).format('Z')\n      });\n      this.initializeDefaultParameters();\n    },\n\n\n    submitButtonObserver: Ember.observer('fromDate', 'toDate', function () {\n      if (!this.get('fromDate') || !this.get('toDate')) {\n        Ember.$('.fetch-report-button').addClass('disabled');\n      } else {\n        Ember.$('.fetch-report-button').removeClass('disabled');\n      }\n    }),\n\n    initializeDefaultParameters: function initializeDefaultParameters() {\n      var i18n = this.get('i18n');\n      var levelOptions = [];\n      var levelOptionsConstant = _constants.default.REPORT_LEVEL_OPTIONS;\n      levelOptionsConstant.forEach(function (item) {\n        levelOptions[item.key] = i18n.t('strings.reports.levelOptions.' + item.key).string;\n      });\n      var granularityOptionsConstant = _constants.default.GRANULARITY;\n      var granularityOptions = [];\n      granularityOptionsConstant.forEach(function (item) {\n        granularityOptions[item.key] = i18n.t('strings.reports.granularityOptions.' + item.key).string;\n      });\n      var weekDayOptionsConstant = _constants.default.WEEKDAYS;\n      var weekDayOptions = [];\n      weekDayOptionsConstant.forEach(function (item) {\n        weekDayOptions[item.key] = i18n.t('strings.reports.weekDays.' + item.key).string;\n      });\n      var roundingTypeConstant = _constants.default.ROUNDING_TYPES;\n      var roundingTypeOptions = [];\n      roundingTypeConstant.forEach(function (item) {\n        roundingTypeOptions[item.key] = i18n.t('strings.reports.roundingTypeOptions.' + item.key).string;\n      });\n      var timeFormatsConstant = _constants.default.TIME_FORMATS;\n      var timeFormatOptions = [];\n      timeFormatsConstant.forEach(function (item) {\n        timeFormatOptions[item.key] = i18n.t('strings.reports.timeFormats.' + item.key).string;\n      });\n      this.setProperties({\n        levelOptions: levelOptions,\n        selectedLevelOne: _constants.default.REPORT_LEVEL_OPTIONS[0].key,\n        selectedLevelTwo: _constants.default.REPORT_LEVEL_OPTIONS[1].key,\n        selectedLevelThree: _constants.default.REPORT_LEVEL_OPTIONS[2].key, // eslint-disable-line no-magic-numbers\n        granularityOptions: granularityOptions,\n        selectedGranularity: _constants.default.GRANULARITY[0].key,\n        startOfWeekOptions: weekDayOptions,\n        selectedStartOfWeek: _constants.default.WEEKDAYS[0].key,\n        roundingMinutes: _constants.default.ROUND_OFF_MINUTES,\n        selectedRoundingMinutes: _constants.default.ROUND_OFF_MINUTES[0],\n        roundingTypes: roundingTypeOptions,\n        selectedRoundingType: _constants.default.ROUNDING_TYPES[0].key,\n        timeFormats: timeFormatOptions,\n        selectedTimeFormat: _constants.default.TIME_FORMATS[0].key\n      });\n    },\n\n\n    _fetchReportForSelectedParameters: function _fetchReportForSelectedParameters() {\n      var inputData = this.getProperties('selectedGranularity', 'showDayNames', 'selectedStartOfWeek', 'timeZone', 'fromDate', 'toDate', 'projects', 'users', 'selectedUsers', 'selectedProjects', 'selectedLevelOne', 'selectedLevelTwo', 'selectedLevelThree', 'selectedRoundingMinutes', 'selectedRoundingType', 'selectedTimeFormat');\n      var queryParams = this.mapInputData(inputData);\n      this.sendAction('fetchReport', queryParams, this.get('reportType'));\n    },\n\n    mapInputData: function mapInputData(inputData) {\n\n      var parameters = {\n        duration: {\n          timeZone: inputData.timeZone,\n          absolute: {\n            startDay: (0, _moment.default)(inputData.fromDate).format('YYYY-MM-DD'),\n            endDay: (0, _moment.default)(inputData.toDate).format('YYYY-MM-DD')\n          }\n        },\n        projectIds: inputData.selectedProjects.length > 0 ? inputData.selectedProjects.getEach('id') : null,\n        userIds: inputData.selectedUsers.length > 0 ? inputData.selectedUsers.getEach('id') : null,\n        levels: [_constants.default.REPORT_LEVEL_OPTIONS.findBy('key', inputData.selectedLevelOne).value, _constants.default.REPORT_LEVEL_OPTIONS.findBy('key', inputData.selectedLevelTwo).value, _constants.default.REPORT_LEVEL_OPTIONS.findBy('key', inputData.selectedLevelThree).value],\n        roundOff: {\n          intervalInMinutes: inputData.selectedRoundingMinutes,\n          roundTo: _constants.default.ROUNDING_TYPES.findBy('key', inputData.selectedRoundingType).value\n        },\n        timeFormat: _constants.default.TIME_FORMATS.findBy('key', inputData.selectedTimeFormat).value\n      };\n\n      // set granularity and related options\n      if (inputData.selectedGranularity === _constants.default.GRANULARITY[0].key) {\n        parameters.duration.granularity = _constants.default.GRANULARITY[0].value;\n        parameters.duration.excludeDayOfWeek = !inputData.showDayNames;\n      } else if (inputData.selectedGranularity === _constants.default.GRANULARITY[1].key) {\n        parameters.duration.granularity = _constants.default.GRANULARITY[1].value;\n        parameters.duration.weekStartsOn = _constants.default.WEEKDAYS.findBy('key', inputData.selectedStartOfWeek).value;\n      } else {\n        parameters.duration.granularity = _constants.default.GRANULARITY[2].value; // eslint-disable-line no-magic-numbers\n      }\n      return parameters;\n    },\n\n\n    actions: {\n\n      didSelectFromDate: function didSelectFromDate(selectedDate) {\n        this.setProperties({ fromDate: selectedDate, toMinDate: selectedDate, toDate: null, model: null });\n      },\n\n      didSelectToDate: function didSelectToDate(selectedDate) {\n        this.set('toDate', selectedDate);\n      },\n\n      levelOneOptionSelected: function levelOneOptionSelected(selectedLevelOne) {\n        var oldValueForLevelOne = this.get('selectedLevelOne');\n        this.set('selectedLevelOne', selectedLevelOne);\n        var selectedLevelTwo = this.get('selectedLevelTwo');\n        var selectedLevelThree = this.get('selectedLevelThree');\n        var levelOptions = this.get('levelOptions');\n        if (selectedLevelOne === selectedLevelTwo) {\n          this.set('selectedLevelTwo', oldValueForLevelOne);\n          Ember.$('.report-dropdown.level.two .selection').dropdown('set selected', levelOptions[oldValueForLevelOne]);\n        } else if (selectedLevelOne === selectedLevelThree) {\n          this.set('selectedLevelThree', oldValueForLevelOne);\n          Ember.$('.report-dropdown.level.three .selection').dropdown('set selected', levelOptions[oldValueForLevelOne]);\n        }\n      },\n\n      levelTwoOptionSelected: function levelTwoOptionSelected(selectedLevelTwo) {\n        var oldValueForLevelTwo = this.get('selectedLevelTwo');\n        this.set('selectedLevelTwo', selectedLevelTwo);\n        var selectedLevelOne = this.get('selectedLevelOne');\n        var selectedLevelThree = this.get('selectedLevelThree');\n        var levelOptions = this.get('levelOptions');\n        if (selectedLevelOne === selectedLevelTwo) {\n          this.set('selectedLevelOne', oldValueForLevelTwo);\n          Ember.$('.report-dropdown.level.one .selection').dropdown('set selected', levelOptions[oldValueForLevelTwo]);\n        } else if (selectedLevelTwo === selectedLevelThree) {\n          this.set('selectedLevelThree', oldValueForLevelTwo);\n          Ember.$('.report-dropdown.level.three .selection').dropdown('set selected', levelOptions[oldValueForLevelTwo]);\n        }\n      },\n\n      levelThreeOptionSelected: function levelThreeOptionSelected(selectedLevelThree) {\n        var oldValueForLevelThree = this.get('selectedLevelThree');\n        this.set('selectedLevelThree', selectedLevelThree);\n        var selectedLevelTwo = this.get('selectedLevelTwo');\n        var selectedLevelOne = this.get('selectedLevelOne');\n        var levelOptions = this.get('levelOptions');\n        if (selectedLevelThree === selectedLevelTwo) {\n          this.set('selectedLevelTwo', oldValueForLevelThree);\n          Ember.$('.report-dropdown.level.two .selection').dropdown('set selected', levelOptions[oldValueForLevelThree]);\n        } else if (selectedLevelOne === selectedLevelThree) {\n          this.set('selectedLevelOne', oldValueForLevelThree);\n          Ember.$('.report-dropdown.level.one .selection').dropdown('set selected', levelOptions[oldValueForLevelThree]);\n        }\n      },\n\n      getReport: function getReport(reportType) {\n        this.send('toggleParametersContainer');\n        this.set('reportType', reportType);\n        this._fetchReportForSelectedParameters();\n      },\n      toggleParametersContainer: function toggleParametersContainer() {\n        Ember.$('.report-parameters-container').transition('toggle');\n        if (this.get('parameterContainerIsShowed')) {\n          Ember.$('.parameters-toggle-button i').removeClass('up').addClass('down');\n          this.set('parameterContainerIsShowed', false);\n        } else {\n          Ember.$('.parameters-toggle-button i').removeClass('down').addClass('up');\n          this.set('parameterContainerIsShowed', true);\n        }\n      }\n    }\n\n  });\n});","define('timetracker/components/report-table', ['exports', 'timetracker/constants'], function (exports, _constants) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Component.extend({\n\n    reportsData: null,\n    i18n: Ember.inject.service(),\n\n    actions: {\n      tableLoadComplete: function tableLoadComplete() {\n        this.hideSpinner();\n      }\n    },\n\n    hideSpinner: function hideSpinner() {\n      Ember.$('.table-loading-state').css('display', 'none');\n    },\n    didReceiveAttrs: function didReceiveAttrs() {\n      var reportsData = this.get('reportsData');\n      var parameters = this.get('reportParameters');\n      if (!reportsData || !parameters) {\n        return;\n      }\n      if (parameters && reportsData.length === 0) {\n        // empty response\n        this.hideSpinner();\n        return Ember.$('.message-body.empty-response').css('display', 'block');\n      }\n      this.setTableHeader(parameters);\n    },\n    setTableHeader: function setTableHeader(parameters) {\n      var i18n = this.get('i18n');\n      var levels = parameters.levels;\n      var dateType = _constants.default.REPORT_LEVEL_OPTIONS.findBy('key', 'date').value;\n      var projectType = _constants.default.REPORT_LEVEL_OPTIONS.findBy('key', 'project').value;\n      var userType = _constants.default.REPORT_LEVEL_OPTIONS.findBy('key', 'user').value;\n      var granularity = parameters.duration.granularity;\n      var dayGranularity = _constants.default.GRANULARITY.findBy('key', 'day').value;\n      var weekGranularity = _constants.default.GRANULARITY.findBy('key', 'week').value;\n      var monthGranularity = _constants.default.GRANULARITY.findBy('key', 'month').value;\n      var tableHeader = [];\n      levels.forEach(function (levelItem) {\n        if (levelItem === dateType) {\n          switch (granularity) {\n            case dayGranularity:\n              tableHeader.push(i18n.t('strings.reports.headers.date').string);\n              break;\n            case weekGranularity:\n              tableHeader.push(i18n.t('strings.reports.headers.week').string);\n              break;\n            case monthGranularity:\n              tableHeader.push(i18n.t('strings.reports.headers.month').string);\n          }\n        } else if (levelItem === projectType) {\n          tableHeader.push(i18n.t('strings.reports.headers.project').string);\n        } else if (levelItem === userType) {\n          tableHeader.push(i18n.t('strings.reports.headers.user').string);\n        }\n      });\n      tableHeader.push(i18n.t('strings.reports.headers.duration').string);\n      this.set('tableHeader', tableHeader);\n    }\n  });\n});","define('timetracker/components/time-picker', ['exports', 'moment'], function (exports, _moment) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  var hourInputTimer = void 0;\n  var minuteInputTimer = void 0;\n  var waitSingleDigitInputMS = 2000; // we wait for 2 seconds on single digit input\n  var am = void 0;\n  var pm = void 0;\n\n  exports.default = Ember.Component.extend({\n\n    i18n: Ember.inject.service(),\n\n    tagName: 'span',\n\n    time: null,\n    formattedTime: null,\n\n    timeChanged: Ember.observer('time', function () {\n      var _getTwelveHourTime = this.getTwelveHourTime(this.get('time')),\n          hour = _getTwelveHourTime.hour,\n          minute = _getTwelveHourTime.minute,\n          meridiem = _getTwelveHourTime.meridiem;\n\n      this.set('formattedTime', hour + ':' + minute + '  ' + meridiem);\n      this.setProperties({ uiHour: hour, uiMinute: minute, uiMeridiem: meridiem, selectedHour: parseInt(hour, 10), selectedMinute: parseInt(minute, 10), selectedMeridiem: meridiem });\n    }),\n\n    selectedMeridiem: null,\n    selectedHour: null,\n    selectedMinute: null,\n\n    uiMeridiem: null,\n    uiHour: null,\n    uiMinute: null,\n\n    minHour: 0,\n    maxHour: 23,\n    minMinute: 0,\n    maxMinute: 59,\n\n    init: function init() {\n      this._super.apply(this, arguments);\n      var i18n = this.get('i18n');\n      am = i18n.t('strings.time.am');\n      pm = i18n.t('strings.time.pm');\n    },\n    didRender: function didRender() {\n      Ember.$('.time-picker-input').popup({\n        inline: true,\n        exclusive: true,\n        hoverable: true,\n        on: 'click',\n        position: 'bottom left'\n      });\n    },\n    didReceiveAttrs: function didReceiveAttrs() {\n      if (this.get('time') === null) {\n        var currentTime = (0, _moment.default)();\n        this.setProperties({\n          selectedMeridiem: currentTime.format('a') === 'am' ? am : pm,\n          selectedHour: parseInt(currentTime.format('hh'), 10),\n          selectedMinute: parseInt(currentTime.format('mm'), 10)\n        });\n        this.validateSelectedTimeAndUpdateUI();\n      }\n    },\n\n\n    actions: {\n      toggleMeridiem: function toggleMeridiem() {\n        var current = this.get('uiMeridiem');\n        var meridiem = current === am ? pm : am;\n        this.set('selectedMeridiem', meridiem);\n        this.validateSelectedTimeAndUpdateUI();\n        this.updateTime();\n      },\n      incrementHour: function incrementHour() {\n        var hour = parseInt(this.get('uiHour'), 10);\n        var maxHour = 12;\n        hour = hour >= maxHour ? 1 : hour + 1;\n        this.set('selectedHour', hour);\n        this.validateSelectedTimeAndUpdateUI();\n        this.updateTime();\n      },\n      decrementHour: function decrementHour() {\n        var hour = parseInt(this.get('uiHour'), 10);\n        var maxHour = 12;\n        hour = hour <= 1 ? maxHour : hour - 1;\n        this.set('selectedHour', hour);\n        this.validateSelectedTimeAndUpdateUI();\n        this.updateTime();\n      },\n      incrementMinute: function incrementMinute() {\n        var minute = parseInt(this.get('uiMinute'), 10);\n        var maxMinute = 59;\n        minute = minute >= maxMinute ? 0 : minute + 1;\n        this.set('selectedMinute', minute);\n        this.validateSelectedTimeAndUpdateUI();\n        this.updateTime();\n      },\n      decrementMinute: function decrementMinute() {\n        var minute = parseInt(this.get('uiMinute'), 10);\n        var maxMinute = 59;\n        minute = minute <= 0 ? maxMinute : minute - 1;\n        this.set('selectedMinute', minute);\n        this.validateSelectedTimeAndUpdateUI();\n        this.updateTime();\n      },\n      hourInput: function hourInput(input) {\n        var expression = /^\\d{1,2}$/;\n        if (expression.test(input)) {\n          var waitTime = 0;\n          if (input.length === 1) {\n            waitTime = waitSingleDigitInputMS;\n          }\n          var inputDigit = parseInt(input, 10);\n          if (inputDigit < 1) {\n            return;\n          }\n          var self = this;\n          if (hourInputTimer) {\n            Ember.run.cancel(hourInputTimer);\n          }\n          hourInputTimer = Ember.run.later(function () {\n            self.set('selectedHour', inputDigit);\n            self.validateSelectedTimeAndUpdateUI();\n            self.updateTime();\n          }, waitTime);\n        }\n      },\n      minuteInput: function minuteInput(input) {\n        var expression = /^\\d{1,2}$/;\n        if (expression.test(input)) {\n          var waitTime = 0;\n          if (input.length === 1) {\n            waitTime = waitSingleDigitInputMS;\n          }\n          var self = this;\n          if (minuteInputTimer) {\n            Ember.run.cancel(minuteInputTimer);\n          }\n          minuteInputTimer = Ember.run.later(function () {\n            self.set('selectedMinute', parseInt(input, 10));\n            self.validateSelectedTimeAndUpdateUI();\n            self.updateTime();\n          }, waitTime);\n        }\n      }\n    },\n\n    getTwelveHourTime: function getTwelveHourTime(time) {\n      if (time === null) {\n        return { hour: null, minute: null, meridiem: null };\n      }\n      var minute = parseInt(time.split(':')[1], 10);\n      var hour = parseInt(time.split(':')[0], 10);\n      var noonHour = 12;\n      var meridiem = hour >= noonHour ? pm : am;\n      if (hour === 0) {\n        hour = noonHour;\n      } else if (hour > noonHour) {\n        hour %= noonHour;\n      }\n      return { hour: this.appendZero(hour), minute: this.appendZero(minute), meridiem: meridiem };\n    },\n    appendZero: function appendZero(number) {\n      return number < 10 ? '0' + number : '' + number; // eslint-disable-line\n    },\n    validateSelectedTimeAndUpdateUI: function validateSelectedTimeAndUpdateUI() {\n      var _getProperties = this.getProperties('selectedHour', 'selectedMinute', 'selectedMeridiem'),\n          selectedHour = _getProperties.selectedHour,\n          selectedMinute = _getProperties.selectedMinute,\n          selectedMeridiem = _getProperties.selectedMeridiem;\n\n      var _getProperties2 = this.getProperties('maxHour', 'maxMinute', 'minHour', 'minMinute'),\n          maxHour = _getProperties2.maxHour,\n          maxMinute = _getProperties2.maxMinute,\n          minHour = _getProperties2.minHour,\n          minMinute = _getProperties2.minMinute;\n\n      var hours = selectedHour;\n      var minutes = selectedMinute;\n      var midHour = 12;\n      if (Number.isInteger(selectedHour)) {\n        if (selectedMeridiem === pm) {\n          hours = selectedHour === midHour ? selectedHour : selectedHour + midHour;\n        } else if (selectedMeridiem === am) {\n          hours = selectedHour === midHour ? 0 : selectedHour;\n        }\n        if (hours > maxHour) {\n          hours = maxHour;\n        } else if (hours < minHour) {\n          hours = minHour;\n        }\n      } else {\n        hours = null;\n      }\n      if (Number.isInteger(selectedMinute)) {\n        if (minutes > maxMinute) {\n          minutes = maxMinute;\n        } else if (minutes < minMinute) {\n          minutes = minMinute;\n        }\n      } else {\n        minutes = null;\n      }\n      if (Number.isInteger(hours) && Number.isInteger(minutes)) {\n        var time = hours + ':' + minutes;\n\n        var _getTwelveHourTime2 = this.getTwelveHourTime(time),\n            hour = _getTwelveHourTime2.hour,\n            minute = _getTwelveHourTime2.minute,\n            meridiem = _getTwelveHourTime2.meridiem;\n\n        this.setProperties({ uiHour: hour, uiMinute: minute, uiMeridiem: meridiem });\n      } else {\n        this.setProperties({ uiHour: hours, uiMinute: minutes, uiMeridiem: selectedMeridiem });\n      }\n    },\n    updateTime: function updateTime() {\n      var _getProperties3 = this.getProperties('uiHour', 'uiMinute', 'uiMeridiem'),\n          uiHour = _getProperties3.uiHour,\n          uiMinute = _getProperties3.uiMinute,\n          uiMeridiem = _getProperties3.uiMeridiem;\n\n      var longHours = parseInt(uiHour, 10);\n      var minutes = parseInt(uiMinute, 10);\n      var noonHour = 12;\n      if (uiMeridiem === pm) {\n        longHours = longHours === noonHour ? longHours : longHours + noonHour;\n      } else if (longHours === noonHour) {\n        longHours = 0;\n      }\n      if (isNaN(minutes) || isNaN(longHours)) {\n        return;\n      }\n      var time = longHours + ':' + uiMinute;\n      this.sendAction('setTime', time);\n    }\n  });\n});","define('timetracker/components/timeline-view-component', ['exports', 'moment', 'ember-uuid', 'timetracker/constants', 'timetracker/utils/timeline-util', 'timetracker/utils/logger', 'timetracker/utils/analytics'], function (exports, _moment, _emberUuid, _constants, _timelineUtil, _logger, _analytics) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  var setIntervalId = void 0;\n  var timeoutId = void 0;\n\n  exports.default = Ember.Component.extend({\n\n    i18n: Ember.inject.service(),\n    store: Ember.inject.service('store'),\n    metrics: Ember.inject.service(),\n    syncService: Ember.inject.service(),\n    weekStart: _constants.default.FIRST_WEEK_DAY,\n\n    // month view is currently not enabled\n    // we can do it so just by adding 'month' text in header below\n    header: {\n      left: 'prev,next today',\n      center: 'title',\n      right: 'agendaWeek,agendaDay'\n    },\n\n    buttonText: null,\n\n    validRange: {\n      end: (0, _moment.default)().add(1, 'day').format('YYYY-MM-DD')\n    },\n    today: new Date(),\n\n    views: {\n      agendaWeek: {\n        columnFormat: 'ddd D',\n        titleFormat: 'MMMM D, YYYY'\n      },\n      month: {\n        editable: false,\n        selectable: false\n      }\n    },\n\n    modalMessage: null,\n    createUpdateErrorMessage: null,\n\n    modalInput: {\n      projectName: null,\n      projectId: null,\n      startDate: null,\n      endDate: null,\n      startTime: null,\n      endTime: null,\n      startDateTime: null,\n      endDateTime: null\n    },\n    inputParameters: {\n      maxDate: null,\n      minEndDate: null,\n      maxStartTime: null,\n      maxEndTime: null,\n      minEndTime: null\n    },\n\n    projects: null,\n    events: null,\n\n    inputChanged: Ember.observer('modalInput.projectId', 'modalInput.startDate', 'modalInput.endDate', 'modalInput.startTime', 'modalInput.endTime', function () {\n      this.handleChangeInModalInputs();\n    }),\n\n    init: function init() {\n      this._super.apply(this, arguments);\n      var i18n = this.get('i18n');\n      var buttonText = {\n        month: i18n.t('strings.timeline.month'),\n        agendaDay: i18n.t('strings.timeline.day'),\n        agendaWeek: i18n.t('strings.timeline.week'),\n        today: i18n.t('strings.timeline.today')\n      };\n      this.set('buttonText', buttonText);\n    },\n    didInsertElement: function didInsertElement() {\n      Ember.$('.fc-today-button').before(Ember.$('.go-to-date'));\n      Ember.$('.fc-today-button').after(Ember.$('.add-button'));\n    },\n    willDestroyElement: function willDestroyElement() {\n      // clear up the model or else multiple instances of them tend to exist on re-render\n      Ember.$('.timeline-create-timer.ui.modal, .timeline-confirmation-modal.ui.modal').remove();\n    },\n    didUpdateAttrs: function didUpdateAttrs() {\n      this.updateViewAfterSync();\n    },\n\n\n    actions: {\n      goToDate: function goToDate(date) {\n        if (date) {\n          Ember.$('.full-calendar').fullCalendar('gotoDate', (0, _moment.default)(date));\n          Ember.$('.go-to-date-picker').val('');\n        }\n      },\n      didClickAddButton: function didClickAddButton() {\n        var start = void 0;\n        var end = void 0;\n        var defaultHour = 9;\n        var day = Ember.$('.full-calendar').fullCalendar('getDate');\n        // if it's current day, default start is 1 hour before current time\n        if (day.isSame((0, _moment.default)(), 'day')) {\n          start = (0, _moment.default)().subtract(1, 'hour');\n          end = (0, _moment.default)();\n        } else {\n          // rest of the days have 'start' as 9 AM and 'end' as 10 AM defaults\n          start = (0, _moment.default)(day.format()).set('hour', defaultHour);\n          end = (0, _moment.default)(day.format()).set('hour', defaultHour).add(1, 'hour');\n        }\n        var timer = {\n          start: start,\n          end: end\n        };\n        this._openInputModal(timer, false);\n      },\n      viewRender: function viewRender(view) {\n        var viewType = view.type;\n        this.clearRunningTimerFromFC();\n        if (viewType === 'agendaDay') {\n          this.showTotalTimeInDayView((0, _moment.default)(view.start.format()));\n          Ember.$('.month-navigation').css('display', 'none');\n        } else if (viewType === 'agendaWeek') {\n          this.showTotalTimeInWeekView((0, _moment.default)(view.start.format()), (0, _moment.default)(view.end.format()));\n          Ember.$('.month-navigation').css('display', 'none');\n        }\n      },\n      eventRender: function eventRender(event, element) {\n        var title = element.find('.fc-title');\n        var duration = document.createElement('div');\n        var durationMinutes = event.end.diff(event.start, 'minutes');\n        // minimum duration to show up in timeline is 45 minutes\n        // Value is found by trial and error\n        if (durationMinutes >= 45) {\n          // eslint-disable-line no-magic-numbers\n          Ember.$(duration).append(document.createTextNode(_timelineUtil.default.getHourMinuteStringFromMinutes(durationMinutes, this.get('i18n'))));\n          title.after(duration);\n        }\n        if (event.isRunning) {\n          this.setRunningTimerInFC(event);\n        }\n      },\n      dayClick: function dayClick(date, jsEvent, view) {\n        if (view.type === 'month') {\n          Ember.$('.full-calendar').fullCalendar('changeView', 'agendaDay', date);\n        }\n      },\n      eventClick: function eventClick(timer, jsEvent, view) {\n        if (view.type === 'month') {\n          return Ember.$('.full-calendar').fullCalendar('changeView', 'agendaDay', timer.start);\n        } else if (view.type === 'agendaWeek' || view.type === 'agendaDay') {\n          this.showTimerDetailsPopup(timer, jsEvent);\n        }\n      },\n      eventAllow: function eventAllow(updatedLocation) {\n        return updatedLocation.end.diff(updatedLocation.start, 'minutes') >= 1 && (0, _moment.default)().isSameOrAfter((0, _moment.default)(updatedLocation.end.format()));\n      },\n      selectAllow: function selectAllow(timerLocation) {\n        if ((0, _moment.default)().isSameOrBefore((0, _moment.default)(timerLocation.start.format()))) {\n          return false;\n        }\n        if ((0, _moment.default)().isSameOrAfter((0, _moment.default)(timerLocation.end.format()))) {\n          return true;\n        }\n        Ember.$('.full-calendar').fullCalendar('select', timerLocation.start, (0, _moment.default)());\n        return false;\n      },\n      eventResize: function eventResize(updatedTimer, delta, revertFunction) {\n        this._executeUpdateTimerEvent(updatedTimer, revertFunction);\n        _analytics.default.sendTimerEditedEventViaDragging(this.get('metrics'));\n      },\n      eventDrop: function eventDrop(updatedTimer, delta, revertFunction) {\n        this._executeUpdateTimerEvent(updatedTimer, revertFunction);\n        _analytics.default.sendTimerEditedEventViaDragging(this.get('metrics'));\n      },\n      select: function select(start, end) {\n        var timer = {\n          start: start,\n          end: end\n        };\n        this._openInputModal(timer, false);\n      },\n      didSelectStartDate: function didSelectStartDate(selectedDate) {\n        this.setProperties({ 'modalInput.startDate': selectedDate });\n      },\n      didSelectEndDate: function didSelectEndDate(selectedDate) {\n        this.setProperties({ 'modalInput.endDate': selectedDate });\n      },\n      clearEndTime: function clearEndTime() {\n        this.setProperties({ 'modalInput.endDate': null, 'modalInput.endTime': null });\n      },\n      didSelectProjectName: function didSelectProjectName(selectedProject) {\n        this.set('modalInput.projectName', selectedProject.get('name'));\n        this.set('modalInput.projectId', selectedProject.get('id'));\n      },\n      setEndTime: function setEndTime(time) {\n        this.set('modalInput.endTime', time);\n      },\n      setStartTime: function setStartTime(time) {\n        this.set('modalInput.startTime', time);\n      },\n      eventResizeStart: function eventResizeStart() {\n        this.sendAction('shouldAllowSync', false);\n      },\n      eventResizeStop: function eventResizeStop() {\n        this.sendAction('shouldAllowSync', true);\n      },\n      eventDragStart: function eventDragStart() {\n        this.sendAction('shouldAllowSync', false);\n      },\n      eventDragStop: function eventDragStop() {\n        this.sendAction('shouldAllowSync', true);\n      }\n    },\n\n    handleChangeInModalInputs: function handleChangeInModalInputs() {\n      var startDate = (0, _moment.default)(this.get('modalInput.startDate'));\n      var endDate = (0, _moment.default)(this.get('modalInput.endDate'));\n      var startTime = this.get('modalInput.startTime');\n      var endTime = this.get('modalInput.endTime');\n      var projectId = this.get('modalInput.projectId');\n      var currentTime = (0, _moment.default)();\n      var i18n = this.get('i18n');\n      this.setModalMessage(null);\n      var startDateTime = Ember.$.fullCalendar.moment(startDate);\n      if (!startDate.isValid() && !startTime) {\n        // this will be observed when we are clearing the dates in modal, so just ignore it\n        return;\n      }\n      startDateTime.set('hour', startTime.split(':')[0]);\n      startDateTime.set('minute', startTime.split(':')[1]);\n      if (startDateTime.isAfter(currentTime)) {\n        this.setModalButtonState(false);\n        return this.setModalMessage(i18n.t('messages.startAfterCurrent'));\n      }\n      var endDateTime = Ember.$.fullCalendar.moment(endDate);\n      if (endDateTime.isValid()) {\n        if (endTime === null) {\n          return this.setModalButtonState(false);\n        }\n        endDateTime.set('hour', endTime.split(':')[0]);\n        endDateTime.set('minute', endTime.split(':')[1]);\n        if (endDateTime.isAfter(currentTime)) {\n          this.setModalButtonState(false);\n          return this.setModalMessage(i18n.t('messages.endAfterCurrent'));\n        } else if (startDateTime.isSameOrAfter(endDateTime, 'minute')) {\n          this.setModalButtonState(false);\n          return this.setModalMessage(i18n.t('messages.startAfterEnd'));\n        }\n      } else if (endTime) {\n        return this.setModalButtonState(false);\n      }\n      if (!projectId) {\n        return this.setModalButtonState(false);\n      }\n      this.setModalButtonState(true);\n    },\n    setModalButtonState: function setModalButtonState(shouldEnable) {\n      if (shouldEnable) {\n        Ember.$('.timeline-create-timer .approve.button').removeClass('disabled');\n      } else {\n        Ember.$('.timeline-create-timer .approve.button').addClass('disabled');\n      }\n    },\n    setModalMessage: function setModalMessage(message) {\n      this.set('createUpdateErrorMessage', message);\n    },\n    changeToDayViewForGivenDay: function changeToDayViewForGivenDay(date) {\n      Ember.$('.full-calendar').fullCalendar('changeView', 'agendaDay', date);\n    },\n    getFcEvents: function getFcEvents() {\n      return Ember.$('.full-calendar').fullCalendar('clientEvents');\n    },\n    incrementMinute: function incrementMinute(timer) {\n      timer.end.add(1, 'minute');\n      Ember.$('.full-calendar').fullCalendar('updateEvent', timer);\n      this.updateTotalTime();\n    },\n    setRunningTimerInFC: function setRunningTimerInFC(timer) {\n      var _this = this;\n\n      var initialTimerMS = (60 - timer.end.diff(timer.start, 'seconds') % 60) * 1000; // eslint-disable-line\n      var intervalTimerMS = _constants.default.TIMER_UPDATE_MS;\n      this.clearRunningTimerFromFC();\n      timeoutId = Ember.run.later(this, function () {\n        _this.incrementMinute(timer);\n        setIntervalId = setInterval(function () {\n          return _this.incrementMinute(timer);\n        }, intervalTimerMS);\n      }, initialTimerMS);\n    },\n    clearRunningTimerFromFC: function clearRunningTimerFromFC() {\n      Ember.run.cancel(timeoutId);\n      clearInterval(setIntervalId);\n    },\n    showTotalTimeInWeekView: function showTotalTimeInWeekView(start, end) {\n      var allTimers = this.getFcEvents();\n      var noOfDays = 7;\n      var filteredTimers = [];\n      var timerEndTime = void 0;\n      var timerStartTime = void 0;\n      for (var i = 0, l = allTimers.length; i < l; i++) {\n        timerEndTime = allTimers[i].end;\n        timerStartTime = allTimers[i].start;\n        if (!(timerStartTime.isSameOrAfter(end) || timerEndTime.isSameOrBefore(start))) {\n          filteredTimers.push(allTimers[i]);\n        }\n      }\n      var currentDay = void 0;\n      var targetElement = void 0;\n      var formattedTime = void 0;\n      for (var _i = 0; _i < noOfDays; _i++) {\n        currentDay = start.clone().add(_i, 'day');\n        var totalMinutes = _timelineUtil.default.getTotalMinutesForTheDay(currentDay, filteredTimers);\n        formattedTime = _timelineUtil.default.getWeekViewFormattedTime(totalMinutes);\n        targetElement = _timelineUtil.default.getTargetElementInWeekViewForTotalTime(_i);\n        _timelineUtil.default.renderTotalTimeInFcHeader(formattedTime, targetElement);\n      }\n    },\n    showTotalTimeInDayView: function showTotalTimeInDayView(startTime) {\n      var i18n = this.get('i18n');\n      var timers = this.getFcEvents();\n      var totalMinutesForTheDay = _timelineUtil.default.getTotalMinutesForTheDay(startTime, timers);\n      var formattedTime = _timelineUtil.default.getHourMinuteStringFromMinutes(totalMinutesForTheDay, i18n);\n      formattedTime = formattedTime ? formattedTime : i18n.t('messages.noTimersRunning');\n      var targetHeader = '.fc-agendaDay-view .fc-day-header.fc-widget-header';\n      _timelineUtil.default.renderTotalTimeInFcHeader(formattedTime, targetHeader);\n    },\n    updateTotalTime: function updateTotalTime() {\n      var view = Ember.$('.full-calendar').fullCalendar('getView');\n      if (view.type === 'agendaDay') {\n        this.showTotalTimeInDayView((0, _moment.default)(view.start.format()));\n      } else if (view.type === 'agendaWeek') {\n        this.showTotalTimeInWeekView((0, _moment.default)(view.start.format()), (0, _moment.default)(view.end.format()));\n      }\n    },\n    _executeCreateTimerEvent: function _executeCreateTimerEvent(timer, project) {\n      var calendarRef = Ember.$('.full-calendar');\n      var self = this;\n      timer.projectId = project.get('id');\n      timer.archived = false;\n      var successFunction = function successFunction() {\n        var newTimer = self._createTimerInStore(timer.start, timer.end, project.get('id'));\n        var timerFC = _timelineUtil.default.createFcEvent(newTimer, project.get('colorCode'), project.get('name'));\n        if (timerFC.isRunning) {\n          timerFC.end = Ember.$.fullCalendar.moment();\n          self.setRunningTimerInFC(timerFC);\n        }\n        calendarRef.fullCalendar('renderEvent', timerFC, true);\n        self.updateTotalTime();\n        self.get('syncService').sync();\n      };\n      var revertFunction = function revertFunction() {\n        return calendarRef.fullCalendar('unselect');\n      };\n      this._checkOverlappingTimersAndExecuteUserConfirmation(timer, successFunction, revertFunction);\n    },\n    _executeUpdateTimerEvent: function _executeUpdateTimerEvent(updatedTimer, revertFunction) {\n      var self = this;\n      var successFunction = function successFunction() {\n        if (updatedTimer.isRunning && updatedTimer.end.isValid()) {\n          updatedTimer.isRunning = false;\n          self.clearRunningTimerFromFC();\n        }\n        self._updateTimerInStore(updatedTimer);\n        if (updatedTimer.isRunning) {\n          updatedTimer.end = Ember.$.fullCalendar.moment();\n          self.setRunningTimerInFC(updatedTimer);\n        }\n        Ember.$('.full-calendar').fullCalendar('updateEvent', updatedTimer);\n        self.updateTotalTime();\n        self.get('syncService').sync();\n      };\n      this._checkOverlappingTimersAndExecuteUserConfirmation(updatedTimer, successFunction, revertFunction);\n    },\n    updateViewAfterSync: function updateViewAfterSync() {\n      this.clearRunningTimerFromFC();\n      var events = this.get('events');\n      Ember.$('.full-calendar').fullCalendar('removeEventSources');\n      Ember.$('.full-calendar').fullCalendar('addEventSource', events);\n      this.updateTotalTime();\n    },\n    _checkOverlappingTimersAndExecuteUserConfirmation: function _checkOverlappingTimersAndExecuteUserConfirmation(timer, successFunction, revertFunction) {\n      var overlappingTimers = _timelineUtil.default.getOverlappingTimers(timer);\n      var self = this;\n      var i18n = this.get('i18n');\n      this.set('cancelArchiveButtonText', i18n.t('strings.timeline.buttons.continue'));\n      if (overlappingTimers.length > 0) {\n        this.set('modalMessage', i18n.t('messages.overlappingTimersConfirmation'));\n        Ember.$('.timeline-confirmation-modal.ui.modal').modal({\n          closable: false,\n          onApprove: function onApprove() {\n            self.updateOverlappingTimers(overlappingTimers, timer);\n            successFunction();\n          },\n          onDeny: function onDeny() {\n            revertFunction();\n          }\n        }).modal('show');\n      } else if (overlappingTimers.length === 0) {\n        successFunction();\n      }\n    },\n    updateOverlappingTimers: function updateOverlappingTimers(overlappingTimers, timerToTestAgainst) {\n      var start = timerToTestAgainst.start;\n      var end = timerToTestAgainst.end.isValid() ? timerToTestAgainst.end : (0, _moment.default)();\n      var calendarUiRef = Ember.$('.full-calendar');\n      var overlappingTimer = void 0;\n      var archived = void 0;\n      for (var i = 0, l = overlappingTimers.length; i < l; i++) {\n        overlappingTimer = overlappingTimers[i];\n        archived = false;\n        if (end.isBefore(overlappingTimer.end)) {\n          if (start.isAfter(overlappingTimer.start)) {\n            var newFcTimer = this._partitionExistingTimer(overlappingTimer, start);\n            calendarUiRef.fullCalendar('renderEvent', newFcTimer, true);\n          }\n          // update overlapping timers start time\n          overlappingTimer.start = (0, _moment.default)(end);\n          calendarUiRef.fullCalendar('updateEvent', overlappingTimer);\n        } else if (start.isAfter(overlappingTimer.start)) {\n          // update end time for overlapping timer\n          overlappingTimer.isRunning = false;\n          overlappingTimer.end = (0, _moment.default)(start);\n          calendarUiRef.fullCalendar('updateEvent', overlappingTimer);\n        } else {\n          // archive completely overlapped timer\n          archived = true;\n          calendarUiRef.fullCalendar('removeEvents', overlappingTimer.id);\n        }\n        this._updateTimerInStore(overlappingTimer, archived);\n      }\n    },\n    _partitionExistingTimer: function _partitionExistingTimer(timerToPartitionFrom, endTimeForNewTimer) {\n      var projectId = timerToPartitionFrom.projectId;\n      var project = this.get('store').peekRecord('project', projectId);\n      var newTimer = this._createTimerInStore(timerToPartitionFrom.start, endTimeForNewTimer, projectId);\n      return _timelineUtil.default.createFcEvent(newTimer, project.get('colorCode'), timerToPartitionFrom.title);\n    },\n    _createTimerInStore: function _createTimerInStore(startTime, endTime, projectId) {\n      var store = this.get('store');\n      var timerId = (0, _emberUuid.v4)();\n      var newTimer = {\n        id: timerId,\n        timerId: timerId,\n        startTime: (0, _moment.default)(startTime),\n        endTime: (0, _moment.default)(endTime).isValid() ? (0, _moment.default)(endTime) : null,\n        projectId: projectId,\n        archived: false\n      };\n      store.createRecord('timer', newTimer);\n      return newTimer;\n    },\n    _updateTimerInStore: function _updateTimerInStore(timerToUpdate) {\n      var archived = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      // timer is a fullCalendar event object\n      var store = this.get('store');\n      var timerRecord = store.peekRecord('timer', timerToUpdate.id);\n      var endTime = void 0;\n      if (timerToUpdate.isRunning || !timerToUpdate.end.isValid()) {\n        if (archived === true) {\n          endTime = (0, _moment.default)();\n        } else {\n          endTime = null;\n        }\n      } else {\n        endTime = (0, _moment.default)(timerToUpdate.end);\n      }\n      timerRecord.setProperties({\n        startTime: timerToUpdate.start,\n        endTime: endTime,\n        archived: archived\n      });\n    },\n    showTimerDetailsPopup: function showTimerDetailsPopup(timer, element) {\n      var targetElement = Ember.$(element.currentTarget);\n      var closePopup = function closePopup() {\n        Ember.$(document).off('.popupHide');\n        Ember.$('.fc-scroller').off('.popupHide');\n        if (Ember.$('.timeline-popup-copy').length > 0) {\n          targetElement.popup('destroy');\n        }\n      };\n      targetElement.popup({\n        exclusive: true,\n        boundary: '.full-calendar',\n        context: '.full-calendar',\n        lastResort: true,\n        on: 'manual',\n        onVisible: function onVisible() {\n          // hide popup on click outside popup\n          Ember.$(document).on('mousedown.popupHide', closePopup);\n\n          // hide popup on scrolling timeline\n          Ember.$('.fc-scroller').on('scroll.popupHide', closePopup);\n\n          // prevent popup hide on inside click\n          Ember.$('.timeline-popup-copy').mousedown(function (e) {\n            if (!Ember.$(e.target).is('.popup-close-icon')) {\n              e.stopPropagation();\n            }\n          });\n\n          // hide popup on ESC key pressed\n          Ember.$(document).on('keydown.popupHide', function (e) {\n            var escKeyCode = 27;\n            if (e.keyCode === escKeyCode) {\n              closePopup();\n            }\n          });\n        },\n\n        html: this._getPopupContents(timer, targetElement)\n      }).popup('show');\n    },\n    _getPopupContents: function _getPopupContents(timer, targetElement) {\n\n      /* here if we directly use the popup, the semantic-ui will reposition the popup next ti the element the\n      popup belongs to. So when we navigate through calendar the popup is removed with the event it was\n      attached to causing serious errors. As such I decided to use a copy of it every time I need one. */\n      var i18n = this.get('i18n');\n      this.set('cancelArchiveButtonText', i18n.t('strings.timeline.buttons.archive'));\n      var popupCopy = Ember.$('.timeline-popup').clone();\n      popupCopy.addClass('timeline-popup-copy');\n      popupCopy.removeClass('timeline-popup');\n      var title = popupCopy.find('.popup-project-name');\n      title.append(document.createTextNode(timer.title));\n      var start = popupCopy.find('.popup-start');\n      start.append(document.createTextNode(timer.start.format('llll')));\n      var end = popupCopy.find('.popup-end');\n      var duration = popupCopy.find('.popup-duration');\n      var endTime = void 0;\n      if (timer.isRunning) {\n        endTime = i18n.t('strings.modal.currentlyRunning');\n      } else {\n        // https://github.com/gps/TimeTracker-PM/issues/462\n        if (!timer.end) {\n          // This should not happen as a timer should have an end time if it is not a running timer\n          _logger.default.error('A non running timer in timeline with no end time detected', timer);\n        }\n        endTime = timer.end.format('llll');\n      }\n      var durationMinutes = timer.end.diff(timer.start, 'minutes');\n      duration.append(document.createTextNode(_timelineUtil.default.getHourMinuteStringFromMinutes(durationMinutes, i18n)));\n      end.append(document.createTextNode(endTime));\n      var self = this;\n      popupCopy.find('.archive-button').mousedown(function () {\n        targetElement.popup('hide');\n        self._executeArchiveTimerClicked(timer);\n      });\n      popupCopy.find('.edit-button').mousedown(function () {\n        targetElement.popup('hide');\n        self._openInputModal(timer, true);\n      });\n      return popupCopy[0];\n    },\n    _executeArchiveTimerClicked: function _executeArchiveTimerClicked(timerToArchive) {\n      var self = this;\n      var i18n = this.get('i18n');\n      this.set('modalMessage', i18n.t('messages.archiveTimerConfirmation'));\n      Ember.$('.timeline-confirmation-modal.ui.modal').modal({\n        closable: true,\n        onApprove: function onApprove() {\n          Ember.$('.full-calendar').fullCalendar('removeEvents', timerToArchive.id);\n          self._updateTimerInStore(timerToArchive, true);\n          self.updateTotalTime();\n          _analytics.default.sendTimerArchivedEvent(self.get('metrics'));\n          self.get('syncService').sync();\n        }\n      }).modal('show');\n    },\n    _openInputModal: function _openInputModal(fcTimerObject, isUpdate) {\n      var self = this;\n      var i18n = this.get('i18n');\n      var end = void 0;\n      this.setProperties({\n        'modalInput.projectName': fcTimerObject.title,\n        'modalInput.projectId': fcTimerObject.projectId,\n        'modalInput.startDate': new Date(fcTimerObject.start),\n        'modalInput.startTime': fcTimerObject.start.format('HH:mm'),\n        'inputParameters.maxDate': new Date()\n      });\n      if (isUpdate) {\n        end = fcTimerObject.end;\n        Ember.$('.search.selection.timeline-projects-dropdown').dropdown('set text', fcTimerObject.title);\n        this.set('createUpdateButtonText', i18n.t('strings.timeline.buttons.update'));\n        Ember.$('.timeline-projects-dropdown').addClass('disabled');\n        Ember.$('.timeline-create-timer .approve.button').removeClass('disabled');\n      } else {\n        fcTimerObject.isRunning = (0, _moment.default)().isSame(fcTimerObject.end, 'minutes');\n        end = fcTimerObject.end;\n        this.setProperties({\n          'modalInput.projectId': null,\n          'createUpdateButtonText': i18n.t('strings.timeline.buttons.create')\n        });\n        Ember.$('.timeline-projects-dropdown').removeClass('disabled');\n        Ember.$('.timeline-create-timer .approve.button').addClass('disabled');\n      }\n      if (fcTimerObject.isRunning) {\n        this.setProperties({\n          'modalInput.endDate': null,\n          'modalInput.endTime': null\n        });\n      } else {\n        this.setProperties({\n          'modalInput.endDate': new Date(end),\n          'modalInput.endTime': end.format('HH:mm')\n        });\n      }\n      Ember.$('.timeline-create-timer.ui.modal').modal({\n        autofocus: false,\n        onApprove: function onApprove() {\n          var modalInput = self.get('modalInput');\n          var startDateTime = Ember.$.fullCalendar.moment(modalInput.startDate);\n          if (!startDateTime.isValid()) {\n            _logger.default.error('A timer must have a valid start date.');\n            return false; // keep the modal open\n          }\n          startDateTime.set('hour', modalInput.startTime.split(':')[0]);\n          startDateTime.set('minute', modalInput.startTime.split(':')[1]);\n          fcTimerObject.start = startDateTime;\n          var endDateTime = Ember.$.fullCalendar.moment(modalInput.endDate);\n          if (endDateTime.isValid()) {\n            endDateTime.set('hour', modalInput.endTime.split(':')[0]);\n            endDateTime.set('minute', modalInput.endTime.split(':')[1]);\n            fcTimerObject.isRunning = false;\n          } else {\n            fcTimerObject.isRunning = true;\n          }\n          fcTimerObject.end = endDateTime;\n          fcTimerObject.title = modalInput.projectName;\n          if (isUpdate) {\n            self._executeUpdateTimerEvent(fcTimerObject, function () {\n              // do nothing\n            });\n            _analytics.default.sendTimerEditedEventViaModal(self.get('metrics'));\n          } else {\n            var selectedProjectId = self.get('modalInput.projectId');\n            if (!selectedProjectId) {\n              _logger.default.error('A timer must have a project associated with it.');\n              return false; // keep the modal open\n            }\n            var project = self.get('store').peekRecord('project', selectedProjectId);\n            self._executeCreateTimerEvent(fcTimerObject, project);\n            _analytics.default.sendTimerCreatedEvent(self.get('metrics'));\n          }\n        },\n        onHide: function onHide() {\n          Ember.$('.full-calendar').fullCalendar('unselect');\n        },\n        onHidden: function onHidden() {\n          self.resetModalParameters();\n          Ember.$('.search.selection.timeline-projects-dropdown').dropdown('restore placeholder text');\n          Ember.$('.search.selection.timeline-projects-dropdown .search').val('');\n        }\n      }).modal('show');\n    },\n    resetModalParameters: function resetModalParameters() {\n      this.setProperties({\n        'inputParameters.maxDate': new Date(),\n        'modalInput.projectName': null,\n        'modalInput.projectId': null,\n        'modalInput.startDate': null,\n        'modalInput.endDate': null,\n        'modalInput.startTime': null,\n        'modalInput.endTime': null,\n        'modalInput.startDateTime': null,\n        'modalInput.endDateTime': null\n      });\n    }\n  });\n});","define('timetracker/components/tt-table', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Component.extend({\n\n    classNames: ['reports-table'],\n\n    tableData: null,\n\n    scrollTimeOutId: null,\n    columnHideTimeOutId: null,\n\n    headerAlignDelayMS: 50,\n    scrollTimeOutMS: 100,\n    columnHideTimeoutMS: 10,\n\n    // These values are calculate by trial and error\n    defaultTableHeight: 400,\n    defaultMaxWidth: 1000,\n    maxWidthWithThreeColumns: 700,\n    maxWidthWithTwoColumns: 340,\n\n    defaultNoOfRowsToAdd: 100,\n\n    tableHeader: [], // currently hardcoded, will come from parameters\n\n\n    columnVisibilityObserver: Ember.observer('expandedSecondLevelCount', 'expandedFirstLevelCount', function () {\n      var columnHideTimeoutMS = this.get('columnHideTimeoutMS');\n      var columnHideTimeOutId = this.get('columnHideTimeOutId');\n      Ember.run.cancel(columnHideTimeOutId);\n      columnHideTimeOutId = Ember.run.later(this, function () {\n        var table = Ember.$('#reports-table').DataTable();\n        var tableRef = Ember.$('#reports-table_wrapper');\n\n        var _getProperties = this.getProperties('expandedSecondLevelCount', 'expandedFirstLevelCount'),\n            expandedSecondLevelCount = _getProperties.expandedSecondLevelCount,\n            expandedFirstLevelCount = _getProperties.expandedFirstLevelCount;\n\n        if (expandedFirstLevelCount === 0) {\n          table.column(1).visible(false);\n          tableRef.css('maxWidth', this.get('maxWidthWithTwoColumns'));\n        } else {\n          table.column(1).visible(true);\n        }\n        if (expandedSecondLevelCount === 0) {\n          table.column(2).visible(false); // eslint-disable-line no-magic-numbers\n          tableRef.css('maxWidth', this.get('maxWidthWithThreeColumns'));\n        } else {\n          table.column(2).visible(true); // eslint-disable-line no-magic-numbers\n          tableRef.css('maxWidth', this.get('defaultMaxWidth'));\n        }\n        this.alignHeaders();\n      }, columnHideTimeoutMS);\n      this.set('columnHideTimeOutId', columnHideTimeOutId);\n    }),\n\n    setInitialTableParameters: function setInitialTableParameters() {\n      this.setProperties({\n        hideSecondLevelIsChecked: false,\n        hideThirdLevelIsChecked: false,\n\n        // these will allow handling visibility of columns\n        expandedSecondLevelCount: 0,\n        expandedFirstLevelCount: 0,\n\n        collapsedFirstLevelRows: [],\n        collapsedSecondLevelRows: [],\n        expandedFirstLevelRows: [],\n        expandedSecondLevelRows: [],\n\n        // these will keep track of expanded rows when new rows are added and `DataTable` redraws\n        lastExpandedFirstLevelRows: [],\n        lastExpandedSecondLevelRows: [],\n        lastScrollIndex: null,\n\n        lastIndexForFirstLevelRows: 0,\n        lastIndexForSecondLevelRows: 0,\n        lastIndexForThirdLevelRows: 0\n      });\n      Ember.$('#toggle-level-three').prop('disabled', false);\n    },\n    didRender: function didRender() {\n      this._super.apply(this, arguments);\n      if (!Ember.$.fn.dataTable.isDataTable('#reports-table')) {\n        var table = document.createElement('table');\n        table.setAttribute('id', 'reports-table');\n        Ember.$('.tt-table-container').append(table);\n        this.setInitialTableParameters();\n        this.initializeTable();\n      }\n    },\n    didUpdateAttrs: function didUpdateAttrs() {\n      if (Ember.$.fn.dataTable.isDataTable('#reports-table')) {\n        var table = Ember.$('#reports-table').DataTable();\n        table.clear().destroy(true); // eslint-disable-line new-cap\n      }\n    },\n    willDestroyElement: function willDestroyElement() {\n      Ember.run.cancel(this.get('scrollTimeOutId'));\n    },\n    initializeTable: function initializeTable() {\n      var tableHeight = this.getTableHeight();\n      var columns = [];\n      var defaultWidthForColumns = '100px';\n      this.get('tableHeader').forEach(function (item) {\n        return columns.push({ title: item, width: defaultWidthForColumns });\n      });\n      var self = this;\n      Ember.$('#reports-table').DataTable({\n        data: this.get('tableData').slice(0, this.get('defaultNoOfRowsToAdd')),\n        ordering: false,\n        searching: false,\n        info: false,\n        scrollY: tableHeight,\n        paging: false,\n        drawCallback: function drawCallback() {\n          self.makeCollapsibleRows();\n          self.handleRowVisibility();\n          self.alignHeaders();\n        },\n        createdRow: function createdRow(rowNode, rowData) {\n          var rowLevel = self.getRowLevel(rowData);\n          var rowClass = self.getClassStringForNodeLevel(rowLevel);\n          Ember.$(rowNode).addClass(rowClass);\n        },\n        columns: columns,\n        columnDefs: [{\n          targets: '_all',\n          createdCell: function createdCell(cellNode, cellData, rowData, rowIndex, colIndex) {\n            if (!cellData) {\n              return;\n            }\n            var colLevel = colIndex + 1;\n            if (colLevel === 1 || colLevel === 2) {\n              // eslint-disable-line no-magic-numbers\n              Ember.$(cellNode).prepend('<i class=\"caret right icon\"></i> ');\n            }\n            var cellClass = self.getClassStringForNodeLevel(colLevel);\n            Ember.$(cellNode).addClass(cellClass).prop('title', cellData);\n          }\n        }]\n      });\n      this.sendAction('tableLoadComplete');\n      this.set('lastScrollIndex', this.get('defaultNoOfRowsToAdd'));\n      this.handleRowClick();\n      this.alignHeaders();\n      this.initializeScrolling();\n    },\n    initializeScrolling: function initializeScrolling() {\n      var scrollTimeOutMS = this.get('scrollTimeOutMS');\n      var scrollTimeOutId = this.get('scrollTimeOutId');\n      var dataTableScrollBody = Ember.$('.dataTables_scrollBody');\n      var scrollAreaHeight = dataTableScrollBody.height();\n      var totalScrollableHeight = Math.floor(dataTableScrollBody[0].scrollHeight - scrollAreaHeight);\n      var self = this;\n      Ember.$('.dataTables_scrollBody').scroll(function () {\n        Ember.run.cancel(scrollTimeOutId);\n        // The scroll event is getting triggered multiple times, guess that's how jQuery scroll works\n        // The scrolling is handled in 100MS, so that we are assured we handle the scrol event only once\n        scrollTimeOutId = Ember.run.later(self, function () {\n          var currentTop = Math.ceil(dataTableScrollBody.scrollTop());\n          if (currentTop === totalScrollableHeight) {\n            this.addRowsToTable(this.get('defaultNoOfRowsToAdd'));\n          }\n        }, scrollTimeOutMS);\n        self.set('scrollTimeOutId', scrollTimeOutId);\n      });\n    },\n    addRowsToTable: function addRowsToTable(noOfRowsToAdd) {\n      var table = Ember.$('#reports-table').DataTable();\n      var lastIndex = this.get('lastScrollIndex');\n      var nextLastIndex = lastIndex + noOfRowsToAdd;\n      var rowsToAdd = this.get('tableData').slice(lastIndex, nextLastIndex);\n      if (rowsToAdd.length > 0) {\n        table.rows.add(rowsToAdd).draw();\n        this.set('lastScrollIndex', nextLastIndex);\n      }\n    },\n    getTableHeight: function getTableHeight() {\n      var defaultHeight = this.get('defaultTableHeight');\n      var topMargin = 250;\n      var viewHeight = Ember.$(window).height() - topMargin;\n      return viewHeight > defaultHeight ? viewHeight : defaultHeight;\n    },\n    getRowLevel: function getRowLevel(row) {\n      var index = 0;\n      var rowLength = row.length;\n      do {\n        if (row[index]) {\n          break;\n        }\n        index += 1;\n      } while (index < rowLength);\n      return index + 1;\n    },\n    getClassStringForNodeLevel: function getClassStringForNodeLevel(level) {\n      switch (level) {\n        case 1:\n          return 'level-one';\n        case 2:\n          return 'level-two'; // eslint-disable-line no-magic-numbers\n        case 3:\n          return 'level-three'; // eslint-disable-line no-magic-numbers\n        default:\n          return 'duration';\n      }\n    },\n    getChildRowIndicesForNode: function getChildRowIndicesForNode(childIndices, currentParentNode, nextParentNode) {\n      var childIndicesOfCurrentNode = [];\n      while (childIndices[0] && nextParentNode > childIndices[0]) {\n        if (childIndices[0] < currentParentNode) {\n          childIndices.shift();\n        } else {\n          childIndicesOfCurrentNode.push(childIndices.shift());\n        }\n      }\n      return childIndicesOfCurrentNode;\n    },\n    appendChildRows: function appendChildRows(parentIndices, childIndices, table, lastIndex) {\n      for (var i = 0, l = parentIndices.length; i < l; i++) {\n        var currentElement = parentIndices[i];\n        var nextElement = parentIndices[i + 1] || lastIndex;\n        var tableNode = table.row(currentElement);\n        var childrenNodes = [];\n        var childrenNodeIndices = [];\n        childrenNodeIndices = this.getChildRowIndicesForNode(childIndices, currentElement, nextElement);\n        childrenNodes = table.rows(childrenNodeIndices).nodes().to$();\n        var nodesToAdd = void 0;\n        if (tableNode.child()) {\n          // if node alrady has child nodes, append new ones\n          nodesToAdd = Ember.$.merge(tableNode.child(), childrenNodes);\n        } else {\n          nodesToAdd = childrenNodes;\n        }\n        tableNode.child(nodesToAdd);\n        tableNode.child.show();\n      }\n    },\n    alignHeaders: function alignHeaders() {\n      var headerAlignDelayMS = this.get('headerAlignDelayMS');\n      Ember.run.later(this, function () {\n        Ember.$('#reports-table').DataTable().columns.adjust();\n      }, headerAlignDelayMS);\n    },\n    makeCollapsibleRows: function makeCollapsibleRows() {\n      var table = Ember.$('#reports-table').DataTable();\n      var pageEnd = table.page.info().end;\n      var levelOneIndices = [];\n      var levelTwoIndices = [];\n      var levelThreeIndices = [];\n      var lastIndexForFirstLevelRows = this.get('lastIndexForFirstLevelRows');\n      var lastIndexForSecondLevelRows = this.get('lastIndexForSecondLevelRows');\n      var lastIndexForThirdLevelRows = this.get('lastIndexForThirdLevelRows');\n\n      // keep  track of expanded rows when new ones are added\n      this.set('lastExpandedSecondLevelRows', this.get('expandedSecondLevelRows').slice(0));\n      this.set('lastExpandedFirstLevelRows', this.get('expandedFirstLevelRows').slice(0));\n\n      table.rows('.level-one').indexes().each(function (index) {\n        if (index >= lastIndexForFirstLevelRows) {\n          levelOneIndices.push(index);\n        }\n      });\n      this.set('lastIndexForFirstLevelRows', levelOneIndices[levelOneIndices.length - 1]);\n\n      table.rows('.level-two').indexes().each(function (index) {\n        if (index >= lastIndexForSecondLevelRows) {\n          levelTwoIndices.push(index);\n        }\n      });\n      this.set('lastIndexForSecondLevelRows', levelTwoIndices[levelTwoIndices.length - 1]);\n\n      table.rows('.level-three').indexes().each(function (index) {\n        if (index > lastIndexForThirdLevelRows) {\n          levelThreeIndices.push(index);\n        }\n      });\n      this.set('lastIndexForThirdLevelRows', levelThreeIndices[levelThreeIndices.length - 1]);\n\n      this.appendChildRows(levelTwoIndices.slice(0), levelThreeIndices.slice(0), table, pageEnd);\n      if (lastIndexForSecondLevelRows > 0) {\n        levelTwoIndices.shift();\n      }\n      this.appendChildRows(levelOneIndices.slice(0), levelTwoIndices.slice(0), table, pageEnd);\n      this.showChildRows(levelTwoIndices, 2); // eslint-disable-line no-magic-numbers\n      this.showChildRows(levelOneIndices, 1);\n    },\n    handleRowVisibility: function handleRowVisibility() {\n      var collapsedFirstLevelRows = this.get('collapsedFirstLevelRows');\n      var lastExpandedFirstLevelRows = this.get('lastExpandedFirstLevelRows');\n      var collapsedSecondLevelRows = this.get('collapsedSecondLevelRows');\n      var lastExpandedSecondLevelRows = this.get('lastExpandedSecondLevelRows');\n      if (this.get('hideThirdLevelIsChecked')) {\n        this.hideChildRows('.level-two', 2); // eslint-disable-line no-magic-numbers\n      } else if (collapsedSecondLevelRows.length > 0) {\n        this.hideChildRows(collapsedSecondLevelRows, 2); // eslint-disable-line no-magic-numbers\n      }\n      if (this.get('hideSecondLevelIsChecked')) {\n        this.hideChildRows('.level-one', 1);\n      } else if (collapsedFirstLevelRows.length > 0) {\n        this.hideChildRows(collapsedFirstLevelRows, 1);\n      }\n      if (lastExpandedFirstLevelRows.length > 0) {\n        this.showChildRows(lastExpandedFirstLevelRows, 1);\n      }\n      if (lastExpandedSecondLevelRows.length > 0) {\n        this.showChildRows(lastExpandedSecondLevelRows, 2); // eslint-disable-line no-magic-numbers\n      }\n      this.set('lastExpandedSecondLevelRows', []);\n      this.set('lastExpandedFirstLevelRows', []);\n    },\n    getLevelArrays: function getLevelArrays(level) {\n      var collapsedRows = void 0;\n      var expandedRows = void 0;\n      if (level === 1) {\n        collapsedRows = this.get('collapsedFirstLevelRows');\n        expandedRows = this.get('expandedFirstLevelRows');\n      } else if (level === 2) {\n        // eslint-disable-line no-magic-numbers\n        collapsedRows = this.get('collapsedSecondLevelRows');\n        expandedRows = this.get('expandedSecondLevelRows');\n      }\n      return { collapsedRows: collapsedRows, expandedRows: expandedRows };\n    },\n    setLevelArrays: function setLevelArrays(level, collapsedRows, expandedRows) {\n      if (level === 1) {\n        this.setProperties({ collapsedFirstLevelRows: collapsedRows, expandedFirstLevelRows: expandedRows, expandedFirstLevelCount: expandedRows.length });\n      } else {\n        this.setProperties({ collapsedSecondLevelRows: collapsedRows, expandedSecondLevelRows: expandedRows, expandedSecondLevelCount: expandedRows.length });\n      }\n    },\n    addToCollapsed: function addToCollapsed(item, level) {\n      var _getLevelArrays = this.getLevelArrays(level),\n          collapsedRows = _getLevelArrays.collapsedRows,\n          expandedRows = _getLevelArrays.expandedRows;\n\n      if (collapsedRows.indexOf(item) === -1) {\n        // eslint-disable-line no-magic-numbers\n        collapsedRows.push(item);\n      }\n      var indexInExpanded = expandedRows.indexOf(item);\n      if (indexInExpanded >= 0) {\n        expandedRows.splice(indexInExpanded, 1);\n      }\n      this.setLevelArrays(level, collapsedRows, expandedRows);\n    },\n    addToExpanded: function addToExpanded(item, level) {\n      var _getLevelArrays2 = this.getLevelArrays(level),\n          collapsedRows = _getLevelArrays2.collapsedRows,\n          expandedRows = _getLevelArrays2.expandedRows;\n\n      if (expandedRows.indexOf(item) === -1) {\n        // eslint-disable-line no-magic-numbers\n        expandedRows.push(item);\n      }\n      var indexInCollapsed = collapsedRows.indexOf(item);\n      if (indexInCollapsed >= 0) {\n        collapsedRows.splice(indexInCollapsed, 1);\n      }\n      this.setLevelArrays(level, collapsedRows, expandedRows);\n    },\n    hideChildRows: function hideChildRows(parentRows, rowLevel) {\n      var self = this;\n      var table = Ember.$('#reports-table').DataTable();\n      var rowsToCollapse = table.rows(parentRows);\n      rowsToCollapse.every(function () {\n        var row = table.row(this);\n        table.row(this).child.hide();\n        self.showCollapsedArrow(this.node());\n        self.addToCollapsed(row.index(), rowLevel);\n        return true;\n      });\n    },\n    showChildRows: function showChildRows(parentRows, rowLevel) {\n      var self = this;\n      var table = Ember.$('#reports-table').DataTable();\n      var rowsToExpand = table.rows(parentRows);\n      rowsToExpand.every(function () {\n        var row = table.row(this);\n        table.row(this).child.show();\n        self.showExpandedArrow(this.node());\n        self.addToExpanded(row.index(), rowLevel);\n        return true;\n      });\n    },\n    handleRowClick: function handleRowClick() {\n      var self = this;\n      Ember.$('#reports-table tbody').on('click', 'tr', function () {\n        var table = Ember.$('#reports-table').DataTable();\n        var row = table.row(this);\n        if (!row.child()) {\n          return;\n        }\n        var rowsHidden = 0;\n        var defaultMinHiddenRows = 10;\n        var didClickLevelOneRow = Ember.$(this).hasClass('level-one');\n        var child = row.child;\n        var parentNodeLevel = didClickLevelOneRow ? 1 : 2; // eslint-disable-line no-magic-numbers\n        if (child.isShown()) {\n          if (parentNodeLevel === 1) {\n            var nestedNodes = table.row(this).child();\n            nestedNodes.each(function () {\n              var childRow = table.row(this);\n              rowsHidden += childRow.child().length;\n            });\n            self.hideChildRows(nestedNodes, 2); // eslint-disable-line no-magic-numbers\n          }\n          self.hideChildRows(row, parentNodeLevel);\n          rowsHidden += row.child().length;\n        } else {\n          self.showChildRows(row, parentNodeLevel);\n        }\n        if (rowsHidden > defaultMinHiddenRows) {\n          self.addRowsToTable(rowsHidden);\n        }\n        self.alignHeaders();\n      });\n    },\n    showExpandedArrow: function showExpandedArrow(element) {\n      Ember.$(element).find('i').removeClass('right').addClass('down');\n    },\n    showCollapsedArrow: function showCollapsedArrow(element) {\n      Ember.$(element).find('i').removeClass('down').addClass('right');\n    },\n\n\n    actions: {\n      didClickOnSeeFirstLevelOnly: function didClickOnSeeFirstLevelOnly() {\n        var secondLevelRows = Ember.$('tr .level-two');\n        var firstLevelRows = Ember.$('tr .level-one');\n        if (!this.get('hideSecondLevelIsChecked')) {\n          this.set('hideThirdLevelIsChecked', true);\n          this.set('hideSecondLevelIsChecked', true);\n          this.hideChildRows(secondLevelRows, 2); // eslint-disable-line no-magic-numbers\n          this.hideChildRows(firstLevelRows, 1);\n          Ember.$('#toggle-level-three').prop('disabled', true);\n        } else {\n          this.set('hideSecondLevelIsChecked', false);\n          this.showChildRows(firstLevelRows, 1);\n          Ember.$('#toggle-level-three').prop('disabled', false);\n        }\n        this.alignHeaders();\n      },\n      didClickOnSeeFirstAndSecondLevelOnly: function didClickOnSeeFirstAndSecondLevelOnly() {\n        var secondLevelRows = Ember.$('tr .level-two');\n        if (!this.get('hideThirdLevelIsChecked')) {\n          this.set('hideThirdLevelIsChecked', true);\n          this.hideChildRows(secondLevelRows, 2); // eslint-disable-line no-magic-numbers\n        } else {\n          this.set('hideThirdLevelIsChecked', false);\n          this.showChildRows(secondLevelRows, 2); // eslint-disable-line no-magic-numbers\n        }\n        this.alignHeaders();\n      }\n    }\n  });\n});","define('timetracker/components/ui-accordion', ['exports', 'semantic-ui-ember/components/ui-accordion'], function (exports, _uiAccordion) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _uiAccordion.default;\n    }\n  });\n});","define('timetracker/components/ui-checkbox', ['exports', 'semantic-ui-ember/components/ui-checkbox'], function (exports, _uiCheckbox) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _uiCheckbox.default;\n    }\n  });\n});","define('timetracker/components/ui-dimmer', ['exports', 'semantic-ui-ember/components/ui-dimmer'], function (exports, _uiDimmer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _uiDimmer.default;\n    }\n  });\n});","define('timetracker/components/ui-dropdown', ['exports', 'semantic-ui-ember/components/ui-dropdown'], function (exports, _uiDropdown) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _uiDropdown.default;\n    }\n  });\n});","define('timetracker/components/ui-embed', ['exports', 'semantic-ui-ember/components/ui-embed'], function (exports, _uiEmbed) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _uiEmbed.default;\n    }\n  });\n});","define('timetracker/components/ui-modal', ['exports', 'semantic-ui-ember/components/ui-modal'], function (exports, _uiModal) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _uiModal.default;\n    }\n  });\n});","define('timetracker/components/ui-nag', ['exports', 'semantic-ui-ember/components/ui-nag'], function (exports, _uiNag) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _uiNag.default;\n    }\n  });\n});","define('timetracker/components/ui-popup', ['exports', 'semantic-ui-ember/components/ui-popup'], function (exports, _uiPopup) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _uiPopup.default;\n    }\n  });\n});","define('timetracker/components/ui-progress', ['exports', 'semantic-ui-ember/components/ui-progress'], function (exports, _uiProgress) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _uiProgress.default;\n    }\n  });\n});","define('timetracker/components/ui-radio', ['exports', 'semantic-ui-ember/components/ui-radio'], function (exports, _uiRadio) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _uiRadio.default;\n    }\n  });\n});","define('timetracker/components/ui-rating', ['exports', 'semantic-ui-ember/components/ui-rating'], function (exports, _uiRating) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _uiRating.default;\n    }\n  });\n});","define('timetracker/components/ui-search', ['exports', 'semantic-ui-ember/components/ui-search'], function (exports, _uiSearch) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _uiSearch.default;\n    }\n  });\n});","define('timetracker/components/ui-shape', ['exports', 'semantic-ui-ember/components/ui-shape'], function (exports, _uiShape) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _uiShape.default;\n    }\n  });\n});","define('timetracker/components/ui-sidebar', ['exports', 'semantic-ui-ember/components/ui-sidebar'], function (exports, _uiSidebar) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _uiSidebar.default;\n    }\n  });\n});","define('timetracker/components/ui-sticky', ['exports', 'semantic-ui-ember/components/ui-sticky'], function (exports, _uiSticky) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _uiSticky.default;\n    }\n  });\n});","define('timetracker/components/user-administration', ['exports', 'ember-uuid', 'timetracker/utils/string-util', 'timetracker/utils/analytics'], function (exports, _emberUuid, _stringUtil, _analytics) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Component.extend({\n\n    store: Ember.inject.service(),\n    loginService: Ember.inject.service(),\n    metrics: Ember.inject.service(),\n\n    userSearchText: '',\n    selectedUser: null,\n    isNewUser: false,\n    userName: '',\n    userEmail: '',\n    newPassword: '',\n    userCanManageProjects: false,\n    userCanManageUsers: false,\n    userCanChangeBillingDetails: false,\n    passwordChangeRequired: false,\n\n    didReceiveAttrs: function didReceiveAttrs() {\n      this.set('userList', this.get('users').sortBy('name'));\n    },\n\n\n    actions: {\n      searchUsers: function searchUsers() {\n        this.set('userList', _stringUtil.default.searchList(this.get('users'), this.get('userSearchText')));\n      },\n      addUser: function addUser() {\n        this.clearErrorMessages();\n        this.setProperties({\n          selectedUser: {},\n          userName: '',\n          userEmail: '',\n          userIsDisabled: false,\n          userCanManageProjects: false,\n          userCanManageUsers: false,\n          userCanChangeBillingDetails: false,\n          passwordChangeRequired: false,\n          isEditMode: true,\n          isNewUser: true,\n          newPassword: ''\n        });\n      },\n      userSelected: function userSelected(user) {\n        this.clearErrorMessages();\n        this.initializeSelectedUser(user);\n      },\n      enableEditing: function enableEditing() {\n        this.clearErrorMessages();\n        this.set('isEditMode', true);\n      },\n      cancelEditing: function cancelEditing() {\n        this.clearErrorMessages();\n        if (this.get('isNewUser')) {\n          return this.setProperties({\n            selectedUser: null,\n            isNewUser: false\n          });\n        }\n        this.initializeSelectedUser(this.get('selectedUser'));\n      },\n      disableEnableClicked: function disableEnableClicked() {\n        var selectedUser = this.get('selectedUser');\n        selectedUser.set('disabled', !selectedUser.get('disabled'));\n        selectedUser.save().catch(function () {\n          selectedUser.rollbackAttributes();\n        });\n      },\n      saveUser: function saveUser() {\n        var isNewUser = this.get('isNewUser');\n\n        var _getProperties = this.getProperties('userName', 'userEmail', 'selectedUser'),\n            userName = _getProperties.userName,\n            userEmail = _getProperties.userEmail,\n            selectedUser = _getProperties.selectedUser;\n\n        var condensedEmailAddress = userEmail ? _stringUtil.default.condenseSpace(userEmail) : '';\n        var condensedUserName = userName ? _stringUtil.default.condenseSpace(userName) : '';\n        this.clearErrorMessages();\n        if (!userName || condensedUserName.length <= 0) {\n          this.set('userName', null);\n          return Ember.$('.user-name-required').removeClass('hidden');\n        }\n        if (!userEmail || condensedEmailAddress.length <= 0) {\n          this.set('userEmail', null);\n          return Ember.$('.email-required').removeClass('hidden');\n        }\n        if (condensedEmailAddress.indexOf('@') === -1) {\n          // eslint-disable-line no-magic-numbers\n          return Ember.$('.invalid-email').removeClass('hidden');\n        }\n        var doesEmailAlreadyExist = this.get('users').any(function (item) {\n          if (isNewUser) {\n            return item.get('emailId') === condensedEmailAddress;\n          }\n          return item.get('emailId') === condensedEmailAddress && selectedUser.get('userId') !== item.id;\n        });\n        if (doesEmailAlreadyExist) {\n          return Ember.$('.email-already-exist').removeClass('hidden');\n        }\n        if (isNewUser && !this.get('newPassword')) {\n          return Ember.$('.password-required').removeClass('hidden');\n        }\n        this.setProperties({\n          userName: _stringUtil.default.condenseSpace(userName),\n          userEmail: condensedEmailAddress\n        });\n        this.executeSaveUser();\n      },\n      generatePassword: function generatePassword() {\n        var newPassword = _stringUtil.default.generatePasswordString();\n        this.set('newPassword', newPassword);\n      }\n    },\n\n    initializeSelectedUser: function initializeSelectedUser(user) {\n      this.setProperties({\n        selectedUser: user,\n        userName: user.get('name'),\n        userEmail: user.get('emailId'),\n        userCanManageProjects: user.get('canManageProjects'),\n        userCanManageUsers: user.get('canManageUsers'),\n        userCanChangeBillingDetails: user.get('canChangeBillingDetails'),\n        isEditMode: false,\n        isNewUser: false,\n        passwordChangeRequired: user.get('passwordChangeRequired'),\n        selectedUserIsLoggedInUser: this.get('loginService').user.userId === user.get('userId')\n      });\n    },\n    clearErrorMessages: function clearErrorMessages() {\n      Ember.$('.user-name-required, .email-already-exist, .email-required, .password-required, .invalid-email').addClass('hidden');\n    },\n    executeSaveUser: function executeSaveUser() {\n      var store = this.get('store');\n      var self = this;\n\n      var _getProperties2 = this.getProperties('userName', 'userEmail', 'userCanManageProjects', 'userCanManageUsers', 'userCanChangeBillingDetails', 'selectedUser', 'passwordChangeRequired'),\n          userName = _getProperties2.userName,\n          userEmail = _getProperties2.userEmail,\n          userCanManageProjects = _getProperties2.userCanManageProjects,\n          userCanManageUsers = _getProperties2.userCanManageUsers,\n          userCanChangeBillingDetails = _getProperties2.userCanChangeBillingDetails,\n          selectedUser = _getProperties2.selectedUser,\n          passwordChangeRequired = _getProperties2.passwordChangeRequired;\n\n      var attributes = {\n        userId: '',\n        name: userName,\n        emailId: userEmail,\n        disabled: false, // can not edit a disabled user\n        passwordChangeRequired: passwordChangeRequired,\n        canManageProjects: userCanManageProjects,\n        canManageUsers: userCanManageUsers,\n        canChangeBillingDetails: userCanChangeBillingDetails\n      };\n      if (selectedUser.id) {\n        attributes.userId = selectedUser.id;\n        selectedUser.setProperties(attributes);\n        selectedUser.save().catch(function (reason) {\n          self.sendAction('handleError', reason);\n          selectedUser.rollbackAttributes();\n          self.initializeSelectedUser(selectedUser);\n        });\n        this.initializeSelectedUser(selectedUser);\n        _analytics.default.sendUserModifiedEvent(this.get('metrics'));\n      } else {\n        attributes.userId = (0, _emberUuid.v4)();\n        attributes.password = this.get('newPassword');\n        var record = store.createRecord('admin-user', attributes);\n        record.save().catch(function (reason) {\n          self.sendAction('handleError', reason);\n          record.rollbackAttributes();\n          self.set('selectedUser', null);\n          self.resetUsersList();\n        });\n        this.initializeSelectedUser(record);\n        _analytics.default.sendUserCreatedEvent(this.get('metrics'));\n      }\n      this.resetUsersList();\n    },\n    resetUsersList: function resetUsersList() {\n      var users = this.get('store').peekAll('admin-user');\n      this.setProperties({\n        userList: users.sortBy('name'),\n        users: users,\n        userSearchText: ''\n      });\n    }\n  });\n});","define('timetracker/constants', ['exports', 'moment'], function (exports, _moment) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n\n    // This application is designed only for screen resolutions >= 1200 x 609\n    // This resolution is what an 11 inch MacBook Air can show with the default Safari window\n    SETUP: {\n      MINIMUM_SUPPORTED_HEIGHT: 609,\n      MINIMUM_SUPPORTED_WIDTH: 1200\n    },\n\n    REQUEST: {\n      TIMEOUT_MS: 60000,\n      RETRY_MS: 30000,\n      MAX_RETRIES: 3\n    },\n\n    RESPONSE_CODES: {\n      OK: 200,\n      BAD_REQUEST: 400,\n      UNAUTHORIZED_ERROR: 401,\n      NOT_FOUND: 404,\n      SERVER_ERROR: 500,\n      SERVICE_UNAVAILABLE_502: 502,\n      SERVICE_UNAVAILABLE_503: 503,\n      NETWORK_ERROR: 0\n    },\n\n    RESPONSE_401_ERRORS: {\n      INVALID_CREDENTIALS: 'INVALID_CREDENTIALS',\n      AUTH_TOKEN_EXPIRED: 'AUTH_TOKEN_EXPIRED',\n      USER_DISABLED: 'USER_DISABLED',\n      EMAIL_ID_NOT_VERIFIED: 'EMAIL_ID_NOT_VERIFIED',\n      PASSWORD_CHANGE_REQUIRED: 'PASSWORD_CHANGE_REQUIRED'\n    },\n\n    RESPONSE_400_ERRORS: {\n      USER_NOT_AUTHORIZED_TO_MANAGE_PROJECTS: 'USER_NOT_AUTHORIZED_TO_MANAGE_PROJECTS',\n      USER_NOT_AUTHORIZED_TO_MANAGE_USERS: 'USER_NOT_AUTHORIZED_TO_MANAGE_USERS',\n      PROJECT_ID_ALREADY_EXISTS: 'PROJECT_ID_ALREADY_EXISTS',\n      PROJECT_NAME_ALREADY_EXISTS: 'PROJECT_NAME_ALREADY_EXISTS',\n      MISSING_USER_IDS: 'MISSING_USER_IDS',\n      USER_DOES_NOT_EXIST: 'USER_DOES_NOT_EXIST',\n      CANNOT_CHANGE_EMAIL_ID: 'CANNOT_CHANGE_EMAIL_ID',\n      CONFLICT: 'CONFLICT',\n      PROJECT_ID_DOES_NOT_EXIST: 'PROJECT_ID_DOES_NOT_EXIST',\n      TIMER_ID_ALREADY_EXISTS: 'TIMER_ID_ALREADY_EXISTS',\n      PROJECT_ARCHIVED: 'PROJECT_ARCHIVED',\n      USER_ID_ALREADY_EXISTS: 'USER_ID_ALREADY_EXISTS',\n      USER_WITH_SAME_EMAIL_ID_ALREADY_EXISTS: 'USER_WITH_SAME_EMAIL_ID_ALREADY_EXISTS',\n      AT_LEAST_ONE_USER_SHOULD_BE_MANAGING_USERS: 'AT_LEAST_ONE_USER_SHOULD_BE_MANAGING_USERS',\n      AT_LEAST_ONE_USER_SHOULD_BE_MANAGING_PROJECTS: 'AT_LEAST_ONE_USER_SHOULD_BE_MANAGING_PROJECTS',\n      AT_LEAST_ONE_USER_SHOULD_BE_ABLE_TO_CHANGE_BILLING_DETAILS: 'AT_LEAST_ONE_USER_SHOULD_BE_ABLE_TO_CHANGE_BILLING_DETAILS',\n      TOO_MANY_ATTEMPTS: 'TOO_MANY_ATTEMPTS',\n      EMAIL_ID_NOT_VERIFIED: 'EMAIL_ID_NOT_VERIFIED'\n    },\n\n    // interval timer milliseconds for updating timer screen UI\n    TIMER_UPDATE_MS: 60000,\n\n    BACKGROUND_SYNC_MS: 30000,\n\n    // project color codes\n    PROJECT_COLORS: {\n      RED_1: '#FF2D55',\n      GREEN_1: '#177D43',\n      BLUE_1: '#007AFF',\n      ORANGE_1: '#EF6C00',\n      PURPLE_1: '#5856D6',\n      TEAL_1: '#009688'\n    },\n    PROJECT_COLORS_TRANSLUCENT: {\n      RED_1: 'rgba(255, 45, 85, 0.6)',\n      GREEN_1: 'rgba(23, 125, 67, 0.6)',\n      BLUE_1: 'rgba(0, 122, 255, 0.6)',\n      ORANGE_1: 'rgba(239, 108, 0, 0.6)',\n      PURPLE_1: 'rgba(88, 86, 214, 0.6)',\n      TEAL_1: 'rgba(0, 150, 136, 0.6)'\n    },\n\n    DEFAULT_PROJECT_COLOR: 'RED_1',\n\n    // number of days to consider for recent timers\n    RECENT_TIMER_DAYS: 13,\n\n    EVENTS: {\n      NETWORK_REQUEST_ERROR: 'networkRequestError',\n      SYNC_COMPLETED: 'syncCompleted'\n    },\n\n    GRANULARITY: [{\n      key: 'day',\n      value: 'DAY'\n    }, {\n      key: 'week',\n      value: 'WEEK'\n    }, {\n      key: 'month',\n      value: 'MONTH'\n    }],\n    WEEKDAYS: [{\n      key: 'monday',\n      value: 'MONDAY'\n    }, {\n      key: 'tuesday',\n      value: 'TUESDAY'\n    }, {\n      key: 'wednesday',\n      value: 'WEDNESDAY'\n    }, {\n      key: 'thursday',\n      value: 'THURSDAY'\n    }, {\n      key: 'friday',\n      value: 'FRIDAY'\n    }, {\n      key: 'saturday',\n      value: 'SATURDAY'\n    }, {\n      key: 'sunday',\n      value: 'SUNDAY'\n    }],\n    TIME_FORMATS: [{\n      key: 'hourMinutes',\n      value: 'HHMM'\n    }, {\n      key: 'minutes',\n      value: 'MINUTES'\n    }, {\n      key: 'hours',\n      value: 'HOURS'\n    }],\n    REPORT_LEVEL_OPTIONS: [{\n      key: 'date',\n      value: 'TIME_INTERVAL'\n    }, {\n      key: 'project',\n      value: 'PROJECT'\n    }, {\n      key: 'user',\n      value: 'USER'\n    }],\n    ROUNDING_TYPES: [{\n      key: 'nearestInteger',\n      value: 'NEAREST'\n    }, {\n      key: 'alwaysRoundUp',\n      value: 'UP'\n    }, {\n      key: 'alwaysRoundDown',\n      value: 'DOWN'\n    }],\n    JSON: 'JSON',\n    CSV: 'CSV',\n    EXCEL: 'EXCEL',\n\n    ROUND_OFF_MINUTES: [0, 15, 30, 60], // eslint-disable-line no-magic-numbers\n\n    REQUEST_ID: 'requestId',\n    CLIENT_ID: 'clientId',\n\n    FIRST_WEEK_DAY: (0, _moment.default)().startOf('week').weekday()\n  };\n});","define('timetracker/helpers/and', ['exports', 'ember-truth-helpers/helpers/and'], function (exports, _and) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _and.default;\n    }\n  });\n  Object.defineProperty(exports, 'and', {\n    enumerable: true,\n    get: function () {\n      return _and.and;\n    }\n  });\n});","define('timetracker/helpers/app-version', ['exports', 'timetracker/config/environment', 'ember-cli-app-version/utils/regexp'], function (exports, _environment, _regexp) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.appVersion = appVersion;\n  var version = _environment.default.APP.version;\n  function appVersion(_) {\n    var hash = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    if (hash.hideSha) {\n      return version.match(_regexp.versionRegExp)[0];\n    }\n\n    if (hash.hideVersion) {\n      return version.match(_regexp.shaRegExp)[0];\n    }\n\n    return version;\n  }\n\n  exports.default = Ember.Helper.helper(appVersion);\n});","define('timetracker/helpers/eq', ['exports', 'ember-truth-helpers/helpers/equal'], function (exports, _equal) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _equal.default;\n    }\n  });\n  Object.defineProperty(exports, 'equal', {\n    enumerable: true,\n    get: function () {\n      return _equal.equal;\n    }\n  });\n});","define('timetracker/helpers/gt', ['exports', 'ember-truth-helpers/helpers/gt'], function (exports, _gt) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _gt.default;\n    }\n  });\n  Object.defineProperty(exports, 'gt', {\n    enumerable: true,\n    get: function () {\n      return _gt.gt;\n    }\n  });\n});","define('timetracker/helpers/gte', ['exports', 'ember-truth-helpers/helpers/gte'], function (exports, _gte) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _gte.default;\n    }\n  });\n  Object.defineProperty(exports, 'gte', {\n    enumerable: true,\n    get: function () {\n      return _gte.gte;\n    }\n  });\n});","define('timetracker/helpers/is-array', ['exports', 'ember-truth-helpers/helpers/is-array'], function (exports, _isArray) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _isArray.default;\n    }\n  });\n  Object.defineProperty(exports, 'isArray', {\n    enumerable: true,\n    get: function () {\n      return _isArray.isArray;\n    }\n  });\n});","define('timetracker/helpers/is-equal', ['exports', 'ember-truth-helpers/helpers/is-equal'], function (exports, _isEqual) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _isEqual.default;\n    }\n  });\n  Object.defineProperty(exports, 'isEqual', {\n    enumerable: true,\n    get: function () {\n      return _isEqual.isEqual;\n    }\n  });\n});","define('timetracker/helpers/lt', ['exports', 'ember-truth-helpers/helpers/lt'], function (exports, _lt) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _lt.default;\n    }\n  });\n  Object.defineProperty(exports, 'lt', {\n    enumerable: true,\n    get: function () {\n      return _lt.lt;\n    }\n  });\n});","define('timetracker/helpers/lte', ['exports', 'ember-truth-helpers/helpers/lte'], function (exports, _lte) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _lte.default;\n    }\n  });\n  Object.defineProperty(exports, 'lte', {\n    enumerable: true,\n    get: function () {\n      return _lte.lte;\n    }\n  });\n});","define('timetracker/helpers/map-value', ['exports', 'semantic-ui-ember/helpers/map-value'], function (exports, _mapValue) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _mapValue.default;\n    }\n  });\n  Object.defineProperty(exports, 'mapValue', {\n    enumerable: true,\n    get: function () {\n      return _mapValue.mapValue;\n    }\n  });\n});","define('timetracker/helpers/not-eq', ['exports', 'ember-truth-helpers/helpers/not-equal'], function (exports, _notEqual) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _notEqual.default;\n    }\n  });\n  Object.defineProperty(exports, 'notEq', {\n    enumerable: true,\n    get: function () {\n      return _notEqual.notEq;\n    }\n  });\n});","define('timetracker/helpers/not', ['exports', 'ember-truth-helpers/helpers/not'], function (exports, _not) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _not.default;\n    }\n  });\n  Object.defineProperty(exports, 'not', {\n    enumerable: true,\n    get: function () {\n      return _not.not;\n    }\n  });\n});","define('timetracker/helpers/or', ['exports', 'ember-truth-helpers/helpers/or'], function (exports, _or) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _or.default;\n    }\n  });\n  Object.defineProperty(exports, 'or', {\n    enumerable: true,\n    get: function () {\n      return _or.or;\n    }\n  });\n});","define('timetracker/helpers/pluralize', ['exports', 'ember-inflector/lib/helpers/pluralize'], function (exports, _pluralize) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _pluralize.default;\n});","define('timetracker/helpers/route-action', ['exports', 'ember-route-action-helper/helpers/route-action'], function (exports, _routeAction) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _routeAction.default;\n    }\n  });\n});","define('timetracker/helpers/singularize', ['exports', 'ember-inflector/lib/helpers/singularize'], function (exports, _singularize) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _singularize.default;\n});","define('timetracker/helpers/t', ['exports', 'ember-i18n/helper'], function (exports, _helper) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _helper.default;\n    }\n  });\n});","define('timetracker/helpers/xor', ['exports', 'ember-truth-helpers/helpers/xor'], function (exports, _xor) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _xor.default;\n    }\n  });\n  Object.defineProperty(exports, 'xor', {\n    enumerable: true,\n    get: function () {\n      return _xor.xor;\n    }\n  });\n});","define('timetracker/index', ['exports', 'ember-uuid'], function (exports, _emberUuid) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'v4', {\n    enumerable: true,\n    get: function () {\n      return _emberUuid.v4;\n    }\n  });\n  Object.defineProperty(exports, 'v1', {\n    enumerable: true,\n    get: function () {\n      return _emberUuid.v1;\n    }\n  });\n  Object.defineProperty(exports, 'parse', {\n    enumerable: true,\n    get: function () {\n      return _emberUuid.parse;\n    }\n  });\n  Object.defineProperty(exports, 'unparse', {\n    enumerable: true,\n    get: function () {\n      return _emberUuid.unparse;\n    }\n  });\n});","define('timetracker/initializers/app-version', ['exports', 'ember-cli-app-version/initializer-factory', 'timetracker/config/environment'], function (exports, _initializerFactory, _environment) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  var name = void 0,\n      version = void 0;\n  if (_environment.default.APP) {\n    name = _environment.default.APP.name;\n    version = _environment.default.APP.version;\n  }\n\n  exports.default = {\n    name: 'App Version',\n    initialize: (0, _initializerFactory.default)(name, version)\n  };\n});","define('timetracker/initializers/container-debug-adapter', ['exports', 'ember-resolver/resolvers/classic/container-debug-adapter'], function (exports, _containerDebugAdapter) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'container-debug-adapter',\n\n    initialize: function initialize() {\n      var app = arguments[1] || arguments[0];\n\n      app.register('container-debug-adapter:main', _containerDebugAdapter.default);\n      app.inject('container-debug-adapter:main', 'namespace', 'application:main');\n    }\n  };\n});","define('timetracker/initializers/data-adapter', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'data-adapter',\n    before: 'store',\n    initialize: function initialize() {}\n  };\n});","define('timetracker/initializers/ember-data', ['exports', 'ember-data/setup-container', 'ember-data'], function (exports, _setupContainer) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'ember-data',\n    initialize: _setupContainer.default\n  };\n});","define('timetracker/initializers/ember-i18n', ['exports', 'ember-i18n/initializers/ember-i18n'], function (exports, _emberI18n) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberI18n.default;\n});","define('timetracker/initializers/export-application-global', ['exports', 'timetracker/config/environment'], function (exports, _environment) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.initialize = initialize;\n  function initialize() {\n    var application = arguments[1] || arguments[0];\n    if (_environment.default.exportApplicationGlobal !== false) {\n      var theGlobal;\n      if (typeof window !== 'undefined') {\n        theGlobal = window;\n      } else if (typeof global !== 'undefined') {\n        theGlobal = global;\n      } else if (typeof self !== 'undefined') {\n        theGlobal = self;\n      } else {\n        // no reasonable global, just bail\n        return;\n      }\n\n      var value = _environment.default.exportApplicationGlobal;\n      var globalName;\n\n      if (typeof value === 'string') {\n        globalName = value;\n      } else {\n        globalName = Ember.String.classify(_environment.default.modulePrefix);\n      }\n\n      if (!theGlobal[globalName]) {\n        theGlobal[globalName] = application;\n\n        application.reopen({\n          willDestroy: function willDestroy() {\n            this._super.apply(this, arguments);\n            delete theGlobal[globalName];\n          }\n        });\n      }\n    }\n  }\n\n  exports.default = {\n    name: 'export-application-global',\n\n    initialize: initialize\n  };\n});","define('timetracker/initializers/injectStore', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'injectStore',\n    before: 'store',\n    initialize: function initialize() {}\n  };\n});","define('timetracker/initializers/metrics', ['exports', 'timetracker/config/environment'], function (exports, _environment) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.initialize = initialize;\n  function initialize() {\n    var application = arguments[1] || arguments[0];\n    var _config$metricsAdapte = _environment.default.metricsAdapters,\n        metricsAdapters = _config$metricsAdapte === undefined ? [] : _config$metricsAdapte;\n    var _config$environment = _environment.default.environment,\n        environment = _config$environment === undefined ? 'development' : _config$environment;\n\n    var options = { metricsAdapters: metricsAdapters, environment: environment };\n\n    application.register('config:metrics', options, { instantiate: false });\n    application.inject('service:metrics', 'options', 'config:metrics');\n  }\n\n  exports.default = {\n    name: 'metrics',\n    initialize: initialize\n  };\n});","define('timetracker/initializers/raven', ['exports', 'timetracker/config/environment'], function (exports, _environment) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.initialize = initialize;\n  function initialize() {\n    var application = arguments[1] || arguments[0];\n    var _config$sentry$servic = _environment.default.sentry.serviceName,\n        serviceName = _config$sentry$servic === undefined ? 'raven' : _config$sentry$servic;\n\n    var lookupName = 'service:' + serviceName;\n    var _config$sentry$expose = _environment.default.sentry.exposedPropertyName,\n        exposedPropertyName = _config$sentry$expose === undefined ? 'raven' : _config$sentry$expose;\n\n\n    application.inject('route', exposedPropertyName, lookupName);\n    application.inject('component', exposedPropertyName, lookupName);\n    application.inject('controller', exposedPropertyName, lookupName);\n    application.inject('model', exposedPropertyName, lookupName);\n  }\n\n  exports.default = {\n    initialize: initialize,\n    name: 'raven'\n  };\n});","define('timetracker/initializers/responsive', ['exports', 'ember-responsive/initializers/responsive'], function (exports, _responsive) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'responsive',\n    initialize: _responsive.initialize\n  };\n});","define('timetracker/initializers/store', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'store',\n    after: 'ember-data',\n    initialize: function initialize() {}\n  };\n});","define('timetracker/initializers/transforms', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'transforms',\n    before: 'store',\n    initialize: function initialize() {}\n  };\n});","define(\"timetracker/instance-initializers/ember-data\", [\"exports\", \"ember-data/initialize-store-service\"], function (exports, _initializeStoreService) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: \"ember-data\",\n    initialize: _initializeStoreService.default\n  };\n});","define('timetracker/instance-initializers/ember-i18n', ['exports', 'ember-i18n/instance-initializers/ember-i18n'], function (exports, _emberI18n) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberI18n.default;\n});","define('timetracker/instance-initializers/raven-setup', ['exports', 'timetracker/config/environment'], function (exports, _environment) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.initialize = initialize;\n  function initialize(application) {\n    if (Ember.get(_environment.default, 'sentry.development') === true) {\n      if (Ember.get(_environment.default, 'sentry.debug') === true) {\n        Ember.Logger.info('`sentry` is configured for development mode.');\n      }\n      return;\n    }\n\n    if (!_environment.default.sentry) {\n      throw new Error('`sentry` should be configured when not in development mode.');\n    }\n\n    var _config$sentry$servic = _environment.default.sentry.serviceName,\n        serviceName = _config$sentry$servic === undefined ? 'raven' : _config$sentry$servic;\n\n    var lookupName = 'service:' + serviceName;\n    var service = application.lookup ? application.lookup(lookupName) : application.container.lookup(lookupName);\n\n    service.setup(_environment.default);\n  }\n\n  exports.default = {\n    initialize: initialize,\n    name: 'sentry-setup'\n  };\n});","define('timetracker/locales/en/config', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    pluralForm: function pluralForm(count) {\n      if (count === 0) {\n        return 'zero';\n      }\n      if (count === 1) {\n        return 'one';\n      }\n      return 'other';\n    }\n  };\n});","define('timetracker/locales/en/translations', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    messages: {\n      unauthorizedLogin: 'Invalid credentials <br /> Please check your credentials and try again.',\n      unauthorizedResponse: 'It appears your login credentials are no longer valid.<br /> Please log in again to continue.',\n      userIsDisabled: 'Your account has been disabled.<br /> If you believe this has been done in error, please contact your organization’s administrators.',\n      serviceUnavailable: 'Request could not be completed as we could not reach our servers.<br /> Please try again later.',\n      authTokenExpired: 'It appears that your login session has expired.<br /> Please log in again to continue.',\n      networkError: 'Request could not be completed as we could not reach our servers.<br /> Please check your network connection, and try again.',\n      genericError: 'Something went wrong and we could not complete your request.<br /> Please try again later.',\n      userDoesNotExistForgotPasssword: 'Invalid team name or email id.',\n      tooManyAttemptsForgotPassword: 'Too many attempts to change password.',\n      unexpectedError: 'Something unexpected happened. Please try again later, or contact support.',\n\n      reportsDefaultMessage: 'Set parameters above',\n      emptyReportsMessage: 'No records found',\n\n      emptyRecentTimers: 'Start a timer from projects list',\n      emptyProjectsNonAdmin: 'You have not been given access to any projects. Please contact your organization’s administrators.',\n      emptyProjectsAdminMessage: 'Looks empty here',\n      emptyProjectsAdminLink: 'Let us get you started',\n      emptyProjectsSearch: 'No projects matched your search',\n\n      overlappingTimersConfirmation: 'This will result in modifying other timers. <br /> Do you wish to continue?',\n      archiveTimerConfirmation: 'Are you sure you want to archive the timer?',\n\n      noTimersRunning: 'No timers running',\n      clearEndTime: 'Clear end time',\n\n      lostMessage404Page: 'You seem to be lost!',\n      linkMessage404Page: 'Let us take you home.',\n\n      passwordChangeSuccess: 'Password changed successfully',\n      passwordChangeFailure: 'Incorrect old password',\n      confirmPasswordMatch: 'Should match with the new password',\n      nameChangeSuccess: 'Name changed successfully',\n      nameChangeFailure: 'Name change failed',\n      allFieldsRequired: 'Please fill in all the fields',\n      confirmPasswordMatchAlt: 'Confirm new password should match with new password',\n      requirePasswordChangeNote: 'For securities measure you are requested to change your account password.',\n\n      selectProjectAdminPage: 'Select a project from the list',\n      createProject: 'Create a new project using the \"Add\" button',\n      emptyUserList: 'A project must have at least one user associated with it',\n      emptyUserSearch: 'No user with that name was found',\n\n      projectNameRequired: 'Project name is required',\n      projectAlreadyExist: 'Project already exists',\n\n      userNameRequired: 'User name is required',\n      emailAlreadyExist: 'Email id already exists',\n      emailRequired: 'Email id is required',\n      emailIsInvalid: 'Please enter a valid email address',\n      passwordRequired: 'Password is required',\n      requestCouldNotBeCompleted: 'We could not complete your request',\n      pleaseTryLater: 'Please try again later',\n      atLeastOneUserShouldManageUsers: 'Please make sure that there is at least one user to manage users',\n      atLeastOneUserShouldManageProjects: 'Please make sure that there is at least one user to manage projects',\n      atLeastOneUserShouldBeAbleToChangeBilling: 'Please make sure that there is at least one user to update billing details',\n\n      unauthorizedPageMessage: 'You do not have access to this. Contact your admin.',\n      unauthorizedLinkMessage: 'Take me home',\n\n      signedInAs: 'Signed in as',\n      signUpText: 'If you do not have an account, sign up for one at',\n\n      selectUserAdminPage: 'Select a user from the list',\n      addUserAdminPage: 'Add users using the \"Add\" button',\n      manageProjects: 'If the above field is checked, the user is granted permission to manage projects within the organization.',\n      manageUsers: 'If the above field is checked, the user is granted permission to manage users within the organization.',\n      changeBillingDetails: 'If the above field is checked, the user is granted permission to alter billing details for the organization.',\n      passwordChangeRequiredCreate: 'If the above field is checked, the user is forced to change their password the first time they sign in.',\n      passwordChangeRequiredUpdate: 'If the above field is checked, the user is forced to change their password when they next use Timing.',\n\n      startAfterCurrent: 'A timer\\u2019s start time can\\u2019t be after the current time.',\n      endAfterCurrent: 'A timer\\u2019s end time can\\u2019t be after the current time.',\n      startAfterEnd: 'A timer\\u2019s end time should be after its start time.',\n\n      emailNotVerifiedMessage: 'Your email id <strong>{{emailId}}</strong> for the team <strong>{{teamName}}</strong> is not verified.<br />Please verify it to be able to log in.',\n      forgotPassword: 'Enter your team name and email.<br/>You should receive an email with a link to reset your password shortly.'\n    },\n\n    strings: {\n      loginScreen: {\n        team: 'Team',\n        email: 'Email',\n        password: 'Password',\n        signIn: 'Sign In'\n      },\n\n      appSidebar: {\n        timers: 'Timers',\n        timeline: 'Timeline',\n        reports: 'Reports',\n        profile: 'Profile',\n        administration: 'Administration'\n      },\n\n      navBar: {\n        signOut: 'Sign Out',\n        myProfile: 'My Profile',\n        administration: 'Administration'\n      },\n\n      timers: {\n        timers: 'Timers',\n        projects: 'Projects'\n      },\n\n      general: {\n        search: 'Search…'\n      },\n\n      reports: {\n        reports: 'Reports',\n        projects: 'Projects',\n        users: 'Users',\n        fromDate: 'From Date:',\n        toDate: 'To Date:',\n        granularity: 'Granularity',\n        showDays: 'Show Day Names',\n        startOfWeek: 'Start of Week',\n        grouping: 'Grouping',\n        selectProjects: 'Select Projects',\n        allUsers: 'All Users',\n        selectUser: 'Select Users',\n        allProjects: 'All Projects',\n        datePlaceholder: 'Select Date',\n        date: 'Date',\n        day: 'Day',\n        total: 'Total',\n        timeFormat: 'Time Format',\n        roundOffMinutes: 'Round off Min',\n        roundOffType: 'Round Off',\n        getReport: 'Get Report',\n        getCSV: 'Get CSV',\n        getExcel: 'Get Excel',\n        parameters: 'Parameters',\n        granularityOptions: {\n          day: 'Day',\n          week: 'Week',\n          month: 'Month'\n        },\n        weekDays: {\n          monday: 'Monday',\n          tuesday: 'Tuesday',\n          wednesday: 'Wednesday',\n          thursday: 'Thursday',\n          friday: 'Friday',\n          saturday: 'Saturday',\n          sunday: 'Sunday'\n        },\n        levelOptions: {\n          date: 'Date',\n          project: 'Project',\n          user: 'User'\n        },\n        roundingTypeOptions: {\n          nearestInteger: 'Nearest Value',\n          alwaysRoundUp: 'Round Up',\n          alwaysRoundDown: 'Round Down'\n        },\n        timeFormats: {\n          hourMinutes: 'HH:MM',\n          minutes: 'Minutes',\n          hours: 'Hours'\n        },\n        seeLevelOneOnly: 'See {{levelOneType}}s Only',\n        seeLevelOneAndTwo: 'See {{levelOneType}}s and {{levelTwoType}}s Only',\n        headers: {\n          date: 'Date',\n          week: 'Week',\n          month: 'Month',\n          user: 'User',\n          project: 'Project',\n          duration: 'Duration'\n        }\n      },\n\n      paging: {\n        previous: 'Previous',\n        next: 'Next',\n        first: 'First',\n        last: 'Last',\n        pages: '{{count}} Pages'\n      },\n\n      timeline: {\n        goTo: ' Go to',\n        week: 'Week',\n        day: 'Day',\n        month: 'Month',\n        today: 'Today',\n        buttons: {\n          add: 'Add',\n          update: 'Update',\n          create: 'Create',\n          archive: 'Archive',\n          cancel: 'Cancel',\n          continue: 'Continue',\n          edit: 'Edit'\n        },\n        start: 'Start',\n        end: 'End',\n        duration: 'Duration'\n      },\n\n      time: {\n        today: 'Today',\n        hour: {\n          zero: '',\n          one: '{{count}} Hour',\n          other: '{{count}} Hours'\n        },\n        minute: {\n          zero: '',\n          one: '{{count}} Minute',\n          other: '{{count}} Minutes'\n        },\n        am: 'AM',\n        pm: 'PM'\n      },\n\n      modal: {\n        oops: 'Oops!',\n        dismiss: 'Dismiss',\n        projectName: 'Project Name',\n        selectProject: 'Select Project',\n        startTime: 'Start Time',\n        endTime: 'End Time',\n        timerFor: 'Timer For',\n        startsAt: 'Starts At',\n        endsAt: 'Ends At',\n        conflictHeading: 'Conflict Detected!',\n        archived: 'Archived',\n        serverData: 'Server Data',\n        localData: 'Local Data',\n        acceptServer: 'Accept Server',\n        acceptLocal: 'Accept Local',\n        currentlyRunning: 'Currently Running',\n        yes: 'Yes',\n        no: 'No',\n        resendEmail: 'Resend Email',\n        forgotPassowLink: 'Forgot Password?',\n        send: 'Send',\n        cancel: 'Cancel'\n      },\n\n      profile: {\n        profile: 'Profile',\n        changePicture: 'Change Picture',\n        email: 'Email',\n        name: 'Name',\n        updateName: 'Update Name',\n        oldPassword: 'Old Password',\n        newPassword: 'New Password',\n        confirmPassword: 'Confirm New Password',\n        updatePassword: 'Update Password'\n      },\n\n      administration: {\n        projects: 'Projects',\n        yes: 'Yes',\n        no: 'No',\n        all: 'All',\n        add: 'Add',\n        edit: 'Edit',\n        save: 'Save',\n        cancel: 'Cancel',\n        archive: 'Archive',\n        unarchive: 'Unarchive',\n        remove: 'Remove',\n        name: 'Name',\n        color: 'Color',\n        users: 'Users',\n        userName: 'User Name',\n        projectName: 'Project Name',\n        userEmail: 'User Email Id',\n        email: 'Email',\n        password: 'Password',\n        disable: 'Disable',\n        enable: 'Enable',\n        generatePassword: 'Generate Password',\n        canManageProjects: 'Can Manage Projects',\n        canManageUsers: 'Can Manage Users',\n        canChangeBillingDetails: 'Can Change Billing Details',\n        requirePasswordChange: 'Require Password Change'\n      },\n\n      fourOhFour: '4:04',\n      fourOhOne: '4:01'\n    }\n  };\n});","define('timetracker/mixins/base', ['exports', 'semantic-ui-ember/mixins/base'], function (exports, _base) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _base.default;\n    }\n  });\n});","define('timetracker/mixins/promise-resolver', ['exports', 'ember-promise-tools/mixins/promise-resolver'], function (exports, _promiseResolver) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _promiseResolver.default;\n    }\n  });\n});","define('timetracker/models/admin-project', ['exports', 'ember-data'], function (exports, _emberData) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberData.default.Model.extend({\n    projectId: _emberData.default.attr(),\n    name: _emberData.default.attr(),\n    colorCode: _emberData.default.attr(),\n    archived: _emberData.default.attr('boolean'),\n    changeToken: _emberData.default.attr('number'),\n    userIds: _emberData.default.attr()\n  });\n});","define('timetracker/models/admin-user', ['exports', 'ember-data'], function (exports, _emberData) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberData.default.Model.extend({\n    userId: _emberData.default.attr(),\n    name: _emberData.default.attr(),\n    emailId: _emberData.default.attr(),\n    disabled: _emberData.default.attr('boolean'),\n    passwordChangeRequired: _emberData.default.attr('boolean'),\n    canManageProjects: _emberData.default.attr('boolean'),\n    canManageUsers: _emberData.default.attr('boolean'),\n    canChangeBillingDetails: _emberData.default.attr('boolean')\n  });\n});","define('timetracker/models/project-report-timer', ['exports', 'ember-data'], function (exports, _emberData) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberData.default.Model.extend({\n    startTime: _emberData.default.attr('date'),\n    endTime: _emberData.default.attr('date'),\n    userId: _emberData.default.attr(),\n    userName: _emberData.default.attr()\n  });\n});","define('timetracker/models/project', ['exports', 'ember-data'], function (exports, _emberData) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberData.default.Model.extend({\n    projectId: _emberData.default.attr(),\n    name: _emberData.default.attr(),\n    colorCode: _emberData.default.attr(),\n    archived: _emberData.default.attr('boolean'),\n    changeToken: _emberData.default.attr('number')\n  });\n});","define('timetracker/models/timer', ['exports', 'ember-data'], function (exports, _emberData) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberData.default.Model.extend({\n    projectId: _emberData.default.attr(),\n    timerID: _emberData.default.attr(),\n    startTime: _emberData.default.attr('date'),\n    endTime: _emberData.default.attr('date'),\n    archived: _emberData.default.attr('boolean'),\n    changeToken: _emberData.default.attr('number')\n  });\n});","define('timetracker/models/user-report-timer', ['exports', 'ember-data'], function (exports, _emberData) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberData.default.Model.extend({\n    startTime: _emberData.default.attr('date'),\n    endTime: _emberData.default.attr('date'),\n    projectId: _emberData.default.attr(),\n    projectName: _emberData.default.attr()\n  });\n});","define('timetracker/models/user', ['exports', 'ember-data'], function (exports, _emberData) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberData.default.Model.extend({\n    userId: _emberData.default.attr(),\n    name: _emberData.default.attr(),\n    emailId: _emberData.default.attr(),\n    disabled: _emberData.default.attr('boolean')\n  });\n});","define('timetracker/resolver', ['exports', 'ember-resolver'], function (exports, _emberResolver) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberResolver.default;\n});","define('timetracker/router', ['exports', 'timetracker/config/environment'], function (exports, _environment) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  var Router = Ember.Router.extend({\n    location: _environment.default.locationType,\n    rootURL: _environment.default.rootURL\n  });\n\n  // eslint-disable-next-line array-callback-return\n  Router.map(function () {\n    this.route('login');\n    this.route('authenticated', { path: '/' }, function () {\n      this.route('manage', function () {\n        this.route('profile');\n        this.route('administration');\n      });\n      this.route('features', { path: '/' }, function () {\n        this.route('reports');\n        this.route('timers');\n        this.route('timeline');\n      });\n    });\n    this.route('not-found', { path: '/*' });\n    this.route('unauthorized');\n  });\n\n  exports.default = Router;\n});","define('timetracker/routes/application', ['exports', 'timetracker/constants', 'ember-uuid', 'timetracker/utils/application-setup'], function (exports, _constants, _emberUuid, _applicationSetup) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Route.extend({\n\n    loginService: Ember.inject.service('loginService'),\n\n    beforeModel: function beforeModel(transition) {\n      // _apiRequestsPending will keep track of pending requests throughout app\n      // if we need to verify window close event, this variable will be checked\n      window._apiRequestsPending = 0;\n      window._clientUuid = (0, _emberUuid.v4)().toString();\n\n      (0, _applicationSetup.default)();\n\n      var loginService = this.get('loginService');\n      var transitionTarget = transition.targetName;\n      // skip redirection to login route or any of index route in nested routes\n      if (transitionTarget !== 'login' && transitionTarget !== 'not-found' && !transitionTarget.match(/index$/)) {\n        loginService.redirectionUrl = transitionTarget;\n      }\n    },\n\n    renderTemplate: function renderTemplate() {\n      this._super.apply(this, arguments);\n      var self = this;\n      Ember.run.next(this, '_layout');\n      Ember.$(window).resize(function () {\n        self._layout();\n      });\n    },\n\n    _layout: function _layout() {\n      var minHeight = _constants.default.SETUP.MINIMUM_SUPPORTED_HEIGHT;\n      var minWidth = _constants.default.SETUP.MINIMUM_SUPPORTED_WIDTH;\n      var windowHeight = Ember.$(window).innerHeight();\n      var windowWidth = Ember.$(window).innerWidth();\n      if (windowHeight > minHeight) {\n        Ember.$('body').css({ 'height': windowHeight, 'overflow-y': 'hidden' });\n      } else {\n        Ember.$('body').css({ 'height': minHeight, 'overflow-y': 'scroll' });\n      }\n      if (windowWidth > minWidth) {\n        Ember.$('body').css({ 'width': windowWidth, 'overflow-x': 'hidden' });\n      } else {\n        Ember.$('body').css({ 'width': minWidth, 'overflow-x': 'scroll' });\n      }\n    }\n  });\n});","define('timetracker/routes/authenticated', ['exports', 'timetracker/constants', 'timetracker/utils/network-request', 'timetracker/utils/logger'], function (exports, _constants, _networkRequest, _logger) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Route.extend({\n\n    loginService: Ember.inject.service('loginService'),\n    i18n: Ember.inject.service(),\n    metrics: Ember.inject.service(),\n    syncService: Ember.inject.service(),\n\n    setIntervalId: null,\n\n    renderTemplate: function renderTemplate() {\n      this._super.apply(this, arguments);\n      var self = this;\n      addEventListener(_constants.default.EVENTS.NETWORK_REQUEST_ERROR, function (event) {\n        return self._handleRequestErrors(event.reason);\n      });\n      Ember.run.next(this, '_layout');\n      Ember.$(window).resize(function () {\n        self._layout();\n      });\n      var intervalTimerMS = _constants.default.BACKGROUND_SYNC_MS;\n      var setIntervalId = setInterval(function () {\n        return self.get('syncService').sync();\n      }, intervalTimerMS);\n      this.setProperties({ setIntervalId: setIntervalId, timerIsRunning: true });\n    },\n\n    exit: function exit() {\n      clearInterval(this.get('setIntervalId'));\n      this.set('setIntervalId', null);\n      this.get('syncService').resetChangeTokens();\n      Ember.$('.request-error-modal.ui.modal, .conflict-resolution-modal').remove();\n    },\n    _showErrorModal: function _showErrorModal(closeOutsideClick, shouldLogOut) {\n      var self = this;\n      Ember.$('.request-error-modal.ui.modal').modal({\n        closable: closeOutsideClick,\n        onApprove: function onApprove() {\n          Ember.$('.request-error-modal.ui.modal').hide();\n          if (shouldLogOut) {\n            self.send('logout');\n          }\n        }\n      }).modal('show');\n    },\n    _setModalMessage: function _setModalMessage(message) {\n      this.controller.set('errorMessage', message);\n    },\n\n\n    _handleRequestErrors: function _handleRequestErrors(reason) {\n      var status = reason.status;\n      var emptyErrorCode = '';\n      var errorCode = reason.responseJSON ? reason.responseJSON.errorCode : emptyErrorCode;\n      var statusUnauthorized = _constants.default.RESPONSE_CODES.UNAUTHORIZED_ERROR;\n      var status502 = _constants.default.RESPONSE_CODES.SERVICE_UNAVAILABLE_502;\n      var status503 = _constants.default.RESPONSE_CODES.SERVICE_UNAVAILABLE_503;\n      var serverError = _constants.default.RESPONSE_CODES.SERVER_ERROR;\n      var statusTimeout = _constants.default.RESPONSE_CODES.NETWORK_ERROR;\n      var badRequest = _constants.default.RESPONSE_CODES.BAD_REQUEST;\n      var userUnauthorized = _constants.default.RESPONSE_401_ERRORS.INVALID_CREDENTIALS;\n      var authTokenExpired = _constants.default.RESPONSE_401_ERRORS.AUTH_TOKEN_EXPIRED;\n      var disabledUser = _constants.default.RESPONSE_401_ERRORS.USER_DISABLED;\n      var passwordChangeRequired = _constants.default.RESPONSE_401_ERRORS.PASSWORD_CHANGE_REQUIRED;\n      var i18n = this.get('i18n');\n      var errorMessage = void 0;\n      var closableModal = void 0;\n      var shouldLogOutOnError = void 0;\n      if (status === statusUnauthorized) {\n        // eslint-disable-line\n        shouldLogOutOnError = true;\n        closableModal = false;\n        switch (errorCode) {\n          case userUnauthorized:\n          case emptyErrorCode:\n            errorMessage = i18n.t('messages.unauthorizedResponse');\n            break;\n          case disabledUser:\n            errorMessage = i18n.t('messages.userIsDisabled');\n            break;\n          case authTokenExpired:\n            errorMessage = i18n.t('messages.authTokenExpired');\n            break;\n          case passwordChangeRequired:\n            {\n              return Ember.$('.modal.ui.change-password-modal').modal({\n                closable: false\n              }).modal('show');\n            }\n          default:\n            _logger.default.error('Unknown error code: ' + errorCode);\n        }\n        this._setModalMessage(errorMessage);\n        this._showErrorModal(closableModal, shouldLogOutOnError);\n      } else if (status === status502 || status === status503 || status === serverError || status === statusTimeout || status === badRequest) {\n        shouldLogOutOnError = false;\n        closableModal = true;\n        if (status === statusTimeout) {\n          errorMessage = i18n.t('messages.networkError');\n        } else if (status === serverError || status === badRequest) {\n          errorMessage = i18n.t('messages.genericError');\n        } else {\n          errorMessage = i18n.t('messages.serviceUnavailable');\n        }\n        this._setModalMessage(errorMessage);\n        this._showErrorModal(closableModal, shouldLogOutOnError);\n      }\n      return true;\n    },\n\n    _layout: function _layout() {\n      var minHeight = _constants.default.SETUP.MINIMUM_SUPPORTED_HEIGHT;\n      var minWidth = _constants.default.SETUP.MINIMUM_SUPPORTED_WIDTH;\n      var windowHeight = Ember.$(window).innerHeight();\n      var windowWidth = Ember.$(window).innerWidth();\n      var headerHeight = Ember.$('.application-header').height();\n      var sidebarWidth = Ember.$('.sidebar').width();\n      var availableHeight = Math.max(windowHeight, minHeight);\n      var availableWidth = Math.max(windowWidth, minWidth);\n      Ember.$('.sidebar').css('height', availableHeight - headerHeight);\n      Ember.$('.nested-route-wrapper').css({\n        height: availableHeight - headerHeight,\n        width: availableWidth - sidebarWidth\n      });\n    },\n\n    beforeModel: function beforeModel() {\n      var loginService = this.get('loginService');\n      if (!loginService.isAuthenticated) {\n        return this.replaceWith('login');\n      }\n      var user = loginService.user;\n      // https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#userId\n      this.set('metrics.context.userId', user.userId);\n    },\n\n    setupController: function setupController(controller) {\n      this._super.apply(this, arguments);\n      controller.setProperties({\n        user: this.get('loginService').user,\n        isAdmin: this.get('loginService').isAdmin\n      });\n      window.onbeforeunload = function () {\n        if (window._apiRequestsPending > 0) {\n          return true;\n        } else {\n          // eslint-disable-line no-else-return\n          return null;\n        }\n      };\n    },\n\n\n    actions: {\n\n      logout: function logout() {\n        var _this = this;\n\n        this.get('loginService').logout().then(function () {\n          _this.store.unloadAll();\n          _this.get('syncService').resetChangeTokens();\n          _this.replaceWith('login');\n        }).catch(function () {\n          return _this.replaceWith('login');\n        });\n        this.render('application-loading');\n      },\n\n      loading: function loading(transition) {\n        var spinnerRef = Ember.$('.model-loading-state');\n        spinnerRef.removeClass('hidden');\n        transition.promise.finally(function () {\n          spinnerRef.addClass('hidden');\n        });\n      },\n      updatePassword: function updatePassword() {\n        var _this2 = this;\n\n        Ember.$('.error.message').addClass('hidden');\n\n        var _controller$getProper = this.controller.getProperties('oldPassword', 'newPassword', 'confirmedPassword'),\n            oldPassword = _controller$getProper.oldPassword,\n            newPassword = _controller$getProper.newPassword,\n            confirmedPassword = _controller$getProper.confirmedPassword;\n\n        if (!oldPassword || !newPassword || !confirmedPassword) {\n          Ember.$('.error.message.required-fields').removeClass('hidden');\n        } else if (newPassword !== confirmedPassword) {\n          Ember.$('.error.message.new-password-missmatch').removeClass('hidden');\n        } else {\n          var data = {\n            oldPassword: oldPassword,\n            newPassword: newPassword\n          };\n          var url = _networkRequest.default.buildURL('changePassword');\n          var hash = _networkRequest.default.setRequestParameters(url, 'POST', { data: data });\n          _networkRequest.default.makeAPIRequest(hash).then(function () {\n            _this2.controller.setProperties({\n              oldPassword: null,\n              newPassword: null,\n              confirmedPassword: null\n            });\n            Ember.$('.modal.ui.change-password-modal').modal('hide');\n            _this2.get('syncService').sync();\n          }).catch(function (reason) {\n            if (reason.status === _constants.default.RESPONSE_CODES.UNAUTHORIZED_ERROR) {\n              _this2.controller.set('oldPassword', null);\n              Ember.$('.error.message.invalid-old-password').removeClass('hidden');\n            }\n          });\n        }\n      }\n    }\n\n  });\n});","define('timetracker/routes/authenticated/features', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Route.extend({\n    renderTemplate: function renderTemplate() {\n      this.render('authenticated.features.featuresSidebar', {\n        into: 'authenticated',\n        outlet: 'sidebar'\n      });\n      this.render();\n    }\n  });\n});","define('timetracker/routes/authenticated/features/index', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Route.extend({\n    loginService: Ember.inject.service('loginService'),\n\n    actions: {\n      didTransition: function didTransition() {\n        Ember.run.scheduleOnce('afterRender', this, function () {\n          var loginService = this.get('loginService');\n          if (loginService.redirectionUrl) {\n            this.replaceWith(loginService.redirectionUrl);\n          } else {\n            this.replaceWith('authenticated.features.timers');\n          }\n        });\n      }\n    }\n  });\n});","define('timetracker/routes/authenticated/features/reports', ['exports', 'timetracker/utils/analytics', 'timetracker/utils/network-request', 'timetracker/utils/network-error-handler', 'timetracker/constants'], function (exports, _analytics, _networkRequest, _networkErrorHandler, _constants) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Route.extend({\n\n    metrics: Ember.inject.service(),\n\n    defaultModel: null,\n\n    model: function model() {\n      return Ember.RSVP.hash({\n        allProjects: this.store.findAll('project'),\n        allUsers: this.store.findAll('user')\n      });\n    },\n    setupController: function setupController(controller, model) {\n      this._super.apply(this, arguments);\n      var allProjects = model.allProjects.filterBy('archived', false).sortBy('name');\n      var allUsers = model.allUsers.filterBy('disabled', false).sortBy('name');\n      controller.setProperties({ allProjects: allProjects, allUsers: allUsers });\n    },\n\n\n    // will be invoked when the route is exited\n    exit: function exit() {\n      // for integration with other routes\n      // clearing up the model, i.e the table when user leaves this\n      // route and comes back again\n      this.controller.setProperties({\n        model: null,\n        reportsData: null,\n        reportParameters: null\n      });\n    },\n\n\n    renderTemplate: function renderTemplate() {\n      this._super.apply(this, arguments);\n      var self = this;\n      Ember.run.next(this, '_layout');\n      Ember.$(window).resize(function () {\n        self._layout();\n      });\n    },\n\n    _layout: function _layout() {\n      var bodyHeight = Ember.$('body').innerHeight();\n      var headerHeight = Ember.$('.application-header').height();\n      Ember.$('.reports-container').css('height', bodyHeight - headerHeight);\n      var bodyWidth = Ember.$('body').innerWidth();\n      var sidebarWidth = Ember.$('.sidebar').width();\n      Ember.$('.reports-container').css('width', bodyWidth - sidebarWidth);\n    },\n\n    showLoadingTable: function showLoadingTable() {\n      Ember.$('.table-loading-state').css('display', 'block');\n      Ember.$('.message-body').css('display', 'none');\n    },\n\n\n    actions: {\n      didTransition: function didTransition() {\n        _analytics.default.sendRouteEnteredEvent(this, this.get('metrics'));\n      },\n      fetchReport: function fetchReport(parameters, type) {\n        var _this = this;\n\n        if (type === _constants.default.JSON) {\n          this.showLoadingTable();\n          _analytics.default.sendReportRequestEvent(this.get('metrics'));\n          var url = _networkRequest.default.buildURL('generateReport');\n          var requestParameters = _networkRequest.default.setRequestParameters(url, 'POST', { data: parameters });\n          return _networkRequest.default.makeAPIRequest(requestParameters).then(function (response) {\n            return _this.controller.setProperties({\n              reportsData: response.data,\n              reportParameters: parameters\n            });\n          }, function (reason) {\n            Ember.$('.table-loading-state').css('display', 'none');\n            return _networkErrorHandler.default.handleErrorResponse(reason, url);\n          });\n        }\n        this.exportReport(parameters, type);\n      }\n    },\n\n    exportReport: function exportReport(parameters, type) {\n      _analytics.default.sendExportReportEvent(this.get('metrics'));\n      var url = _networkRequest.default.buildURL('exportReport', { body: JSON.stringify(parameters), reportType: type });\n      var a = document.createElement('A');\n      a.href = url;\n      a.download = url;\n      document.body.appendChild(a);\n      a.click();\n      document.body.removeChild(a);\n    }\n  });\n});","define('timetracker/routes/authenticated/features/timeline', ['exports', 'timetracker/constants', 'timetracker/utils/analytics', 'timetracker/utils/timeline-util'], function (exports, _constants, _analytics, _timelineUtil) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Route.extend({\n\n    syncService: Ember.inject.service(),\n    metrics: Ember.inject.service(),\n\n    allowSync: true,\n\n    model: function model() {\n      var _this = this;\n\n      addEventListener(_constants.default.EVENTS.SYNC_COMPLETED, function () {\n        if (_this.get('allowSync')) {\n          _this.updateViewData();\n        }\n      });\n      this.get('syncService').sync();\n      return Ember.RSVP.hash({\n        allProjects: this.store.peekAll('project'),\n        allTimers: this.store.peekAll('timer')\n      });\n    },\n    setupController: function setupController(controller, model) {\n      this._super.apply(this, arguments);\n      var projects = model.allProjects.filterBy('archived', false).sortBy('name').toArray();\n      var timers = model.allTimers.filterBy('archived', false).toArray();\n      var events = _timelineUtil.default.makeEvents(timers, projects);\n      controller.setProperties({ projects: projects, events: events });\n    },\n\n\n    renderTemplate: function renderTemplate() {\n      this._super.apply(this, arguments);\n      var self = this;\n      Ember.run.next(this, '_layout');\n      Ember.$(window).resize(function () {\n        self._layout();\n      });\n    },\n\n    _layout: function _layout() {\n      var wrapperHeight = Ember.$('.nested-route-wrapper').height();\n      Ember.$('.full-calendar').fullCalendar('option', 'height', wrapperHeight);\n    },\n\n    actions: {\n      didTransition: function didTransition() {\n        _analytics.default.sendRouteEnteredEvent(this, this.get('metrics'));\n      },\n      shouldAllowSync: function shouldAllowSync(allowSync) {\n        this.set('allowSync', allowSync);\n        if (allowSync) {\n          this.updateViewData();\n        }\n      }\n    },\n\n    updateViewData: function updateViewData() {\n      var modalObject = {\n        allProjects: this.store.peekAll('project'),\n        allTimers: this.store.peekAll('timer')\n      };\n      this.setupController(this.controller, modalObject);\n    }\n  });\n});","define('timetracker/routes/authenticated/features/timers', ['exports', 'moment', 'ember-uuid', 'timetracker/constants', 'timetracker/utils/recent-timers-aggregate', 'timetracker/utils/analytics'], function (exports, _moment, _emberUuid, _constants, _recentTimersAggregate, _analytics) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Route.extend({\n\n    syncService: Ember.inject.service(),\n    metrics: Ember.inject.service(),\n\n    model: function model() {\n      var self = this;\n      addEventListener(_constants.default.EVENTS.SYNC_COMPLETED, function () {\n        return self.updateViewData();\n      });\n      this.get('syncService').sync();\n      return Ember.RSVP.hash({\n        allProjects: this.store.peekAll('project'),\n        allTimers: this.store.peekAll('timer')\n      });\n    },\n    setupController: function setupController(controller, model) {\n      this._super.apply(this, arguments);\n      var allProjects = model.allProjects.filterBy('archived', false).sortBy('name');\n      var recentTimers = (0, _recentTimersAggregate.default)(this.filterRecent(model.allTimers), allProjects);\n      controller.setProperties({ allProjects: allProjects, recentTimers: recentTimers });\n    },\n    filterRecent: function filterRecent(allTimers) {\n      var currentTime = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (0, _moment.default)().format();\n\n      var notArchivedTimersArray = allTimers.filterBy('archived', false);\n      var filtered = [];\n      var zoneOffsetMinute = _moment.default.parseZone(currentTime).utcOffset();\n      var recentTimerDays = (0, _moment.default)(currentTime).subtract(_constants.default.RECENT_TIMER_DAYS, 'days').startOf('day');\n      for (var i = 0, l = notArchivedTimersArray.length; i < l; i++) {\n        var record = notArchivedTimersArray[i];\n        var endTime = record.get ? record.get('endTime') : record.endTime;\n        var end = endTime ? (0, _moment.default)(endTime) : (0, _moment.default)(currentTime);\n        end.utcOffset(zoneOffsetMinute);\n        if (end.isAfter(recentTimerDays)) {\n          filtered.push(notArchivedTimersArray[i]);\n        }\n      }\n      return filtered;\n    },\n\n\n    renderTemplate: function renderTemplate() {\n      this._super.apply(this, arguments);\n      var self = this;\n      Ember.run.next(this, '_layout');\n      Ember.$(window).resize(function () {\n        self._layout();\n      });\n    },\n\n    _layout: function _layout() {\n      var wrapperHeight = Ember.$('.nested-route-wrapper').height();\n      var wrapperWidth = Ember.$('.nested-route-wrapper').width();\n      Ember.$('.timer-screen-wrapper').css({\n        height: wrapperHeight,\n        width: wrapperWidth\n      });\n      var recentTimersContainer = Ember.$('.recent-timers-wrapper');\n      if (recentTimersContainer.length > 0) {\n        var _topMargin = recentTimersContainer.position().top;\n        recentTimersContainer.height(wrapperHeight - _topMargin);\n      }\n      // positioning the button with absolute positioning\n      // margins are found by trial and error\n      // relative positioning using jquery .offset() method\n      // caused an empty white space to be left at the bottom of screen\n      var leftMargin = 61;\n      var topMargin = 100;\n      var left = Ember.$('body').width() - leftMargin;\n      Ember.$('#sidebar-toggle-button').css({ display: 'block', position: 'absolute', top: topMargin, left: left });\n    },\n\n    actions: {\n      didTransition: function didTransition() {\n        _analytics.default.sendRouteEnteredEvent(this, this.get('metrics'));\n      },\n      timerClicked: function timerClicked(projectSelected) {\n        var recentTimersInitialData = this.controller.get('recentTimers');\n        var recentTimers = recentTimersInitialData.map(function (item) {\n          return Ember.copy(item);\n        });\n        var activeTimerObject = recentTimers.findBy('timerRunning', true);\n        if (activeTimerObject) {\n          this._updateTimer(activeTimerObject);\n          if (projectSelected.projectId !== activeTimerObject.projectId) {\n            this._createTimer(projectSelected);\n          }\n        } else {\n          this._createTimer(projectSelected);\n        }\n        this.updateViewData();\n        this.get('syncService').sync();\n      },\n      toggleProjectsSidebar: function toggleProjectsSidebar() {\n        Ember.$('#projects-sidebar').sidebar('toggle');\n      },\n      transitionToAdminPage: function transitionToAdminPage() {\n        this.transitionTo('authenticated.manage.administration');\n      }\n    },\n\n    updateViewData: function updateViewData() {\n      var modalObject = {\n        allProjects: this.store.peekAll('project'),\n        allTimers: this.store.peekAll('timer')\n      };\n      this.setupController(this.controller, modalObject);\n    },\n    _updateTimer: function _updateTimer(activeTimerObject) {\n      var timerRecord = this.store.peekRecord('timer', activeTimerObject.timerId);\n      timerRecord.set('endTime', (0, _moment.default)());\n    },\n    _createTimer: function _createTimer(projectSelected) {\n      var projectId = projectSelected.projectId;\n      var newTimerId = (0, _emberUuid.v4)();\n      var newTimer = {\n        id: newTimerId,\n        timerId: newTimerId,\n        projectId: projectId,\n        startTime: (0, _moment.default)(),\n        endTime: null,\n        archived: false\n      };\n      var record = this.store.createRecord('timer', newTimer);\n      record.set('id', newTimerId);\n    }\n  });\n});","define('timetracker/routes/authenticated/manage', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Route.extend({\n\n    loginService: Ember.inject.service('loginService'),\n\n    renderTemplate: function renderTemplate() {\n      this.render('authenticated.manage.manageSidebar', {\n        into: 'authenticated',\n        outlet: 'sidebar'\n      });\n      this.render();\n    },\n\n    setupController: function setupController(controller) {\n      this._super.apply(this, arguments);\n      controller.set('isAdmin', this.get('loginService').isAdmin);\n    }\n  });\n});","define('timetracker/routes/authenticated/manage/administration', ['exports', 'timetracker/utils/network-request', 'timetracker/utils/analytics', 'timetracker/utils/network-error-handler', 'timetracker/constants', 'timetracker/utils/logger'], function (exports, _networkRequest, _analytics, _networkErrorHandler, _constants, _logger) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Route.extend({\n\n    loginService: Ember.inject.service('loginService'),\n    metrics: Ember.inject.service(),\n    i18n: Ember.inject.service(),\n\n    model: function model(params, transition) {\n      var _this = this;\n\n      var loginService = this.get('loginService');\n      var store = this.store;\n      return loginService.validate().then(function () {\n        if (!loginService.isAdmin) {\n          return _this.replaceWith('unauthorized');\n        }\n        return Ember.RSVP.hash({\n          projects: _this.fetchAllProjects(store, loginService),\n          users: _this.fetchAllUsers(store, loginService)\n        }).catch(function (reason) {\n          _networkErrorHandler.default.broadcastCustomEvent(reason);\n          return transition.abort();\n        });\n      }).catch(function (reason) {\n        _networkErrorHandler.default.broadcastCustomEvent(reason);\n        return transition.abort();\n      });\n    },\n    exit: function exit() {\n      Ember.$('.admin-access-denied-error.ui.modal, .admin-page-custom-error.ui.modal').remove();\n    },\n    setupController: function setupController(controller) {\n      this._super.apply(this, arguments);\n      controller.set('user', this.get('loginService').user);\n    },\n    fetchAllProjects: function fetchAllProjects(store, loginService) {\n      if (loginService.user.canManageProjects) {\n        var url = _networkRequest.default.buildURL('allProjects');\n        var params = _networkRequest.default.setRequestParameters(url, 'GET');\n        return _networkRequest.default.makeAPIRequest(params).then(function (response) {\n          response.projects.forEach(function (project) {\n            store.push(store.normalize('admin-project', project));\n          });\n          if (!loginService.user.canManageUsers) {\n            response.users.forEach(function (user) {\n              store.push(store.normalize('admin-user', user));\n            });\n          }\n          return store.peekAll('admin-project');\n        }, function (reason) {\n          return reason;\n        });\n      }\n      return null;\n    },\n    fetchAllUsers: function fetchAllUsers(store, loginService) {\n      if (loginService.user.canManageUsers) {\n        var url = _networkRequest.default.buildURL('allUsers');\n        var params = _networkRequest.default.setRequestParameters(url, 'GET');\n        return _networkRequest.default.makeAPIRequest(params).then(function (response) {\n          response.users.forEach(function (project) {\n            store.push(store.normalize('admin-user', project));\n          });\n          return store.peekAll('admin-user');\n        }, function (reason) {\n          return reason;\n        });\n      } else if (loginService.user.canManageProjects) {\n        return store.peekAll('admin-user');\n      }\n      return null;\n    },\n\n\n    actions: {\n      didTransition: function didTransition() {\n        _analytics.default.sendRouteEnteredEvent(this, this.get('metrics'));\n      },\n      handleError: function handleError(error) {\n        this.handleFourHundredError(error);\n      }\n    },\n\n    handleFourHundredError: function handleFourHundredError(adapterError) {\n      var statusCode = _networkErrorHandler.default.getErrorStatus(adapterError);\n      if (statusCode === _constants.default.RESPONSE_CODES.BAD_REQUEST) {\n        var errorCode = _networkErrorHandler.default.getFouHundredErrorCode(adapterError);\n        switch (errorCode) {\n          case _constants.default.RESPONSE_400_ERRORS.CONFLICT:\n            {\n              this._showCustomErrorModal(errorCode);\n              this.refresh();\n              break;\n            }\n          case _constants.default.RESPONSE_400_ERRORS.PROJECT_ID_ALREADY_EXISTS:\n            {\n              // TODO update project id with a new id and retry\n              _logger.default.error('Encountered project id already exist error');\n              this._showCustomErrorModal(errorCode);\n              break;\n            }\n          case _constants.default.RESPONSE_400_ERRORS.PROJECT_NAME_ALREADY_EXISTS:\n            {\n              this._showCustomErrorModal(errorCode);\n              this.refresh();\n              break;\n            }\n          case _constants.default.RESPONSE_400_ERRORS.USER_NOT_AUTHORIZED_TO_MANAGE_PROJECTS:\n            {\n              this._showAccessDeniedModal();\n              break;\n            }\n          case _constants.default.RESPONSE_400_ERRORS.MISSING_USER_IDS:\n            {\n              _logger.default.error('Encountered missing user ids error');\n              this._showCustomErrorModal(errorCode);\n              break;\n            }\n          case _constants.default.RESPONSE_400_ERRORS.USER_DOES_NOT_EXIST:\n            {\n              _logger.default.error('Encountered user does not exist error');\n              this._showCustomErrorModal(errorCode);\n              this.refresh();\n              break;\n            }\n          case _constants.default.RESPONSE_400_ERRORS.USER_ID_ALREADY_EXISTS:\n            {\n              // TODO update user id with a new id and retry\n              _logger.default.error('Encountered user id already exist error');\n              this._showCustomErrorModal(errorCode);\n              break;\n            }\n          case _constants.default.RESPONSE_400_ERRORS.USER_WITH_SAME_EMAIL_ID_ALREADY_EXISTS:\n            {\n              this._showCustomErrorModal(errorCode);\n              this.refresh();\n              break;\n            }\n          case _constants.default.RESPONSE_400_ERRORS.USER_NOT_AUTHORIZED_TO_MANAGE_USERS:\n            {\n              this._showAccessDeniedModal();\n              break;\n            }\n          case _constants.default.RESPONSE_400_ERRORS.AT_LEAST_ONE_USER_SHOULD_BE_MANAGING_USERS:\n            {\n              this._showCustomErrorModal(errorCode);\n              break;\n            }\n          case _constants.default.RESPONSE_400_ERRORS.AT_LEAST_ONE_USER_SHOULD_BE_MANAGING_PROJECTS:\n            {\n              this._showCustomErrorModal(errorCode);\n              break;\n            }\n          case _constants.default.RESPONSE_400_ERRORS.AT_LEAST_ONE_USER_SHOULD_BE_ABLE_TO_CHANGE_BILLING_DETAILS:\n            {\n              this._showCustomErrorModal(errorCode);\n              break;\n            }\n          case _constants.default.RESPONSE_400_ERRORS.CANNOT_CHANGE_EMAIL_ID:\n            {\n              _logger.default.error('Encountered can not change email id error');\n              this._showCustomErrorModal(errorCode);\n              break;\n            }\n          default:\n            {\n              this._showCustomErrorModal(errorCode);\n            }\n        }\n      }\n    },\n    _showAccessDeniedModal: function _showAccessDeniedModal() {\n      var self = this;\n      Ember.$('.admin-access-denied-error.ui.modal').modal({\n        closable: false,\n        onApprove: function onApprove() {\n          Ember.$('.admin-access-denied-error.ui.modal').hide();\n          self.transitionTo('login');\n        }\n      }).modal('show');\n    },\n    _showCustomErrorModal: function _showCustomErrorModal(errorCode) {\n      var message = void 0;\n      var i18n = this.get('i18n');\n      if (errorCode === _constants.default.RESPONSE_400_ERRORS.AT_LEAST_ONE_USER_SHOULD_BE_MANAGING_USERS) {\n        message = i18n.t('messages.atLeastOneUserShouldManageUsers');\n      } else if (errorCode === _constants.default.RESPONSE_400_ERRORS.AT_LEAST_ONE_USER_SHOULD_BE_MANAGING_PROJECTS) {\n        message = i18n.t('messages.atLeastOneUserShouldManageProjects');\n      } else if (errorCode === _constants.default.RESPONSE_400_ERRORS.AT_LEAST_ONE_USER_SHOULD_BE_ABLE_TO_CHANGE_BILLING_DETAILS) {\n        message = i18n.t('messages.atLeastOneUserShouldBeAbleToChangeBilling');\n      } else {\n        message = i18n.t('messages.pleaseTryLater');\n      }\n      this.controller.set('errorMessage', message);\n      Ember.$('.admin-page-custom-error.ui.modal').modal({\n        onApprove: function onApprove() {\n          Ember.$('.admin-page-custom-error.ui.modal').hide();\n        }\n      }).modal('show');\n    }\n  });\n});","define('timetracker/routes/authenticated/manage/profile', ['exports', 'timetracker/utils/analytics', 'timetracker/utils/network-error-handler'], function (exports, _analytics, _networkErrorHandler) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Route.extend({\n\n    loginService: Ember.inject.service('loginService'),\n    metrics: Ember.inject.service(),\n\n    user: null,\n\n    model: function model(params, transition) {\n      var loginService = this.get('loginService');\n      return loginService.validate().then(function () {\n        return loginService.user;\n      }).catch(function (reason) {\n        _networkErrorHandler.default.broadcastCustomEvent(reason);\n        return transition.abort();\n      });\n    },\n    setupController: function setupController(controller, model) {\n      controller.set('user', model);\n    },\n\n\n    actions: {\n      didTransition: function didTransition() {\n        _analytics.default.sendRouteEnteredEvent(this, this.get('metrics'));\n      }\n    }\n  });\n});","define('timetracker/routes/login', ['exports', 'timetracker/constants', 'timetracker/utils/network-request'], function (exports, _constants, _networkRequest) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Route.extend({\n\n    loginService: Ember.inject.service('loginService'),\n\n    // If the user is already logged in prevent navigation to /login\n    // and redirect to redirectionUrl or authenticated.timers route\n    beforeModel: function beforeModel() {\n      var _this = this;\n\n      var loginService = this.get('loginService');\n      return loginService.validate().then(function () {\n        _this.replaceWith('authenticated.features');\n      }).catch(function (reason) {\n        if (reason.status === _constants.default.RESPONSE_CODES.UNAUTHORIZED_ERROR) {\n          _this.store.unloadAll();\n          return;\n        }\n      });\n    },\n\n    actions: {\n\n      login: function login(loginCredentials) {\n        var _this2 = this;\n\n        return this.get('loginService').login(loginCredentials).then(function () {\n          return _this2.replaceWith('authenticated.features');\n        });\n      },\n\n      resendVerifyEmail: function resendVerifyEmail(emailId, teamName) {\n        var url = _networkRequest.default.buildURL('sendEmailWithConfirmationLink');\n        var data = { teamName: teamName, emailId: emailId };\n        var hash = _networkRequest.default.setRequestParameters(url, 'POST', { data: data });\n        return _networkRequest.default.makeAPIRequest(hash);\n      },\n\n      forgotPassword: function forgotPassword(emailId, teamName) {\n        var url = _networkRequest.default.buildURL('requestPasswordReset');\n        var data = { teamName: teamName, emailId: emailId };\n        var hash = _networkRequest.default.setRequestParameters(url, 'POST', { data: data });\n        return _networkRequest.default.makeAPIRequest(hash);\n      }\n    },\n\n    renderTemplate: function renderTemplate() {\n      this._super.apply(this, arguments);\n      var self = this;\n      Ember.run.next(this, '_layout');\n      Ember.$(window).resize(function () {\n        self._layout();\n      });\n    },\n\n    _layout: function _layout() {\n      var bodyHeight = Ember.$('body').innerHeight();\n      Ember.$('.login-screen').css('height', bodyHeight);\n    }\n  });\n});","define('timetracker/routes/not-found', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Route.extend({});\n});","define('timetracker/routes/unauthorized', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Route.extend({});\n});","define('timetracker/serializers/admin-project', ['exports', 'timetracker/serializers/project'], function (exports, _project) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _project.default;\n});","define('timetracker/serializers/admin-user', ['exports', 'timetracker/serializers/user'], function (exports, _user) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _user.default;\n});","define('timetracker/serializers/project-report-timer', ['exports', 'ember-data'], function (exports, _emberData) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberData.default.JSONSerializer.extend({\n\n    // each model in ember store is specified by 'id' attribute\n    // we change this attribute for project-report-timer model to be 'timerId'\n    primaryKey: 'timerId',\n\n    /**\n     Ember data expects the adapter to return JSONAPI formatted response.\n     Response from adapter is normalized into JSONAPI format, using normalizeResponse\n     @method normalizeResponse\n     @param {DS.Store} store the store class\n     @param {object} modelObject model object for project-report-timer\n     @param {object} payload response data from adapter\n     @param {string} id identifier for response in case of single object\n     @param {string} responseType the type of store method that invoked the method\n     @return {object} JSONAPI formatted object.\n     */\n    normalizeResponse: function normalizeResponse(store, modelObject, payload, id, responseType) {\n      if (responseType === 'query') {\n        return this.normalizeQueryResponse(store, modelObject, payload, id, responseType);\n      }\n    },\n    normalizeQueryResponse: function normalizeQueryResponse(store, modelObject, payload, id, responseType) {\n      if (payload.errors) {\n        return { data: [] };\n      }\n      var timers = payload.timers;\n      return this.normalizeArrayResponse(store, modelObject, timers, id, responseType);\n    }\n  });\n});","define('timetracker/serializers/project', ['exports', 'ember-data'], function (exports, _emberData) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberData.default.JSONSerializer.extend({\n\n    // each model in ember store is specified by 'id' attribute\n    // we change this attribute for project model to be 'projectId'\n    primaryKey: 'projectId',\n\n    /**\n     Ember data expects the adapter to return JSONAPI formatted response.\n     Response from adapter is normalized into JSONAPI format, using normalizeResponse\n     @method normalizeFindAllResponse\n     @param {DS.Store} store the store class\n     @param {object} modelObject model object for project\n     @param {object} payload response data from adapter\n     @param {string} id identifier for response in case of single object\n     @param {string} responseType the type of store method that invoked the method\n     @return {object} JSONAPI formatted object.\n     */\n    normalizeFindAllResponse: function normalizeFindAllResponse(store, modelObject, payload, id, responseType) {\n      if (payload.errors) {\n        return { data: [] };\n      }\n      var projects = payload.projects;\n      return this.normalizeArrayResponse(store, modelObject, projects, id, responseType);\n    }\n  });\n});","define('timetracker/serializers/timer', ['exports', 'ember-data'], function (exports, _emberData) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberData.default.JSONSerializer.extend({\n\n    // each model in ember store is specified by 'id' attribute\n    // we change this attribute for timer model to be 'timerId'\n    primaryKey: 'timerId',\n\n    /**\n     Ember data expects the adapter to return JSONAPI formatted response.\n     Response from adapter is normalized into JSONAPI format, using normalizeResponse\n     @method normalizeFindAllResponse\n     @param {DS.Store} store the store class\n     @param {object} modelObject model object for timer\n     @param {object} payload response data from adapter\n     @param {string} id identifier for response in case of single object\n     @param {string} responseType the type of store method that invoked the method\n     @return {object} JSONAPI formatted object.\n     */\n    normalizeFindAllResponse: function normalizeFindAllResponse(store, modelObject, payload, id, responseType) {\n      var timers = payload.timers;\n      return this.normalizeArrayResponse(store, modelObject, timers, id, responseType);\n    }\n  });\n});","define('timetracker/serializers/user-report-timer', ['exports', 'ember-data'], function (exports, _emberData) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberData.default.JSONSerializer.extend({\n\n    // each model in ember store is specified by 'id' attribute\n    // we change this attribute for user-report-timer model to be 'timerId'\n    primaryKey: 'timerId',\n\n    /**\n     Ember data expects the adapter to return JSONAPI formatted response.\n     Response from adapter is normalized into JSONAPI format, using normalizeResponse\n     @method normalizeResponse\n     @param {DS.Store} store the store class\n     @param {object} modelObject model object for user-report-timer\n     @param {object} payload response data from adapter\n     @param {string} id identifier for response in case of single object\n     @param {string} responseType the type of store method that invoked the method\n     @return {object} JSONAPI formatted object.\n     */\n    normalizeResponse: function normalizeResponse(store, modelObject, payload, id, responseType) {\n      if (responseType === 'query') {\n        return this.normalizeQueryResponse(store, modelObject, payload, id, responseType);\n      }\n    },\n    normalizeQueryResponse: function normalizeQueryResponse(store, modelObject, payload, id, responseType) {\n      if (payload.errors) {\n        return { data: [] };\n      }\n      var timers = payload.timers;\n      return this.normalizeArrayResponse(store, modelObject, timers, id, responseType);\n    }\n  });\n});","define('timetracker/serializers/user', ['exports', 'ember-data'], function (exports, _emberData) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _emberData.default.JSONSerializer.extend({\n\n    // each model in ember store is specified by 'id' attribute\n    // we change this attribute for user model to be 'userId'\n    primaryKey: 'userId',\n\n    /**\n     Ember data expects the adapter to return JSONAPI formatted response.\n     Response from adapter is normalized into JSONAPI format, using normalizeResponse\n     @method normalizeResponse\n     @param {DS.Store} store the store class\n     @param {object} modelObject model object for user\n     @param {object} payload response data from adapter\n     @param {string} id identifier for response in case of single object\n     @param {string} responseType the type of store method that invoked the method\n     @return {object} JSONAPI formatted object.\n     */\n    normalizeFindAllResponse: function normalizeFindAllResponse(store, modelObject, payload, id, responseType) {\n      if (payload.errors) {\n        return { data: [] };\n      }\n      var users = payload.users;\n      return this.normalizeArrayResponse(store, modelObject, users, id, responseType);\n    }\n  });\n});","define('timetracker/services/ajax', ['exports', 'ember-ajax/services/ajax'], function (exports, _ajax) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _ajax.default;\n    }\n  });\n});","define('timetracker/services/i18n', ['exports', 'ember-i18n/services/i18n'], function (exports, _i18n) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _i18n.default;\n    }\n  });\n});","define('timetracker/services/login-service', ['exports', 'timetracker/utils/network-request'], function (exports, _networkRequest) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Service.extend({\n\n    isAuthenticated: false,\n    user: null,\n    organization: null,\n    redirectionUrl: null,\n\n    isAdmin: false,\n\n    login: function login(loginCredentials) {\n      var data = {\n        teamName: loginCredentials.teamName,\n        emailId: loginCredentials.emailId,\n        password: loginCredentials.password\n      };\n      var url = _networkRequest.default.buildURL('login');\n      return this._sendRequest(url, data);\n    },\n    logout: function logout() {\n      var self = this;\n      var url = _networkRequest.default.buildURL('logout');\n      var hash = _networkRequest.default.setRequestParameters(url, 'POST');\n      return _networkRequest.default.makeAPIRequest(hash).then(function () {\n        self.setProperties({\n          isAuthenticated: false,\n          user: null,\n          organization: null,\n          redirectionUrl: null,\n          isAdmin: false\n        });\n        self.setUserForReporting();\n      });\n    },\n    validate: function validate() {\n      var data = {};\n      var url = _networkRequest.default.buildURL('validate');\n      return this._sendRequest(url, data);\n    },\n    _sendRequest: function _sendRequest(url, data) {\n      var hash = _networkRequest.default.setRequestParameters(url, 'POST', { data: data });\n      var self = this;\n      return _networkRequest.default.makeAPIRequest(hash).then(function (response) {\n        var user = response.user;\n        self.set('isAuthenticated', true);\n        self.set('user', user);\n        self.set('organization', response.organization);\n        if (user.canManageProjects || user.canManageUsers || user.canChangeBillingDetails) {\n          self.set('isAdmin', true);\n        } else {\n          self.set('isAdmin', false);\n        }\n        self.setUserForReporting(user);\n        return response;\n      }, function (reason) {\n        return reason;\n      });\n    },\n    setUserForReporting: function setUserForReporting(user) {\n      if (user) {\n        Raven.setUserContext({ // eslint-disable-line no-undef\n          userId: user.userId,\n          userName: user.name,\n          userEmailId: user.emailId\n        });\n      } else {\n        Raven.setUserContext(); // eslint-disable-line no-undef\n      }\n    }\n  });\n});","define('timetracker/services/media', ['exports', 'ember-responsive/media'], function (exports, _media) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _media.default;\n});","define('timetracker/services/metrics', ['exports', 'ember-metrics/services/metrics'], function (exports, _metrics) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _metrics.default;\n    }\n  });\n});","define('timetracker/services/raven', ['exports', 'ember-cli-sentry/services/raven'], function (exports, _raven) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _raven.default;\n    }\n  });\n});","define('timetracker/services/sync-service', ['exports', 'timetracker/utils/network-request', 'timetracker/utils/sync-modal-handler-util', 'timetracker/constants', 'timetracker/utils/network-error-handler', 'timetracker/utils/timer-util', 'timetracker/utils/logger'], function (exports, _networkRequest, _syncModalHandlerUtil, _constants, _networkErrorHandler, _timerUtil, _logger) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Service.extend({\n\n    store: Ember.inject.service(),\n    i18n: Ember.inject.service(),\n\n    isSyncing: false,\n    projectsChangeToken: null,\n    timersChangeToken: null,\n\n    requestType: {\n      project: 'project',\n      timer: 'timer'\n    },\n\n    init: function init() {\n      this.resetChangeTokens();\n    },\n    sync: function sync() {\n      var _this = this;\n\n      if (this.get('isSyncing')) {\n        // sync is already running\n        return;\n      }\n      this.set('isSyncing', true);\n      var syncCompleted = new CustomEvent(_constants.default.EVENTS.SYNC_COMPLETED);\n      this.syncProjects().then(function () {\n        _this.syncTimers().then(function () {\n          dispatchEvent(syncCompleted);\n          _this.set('isSyncing', false);\n        }).catch(function () {\n          return _this.set('isSyncing', false);\n        });\n      }).catch(function () {\n        return _this.set('isSyncing', false);\n      });\n    },\n    fetchRecordsFromServer: function fetchRecordsFromServer(type) {\n      var url = void 0;\n      if (type === this.requestType.project) {\n        url = _networkRequest.default.buildURL('getProjects', { changeToken: this.get('projectsChangeToken') });\n      } else if (type === this.requestType.timer) {\n        url = _networkRequest.default.buildURL('getTimers', { changeToken: this.get('timersChangeToken') });\n      }\n      var hash = _networkRequest.default.setRequestParameters(url, 'GET');\n      return _networkRequest.default.makeAPIRequest(hash).then(function (response) {\n        return response;\n      }, function (reason) {\n        _networkErrorHandler.default.handleErrorResponse(reason, url);\n        return reason;\n      });\n    },\n    syncProjects: function syncProjects() {\n      var _this2 = this;\n\n      var self = this;\n      var projectType = this.requestType.project;\n      return new Ember.RSVP.Promise(function (resolve, reject) {\n        _this2.fetchRecordsFromServer(self.requestType.project).then(function (projectsResponse) {\n          _this2.mergeServerChanges(projectsResponse.projects, projectType).then(function () {\n            self.set('projectsChangeToken', projectsResponse.projectsChangeToken);\n            return resolve();\n          });\n        }).catch(function (reason) {\n          return reject(reason);\n        });\n      });\n    },\n    syncTimers: function syncTimers() {\n      var _this3 = this;\n\n      var oldTimersChangeToken = this.get('timersChangeToken');\n      var self = this;\n      var timerType = this.requestType.timer;\n      return new Ember.RSVP.Promise(function (resolve, reject) {\n        _this3.fetchRecordsFromServer(self.requestType.timer).then(function (timersResponse) {\n          if (oldTimersChangeToken === timersResponse.timersChangeToken) {\n            _this3.updateLocalChanges(timerType).then(function () {\n              return resolve();\n            }).catch(function (reason) {\n              return reject(reason);\n            });\n          } else {\n            _this3.mergeServerChanges(timersResponse.timers, timerType).then(function () {\n              self.updateLocalChanges(timerType).then(function () {\n                self.set('timersChangeToken', timersResponse.timersChangeToken);\n                resolve();\n              }).catch(function (reason) {\n                return reject(reason);\n              });\n            });\n          }\n        }).catch(function (reason) {\n          return reject(reason);\n        });\n      });\n    },\n    mergeServerChanges: function mergeServerChanges(responseData, type) {\n      var store = this.get('store');\n      var self = this;\n      return new Ember.RSVP.Promise(function (resolve, reject) {\n        if (responseData.length === 0) {\n          return resolve();\n        }\n        return self.mergeRecordSynchronouslyToStore(store, responseData, type, 0).then(function () {\n          return resolve();\n        }).catch(function (reason) {\n          return reject(reason);\n        });\n      });\n    },\n    mergeRecordSynchronouslyToStore: function mergeRecordSynchronouslyToStore(store, serverRecords, type, index) {\n      var _this4 = this;\n\n      var self = this;\n      return new Ember.RSVP.Promise(function (resolve) {\n        var serverRecord = serverRecords[index];\n        var id = type === _this4.requestType.project ? serverRecord.projectId : serverRecord.timerId;\n        var record = store.peekRecord(type, id);\n        return _this4.createOrUpdateRecordInStore(record, serverRecord, type).then(function () {\n          if (serverRecords.length > index + 1) {\n            return self.mergeRecordSynchronouslyToStore(store, serverRecords, type, index + 1).then(function () {\n              return resolve();\n            });\n          }\n          return resolve();\n        });\n      });\n    },\n    createOrUpdateRecordInStore: function createOrUpdateRecordInStore(storeRecord, serverRecord, type) {\n      var _this5 = this;\n\n      var store = this.get('store');\n      return new Ember.RSVP.Promise(function (resolve) {\n        if (type === _this5.requestType.timer) {\n          if (!_timerUtil.default.isAValidTimer(serverRecord)) {\n            return resolve();\n          }\n          if (storeRecord && !_timerUtil.default.isAValidTimer(_timerUtil.default.getJsonFormattedTimer(storeRecord))) {\n            store.unloadRecord(storeRecord);\n            return resolve();\n          }\n        }\n        var keepServerData = function keepServerData() {\n          store.unloadRecord(storeRecord);\n          store.push(store.normalize(type, serverRecord));\n          return resolve();\n        };\n        var keepLocalData = function keepLocalData() {\n          storeRecord.set('changeToken', serverRecord.changeToken);\n          return resolve();\n        };\n        if (!storeRecord) {\n          store.push(store.normalize(type, serverRecord));\n          return resolve();\n        } else if (!storeRecord.get('hasDirtyAttributes')) {\n          // if record is not changed locally\n          return keepServerData();\n        }\n        // Keeping local data by default for project conflicts\n        if (type === _this5.requestType.project) {\n          return keepLocalData();\n        }\n        var i18n = _this5.get('i18n');\n        return _syncModalHandlerUtil.default.resolveConflictingRecord(store, storeRecord, serverRecord, keepServerData, keepLocalData, i18n).then(function () {\n          return resolve();\n        });\n      });\n    },\n    updateLocalChanges: function updateLocalChanges(type) {\n      var self = this;\n      var store = this.get('store');\n      var recordsToUpdate = store.peekAll(type).filterBy('hasDirtyAttributes', true);\n      return new Ember.RSVP.Promise(function (resolve, reject) {\n        if (recordsToUpdate.length === 0) {\n          return resolve();\n        }\n        return self.updateRecordsSynchronously(recordsToUpdate, 0).then(function () {\n          return resolve();\n        }).catch(function (reason) {\n          return reject(reason);\n        });\n      });\n    },\n    updateRecordsSynchronously: function updateRecordsSynchronously(recordsToUpdate, index) {\n      var _this6 = this;\n\n      var self = this;\n      return new Ember.RSVP.Promise(function (resolve, reject) {\n        var record = recordsToUpdate[index];\n        _timerUtil.default.testAndArchiveLessThanAMinuteTimers(record);\n        return record.save().then(function () {\n          if (recordsToUpdate.length > index + 1) {\n            return self.updateRecordsSynchronously(recordsToUpdate, index + 1).then(function () {\n              return resolve();\n            }).catch(function (reason) {\n              return reject(reason);\n            });\n          }\n          return resolve();\n        }).catch(function (reason) {\n          _this6.handleErrorResponse(reason, record);\n          return resolve();\n        });\n      });\n    },\n    resetChangeTokens: function resetChangeTokens() {\n      this.setProperties({\n        projectsChangeToken: '0|0',\n        timersChangeToken: 0\n      });\n    },\n    handleErrorResponse: function handleErrorResponse(adapterError, record) {\n      var statusCode = _networkErrorHandler.default.getErrorStatus(adapterError);\n      if (statusCode === _constants.default.RESPONSE_CODES.BAD_REQUEST) {\n        var errorCode = _networkErrorHandler.default.getFouHundredErrorCode(adapterError);\n        var errorReason = _networkErrorHandler.default.getErrorObject(adapterError);\n        switch (errorCode) {\n          case _constants.default.RESPONSE_400_ERRORS.CONFLICT:\n            {\n              // changeToken out of date error is resolved when sync runs the next time\n              // TODO track other conflict errors for updateTimer as on API\n              break;\n            }\n          case _constants.default.RESPONSE_400_ERRORS.PROJECT_ID_DOES_NOT_EXIST:\n            {\n              _logger.default.error('Encountered project id does not exist error', record);\n              _networkErrorHandler.default.broadcastCustomEvent(errorReason);\n              record.rollbackAttributes();\n              break;\n            }\n          case _constants.default.RESPONSE_400_ERRORS.TIMER_ID_ALREADY_EXISTS:\n            {\n              // TODO update timer id with a new id and retry\n              _logger.default.error('Encountered timer id already exist error', record);\n              _networkErrorHandler.default.broadcastCustomEvent(errorReason);\n              record.rollbackAttributes();\n              break;\n            }\n          default:\n            {\n              _networkErrorHandler.default.broadcastCustomEvent(errorReason);\n              record.rollbackAttributes();\n            }\n        }\n      }\n    }\n  });\n});","define(\"timetracker/templates/application-loading\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"qV6+AfXm\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"application-loading-state\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"application-loading-spinner\\\"],[7],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/application-loading.hbs\" } });\n});","define(\"timetracker/templates/application\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"HM+itwlo\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[18,\\\"outlet\\\"],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/application.hbs\" } });\n});","define(\"timetracker/templates/authenticated\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"hIAD+fao\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"application-header\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"ui-dropdown\\\",null,[[\\\"class\\\"],[\\\"nav-dropdown pointing\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"dropdown-trigger\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"dropdown icon\\\"],[7],[8],[0,\\\"\\\\n      \\\"],[6,\\\"img\\\"],[9,\\\"class\\\",\\\"header-avatar\\\"],[9,\\\"src\\\",\\\"/assets/images/Profile.png\\\"],[9,\\\"srcset\\\",\\\"/assets/images/Profile.png 1x, /assets/images/Profile@2x.png 2x\\\"],[7],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"menu nav-dropdown-menu\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"user-info\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.signedInAs\\\"],null],false],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[7],[1,[20,[\\\"user\\\",\\\"name\\\"]],false],[8],[0,\\\"\\\\n      \\\"],[8],[0,\\\"\\\\n\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"nav-separator-line\\\"],[7],[8],[0,\\\"\\\\n\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"links\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"link-to\\\",[\\\"authenticated.manage.profile\\\"],[[\\\"class\\\"],[\\\"profile-link item\\\"]],{\\\"statements\\\":[[0,\\\"          \\\"],[6,\\\"div\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.navBar.myProfile\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"isAdmin\\\"]]],null,{\\\"statements\\\":[[4,\\\"link-to\\\",[\\\"authenticated.manage.administration\\\"],[[\\\"class\\\"],[\\\"profile-link item\\\"]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.navBar.administration\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"logout item\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"logout\\\"],[[\\\"on\\\"],[\\\"click\\\"]]],[7],[1,[25,\\\"t\\\",[\\\"strings.navBar.signOut\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"sidebar\\\"],[7],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"link-to\\\",[\\\"authenticated.features.timers\\\"],[[\\\"class\\\"],[\\\"app-icon\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"img\\\"],[9,\\\"src\\\",\\\"/assets/images/SidebarLogo.png\\\"],[9,\\\"srcset\\\",\\\"/assets/images/SidebarLogo.png 1x, /assets/images/SidebarLogo@2x.png 2x\\\"],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[1,[25,\\\"outlet\\\",[\\\"sidebar\\\"],null],false],[0,\\\"\\\\n\\\\n\\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"model-loading-state hidden\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"lading-spinner\\\"],[7],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui modal request-error-modal\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"content\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"span\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.oops\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[6,\\\"span\\\"],[7],[1,[18,\\\"errorMessage\\\"],false],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"actions\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui approve button\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.dismiss\\\"],null],false],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui modal change-password-modal\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"form\\\"],[9,\\\"class\\\",\\\"content\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"updatePassword\\\"],[[\\\"on\\\"],[\\\"submit\\\"]]],[7],[0,\\\"\\\\n    \\\"],[6,\\\"h3\\\"],[9,\\\"class\\\",\\\"ui center aligned inverted header\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.profile.updatePassword\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"short-note\\\"],[7],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.profile.oldPassword\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n      \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"autocomplete\\\",\\\"value\\\",\\\"autofocus\\\"],[\\\"password\\\",\\\"off\\\",[20,[\\\"oldPassword\\\"]],\\\"autofocus\\\"]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.profile.newPassword\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n      \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"autocomplete\\\",\\\"value\\\"],[\\\"password\\\",\\\"off\\\",[20,[\\\"newPassword\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.profile.confirmPassword\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n      \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"autocomplete\\\",\\\"value\\\"],[\\\"password\\\",\\\"off\\\",[20,[\\\"confirmedPassword\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"container\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"error message hidden invalid-old-password\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.passwordChangeFailure\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"error message hidden new-password-missmatch\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.confirmPasswordMatchAlt\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"error message hidden required-fields\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.allFieldsRequired\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"actions\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"submit\\\"],[9,\\\"class\\\",\\\"update-password-button ui tiny grey button\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"button-text\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.profile.updatePassword\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui modal conflict-resolution-modal\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"header\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"span\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.conflictHeading\\\"],null],false],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"conflicting-data\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"server-data\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"h5\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.serverData\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"project-name row\\\"],[7],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"key\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.timerFor\\\"],null],false],[8],[0,\\\":\\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"content ellipsis\\\"],[7],[8],[8],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"starts-at row\\\"],[7],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"key\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.startsAt\\\"],null],false],[8],[0,\\\":\\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"content\\\"],[7],[8],[8],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ends-at row\\\"],[7],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"key\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.endsAt\\\"],null],false],[8],[0,\\\":\\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"content\\\"],[7],[8],[8],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"is-archived row\\\"],[7],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"key\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.archived\\\"],null],false],[8],[0,\\\":\\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"content\\\"],[7],[8],[8],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"button-wrapper\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui button mini keep-server\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.acceptServer\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"local-data\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"h5\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.localData\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"project-name row\\\"],[7],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"key\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.timerFor\\\"],null],false],[8],[0,\\\":\\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"content ellipsis\\\"],[7],[8],[8],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"starts-at row\\\"],[7],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"key\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.startsAt\\\"],null],false],[8],[0,\\\":\\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"content\\\"],[7],[8],[8],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ends-at row\\\"],[7],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"key\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.endsAt\\\"],null],false],[8],[0,\\\":\\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"content\\\"],[7],[8],[8],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"is-archived row\\\"],[7],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"key\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.archived\\\"],null],false],[8],[0,\\\":\\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"content\\\"],[7],[8],[8],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"button-wrapper\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui button mini keep-local\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.acceptLocal\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"nested-route-wrapper\\\"],[7],[0,\\\"\\\\n  \\\"],[1,[18,\\\"outlet\\\"],false],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/authenticated.hbs\" } });\n});","define(\"timetracker/templates/authenticated/features\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"8XgW5nDy\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[18,\\\"outlet\\\"],false],[0,\\\"\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/authenticated/features.hbs\" } });\n});","define(\"timetracker/templates/authenticated/features/features-sidebar\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"oA+Kf025\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"sidebar-items\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"link-to\\\",[\\\"authenticated.features.timers\\\"],[[\\\"class\\\"],[\\\"sidebar-item\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"span\\\"],[7],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"clock outline icon\\\"],[7],[8],[8],[0,\\\"\\\\n    \\\"],[6,\\\"span\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.appSidebar.timers\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"link-to\\\",[\\\"authenticated.features.timeline\\\"],[[\\\"class\\\"],[\\\"sidebar-item\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"span\\\"],[7],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"calendar alternate icon\\\"],[7],[8],[8],[0,\\\"\\\\n    \\\"],[6,\\\"span\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.appSidebar.timeline\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"link-to\\\",[\\\"authenticated.features.reports\\\"],[[\\\"class\\\"],[\\\"sidebar-item\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"span\\\"],[7],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"file text outline icon\\\"],[7],[8],[8],[0,\\\"\\\\n    \\\"],[6,\\\"span\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.appSidebar.reports\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/authenticated/features/features-sidebar.hbs\" } });\n});","define(\"timetracker/templates/authenticated/features/reports\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"WDzEMdap\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"reports-container\\\"],[7],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"reports\\\"],[7],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"reports-title page-title\\\"],[7],[0,\\\"\\\\n      \\\"],[1,[25,\\\"t\\\",[\\\"strings.reports.reports\\\"],null],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[1,[25,\\\"report-parameters\\\",null,[[\\\"fetchReport\\\",\\\"model\\\",\\\"projects\\\",\\\"users\\\"],[\\\"fetchReport\\\",[20,[\\\"model\\\"]],[20,[\\\"allProjects\\\"]],[20,[\\\"allUsers\\\"]]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[1,[25,\\\"report-table\\\",null,[[\\\"reportsData\\\",\\\"reportParameters\\\"],[[20,[\\\"reportsData\\\"]],[20,[\\\"reportParameters\\\"]]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"table-loading-state hidden\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"lading-spinner\\\"],[7],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/authenticated/features/reports.hbs\" } });\n});","define(\"timetracker/templates/authenticated/features/timeline\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"DR2cp4Kw\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"id\\\",\\\"timeline-view\\\"],[7],[0,\\\"\\\\n  \\\"],[1,[25,\\\"timeline-view-component\\\",null,[[\\\"projects\\\",\\\"events\\\",\\\"shouldAllowSync\\\"],[[20,[\\\"projects\\\"]],[20,[\\\"events\\\"]],\\\"shouldAllowSync\\\"]]],false],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/authenticated/features/timeline.hbs\" } });\n});","define(\"timetracker/templates/authenticated/features/timers\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"PqUdYdlJ\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"timer-screen-wrapper\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"timer-screen pusher\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"timer-head page-title\\\"],[7],[0,\\\"\\\\n      \\\"],[1,[25,\\\"t\\\",[\\\"strings.timers.timers\\\"],null],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"timers-container\\\"],[7],[0,\\\"\\\\n    \\\"],[1,[25,\\\"recent-timers\\\",null,[[\\\"recentTimers\\\",\\\"timerClicked\\\"],[[20,[\\\"recentTimers\\\"]],\\\"timerClicked\\\"]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[8],[0,\\\"\\\\n  \\\"],[1,[25,\\\"new-timer-list\\\",null,[[\\\"allProjects\\\",\\\"timerClicked\\\",\\\"transitionToAdminPage\\\"],[[20,[\\\"allProjects\\\"]],\\\"timerClicked\\\",\\\"transitionToAdminPage\\\"]]],false],[0,\\\"\\\\n\\\\n\\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"id\\\",\\\"sidebar-toggle-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"toggleProjectsSidebar\\\"]],[7],[0,\\\"\\\\n  \\\"],[1,[25,\\\"t\\\",[\\\"strings.timers.projects\\\"],null],false],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/authenticated/features/timers.hbs\" } });\n});","define(\"timetracker/templates/authenticated/manage\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"BBRaRmRt\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[18,\\\"outlet\\\"],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/authenticated/manage.hbs\" } });\n});","define(\"timetracker/templates/authenticated/manage/administration\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"67PAceeo\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"admin-page-container\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"user\\\",\\\"canManageProjects\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"admin-page-section\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section-header\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.projects\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section-content\\\"],[7],[0,\\\"\\\\n        \\\"],[1,[25,\\\"project-administration\\\",null,[[\\\"currentUser\\\",\\\"projects\\\",\\\"users\\\",\\\"handleError\\\",\\\"class\\\"],[[20,[\\\"user\\\"]],[20,[\\\"model\\\",\\\"projects\\\"]],[20,[\\\"model\\\",\\\"users\\\"]],\\\"handleError\\\",\\\"project-administration-container\\\"]]],false],[0,\\\"\\\\n      \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[20,[\\\"user\\\",\\\"canManageUsers\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"admin-page-section\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section-header\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.users\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section-content\\\"],[7],[0,\\\"\\\\n        \\\"],[1,[25,\\\"user-administration\\\",null,[[\\\"currentUser\\\",\\\"users\\\",\\\"handleError\\\",\\\"class\\\"],[[20,[\\\"user\\\"]],[20,[\\\"model\\\",\\\"users\\\"]],\\\"handleError\\\",\\\"user-administration-container\\\"]]],false],[0,\\\"\\\\n      \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui modal admin-access-denied-error\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"content\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"message\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.unauthorizedPageMessage\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"actions\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui approve button\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.dismiss\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui modal admin-page-custom-error\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"content\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"span\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.requestCouldNotBeCompleted\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"message\\\"],[7],[1,[18,\\\"errorMessage\\\"],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"actions\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui approve button\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.dismiss\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/authenticated/manage/administration.hbs\" } });\n});","define(\"timetracker/templates/authenticated/manage/manage-sidebar\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"ulF8odI+\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"sidebar-items\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"link-to\\\",[\\\"authenticated.manage.profile\\\"],[[\\\"class\\\"],[\\\"sidebar-item\\\"]],{\\\"statements\\\":[[0,\\\"  \\\"],[6,\\\"span\\\"],[7],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"user icon\\\"],[7],[8],[8],[0,\\\"\\\\n    \\\"],[6,\\\"span\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.appSidebar.profile\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"isAdmin\\\"]]],null,{\\\"statements\\\":[[4,\\\"link-to\\\",[\\\"authenticated.manage.administration\\\"],[[\\\"class\\\"],[\\\"sidebar-item\\\"]],{\\\"statements\\\":[[0,\\\"      \\\"],[6,\\\"span\\\"],[7],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"users icon\\\"],[7],[8],[8],[0,\\\"\\\\n      \\\"],[6,\\\"span\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.appSidebar.administration\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/authenticated/manage/manage-sidebar.hbs\" } });\n});","define(\"timetracker/templates/authenticated/manage/profile\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"sNAAnUgI\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"profile-container\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"profile-header page-title\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.profile.profile\\\"],null],false],[8],[0,\\\"\\\\n\\\\n  \\\"],[1,[25,\\\"edit-profile\\\",null,[[\\\"user\\\"],[[20,[\\\"user\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/authenticated/manage/profile.hbs\" } });\n});","define(\"timetracker/templates/components/edit-profile\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"YDDtPf8i\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"profile-edit-container\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"profile-picture-container\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"profile-picture\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"img\\\"],[9,\\\"src\\\",\\\"/assets/images/defaultProfileImage.png\\\"],[9,\\\"srcset\\\",\\\"/assets/images/defaultProfileImage.png 1x, /assets/images/defaultProfileImage@2x.png 2x\\\"],[7],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"change-picture-button\\\"],[9,\\\"disabled\\\",\\\"disabled\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.profile.changePicture\\\"],null],false],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"edit-section\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.profile.email\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[6,\\\"span\\\"],[7],[1,[18,\\\"userEmail\\\"],false],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"form\\\"],[9,\\\"class\\\",\\\"edit-section\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.profile.name\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[1,[25,\\\"input\\\",null,[[\\\"autocomplete\\\",\\\"value\\\"],[\\\"off\\\",[20,[\\\"userName\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"update-name-button\\\"],[9,\\\"disabled\\\",\\\"disabled\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"updateName\\\"]],[7],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"button-spinner\\\"],[7],[8],[0,\\\"\\\\n      \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"button-text\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.profile.updateName\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui message hidden change-name-success\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"p\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.nameChangeSuccess\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui negative message hidden change-name-failure\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"p\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.nameChangeFailure\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"form\\\"],[9,\\\"class\\\",\\\"edit-section\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.profile.oldPassword\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"autocomplete\\\",\\\"value\\\"],[\\\"password\\\",\\\"oldPasswordInput\\\",\\\"off\\\",[20,[\\\"oldPassword\\\"]]]]],false],[0,\\\"\\\\n\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui negative message hidden wrong-old-password-message\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"p\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.passwordChangeFailure\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.profile.newPassword\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"autocomplete\\\",\\\"value\\\"],[\\\"password\\\",\\\"off\\\",[20,[\\\"newPassword\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.profile.confirmPassword\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"autocomplete\\\",\\\"value\\\"],[\\\"password\\\",\\\"confirmPasswordInput\\\",\\\"off\\\",[20,[\\\"confirmedPassword\\\"]]]]],false],[0,\\\"\\\\n\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui negative message hidden confirm-password-error-message\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"p\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.confirmPasswordMatch\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"update-password-button\\\"],[9,\\\"disabled\\\",\\\"disabled\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"updatePassword\\\"]],[7],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"button-spinner\\\"],[7],[8],[0,\\\"\\\\n      \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"button-text\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.profile.updatePassword\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui message hidden change-password-success\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"p\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.passwordChangeSuccess\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/edit-profile.hbs\" } });\n});","define(\"timetracker/templates/components/login-form\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"PuwzNSz/\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"login-form-container\\\"],[7],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"form\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"didClickOnLogin\\\"],[[\\\"on\\\"],[\\\"submit\\\"]]],[7],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"login-input-fields-container\\\"],[7],[0,\\\"\\\\n      \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"autofocus\\\",\\\"value\\\",\\\"placeholder\\\",\\\"class\\\"],[\\\"text\\\",\\\"autofocus\\\",[20,[\\\"teamName\\\"]],[25,\\\"t\\\",[\\\"strings.loginScreen.team\\\"],null],\\\"login-input\\\"]]],false],[0,\\\"\\\\n      \\\"],[6,\\\"hr\\\"],[9,\\\"class\\\",\\\"input-separator\\\"],[7],[8],[0,\\\"\\\\n      \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"value\\\",\\\"placeholder\\\",\\\"class\\\"],[\\\"email\\\",[20,[\\\"emailId\\\"]],[25,\\\"t\\\",[\\\"strings.loginScreen.email\\\"],null],\\\"login-input\\\"]]],false],[0,\\\"\\\\n      \\\"],[6,\\\"hr\\\"],[9,\\\"class\\\",\\\"input-separator\\\"],[7],[8],[0,\\\"\\\\n      \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"value\\\",\\\"placeholder\\\",\\\"class\\\"],[\\\"password\\\",[20,[\\\"password\\\"]],[25,\\\"t\\\",[\\\"strings.loginScreen.password\\\"],null],\\\"login-input\\\"]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"login-error-message\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"span\\\"],[7],[1,[18,\\\"loginErrorMessage\\\"],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"button\\\"],[9,\\\"type\\\",\\\"submit\\\"],[9,\\\"class\\\",\\\"login-button\\\"],[9,\\\"disabled\\\",\\\"disabled\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"login-button-spinner\\\"],[7],[8],[0,\\\"\\\\n      \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"login-button-text\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.loginScreen.signIn\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"forgot-password-link\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"openForgotPasswordModal\\\"]],[7],[6,\\\"u\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.forgotPassowLink\\\"],null],false],[8],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"sign-up-link\\\"],[7],[0,\\\"\\\\n      \\\"],[1,[25,\\\"t\\\",[\\\"messages.signUpText\\\"],null],false],[0,\\\" \\\"],[6,\\\"a\\\"],[9,\\\"href\\\",\\\"https://usetiming.com\\\"],[7],[0,\\\"https://usetiming.com\\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui modal email-not-verified\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"content\\\"],[7],[0,\\\"\\\\n    \\\"],[1,[25,\\\"t\\\",[\\\"messages.emailNotVerifiedMessage\\\"],[[\\\"emailId\\\",\\\"teamName\\\"],[[20,[\\\"emailId\\\"]],[20,[\\\"teamName\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"actions\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui button ok resend-email\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.resendEmail\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui button cancel\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.dismiss\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui modal forgot-password-modal\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"content\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.forgotPassword\\\"],[[\\\"emailId\\\",\\\"teamName\\\"],[[20,[\\\"emailId\\\"]],[20,[\\\"teamName\\\"]]]]],false],[8],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[7],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"autofocus\\\",\\\"value\\\",\\\"placeholder\\\",\\\"class\\\"],[\\\"text\\\",\\\"autofocus\\\",[20,[\\\"teamName\\\"]],[25,\\\"t\\\",[\\\"strings.loginScreen.team\\\"],null],\\\"login-input team\\\"]]],false],[8],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[7],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"value\\\",\\\"placeholder\\\",\\\"class\\\"],[\\\"email\\\",[20,[\\\"emailId\\\"]],[25,\\\"t\\\",[\\\"strings.loginScreen.email\\\"],null],\\\"login-input email\\\"]]],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"error-message\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"span\\\"],[7],[1,[18,\\\"modalErrorMessage\\\"],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"actions\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui button ok tiny send\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.send\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui button tiny cancel\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.cancel\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/login-form.hbs\" } });\n});","define(\"timetracker/templates/components/new-timer-list\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"C4n6S9HA\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"ui-sidebar\\\",null,[[\\\"onVisible\\\",\\\"onHide\\\",\\\"class\\\",\\\"transition\\\",\\\"scrollLock\\\",\\\"silent\\\",\\\"context\\\",\\\"id\\\"],[[25,\\\"action\\\",[[19,0,[]],\\\"pushProjectsButtonLeft\\\"],null],[25,\\\"action\\\",[[19,0,[]],\\\"pushProjectsButtonRight\\\"],null],\\\"right vertical\\\",\\\"overlay\\\",true,true,\\\".timer-screen-wrapper\\\",\\\"projects-sidebar\\\"]],{\\\"statements\\\":[[0,\\\"  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui icon input projects-search\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"search icon\\\"],[7],[8],[0,\\\"\\\\n    \\\"],[6,\\\"input\\\"],[10,\\\"value\\\",[18,\\\"searchText\\\"],null],[10,\\\"placeholder\\\",[25,\\\"t\\\",[\\\"strings.general.search\\\"],null],null],[10,\\\"oninput\\\",[25,\\\"action\\\",[[19,0,[]],[25,\\\"mut\\\",[[20,[\\\"searchText\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]],null],[7],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"sidebar-projects-list\\\"],[7],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/new-timer-list.hbs\" } });\n});","define(\"timetracker/templates/components/project-administration\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"fm19SJI6\", \"block\": \"{\\\"symbols\\\":[\\\"user\\\",\\\"user\\\",\\\"project\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"project-list-container\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"list-header\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui icon input projects-search\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"search icon\\\"],[7],[8],[0,\\\"\\\\n      \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"key-up\\\"],[[20,[\\\"projectSearchText\\\"]],[25,\\\"t\\\",[\\\"strings.general.search\\\"],null],\\\"searchProjects\\\"]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"add-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"addProject\\\"]],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.add\\\"],null],false],[8],[0,\\\"\\\\n\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"project-list-content\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"projectList\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",[26,[\\\"list-item ellipsis \\\",[25,\\\"if\\\",[[19,3,[\\\"archived\\\"]],\\\"archived\\\"],null]]]],[3,\\\"action\\\",[[19,0,[]],\\\"projectSelected\\\",[19,3,[]]]],[7],[0,\\\"\\\\n            \\\"],[6,\\\"span\\\"],[7],[1,[19,3,[\\\"name\\\"]],false],[8],[0,\\\"\\\\n          \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},{\\\"statements\\\":[[0,\\\"          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"project-list-message\\\"],[7],[1,[25,\\\"if\\\",[[20,[\\\"projectSearchText\\\"]],[25,\\\"t\\\",[\\\"messages.emptyProjectsSearch\\\"],null],[25,\\\"t\\\",[\\\"messages.createProject\\\"],null]],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"project-details\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"or\\\",[[20,[\\\"projects\\\"]],[20,[\\\"selectedProject\\\"]]],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[20,[\\\"selectedProject\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"project-details-header\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui negative message hidden project-name-required\\\"],[7],[0,\\\"\\\\n          \\\"],[6,\\\"p\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.projectNameRequired\\\"],null],false],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui negative message hidden project-name-exist\\\"],[7],[0,\\\"\\\\n          \\\"],[6,\\\"p\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.projectAlreadyExist\\\"],null],false],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui negative message hidden empty-user-list\\\"],[7],[0,\\\"\\\\n          \\\"],[6,\\\"p\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.emptyUserList\\\"],null],false],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"isEditMode\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"right-button-group\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"project-save-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"saveProject\\\"]],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.save\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"project-cancel-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"cancelEditing\\\"]],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.cancel\\\"],null],false],[8],[0,\\\"\\\\n          \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"right-button-group\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"selectedProject\\\",\\\"archived\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"project-archive-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"archiveUnarchiveClicked\\\"]],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.unarchive\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"              \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"project-edit-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"enableEditing\\\"]],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.edit\\\"],null],false],[8],[0,\\\"\\\\n              \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"project-archive-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"archiveUnarchiveClicked\\\"]],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.archive\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"          \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n      \\\"],[8],[0,\\\"\\\\n\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"project-details-body\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section\\\"],[7],[0,\\\"\\\\n          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"label\\\"],[7],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.name\\\"],null],false],[0,\\\":\\\"],[8],[8],[0,\\\"\\\\n          \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"disabled\\\",\\\"placeholder\\\"],[[20,[\\\"projectName\\\"]],[25,\\\"not\\\",[[20,[\\\"isEditMode\\\"]]],null],[25,\\\"t\\\",[\\\"strings.administration.projectName\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section\\\"],[7],[0,\\\"\\\\n          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"label\\\"],[7],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.color\\\"],null],false],[0,\\\":\\\"],[8],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"ui-dropdown\\\",null,[[\\\"class\\\",\\\"onChange\\\"],[[25,\\\"concat\\\",[\\\"project-color-selection \\\",[25,\\\"unless\\\",[[20,[\\\"isEditMode\\\"]],\\\"disabled\\\"],null]],null],[25,\\\"action\\\",[[19,0,[]],\\\"changeColor\\\",[20,[\\\"value\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"dropdown-trigger\\\"],[7],[0,\\\"\\\\n              \\\"],[6,\\\"span\\\"],[9,\\\"id\\\",\\\"selected-project-color\\\"],[10,\\\"class\\\",[26,[\\\"color-rectangle \\\",[25,\\\"if\\\",[[20,[\\\"isEditMode\\\"]],\\\"editable-color\\\"],null]]]],[7],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"menu project-color-container\\\"],[7],[0,\\\"\\\\n\\\\n            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section\\\"],[7],[0,\\\"\\\\n          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"label\\\"],[7],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.users\\\"],null],false],[0,\\\":\\\"],[8],[8],[0,\\\"\\\\n\\\\n          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"users-in-project-list-container\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"list-header\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"isEditMode\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"all-users\\\"],[7],[0,\\\"\\\\n                  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui checkbox\\\"],[7],[0,\\\"\\\\n                    \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\"],[\\\"checkbox\\\"]]],false],[0,\\\"\\\\n                    \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.all\\\"],null],false],[8],[0,\\\"\\\\n                  \\\"],[8],[0,\\\"\\\\n                \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"              \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui icon input users-search\\\"],[7],[0,\\\"\\\\n                \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"search icon\\\"],[7],[8],[0,\\\"\\\\n                \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"key-up\\\"],[[20,[\\\"userSearchText\\\"]],[25,\\\"t\\\",[\\\"strings.general.search\\\"],null],\\\"searchUsers\\\"]]],false],[0,\\\"\\\\n              \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n\\\\n              \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"users-in-project-list-content content list\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"isEditMode\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[20,[\\\"projectUsersList\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"list-item item\\\"],[7],[0,\\\"\\\\n                      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui checkbox\\\"],[7],[0,\\\"\\\\n                        \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\"],[\\\"checkbox\\\",[19,2,[\\\"checked\\\"]]]]],false],[0,\\\"\\\\n                        \\\"],[6,\\\"label\\\"],[9,\\\"class\\\",\\\"ellipsis\\\"],[7],[1,[19,2,[\\\"name\\\"]],false],[8],[0,\\\"\\\\n                      \\\"],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"user-list-message\\\"],[7],[1,[25,\\\"if\\\",[[20,[\\\"userSearchText\\\"]],[25,\\\"t\\\",[\\\"messages.emptyUserSearch\\\"],null]],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"each\\\",[[20,[\\\"usersInProject\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"list-item\\\"],[7],[0,\\\"\\\\n                      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ellipsis\\\"],[7],[1,[19,1,[\\\"name\\\"]],false],[8],[0,\\\"\\\\n                    \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"user-list-message\\\"],[7],[1,[25,\\\"if\\\",[[20,[\\\"userSearchText\\\"]],[25,\\\"t\\\",[\\\"messages.emptyUserSearch\\\"],null]],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"\\\\n              \\\"],[8],[0,\\\"\\\\n          \\\"],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\\n      \\\"],[8],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"project-details-message\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.selectProjectAdminPage\\\"],null],false],[8],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"project-details-message\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.createProject\\\"],null],false],[8],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]}],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/project-administration.hbs\" } });\n});","define(\"timetracker/templates/components/recent-timers\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"mBgfv+eu\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"timers-screen-total-time\\\"],[7],[6,\\\"span\\\"],[7],[8],[8],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"recent-timers-wrapper\\\"],[7],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/recent-timers.hbs\" } });\n});","define(\"timetracker/templates/components/report-parameters\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"qDpOIo4f\", \"block\": \"{\\\"symbols\\\":[\\\"execute\\\",\\\"mapper\\\",\\\"key\\\",\\\"value\\\",\\\"execute\\\",\\\"mapper\\\",\\\"key\\\",\\\"value\\\",\\\"execute\\\",\\\"mapper\\\",\\\"key\\\",\\\"value\\\",\\\"execute\\\",\\\"mapper\\\",\\\"key\\\",\\\"value\\\",\\\"execute\\\",\\\"mapper\\\",\\\"option\\\",\\\"execute\\\",\\\"mapper\\\",\\\"key\\\",\\\"value\\\",\\\"execute\\\",\\\"mapper\\\",\\\"option\\\",\\\"execute\\\",\\\"mapper\\\",\\\"option\\\",\\\"execute\\\",\\\"mapper\\\",\\\"key\\\",\\\"value\\\",\\\"execute\\\",\\\"mapper\\\",\\\"key\\\",\\\"value\\\"],\\\"statements\\\":[[6,\\\"h4\\\"],[9,\\\"class\\\",\\\"ui horizontal divider inverted parameters-toggle-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"toggleParametersContainer\\\"]],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.parameters\\\"],null],false],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"angle up icon\\\"],[7],[8],[8],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"report-parameters-container\\\"],[7],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"report-options-group\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"report-date-range\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[9,\\\"class\\\",\\\"report-date-range-label-from\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.fromDate\\\"],null],false],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"pikaday-input\\\",null,[[\\\"class\\\",\\\"autocomplete\\\",\\\"placeholder\\\",\\\"readonly\\\",\\\"firstDay\\\",\\\"value\\\",\\\"maxDate\\\",\\\"format\\\",\\\"theme\\\",\\\"onSelection\\\"],[\\\"report-date-range-input-from\\\",\\\"off\\\",[25,\\\"t\\\",[\\\"strings.reports.datePlaceholder\\\"],null],\\\"readonly\\\",[20,[\\\"weekStart\\\"]],[20,[\\\"fromDate\\\"]],[20,[\\\"fromMaxDate\\\"]],\\\"DD/MM/YYYY\\\",\\\"pikaday-dark\\\",[25,\\\"action\\\",[[19,0,[]],\\\"didSelectFromDate\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[9,\\\"class\\\",\\\"report-date-range-label-to\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.toDate\\\"],null],false],[8],[0,\\\"\\\\n        \\\"],[1,[25,\\\"pikaday-input\\\",null,[[\\\"class\\\",\\\"autocomplete\\\",\\\"placeholder\\\",\\\"readonly\\\",\\\"firstDay\\\",\\\"value\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"format\\\",\\\"theme\\\",\\\"onSelection\\\"],[\\\"report-date-range-input-to\\\",\\\"off\\\",[25,\\\"t\\\",[\\\"strings.reports.datePlaceholder\\\"],null],\\\"readonly\\\",[20,[\\\"weekStart\\\"]],[20,[\\\"toDate\\\"]],[20,[\\\"toMinDate\\\"]],[20,[\\\"toMaxDate\\\"]],\\\"DD/MM/YYYY\\\",\\\"pikaday-dark\\\",[25,\\\"action\\\",[[19,0,[]],\\\"didSelectToDate\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"report-dropdown granularity\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.granularity\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"ui-dropdown\\\",null,[[\\\"class\\\",\\\"onChange\\\"],[\\\"selection\\\",[25,\\\"action\\\",[[19,0,[]],[25,\\\"mut\\\",[[20,[\\\"selectedGranularity\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"default text\\\"],[7],[1,[25,\\\"get\\\",[[20,[\\\"granularityOptions\\\"]],[20,[\\\"selectedGranularity\\\"]]],null],false],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"dropdown icon\\\"],[7],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"menu\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[25,\\\"-each-in\\\",[[20,[\\\"granularityOptions\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"item\\\"],[10,\\\"data-value\\\",[26,[[25,\\\"map-value\\\",[[19,35,[]],[19,36,[]]],null]]]],[7],[0,\\\"\\\\n              \\\"],[1,[19,37,[]],false],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[36,37]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[34,35]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"eq\\\",[[20,[\\\"selectedGranularity\\\"]],\\\"day\\\"],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"show-days-input\\\"],[7],[0,\\\"\\\\n        \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"id\\\",\\\"checked\\\"],[\\\"checkbox\\\",\\\"show-days\\\",[20,[\\\"showDayNames\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[9,\\\"for\\\",\\\"show-days\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.showDays\\\"],null],false],[8],[0,\\\"\\\\n      \\\"],[8],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[25,\\\"eq\\\",[[20,[\\\"selectedGranularity\\\"]],\\\"week\\\"],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"report-dropdown start-of-week\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.startOfWeek\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"ui-dropdown\\\",null,[[\\\"class\\\",\\\"onChange\\\"],[\\\"selection\\\",[25,\\\"action\\\",[[19,0,[]],[25,\\\"mut\\\",[[20,[\\\"selectedStartOfWeek\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"default text\\\"],[7],[1,[25,\\\"get\\\",[[20,[\\\"startOfWeekOptions\\\"]],[20,[\\\"selectedStartOfWeek\\\"]]],null],false],[8],[0,\\\"\\\\n          \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"dropdown icon\\\"],[7],[8],[0,\\\"\\\\n          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"menu\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[25,\\\"-each-in\\\",[[20,[\\\"startOfWeekOptions\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"item\\\"],[10,\\\"data-value\\\",[26,[[25,\\\"map-value\\\",[[19,31,[]],[19,32,[]]],null]]]],[7],[0,\\\"\\\\n                \\\"],[1,[19,33,[]],false],[0,\\\"\\\\n              \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[32,33]},null],[0,\\\"          \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[30,31]},null],[0,\\\"      \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"  \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"report-options-group\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"report-dropdown projects\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.projects\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"ui-dropdown\\\",null,[[\\\"class\\\",\\\"direction\\\",\\\"fullTextSearch\\\",\\\"match\\\",\\\"onChange\\\"],[\\\"search selection multiple multi-select-dropdown\\\",\\\"downward\\\",\\\"exact\\\",\\\"text\\\",[25,\\\"action\\\",[[19,0,[]],[25,\\\"mut\\\",[[20,[\\\"selectedProjects\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"default text\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.allProjects\\\"],null],false],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"dropdown icon\\\"],[7],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"menu\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"projects\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"item\\\"],[10,\\\"data-value\\\",[26,[[25,\\\"map-value\\\",[[19,28,[]],[19,29,[]]],null]]]],[7],[0,\\\"\\\\n              \\\"],[1,[19,29,[\\\"name\\\"]],false],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[29]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[27,28]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"report-dropdown users\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.users\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"ui-dropdown\\\",null,[[\\\"class\\\",\\\"direction\\\",\\\"fullTextSearch\\\",\\\"match\\\",\\\"onChange\\\"],[\\\"search selection multiple multi-select-dropdown\\\",\\\"downward\\\",\\\"exact\\\",\\\"text\\\",[25,\\\"action\\\",[[19,0,[]],[25,\\\"mut\\\",[[20,[\\\"selectedUsers\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"default text\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.allUsers\\\"],null],false],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"dropdown icon\\\"],[7],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"menu\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"users\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"item\\\"],[10,\\\"data-value\\\",[26,[[25,\\\"map-value\\\",[[19,25,[]],[19,26,[]]],null]]]],[7],[0,\\\"\\\\n              \\\"],[1,[19,26,[\\\"name\\\"]],false],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[26]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[24,25]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"report-options-group\\\"],[7],[0,\\\"\\\\n\\\\n   \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"report-dropdown time-formats\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.timeFormat\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"ui-dropdown\\\",null,[[\\\"class\\\",\\\"onChange\\\"],[\\\"selection\\\",[25,\\\"action\\\",[[19,0,[]],[25,\\\"mut\\\",[[20,[\\\"selectedTimeFormat\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"       \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"default text\\\"],[7],[1,[25,\\\"get\\\",[[20,[\\\"timeFormats\\\"]],[20,[\\\"selectedTimeFormat\\\"]]],null],false],[8],[0,\\\"\\\\n      \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"dropdown icon\\\"],[7],[8],[0,\\\"\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"menu\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[25,\\\"-each-in\\\",[[20,[\\\"timeFormats\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"item\\\"],[10,\\\"data-value\\\",[26,[[25,\\\"map-value\\\",[[19,21,[]],[19,22,[]]],null]]]],[7],[0,\\\"\\\\n            \\\"],[1,[19,23,[]],false],[0,\\\"\\\\n          \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[22,23]},null],[0,\\\"      \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[20,21]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"report-dropdown round-off-value\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.roundOffMinutes\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"ui-dropdown\\\",null,[[\\\"class\\\",\\\"onChange\\\"],[\\\"selection\\\",[25,\\\"action\\\",[[19,0,[]],[25,\\\"mut\\\",[[20,[\\\"selectedRoundingMinutes\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"default text\\\"],[7],[1,[18,\\\"selectedRoundingMinutes\\\"],false],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"dropdown icon\\\"],[7],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"menu\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"roundingMinutes\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"item\\\"],[10,\\\"data-value\\\",[26,[[25,\\\"map-value\\\",[[19,18,[]],[19,19,[]]],null]]]],[7],[0,\\\"\\\\n              \\\"],[1,[19,19,[]],false],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[19]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[17,18]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"report-dropdown rounding-type\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.roundOffType\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"ui-dropdown\\\",null,[[\\\"class\\\",\\\"onChange\\\"],[\\\"selection\\\",[25,\\\"action\\\",[[19,0,[]],[25,\\\"mut\\\",[[20,[\\\"selectedRoundingType\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"default text\\\"],[7],[1,[25,\\\"get\\\",[[20,[\\\"roundingTypes\\\"]],[20,[\\\"selectedRoundingType\\\"]]],null],false],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"dropdown icon\\\"],[7],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"menu\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[25,\\\"-each-in\\\",[[20,[\\\"roundingTypes\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"item\\\"],[10,\\\"data-value\\\",[26,[[25,\\\"map-value\\\",[[19,14,[]],[19,15,[]]],null]]]],[7],[0,\\\"\\\\n              \\\"],[1,[19,16,[]],false],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[15,16]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[13,14]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"report-options-group\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"label\\\"],[9,\\\"class\\\",\\\"level-grouping\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.grouping\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"report-dropdown level one\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"ui-dropdown\\\",null,[[\\\"class\\\",\\\"onChange\\\"],[\\\"selection\\\",[25,\\\"action\\\",[[19,0,[]],\\\"levelOneOptionSelected\\\"],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"default text\\\"],[7],[1,[25,\\\"get\\\",[[20,[\\\"levelOptions\\\"]],[20,[\\\"selectedLevelOne\\\"]]],null],false],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"dropdown icon\\\"],[7],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"menu\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[25,\\\"-each-in\\\",[[20,[\\\"levelOptions\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"item\\\"],[10,\\\"data-value\\\",[26,[[25,\\\"map-value\\\",[[19,10,[]],[19,11,[]]],null]]]],[7],[0,\\\"\\\\n              \\\"],[1,[19,12,[]],false],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[11,12]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[9,10]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"span\\\"],[7],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"chevron right icon\\\"],[7],[8],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"report-dropdown level two\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"ui-dropdown\\\",null,[[\\\"class\\\",\\\"onChange\\\"],[\\\"selection\\\",[25,\\\"action\\\",[[19,0,[]],\\\"levelTwoOptionSelected\\\"],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"default text\\\"],[7],[1,[25,\\\"get\\\",[[20,[\\\"levelOptions\\\"]],[20,[\\\"selectedLevelTwo\\\"]]],null],false],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"dropdown icon\\\"],[7],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"menu\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[25,\\\"-each-in\\\",[[20,[\\\"levelOptions\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"item\\\"],[10,\\\"data-value\\\",[26,[[25,\\\"map-value\\\",[[19,6,[]],[19,7,[]]],null]]]],[7],[0,\\\"\\\\n              \\\"],[1,[19,8,[]],false],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[7,8]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5,6]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"span\\\"],[7],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"chevron right icon\\\"],[7],[8],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"report-dropdown level three\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"ui-dropdown\\\",null,[[\\\"class\\\",\\\"onChange\\\"],[\\\"selection\\\",[25,\\\"action\\\",[[19,0,[]],\\\"levelThreeOptionSelected\\\"],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"default text\\\"],[7],[1,[25,\\\"get\\\",[[20,[\\\"levelOptions\\\"]],[20,[\\\"selectedLevelThree\\\"]]],null],false],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"dropdown icon\\\"],[7],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"menu\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[25,\\\"-each-in\\\",[[20,[\\\"levelOptions\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"item\\\"],[10,\\\"data-value\\\",[26,[[25,\\\"map-value\\\",[[19,2,[]],[19,3,[]]],null]]]],[7],[0,\\\"\\\\n              \\\"],[1,[19,4,[]],false],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3,4]},null],[0,\\\"        \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},null],[0,\\\"    \\\"],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"report-options-group button-group\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui button fetch-report-button disabled\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"getReport\\\",[20,[\\\"reportTypes\\\",\\\"0\\\"]]]],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.getReport\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui button fetch-report-button disabled\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"getReport\\\",[20,[\\\"reportTypes\\\",\\\"1\\\"]]]],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.getCSV\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui button fetch-report-button disabled\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"getReport\\\",[20,[\\\"reportTypes\\\",\\\"2\\\"]]]],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.getExcel\\\"],null],false],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/report-parameters.hbs\" } });\n});","define(\"timetracker/templates/components/report-table\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"xF8ZQ0LR\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[20,[\\\"reportsData\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[25,\\\"tt-table\\\",null,[[\\\"tableData\\\",\\\"tableHeader\\\",\\\"tableLoadComplete\\\"],[[20,[\\\"reportsData\\\"]],[20,[\\\"tableHeader\\\"]],\\\"tableLoadComplete\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[6,\\\"p\\\"],[9,\\\"class\\\",\\\"message-body default-message\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.reportsDefaultMessage\\\"],null],false],[8],[0,\\\"\\\\n\\\"],[6,\\\"p\\\"],[9,\\\"class\\\",\\\"message-body empty-response\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.emptyReportsMessage\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/report-table.hbs\" } });\n});","define(\"timetracker/templates/components/time-picker\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"Hnrh2sTV\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"value\\\",\\\"readonly\\\"],[\\\"text\\\",\\\"time-picker-input\\\",[25,\\\"if\\\",[[20,[\\\"time\\\"]],[20,[\\\"formattedTime\\\"]]],null],\\\"readonly\\\"]]],false],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui popup time-picker-container\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"hours-picker\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"ui button increment-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"incrementHour\\\"]],[7],[0,\\\"\\\\n      \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"angle up icon\\\"],[7],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[1,[25,\\\"input\\\",null,[[\\\"class\\\",\\\"type\\\",\\\"maxlength\\\",\\\"value\\\",\\\"key-up\\\"],[\\\"hour-input\\\",\\\"text\\\",2,[20,[\\\"uiHour\\\"]],\\\"hourInput\\\"]]],false],[0,\\\"\\\\n    \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"ui button decrement-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"decrementHour\\\"]],[7],[0,\\\"\\\\n      \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"angle down icon\\\"],[7],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"minutes-picker\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"ui button increment-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"incrementMinute\\\"]],[7],[0,\\\"\\\\n      \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"angle up icon\\\"],[7],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[1,[25,\\\"input\\\",null,[[\\\"class\\\",\\\"type\\\",\\\"maxlength\\\",\\\"value\\\",\\\"key-up\\\"],[\\\"minute-input\\\",\\\"text\\\",2,[20,[\\\"uiMinute\\\"]],\\\"minuteInput\\\"]]],false],[0,\\\"\\\\n    \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"ui button decrement-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"decrementMinute\\\"]],[7],[0,\\\"\\\\n      \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"angle down icon\\\"],[7],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"  \\\"],[8],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"am-pm-picker\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"meridiem-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"toggleMeridiem\\\"]],[7],[1,[18,\\\"uiMeridiem\\\"],false],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\"],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/time-picker.hbs\" } });\n});","define(\"timetracker/templates/components/timeline-view-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"IeQbWIiF\", \"block\": \"{\\\"symbols\\\":[\\\"execute\\\",\\\"mapper\\\",\\\"option\\\"],\\\"statements\\\":[[1,[25,\\\"full-calendar\\\",null,[[\\\"events\\\",\\\"buttonText\\\",\\\"viewName\\\",\\\"slotEventOverlap\\\",\\\"nowIndicator\\\",\\\"allDaySlot\\\",\\\"displayEventTime\\\",\\\"header\\\",\\\"eventLimit\\\",\\\"selectMinDistance\\\",\\\"dragOpacity\\\",\\\"editable\\\",\\\"selectable\\\",\\\"selectHelper\\\",\\\"firstDay\\\",\\\"timezone\\\",\\\"slotLabelFormat\\\",\\\"timeFormat\\\",\\\"validRange\\\",\\\"views\\\",\\\"unselectCancel\\\",\\\"slotDuration\\\",\\\"snapDuration\\\",\\\"agendaEventMinHeight\\\",\\\"viewRender\\\",\\\"eventRender\\\",\\\"dayClick\\\",\\\"eventClick\\\",\\\"eventResize\\\",\\\"eventDrop\\\",\\\"select\\\",\\\"eventAllow\\\",\\\"selectAllow\\\",\\\"eventResizeStart\\\",\\\"eventResizeStop\\\",\\\"eventDragStart\\\",\\\"eventDragStop\\\"],[[20,[\\\"events\\\"]],[20,[\\\"buttonText\\\"]],\\\"agendaWeek\\\",false,true,false,false,[20,[\\\"header\\\"]],5,2,1,true,true,true,[20,[\\\"weekStart\\\"]],\\\"local\\\",\\\"h A\\\",\\\"h(:mm)T\\\",[20,[\\\"validRange\\\"]],[20,[\\\"views\\\"]],\\\".ui.modals, .pika-lendar\\\",\\\"01:00:00\\\",\\\"00:15:00\\\",25,[25,\\\"action\\\",[[19,0,[]],\\\"viewRender\\\"],null],[25,\\\"action\\\",[[19,0,[]],\\\"eventRender\\\"],null],[25,\\\"action\\\",[[19,0,[]],\\\"dayClick\\\"],null],[25,\\\"action\\\",[[19,0,[]],\\\"eventClick\\\"],null],[25,\\\"action\\\",[[19,0,[]],\\\"eventResize\\\"],null],[25,\\\"action\\\",[[19,0,[]],\\\"eventDrop\\\"],null],[25,\\\"action\\\",[[19,0,[]],\\\"select\\\"],null],[25,\\\"action\\\",[[19,0,[]],\\\"eventAllow\\\"],null],[25,\\\"action\\\",[[19,0,[]],\\\"selectAllow\\\"],null],[25,\\\"action\\\",[[19,0,[]],\\\"eventResizeStart\\\"],null],[25,\\\"action\\\",[[19,0,[]],\\\"eventResizeStop\\\"],null],[25,\\\"action\\\",[[19,0,[]],\\\"eventDragStart\\\"],null],[25,\\\"action\\\",[[19,0,[]],\\\"eventDragStop\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"go-to-date\\\"],[7],[0,\\\"\\\\n  \\\"],[1,[25,\\\"pikaday-input\\\",null,[[\\\"class\\\",\\\"autocomplete\\\",\\\"maxDate\\\",\\\"placeholder\\\",\\\"firstDay\\\",\\\"format\\\",\\\"theme\\\",\\\"onSelection\\\",\\\"readonly\\\"],[\\\"pikaday-dark go-to-date-picker\\\",\\\"off\\\",[20,[\\\"today\\\"]],[25,\\\"t\\\",[\\\"strings.timeline.goTo\\\"],null],[20,[\\\"weekStart\\\"]],\\\"DD/MM/YYYY\\\",\\\"pikaday-dark\\\",[25,\\\"action\\\",[[19,0,[]],\\\"goToDate\\\"],null],\\\"readonly\\\"]]],false],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"fc-button add-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"didClickAddButton\\\"]],[7],[1,[25,\\\"t\\\",[\\\"strings.timeline.buttons.add\\\"],null],false],[8],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui modal timeline-confirmation-modal\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"pre\\\"],[9,\\\"class\\\",\\\"content\\\"],[7],[0,\\\"\\\\n    \\\"],[1,[18,\\\"modalMessage\\\"],false],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"actions\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui approve button tiny red\\\"],[7],[1,[18,\\\"cancelArchiveButtonText\\\"],false],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui deny button tiny\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.timeline.buttons.cancel\\\"],null],false],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui modal timeline-create-timer\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"content\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-project-name\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.projectName\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n      \\\"],[6,\\\"span\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"ui-dropdown\\\",null,[[\\\"class\\\",\\\"selected\\\",\\\"selectOnKeydown\\\",\\\"fullTextSearch\\\",\\\"match\\\",\\\"onChange\\\"],[\\\"search selection timeline-projects-dropdown\\\",[20,[\\\"modalInput\\\",\\\"projectName\\\"]],false,\\\"exact\\\",\\\"text\\\",[25,\\\"action\\\",[[19,0,[]],\\\"didSelectProjectName\\\"],null]]],{\\\"statements\\\":[[0,\\\"          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"default text\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.selectProject\\\"],null],false],[8],[0,\\\"\\\\n          \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"dropdown icon\\\"],[7],[8],[0,\\\"\\\\n          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"menu\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"projects\\\"]]],null,{\\\"statements\\\":[[0,\\\"             \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"item\\\"],[10,\\\"data-value\\\",[26,[[25,\\\"map-value\\\",[[19,2,[]],[19,3,[]]],null]]]],[7],[0,\\\"\\\\n              \\\"],[1,[19,3,[\\\"name\\\"]],false],[0,\\\"\\\\n             \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"          \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},null],[0,\\\"      \\\"],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-start-time\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.startTime\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n      \\\"],[1,[25,\\\"pikaday-input\\\",null,[[\\\"class\\\",\\\"autocomplete\\\",\\\"maxDate\\\",\\\"value\\\",\\\"firstDay\\\",\\\"format\\\",\\\"theme\\\",\\\"onSelection\\\",\\\"readonly\\\"],[\\\"timeline-date-picker\\\",\\\"off\\\",[20,[\\\"inputParameters\\\",\\\"maxDate\\\"]],[20,[\\\"modalInput\\\",\\\"startDate\\\"]],[20,[\\\"weekStart\\\"]],\\\"DD/MM/YYYY\\\",\\\"pikaday-dark\\\",[25,\\\"action\\\",[[19,0,[]],\\\"didSelectStartDate\\\"],null],\\\"readonly\\\"]]],false],[0,\\\"\\\\n\\\\n      \\\"],[1,[25,\\\"time-picker\\\",null,[[\\\"class\\\",\\\"time\\\",\\\"setTime\\\"],[\\\"timeline-time-picker\\\",[20,[\\\"modalInput\\\",\\\"startTime\\\"]],\\\"setStartTime\\\"]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"modal-end-time\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.modal.endTime\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n      \\\"],[1,[25,\\\"pikaday-input\\\",null,[[\\\"class\\\",\\\"autocomplete\\\",\\\"maxDate\\\",\\\"value\\\",\\\"firstDay\\\",\\\"format\\\",\\\"theme\\\",\\\"onSelection\\\",\\\"readonly\\\"],[\\\"timeline-date-picker\\\",\\\"off\\\",[20,[\\\"inputParameters\\\",\\\"maxDate\\\"]],[20,[\\\"modalInput\\\",\\\"endDate\\\"]],[20,[\\\"weekStart\\\"]],\\\"DD/MM/YYYY\\\",\\\"pikaday-dark\\\",[25,\\\"action\\\",[[19,0,[]],\\\"didSelectEndDate\\\"],null],\\\"readonly\\\"]]],false],[0,\\\"\\\\n      \\\"],[1,[25,\\\"time-picker\\\",null,[[\\\"class\\\",\\\"time\\\",\\\"setTime\\\"],[\\\"timeline-time-picker\\\",[20,[\\\"modalInput\\\",\\\"endTime\\\"]],\\\"setEndTime\\\"]]],false],[0,\\\"\\\\n      \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"remove icon red\\\"],[10,\\\"title\\\",[25,\\\"t\\\",[\\\"messages.clearEndTime\\\"],null],null],[3,\\\"action\\\",[[19,0,[]],\\\"clearEndTime\\\"]],[7],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"error-message\\\"],[7],[0,\\\"\\\\n    \\\"],[1,[18,\\\"createUpdateErrorMessage\\\"],false],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"actions\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui deny button tiny red\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.timeline.buttons.cancel\\\"],null],false],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui approve button tiny\\\"],[7],[1,[18,\\\"createUpdateButtonText\\\"],false],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"timeline-popup\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"close icon popup-close-icon\\\"],[7],[8],[6,\\\"h3\\\"],[9,\\\"class\\\",\\\"popup-project-name\\\"],[7],[8],[6,\\\"br\\\"],[7],[8],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"popup-start\\\"],[7],[6,\\\"span\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.timeline.start\\\"],null],false],[0,\\\":\\\"],[8],[8],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"popup-end\\\"],[7],[6,\\\"span\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.timeline.end\\\"],null],false],[0,\\\":\\\"],[8],[8],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"popup-duration\\\"],[7],[6,\\\"span\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.timeline.duration\\\"],null],false],[0,\\\":\\\"],[8],[8],[0,\\\"\\\\n  \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"ui button tiny red archive-button\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.timeline.buttons.archive\\\"],null],false],[8],[0,\\\"\\\\n  \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"ui button tiny edit-button\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.timeline.buttons.edit\\\"],null],false],[8],[0,\\\"\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/timeline-view-component.hbs\" } });\n});","define(\"timetracker/templates/components/tt-table\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"F/dCAEwV\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"tt-table-container\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"collapse-options-container\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"collapse-options\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"input\\\"],[9,\\\"id\\\",\\\"toggle-level-two\\\"],[9,\\\"type\\\",\\\"checkbox\\\"],[10,\\\"checked\\\",[18,\\\"hideSecondLevelIsChecked\\\"],null],[3,\\\"action\\\",[[19,0,[]],\\\"didClickOnSeeFirstLevelOnly\\\"],[[\\\"preventDefault\\\"],[false]]],[7],[8],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[9,\\\"for\\\",\\\"toggle-level-two\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.seeLevelOneOnly\\\"],[[\\\"levelOneType\\\"],[[20,[\\\"tableHeader\\\",\\\"0\\\"]]]]],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n      \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"collapse-options\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"input\\\"],[9,\\\"id\\\",\\\"toggle-level-three\\\"],[9,\\\"type\\\",\\\"checkbox\\\"],[10,\\\"checked\\\",[18,\\\"hideThirdLevelIsChecked\\\"],null],[3,\\\"action\\\",[[19,0,[]],\\\"didClickOnSeeFirstAndSecondLevelOnly\\\"],[[\\\"preventDefault\\\"],[false]]],[7],[8],[0,\\\"\\\\n      \\\"],[6,\\\"label\\\"],[9,\\\"for\\\",\\\"toggle-level-three\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.reports.seeLevelOneAndTwo\\\"],[[\\\"levelOneType\\\",\\\"levelTwoType\\\"],[[20,[\\\"tableHeader\\\",\\\"0\\\"]],[20,[\\\"tableHeader\\\",\\\"1\\\"]]]]],false],[8],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/tt-table.hbs\" } });\n});","define(\"timetracker/templates/components/ui-accordion\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"5+RUjWXN\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[11,1,[[25,\\\"action\\\",[[19,0,[]],\\\"execute\\\"],null]]]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/ui-accordion.hbs\" } });\n});","define(\"timetracker/templates/components/ui-checkbox\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"TE0dk9kS\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[6,\\\"input\\\"],[10,\\\"type\\\",[18,\\\"type\\\"],null],[10,\\\"name\\\",[18,\\\"name\\\"],null],[10,\\\"tabindex\\\",[18,\\\"tabindex\\\"],null],[10,\\\"checked\\\",[25,\\\"unbound\\\",[[20,[\\\"checked\\\"]]],null],null],[10,\\\"disabled\\\",[25,\\\"unbound\\\",[[20,[\\\"disabled\\\"]]],null],null],[7],[8],[0,\\\"\\\\n\\\"],[6,\\\"label\\\"],[7],[1,[18,\\\"label\\\"],false],[8],[0,\\\"\\\\n\\\"],[11,1,[[25,\\\"action\\\",[[19,0,[]],\\\"execute\\\"],null]]]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/ui-checkbox.hbs\" } });\n});","define(\"timetracker/templates/components/ui-dimmer\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"YUFeLsr7\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[11,1,[[25,\\\"action\\\",[[19,0,[]],\\\"execute\\\"],null]]],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/ui-dimmer.hbs\" } });\n});","define(\"timetracker/templates/components/ui-dropdown\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"cG/5t4aQ\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[11,1,[[25,\\\"action\\\",[[19,0,[]],\\\"execute\\\"],null],[25,\\\"action\\\",[[19,0,[]],\\\"mapping\\\"],null]]]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/ui-dropdown.hbs\" } });\n});","define(\"timetracker/templates/components/ui-embed\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"6vWUaXR3\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[11,1,[[25,\\\"action\\\",[[19,0,[]],\\\"execute\\\"],null]]]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/ui-embed.hbs\" } });\n});","define(\"timetracker/templates/components/ui-modal\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"sxQydt9+\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[11,1,[[25,\\\"action\\\",[[19,0,[]],\\\"execute\\\"],null]]]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/ui-modal.hbs\" } });\n});","define(\"timetracker/templates/components/ui-nag\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"yp6hwS52\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[11,1,[[25,\\\"action\\\",[[19,0,[]],\\\"execute\\\"],null]]]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/ui-nag.hbs\" } });\n});","define(\"timetracker/templates/components/ui-popup\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"EGH/oShX\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[11,1,[[25,\\\"action\\\",[[19,0,[]],\\\"execute\\\"],null]]]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/ui-popup.hbs\" } });\n});","define(\"timetracker/templates/components/ui-progress\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"b6DSTKGK\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[11,1,[[25,\\\"action\\\",[[19,0,[]],\\\"execute\\\"],null]]]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/ui-progress.hbs\" } });\n});","define(\"timetracker/templates/components/ui-radio\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"JEo4bx+o\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[6,\\\"input\\\"],[10,\\\"type\\\",[18,\\\"type\\\"],null],[10,\\\"name\\\",[18,\\\"name\\\"],null],[10,\\\"tabindex\\\",[18,\\\"tabindex\\\"],null],[10,\\\"checked\\\",[25,\\\"unbound\\\",[[20,[\\\"checked\\\"]]],null],null],[10,\\\"disabled\\\",[25,\\\"unbound\\\",[[20,[\\\"disabled\\\"]]],null],null],[7],[8],[0,\\\"\\\\n\\\"],[6,\\\"label\\\"],[7],[1,[18,\\\"label\\\"],false],[8],[0,\\\"\\\\n\\\"],[11,1,[[25,\\\"action\\\",[[19,0,[]],\\\"execute\\\"],null]]]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/ui-radio.hbs\" } });\n});","define(\"timetracker/templates/components/ui-rating\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"h02h6y4x\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[11,1,[[25,\\\"action\\\",[[19,0,[]],\\\"execute\\\"],null]]]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/ui-rating.hbs\" } });\n});","define(\"timetracker/templates/components/ui-search\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"Y2yCz4Oj\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[11,1,[[25,\\\"action\\\",[[19,0,[]],\\\"execute\\\"],null]]]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/ui-search.hbs\" } });\n});","define(\"timetracker/templates/components/ui-shape\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"jGv8azHp\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[11,1,[[25,\\\"action\\\",[[19,0,[]],\\\"execute\\\"],null]]]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/ui-shape.hbs\" } });\n});","define(\"timetracker/templates/components/ui-sidebar\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"rs4mFUUl\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[11,1,[[25,\\\"action\\\",[[19,0,[]],\\\"execute\\\"],null]]]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/ui-sidebar.hbs\" } });\n});","define(\"timetracker/templates/components/ui-sticky\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"jnjZyBoK\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[11,1,[[25,\\\"action\\\",[[19,0,[]],\\\"execute\\\"],null]]]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/ui-sticky.hbs\" } });\n});","define(\"timetracker/templates/components/user-administration\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"LJULPQSV\", \"block\": \"{\\\"symbols\\\":[\\\"user\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"user-list-container\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"list-header\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui icon input users-search\\\"],[7],[0,\\\"\\\\n      \\\"],[6,\\\"i\\\"],[9,\\\"class\\\",\\\"search icon\\\"],[7],[8],[0,\\\"\\\\n      \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"key-up\\\"],[[20,[\\\"userSearchText\\\"]],[25,\\\"t\\\",[\\\"strings.general.search\\\"],null],\\\"searchUsers\\\"]]],false],[0,\\\"\\\\n    \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"add-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"addUser\\\"]],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.add\\\"],null],false],[8],[0,\\\"\\\\n\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"user-list-content\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[20,[\\\"userList\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",[26,[\\\"list-item ellipsis \\\",[25,\\\"if\\\",[[19,1,[\\\"disabled\\\"]],\\\"disabled-user\\\"],null]]]],[3,\\\"action\\\",[[19,0,[]],\\\"userSelected\\\",[19,1,[]]]],[7],[0,\\\"\\\\n        \\\"],[6,\\\"span\\\"],[7],[1,[19,1,[\\\"name\\\"]],false],[8],[0,\\\"\\\\n      \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},{\\\"statements\\\":[[0,\\\"      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"user-list-message\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.addUserAdminPage\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"  \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[8],[0,\\\"\\\\n\\\\n\\\\n\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"user-details\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"or\\\",[[20,[\\\"users\\\"]],[20,[\\\"selectedUser\\\"]]],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[20,[\\\"selectedUser\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"user-details-header\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui negative message hidden user-name-required\\\"],[7],[0,\\\"\\\\n          \\\"],[6,\\\"p\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.userNameRequired\\\"],null],false],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui negative message hidden email-already-exist\\\"],[7],[0,\\\"\\\\n          \\\"],[6,\\\"p\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.emailAlreadyExist\\\"],null],false],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui negative message hidden email-required\\\"],[7],[0,\\\"\\\\n          \\\"],[6,\\\"p\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.emailRequired\\\"],null],false],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui negative message hidden invalid-email\\\"],[7],[0,\\\"\\\\n          \\\"],[6,\\\"p\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.emailIsInvalid\\\"],null],false],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui negative message hidden password-required\\\"],[7],[0,\\\"\\\\n          \\\"],[6,\\\"p\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.passwordRequired\\\"],null],false],[8],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"isEditMode\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"right-button-group\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"user-save-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"saveUser\\\"]],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.save\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"user-cancel-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"cancelEditing\\\"]],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.cancel\\\"],null],false],[8],[0,\\\"\\\\n          \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"right-button-group\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"not\\\",[[20,[\\\"selectedUserIsLoggedInUser\\\"]]],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[20,[\\\"selectedUser\\\",\\\"disabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"user-disable-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"disableEnableClicked\\\"]],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.enable\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"user-edit-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"enableEditing\\\"]],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.edit\\\"],null],false],[8],[0,\\\"\\\\n                \\\"],[6,\\\"button\\\"],[9,\\\"class\\\",\\\"user-disable-button\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"disableEnableClicked\\\"]],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.disable\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n      \\\"],[8],[0,\\\"\\\\n\\\\n      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"user-details-body\\\"],[7],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section\\\"],[7],[0,\\\"\\\\n          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"label\\\"],[7],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.name\\\"],null],false],[0,\\\":\\\"],[8],[8],[0,\\\"\\\\n          \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"disabled\\\",\\\"placeholder\\\"],[[20,[\\\"userName\\\"]],[25,\\\"not\\\",[[20,[\\\"isEditMode\\\"]]],null],[25,\\\"t\\\",[\\\"strings.administration.userName\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\\n        \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section\\\"],[7],[0,\\\"\\\\n          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"label\\\"],[7],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.email\\\"],null],false],[0,\\\":\\\"],[8],[8],[0,\\\"\\\\n          \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"value\\\",\\\"disabled\\\",\\\"placeholder\\\"],[\\\"email\\\",[20,[\\\"userEmail\\\"]],[25,\\\"or\\\",[[25,\\\"not\\\",[[20,[\\\"isEditMode\\\"]]],null],[25,\\\"not\\\",[[20,[\\\"isNewUser\\\"]]],null]],null],[25,\\\"t\\\",[\\\"strings.administration.userEmail\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[20,[\\\"isEditMode\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[20,[\\\"isNewUser\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section\\\"],[7],[0,\\\"\\\\n              \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"label\\\"],[7],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.password\\\"],null],false],[0,\\\":\\\"],[8],[8],[0,\\\"\\\\n              \\\"],[1,[25,\\\"input\\\",null,[[\\\"value\\\",\\\"placeholder\\\"],[[20,[\\\"newPassword\\\"]],[25,\\\"t\\\",[\\\"strings.administration.password\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"generate-password\\\"],[3,\\\"action\\\",[[19,0,[]],\\\"generatePassword\\\"]],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.generatePassword\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section\\\"],[7],[0,\\\"\\\\n              \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui checkbox permission password-change\\\"],[7],[0,\\\"\\\\n                \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\"],[\\\"checkbox\\\",[20,[\\\"passwordChangeRequired\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.requirePasswordChange\\\"],null],false],[8],[0,\\\"\\\\n              \\\"],[8],[0,\\\"\\\\n              \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui message checkbox-information\\\"],[7],[0,\\\"\\\\n                \\\"],[1,[25,\\\"t\\\",[\\\"messages.passwordChangeRequiredCreate\\\"],null],false],[0,\\\"\\\\n              \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui checkbox permission\\\"],[7],[0,\\\"\\\\n              \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"checked\\\"],[\\\"checkbox\\\",[25,\\\"not\\\",[[20,[\\\"isEditMode\\\"]]],null],[20,[\\\"userCanManageProjects\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.canManageProjects\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui message checkbox-information\\\"],[7],[0,\\\"\\\\n              \\\"],[1,[25,\\\"t\\\",[\\\"messages.manageProjects\\\"],null],false],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n          \\\"],[8],[0,\\\"\\\\n\\\\n          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui checkbox permission\\\"],[7],[0,\\\"\\\\n              \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"checked\\\"],[\\\"checkbox\\\",[25,\\\"not\\\",[[20,[\\\"isEditMode\\\"]]],null],[20,[\\\"userCanManageUsers\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.canManageUsers\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui message checkbox-information\\\"],[7],[0,\\\"\\\\n              \\\"],[1,[25,\\\"t\\\",[\\\"messages.manageUsers\\\"],null],false],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n          \\\"],[8],[0,\\\"\\\\n\\\\n          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui checkbox permission\\\"],[7],[0,\\\"\\\\n              \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"checked\\\"],[\\\"checkbox\\\",[25,\\\"not\\\",[[20,[\\\"isEditMode\\\"]]],null],[20,[\\\"userCanChangeBillingDetails\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.canChangeBillingDetails\\\"],null],false],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui message checkbox-information\\\"],[7],[0,\\\"\\\\n              \\\"],[1,[25,\\\"t\\\",[\\\"messages.changeBillingDetails\\\"],null],false],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n          \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[25,\\\"not\\\",[[20,[\\\"isNewUser\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section\\\"],[7],[0,\\\"\\\\n              \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui checkbox permission password-change\\\"],[7],[0,\\\"\\\\n                \\\"],[1,[25,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\"],[\\\"checkbox\\\",[20,[\\\"passwordChangeRequired\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.requirePasswordChange\\\"],null],false],[8],[0,\\\"\\\\n              \\\"],[8],[0,\\\"\\\\n              \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"ui message checkbox-information\\\"],[7],[0,\\\"\\\\n                \\\"],[1,[25,\\\"t\\\",[\\\"messages.passwordChangeRequiredUpdate\\\"],null],false],[0,\\\"\\\\n              \\\"],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"permission\\\"],[7],[0,\\\"\\\\n              \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.canManageProjects\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n              \\\"],[6,\\\"span\\\"],[7],[0,\\\" \\\"],[1,[25,\\\"if\\\",[[20,[\\\"userCanManageProjects\\\"]],[25,\\\"t\\\",[\\\"strings.administration.yes\\\"],null],[25,\\\"t\\\",[\\\"strings.administration.no\\\"],null]],null],false],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n          \\\"],[8],[0,\\\"\\\\n\\\\n          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"permission\\\"],[7],[0,\\\"\\\\n              \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.canManageUsers\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n              \\\"],[6,\\\"span\\\"],[7],[0,\\\" \\\"],[1,[25,\\\"if\\\",[[20,[\\\"userCanManageUsers\\\"]],[25,\\\"t\\\",[\\\"strings.administration.yes\\\"],null],[25,\\\"t\\\",[\\\"strings.administration.no\\\"],null]],null],false],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n          \\\"],[8],[0,\\\"\\\\n\\\\n          \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"section\\\"],[7],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"permission\\\"],[7],[0,\\\"\\\\n              \\\"],[6,\\\"label\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.administration.canChangeBillingDetails\\\"],null],false],[0,\\\":\\\"],[8],[0,\\\"\\\\n              \\\"],[6,\\\"span\\\"],[7],[0,\\\" \\\"],[1,[25,\\\"if\\\",[[20,[\\\"userCanChangeBillingDetails\\\"]],[25,\\\"t\\\",[\\\"strings.administration.yes\\\"],null],[25,\\\"t\\\",[\\\"strings.administration.no\\\"],null]],null],false],[8],[0,\\\"\\\\n            \\\"],[8],[0,\\\"\\\\n          \\\"],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n      \\\"],[8],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"user-details-message\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.selectUserAdminPage\\\"],null],false],[8],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"user-details-message\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.addUserAdminPage\\\"],null],false],[8],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]}],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/components/user-administration.hbs\" } });\n});","define(\"timetracker/templates/login\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"K8X0MTRQ\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"login-screen\\\"],[7],[0,\\\"\\\\n\\\\t\\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"login-container\\\"],[7],[0,\\\"\\\\n\\\\t  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"login-screen-app-icon\\\"],[7],[0,\\\"\\\\n\\\\t\\\\t  \\\"],[6,\\\"img\\\"],[9,\\\"src\\\",\\\"/assets/images/Logo.png\\\"],[9,\\\"srcset\\\",\\\"/assets/images/Logo.png 1x, /assets/images/Logo@2x.png 2x\\\"],[7],[8],[0,\\\"\\\\n\\\\t  \\\"],[8],[0,\\\"\\\\n\\\\n    \\\"],[1,[25,\\\"login-form\\\",null,[[\\\"login\\\",\\\"resendVerifyEmail\\\",\\\"forgotPassword\\\"],[[25,\\\"route-action\\\",[\\\"login\\\"],null],[25,\\\"route-action\\\",[\\\"resendVerifyEmail\\\"],null],[25,\\\"route-action\\\",[\\\"forgotPassword\\\"],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/login.hbs\" } });\n});","define(\"timetracker/templates/not-found\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"8zJh17sV\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"container-not-found\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"timer-circle\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"span\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.fourOhFour\\\"],null],false],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"not-found-message\\\"],[7],[0,\\\"\\\\n    \\\"],[1,[25,\\\"t\\\",[\\\"messages.lostMessage404Page\\\"],null],false],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"not-found-message\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"link-to\\\",[\\\"authenticated.features.timers\\\"],null,{\\\"statements\\\":[[0,\\\"      \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"not-found-home-link\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.linkMessage404Page\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[8],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/not-found.hbs\" } });\n});","define(\"timetracker/templates/unauthorized\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.HTMLBars.template({ \"id\": \"SgqpP+Y5\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[9,\\\"class\\\",\\\"container-unauthorized\\\"],[7],[0,\\\"\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"timer-circle\\\"],[7],[0,\\\"\\\\n    \\\"],[6,\\\"span\\\"],[7],[1,[25,\\\"t\\\",[\\\"strings.fourOhOne\\\"],null],false],[8],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"unauthorized-message\\\"],[7],[0,\\\"\\\\n    \\\"],[1,[25,\\\"t\\\",[\\\"messages.unauthorizedPageMessage\\\"],null],false],[0,\\\"\\\\n  \\\"],[8],[0,\\\"\\\\n\\\\n  \\\"],[6,\\\"div\\\"],[9,\\\"class\\\",\\\"not-found-message\\\"],[7],[0,\\\"\\\\n\\\"],[4,\\\"link-to\\\",[\\\"authenticated.features.timers\\\"],null,{\\\"statements\\\":[[0,\\\"      \\\"],[6,\\\"span\\\"],[9,\\\"class\\\",\\\"not-found-home-link\\\"],[7],[1,[25,\\\"t\\\",[\\\"messages.unauthorizedLinkMessage\\\"],null],false],[8],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[8]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"timetracker/templates/unauthorized.hbs\" } });\n});","define('timetracker/utils/analytics', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n  var analytics = {\n    sendRouteEnteredEvent: function sendRouteEnteredEvent(route, emberMetrics) {\n      var routeName = route.get('routeName');\n      var currentRoute = routeName.substr(routeName.lastIndexOf('.') + 1);\n      var path = '/' + currentRoute;\n      emberMetrics.trackPage({ page: path });\n    },\n    sendTimerStartEvent: function sendTimerStartEvent(emberMetrics) {\n      emberMetrics.trackEvent({\n        eventCategory: 'Timer',\n        eventAction: 'Start',\n        eventLabel: 'Timer started from timers screen'\n      });\n    },\n    sendTimerStopEvent: function sendTimerStopEvent(emberMetrics) {\n      emberMetrics.trackEvent({\n        eventCategory: 'Timer',\n        eventAction: 'Stop',\n        eventLabel: 'Timer stopped from timers screen'\n      });\n    },\n    sendTimerEditedEventViaDragging: function sendTimerEditedEventViaDragging(emberMetrics) {\n      emberMetrics.trackEvent({\n        eventCategory: 'Timer',\n        eventAction: 'Edited',\n        eventLabel: 'Timer modified by dragging in timeline view'\n      });\n    },\n    sendTimerEditedEventViaModal: function sendTimerEditedEventViaModal(emberMetrics) {\n      emberMetrics.trackEvent({\n        eventCategory: 'Timer',\n        eventAction: 'Edited',\n        eventLabel: 'Timer modified by modal input in timeline view'\n      });\n    },\n    sendTimerCreatedEvent: function sendTimerCreatedEvent(emberMetrics) {\n      emberMetrics.trackEvent({\n        eventCategory: 'Timer',\n        eventAction: 'Created',\n        eventLabel: 'Timer created from timeline view'\n      });\n    },\n    sendTimerArchivedEvent: function sendTimerArchivedEvent(emberMetrics) {\n      emberMetrics.trackEvent({\n        eventCategory: 'Timer',\n        eventAction: 'Archived',\n        eventLabel: 'Timer archived from popup in timeline view'\n      });\n    },\n    sendSuccessfulLoginEvent: function sendSuccessfulLoginEvent(emberMetrics) {\n      emberMetrics.trackEvent({\n        eventCategory: 'Login',\n        eventAction: 'Success',\n        eventLabel: 'User successfully logged in'\n      });\n    },\n    sendFailedLoginEvent: function sendFailedLoginEvent(emberMetrics) {\n      emberMetrics.trackEvent({\n        eventCategory: 'Login',\n        eventAction: 'Fail',\n        eventLabel: 'User login failed'\n      });\n    },\n    sendLogOutEvent: function sendLogOutEvent(emberMetrics) {\n      emberMetrics.trackEvent({\n        eventCategory: 'Logout',\n        eventAction: 'Logout',\n        eventLabel: 'User logged out by clicking sign out button'\n      });\n    },\n    sendReportRequestEvent: function sendReportRequestEvent(emberMetrics) {\n      emberMetrics.trackEvent({\n        eventCategory: 'Reports',\n        eventAction: 'Fetch report',\n        eventLabel: 'Report was requested to view in web browser'\n      });\n    },\n    sendExportReportEvent: function sendExportReportEvent(emberMetrics) {\n      emberMetrics.trackEvent({\n        eventCategory: 'Reports',\n        eventAction: 'Export report',\n        eventLabel: 'Report export request was made'\n      });\n    },\n    sendProjectCreatedEvent: function sendProjectCreatedEvent(emberMetrics) {\n      emberMetrics.trackEvent({\n        eventCategory: 'Project management',\n        eventAction: 'Project created',\n        eventLabel: 'New project created from admin page'\n      });\n    },\n    sendProjectModifiedEvent: function sendProjectModifiedEvent(emberMetrics) {\n      emberMetrics.trackEvent({\n        eventCategory: 'Project management',\n        eventAction: 'Project modified',\n        eventLabel: 'Existing project modified from admin page'\n      });\n    },\n    sendUserCreatedEvent: function sendUserCreatedEvent(emberMetrics) {\n      emberMetrics.trackEvent({\n        eventCategory: 'User management',\n        eventAction: 'User created',\n        eventLabel: 'New user created from admin page'\n      });\n    },\n    sendUserModifiedEvent: function sendUserModifiedEvent(emberMetrics) {\n      emberMetrics.trackEvent({\n        eventCategory: 'User management',\n        eventAction: 'User modified',\n        eventLabel: 'Existing User modified from admin page'\n      });\n    }\n  };\n\n  exports.default = analytics;\n});","define('timetracker/utils/application-setup', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = applicationSetup;\n\n  var addCustomEventPolyfill = function addCustomEventPolyfill() {\n    // reference https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent\n    (function () {\n\n      if (typeof window.CustomEvent === 'function') {\n        return false;\n      }\n\n      function CustomEvent(event, params) {\n        // eslint-disable-line\n        params = params || { bubbles: false, cancelable: false, detail: undefined }; // eslint-disable-line\n        var evt = document.createEvent('CustomEvent');\n        evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n        return evt;\n      }\n\n      CustomEvent.prototype = window.Event.prototype;\n\n      window.CustomEvent = CustomEvent;\n    })();\n  };\n\n  function applicationSetup() {\n    addCustomEventPolyfill();\n  }\n});","define('timetracker/utils/can-use-dom', ['exports', 'ember-metrics/utils/can-use-dom'], function (exports, _canUseDom) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _canUseDom.default;\n    }\n  });\n});","define('timetracker/utils/get-promise-content', ['exports', 'ember-promise-tools/utils/get-promise-content'], function (exports, _getPromiseContent) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _getPromiseContent.default;\n    }\n  });\n});","define('timetracker/utils/i18n/compile-template', ['exports', 'ember-i18n/utils/i18n/compile-template'], function (exports, _compileTemplate) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _compileTemplate.default;\n    }\n  });\n});","define('timetracker/utils/i18n/missing-message', ['exports', 'ember-i18n/utils/i18n/missing-message'], function (exports, _missingMessage) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _missingMessage.default;\n    }\n  });\n});","define('timetracker/utils/is-fulfilled', ['exports', 'ember-promise-tools/utils/is-fulfilled'], function (exports, _isFulfilled) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _isFulfilled.default;\n    }\n  });\n});","define('timetracker/utils/is-promise', ['exports', 'ember-promise-tools/utils/is-promise'], function (exports, _isPromise) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _isPromise.default;\n    }\n  });\n});","define('timetracker/utils/logger', ['exports', 'timetracker/config/environment'], function (exports, _environment) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  /* eslint-disable no-console*/\n\n  var logger = {\n    info: function info(message) {\n      console.log(message);\n    },\n    warn: function warn(message, data) {\n      console.warn(message);\n      Raven.captureMessage(message, { // eslint-disable-line no-undef\n        level: 'warning',\n        extra: data\n      });\n    },\n    error: function error(message, data) {\n      console.error(message);\n      Raven.captureMessage(message, { // eslint-disable-line no-undef\n        extra: data\n      });\n    },\n    debug: function debug(message) {\n      if (_environment.default.environment === 'development') {\n        console.log(message);\n      }\n    }\n  };\n\n  exports.default = logger;\n});","define('timetracker/utils/network-error-event-broadcast', ['exports', 'timetracker/constants'], function (exports, _constants) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  var networkErrorEventBroadcast = {\n    broadcastCustomEvent: function broadcastCustomEvent(failedReason, url) {\n      var adapterErrorEvent = new CustomEvent(_constants.default.EVENTS.ADAPTER_REQUEST_ERROR);\n      adapterErrorEvent.reason = failedReason;\n      dispatchEvent(adapterErrorEvent);\n      var requestId = this._parseRequestId(url);\n      return this._makeErrorResponse(failedReason, requestId);\n    },\n    _makeErrorResponse: function _makeErrorResponse(reason, requestId) {\n      return {\n        errors: [{\n          id: requestId,\n          status: '' + reason.status,\n          code: '' + reason.status,\n          detail: '' + reason.statusText\n        }]\n      };\n    },\n    _parseRequestId: function _parseRequestId(url) {\n      // https://stackoverflow.com/a/901144/6293468\n      var regex = new RegExp('[?&]' + _constants.default.REQUEST_ID + '(=([^&#]*)|&|#|$)');\n      var results = regex.exec(url);\n      if (!results) {\n        return null;\n      }\n      if (!results[2]) {\n        // eslint-disable-line no-magic-numbers\n        return '';\n      }\n      return decodeURIComponent(results[2].replace(/\\+/g, ' ')); // eslint-disable-line no-magic-numbers\n    }\n  };\n  exports.default = networkErrorEventBroadcast;\n});","define('timetracker/utils/network-error-handler', ['exports', 'timetracker/constants'], function (exports, _constants) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  var networkErrorHandler = {\n    handleErrorResponse: function handleErrorResponse(failedReason, url) {\n      var requestId = this._parseRequestId(url);\n      if (failedReason.status !== _constants.default.RESPONSE_CODES.BAD_REQUEST) {\n        this.broadcastCustomEvent(failedReason);\n      }\n      return this._makeErrorResponse(failedReason, requestId);\n    },\n    broadcastCustomEvent: function broadcastCustomEvent(failedReason) {\n      var adapterErrorEvent = new CustomEvent(_constants.default.EVENTS.NETWORK_REQUEST_ERROR);\n      adapterErrorEvent.reason = failedReason;\n      dispatchEvent(adapterErrorEvent);\n    },\n    _makeErrorResponse: function _makeErrorResponse(reason, requestId) {\n      var error = {\n        id: requestId,\n        status: reason.status,\n        code: reason.status,\n        detail: reason.statusText,\n        meta: {\n          errorCode: reason.responseJSON ? reason.responseJSON.errorCode : ''\n        }\n      };\n      return {\n        errors: [error]\n      };\n    },\n    _parseRequestId: function _parseRequestId(url) {\n      // https://stackoverflow.com/a/901144/6293468\n      var regex = new RegExp('[?&]' + _constants.default.REQUEST_ID + '(=([^&#]*)|&|#|$)');\n      var results = regex.exec(url);\n      if (!results) {\n        return null;\n      }\n      if (!results[2]) {\n        // eslint-disable-line no-magic-numbers\n        return '';\n      }\n      return decodeURIComponent(results[2].replace(/\\+/g, ' ')); // eslint-disable-line no-magic-numbers\n    },\n    getErrorObject: function getErrorObject(adapterError) {\n      return adapterError.errors.errors[0];\n    },\n    getErrorStatus: function getErrorStatus(adapterError) {\n      return adapterError.errors.errors[0].status;\n    },\n    getFouHundredErrorCode: function getFouHundredErrorCode(adapterError) {\n      var error = adapterError.errors.errors[0];\n      return error.meta.errorCode;\n    }\n  };\n\n  exports.default = networkErrorHandler;\n});","define('timetracker/utils/network-request', ['exports', 'timetracker/config/environment', 'timetracker/constants', 'ember-uuid'], function (exports, _environment, _constants, _emberUuid) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  var networkRequest = {\n    makeAPIRequest: function makeAPIRequest(ajaxObject) {\n      var maxRetries = _constants.default.REQUEST.MAX_RETRIES;\n      var timeoutCount = 0;\n      var serviceUnavailableCount = 0;\n      window._apiRequestsPending += 1;\n      return new Ember.RSVP.Promise(function (resolve, reject) {\n        ajaxObject.success = function (payload) {\n          window._apiRequestsPending -= 1;\n          return resolve(payload);\n        };\n        ajaxObject.error = function (reason) {\n          var statusCode502 = _constants.default.RESPONSE_CODES.SERVICE_UNAVAILABLE_502;\n          var statusCode503 = _constants.default.RESPONSE_CODES.SERVICE_UNAVAILABLE_503;\n          var statusTimeout = _constants.default.RESPONSE_CODES.NETWORK_ERROR;\n          var retryAfterMS = _constants.default.REQUEST.RETRY_MS;\n          var status = reason.status;\n          if (status === statusCode502 || status === statusCode503) {\n            serviceUnavailableCount += 1;\n            var response = reason.responseText.length > 0 ? JSON.parse(reason.responseText) : {};\n            if (response.retryAfterMS) {\n              retryAfterMS = response.retryAfterMS;\n            }\n          } else if (status === statusTimeout) {\n            timeoutCount += 1;\n          } else {\n            window._apiRequestsPending -= 1;\n            return reject(reason);\n          }\n          if (timeoutCount > maxRetries || serviceUnavailableCount > maxRetries) {\n            window._apiRequestsPending -= 1;\n            return reject(reason);\n          }\n          Ember.run.later(this, function () {\n            Ember.$.ajax(ajaxObject);\n          }, retryAfterMS);\n        };\n        Ember.$.ajax(ajaxObject);\n      });\n    },\n    buildURL: function buildURL(path) {\n      var queryObject = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      var url = void 0;\n      var host = _environment.default.APP.host;\n      if (!host.endsWith('/')) {\n        host = host + '/';\n      }\n      var apiVersion = _environment.default.APP.apiVersion;\n      if (!apiVersion.endsWith('/')) {\n        apiVersion = apiVersion + '/';\n      }\n      url = '' + host + apiVersion + path;\n      queryObject[_constants.default.REQUEST_ID] = (0, _emberUuid.v4)().toString();\n      queryObject[_constants.default.CLIENT_ID] = window._clientUuid;\n      var queryString = this.formQueryString(queryObject);\n      url = url + '?' + queryString;\n      return url;\n    },\n    formQueryString: function formQueryString(queryObject) {\n      var queryString = '';\n      var encodedURI = void 0;\n      var firstIndex = 0;\n      Object.keys(queryObject).forEach(function (key) {\n        encodedURI = encodeURIComponent(queryObject[key]);\n        queryString += key + '=' + encodedURI + '&';\n      });\n      var queryLength = queryString.length;\n      queryString = queryString.substring(firstIndex, queryLength - 1);\n      return queryString;\n    },\n    setRequestParameters: function setRequestParameters(url, requestMethod) {\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      var hash = options;\n      hash.url = url;\n      hash.type = requestMethod;\n      hash.dataType = 'json';\n      hash.timeout = _constants.default.REQUEST.TIMEOUT_MS;\n      hash.xhrFields = {\n        withCredentials: true\n      };\n      hash.context = this;\n      if (hash.data) {\n        hash.data = JSON.stringify(hash.data);\n      }\n      return hash;\n    }\n  };\n  exports.default = networkRequest;\n});","define('timetracker/utils/object-transforms', ['exports', 'ember-metrics/utils/object-transforms'], function (exports, _objectTransforms) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _objectTransforms.default;\n    }\n  });\n});","define('timetracker/utils/recent-timers-aggregate', ['exports', 'moment', 'timetracker/utils/logger'], function (exports, _moment, _logger) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = recentTimersAggregate;\n\n\n  var getTimerSecondsForToday = function getTimerSecondsForToday(timer, currentTime, zoneOffsetMinutes) {\n    var seconds = 0;\n    var startTime = (0, _moment.default)(timer.get('startTime')).utcOffset(zoneOffsetMinutes);\n    var endTime = timer.get('endTime') ? (0, _moment.default)(timer.get('endTime')) : (0, _moment.default)(currentTime);\n    endTime.utcOffset(zoneOffsetMinutes);\n    var startOfToday = (0, _moment.default)(currentTime).utcOffset(zoneOffsetMinutes).startOf('day');\n\n    // log errors for start time or end time after current time and also start time after end time\n    if (startTime.isAfter(currentTime) || endTime.isAfter(currentTime) || startTime.isAfter(endTime)) {\n      // log error\n      if (startTime.isAfter(currentTime)) {\n        _logger.default.info('start time: ' + startTime.format() + ' cannot be after current time: ' + currentTime);\n      }\n      if (endTime.isAfter(currentTime)) {\n        _logger.default.info('end time: ' + endTime.format() + ' cannot be after current time: ' + currentTime);\n      }\n      if (startTime.isAfter(endTime)) {\n        _logger.default.info('start time: ' + startTime.format() + ' cannot be after end time: ' + endTime.format());\n      }\n      // if the timer was stopped before startOfToday, we don't want it\n    } else if (endTime.isBefore(startOfToday)) {\n      // do nothing seconds will be 0, as timer ended before today\n    } else {\n      seconds = startTime.isAfter(startOfToday) ? endTime.diff(startTime, 'seconds') : endTime.diff(startOfToday, 'seconds');\n    }\n    return seconds;\n  };\n\n  /**\n   * Returns an object that has formatted string for hours, minutes and seconds\n   *\n   *\n   * e.g. totalSeconds = 500\n   * will return {'0', '08', '20'}\n   *\n   *\n   * @param {number} totalSeconds - seconds to be formatted to time\n   * @return {{hours: string, minutes: string, seconds: string}} - an object of hours, minutes and seconds strings\n   */\n  var formatTime = function formatTime(totalSeconds) {\n    var hourSeconds = 3600;\n    var minuteSeconds = 60;\n    var hours = '' + Math.floor(totalSeconds / hourSeconds);\n    var minutes = Math.floor(totalSeconds / minuteSeconds % minuteSeconds);\n    // add a preceding 0 if minutes < 10\n    minutes = minutes < 10 ? '0' + minutes : '' + minutes; // eslint-disable-line no-magic-numbers\n    var seconds = '' + totalSeconds % minuteSeconds;\n    return { hours: hours, minutes: minutes, seconds: seconds };\n  };\n\n  var getSecondsRoundedDownToMinute = function getSecondsRoundedDownToMinute(secondsToRound) {\n    return Math.floor(secondsToRound / 60) * 60; // eslint-disable-line\n  };\n\n  /**\n   Return an array with date and no of hours worked on for the date.\n   @param {array} timers - an array of timers, preferably within last 15 days\n   @param {array} projects - an array of projects, preferably projects having timer within last 15 days\n   @param {string} currentTime - an ISO date string\n   @return {array} - an array of recent timers\n   */\n  function recentTimersAggregate(timers, projects) {\n    var currentTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : (0, _moment.default)();\n\n    var zoneOffsetMinutes = _moment.default.parseZone(currentTime).utcOffset();\n    var recentTimersCollection = {};\n    var activeProjects = projects.filterBy('archived', false);\n    timers.forEach(function (currentTimer) {\n      var projectId = currentTimer.get('projectId');\n      var timerProject = activeProjects.findBy('id', projectId);\n      if (timerProject) {\n        // if the project timer belongs to is not archived\n        if (!recentTimersCollection[projectId]) {\n          recentTimersCollection[projectId] = {\n            projectId: projectId,\n            name: timerProject.get('name'),\n            colorCode: timerProject.get('colorCode'),\n            seconds: 0,\n            timerRunning: false,\n            timerId: null,\n            runningTimerHours: null,\n            runningTimerMinutes: null\n          };\n        }\n        var timerSecondsToday = getTimerSecondsForToday(currentTimer, currentTime, zoneOffsetMinutes);\n        recentTimersCollection[projectId].seconds += getSecondsRoundedDownToMinute(timerSecondsToday);\n        if (!currentTimer.get('endTime')) {\n          var _formatTime = formatTime(timerSecondsToday),\n              hours = _formatTime.hours,\n              minutes = _formatTime.minutes,\n              seconds = _formatTime.seconds;\n\n          recentTimersCollection[projectId].timerRunning = true;\n          recentTimersCollection[projectId].timerId = currentTimer.get('id');\n          recentTimersCollection[projectId].runningTimerHours = hours;\n          recentTimersCollection[projectId].runningTimerMinutes = minutes;\n          recentTimersCollection[projectId].runningTimerSeconds = seconds;\n        }\n      }\n    });\n\n    for (var i in recentTimersCollection) {\n      var _formatTime2 = formatTime(recentTimersCollection[i].seconds),\n          hours = _formatTime2.hours,\n          minutes = _formatTime2.minutes;\n\n      recentTimersCollection[i].hours = hours;\n      recentTimersCollection[i].minutes = minutes;\n      delete recentTimersCollection[i].seconds;\n    }\n    // convert object to array\n    return Object.keys(recentTimersCollection).map(function (key) {\n      return recentTimersCollection[key];\n    });\n    // return recentTimersCollection.toArray();\n  }\n});","define('timetracker/utils/smart-resolve', ['exports', 'ember-promise-tools/utils/smart-resolve'], function (exports, _smartResolve) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _smartResolve.default;\n    }\n  });\n});","define('timetracker/utils/string-util', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  var stringUtil = {\n    condenseSpace: function condenseSpace(string) {\n      return string.trim().replace(/\\s\\s+/g, ' '); // \\s matches all whitespaces, including new line and tab\n    },\n    generatePasswordString: function generatePasswordString() {\n      // https://stackoverflow.com/a/9719815/6293468\n      var base = 36;\n      var noOfChars = -8; // last 8 characters\n      return Math.random() // Generate random number, eg: 0.123456\n      .toString(base) // Convert  to base-36 : \"0.4fzyo82mvyr\"\n      .slice(noOfChars);\n    },\n    searchList: function searchList(list, expression) {\n      var searchExpression = new RegExp(this.escapeRegExp(expression), 'i');\n      var filteredList = list.filter(function (item) {\n        return item.get('name').search(searchExpression) >= 0;\n      });\n      return filteredList.sortBy('name');\n    },\n    escapeRegExp: function escapeRegExp(string) {\n      return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n    }\n  };\n\n  exports.default = stringUtil;\n});","define('timetracker/utils/sync-modal-handler-util', ['exports', 'moment', 'timetracker/utils/logger', 'timetracker/utils/timer-util'], function (exports, _moment, _logger, _timerUtil) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  var syncModalHandlerUtil = {\n    resolveConflictingRecord: function resolveConflictingRecord(store, localData, serverData, keepServerDataFunction, keepLocalDataFunction, i18n) {\n      var modalRef = Ember.$('.conflict-resolution-modal.ui.modal');\n      var localDataRef = modalRef.find('.local-data');\n      var serverDataRef = modalRef.find('.server-data');\n\n      var jsonFormattedStoreTimer = _timerUtil.default.getJsonFormattedTimer(localData);\n      if (jsonFormattedStoreTimer.changeToken === serverData.changeToken) {\n        // discard if server CT equals local\n        return keepLocalDataFunction();\n      }\n      if (this.isLocalAndServerDataSame(jsonFormattedStoreTimer, serverData)) {\n        // discard local change if same as server\n        return keepServerDataFunction();\n      }\n\n      this.fillTimerDetail(store, serverDataRef, serverData, i18n);\n      this.fillTimerDetail(store, localDataRef, jsonFormattedStoreTimer, i18n);\n\n      var closeModal = function closeModal() {\n        modalRef.find('.ui.button.keep-server').unbind('click');\n        modalRef.find('.ui.button.keep-local').unbind('click');\n        modalRef.modal('hide');\n      };\n\n      return new Ember.RSVP.Promise(function (resolve) {\n        modalRef.find('.ui.button.keep-server').on('click', function () {\n          closeModal();\n          keepServerDataFunction();\n          return resolve();\n        });\n\n        modalRef.find('.ui.button.keep-local').on('click', function () {\n          closeModal();\n          keepLocalDataFunction();\n          return resolve();\n        });\n\n        modalRef.modal({\n          closable: false\n        }).modal('show');\n      });\n    },\n    fillTimerDetail: function fillTimerDetail(store, divRef, dataObject, i18n) {\n      var dateFormat = 'llll';\n      var strings = {\n        currentlyRunning: i18n.t('strings.modal.currentlyRunning').toString(),\n        yes: i18n.t('strings.modal.yes').toString(),\n        no: i18n.t('strings.modal.no').toString()\n      };\n      var startTime = (0, _moment.default)(dataObject.startTime).format(dateFormat);\n      var endTime = dataObject.endTime ? (0, _moment.default)(dataObject.endTime).format(dateFormat) : strings.currentlyRunning;\n      var archivedStatus = dataObject.archived ? strings.yes : strings.no;\n      var projectName = store.peekRecord('project', dataObject.projectId).get('name');\n      divRef.find('.project-name .content').html(projectName);\n      divRef.find('.starts-at .content').html(startTime);\n      divRef.find('.ends-at .content').html(endTime);\n      divRef.find('.is-archived .content').html(archivedStatus);\n    },\n    isLocalAndServerDataSame: function isLocalAndServerDataSame(localData, serverData) {\n      if (localData.projectId !== serverData.projectId) {\n        _logger.default.error('Conflicting project id found for timer with id ' + serverData.timerId);\n      }\n      return localData.archived === serverData.archived && localData.startTime === serverData.startTime && localData.endTime === serverData.endTime;\n    }\n  };\n\n  exports.default = syncModalHandlerUtil;\n});","define('timetracker/utils/timeline-util', ['exports', 'timetracker/constants', 'moment'], function (exports, _constants, _moment) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  var timelineUtil = {\n    makeEvents: function makeEvents(timers, projects) {\n      var project = void 0;\n      var startTime = void 0;\n      var endTime = void 0;\n      var isRunningTimer = void 0;\n      var events = [];\n      for (var i = 0, l = timers.length; i < l; i++) {\n        var currentTimer = timers[i];\n        startTime = (0, _moment.default)(currentTimer.get('startTime'));\n        isRunningTimer = currentTimer.get('endTime') === null || typeof currentTimer.get('endTime') === 'undefined';\n        endTime = isRunningTimer ? (0, _moment.default)() : (0, _moment.default)(currentTimer.get('endTime'));\n        startTime = (0, _moment.default)(currentTimer.get('startTime'));\n        project = projects.findBy('id', currentTimer.get('projectId'));\n        if (!project) {\n          continue; // timer from archived project\n        }\n        // Fullcalendar will make end time as null if start and end happens to be the same\n        // to fix this, we filter out all timers which runs less than a second.\n        if (endTime.diff(startTime, 'seconds') < 1) {\n          continue;\n        }\n        var event = {\n          start: startTime.format(),\n          end: endTime.format(),\n          isRunning: isRunningTimer,\n          backgroundColor: _constants.default.PROJECT_COLORS_TRANSLUCENT[project.get('colorCode')],\n          borderColor: _constants.default.PROJECT_COLORS[project.get('colorCode')],\n          id: currentTimer.get('id'),\n          title: project.get('name'),\n          projectId: project.get('id')\n        };\n        events.push(event);\n      }\n      return events;\n    },\n    getTotalMinutesForTheDay: function getTotalMinutesForTheDay(day, timers) {\n      var minutes = 0;\n      var timerEndTime = void 0;\n      var timerStartTime = void 0;\n      var timer = void 0;\n      var timerStartTimeForTheDay = void 0;\n      var timerEndTimeForTheDay = void 0;\n      var dayStart = day.clone().startOf('day');\n      var dayEnd = day.clone().add(1, 'day').startOf('day');\n      for (var i = 0, l = timers.length; i < l; i++) {\n        timer = timers[i];\n        timerEndTime = timer.end;\n        timerStartTime = timer.start;\n        if (dayStart.isSameOrAfter(timerStartTime, 'day') && dayStart.isSameOrBefore(timerEndTime, 'day')) {\n          if (dayStart.isAfter(timerStartTime)) {\n            timerStartTimeForTheDay = dayStart;\n          } else {\n            timerStartTimeForTheDay = timerStartTime;\n          }\n          if (timerEndTime.isBefore(dayEnd)) {\n            timerEndTimeForTheDay = timerEndTime;\n          } else {\n            timerEndTimeForTheDay = dayEnd;\n          }\n          minutes += timerEndTimeForTheDay.diff(timerStartTimeForTheDay, 'minutes');\n        }\n      }\n      return minutes;\n    },\n    getHourMinuteStringFromMinutes: function getHourMinuteStringFromMinutes(inputMinutes, i18n) {\n      var minuteDivisor = 60;\n      var hours = Math.floor(inputMinutes / minuteDivisor);\n      var minutes = inputMinutes % minuteDivisor;\n      var formatString = void 0;\n      var hourString = i18n.t('strings.time.hour', { count: hours });\n      var minuteString = i18n.t('strings.time.minute', { count: minutes });\n      if (hourString.string.length > 0 && minuteString.string.length > 0) {\n        formatString = hourString + ' ' + minuteString;\n      } else {\n        formatString = '' + hourString + minuteString;\n      }\n      return formatString;\n    },\n    getWeekViewFormattedTime: function getWeekViewFormattedTime(inputMinutes) {\n      var minuteDivisor = 60;\n      var hours = Math.floor(inputMinutes / minuteDivisor);\n      var minutes = inputMinutes % minuteDivisor;\n      minutes = minutes < 10 ? '0' + minutes : '' + minutes; // eslint-disable-line no-magic-numbers\n      return hours + ':' + minutes;\n    },\n    renderTotalTimeInFcHeader: function renderTotalTimeInFcHeader(formattedTime, target) {\n      var span = document.createElement('span');\n      span.appendChild(document.createTextNode(formattedTime));\n      var targetRef = Ember.$(target);\n      if (targetRef.children().length > 1) {\n        Ember.$(targetRef.children(span)[1]).remove();\n      }\n      targetRef.append(span);\n    },\n    getTargetElementInWeekViewForTotalTime: function getTargetElementInWeekViewForTotalTime(dayOfWeek) {\n      var weekDay = void 0;\n      switch (dayOfWeek) {\n        case 0:\n          weekDay = '.fc-sun';\n          break;\n        case 1:\n          weekDay = '.fc-mon';\n          break;\n        case 2:\n          weekDay = '.fc-tue'; // eslint-disable-line no-magic-numbers\n          break;\n        case 3:\n          weekDay = '.fc-wed'; // eslint-disable-line no-magic-numbers\n          break;\n        case 4:\n          weekDay = '.fc-thu'; // eslint-disable-line no-magic-numbers\n          break;\n        case 5:\n          weekDay = '.fc-fri'; // eslint-disable-line no-magic-numbers\n          break;\n        case 6:\n          weekDay = '.fc-sat'; // eslint-disable-line no-magic-numbers\n      }\n      return 'th' + weekDay; // e.g. selector is of type th.fc-sun\n    },\n    getOverlappingTimers: function getOverlappingTimers(timerToTestAgainst) {\n      var timers = Ember.$('.full-calendar').fullCalendar('clientEvents');\n      var overlappingTimers = [];\n      var start = timerToTestAgainst.start;\n      var end = timerToTestAgainst.end.isValid() ? timerToTestAgainst.end : (0, _moment.default)();\n      for (var i = 0, l = timers.length; i < l; i++) {\n        if (timerToTestAgainst.id === timers[i].id) {\n          continue;\n        }\n        if (start.isSameOrAfter(timers[i].start) && start.isBefore(timers[i].end) || start.isBefore(timers[i].start) && end.isAfter(timers[i].start) || timers[i].isRunning && !timerToTestAgainst.end.isValid()) {\n          overlappingTimers.push(timers[i]);\n        }\n      }\n      return overlappingTimers;\n    },\n    createFcEvent: function createFcEvent(timer, color, title) {\n      return {\n        id: timer.timerId,\n        start: timer.startTime,\n        end: timer.endTime,\n        isRunning: timer.endTime === null,\n        backgroundColor: _constants.default.PROJECT_COLORS_TRANSLUCENT[color],\n        borderColor: _constants.default.PROJECT_COLORS[color],\n        title: title,\n        projectId: timer.projectId\n      };\n    }\n  };\n\n  exports.default = timelineUtil;\n});","define('timetracker/utils/timer-util', ['exports', 'moment', 'timetracker/utils/logger'], function (exports, _moment, _logger) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  var timerUtil = {\n    testAndArchiveLessThanAMinuteTimers: function testAndArchiveLessThanAMinuteTimers(timer) {\n      var end = (0, _moment.default)(timer.get('endTime'));\n      if (!end.isValid()) {\n        return;\n      }\n      var start = (0, _moment.default)(timer.get('startTime'));\n      var duration = end.diff(start, 'minute');\n      if (duration < 1) {\n        timer.set('archived', true);\n      }\n    },\n    getJsonFormattedTimer: function getJsonFormattedTimer(storeRecord) {\n      return {\n        startTime: (0, _moment.default)(storeRecord.get('startTime')).format(),\n        endTime: storeRecord.get('endTime') ? (0, _moment.default)(storeRecord.get('endTime')).format() : null,\n        archived: storeRecord.get('archived'),\n        projectId: storeRecord.get('projectId'),\n        changeToken: storeRecord.get('changeToken')\n      };\n    },\n    isAValidTimer: function isAValidTimer(jsonTimer) {\n      if (!jsonTimer.endTime) {\n        return true;\n      }\n      // A timer with end time before start time is not be kept in store\n      // Throw an error if timer's start/end exceeds current time\n      var currentTime = (0, _moment.default)().endOf('minute'); // avoids problems where devices are off by few seconds\n      var startTime = (0, _moment.default)(jsonTimer.startTime);\n      var endTime = (0, _moment.default)(jsonTimer.endTime);\n      if (startTime.isAfter(currentTime)) {\n        _logger.default.error('Start time after current time error', jsonTimer);\n      }\n      if (endTime.isAfter(currentTime)) {\n        _logger.default.error('End time after current time error', jsonTimer);\n      }\n      if (startTime.isAfter(endTime)) {\n        _logger.default.error('Start time after end time error', jsonTimer);\n        return false;\n      }\n      return true;\n    }\n  };\n\n  exports.default = timerUtil;\n});","define('timetracker/utils/uuid-generator', ['exports', 'ember-uuid/utils/uuid-generator'], function (exports, _uuidGenerator) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _uuidGenerator.default;\n    }\n  });\n  Object.defineProperty(exports, 'v4', {\n    enumerable: true,\n    get: function () {\n      return _uuidGenerator.v4;\n    }\n  });\n  Object.defineProperty(exports, 'v1', {\n    enumerable: true,\n    get: function () {\n      return _uuidGenerator.v1;\n    }\n  });\n  Object.defineProperty(exports, 'parse', {\n    enumerable: true,\n    get: function () {\n      return _uuidGenerator.parse;\n    }\n  });\n  Object.defineProperty(exports, 'unparse', {\n    enumerable: true,\n    get: function () {\n      return _uuidGenerator.unparse;\n    }\n  });\n});","\n","define('timetracker/config/environment', [], function() {\n  var prefix = 'timetracker';\ntry {\n  var metaName = prefix + '/config/environment';\n  var rawConfig = document.querySelector('meta[name=\"' + metaName + '\"]').getAttribute('content');\n  var config = JSON.parse(unescape(rawConfig));\n\n  var exports = { 'default': config };\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n  return exports;\n}\ncatch(err) {\n  throw new Error('Could not read config from meta tag with name \"' + metaName + '\".');\n}\n\n});\n","if (!runningTests) {\n  require(\"timetracker/app\")[\"default\"].create({\"host\":\"https://dev.api.usetiming.in/\",\"apiVersion\":\"v1/\",\"LOG_ACTIVE_GENERATION\":true,\"LOG_TRANSITIONS\":true,\"LOG_TRANSITIONS_INTERNAL\":true,\"LOG_VIEW_LOOKUPS\":true,\"name\":\"timetracker\",\"version\":\"0.0.0+b7d38707\"});\n}\n"],"names":[],"mappings":"AAAA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;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;;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;;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;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;;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;;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;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;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC1MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtqBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACtKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;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;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;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;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;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;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;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;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;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;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;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;;AC/BA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;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;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;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;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;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;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;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;;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;;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;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACnCA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;","file":"timetracker.js"}