{{name}}
'\n\t * };\n\t */\n\t\t\t\t\t\ttemplate: null,\n\t\n\t\t\t\t\t\t/**\n\t * A list of child view definitions to be passed to {@link #add this.add()}.\n\t * Note: these definitions will be added **before** the {@link #constructor initiliaze} method invokes.\n\t * @type {(Array|Function)}\n\t * @example\n\t * var Container = View.extend({\n\t * template: '',\n\t * children: [\n\t * [ContentView, '.content'],\n\t * [OtherContentView, '.content'],\n\t * OtherView\n\t * ]\n\t * })\n\t *\n\t * var Container = View.extend({\n\t * template: 'some html
'); //=> \"some html
\"\n\t * this.add('{{name}}
'); //=> \"John Doe
\"\n\t * this.add('{{name}}') //=> \"{{message}}
\\\n\t\t ',\n\t\n\t\t\t\t\t\tinitialize: function initialize() {\n\t\t\t\t\t\t\tthis.options = _.defaults({}, this.options, defaults);\n\t\t\t\t\t\t\tthis.$el.addClass('infobox-' + this.options.level);\n\t\t\t\t\t\t\tif (this.options.width) {\n\t\t\t\t\t\t\t\tthis.$el.width(this.options.width).css({\n\t\t\t\t\t\t\t\t\t'margin-left': '0px',\n\t\t\t\t\t\t\t\t\t'left': Math.round(($(window).width() - this.options.width) / 2)\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tgetTemplateData: function getTemplateData() {\n\t\t\t\t\t\t\treturn _.extend(_.pick(this.options, 'level', 'message', 'title'), {\n\t\t\t\t\t\t\t\tdismissable: this.options.hide === false || this.options.dismissable === true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tpostRender: function postRender() {\n\t\t\t\t\t\t\tif (this.options.hide) {\n\t\t\t\t\t\t\t\t_.delay(_.bind(this.fadeOut, this), this.options.delay);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tfadeOut: function fadeOut() {\n\t\t\t\t\t\t\tthis.$el.fadeOut(this.options.fade, _.bind(this.remove, this));\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t});\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 34 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(35)], __WEBPACK_AMD_DEFINE_RESULT__ = function (BaseFormDialog) {\n\t\n\t\t\t\t\treturn BaseFormDialog.extend({\n\t\n\t\t\t\t\t\t'save': 'OK',\n\t\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tminWidth: 500,\n\t\t\t\t\t\t\tmaxWidth: 700,\n\t\t\t\t\t\t\tclose: true\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tconstructor: function constructor() {\n\t\t\t\t\t\t\tBaseFormDialog.apply(this, arguments);\n\t\n\t\t\t\t\t\t\tif (this.content) {\n\t\t\t\t\t\t\t\tthis.add(this.content);\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tthis.listenTo(this, 'save', function () {\n\t\t\t\t\t\t\t\tvar callback = this.ok || this.options.ok;\n\t\t\t\t\t\t\t\tcallback && callback();\n\t\t\t\t\t\t\t\tthis.remove();\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\tthis.listenTo(this, 'cancel', function () {\n\t\t\t\t\t\t\t\tvar callback = this.cancelFn || this.options.cancelFn;\n\t\t\t\t\t\t\t\tcallback && callback();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t});\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 35 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(8), __webpack_require__(3), __webpack_require__(28), __webpack_require__(36), __webpack_require__(37)], __WEBPACK_AMD_DEFINE_RESULT__ = function ($, _, BaseView, BaseModalDialog, BaseForm) {\n\t\n\t\t\t\t\tvar FORM_FIELDS = ['save', 'noCancelButton', 'inputs', 'subtitle', 'autoSave', 'focus', 'cancel', 'danger', 'hasSavingState', 'customSavingState', 'parseErrorMessage'];\n\t\t\t\t\tvar FORM_DEFAULTS = {\n\t\t\t\t\t\tlayout: 'o-form-wrap',\n\t\t\t\t\t\tscrollOnError: false\n\t\t\t\t\t};\n\t\n\t\t\t\t\t// jquery.simplemodoal options\n\t\t\t\t\tvar SIMPLE_MODAL_PARAMS = {\n\t\t\t\t\t\tminWidth: 600,\n\t\t\t\t\t\tmaxWidth: 950,\n\t\t\t\t\t\tfocus: false,\n\t\t\t\t\t\tclose: false,\n\t\t\t\t\t\tautoResize: false, // (use the resizeModal method, so that the scrolling goes to content, not the whole modal)\n\t\t\t\t\t\tautoPosition: true\n\t\t\t\t\t};\n\t\n\t\t\t\t\t/**\n\t * Okta.FormDialog is a facade layer for a form that lives in a modal dialog.\n\t *\n\t * The API is proxying the {@link module:Okta.Form|Form} API for the most part.\n\t * It also triggers all the form events\n\t * It takes care of repositioning, resizing, closing the dialog on cancel, and so on.\n\t *\n\t * @class module:Okta.FormDialog\n\t * @extends module:Okta.View\n\t * @borrows module:Okta.Form#event:save as save\n\t * @borrows module:Okta.Form#event:saved as saved\n\t * @borrows module:Okta.Form#event:resize as resize\n\t * @borrows module:Okta.Form#event:cancel as cancel\n\t * @borrows module:Okta.Form#title as #title\n\t * @borrows module:Okta.Form#subtitle as #subtitle\n\t * @borrows module:Okta.Form#save as #save\n\t * @borrows module:Okta.Form#inputs as #inputs\n\t * @borrows module:Okta.Form#noCancelButton as #noCancelButton\n\t * @borrows module:Okta.Form#autoSave as #autoSave\n\t * @borrows module:Okta.ModalDialog#params as #params\n\t * @borrows module:Okta.Form#addInput as #addInput\n\t * @borrows module:Okta.Form#addButton as #addButton\n\t * @borrows module:Okta.Form#addDivider as #addDivider\n\t * @borrows module:Okta.Form#addSectionTitle as #addSectionTitle\n\t * @borrows module:Okta.Form#clearErrors as #clearErrors\n\t * @example\n\t * var AddUserDialog = Okta.FormDialog({\n\t * autoSave: true,\n\t * title: 'Add a User',\n\t * inputs: [\n\t * {\n\t * type: 'text',\n\t * name: 'fname',\n\t * label: 'First Name'\n\t * },\n\t * {\n\t * type: 'text',\n\t * name: 'lname',\n\t * label: 'Last Name'\n\t * }\n\t * ]\n\t * });\n\t *\n\t * // renders the modal dialog on the page\n\t * var dialog = new AddUserDialog({model: new MyModel()}).render();\n\t * this.listenTo(dialog, 'saved', function (model) {\n\t * // the model is now saved\n\t * });\n\t */\n\t\t\t\t\treturn BaseView.extend( /** @lends module:Okta.FormDialog.prototype */{\n\t\n\t\t\t\t\t\tconstructor: function constructor(options) {\n\t\t\t\t\t\t\t/* eslint max-statements: [2, 13] */\n\t\n\t\t\t\t\t\t\tvar Form = BaseForm.extend(_.extend({}, FORM_DEFAULTS, _.pick(this, FORM_FIELDS)));\n\t\t\t\t\t\t\tthis.form = new Form(_.omit(options, 'title', 'subtitle'));\n\t\n\t\t\t\t\t\t\tthis.listenTo(this.form, 'resize', _.debounce(_.bind(this.resizeModal, this), 100));\n\t\n\t\t\t\t\t\t\t// trigger all form events\n\t\t\t\t\t\t\tvar removeFn = _.bind(this.remove, this);\n\t\t\t\t\t\t\tthis.listenTo(this.form, 'all', function () {\n\t\t\t\t\t\t\t\tthis.trigger.apply(this, arguments);\n\t\t\t\t\t\t\t\tif (arguments[0] === 'cancel') {\n\t\t\t\t\t\t\t\t\tremoveFn();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t$(window).resize(_.debounce(_.bind(this.resizeModal, this), 100));\n\t\n\t\t\t\t\t\t\tvar Dialog = BaseModalDialog.extend({\n\t\t\t\t\t\t\t\ttitle: this.title,\n\t\t\t\t\t\t\t\tclassName: this.className,\n\t\t\t\t\t\t\t\tparams: _.extend({}, SIMPLE_MODAL_PARAMS, this.params)\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\tthis.dialog = new Dialog(options);\n\t\t\t\t\t\t\tthis.dialog.add(this.form);\n\t\t\t\t\t\t\tthis.el = this.dialog.el;\n\t\n\t\t\t\t\t\t\tBaseView.apply(this, arguments);\n\t\n\t\t\t\t\t\t\tif (this.form.getAttribute('autoSave')) {\n\t\t\t\t\t\t\t\tthis.listenTo(this, 'saved', this.remove);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * The form instance generated by the constructor.\n\t * Should **not** be referenced locally, exposed externally for test purposes.\n\t * @type {Okta.Form}\n\t * @private\n\t * @readonly\n\t */\n\t\t\t\t\t\tform: undefined,\n\t\n\t\t\t\t\t\t/**\n\t * The dialog instance generated by the constructor.\n\t * Should **not** be referenced locally, exposed externally for test purposes.\n\t * @type {Okta.ModalDialog}\n\t * @private\n\t * @readonly\n\t */\n\t\t\t\t\t\tdialog: undefined,\n\t\n\t\t\t\t\t\taddInput: function addInput() {\n\t\t\t\t\t\t\treturn this.form.addInput.apply(this.form, arguments);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\taddButton: function addButton() {\n\t\t\t\t\t\t\treturn this.form.addButton.apply(this.form, arguments);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\taddDivider: function addDivider() {\n\t\t\t\t\t\t\treturn this.form.addDivider.apply(this.form, arguments);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\taddSectionTitle: function addSectionTitle() {\n\t\t\t\t\t\t\treturn this.form.addSectionTitle.apply(this.form, arguments);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tadd: function add() {\n\t\t\t\t\t\t\treturn this.form.add.apply(this.form, arguments);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\trender: function render() {\n\t\t\t\t\t\t\tthis.preRender();\n\t\t\t\t\t\t\tthis.dialog.render.apply(this.dialog, arguments);\n\t\t\t\t\t\t\t_.defer(_.bind(this.resizeModal, this));\n\t\t\t\t\t\t\tthis.postRender();\n\t\t\t\t\t\t\treturn this;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tremove: function remove() {\n\t\t\t\t\t\t\tthis.dialog.remove.apply(this.dialog, arguments);\n\t\t\t\t\t\t\treturn BaseView.prototype.remove.apply(this, arguments);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Resize modal to fit window height\n\t * the whole modal will be within the viewport, only the form content is scrollable\n\t * there's no good solution to totally fix the width issue yet for tiny window,\n\t * leave it for jquery simplemodal autoResize to do its best\n\t */\n\t\t\t\t\t\tresizeModal: function resizeModal() {\n\t\t\t\t\t\t\tvar modal = $('.simplemodal-wrap'),\n\t\t\t\t\t\t\t form = this.form,\n\t\t\t\t\t\t\t modalHeight = modal.height(),\n\t\t\t\t\t\t\t modalMinHeight = _.isNumber(this.dialog.params.minHeight) ? this.dialog.params.minHeight : 0,\n\t\t\t\t\t\t\t windowHeight = $(window).height();\n\t\t\t\t\t\t\tif (modalMinHeight <= modalHeight) {\n\t\t\t\t\t\t\t\tif (modalHeight >= windowHeight) {\n\t\t\t\t\t\t\t\t\tform.contentHeight(windowHeight - this.dialog.$('h2').outerHeight() - form.$('.o-form-button-bar').outerHeight() - (modal.outerHeight(true) - form.$el.outerHeight(true)));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tform.contentHeight(form.contentHeight() + (windowHeight - modal.outerHeight()));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.dialog.resize.apply(this.dialog, arguments);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tclearErrors: function clearErrors() {\n\t\t\t\t\t\t\treturn this.form.clearErrors.apply(this.form, arguments);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t});\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 36 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(8), __webpack_require__(3), __webpack_require__(25), __webpack_require__(28), __webpack_require__(12)], __WEBPACK_AMD_DEFINE_RESULT__ = function ($, _, TemplateUtil, BaseView) {\n\t\n\t\t\t\t\tvar tpl = TemplateUtil.tpl;\n\t\n\t\t\t\t\t/**\n\t * A view that renders as a modal dialog.\n\t * The template of the view will render inside a dialog.\n\t *\n\t * It uses [SimpleModal](http://www.ericmmartin.com/projects/simplemodal) as the base modal widget.\n\t *\n\t * In the context of a {@link module:Okta.View|View}, do not `add` this view to the container - simply call render\n\t * A modal dialog is a special view in terms of - it has an overlay and takes over the screen, so conceptually\n\t * it is not a part of any other view.\n\t *\n\t * @class module:Okta.ModalDialog\n\t * @extends module:Okta.View\n\t */\n\t\t\t\t\treturn BaseView.extend( /** @lends module:Okta.ModalDialog.prototype */{\n\t\n\t\t\t\t\t\t/**\n\t * Parameters to pass to the simplemodal plugin.\n\t * See [Available Options](http://www.ericmmartin.com/projects/simplemodal/#options).\n\t * @type {Object}\n\t * @property {Object} [params]\n\t */\n\t\t\t\t\t\tparams: {},\n\t\n\t\t\t\t\t\tconstructor: function constructor() {\n\t\t\t\t\t\t\tBaseView.apply(this, arguments);\n\t\t\t\t\t\t\tthis.$el.addClass('simplemodal-wrap');\n\t\n\t\t\t\t\t\t\t// garbage collection - remove the view when modal is closed\n\t\t\t\t\t\t\tthis.params = _.extend({\n\t\t\t\t\t\t\t\tonClose: _.bind(_.throttle(this.remove, 64), this)\n\t\t\t\t\t\t\t}, this.params || {});\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\trender: function render() {\n\t\t\t\t\t\t\t/* eslint max-statements: [2, 16] */\n\t\n\t\t\t\t\t\t\tthis.delegateEvents(); // modal may be rendered multiple times\n\t\t\t\t\t\t\tBaseView.prototype.render.apply(this, arguments);\n\t\n\t\t\t\t\t\t\tvar options = _.extend({}, _.pick(this, 'title', 'subtitle'), _.pick(this.options, 'title', 'subtitle'));\n\t\n\t\t\t\t\t\t\tif (options.subtitle) {\n\t\t\t\t\t\t\t\tvar subtitle = _.resultCtx(options, 'subtitle', this);\n\t\t\t\t\t\t\t\tthis.$el.prepend(tpl('{{subtitle}}
')({ subtitle: subtitle }));\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif (options.title) {\n\t\t\t\t\t\t\t\tvar title = _.resultCtx(options, 'title', this);\n\t\t\t\t\t\t\t\tthis.$el.prepend(tpl('{{subtitle}}
\\\n\t\t {{/if}}\\\n\t\t \\\n\t\t \\\n\t\t{{explain}}
';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Highlight the input as invalid (validation failed)\n\t * Adds an explaination message of the error\n\t * @private\n\t */\n\t\t\t\t\t\t__setError: function __setError(errors) {\n\t\n\t\t\t\t\t\t\tthis.__errorState = true;\n\t\t\t\t\t\t\tthis.$el.addClass('o-form-has-errors');\n\t\n\t\t\t\t\t\t\tvar tmpl = ['', '', '{{text}}', '
'].join('');\n\t\n\t\t\t\t\t\t\tvar html = TemplateUtil.tpl(tmpl)({ text: errors.join(', ') });\n\t\t\t\t\t\t\tvar $elExplain = this.$('.o-form-explain').not('.o-form-input-error').first();\n\t\n\t\t\t\t\t\t\tif ($elExplain.length) {\n\t\t\t\t\t\t\t\t$elExplain.before(html);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.$el.append(html);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Un-highlight the input and remove explaination text\n\t * @private\n\t */\n\t\t\t\t\t\t__clearError: function __clearError() {\n\t\t\t\t\t\t\tif (this.__errorState) {\n\t\t\t\t\t\t\t\tthis.$('.o-form-input-error').remove();\n\t\t\t\t\t\t\t\tthis.$el.removeClass('o-form-has-errors');\n\t\t\t\t\t\t\t\tthis.__errorState = false;\n\t\t\t\t\t\t\t\t_.defer(_.bind(function () {\n\t\t\t\t\t\t\t\t\tthis.model.trigger('form:resize');\n\t\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tfocus: function focus() {\n\t\t\t\t\t\t\tthis.each(function (view) {\n\t\t\t\t\t\t\t\tif (view.focus) {\n\t\t\t\t\t\t\t\t\treturn view.focus();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\treturn this;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t});\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 39 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(3), __webpack_require__(28)], __WEBPACK_AMD_DEFINE_RESULT__ = function (_, BaseView) {\n\t\n\t\t\t\t\treturn {\n\t\t\t\t\t\tredirect: function redirect(url) {\n\t\t\t\t\t\t\twindow.location = url;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\treloadPage: function reloadPage() {\n\t\t\t\t\t\t\twindow.location.reload();\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tconstantError: function constantError(errorMessage) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tthrow new Error(errorMessage);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Simply convert an URL query key value pair object into an URL query string.\n\t * Remember NOT to escape the query string when using this util.\n\t * example:\n\t * input: {userId: 123, instanceId: undefined, expand: 'schema,app'}\n\t * output: '?userId=123&expand=schema,app'\n\t */\n\t\t\t\t\t\tgetUrlQueryString: function getUrlQueryString(queries) {\n\t\t\t\t\t\t\t_.isObject(queries) || (queries = {});\n\t\t\t\t\t\t\tvar queriesString = _.without(_.map(queries, function (value, key) {\n\t\t\t\t\t\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\t\t\t\t\t\treturn key + '=' + encodeURIComponent(value);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}), undefined).join('&');\n\t\t\t\t\t\t\treturn _.isEmpty(queriesString) ? '' : '?' + queriesString;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tisABaseView: function isABaseView(obj) {\n\t\t\t\t\t\t\treturn obj instanceof BaseView || obj.prototype instanceof BaseView || obj === BaseView;\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 40 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; /* eslint max-params: 0, complexity: 0, max-statements: 0 */\n\t\t\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(3), __webpack_require__(41)], __WEBPACK_AMD_DEFINE_RESULT__ = function (_, InputRegistry) {\n\t\n\t\t\t\t\tfunction createInput(Input, options) {\n\t\t\t\t\t\tif (InputRegistry.isBaseInput(Input)) {\n\t\t\t\t\t\t\treturn Input.prototype ? new Input(_.omit(options, 'input')) : Input;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn Input;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfunction create(options) {\n\t\t\t\t\t\toptions = _.clone(options);\n\t\t\t\t\t\tif (options.input) {\n\t\t\t\t\t\t\treturn createInput(options.input, options);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar Input = InputRegistry.get(options);\n\t\t\t\t\t\tif (!Input) {\n\t\t\t\t\t\t\tthrow new Error('unknown input: ' + options.type);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn createInput(Input, options);\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfunction supports(options) {\n\t\t\t\t\t\treturn !!options.input || !!InputRegistry.get(options);\n\t\t\t\t\t}\n\t\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcreate: create,\n\t\t\t\t\t\tsupports: supports\n\t\t\t\t\t};\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 41 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(3)], __WEBPACK_AMD_DEFINE_RESULT__ = function (_) {\n\t\t\t\t\tvar registry = {};\n\t\n\t\t\t\t\tfunction isBaseInput(input) {\n\t\t\t\t\t\tif (_.isFunction(input)) {\n\t\t\t\t\t\t\treturn _.isFunction(input.prototype.editMode) && _.isFunction(input.prototype.readMode);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn _.isObject(input) && _.isFunction(input.editMode) && _.isFunction(input.readMode);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/**\n\t * @class module:Okta.internal.views.forms.helpers.InputRegistry\n\t */\n\t\t\t\t\treturn (/** @lends module:Okta.internal.views.forms.helpers.InputRegistry */{\n\t\t\t\t\t\t\tisBaseInput: isBaseInput,\n\t\n\t\t\t\t\t\t\t/**\n\t * Register a form input\n\t * @param {String} type string identifier for the input\n\t * @param {BaseInput} input the input to register\n\t */\n\t\t\t\t\t\t\tregister: function register(type, input) {\n\t\t\t\t\t\t\t\tregistry[type] = input;\n\t\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t\t/**\n\t * Get a form input by type\n\t * @param {Object} options input definition\n\t * @param {String} options.type string identifier for the input\n\t * @return {BaseInput} a matching input\n\t */\n\t\t\t\t\t\t\tget: function get(options) {\n\t\t\t\t\t\t\t\tvar input = registry[options.type];\n\t\t\t\t\t\t\t\treturn input && (isBaseInput(input) ? input : input(options));\n\t\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t\t/**\n\t * Unregister an input type\n\t * @param {String} type\n\t */\n\t\t\t\t\t\t\tunregister: function unregister(type) {\n\t\t\t\t\t\t\t\tdelete registry[type];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 42 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(3), __webpack_require__(25), __webpack_require__(28), __webpack_require__(43)], __WEBPACK_AMD_DEFINE_RESULT__ = function (_, TemplateUtil, BaseView) {\n\t\n\t\t\t\t\t/**\n\t * @class InputLabel\n\t * @extends {Okta.View}\n\t * @private\n\t * The input's label.\n\t */\n\t\t\t\t\treturn BaseView.extend({\n\t\n\t\t\t\t\t\tclassName: 'okta-form-label o-form-label',\n\t\n\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t'data-se': 'o-form-label'\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @constructor\n\t * @param {Object} options options hash\n\t * @param {String} [options.type] Input type\n\t * @param {String|Function} [options.label] Label text\n\t * @param {String|Function} [options.sublabel] Sub label text\n\t * @param {String|Function} [options.tooltip] Tooltip text\n\t * @param {String|Function} [options.inputId] Id of the inputs\n\t * @param {String|Function} [options.id] Id of the inputs\n\t */\n\t\t\t\t\t\tconstructor: function constructor(options) {\n\t\t\t\t\t\t\t/* eslint max-statements: [2, 16] complexity: [2, 7]*/\n\t\t\t\t\t\t\t_.defaults(options, { inputId: options.id });\n\t\t\t\t\t\t\tdelete options.id;\n\t\n\t\t\t\t\t\t\tBaseView.apply(this, arguments);\n\t\n\t\t\t\t\t\t\tvar template;\n\t\t\t\t\t\t\tif (this._isLabelView(options.label)) {\n\t\t\t\t\t\t\t\ttemplate = '';\n\t\t\t\t\t\t\t} else if (_.contains(['radio', 'checkbox'], options.type) || !options.label) {\n\t\t\t\t\t\t\t\ttemplate = '{{label}}';\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t//space added in the end of the label to avoid selecting label text with double click in read mode\n\t\t\t\t\t\t\t\ttemplate = '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (options.sublabel) {\n\t\t\t\t\t\t\t\ttemplate += '{{sublabel}}';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (options.tooltip) {\n\t\t\t\t\t\t\t\tif (_.isString(options.tooltip)) {\n\t\t\t\t\t\t\t\t\toptions.tooltip = {\n\t\t\t\t\t\t\t\t\t\ttext: options.tooltip\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttemplate += '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.template = TemplateUtil.tpl(template);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tgetTemplateData: function getTemplateData() {\n\t\t\t\t\t\t\tvar options = { label: '' };\n\t\t\t\t\t\t\t_.each(['inputId', 'label', 'sublabel', 'tooltip'], function (option) {\n\t\t\t\t\t\t\t\toptions[option] = _.resultCtx(this.options, option, this);\n\t\t\t\t\t\t\t}, this);\n\t\n\t\t\t\t\t\t\treturn options;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t_isLabelView: function _isLabelView(label) {\n\t\t\t\t\t\t\treturn !_.isUndefined(label) && label instanceof BaseView;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tpostRender: function postRender() {\n\t\t\t\t\t\t\tvar options = this.getTemplateData();\n\t\t\t\t\t\t\tif (this._isLabelView(options.label)) {\n\t\t\t\t\t\t\t\tthis.removeChildren();\n\t\t\t\t\t\t\t\tthis.add(options.label, 'label');\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif (options.tooltip) {\n\t\t\t\t\t\t\t\tthis.$('.o-form-tooltip').qtip(_.extend({\n\t\t\t\t\t\t\t\t\tstyle: { classes: 'qtip-custom qtip-shadow' },\n\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\tmy: 'bottom left',\n\t\t\t\t\t\t\t\t\t\tat: 'top center'\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\thide: { fixed: true },\n\t\t\t\t\t\t\t\t\tshow: { delay: 0 }\n\t\t\t\t\t\t\t\t}, options.tooltip.options));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 43 */\n\t\t\t/***/function (module, exports) {\n\t\n\t\t\t\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_43__;\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 44 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(3), __webpack_require__(28), __webpack_require__(45)], __WEBPACK_AMD_DEFINE_RESULT__ = function (_, BaseView, FormUtil) {\n\t\n\t\t\t\t\tfunction runCallback(callback, field) {\n\t\t\t\t\t\tcallback.apply(this, _.map(field.split(/\\s+/), function (field) {\n\t\t\t\t\t\t\treturn this.model.get(field);\n\t\t\t\t\t\t}, this));\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfunction runIf(fn, ctx) {\n\t\t\t\t\t\tif (_.isFunction(fn)) {\n\t\t\t\t\t\t\tfn.call(ctx);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/**\n\t * @class InputWrapper\n\t * @extends Okta.View\n\t * @private\n\t * The outer wrapper that warps the label and the input container\n\t */\n\t\t\t\t\treturn BaseView.extend({\n\t\n\t\t\t\t\t\tclassName: function className() {\n\t\t\t\t\t\t\tvar className = 'o-form-fieldset';\n\t\n\t\t\t\t\t\t\tif (this.options['label-top']) {\n\t\t\t\t\t\t\t\tclassName += ' o-form-label-top';\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif (this.options.readOnly) {\n\t\t\t\t\t\t\t\tclassName += ' o-form-read-mode';\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\treturn className;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tattributes: function attributes() {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t'data-se': this.options['data-se'] || 'o-form-fieldset'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @constructor\n\t * @param {Object} options options hash\n\t * @param {Object} [options.events]\n\t * @param {Object} [options.bindings]\n\t * @param {Object} [options.showWhen]\n\t * @param {Function} [options.initialize] post initialize callback\n\t * @param {Function} [options.render] post render callback\n\t */\n\t\t\t\t\t\tconstructor: function constructor(options) {\n\t\t\t\t\t\t\tif (options.className) {\n\t\t\t\t\t\t\t\tthis.inputWrapperClassName = this.className;\n\t\t\t\t\t\t\t\tthis.optionsClassName = options.className;\n\t\t\t\t\t\t\t\toptions.className = function () {\n\t\t\t\t\t\t\t\t\treturn _.result(this, 'inputWrapperClassName', '') + ' ' + _.result(this, 'optionsClassName');\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tBaseView.apply(this, arguments);\n\t\t\t\t\t\t\t_.each(options.events || {}, function (callback, event) {\n\t\t\t\t\t\t\t\tthis.listenTo(this.model, event, callback);\n\t\t\t\t\t\t\t}, this);\n\t\n\t\t\t\t\t\t\t_.each(options.bindings || {}, function (callback, field) {\n\t\t\t\t\t\t\t\tthis.listenTo(this.model, FormUtil.changeEventString(field.split(/\\s+/)), _.bind(runCallback, this, callback, field));\n\t\t\t\t\t\t\t}, this);\n\t\n\t\t\t\t\t\t\tFormUtil.applyShowWhen(this, options.showWhen);\n\t\t\t\t\t\t\tFormUtil.applyToggleWhen(this, options.toggleWhen);\n\t\n\t\t\t\t\t\t\trunIf(options.initialize, this);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tpostRender: function postRender() {\n\t\t\t\t\t\t\t_.each(this.options.bindings || {}, runCallback, this);\n\t\t\t\t\t\t\trunIf(this.options.render, this);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @return {InputLabel}\n\t */\n\t\t\t\t\t\tgetLabel: function getLabel() {\n\t\t\t\t\t\t\treturn this.size() > 1 ? this.at(0) : null;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/**\n\t * @deprecated ambiguous naming, use {@link #getInputContainer}\n\t */\n\t\t\t\t\t\tgetInput: function getInput() {\n\t\t\t\t\t\t\treturn this.getInputContainer();\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @return {InputContainer}\n\t */\n\t\t\t\t\t\tgetInputContainer: function getInputContainer() {\n\t\t\t\t\t\t\treturn this.at(this.size() > 1 ? 1 : 0);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @return {BaseInput[]}\n\t */\n\t\t\t\t\t\tgetInputs: function getInputs() {\n\t\t\t\t\t\t\treturn this.getInputContainer().toArray();\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tfocus: function focus() {\n\t\t\t\t\t\t\treturn this.getInput().focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 45 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; /* eslint max-params: [2, 6] */\n\t\t\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(3), __webpack_require__(10), __webpack_require__(28), __webpack_require__(46), __webpack_require__(17), __webpack_require__(30)], __WEBPACK_AMD_DEFINE_RESULT__ = function (_, StringUtil, BaseView, Keys, Logger, ViewUtil) {\n\t\n\t\t\t\t\tvar LABEL_OPTIONS = ['model', 'id', 'inputId', 'type', 'label', 'sublabel', 'tooltip', 'name'],\n\t\t\t\t\t CONTAINER_OPTIONS = ['wide', 'multi', 'input', 'explain', 'customExplain', 'model', 'name', 'type', 'autoRender'],\n\t\t\t\t\t WRAPPER_OPTIONS = ['model', 'name', 'label-top', 'readOnly', 'events', 'initialize', 'showWhen', 'bindings', 'render', 'className', 'data-se', 'toggleWhen'],\n\t\t\t\t\t INPUT_OPTIONS = ['model', 'name', 'inputId', 'type', // base options\n\t\t\t\t\t'input', // custom input\n\t\t\t\t\t'placeholder', 'label', // labels\n\t\t\t\t\t'readOnly', 'read', 'disabled', 'readModeString', // modes\n\t\t\t\t\t'options', // select/radio\n\t\t\t\t\t'deps', // used to specify inputs that have dependencies and show a callout to user on select\n\t\t\t\t\t'from', 'to', // model transformers,\n\t\t\t\t\t'autoRender', // model attributes change event to trigger rerendering of the input\n\t\t\t\t\t'inlineValidation', // control inline validating against the model on focus lost\n\t\t\t\t\t'validateOnlyIfDirty', // check if field has been interacted with and then validate\n\t\t\t\t\t'ariaLabel', // 508 compliance for inputs that do not have label associated with them\n\t\t\t\t\t'params'],\n\t\t\t\t\t // widgets params - for input specific widgets\n\t\n\t\t\t\t\tOTHER_OPTIONS = ['errorField'];\n\t\n\t\t\t\t\tvar ALL_OPTIONS = _.uniq(_.union(LABEL_OPTIONS, CONTAINER_OPTIONS, WRAPPER_OPTIONS, INPUT_OPTIONS, OTHER_OPTIONS));\n\t\n\t\t\t\t\tvar SAVE_BUTTON_PHASES = ['• ', '• • ', '• • • ', '• • • •', ' • • •', ' • •', ' •', ' ', ' ', ' '];\n\t\n\t\t\t\t\tfunction decorateDoWhen(doWhen) {\n\t\t\t\t\t\tif (doWhen && !doWhen['__edit__']) {\n\t\t\t\t\t\t\treturn _.extend({ '__edit__': _.constant(true) }, doWhen);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfunction _createButton(options) {\n\t\n\t\t\t\t\t\toptions = _.pick(options || {}, 'action', 'id', 'className', 'text', 'type');\n\t\n\t\t\t\t\t\tvar timeoutId, intervalId, phaseCount;\n\t\n\t\t\t\t\t\treturn BaseView.extend({\n\t\t\t\t\t\t\ttagName: 'input',\n\t\t\t\t\t\t\tclassName: 'button',\n\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t'click': function click() {\n\t\t\t\t\t\t\t\t\tif (options.action && !this.disabled()) {\n\t\t\t\t\t\t\t\t\t\toptions.action.call(this);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t'keyup': function keyup(e) {\n\t\t\t\t\t\t\t\t\tif (Keys.isEnter(e) && options.action && !this.disabled()) {\n\t\t\t\t\t\t\t\t\t\toptions.action.call(this);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t\tdisabled: function disabled() {\n\t\t\t\t\t\t\t\treturn this.$el.prop('disabled') === true;\n\t\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t\tdisable: function disable() {\n\t\t\t\t\t\t\t\tthis.$el.prop('disabled', true);\n\t\t\t\t\t\t\t\tthis.$el.addClass('btn-disabled');\n\t\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t\tenable: function enable() {\n\t\t\t\t\t\t\t\tthis.$el.prop('disabled', false);\n\t\t\t\t\t\t\t\tthis.$el.removeClass('btn-disabled');\n\t\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t\tinitialize: function initialize() {\n\t\t\t\t\t\t\t\tvar self = this;\n\t\n\t\t\t\t\t\t\t\tthis.$el.attr('type', options.type == 'save' ? 'submit' : 'button');\n\t\t\t\t\t\t\t\tthis.$el.val(options.text);\n\t\t\t\t\t\t\t\tif (options.id) {\n\t\t\t\t\t\t\t\t\tthis.$el.attr('id', options.id);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (options.className) {\n\t\t\t\t\t\t\t\t\tthis.$el.addClass(options.className);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (options.type) {\n\t\t\t\t\t\t\t\t\tthis.$el.attr('data-type', options.type);\n\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\tthis.$el.mousedown(function () {\n\t\t\t\t\t\t\t\t\tself.model.set('__pending__', true);\n\t\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t\tthis.$el.mouseup(function () {\n\t\t\t\t\t\t\t\t\tself.model.set('__pending__', false);\n\t\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t\tthis.listenTo(this.model, 'form:set-saving-state', function () {\n\t\t\t\t\t\t\t\t\tthis.disable();\n\t\t\t\t\t\t\t\t\tif (options.type == 'save') {\n\t\t\t\t\t\t\t\t\t\ttimeoutId = setTimeout(_.bind(this.__changeSaveText, this), 1000);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tthis.listenTo(this.model, 'form:clear-saving-state', function () {\n\t\t\t\t\t\t\t\t\tthis.enable();\n\t\t\t\t\t\t\t\t\tif (options.type == 'save') {\n\t\t\t\t\t\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\t\t\t\t\t\tclearInterval(intervalId);\n\t\t\t\t\t\t\t\t\t\tthis.$el.val(options.text);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t\t__changeSaveText: function __changeSaveText() {\n\t\t\t\t\t\t\t\tphaseCount = 0;\n\t\t\t\t\t\t\t\tintervalId = setInterval(_.bind(this.__showLoadingText, this), 200);\n\t\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t\t__showLoadingText: function __showLoadingText() {\n\t\t\t\t\t\t\t\tthis.$el.val(SAVE_BUTTON_PHASES[phaseCount++ % SAVE_BUTTON_PHASES.length]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfunction validateInput(options, model) {\n\t\t\t\t\t\t/* eslint max-statements: 0, complexity: 0 */\n\t\n\t\t\t\t\t\toptions || (options = {});\n\t\n\t\t\t\t\t\tif (options.type == 'label') {\n\t\t\t\t\t\t\tif (!options.label) {\n\t\t\t\t\t\t\t\tLogger.warn('A label input must have a \"label\" parameter', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (options.type == 'button') {\n\t\t\t\t\t\t\tif (!options.title && !options.icon) {\n\t\t\t\t\t\t\t\tLogger.warn('A button input must have a \"title\" and/or an \"icon\" parameter', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!options.click && !options.href) {\n\t\t\t\t\t\t\t\tLogger.warn('A button input must have a \"click\" and/or an \"href\" parameter', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (!options.name && !options.input) {\n\t\t\t\t\t\t\tLogger.warn('Missing \"name\" or \"input\" parameters', options);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (_.isArray(options.name) && _.isArray(options.input)) {\n\t\t\t\t\t\t\tthrow new Error('Not allowed to have both \"name\" and \"input\" defined as array.');\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (options.type != 'list' && options.name && model && model.allows) {\n\t\t\t\t\t\t\tvar names = [];\n\t\t\t\t\t\t\tif (_.isArray(options.name)) {\n\t\t\t\t\t\t\t\tnames = options.name;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tnames.push(options.name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t_.each(names, function (name) {\n\t\t\t\t\t\t\t\tif (!model.allows(name)) {\n\t\t\t\t\t\t\t\t\tthrow new Error('field not allowed: ' + options.name);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (_.isArray(options.input) && options.type != 'list') {\n\t\t\t\t\t\t\t_.each(options.input, function (input) {\n\t\t\t\t\t\t\t\tvalidateInput(input, model);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tvar keys = _.keys(options),\n\t\t\t\t\t\t intersection = _.intersection(keys, ALL_OPTIONS);\n\t\n\t\t\t\t\t\tif (_.size(intersection) != _.size(options)) {\n\t\t\t\t\t\t\tvar fields = _.clone(ALL_OPTIONS);\n\t\t\t\t\t\t\tfields.unshift(keys);\n\t\t\t\t\t\t\tLogger.warn('Invalid input parameters', _.without.apply(null, fields), options);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfunction generateInputOptions(options, form, createFn) {\n\t\t\t\t\t\toptions = _.clone(options);\n\t\n\t\t\t\t\t\tif (_.contains(['list', 'group'], options.type)) {\n\t\t\t\t\t\t\toptions.params = _.defaults({\n\t\t\t\t\t\t\t\tcreate: createFn,\n\t\t\t\t\t\t\t\tinputs: _.map(_.isArray(options.input) ? options.input : [options.input], function (input) {\n\t\t\t\t\t\t\t\t\treturn _.first(generateInputOptions(input, form, createFn));\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}, options.params || {});\n\t\t\t\t\t\t\tdelete options.input;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tvar inputs = _.isArray(options.input) ? _.clone(options.input) : [options];\n\t\n\t\t\t\t\t\treturn _.map(inputs, function (input) {\n\t\t\t\t\t\t\tvar target = _.defaults({ model: form.model }, input, _.omit(options, 'input', 'inputs'), form.options, {\n\t\t\t\t\t\t\t\tid: _.uniqueId('input'),\n\t\t\t\t\t\t\t\treadOnly: form.isReadOnly(),\n\t\t\t\t\t\t\t\tread: form.hasReadMode()\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (form.isReadOnly()) {\n\t\t\t\t\t\t\t\ttarget.read = target.readOnly = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn target;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\treturn {\n\t\n\t\t\t\t\t\tLABEL_OPTIONS: LABEL_OPTIONS,\n\t\t\t\t\t\tCONTAINER_OPTIONS: CONTAINER_OPTIONS,\n\t\t\t\t\t\tWRAPPER_OPTIONS: WRAPPER_OPTIONS,\n\t\t\t\t\t\tINPUT_OPTIONS: INPUT_OPTIONS,\n\t\n\t\t\t\t\t\tgenerateInputOptions: generateInputOptions,\n\t\n\t\t\t\t\t\tchangeEventString: function changeEventString(fieldNames) {\n\t\t\t\t\t\t\treturn 'change:' + fieldNames.join(' change:');\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tcreateReadFormButton: function createReadFormButton(options) {\n\t\n\t\t\t\t\t\t\tvar action, text, ariaLabel;\n\t\t\t\t\t\t\tif (options.type == 'cancel') {\n\t\t\t\t\t\t\t\ttext = ariaLabel = StringUtil.localize('oform.cancel', 'courage');\n\t\t\t\t\t\t\t\taction = function action() {\n\t\t\t\t\t\t\t\t\tthis.model.trigger('form:cancel');\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttext = StringUtil.localize('oform.edit', 'courage');\n\t\t\t\t\t\t\t\tariaLabel = text + ' ' + options.formTitle;\n\t\t\t\t\t\t\t\taction = function action() {\n\t\t\t\t\t\t\t\t\tthis.model.set('__edit__', true);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\treturn BaseView.extend({\n\t\t\t\t\t\t\t\ttagName: 'a',\n\t\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\t\thref: '#',\n\t\t\t\t\t\t\t\t\t'aria-label': ariaLabel\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttemplate: function template() {\n\t\t\t\t\t\t\t\t\treturn _.escape(text);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\t\tclick: function click(e) {\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\taction.call(this);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tcreateButton: function createButton(options) {\n\t\t\t\t\t\t\toptions = _.clone(options);\n\t\t\t\t\t\t\tswitch (options.type) {\n\t\t\t\t\t\t\t\tcase 'save':\n\t\t\t\t\t\t\t\t\t_.defaults(options, { className: 'button-primary' });\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'cancel':\n\t\t\t\t\t\t\t\t\t_.defaults(options, {\n\t\t\t\t\t\t\t\t\t\ttext: StringUtil.localize('oform.cancel', 'courage'),\n\t\t\t\t\t\t\t\t\t\taction: function action() {\n\t\t\t\t\t\t\t\t\t\t\tthis.model.trigger('form:cancel');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\t\t\t\t_.defaults(options, {\n\t\t\t\t\t\t\t\t\t\ttext: StringUtil.localize('oform.previous', 'courage'),\n\t\t\t\t\t\t\t\t\t\taction: function action() {\n\t\t\t\t\t\t\t\t\t\t\tthis.model.trigger('form:previous');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn _createButton(options);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tvalidateInput: validateInput,\n\t\n\t\t\t\t\t\t/**\n\t * Applies a show-when logic on a view instance.\n\t * The show-when is a map of a model field name -> a boolean or a function that returns a boolean.\n\t * The view will toggle based on the field value.\n\t *\n\t * @param {Okta.View} view a view instance that has a this.model attached to it\n\t * @param {Object} showWhen\n\t */\n\t\t\t\t\t\tapplyShowWhen: function applyShowWhen(view, showWhen) {\n\t\t\t\t\t\t\tvar toggleAndResize = function toggleAndResize(bool) {\n\t\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\t\t// The `toggle` is here since an event may be triggered before the el is in the DOM\n\t\t\t\t\t\t\t\t\t// and in that case slide events may not function as expected.\n\t\t\t\t\t\t\t\t\tview.$el.toggle(bool);\n\t\t\t\t\t\t\t\t\tview.model.trigger('form:resize');\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\t\tViewUtil.applyDoWhen(view, decorateDoWhen(showWhen), function (bool, options) {\n\t\t\t\t\t\t\t\tif (!options.animate) {\n\t\t\t\t\t\t\t\t\tview.$el.toggle(bool);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tview.$el['slide' + (bool ? 'Down' : 'Up')](200, toggleAndResize(bool));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tapplyToggleWhen: function applyToggleWhen(view, toggleWhen) {\n\t\t\t\t\t\t\tViewUtil.applyDoWhen(view, decorateDoWhen(toggleWhen), function (bool, options) {\n\t\t\t\t\t\t\t\tview.$el.toggle(bool);\n\t\t\t\t\t\t\t\tview.model.trigger('form:resize');\n\t\t\t\t\t\t\t\tif (options.animate) {\n\t\t\t\t\t\t\t\t\tview.render();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 46 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\t!(module.exports = {\n\t\t\t\t\tUP: 38,\n\t\t\t\t\tDOWN: 40,\n\t\t\t\t\tDEL: 46,\n\t\t\t\t\tTAB: 9,\n\t\t\t\t\tRETURN: 13,\n\t\t\t\t\tENTER: 13,\n\t\t\t\t\tESC: 27,\n\t\t\t\t\tCOMMA: 188,\n\t\t\t\t\tPAGEUP: 33,\n\t\t\t\t\tPAGEDOWN: 34,\n\t\t\t\t\tSPACE: 32,\n\t\t\t\t\tBACKSPACE: 8,\n\t\t\t\t\t__isKey: function __isKey(e, key) {\n\t\t\t\t\t\treturn (e.which || e.keyCode) == this[key];\n\t\t\t\t\t},\n\t\t\t\t\tisEnter: function isEnter(e) {\n\t\t\t\t\t\treturn this.__isKey(e, 'ENTER');\n\t\t\t\t\t},\n\t\t\t\t\tisEsc: function isEsc(e) {\n\t\t\t\t\t\treturn this.__isKey(e, 'ESC');\n\t\t\t\t\t},\n\t\t\t\t\tisSpaceBar: function isSpaceBar(e) {\n\t\t\t\t\t\treturn this.__isKey(e, 'SPACE');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 47 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(28)], __WEBPACK_AMD_DEFINE_RESULT__ = function (BaseView) {\n\t\n\t\t\t\t\tvar template = '\\\n\t\t{{errorSummary}}
\\\n\t\t {{else}}\\\n\t\t{{i18n code=\"oform.errorbanner.title\" bundle=\"courage\"}}
\\\n\t\t {{/if}}\\\n\t\t{{subtitle}}
\\\n\t\t {{/if}}\\\n\t\t \\\n\t\t ');\n\t\n\t\t\t\t\tvar DropDownOption = BaseView.extend({\n\t\t\t\t\t\ttagName: 'li',\n\t\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\tclick: function click(e) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tthis.action && this.action.call(this);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tconstructor: function constructor() {\n\t\t\t\t\t\t\tBaseView.apply(this, arguments);\n\t\t\t\t\t\t\tthis.$el.addClass('okta-dropdown-option option');\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\trender: function render() {\n\t\t\t\t\t\t\tthis.$el.html(optionsTemplate({\n\t\t\t\t\t\t\t\ticon: _.result(this, 'icon'),\n\t\t\t\t\t\t\t\tclassName: _.result(this, 'className') || '',\n\t\t\t\t\t\t\t\ttitle: _.result(this, 'title'),\n\t\t\t\t\t\t\t\tsubtitle: _.result(this, 'subtitle'),\n\t\t\t\t\t\t\t\tseleniumId: _.result(this, 'seleniumId')\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\treturn this;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\n\t\t\t\t\treturn BaseView.extend({\n\t\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t'click a.option-selected': function clickAOptionSelected(e) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tif (_.result(this, 'disabled')) {\n\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t'click .dropdown-disabled': function clickDropdownDisabled(e) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\titems: [],\n\t\n\t\t\t\t\t\tconstructor: function constructor() {\n\t\n\t\t\t\t\t\t\t// In this very specific case we want to NOT append className to $el\n\t\t\t\t\t\t\t// but to the tag in the template\n\t\t\t\t\t\t\t// so we want to disable backbone default functionality.\n\t\t\t\t\t\t\tvar className = this.className;\n\t\t\t\t\t\t\tthis.className = null;\n\t\n\t\t\t\t\t\t\tBaseView.apply(this, arguments);\n\t\n\t\t\t\t\t\t\tthis.className = className;\n\t\n\t\t\t\t\t\t\tthis.$el.addClass('dropdown more-actions float-l');\n\t\n\t\t\t\t\t\t\t_.each(_.result(this, 'items'), function (option) {\n\t\t\t\t\t\t\t\tthis.addOption(option, this.options);\n\t\t\t\t\t\t\t}, this);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\ttemplate: '\\\n\t\t \\\n\t\t {{#if icon}}\\\n\t\t \\\n\t\t {{/if}}\\\n\t\t {{title}}\\\n\t\t \\\n\t\t \\\n\t\t \\\n\t\t ',\n\t\n\t\t\t\t\t\tgetTemplateData: function getTemplateData() {\n\t\t\t\t\t\t\tvar className = [_.result(this, 'className') || '', _.result(this, 'disabled') ? 'dropdown-disabled' : ''];\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ticon: _.result(this, 'icon'),\n\t\t\t\t\t\t\t\tclassName: $.trim(className.join(' ')),\n\t\t\t\t\t\t\t\ttitle: _.result(this, 'title')\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\taddOption: function addOption(proto, options) {\n\t\t\t\t\t\t\tthis.add(DropDownOption.extend(proto), 'ul.options-wrap', { options: options || {} });\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t});\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 60 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; /* eslint max-statements: 0, max-params: 0 */\n\t\t\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(3), __webpack_require__(10), __webpack_require__(61), __webpack_require__(67), __webpack_require__(23)], __WEBPACK_AMD_DEFINE_RESULT__ = function (_, StringUtil, BooleanSelect, TextBoxSet, EnumTypeHelper) {\n\t\t\t\t\t// Maps each __displayType__ to a basic set of inputOptions.\n\t\t\t\t\tfunction defaultOptions(property) {\n\t\t\t\t\t\t/* eslint complexity: [2, 22] */\n\t\t\t\t\t\tvar type = property.get('__displayType__'),\n\t\t\t\t\t\t values = property.get('__possibleValues__'),\n\t\t\t\t\t\t name = property.get('name'),\n\t\t\t\t\t\t title = property.get('title');\n\t\t\t\t\t\tvar inputOptions = {\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\tname: name,\n\t\t\t\t\t\t\tlabel: title || name\n\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\t// @see customOptions for enum complex \"object\" type,\n\t\t\t\t\t\t// a.k.a \"object\" or \"arrayofobject\" type has enum values defined.\n\t\t\t\t\t\t// Other cases (e.g., nested object type) are not support yet.\n\t\n\t\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\t\tcase 'arrayofstring':\n\t\t\t\t\t\t\t\tinputOptions.input = TextBoxSet;\n\t\t\t\t\t\t\t\tinputOptions.params = { itemType: 'string' };\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'arrayofnumber':\n\t\t\t\t\t\t\t\tinputOptions.input = TextBoxSet;\n\t\t\t\t\t\t\t\tinputOptions.params = { itemType: 'number' };\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'arrayofinteger':\n\t\t\t\t\t\t\t\tinputOptions.input = TextBoxSet;\n\t\t\t\t\t\t\t\tinputOptions.params = { itemType: 'integer' };\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'arrayofobject':\n\t\t\t\t\t\t\t\tinputOptions.input = TextBoxSet;\n\t\t\t\t\t\t\t\tinputOptions.params = { itemType: property.get('items').type };\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'arrayofref-id':\n\t\t\t\t\t\t\t\tinputOptions.input = TextBoxSet;\n\t\t\t\t\t\t\t\tinputOptions.params = { itemType: property.get('items').format };\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'boolean':\n\t\t\t\t\t\t\t\tinputOptions.input = BooleanSelect;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'integer':\n\t\t\t\t\t\t\tcase 'number':\n\t\t\t\t\t\t\t\tinputOptions.to = convertStringToNumber;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'reference':\n\t\t\t\t\t\t\t\tinputOptions.type = 'select';\n\t\t\t\t\t\t\t\tinputOptions.options = getChoices(values);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'image':\n\t\t\t\t\t\t\t\tinputOptions.readOnly = true;\n\t\t\t\t\t\t\t\tinputOptions.from = function (value) {\n\t\t\t\t\t\t\t\t\treturn _.isEmpty(value) ? '' : StringUtil.localize('user.profile.image.image_set', 'courage'); //TODO\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'password':\n\t\t\t\t\t\t\t\tinputOptions.type = 'password';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'date':\n\t\t\t\t\t\t\t\tinputOptions.type = 'date';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'uri':\n\t\t\t\t\t\t\tcase 'country-code':\n\t\t\t\t\t\t\tcase 'language-code':\n\t\t\t\t\t\t\tcase 'email':\n\t\t\t\t\t\t\tcase 'locale':\n\t\t\t\t\t\t\tcase 'timezone':\n\t\t\t\t\t\t\tcase 'string':\n\t\t\t\t\t\t\tcase 'object':\n\t\t\t\t\t\t\t\t//default input options\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tthrow new Error('unknown type: ' + type);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn inputOptions;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Sets nonbasic inputOptions, such as an array with possible values\n\t\t\t\t\tfunction customOptions(property) {\n\t\t\t\t\t\tvar inputOptions = {},\n\t\t\t\t\t\t name = property.get('name'),\n\t\t\t\t\t\t type = property.get('__displayType__'),\n\t\t\t\t\t\t values = property.get('__possibleValues__'),\n\t\t\t\t\t\t prefix = property.get('__fieldNamePrefix__');\n\t\n\t\t\t\t\t\tif (prefix) {\n\t\t\t\t\t\t\tinputOptions.name = prefix + name;\n\t\t\t\t\t\t\tinputOptions.errorField = name;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (property.isEnumType()) {\n\t\t\t\t\t\t\tvar configs = {\n\t\t\t\t\t\t\t\tdisplayType: type,\n\t\t\t\t\t\t\t\ttitle: property.get('title'),\n\t\t\t\t\t\t\t\tenumValues: property.getEnumValues()\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tinputOptions = _.extend({}, EnumTypeHelper.getEnumInputOptions(configs), inputOptions);\n\t\t\t\t\t\t} else if (isArray(type) && values) {\n\t\t\t\t\t\t\tinputOptions.type = 'checkboxset';\n\t\t\t\t\t\t\tinputOptions.input = null;\n\t\t\t\t\t\t\tinputOptions.options = getChoices(values);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\treturn inputOptions;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfunction convertStringToNumber(string) {\n\t\t\t\t\t\tvar number = StringUtil.parseFloat(string);\n\t\t\t\t\t\treturn string === '' ? null : number;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfunction isArray(type) {\n\t\t\t\t\t\treturn type && type.indexOf('array') >= 0;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// converts possibleValues to choices\n\t\t\t\t\t// [a, b, c] => {a: a, b: b, c: c}\n\t\t\t\t\tfunction getChoices(values) {\n\t\t\t\t\t\treturn _.object(values, values);\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// A schema property may have an objectName either\n\t\t\t\t\t// at the root level or nested in the items object\n\t\t\t\t\tfunction getObjectName(schemaProp) {\n\t\t\t\t\t\tvar items = schemaProp.get('items');\n\t\t\t\t\t\tif (items) {\n\t\t\t\t\t\t\treturn items.objectName;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn schemaProp.get('objectName');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfunction augmentSchemaProp(schemaProp, possibleValues, profile) {\n\t\t\t\t\t\tvar name = schemaProp.get('name'),\n\t\t\t\t\t\t prefix = profile['__nestedProperty__'],\n\t\t\t\t\t\t defaultValues = possibleValues[name],\n\t\t\t\t\t\t userValues = profile.get(name),\n\t\t\t\t\t\t //TODO: Not implemented\n\t\t\t\t\t\tfixedValues,\n\t\t\t\t\t\t values;\n\t\n\t\t\t\t\t\t// If API responds with a field name that differs from the form-field name\n\t\t\t\t\t\t// example: Model's 'profile.username' vs. server's 'username'\n\t\t\t\t\t\tif (prefix) {\n\t\t\t\t\t\t\tschemaProp.set('__fieldNamePrefix__', prefix);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// case 1: objectName - fixed list of values are set for the input\n\t\t\t\t\t\tfixedValues = possibleValues[getObjectName(schemaProp)];\n\t\n\t\t\t\t\t\t// case 2: name only - default list of values are provided, user can add more\n\t\t\t\t\t\t// TODO: this case does not yet exist, so it is not tested\n\t\t\t\t\t\tif (defaultValues && userValues) {\n\t\t\t\t\t\t\tdefaultValues = _.union(defaultValues, userValues);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// If both fixed and default values exist,\n\t\t\t\t\t\t// take the fixed values unless they are empty\n\t\t\t\t\t\tif (fixedValues && fixedValues.length) {\n\t\t\t\t\t\t\tvalues = fixedValues;\n\t\t\t\t\t\t} else if (defaultValues && defaultValues.length) {\n\t\t\t\t\t\t\tvalues = defaultValues;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tschemaProp.set('__possibleValues__', values);\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfunction augmentSchemaProps(schemaProps, possibleValues, profile) {\n\t\t\t\t\t\tschemaProps.each(function (schemaProp) {\n\t\t\t\t\t\t\taugmentSchemaProp(schemaProp, possibleValues, profile);\n\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\treturn schemaProps;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/**\n\t * Remove invalid schema properties from a collection\n\t *\n\t * @param {SchemaProperties Collection} [properties] A collection of schema properties\n\t * @param {Object} [values] An object of the form { key: [value1, value2]}\n\t * @return {Array} An array of valid schema models, this can be used to reset\n\t * a schema properties collection for example.\n\t * @private\n\t */\n\t\t\t\t\tfunction cleanSchema(properties, values) {\n\t\t\t\t\t\treturn properties.filter(function (schema) {\n\t\t\t\t\t\t\treturn isValidSchemaProp(schema, values);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/**\n\t * Checks the validity of a schema property.\n\t *\n\t * @param {SchemaProperty} [schemaProp] A schema property backbone model\n\t * @param {Object} [values] An object of the form { key: [value1, value2]}\n\t * @return {Boolean} true/false\n\t * @private\n\t */\n\t\t\t\t\tfunction isValidSchemaProp(schemaProp, values) {\n\t\t\t\t\t\tvar objectName = getObjectName(schemaProp),\n\t\t\t\t\t\t results = values[objectName];\n\t\n\t\t\t\t\t\t// a schema property that references an empty list of values\n\t\t\t\t\t\t// Im looking at you, google apps.\n\t\t\t\t\t\tif (objectName && _(results).isEmpty()) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\n\t\t\t\t\treturn {\n\t\n\t\t\t\t\t\t/**\n\t * Creates the options hash for BaseForm.addInput from a prepared schema\n\t * property.\n\t *\n\t * @param {Okta.Model} [preparedSchemaProp] A schema property backbone model\n\t * that has been standardized by the prepareSchema method.\n\t * @return {Object} An object containing all of the options needed by\n\t * BaseForm's addInput()\n\t */\n\t\t\t\t\t\tcreateInputOptions: function createInputOptions(preparedSchemaProp) {\n\t\t\t\t\t\t\tvar custom = customOptions(preparedSchemaProp),\n\t\t\t\t\t\t\t standard = defaultOptions(preparedSchemaProp);\n\t\n\t\t\t\t\t\t\t// underscore did not support nested extend\n\t\t\t\t\t\t\t// https://github.com/jashkenas/underscore/issues/162\n\t\t\t\t\t\t\tif (custom.params && standard.params) {\n\t\t\t\t\t\t\t\tcustom.params = _.defaults(custom.params, standard.params);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn _.defaults(custom, standard);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\thasValidSchemaProps: function hasValidSchemaProps(schemaProps, possibleValues) {\n\t\t\t\t\t\t\tif (_.isEmpty(schemaProps)) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvar validSchema = cleanSchema(schemaProps, possibleValues);\n\t\t\t\t\t\t\t\treturn !!validSchema.length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * This method is responsible for preparing a collection for the form\n\t * factory to use by putting all of the information to create an input\n\t * into the schema property and removing invalid properties.\n\t * The typical UD form takes 3 models:\n\t * The data model has the input values.\n\t * The schema model describes which input to use, such as a textbox or a checkbox.\n\t * The possible values model provide a list of default options to display, for example in a drop down menu.\n\t *\n\t * @param {SchemaProperty Collection} [schemaProps] A schema property backbone model.\n\t * @param {Object} [possibleValues] An object of the form { key: [value1, value2]}\n\t * @param {Okta.Model} [profile] A backbone model containing the property described by the schema property.\n\t * @return {SchemaProperty Collection} A schema property collection with standardized models.\n\t * The standard schema model adds a couple of additional private properties to\n\t * allow the form factory to reference lookup values or name prefixes without going to a second model.\n\t */\n\t\t\t\t\t\tprepareSchema: function prepareSchema(schemaProps, possibleValues, profile) {\n\t\t\t\t\t\t\tschemaProps.reset(cleanSchema(schemaProps, possibleValues));\n\t\t\t\t\t\t\treturn augmentSchemaProps(schemaProps, possibleValues, profile);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * `prepareSchema` will reset the property list which may not be necessary at some case.\n\t * like when setting default value for schema properties.\n\t * (more detail about such case @see wiki UX, App+Entitlements+for+Provisioning)\n\t *\n\t * @param { }\n\t * @return {String}\n\t */\n\t\n\t\t\t\t\t\taugmentSchemaProps: augmentSchemaProps,\n\t\n\t\t\t\t\t\taugmentSchemaProp: augmentSchemaProp\n\t\t\t\t\t};\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 61 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(62)], __WEBPACK_AMD_DEFINE_RESULT__ = function (Select) {\n\t\n\t\t\t\t\tvar options = {\n\t\t\t\t\t\t'undefined': 'undefined',\n\t\t\t\t\t\t'true': 'true',\n\t\t\t\t\t\t'false': 'false'\n\t\t\t\t\t};\n\t\n\t\t\t\t\tvar from = function from(val) {\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\treturn 'true';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (val === false) {\n\t\t\t\t\t\t\treturn 'false';\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn 'undefined';\n\t\t\t\t\t};\n\t\n\t\t\t\t\tvar to = function to(val) {\n\t\t\t\t\t\tswitch (val) {\n\t\t\t\t\t\t\tcase 'undefined':\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\tcase 'true':\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tcase 'false':\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\n\t\t\t\t\treturn Select.extend({\n\t\n\t\t\t\t\t\tinitialize: function initialize() {\n\t\t\t\t\t\t\tthis.options.options = options;\n\t\t\t\t\t\t\tthis.options.from = from;\n\t\t\t\t\t\t\tthis.options.to = to;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t});\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 62 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(8), __webpack_require__(3), __webpack_require__(46), __webpack_require__(25), __webpack_require__(63), __webpack_require__(66)], __WEBPACK_AMD_DEFINE_RESULT__ = function ($, _, Keys, TemplateUtil, BaseInput) {\n\t\n\t\t\t\t\tvar template = TemplateUtil.tpl('');\n\t\t\t\t\tvar option = TemplateUtil.tpl('');\n\t\n\t\t\t\t\t// Chosen has known problems when it's at the bottom of a container that has\n\t\t\t\t\t// overflow:hidden set. Because it attaches to the parent container, its\n\t\t\t\t\t// dropdown will be cut off in the UI. Any modal with a chosen select element\n\t\t\t\t\t// at the bottom will manifest this behavior.\n\t\t\t\t\t//\n\t\t\t\t\t// The fix (aside from replacing Chosen) is to change Chosen's behavior -\n\t\t\t\t\t// use the existing styles, but attach it to 'body' and position it correctly\n\t\t\t\t\t// so that it is not affected by a parent overflow.\n\t\t\t\t\t//\n\t\t\t\t\t// More details can be found in OKTA-46489, OKTA-83570\n\t\t\t\t\tvar CHOSEN_WINDOW_MARGIN = 20;\n\t\t\t\t\tvar CHOSEN_MAX_HEIGHT = 240;\n\t\t\t\t\tvar CHOSEN_Z_INDEX = 50000;\n\t\n\t\t\t\t\tfunction defer(fn) {\n\t\t\t\t\t\tif (this.params.autoWidth) {\n\t\t\t\t\t\t\treturn fn.call(this);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn _.defer(_.bind(fn, this));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfunction findSelectWidth(self) {\n\t\t\t\t\t\tself.$select.hide();\n\t\t\t\t\t\tvar select = $(self.$select[0]).hide();\n\t\t\t\t\t\t$('body').append(select);\n\t\t\t\t\t\tvar width = self.params.width = select.width() * 1.2 + 'px';\n\t\t\t\t\t\tself.$el.append(select.show());\n\t\t\t\t\t\treturn width;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfunction recalculateChosen($chosen, $results, $clone) {\n\t\t\t\t\t\tvar offset = $clone.offset();\n\t\t\t\t\t\t$chosen.css({\n\t\t\t\t\t\t\tleft: offset.left,\n\t\t\t\t\t\t\ttop: offset.top\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// Update the max-height to fit within the constraints of the window. This\n\t\t\t\t\t\t// is especially important for modals because page scrolling is disabled.\n\t\t\t\t\t\tvar $win = $(window),\n\t\t\t\t\t\t rHeight = $results.outerHeight(),\n\t\t\t\t\t\t rBottom = rHeight + $results.offset().top - $win.scrollTop(),\n\t\t\t\t\t\t wHeight = $win.height() - CHOSEN_WINDOW_MARGIN,\n\t\t\t\t\t\t maxHeight = Math.min(rHeight + wHeight - rBottom, CHOSEN_MAX_HEIGHT);\n\t\t\t\t\t\t$results.css('max-height', maxHeight);\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfunction fixChosenModal($select) {\n\t\t\t\t\t\tvar $chosen = $select.next('.chzn-container'),\n\t\t\t\t\t\t $clone = $chosen.clone(),\n\t\t\t\t\t\t $results = $chosen.find('.chzn-results');\n\t\n\t\t\t\t\t\t// Use a hidden clone to maintain layout and calculate offset. This is\n\t\t\t\t\t\t// necessary for more complex layouts (like adding a group rule) where\n\t\t\t\t\t\t// the chosen element is floated.\n\t\t\t\t\t\t$clone.css('visibility', 'hidden');\n\t\t\t\t\t\t$clone.removeAttr('id');\n\t\t\t\t\t\t$clone.find('li').removeAttr('id');\n\t\n\t\t\t\t\t\t// Save the original styles - we'll revert to them when the select closes\n\t\t\t\t\t\tvar baseStyles = {\n\t\t\t\t\t\t\t'left': $chosen.css('left'),\n\t\t\t\t\t\t\t'top': $chosen.css('top'),\n\t\t\t\t\t\t\t'position': $chosen.css('position'),\n\t\t\t\t\t\t\t'float': $chosen.css('float'),\n\t\t\t\t\t\t\t'z-index': $chosen.css('z-index')\n\t\t\t\t\t\t};\n\t\t\t\t\t\t$results.hide();\n\t\n\t\t\t\t\t\t// Handler for any resize events that happen when the results list is open\n\t\t\t\t\t\tvar resizeHandler = _.debounce(function () {\n\t\t\t\t\t\t\trecalculateChosen($chosen, $results, $clone);\n\t\t\t\t\t\t}, 10);\n\t\n\t\t\t\t\t\t// When the dropdown opens, attach it to body, with the correct absolute\n\t\t\t\t\t\t// position coordinates\n\t\t\t\t\t\t$select.off('.fixChosen'); // Remove events we could have added before\n\t\t\t\t\t\t$select.on('liszt:showing_dropdown.fixChosen', function () {\n\t\t\t\t\t\t\t$chosen.width($chosen.width());\n\t\t\t\t\t\t\t$select.after($clone);\n\t\t\t\t\t\t\t// .chzn-container can trigger the vertical scrollbar if it causes scrollHeight > window height after append to\n\t\t\t\t\t\t\t// the body. Force top -999999 to avoid the scrollbar so $chosen can find the right offset for relocation.\n\t\t\t\t\t\t\t$chosen.css({\n\t\t\t\t\t\t\t\t'position': 'absolute',\n\t\t\t\t\t\t\t\t'float': 'none',\n\t\t\t\t\t\t\t\t'z-index': CHOSEN_Z_INDEX,\n\t\t\t\t\t\t\t\t'top': -999999\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t$('body').append($chosen);\n\t\t\t\t\t\t\t$results.show();\n\t\t\t\t\t\t\trecalculateChosen($chosen, $results, $clone);\n\t\t\t\t\t\t\t// Capture scroll events:\n\t\t\t\t\t\t\t// - for forms that use fixed positioning (like editing attributes in\n\t\t\t\t\t\t\t// Profile Editor) - window scroll\n\t\t\t\t\t\t\t// - for forms that are too long for the modal - o-form-content scroll\n\t\t\t\t\t\t\t$select.parents().scroll(resizeHandler);\n\t\t\t\t\t\t\t$(window).on('resize scroll', resizeHandler);\n\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t// When the dropdown closes or the element is removed, revert to the\n\t\t\t\t\t\t// original styles and reattach it to its original placement in the dom.\n\t\t\t\t\t\t$select.on('liszt:hiding_dropdown.fixChosen remove.fixChosen', function () {\n\t\t\t\t\t\t\t$select.parents().off('scroll', resizeHandler);\n\t\t\t\t\t\t\t$(window).off('resize scroll', resizeHandler);\n\t\t\t\t\t\t\t$chosen.css(baseStyles);\n\t\t\t\t\t\t\t$results.hide();\n\t\t\t\t\t\t\t$results.css('max-height', CHOSEN_MAX_HEIGHT);\n\t\t\t\t\t\t\t$clone.remove();\n\t\t\t\t\t\t\t$select.after($chosen);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\treturn BaseInput.extend({\n\t\n\t\t\t\t\t\tclassName: 'o-form-select',\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t'change select': 'update',\n\t\t\t\t\t\t\t'keyup .chzn-search > :text': function keyupChznSearchText(e) {\n\t\t\t\t\t\t\t\tif (Keys.isEsc(e)) {\n\t\t\t\t\t\t\t\t\tthis.$('.chzn-search > :text').val('');\n\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tconstructor: function constructor() {\n\t\t\t\t\t\t\tthis.template = template;\n\t\t\t\t\t\t\tthis.option = option;\n\t\t\t\t\t\t\tBaseInput.apply(this, arguments);\n\t\t\t\t\t\t\tthis.params = this.options.params || {};\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\teditMode: function editMode() {\n\t\t\t\t\t\t\t/* eslint max-statements: [2, 13] */\n\t\n\t\t\t\t\t\t\tthis.$el.html(template(this.options));\n\t\t\t\t\t\t\tthis.$select = this.$('select');\n\t\n\t\t\t\t\t\t\tvar options = this.getOptions();\n\t\t\t\t\t\t\t_.each(options, function (value, key) {\n\t\t\t\t\t\t\t\tthis.$select.append(option({ key: key, value: value }));\n\t\t\t\t\t\t\t}, this);\n\t\n\t\t\t\t\t\t\t// Fix a regression in jQuery 1.x on Firefox\n\t\t\t\t\t\t\t// jQuery.val(value) prepends an empty option to the dropdown\n\t\t\t\t\t\t\t// if value doesnt exist in the dropdown.\n\t\t\t\t\t\t\t// http://bugs.jquery.com/ticket/13514\n\t\t\t\t\t\t\tvar value = this.getModelValue();\n\t\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t\tthis.$select.val(value);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.$('option:first-child').prop('selected', true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.$el.addClass('o-form-control');\n\t\n\t\t\t\t\t\t\tif (this.params.chosen !== false) {\n\t\t\t\t\t\t\t\tthis.__applyChosen();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn this;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t__applyChosen: function __applyChosen(update) {\n\t\t\t\t\t\t\tvar width = this.options.wide ? '100%' : this.params.width || '62%';\n\t\t\t\t\t\t\tif (this.params.autoWidth) {\n\t\t\t\t\t\t\t\twidth = findSelectWidth(this);\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tdefer.call(this, function () {\n\t\t\t\t\t\t\t\tvar searchThreshold = this.getParam('searchThreshold', 10);\n\t\t\t\t\t\t\t\tif (!_.result(this.options, 'autoRender') && update !== false) {\n\t\t\t\t\t\t\t\t\tthis.update();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.$select.chosen({\n\t\t\t\t\t\t\t\t\t'width': width,\n\t\t\t\t\t\t\t\t\t'disable_search_threshold': searchThreshold,\n\t\t\t\t\t\t\t\t\t'placeholder_text': this.options['placeholder']\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tfixChosenModal(this.$select);\n\t\n\t\t\t\t\t\t\t\tif (this.params.autoWidth) {\n\t\t\t\t\t\t\t\t\t// fix a chosen css bug\n\t\t\t\t\t\t\t\t\tthis.$el.width(0);\n\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\tthis.model.trigger('form:resize');\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\tval: function val() {\n\t\t\t\t\t\t\treturn this.$select && this.$select.val();\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\tfocus: function focus() {\n\t\t\t\t\t\t\tif (this.$select) {\n\t\t\t\t\t\t\t\treturn this.$select.focus();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\ttoStringValue: function toStringValue() {\n\t\t\t\t\t\t\tvar selectedOption = this.getModelValue(),\n\t\t\t\t\t\t\t displayString = selectedOption,\n\t\t\t\t\t\t\t options = this.getOptions();\n\t\t\t\t\t\t\tif (!_.isEmpty(options)) {\n\t\t\t\t\t\t\t\tdisplayString = options[selectedOption];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (_.isUndefined(displayString)) {\n\t\t\t\t\t\t\t\tdisplayString = this.defaultValue();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn displayString || '';\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Convert options to an object\n\t * support input options that is a\n\t * 1. a static object such as {key1: val1, key2: val2...}\n\t * 2. a function to be called to return a static object\n\t * will return an object with key-value pairs or with empty content\n\t * @return {Object} The value\n\t */\n\t\t\t\t\t\tgetOptions: function getOptions() {\n\t\t\t\t\t\t\tvar options = this.options.options;\n\t\n\t\t\t\t\t\t\tif (_.isFunction(options)) {\n\t\t\t\t\t\t\t\toptions = options.call(this);\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\treturn _.isObject(options) ? options : {};\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tremove: function remove() {\n\t\t\t\t\t\t\tif (this.$select) {\n\t\t\t\t\t\t\t\tthis.$select.trigger('remove');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn BaseInput.prototype.remove.apply(this, arguments);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t});\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 63 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; /* eslint-env es6 */\n\t\t\t\t/* eslint max-statements: [2, 17], max-len: [2, 160], max-params: [2, 6] */\n\t\t\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(3), __webpack_require__(8), __webpack_require__(28), __webpack_require__(64), __webpack_require__(26), __webpack_require__(10)], __WEBPACK_AMD_DEFINE_RESULT__ = function (_, $, BaseView, Callout, ButtonFactory, StringUtil) {\n\t\n\t\t\t\t\t/**\n\t * @class BaseInput\n\t * @private\n\t * An abstract object that defines an input for {@link Okta.Form}\n\t *\n\t * BaseInputs are typically not created directly, but being passed to {@link Okta.Form#addInput}\n\t * @extends Okta.View\n\t */\n\t\n\t\t\t\t\treturn BaseView.extend({\n\t\n\t\t\t\t\t\ttagName: 'span',\n\t\n\t\t\t\t\t\tattributes: function attributes() {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t'data-se': 'o-form-input-' + this.getNameString()\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * default placeholder text when options.placeholder is not defined\n\t */\n\t\t\t\t\t\tdefaultPlaceholder: '',\n\t\n\t\t\t\t\t\tconstructor: function constructor(options) {\n\t\t\t\t\t\t\t/* eslint complexity: [2, 7] */\n\t\t\t\t\t\t\toptions = _.defaults(options || {}, {\n\t\t\t\t\t\t\t\tinputId: options.id || _.uniqueId('input'),\n\t\t\t\t\t\t\t\tplaceholder: this.defaultPlaceholder,\n\t\t\t\t\t\t\t\tinlineValidation: true,\n\t\t\t\t\t\t\t\tvalidateOnlyIfDirty: false\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\tdelete options.id;\n\t\n\t\t\t\t\t\t\t// decorate the `enable` and `disable` and toggle the `o-form-disabled` class.\n\t\t\t\t\t\t\t// so we wont need to worry about this when overriding the methods\n\t\t\t\t\t\t\tvar self = this;\n\t\t\t\t\t\t\t_.each({ enable: 'removeClass', disable: 'addClass' }, function (method, action) {\n\t\t\t\t\t\t\t\tself[action] = _.wrap(self[action], function (fn) {\n\t\t\t\t\t\t\t\t\tfn.apply(self, arguments);\n\t\t\t\t\t\t\t\t\tself.$el[method]('o-form-disabled');\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\tBaseView.call(this, options);\n\t\n\t\t\t\t\t\t\tif (_.result(options, 'readOnly') !== true && _.result(options, 'read') === true) {\n\t\t\t\t\t\t\t\tthis.listenTo(this.model, 'change:__edit__', this.render);\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif (_.isFunction(this.focus)) {\n\t\t\t\t\t\t\t\tthis.focus = _.debounce(_.bind(this.focus, this), 50);\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// Enable inline validation if this is not the first field in the form.\n\t\t\t\t\t\t\tif (!_.result(options, 'validateOnlyIfDirty')) {\n\t\t\t\t\t\t\t\tthis.addInlineValidation();\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tthis.addModelListeners();\n\t\t\t\t\t\t\tthis.$el.addClass('o-form-input-name-' + this.getNameString());\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\taddAriaLabel: function addAriaLabel() {\n\t\t\t\t\t\t\tvar ariaLabel = this.options.ariaLabel;\n\t\t\t\t\t\t\tif (ariaLabel) {\n\t\t\t\t\t\t\t\tthis.$(':input').attr('aria-label', ariaLabel);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\taddInlineValidation: function addInlineValidation() {\n\t\t\t\t\t\t\tif (_.result(this.options, 'inlineValidation')) {\n\t\t\t\t\t\t\t\tthis.$el.on('focusout', ':input', _.bind(this.validate, this));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\ttoModelValue: function toModelValue() {\n\t\t\t\t\t\t\tvar value = this.val();\n\t\t\t\t\t\t\tif (_.isFunction(this.to)) {\n\t\t\t\t\t\t\t\tvalue = this.to.call(this, value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (_.isFunction(this.options.to)) {\n\t\t\t\t\t\t\t\tvalue = this.options.to.call(this, value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t__getDependencyCalloutBtn: function __getDependencyCalloutBtn(btnConfig) {\n\t\t\t\t\t\t\tvar self = this;\n\t\t\t\t\t\t\tvar btnOptions = _.clone(btnConfig);\n\t\t\t\t\t\t\t// add onfocus listener to re-evaluate depedency when callout button is clicked\n\t\t\t\t\t\t\tvar originalClick = btnOptions.click || function () {};\n\t\t\t\t\t\t\tbtnOptions.click = function () {\n\t\t\t\t\t\t\t\t$(window).one('focus.dependency', function () {\n\t\t\t\t\t\t\t\t\tself.__showInputDependencies();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\toriginalClick.call(self);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tvar CalloutBtn = BaseView.extend({\n\t\t\t\t\t\t\t\tchildren: [ButtonFactory.create(btnOptions)]\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn new CalloutBtn();\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tgetCalloutParent: function getCalloutParent() {\n\t\t\t\t\t\t\treturn this.$('input[value=\"' + this.getModelValue() + '\"]').parent();\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t__getCalloutMsgContainer: function __getCalloutMsgContainer(calloutMsg) {\n\t\t\t\t\t\t\treturn BaseView.extend({\n\t\t\t\t\t\t\t\ttemplate: '\\\n\t\t \\\n\t\t {{msg}}\\\n\t\t \\\n\t\t ',\n\t\t\t\t\t\t\t\tgetTemplateData: function getTemplateData() {\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tmsg: calloutMsg\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tshowCallout: function showCallout(calloutConfig, dependencyResolved) {\n\t\t\t\t\t\t\tvar callout = _.clone(calloutConfig);\n\t\t\t\t\t\t\tcallout.className = 'dependency-callout';\n\t\t\t\t\t\t\tif (callout.btn) {\n\t\t\t\t\t\t\t\tcallout.content = this.__getDependencyCalloutBtn(callout.btn);\n\t\t\t\t\t\t\t\tdelete callout.btn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar dependencyCallout = Callout.create(callout);\n\t\t\t\t\t\t\tif (!dependencyResolved) {\n\t\t\t\t\t\t\t\tdependencyCallout.add(this.__getCalloutMsgContainer(StringUtil.localize('dependency.callout.msg', 'courage')));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar calloutParent = this.getCalloutParent();\n\t\t\t\t\t\t\tcalloutParent.append(dependencyCallout.render().el);\n\t\t\t\t\t\t\tif (callout.type == 'success') {\n\t\t\t\t\t\t\t\t_.delay(function () {\n\t\t\t\t\t\t\t\t\t// fade out success callout\n\t\t\t\t\t\t\t\t\tdependencyCallout.$el.fadeOut(800);\n\t\t\t\t\t\t\t\t}, 1000);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tremoveCallout: function removeCallout() {\n\t\t\t\t\t\t\tthis.$el.find('.dependency-callout').remove();\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t__evaluateCalloutObject: function __evaluateCalloutObject(dependencyResolved, calloutTitle) {\n\t\t\t\t\t\t\tvar defaultCallout;\n\t\t\t\t\t\t\tif (dependencyResolved) {\n\t\t\t\t\t\t\t\tdefaultCallout = {\n\t\t\t\t\t\t\t\t\ttitle: StringUtil.localize('dependency.action.completed', 'courage'),\n\t\t\t\t\t\t\t\t\tsize: 'large',\n\t\t\t\t\t\t\t\t\ttype: 'success'\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefaultCallout = {\n\t\t\t\t\t\t\t\t\ttitle: StringUtil.localize('dependency.action.required', 'courage', [calloutTitle]),\n\t\t\t\t\t\t\t\t\tsize: 'large',\n\t\t\t\t\t\t\t\t\ttype: 'warning'\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn defaultCallout;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t__handleDependency: function __handleDependency(result, callout) {\n\t\t\t\t\t\t\tvar self = this;\n\t\t\t\t\t\t\tvar calloutConfig = _.isFunction(callout) ? callout(result) : _.extend({}, callout, self.__evaluateCalloutObject(result.resolved, callout.title));\n\t\t\t\t\t\t\t// remove existing callouts if any\n\t\t\t\t\t\t\tself.removeCallout();\n\t\t\t\t\t\t\tself.showCallout(calloutConfig, result.resolved);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t__showInputDependencies: function __showInputDependencies() {\n\t\t\t\t\t\t\tvar self = this;\n\t\t\t\t\t\t\tvar fieldDependency = self.options.deps[self.getModelValue()];\n\t\t\t\t\t\t\tif (fieldDependency && _.isFunction(fieldDependency.func)) {\n\t\t\t\t\t\t\t\tfieldDependency.func().done(function (data) {\n\t\t\t\t\t\t\t\t\tself.__handleDependency({ resolved: true, data: data }, fieldDependency.callout);\n\t\t\t\t\t\t\t\t}).fail(function (data) {\n\t\t\t\t\t\t\t\t\tself.__handleDependency({ resolved: false, data: data }, fieldDependency.callout);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tself.removeCallout();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t_isEdited: false,\n\t\t\t\t\t\t/**\n\t * updates the model with the input's value\n\t */\n\t\t\t\t\t\tupdate: function update() {\n\t\t\t\t\t\t\tif (!this._isEdited && _.result(this.options, 'validateOnlyIfDirty')) {\n\t\t\t\t\t\t\t\tthis._isEdited = true;\n\t\t\t\t\t\t\t\tthis.addInlineValidation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.model.set(this.options.name, this.toModelValue());\n\t\t\t\t\t\t\tif (this.options.deps) {\n\t\t\t\t\t\t\t\t// check for dependencies\n\t\t\t\t\t\t\t\tthis.__showInputDependencies();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Is the input in edit mode\n\t * @return {Boolean}\n\t */\n\t\t\t\t\t\tisEditMode: function isEditMode() {\n\t\t\t\t\t\t\tvar ret = !_.result(this.options, 'readOnly') && (_.result(this.options, 'read') !== true || this.model.get('__edit__') === true);\n\t\t\t\t\t\t\treturn ret;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Renders the input\n\t * @readonly\n\t */\n\t\t\t\t\t\trender: function render() {\n\t\t\t\t\t\t\tthis.preRender();\n\t\t\t\t\t\t\tvar params = this.options.params;\n\t\t\t\t\t\t\tthis.options.params = _.resultCtx(this.options, 'params', this);\n\t\n\t\t\t\t\t\t\tif (this.isEditMode()) {\n\t\t\t\t\t\t\t\tthis.editMode();\n\t\t\t\t\t\t\t\tif (_.resultCtx(this.options, 'disabled', this)) {\n\t\t\t\t\t\t\t\t\tthis.disable();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.enable();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.readMode();\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tthis.options.params = params;\n\t\t\t\t\t\t\tthis.addAriaLabel();\n\t\t\t\t\t\t\tthis.postRender();\n\t\n\t\t\t\t\t\t\treturn this;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * checks if the current value in the model is valid for this field\n\t */\n\t\t\t\t\t\tvalidate: function validate() {\n\t\t\t\t\t\t\tif (!this.model.get('__pending__') && this.isEditMode() && _.isFunction(this.model.validateField)) {\n\t\t\t\t\t\t\t\tvar validationError = this.model.validateField(this.options.name);\n\t\t\t\t\t\t\t\tif (validationError) {\n\t\t\t\t\t\t\t\t\t_.delay(function () {\n\t\t\t\t\t\t\t\t\t\tthis.model.trigger('form:clear-error:' + this.options.name);\n\t\t\t\t\t\t\t\t\t\tthis.model.trigger('invalid', this.model, validationError, false);\n\t\t\t\t\t\t\t\t\t}.bind(this), 100);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Add model event listeners\n\t */\n\t\t\t\t\t\taddModelListeners: function addModelListeners() {\n\t\t\t\t\t\t\tthis.listenTo(this.model, 'form:field-error', function (name) {\n\t\t\t\t\t\t\t\tif (this.options.name === name) {\n\t\t\t\t\t\t\t\t\tthis.__markError();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthis.listenTo(this.model, 'form:clear-errors change:' + this.options.name, this.__clearError);\n\t\t\t\t\t\t\tthis.listenTo(this.model, 'form:clear-error:' + this.options.name, this.__clearError);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * The value of the input\n\t * @return {Mixed}\n\t */\n\t\t\t\t\t\tval: function val() {\n\t\t\t\t\t\t\tthrow new Error('val() is an abstract method');\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Set focus on the input\n\t */\n\t\t\t\t\t\tfocus: function focus() {\n\t\t\t\t\t\t\tthrow new Error('focus() is an abstract method');\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Default value in read mode\n\t * When model has no value for the field\n\t */\n\t\t\t\t\t\tdefaultValue: function defaultValue() {\n\t\t\t\t\t\t\treturn '';\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Renders the input in edit mode\n\t */\n\t\t\t\t\t\teditMode: function editMode() {\n\t\t\t\t\t\t\tvar options = _.extend({}, this.options, {\n\t\t\t\t\t\t\t\tvalue: this.getModelValue()\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthis.$el.html(this.template(options));\n\t\t\t\t\t\t\tthis.options.multi && this.$el.removeClass('margin-r');\n\t\t\t\t\t\t\treturn this;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Renders the readable value of the input in read mode\n\t */\n\t\t\t\t\t\treadMode: function readMode() {\n\t\t\t\t\t\t\tthis.$el.text(this.getReadModeString());\n\t\t\t\t\t\t\tthis.$el.removeClass('error-field');\n\t\t\t\t\t\t\tthis.options.multi && this.$el.addClass('margin-r');\n\t\t\t\t\t\t\treturn this;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tgetReadModeString: function getReadModeString() {\n\t\t\t\t\t\t\tvar readModeStr = _.resultCtx(this.options, 'readModeString', this);\n\t\t\t\t\t\t\tif (readModeStr) {\n\t\t\t\t\t\t\t\treturn readModeStr;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn this.toStringValue();\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * The model value off the field associated with the input\n\t * @return {Mixed}\n\t */\n\t\t\t\t\t\tgetModelValue: function getModelValue() {\n\t\t\t\t\t\t\tvar value = this.model.get(this.options.name);\n\t\n\t\t\t\t\t\t\tif (_.isFunction(this.from)) {\n\t\t\t\t\t\t\t\tvalue = this.from.call(this, value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (_.isFunction(this.options.from)) {\n\t\t\t\t\t\t\t\tvalue = this.options.from.call(this, value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/*\n\t * convenience method to get the textual value from the model\n\t * will return the textual label rather than value in case of select/radio\n\t * @return {String}\n\t */\n\t\t\t\t\t\ttoStringValue: function toStringValue() {\n\t\t\t\t\t\t\tvar value = this.getModelValue();\n\t\t\t\t\t\t\tif (this.options.options) {\n\t\t\t\t\t\t\t\t// dropdown or radio\n\t\t\t\t\t\t\t\tvalue = this.options.options[value];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value || this.defaultValue();\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Triggers a form:resize event in order to tell dialogs content size has changed\n\t */\n\t\t\t\t\t\tresize: function resize() {\n\t\t\t\t\t\t\tthis.model.trigger('form:resize');\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Disable the input\n\t */\n\t\t\t\t\t\tdisable: function disable() {\n\t\t\t\t\t\t\tthis.$(':input').prop('disabled', true);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Enable the input\n\t */\n\t\t\t\t\t\tenable: function enable() {\n\t\t\t\t\t\t\tthis.$(':input').prop('disabled', false);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Change the type of the input field. (e.g., text <--> password)\n\t * @param type\n\t */\n\t\t\t\t\t\tchangeType: function changeType(type) {\n\t\t\t\t\t\t\tthis.$(':input').prop('type', type);\n\t\t\t\t\t\t\t// Update the options so that it keeps the uptodate state\n\t\t\t\t\t\t\tthis.options.type = type;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tgetNameString: function getNameString() {\n\t\t\t\t\t\t\tif (_.isArray(this.options.name)) {\n\t\t\t\t\t\t\t\treturn this.options.name.join('-');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn this.options.name;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Get parameters, computing _.result\n\t * @param {[type]} options alternative options\n\t * @return {Object} the params\n\t */\n\t\t\t\t\t\tgetParams: function getParams(options) {\n\t\t\t\t\t\t\tvar opts = options || this.options || {};\n\t\t\t\t\t\t\treturn _.clone(_.resultCtx(opts, 'params', this) || {});\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * get a parameter from options.params, compute _.result when needed.\n\t * @param {String} key\n\t * @param {Object} defaultValue\n\t * @return {Object} the params\n\t */\n\t\t\t\t\t\tgetParam: function getParam(key, defaultValue) {\n\t\t\t\t\t\t\tvar result = _.resultCtx(this.getParams(), key, this);\n\t\t\t\t\t\t\treturn !_.isUndefined(result) ? result : defaultValue;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * Get a parameter from options.params or if empty, object attribute.\n\t *\n\t * @param {String} key\n\t * @return {Object} the param or attribute\n\t */\n\t\t\t\t\t\tgetParamOrAttribute: function getParamOrAttribute(key) {\n\t\t\t\t\t\t\treturn this.getParam(key) || _.result(this, key);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t__markError: function __markError() {\n\t\t\t\t\t\t\tthis.$el.addClass('o-form-has-errors');\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t__clearError: function __clearError() {\n\t\t\t\t\t\t\tthis.$el.removeClass('o-form-has-errors');\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t});\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 64 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(3), __webpack_require__(28), __webpack_require__(65)], __WEBPACK_AMD_DEFINE_RESULT__ = function (_, BaseView, Time) {\n\t\n\t\t\t\t\tfunction getOption(callout, option) {\n\t\t\t\t\t\treturn _.resultCtx(callout.options, option, callout) || _.result(callout, option);\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfunction getTopClass(callout) {\n\t\t\t\t\t\tvar klass = 'infobox clearfix infobox-' + getOption(callout, 'type');\n\t\t\t\t\t\tswitch (getOption(callout, 'size')) {\n\t\t\t\t\t\t\tcase 'standard':\n\t\t\t\t\t\t\t\tklass += '';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'slim':\n\t\t\t\t\t\t\t\tklass += ' infobox-slim';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'compact':\n\t\t\t\t\t\t\t\tklass += ' infobox-compact';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'large':\n\t\t\t\t\t\t\t\tklass += ' infobox-md';\n\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (getOption(callout, 'dismissible')) {\n\t\t\t\t\t\t\tklass += ' infobox-dismiss';\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn klass;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar events = {\n\t\t\t\t\t\t'click .infobox-dismiss-link': function clickInfoboxDismissLink(e) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tthis.$el.fadeOut(Time.UNLOADING_FADE, _.bind(function () {\n\t\t\t\t\t\t\t\tthis.trigger('dismissed');\n\t\t\t\t\t\t\t\tthis.remove();\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\n\t\t\t\t\tvar template = '\\\n\t\t {{#if dismissible}}\\\n\t\t \\\n\t\t \\\n\t\t \\\n\t\t {{/if}}\\\n\t\t \\\n\t\t {{#if title}}{{subtitle}}
{{/if}}\\\n\t\t {{#if bullets}}\\\n\t\t\\\n\t\t {{errorExplain}}\\\n\t\t
\\\n\t\t '),\n\t\t\t\t\t errorClass = 'o-form-has-errors',\n\t\t\t\t\t updateArrayEvent = 'updateArray';\n\t\n\t\t\t\t\treturn BaseView.extend({\n\t\n\t\t\t\t\t\ttagName: 'div',\n\t\n\t\t\t\t\t\tclassName: 'o-form-input-group',\n\t\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t'click a': function clickA(e) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tthis.remove();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t'keyup input': function keyupInput() {\n\t\t\t\t\t\t\t\tthis.update();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tisEditMode: function isEditMode() {\n\t\t\t\t\t\t\treturn !this.options.readOnly && (this.options.read !== true || this.model.get('__edit__') === true);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tinitialize: function initialize() {\n\t\t\t\t\t\t\tthis.template = template(_.extend(this.options, {\n\t\t\t\t\t\t\t\tplaceholder: this.getPlaceholderText(),\n\t\t\t\t\t\t\t\terrorExplain: this.getErrorExplainText()\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\tthis.update = _.debounce(this.update, this.options.debounceDelay || Time.DEBOUNCE_DELAY);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\trender: function render() {\n\t\t\t\t\t\t\tif (this.isEditMode()) {\n\t\t\t\t\t\t\t\tthis.$el.html(this.template);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.$el.text(this.options.value);\n\t\t\t\t\t\t\t\tthis.$('a').hide();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn this;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tremove: function remove() {\n\t\t\t\t\t\t\tthis.trigger(updateArrayEvent, null);\n\t\t\t\t\t\t\tthis.$el.slideUp(_.bind(function () {\n\t\t\t\t\t\t\t\tBaseView.prototype.remove.call(this, arguments);\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tupdate: function update() {\n\t\t\t\t\t\t\tvar updatedValue = this.$('input').val(),\n\t\t\t\t\t\t\t parseFunc = _.object([SchemaUtil.DATATYPE.number, SchemaUtil.DATATYPE.integer], [StringUtil.parseFloat, this.parseInt]);\n\t\t\t\t\t\t\tif (_.has(parseFunc, this.options.itemType)) {\n\t\t\t\t\t\t\t\tupdatedValue = parseFunc[this.options.itemType](updatedValue);\n\t\t\t\t\t\t\t\t!_.isNumber(updatedValue) ? this.markInvalid() : this.clearInvalid();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.trigger(updateArrayEvent, updatedValue);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tmarkInvalid: function markInvalid() {\n\t\t\t\t\t\t\tthis.$el.addClass(errorClass);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tclearInvalid: function clearInvalid() {\n\t\t\t\t\t\t\tthis.$el.removeClass(errorClass);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tgetPlaceholderText: function getPlaceholderText() {\n\t\t\t\t\t\t\tvar text = ['Enter'];\n\t\t\t\t\t\t\ttext.push(getArticle(this.options.itemType));\n\t\t\t\t\t\t\ttext.push(this.options.itemType.toLowerCase());\n\t\t\t\t\t\t\treturn text.join(' ');\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tgetErrorExplainText: function getErrorExplainText() {\n\t\t\t\t\t\t\tvar text = ['Value must be'];\n\t\t\t\t\t\t\ttext.push(getArticle(this.options.itemType));\n\t\t\t\t\t\t\ttext.push(this.options.itemType.toLowerCase());\n\t\t\t\t\t\t\treturn text.join(' ');\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tparseInt: function (_parseInt2) {\n\t\t\t\t\t\t\tfunction parseInt(_x3) {\n\t\t\t\t\t\t\t\treturn _parseInt2.apply(this, arguments);\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tparseInt.toString = function () {\n\t\t\t\t\t\t\t\treturn _parseInt2.toString();\n\t\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\t\treturn parseInt;\n\t\t\t\t\t\t}(function (string) {\n\t\t\t\t\t\t\t// native javascript parseInt is aggressive\n\t\t\t\t\t\t\t// there're cases we don't want a string to be parsed even though it is convertable\n\t\t\t\t\t\t\t// so that we don't convert a string silently before warning a user the potential error\n\t\t\t\t\t\t\t// this is to make sure the string is in an integer format before we parse it\n\t\t\t\t\t\t\tif (/^-?\\d+$/.test(string)) {\n\t\t\t\t\t\t\t\tvar num = parseInt(string, 10);\n\t\t\t\t\t\t\t\treturn !_.isNaN(num) ? num : string;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn string;\n\t\t\t\t\t\t})\n\t\t\t\t\t});\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 69 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(8), __webpack_require__(25), __webpack_require__(63), __webpack_require__(46), __webpack_require__(70), __webpack_require__(43)], __WEBPACK_AMD_DEFINE_RESULT__ = function ($, TemplateUtil, BaseInput, Keys) {\n\t\n\t\t\t\t\tvar className = 'okta-form-input-field input-fix';\n\t\n\t\t\t\t\tfunction hasTitleAndText(options) {\n\t\t\t\t\t\tvar title = options.title,\n\t\t\t\t\t\t text = options.text;\n\t\n\t\t\t\t\t\treturn title && text && title !== text;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// options may be a string or an object.\n\t\t\t\t\tfunction createQtipContent(options) {\n\t\t\t\t\t\tif (hasTitleAndText(options)) {\n\t\t\t\t\t\t\treturn options;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { text: options.text || options };\n\t\t\t\t\t}\n\t\n\t\t\t\t\treturn BaseInput.extend({\n\t\t\t\t\t\ttemplate: TemplateUtil.tpl('\\\n\t\t {{#if params.innerTooltip}}\\\n\t\t \\\n\t\t {{/if}}\\\n\t\t {{#if params.icon}}\\\n\t\t \\\n\t\t {{/if}}\\\n\t\t \\\n\t\t {{#if params.iconDivider}}\\\n\t\t \\\n\t\t {{/if}}\\\n\t\t '),\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t'input input': 'update',\n\t\t\t\t\t\t\t'change input': 'update',\n\t\t\t\t\t\t\t'keydown input': 'update',\n\t\t\t\t\t\t\t'keyup input': function keyupInput(e) {\n\t\t\t\t\t\t\t\tif (Keys.isEnter(e)) {\n\t\t\t\t\t\t\t\t\tthis.model.trigger('form:save');\n\t\t\t\t\t\t\t\t} else if (Keys.isEsc(e)) {\n\t\t\t\t\t\t\t\t\tthis.model.trigger('form:cancel');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tconstructor: function constructor() {\n\t\t\t\t\t\t\tBaseInput.apply(this, arguments);\n\t\t\t\t\t\t\tthis.$el.addClass('o-form-control');\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\teditMode: function editMode() {\n\t\t\t\t\t\t\tthis.$el.addClass(className);\n\t\t\t\t\t\t\tBaseInput.prototype.editMode.apply(this, arguments);\n\t\t\t\t\t\t\tthis.$('input').placeholder();\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\treadMode: function readMode() {\n\t\t\t\t\t\t\tBaseInput.prototype.readMode.apply(this, arguments);\n\t\t\t\t\t\t\tif (this.options.type == 'password') {\n\t\t\t\t\t\t\t\tthis.$el.text('********');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.$el.removeClass(className);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\tval: function val() {\n\t\t\t\t\t\t\t//IE will only read clear text pw if type=\"password\" is explicitly in selector\n\t\t\t\t\t\t\tvar inputValue = this.$('input[type=\"' + this.options.type + '\"]').val();\n\t\n\t\t\t\t\t\t\tif (this.options.type !== 'password') {\n\t\t\t\t\t\t\t\tinputValue = $.trim(inputValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn inputValue;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\tfocus: function focus() {\n\t\t\t\t\t\t\treturn this.$('input').focus();\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tpostRender: function postRender() {\n\t\t\t\t\t\t\tvar params = this.options.params,\n\t\t\t\t\t\t\t content;\n\t\n\t\t\t\t\t\t\tif (params && params.innerTooltip) {\n\t\t\t\t\t\t\t\tcontent = createQtipContent(params.innerTooltip);\n\t\t\t\t\t\t\t\tthis.$('.input-tooltip').qtip({\n\t\t\t\t\t\t\t\t\tcontent: content,\n\t\t\t\t\t\t\t\t\tstyle: { classes: 'okta-tooltip qtip-custom qtip-shadow' },\n\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\tmy: 'bottom left',\n\t\t\t\t\t\t\t\t\t\t// Note: qTip2 has a known issue calculating the tooltip offset when:\n\t\t\t\t\t\t\t\t\t\t// 1. A container element has both:\n\t\t\t\t\t\t\t\t\t\t// a) position: relative/absolute\n\t\t\t\t\t\t\t\t\t\t// b) overlay: value other than 'visible'\n\t\t\t\t\t\t\t\t\t\t// 2. The page is scrolled\n\t\t\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t\t\t// We set position:relative and overlay:auto on the body element,\n\t\t\t\t\t\t\t\t\t\t// where both are required for:\n\t\t\t\t\t\t\t\t\t\t// - Positioning the footer correctly\n\t\t\t\t\t\t\t\t\t\t// - Displaying long pages in embedded browsers\n\t\t\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t\t\t// The original design called for a fixed position relative to the\n\t\t\t\t\t\t\t\t\t\t// tooltip icon - this has been switched to \"relative to mouse, and\n\t\t\t\t\t\t\t\t\t\t// update position when mouse moves\" because of this constraint.\n\t\t\t\t\t\t\t\t\t\ttarget: 'mouse',\n\t\t\t\t\t\t\t\t\t\tadjust: {\n\t\t\t\t\t\t\t\t\t\t\tmethod: 'flip',\n\t\t\t\t\t\t\t\t\t\t\tmouse: true,\n\t\t\t\t\t\t\t\t\t\t\ty: -5,\n\t\t\t\t\t\t\t\t\t\t\tx: 5\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tviewport: $('body')\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 70 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; /*! http://mths.be/placeholder v2.0.7 by @mathias */\n\t\t\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(9)], __WEBPACK_AMD_DEFINE_RESULT__ = function ($) {\n\t\n\t\t\t\t\tvar isInputSupported = 'placeholder' in document.createElement('input'),\n\t\t\t\t\t isTextareaSupported = 'placeholder' in document.createElement('textarea'),\n\t\t\t\t\t prototype = $.fn,\n\t\t\t\t\t valHooks = $.valHooks,\n\t\t\t\t\t hooks,\n\t\t\t\t\t placeholder;\n\t\n\t\t\t\t\tif (isInputSupported && isTextareaSupported) {\n\t\n\t\t\t\t\t\tplaceholder = prototype.placeholder = function () {\n\t\t\t\t\t\t\treturn this;\n\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\tplaceholder.input = placeholder.textarea = true;\n\t\t\t\t\t} else {\n\t\n\t\t\t\t\t\tplaceholder = prototype.placeholder = function () {\n\t\t\t\t\t\t\tvar $this = this;\n\t\t\t\t\t\t\t$this.filter((isInputSupported ? 'textarea' : ':input') + '[placeholder]').not('.placeholder').bind({\n\t\t\t\t\t\t\t\t'focus.placeholder': clearPlaceholder,\n\t\t\t\t\t\t\t\t'blur.placeholder': setPlaceholder\n\t\t\t\t\t\t\t}).data('placeholder-enabled', true).trigger('blur.placeholder');\n\t\t\t\t\t\t\treturn $this;\n\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\tplaceholder.input = isInputSupported;\n\t\t\t\t\t\tplaceholder.textarea = isTextareaSupported;\n\t\n\t\t\t\t\t\thooks = {\n\t\t\t\t\t\t\t'get': function get(element) {\n\t\t\t\t\t\t\t\tvar $element = $(element);\n\t\t\t\t\t\t\t\treturn $element.data('placeholder-enabled') && $element.hasClass('placeholder') ? '' : element.value;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t'set': function set(element, value) {\n\t\t\t\t\t\t\t\tvar $element = $(element);\n\t\t\t\t\t\t\t\tif (!$element.data('placeholder-enabled')) {\n\t\t\t\t\t\t\t\t\treturn element.value = value;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (value == '') {\n\t\t\t\t\t\t\t\t\telement.value = value;\n\t\t\t\t\t\t\t\t\t// Issue #56: Setting the placeholder causes problems if the element continues to have focus.\n\t\t\t\t\t\t\t\t\tif (element != document.activeElement) {\n\t\t\t\t\t\t\t\t\t\t// We can't use `triggerHandler` here because of dummy text/password inputs :(\n\t\t\t\t\t\t\t\t\t\tsetPlaceholder.call(element);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if ($element.hasClass('placeholder')) {\n\t\t\t\t\t\t\t\t\tclearPlaceholder.call(element, true, value) || (element.value = value);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\telement.value = value;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// `set` can not return `undefined`; see http://jsapi.info/jquery/1.7.1/val#L2363\n\t\t\t\t\t\t\t\treturn $element;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\tisInputSupported || (valHooks.input = hooks);\n\t\t\t\t\t\tisTextareaSupported || (valHooks.textarea = hooks);\n\t\n\t\t\t\t\t\t$(function () {\n\t\t\t\t\t\t\t// Look for forms\n\t\t\t\t\t\t\t$(document).delegate('form', 'submit.placeholder', function () {\n\t\t\t\t\t\t\t\t// Clear the placeholder values so they don't get submitted\n\t\t\t\t\t\t\t\tvar $inputs = $('.placeholder', this).each(clearPlaceholder);\n\t\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\t\t$inputs.each(setPlaceholder);\n\t\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t// Clear placeholder values upon page reload\n\t\t\t\t\t\t$(window).bind('beforeunload.placeholder', function () {\n\t\t\t\t\t\t\t$('.placeholder').each(function () {\n\t\t\t\t\t\t\t\tthis.value = '';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfunction args(elem) {\n\t\t\t\t\t\t// Return an object of element attributes\n\t\t\t\t\t\tvar newAttrs = {},\n\t\t\t\t\t\t rinlinejQuery = /^jQuery\\d+$/;\n\t\t\t\t\t\t$.each(elem.attributes, function (i, attr) {\n\t\t\t\t\t\t\tif (attr.specified && !rinlinejQuery.test(attr.name)) {\n\t\t\t\t\t\t\t\tnewAttrs[attr.name] = attr.value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn newAttrs;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfunction clearPlaceholder(event, value) {\n\t\t\t\t\t\tvar input = this,\n\t\t\t\t\t\t $input = $(input);\n\t\t\t\t\t\tif (input.value == $input.attr('placeholder') && $input.hasClass('placeholder')) {\n\t\t\t\t\t\t\tif ($input.data('placeholder-password')) {\n\t\t\t\t\t\t\t\t$input = $input.hide().next().show().attr('id', $input.removeAttr('id').data('placeholder-id'));\n\t\t\t\t\t\t\t\t// If `clearPlaceholder` was called from `$.valHooks.input.set`\n\t\t\t\t\t\t\t\tif (event === true) {\n\t\t\t\t\t\t\t\t\treturn $input[0].value = value;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t$input.focus();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tinput.value = '';\n\t\t\t\t\t\t\t\t$input.removeClass('placeholder');\n\t\t\t\t\t\t\t\tinput == document.activeElement && input.select();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfunction setPlaceholder() {\n\t\t\t\t\t\tvar $replacement,\n\t\t\t\t\t\t input = this,\n\t\t\t\t\t\t $input = $(input),\n\t\t\t\t\t\t $origInput = $input,\n\t\t\t\t\t\t id = this.id;\n\t\t\t\t\t\tif (input.value == '') {\n\t\t\t\t\t\t\tif (input.type == 'password') {\n\t\t\t\t\t\t\t\tif (!$input.data('placeholder-textinput')) {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t$replacement = $input.clone().attr({ 'type': 'text' });\n\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t$replacement = $('').attr($.extend(args(this), { 'type': 'text' }));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$replacement.removeAttr('name').data({\n\t\t\t\t\t\t\t\t\t\t'placeholder-password': true,\n\t\t\t\t\t\t\t\t\t\t'placeholder-id': id\n\t\t\t\t\t\t\t\t\t}).bind('focus.placeholder', clearPlaceholder);\n\t\t\t\t\t\t\t\t\t$input.data({\n\t\t\t\t\t\t\t\t\t\t'placeholder-textinput': $replacement,\n\t\t\t\t\t\t\t\t\t\t'placeholder-id': id\n\t\t\t\t\t\t\t\t\t}).before($replacement);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t$input = $input.removeAttr('id').hide().prev().attr('id', id).show();\n\t\t\t\t\t\t\t\t// Note: `$input[0] != input` now!\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$input.addClass('placeholder');\n\t\t\t\t\t\t\t$input[0].value = $input.attr('placeholder');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$input.removeClass('placeholder');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 71 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; /*!\n\t * Copyright (c) 2015-2018, Okta, Inc. and/or its affiliates. All rights reserved.\n\t * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n\t *\n\t * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n\t * Unless required by applicable law or agreed to in writing, software\n\t * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n\t * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t *\n\t * See the License for the specific language governing permissions and limitations under the License.\n\t */\n\t\n\t\t\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(3), __webpack_require__(25), __webpack_require__(69)], __WEBPACK_AMD_DEFINE_RESULT__ = function (_, TemplateUtil, TextBox) {\n\t\n\t\t\t\t\tvar toggleTemplate = TemplateUtil.tpl('\\\n\t\t \\\n\t\t \\\n\t\t \\\n\t\t \\\n\t\t ');\n\t\n\t\t\t\t\tvar toggleTimeout = 30000;\n\t\n\t\t\t\t\treturn TextBox.extend({\n\t\t\t\t\t\tinitialize: function initialize() {\n\t\t\t\t\t\t\tif (this.__showPasswordToggle()) {\n\t\t\t\t\t\t\t\tthis.events['click .password-toggle .button-show'] = '__showPassword';\n\t\t\t\t\t\t\t\tthis.events['click .password-toggle .button-hide'] = '__hidePassword';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.delegateEvents();\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\tpostRender: function postRender() {\n\t\t\t\t\t\t\tif (this.isEditMode() && this.__showPasswordToggle()) {\n\t\t\t\t\t\t\t\tthis.$el.append(toggleTemplate);\n\t\t\t\t\t\t\t\tthis.$el.find('input[type=\"password\"]').addClass('password-with-toggle');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tTextBox.prototype.postRender.apply(this, arguments);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t__showPasswordToggle: function __showPasswordToggle() {\n\t\t\t\t\t\t\treturn this.options.params && this.options.params.showPasswordToggle;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t__showPassword: function __showPassword() {\n\t\t\t\t\t\t\tvar _this2 = this;\n\t\n\t\t\t\t\t\t\tTextBox.prototype.changeType.apply(this, ['text']);\n\t\t\t\t\t\t\tthis.$('.password-toggle .button-show').hide();\n\t\t\t\t\t\t\tthis.$('.password-toggle .button-hide').show();\n\t\t\t\t\t\t\tthis.passwordToggleTimer = _.delay(function () {\n\t\t\t\t\t\t\t\t_this2.__hidePassword();\n\t\t\t\t\t\t\t}, toggleTimeout);\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t__hidePassword: function __hidePassword() {\n\t\t\t\t\t\t\tTextBox.prototype.changeType.apply(this, ['password']);\n\t\t\t\t\t\t\tthis.$('.password-toggle .button-show').show();\n\t\t\t\t\t\t\tthis.$('.password-toggle .button-hide').hide();\n\t\t\t\t\t\t\t// clear timeout\n\t\t\t\t\t\t\tif (this.passwordToggleTimer) {\n\t\t\t\t\t\t\t\tclearTimeout(this.passwordToggleTimer);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 72 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(3), __webpack_require__(46), __webpack_require__(25), __webpack_require__(63), __webpack_require__(73)], __WEBPACK_AMD_DEFINE_RESULT__ = function (_, Keys, TemplateUtil, BaseInput) {\n\t\n\t\t\t\t\tvar template = TemplateUtil.tpl('\\\n\t\t \\\n\t\t \\\n\t\t ');\n\t\n\t\t\t\t\treturn BaseInput.extend({\n\t\t\t\t\t\ttemplate: template,\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t'change :checkbox': 'update',\n\t\t\t\t\t\t\t'keyup': function keyup(e) {\n\t\t\t\t\t\t\t\tif (Keys.isSpaceBar(e)) {\n\t\t\t\t\t\t\t\t\tthis.$(':checkbox').click();\n\t\t\t\t\t\t\t\t} else if (Keys.isEnter(e)) {\n\t\t\t\t\t\t\t\t\tthis.model.trigger('form:save');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\teditMode: function editMode() {\n\t\t\t\t\t\t\tvar placeholder = _.resultCtx(this.options, 'placeholder', this);\n\t\t\t\t\t\t\tif (placeholder === '') {\n\t\t\t\t\t\t\t\tplaceholder = _.resultCtx(this.options, 'label', this);\n\t\t\t\t\t\t\t} else if (placeholder === false) {\n\t\t\t\t\t\t\t\tplaceholder = '';\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tthis.$el.html(this.template(_.extend(_.omit(this.options, 'placeholder'), { placeholder: placeholder })));\n\t\t\t\t\t\t\tvar $input = this.$(':checkbox');\n\t\t\t\t\t\t\t$input.prop('checked', this.getModelValue() || false);\n\t\n\t\t\t\t\t\t\tthis.$('input').customInput();\n\t\t\t\t\t\t\tthis.model.trigger('form:resize');\n\t\n\t\t\t\t\t\t\treturn this;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\treadMode: function readMode() {\n\t\t\t\t\t\t\tthis.editMode();\n\t\t\t\t\t\t\tthis.$(':checkbox').prop('disabled', true);\n\t\t\t\t\t\t\treturn this;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\tval: function val() {\n\t\t\t\t\t\t\treturn this.$(':checkbox').prop('checked');\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\tfocus: function focus() {\n\t\t\t\t\t\t\treturn this.$(':checkbox').focus();\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t});\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 73 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; /**\n\t * There are following local modifications:\n\t * - Author: Uzi Kilon ukilon@okta.com\n\t * Bug: OKTA-20830 - solves the conflict when there are multiple labels\n\t */\n\t\t\t\t/**\n\t * --------------------------------------------------------------------\n\t * jQuery customInput plugin\n\t * Author: Maggie Costello Wachs maggie@filamentgroup.com, Scott Jehl, scott@filamentgroup.com\n\t * Copyright (c) 2009 Filament Group\n\t * licensed under MIT (filamentgroup.com/examples/mit-license.txt)\n\t * --------------------------------------------------------------------\n\t */\n\t\t\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(9)], __WEBPACK_AMD_DEFINE_RESULT__ = function (jQuery) {\n\t\t\t\t\tvar $ = jQuery;\n\t\t\t\t\tjQuery.fn.customInput = function () {\n\t\t\t\t\t\treturn $(this).each(function () {\n\t\t\t\t\t\t\tif ($(this).is('[type=checkbox],[type=radio]')) {\n\t\t\t\t\t\t\t\tvar input = $(this);\n\t\n\t\t\t\t\t\t\t\t// get the associated label using the input's id\n\t\t\t\t\t\t\t\tvar label = input.siblings('label[for=\"' + input.attr('id') + '\"]:first');\n\t\t\t\t\t\t\t\tif (!label.length) {\n\t\t\t\t\t\t\t\t\tlabel = input.closest('label[for=\"' + input.attr('id') + '\"]:first');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// wrap the input + label in a div\n\t\t\t\t\t\t\t\tinput.add(label).wrapAll('');\n\t\n\t\t\t\t\t\t\t\t// necessary for browsers that don't support the :hover pseudo class on labels\n\t\t\t\t\t\t\t\tlabel.hover(function () {\n\t\t\t\t\t\t\t\t\t$(this).addClass('hover');\n\t\t\t\t\t\t\t\t}, function () {\n\t\t\t\t\t\t\t\t\t$(this).removeClass('hover');\n\t\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t\t//bind custom event, trigger it, bind click,focus,blur events\n\t\t\t\t\t\t\t\tinput.bind('updateState', function () {\n\t\t\t\t\t\t\t\t\tinput.is(':checked') ? label.addClass('checked') : label.removeClass('checked checkedHover checkedFocus');\n\t\t\t\t\t\t\t\t}).trigger('updateState').click(function () {\n\t\t\t\t\t\t\t\t\t$('input[name=\"' + $(this).attr('name') + '\"]').trigger('updateState');\n\t\t\t\t\t\t\t\t}).focus(function () {\n\t\t\t\t\t\t\t\t\tlabel.addClass('focus');\n\t\t\t\t\t\t\t\t\tif (input.is(':checked')) {\n\t\t\t\t\t\t\t\t\t\t$(this).addClass('checkedFocus');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}).blur(function () {\n\t\t\t\t\t\t\t\t\tlabel.removeClass('focus checkedFocus');\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t},\n\t\t\t/* 74 */\n\t\t\t/***/function (module, exports, __webpack_require__) {\n\t\n\t\t\t\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; /* eslint max-statements: [2, 12], max-params: [2, 6] */\n\t\t\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(3), __webpack_require__(8), __webpack_require__(46), __webpack_require__(39), __webpack_require__(63), __webpack_require__(28), __webpack_require__(73)], __WEBPACK_AMD_DEFINE_RESULT__ = function (_, $, Keys, Util, BaseInput, BaseView) {\n\t\n\t\t\t\t\tvar isABaseView = Util.isABaseView;\n\t\n\t\t\t\t\tvar RadioOption = BaseView.extend({\n\t\t\t\t\t\ttemplate: '\\\n\t\t \\\n\t\t \\\n\t\t ',\n\t\t\t\t\t\tinitialize: function initialize(options) {\n\t\t\t\t\t\t\tvar explain;\n\t\n\t\t\t\t\t\t\texplain = options.explain;\n\t\t\t\t\t\t\tif (_.isFunction(explain) && !isABaseView(explain)) {\n\t\t\t\t\t\t\t\texplain = _.resultCtx(this.options, 'explain', this);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!explain) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif (isABaseView(explain)) {\n\t\t\t\t\t\t\t\tthis.add('', '.radio-label');\n\t\t\t\t\t\t\t\tthis.add(explain, '.o-form-explain');\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.add('{{explain}}
', '.radio-label');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\n\t\t\t\t\treturn BaseInput.extend({\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t'change :radio': 'update',\n\t\t\t\t\t\t\t'keyup': function keyup(e) {\n\t\t\t\t\t\t\t\tif (Keys.isSpaceBar(e)) {\n\t\t\t\t\t\t\t\t\t$(e.target).click();\n\t\t\t\t\t\t\t\t} else if (Keys.isEnter(e)) {\n\t\t\t\t\t\t\t\t\tthis.model.trigger('form:save');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\teditMode: function editMode() {\n\t\t\t\t\t\t\tvar templates = [];\n\t\t\t\t\t\t\tthis.$el.empty();\n\t\n\t\t\t\t\t\t\t_.each(this.options.options, function (value, key) {\n\t\t\t\t\t\t\t\tvar options = {\n\t\t\t\t\t\t\t\t\toptionId: _.uniqueId('option'),\n\t\t\t\t\t\t\t\t\tname: this.options.inputId,\n\t\t\t\t\t\t\t\t\trealName: this.options.name,\n\t\t\t\t\t\t\t\t\tvalue: key\n\t\t\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\t\t\tif (!_.isObject(value)) {\n\t\t\t\t\t\t\t\t\tvalue = { label: value };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t_.extend(options, value);\n\t\n\t\t\t\t\t\t\t\ttemplates.push(new RadioOption(options).render().el);\n\t\t\t\t\t\t\t}, this);\n\t\t\t\t\t\t\tthis.$el.append(templates);\n\t\t\t\t\t\t\tvar value = this.getModelValue();\n\t\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t\tthis.$(':radio[value=' + value + ']').prop('checked', true);\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tthis.$('input').customInput();\n\t\t\t\t\t\t\tthis.model.trigger('form:resize');\n\t\n\t\t\t\t\t\t\tif (this.getParam('inline') === true) {\n\t\t\t\t\t\t\t\tthis.$('div.custom-radio').addClass('inline');\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\treturn this;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\treadMode: function readMode() {\n\t\t\t\t\t\t\tthis.editMode();\n\t\t\t\t\t\t\tthis.$(':radio').prop('disabled', true);\n\t\t\t\t\t\t\treturn this;\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\tval: function val() {\n\t\t\t\t\t\t\treturn this.$(':radio:checked').val();\n\t\t\t\t\t\t},\n\t\n\t\t\t\t\t\t/**\n\t * @Override\n\t */\n\t\t\t\t\t\tfocus: function focus() {\n\t\t\t\t\t\t\treturn this.$('label:eq(0)').focus();\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t});\n\t\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t\t\t\t/***/\n\t\t\t}\n\t\t\t/******/])\n\t\t);\n\t});\n\t;\n\t//# sourceMappingURL=courage-for-signin-widget.js.map\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(332)(module)))\n\n/***/ },\n/* 332 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(module) {\r\n\t\tif(!module.webpackPolyfill) {\r\n\t\t\tmodule.deprecate = function() {};\r\n\t\t\tmodule.paths = [];\r\n\t\t\t// module.parent = undefined by default\r\n\t\t\tmodule.children = [];\r\n\t\t\tmodule.webpackPolyfill = 1;\r\n\t\t}\r\n\t\treturn module;\r\n\t}\r\n\n\n/***/ },\n/* 333 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(334), __esModule: true };\n\n/***/ },\n/* 334 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar core = __webpack_require__(335);\n\tvar $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });\n\tmodule.exports = function stringify(it) { // eslint-disable-line no-unused-vars\n\t return $JSON.stringify.apply($JSON, arguments);\n\t};\n\n\n/***/ },\n/* 335 */\n/***/ function(module, exports) {\n\n\tvar core = module.exports = { version: '2.5.7' };\n\tif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n/***/ },\n/* 336 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\tvar _iterator = __webpack_require__(337);\n\t\n\tvar _iterator2 = _interopRequireDefault(_iterator);\n\t\n\tvar _symbol = __webpack_require__(387);\n\t\n\tvar _symbol2 = _interopRequireDefault(_symbol);\n\t\n\tvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n\t return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n\t} : function (obj) {\n\t return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n\t};\n\n/***/ },\n/* 337 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(338), __esModule: true };\n\n/***/ },\n/* 338 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(339);\n\t__webpack_require__(382);\n\tmodule.exports = __webpack_require__(386).f('iterator');\n\n\n/***/ },\n/* 339 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar $at = __webpack_require__(340)(true);\n\t\n\t// 21.1.3.27 String.prototype[@@iterator]()\n\t__webpack_require__(343)(String, 'String', function (iterated) {\n\t this._t = String(iterated); // target\n\t this._i = 0; // next index\n\t// 21.1.5.2.1 %StringIteratorPrototype%.next()\n\t}, function () {\n\t var O = this._t;\n\t var index = this._i;\n\t var point;\n\t if (index >= O.length) return { value: undefined, done: true };\n\t point = $at(O, index);\n\t this._i += point.length;\n\t return { value: point, done: false };\n\t});\n\n\n/***/ },\n/* 340 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar toInteger = __webpack_require__(341);\n\tvar defined = __webpack_require__(342);\n\t// true -> String#at\n\t// false -> String#codePointAt\n\tmodule.exports = function (TO_STRING) {\n\t return function (that, pos) {\n\t var s = String(defined(that));\n\t var i = toInteger(pos);\n\t var l = s.length;\n\t var a, b;\n\t if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n\t a = s.charCodeAt(i);\n\t return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n\t ? TO_STRING ? s.charAt(i) : a\n\t : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n\t };\n\t};\n\n\n/***/ },\n/* 341 */\n/***/ function(module, exports) {\n\n\t// 7.1.4 ToInteger\n\tvar ceil = Math.ceil;\n\tvar floor = Math.floor;\n\tmodule.exports = function (it) {\n\t return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n\t};\n\n\n/***/ },\n/* 342 */\n/***/ function(module, exports) {\n\n\t// 7.2.1 RequireObjectCoercible(argument)\n\tmodule.exports = function (it) {\n\t if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n\t return it;\n\t};\n\n\n/***/ },\n/* 343 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar LIBRARY = __webpack_require__(344);\n\tvar $export = __webpack_require__(345);\n\tvar redefine = __webpack_require__(360);\n\tvar hide = __webpack_require__(349);\n\tvar Iterators = __webpack_require__(361);\n\tvar $iterCreate = __webpack_require__(362);\n\tvar setToStringTag = __webpack_require__(378);\n\tvar getPrototypeOf = __webpack_require__(380);\n\tvar ITERATOR = __webpack_require__(379)('iterator');\n\tvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\n\tvar FF_ITERATOR = '@@iterator';\n\tvar KEYS = 'keys';\n\tvar VALUES = 'values';\n\t\n\tvar returnThis = function () { return this; };\n\t\n\tmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n\t $iterCreate(Constructor, NAME, next);\n\t var getMethod = function (kind) {\n\t if (!BUGGY && kind in proto) return proto[kind];\n\t switch (kind) {\n\t case KEYS: return function keys() { return new Constructor(this, kind); };\n\t case VALUES: return function values() { return new Constructor(this, kind); };\n\t } return function entries() { return new Constructor(this, kind); };\n\t };\n\t var TAG = NAME + ' Iterator';\n\t var DEF_VALUES = DEFAULT == VALUES;\n\t var VALUES_BUG = false;\n\t var proto = Base.prototype;\n\t var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n\t var $default = $native || getMethod(DEFAULT);\n\t var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n\t var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n\t var methods, key, IteratorPrototype;\n\t // Fix native\n\t if ($anyNative) {\n\t IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n\t if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n\t // Set @@toStringTag to native iterators\n\t setToStringTag(IteratorPrototype, TAG, true);\n\t // fix for some old engines\n\t if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n\t }\n\t }\n\t // fix Array#{values, @@iterator}.name in V8 / FF\n\t if (DEF_VALUES && $native && $native.name !== VALUES) {\n\t VALUES_BUG = true;\n\t $default = function values() { return $native.call(this); };\n\t }\n\t // Define iterator\n\t if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n\t hide(proto, ITERATOR, $default);\n\t }\n\t // Plug for library\n\t Iterators[NAME] = $default;\n\t Iterators[TAG] = returnThis;\n\t if (DEFAULT) {\n\t methods = {\n\t values: DEF_VALUES ? $default : getMethod(VALUES),\n\t keys: IS_SET ? $default : getMethod(KEYS),\n\t entries: $entries\n\t };\n\t if (FORCED) for (key in methods) {\n\t if (!(key in proto)) redefine(proto, key, methods[key]);\n\t } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n\t }\n\t return methods;\n\t};\n\n\n/***/ },\n/* 344 */\n/***/ function(module, exports) {\n\n\tmodule.exports = true;\n\n\n/***/ },\n/* 345 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar global = __webpack_require__(346);\n\tvar core = __webpack_require__(335);\n\tvar ctx = __webpack_require__(347);\n\tvar hide = __webpack_require__(349);\n\tvar has = __webpack_require__(359);\n\tvar PROTOTYPE = 'prototype';\n\t\n\tvar $export = function (type, name, source) {\n\t var IS_FORCED = type & $export.F;\n\t var IS_GLOBAL = type & $export.G;\n\t var IS_STATIC = type & $export.S;\n\t var IS_PROTO = type & $export.P;\n\t var IS_BIND = type & $export.B;\n\t var IS_WRAP = type & $export.W;\n\t var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n\t var expProto = exports[PROTOTYPE];\n\t var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n\t var key, own, out;\n\t if (IS_GLOBAL) source = name;\n\t for (key in source) {\n\t // contains in native\n\t own = !IS_FORCED && target && target[key] !== undefined;\n\t if (own && has(exports, key)) continue;\n\t // export native or passed\n\t out = own ? target[key] : source[key];\n\t // prevent global pollution for namespaces\n\t exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n\t // bind timers to global for call from export context\n\t : IS_BIND && own ? ctx(out, global)\n\t // wrap global constructors for prevent change them in library\n\t : IS_WRAP && target[key] == out ? (function (C) {\n\t var F = function (a, b, c) {\n\t if (this instanceof C) {\n\t switch (arguments.length) {\n\t case 0: return new C();\n\t case 1: return new C(a);\n\t case 2: return new C(a, b);\n\t } return new C(a, b, c);\n\t } return C.apply(this, arguments);\n\t };\n\t F[PROTOTYPE] = C[PROTOTYPE];\n\t return F;\n\t // make static versions for prototype methods\n\t })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n\t // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n\t if (IS_PROTO) {\n\t (exports.virtual || (exports.virtual = {}))[key] = out;\n\t // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n\t if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n\t }\n\t }\n\t};\n\t// type bitmap\n\t$export.F = 1; // forced\n\t$export.G = 2; // global\n\t$export.S = 4; // static\n\t$export.P = 8; // proto\n\t$export.B = 16; // bind\n\t$export.W = 32; // wrap\n\t$export.U = 64; // safe\n\t$export.R = 128; // real proto method for `library`\n\tmodule.exports = $export;\n\n\n/***/ },\n/* 346 */\n/***/ function(module, exports) {\n\n\t// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\n\tvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n\t ? window : typeof self != 'undefined' && self.Math == Math ? self\n\t // eslint-disable-next-line no-new-func\n\t : Function('return this')();\n\tif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n\n/***/ },\n/* 347 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// optional / simple context binding\n\tvar aFunction = __webpack_require__(348);\n\tmodule.exports = function (fn, that, length) {\n\t aFunction(fn);\n\t if (that === undefined) return fn;\n\t switch (length) {\n\t case 1: return function (a) {\n\t return fn.call(that, a);\n\t };\n\t case 2: return function (a, b) {\n\t return fn.call(that, a, b);\n\t };\n\t case 3: return function (a, b, c) {\n\t return fn.call(that, a, b, c);\n\t };\n\t }\n\t return function (/* ...args */) {\n\t return fn.apply(that, arguments);\n\t };\n\t};\n\n\n/***/ },\n/* 348 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function (it) {\n\t if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n\t return it;\n\t};\n\n\n/***/ },\n/* 349 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar dP = __webpack_require__(350);\n\tvar createDesc = __webpack_require__(358);\n\tmodule.exports = __webpack_require__(354) ? function (object, key, value) {\n\t return dP.f(object, key, createDesc(1, value));\n\t} : function (object, key, value) {\n\t object[key] = value;\n\t return object;\n\t};\n\n\n/***/ },\n/* 350 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar anObject = __webpack_require__(351);\n\tvar IE8_DOM_DEFINE = __webpack_require__(353);\n\tvar toPrimitive = __webpack_require__(357);\n\tvar dP = Object.defineProperty;\n\t\n\texports.f = __webpack_require__(354) ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n\t anObject(O);\n\t P = toPrimitive(P, true);\n\t anObject(Attributes);\n\t if (IE8_DOM_DEFINE) try {\n\t return dP(O, P, Attributes);\n\t } catch (e) { /* empty */ }\n\t if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n\t if ('value' in Attributes) O[P] = Attributes.value;\n\t return O;\n\t};\n\n\n/***/ },\n/* 351 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar isObject = __webpack_require__(352);\n\tmodule.exports = function (it) {\n\t if (!isObject(it)) throw TypeError(it + ' is not an object!');\n\t return it;\n\t};\n\n\n/***/ },\n/* 352 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function (it) {\n\t return typeof it === 'object' ? it !== null : typeof it === 'function';\n\t};\n\n\n/***/ },\n/* 353 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = !__webpack_require__(354) && !__webpack_require__(355)(function () {\n\t return Object.defineProperty(__webpack_require__(356)('div'), 'a', { get: function () { return 7; } }).a != 7;\n\t});\n\n\n/***/ },\n/* 354 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// Thank's IE8 for his funny defineProperty\n\tmodule.exports = !__webpack_require__(355)(function () {\n\t return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n\t});\n\n\n/***/ },\n/* 355 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function (exec) {\n\t try {\n\t return !!exec();\n\t } catch (e) {\n\t return true;\n\t }\n\t};\n\n\n/***/ },\n/* 356 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar isObject = __webpack_require__(352);\n\tvar document = __webpack_require__(346).document;\n\t// typeof document.createElement is 'object' in old IE\n\tvar is = isObject(document) && isObject(document.createElement);\n\tmodule.exports = function (it) {\n\t return is ? document.createElement(it) : {};\n\t};\n\n\n/***/ },\n/* 357 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 7.1.1 ToPrimitive(input [, PreferredType])\n\tvar isObject = __webpack_require__(352);\n\t// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n\t// and the second argument - flag - preferred type is a string\n\tmodule.exports = function (it, S) {\n\t if (!isObject(it)) return it;\n\t var fn, val;\n\t if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n\t if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n\t if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n\t throw TypeError(\"Can't convert object to primitive value\");\n\t};\n\n\n/***/ },\n/* 358 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function (bitmap, value) {\n\t return {\n\t enumerable: !(bitmap & 1),\n\t configurable: !(bitmap & 2),\n\t writable: !(bitmap & 4),\n\t value: value\n\t };\n\t};\n\n\n/***/ },\n/* 359 */\n/***/ function(module, exports) {\n\n\tvar hasOwnProperty = {}.hasOwnProperty;\n\tmodule.exports = function (it, key) {\n\t return hasOwnProperty.call(it, key);\n\t};\n\n\n/***/ },\n/* 360 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(349);\n\n\n/***/ },\n/* 361 */\n/***/ function(module, exports) {\n\n\tmodule.exports = {};\n\n\n/***/ },\n/* 362 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar create = __webpack_require__(363);\n\tvar descriptor = __webpack_require__(358);\n\tvar setToStringTag = __webpack_require__(378);\n\tvar IteratorPrototype = {};\n\t\n\t// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n\t__webpack_require__(349)(IteratorPrototype, __webpack_require__(379)('iterator'), function () { return this; });\n\t\n\tmodule.exports = function (Constructor, NAME, next) {\n\t Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n\t setToStringTag(Constructor, NAME + ' Iterator');\n\t};\n\n\n/***/ },\n/* 363 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n\tvar anObject = __webpack_require__(351);\n\tvar dPs = __webpack_require__(364);\n\tvar enumBugKeys = __webpack_require__(376);\n\tvar IE_PROTO = __webpack_require__(373)('IE_PROTO');\n\tvar Empty = function () { /* empty */ };\n\tvar PROTOTYPE = 'prototype';\n\t\n\t// Create object with fake `null` prototype: use iframe Object with cleared prototype\n\tvar createDict = function () {\n\t // Thrash, waste and sodomy: IE GC bug\n\t var iframe = __webpack_require__(356)('iframe');\n\t var i = enumBugKeys.length;\n\t var lt = '<';\n\t var gt = '>';\n\t var iframeDocument;\n\t iframe.style.display = 'none';\n\t __webpack_require__(377).appendChild(iframe);\n\t iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n\t // createDict = iframe.contentWindow.Object;\n\t // html.removeChild(iframe);\n\t iframeDocument = iframe.contentWindow.document;\n\t iframeDocument.open();\n\t iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n\t iframeDocument.close();\n\t createDict = iframeDocument.F;\n\t while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n\t return createDict();\n\t};\n\t\n\tmodule.exports = Object.create || function create(O, Properties) {\n\t var result;\n\t if (O !== null) {\n\t Empty[PROTOTYPE] = anObject(O);\n\t result = new Empty();\n\t Empty[PROTOTYPE] = null;\n\t // add \"__proto__\" for Object.getPrototypeOf polyfill\n\t result[IE_PROTO] = O;\n\t } else result = createDict();\n\t return Properties === undefined ? result : dPs(result, Properties);\n\t};\n\n\n/***/ },\n/* 364 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar dP = __webpack_require__(350);\n\tvar anObject = __webpack_require__(351);\n\tvar getKeys = __webpack_require__(365);\n\t\n\tmodule.exports = __webpack_require__(354) ? Object.defineProperties : function defineProperties(O, Properties) {\n\t anObject(O);\n\t var keys = getKeys(Properties);\n\t var length = keys.length;\n\t var i = 0;\n\t var P;\n\t while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n\t return O;\n\t};\n\n\n/***/ },\n/* 365 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.14 / 15.2.3.14 Object.keys(O)\n\tvar $keys = __webpack_require__(366);\n\tvar enumBugKeys = __webpack_require__(376);\n\t\n\tmodule.exports = Object.keys || function keys(O) {\n\t return $keys(O, enumBugKeys);\n\t};\n\n\n/***/ },\n/* 366 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar has = __webpack_require__(359);\n\tvar toIObject = __webpack_require__(367);\n\tvar arrayIndexOf = __webpack_require__(370)(false);\n\tvar IE_PROTO = __webpack_require__(373)('IE_PROTO');\n\t\n\tmodule.exports = function (object, names) {\n\t var O = toIObject(object);\n\t var i = 0;\n\t var result = [];\n\t var key;\n\t for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n\t // Don't enum bug & hidden keys\n\t while (names.length > i) if (has(O, key = names[i++])) {\n\t ~arrayIndexOf(result, key) || result.push(key);\n\t }\n\t return result;\n\t};\n\n\n/***/ },\n/* 367 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// to indexed object, toObject with fallback for non-array-like ES3 strings\n\tvar IObject = __webpack_require__(368);\n\tvar defined = __webpack_require__(342);\n\tmodule.exports = function (it) {\n\t return IObject(defined(it));\n\t};\n\n\n/***/ },\n/* 368 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// fallback for non-array-like ES3 and non-enumerable old V8 strings\n\tvar cof = __webpack_require__(369);\n\t// eslint-disable-next-line no-prototype-builtins\n\tmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n\t return cof(it) == 'String' ? it.split('') : Object(it);\n\t};\n\n\n/***/ },\n/* 369 */\n/***/ function(module, exports) {\n\n\tvar toString = {}.toString;\n\t\n\tmodule.exports = function (it) {\n\t return toString.call(it).slice(8, -1);\n\t};\n\n\n/***/ },\n/* 370 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// false -> Array#indexOf\n\t// true -> Array#includes\n\tvar toIObject = __webpack_require__(367);\n\tvar toLength = __webpack_require__(371);\n\tvar toAbsoluteIndex = __webpack_require__(372);\n\tmodule.exports = function (IS_INCLUDES) {\n\t return function ($this, el, fromIndex) {\n\t var O = toIObject($this);\n\t var length = toLength(O.length);\n\t var index = toAbsoluteIndex(fromIndex, length);\n\t var value;\n\t // Array#includes uses SameValueZero equality algorithm\n\t // eslint-disable-next-line no-self-compare\n\t if (IS_INCLUDES && el != el) while (length > index) {\n\t value = O[index++];\n\t // eslint-disable-next-line no-self-compare\n\t if (value != value) return true;\n\t // Array#indexOf ignores holes, Array#includes - not\n\t } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n\t if (O[index] === el) return IS_INCLUDES || index || 0;\n\t } return !IS_INCLUDES && -1;\n\t };\n\t};\n\n\n/***/ },\n/* 371 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 7.1.15 ToLength\n\tvar toInteger = __webpack_require__(341);\n\tvar min = Math.min;\n\tmodule.exports = function (it) {\n\t return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n\t};\n\n\n/***/ },\n/* 372 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar toInteger = __webpack_require__(341);\n\tvar max = Math.max;\n\tvar min = Math.min;\n\tmodule.exports = function (index, length) {\n\t index = toInteger(index);\n\t return index < 0 ? max(index + length, 0) : min(index, length);\n\t};\n\n\n/***/ },\n/* 373 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar shared = __webpack_require__(374)('keys');\n\tvar uid = __webpack_require__(375);\n\tmodule.exports = function (key) {\n\t return shared[key] || (shared[key] = uid(key));\n\t};\n\n\n/***/ },\n/* 374 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar core = __webpack_require__(335);\n\tvar global = __webpack_require__(346);\n\tvar SHARED = '__core-js_shared__';\n\tvar store = global[SHARED] || (global[SHARED] = {});\n\t\n\t(module.exports = function (key, value) {\n\t return store[key] || (store[key] = value !== undefined ? value : {});\n\t})('versions', []).push({\n\t version: core.version,\n\t mode: __webpack_require__(344) ? 'pure' : 'global',\n\t copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\n\t});\n\n\n/***/ },\n/* 375 */\n/***/ function(module, exports) {\n\n\tvar id = 0;\n\tvar px = Math.random();\n\tmodule.exports = function (key) {\n\t return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n\t};\n\n\n/***/ },\n/* 376 */\n/***/ function(module, exports) {\n\n\t// IE 8- don't enum bug keys\n\tmodule.exports = (\n\t 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n\t).split(',');\n\n\n/***/ },\n/* 377 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar document = __webpack_require__(346).document;\n\tmodule.exports = document && document.documentElement;\n\n\n/***/ },\n/* 378 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar def = __webpack_require__(350).f;\n\tvar has = __webpack_require__(359);\n\tvar TAG = __webpack_require__(379)('toStringTag');\n\t\n\tmodule.exports = function (it, tag, stat) {\n\t if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n\t};\n\n\n/***/ },\n/* 379 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar store = __webpack_require__(374)('wks');\n\tvar uid = __webpack_require__(375);\n\tvar Symbol = __webpack_require__(346).Symbol;\n\tvar USE_SYMBOL = typeof Symbol == 'function';\n\t\n\tvar $exports = module.exports = function (name) {\n\t return store[name] || (store[name] =\n\t USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n\t};\n\t\n\t$exports.store = store;\n\n\n/***/ },\n/* 380 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\n\tvar has = __webpack_require__(359);\n\tvar toObject = __webpack_require__(381);\n\tvar IE_PROTO = __webpack_require__(373)('IE_PROTO');\n\tvar ObjectProto = Object.prototype;\n\t\n\tmodule.exports = Object.getPrototypeOf || function (O) {\n\t O = toObject(O);\n\t if (has(O, IE_PROTO)) return O[IE_PROTO];\n\t if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n\t return O.constructor.prototype;\n\t } return O instanceof Object ? ObjectProto : null;\n\t};\n\n\n/***/ },\n/* 381 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 7.1.13 ToObject(argument)\n\tvar defined = __webpack_require__(342);\n\tmodule.exports = function (it) {\n\t return Object(defined(it));\n\t};\n\n\n/***/ },\n/* 382 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(383);\n\tvar global = __webpack_require__(346);\n\tvar hide = __webpack_require__(349);\n\tvar Iterators = __webpack_require__(361);\n\tvar TO_STRING_TAG = __webpack_require__(379)('toStringTag');\n\t\n\tvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n\t 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n\t 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n\t 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n\t 'TextTrackList,TouchList').split(',');\n\t\n\tfor (var i = 0; i < DOMIterables.length; i++) {\n\t var NAME = DOMIterables[i];\n\t var Collection = global[NAME];\n\t var proto = Collection && Collection.prototype;\n\t if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n\t Iterators[NAME] = Iterators.Array;\n\t}\n\n\n/***/ },\n/* 383 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar addToUnscopables = __webpack_require__(384);\n\tvar step = __webpack_require__(385);\n\tvar Iterators = __webpack_require__(361);\n\tvar toIObject = __webpack_require__(367);\n\t\n\t// 22.1.3.4 Array.prototype.entries()\n\t// 22.1.3.13 Array.prototype.keys()\n\t// 22.1.3.29 Array.prototype.values()\n\t// 22.1.3.30 Array.prototype[@@iterator]()\n\tmodule.exports = __webpack_require__(343)(Array, 'Array', function (iterated, kind) {\n\t this._t = toIObject(iterated); // target\n\t this._i = 0; // next index\n\t this._k = kind; // kind\n\t// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n\t}, function () {\n\t var O = this._t;\n\t var kind = this._k;\n\t var index = this._i++;\n\t if (!O || index >= O.length) {\n\t this._t = undefined;\n\t return step(1);\n\t }\n\t if (kind == 'keys') return step(0, index);\n\t if (kind == 'values') return step(0, O[index]);\n\t return step(0, [index, O[index]]);\n\t}, 'values');\n\t\n\t// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\n\tIterators.Arguments = Iterators.Array;\n\t\n\taddToUnscopables('keys');\n\taddToUnscopables('values');\n\taddToUnscopables('entries');\n\n\n/***/ },\n/* 384 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function () { /* empty */ };\n\n\n/***/ },\n/* 385 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function (done, value) {\n\t return { value: value, done: !!done };\n\t};\n\n\n/***/ },\n/* 386 */\n/***/ function(module, exports, __webpack_require__) {\n\n\texports.f = __webpack_require__(379);\n\n\n/***/ },\n/* 387 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(388), __esModule: true };\n\n/***/ },\n/* 388 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(389);\n\t__webpack_require__(399);\n\t__webpack_require__(400);\n\t__webpack_require__(401);\n\tmodule.exports = __webpack_require__(335).Symbol;\n\n\n/***/ },\n/* 389 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t// ECMAScript 6 symbols shim\n\tvar global = __webpack_require__(346);\n\tvar has = __webpack_require__(359);\n\tvar DESCRIPTORS = __webpack_require__(354);\n\tvar $export = __webpack_require__(345);\n\tvar redefine = __webpack_require__(360);\n\tvar META = __webpack_require__(390).KEY;\n\tvar $fails = __webpack_require__(355);\n\tvar shared = __webpack_require__(374);\n\tvar setToStringTag = __webpack_require__(378);\n\tvar uid = __webpack_require__(375);\n\tvar wks = __webpack_require__(379);\n\tvar wksExt = __webpack_require__(386);\n\tvar wksDefine = __webpack_require__(391);\n\tvar enumKeys = __webpack_require__(392);\n\tvar isArray = __webpack_require__(395);\n\tvar anObject = __webpack_require__(351);\n\tvar isObject = __webpack_require__(352);\n\tvar toIObject = __webpack_require__(367);\n\tvar toPrimitive = __webpack_require__(357);\n\tvar createDesc = __webpack_require__(358);\n\tvar _create = __webpack_require__(363);\n\tvar gOPNExt = __webpack_require__(396);\n\tvar $GOPD = __webpack_require__(398);\n\tvar $DP = __webpack_require__(350);\n\tvar $keys = __webpack_require__(365);\n\tvar gOPD = $GOPD.f;\n\tvar dP = $DP.f;\n\tvar gOPN = gOPNExt.f;\n\tvar $Symbol = global.Symbol;\n\tvar $JSON = global.JSON;\n\tvar _stringify = $JSON && $JSON.stringify;\n\tvar PROTOTYPE = 'prototype';\n\tvar HIDDEN = wks('_hidden');\n\tvar TO_PRIMITIVE = wks('toPrimitive');\n\tvar isEnum = {}.propertyIsEnumerable;\n\tvar SymbolRegistry = shared('symbol-registry');\n\tvar AllSymbols = shared('symbols');\n\tvar OPSymbols = shared('op-symbols');\n\tvar ObjectProto = Object[PROTOTYPE];\n\tvar USE_NATIVE = typeof $Symbol == 'function';\n\tvar QObject = global.QObject;\n\t// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\n\tvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\t\n\t// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\n\tvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n\t return _create(dP({}, 'a', {\n\t get: function () { return dP(this, 'a', { value: 7 }).a; }\n\t })).a != 7;\n\t}) ? function (it, key, D) {\n\t var protoDesc = gOPD(ObjectProto, key);\n\t if (protoDesc) delete ObjectProto[key];\n\t dP(it, key, D);\n\t if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n\t} : dP;\n\t\n\tvar wrap = function (tag) {\n\t var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n\t sym._k = tag;\n\t return sym;\n\t};\n\t\n\tvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n\t return typeof it == 'symbol';\n\t} : function (it) {\n\t return it instanceof $Symbol;\n\t};\n\t\n\tvar $defineProperty = function defineProperty(it, key, D) {\n\t if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n\t anObject(it);\n\t key = toPrimitive(key, true);\n\t anObject(D);\n\t if (has(AllSymbols, key)) {\n\t if (!D.enumerable) {\n\t if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n\t it[HIDDEN][key] = true;\n\t } else {\n\t if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n\t D = _create(D, { enumerable: createDesc(0, false) });\n\t } return setSymbolDesc(it, key, D);\n\t } return dP(it, key, D);\n\t};\n\tvar $defineProperties = function defineProperties(it, P) {\n\t anObject(it);\n\t var keys = enumKeys(P = toIObject(P));\n\t var i = 0;\n\t var l = keys.length;\n\t var key;\n\t while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n\t return it;\n\t};\n\tvar $create = function create(it, P) {\n\t return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n\t};\n\tvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n\t var E = isEnum.call(this, key = toPrimitive(key, true));\n\t if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n\t return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n\t};\n\tvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n\t it = toIObject(it);\n\t key = toPrimitive(key, true);\n\t if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n\t var D = gOPD(it, key);\n\t if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n\t return D;\n\t};\n\tvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n\t var names = gOPN(toIObject(it));\n\t var result = [];\n\t var i = 0;\n\t var key;\n\t while (names.length > i) {\n\t if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n\t } return result;\n\t};\n\tvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n\t var IS_OP = it === ObjectProto;\n\t var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n\t var result = [];\n\t var i = 0;\n\t var key;\n\t while (names.length > i) {\n\t if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n\t } return result;\n\t};\n\t\n\t// 19.4.1.1 Symbol([description])\n\tif (!USE_NATIVE) {\n\t $Symbol = function Symbol() {\n\t if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n\t var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n\t var $set = function (value) {\n\t if (this === ObjectProto) $set.call(OPSymbols, value);\n\t if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n\t setSymbolDesc(this, tag, createDesc(1, value));\n\t };\n\t if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n\t return wrap(tag);\n\t };\n\t redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n\t return this._k;\n\t });\n\t\n\t $GOPD.f = $getOwnPropertyDescriptor;\n\t $DP.f = $defineProperty;\n\t __webpack_require__(397).f = gOPNExt.f = $getOwnPropertyNames;\n\t __webpack_require__(394).f = $propertyIsEnumerable;\n\t __webpack_require__(393).f = $getOwnPropertySymbols;\n\t\n\t if (DESCRIPTORS && !__webpack_require__(344)) {\n\t redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n\t }\n\t\n\t wksExt.f = function (name) {\n\t return wrap(wks(name));\n\t };\n\t}\n\t\n\t$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\t\n\tfor (var es6Symbols = (\n\t // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n\t 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n\t).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\t\n\tfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\t\n\t$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n\t // 19.4.2.1 Symbol.for(key)\n\t 'for': function (key) {\n\t return has(SymbolRegistry, key += '')\n\t ? SymbolRegistry[key]\n\t : SymbolRegistry[key] = $Symbol(key);\n\t },\n\t // 19.4.2.5 Symbol.keyFor(sym)\n\t keyFor: function keyFor(sym) {\n\t if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n\t for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n\t },\n\t useSetter: function () { setter = true; },\n\t useSimple: function () { setter = false; }\n\t});\n\t\n\t$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n\t // 19.1.2.2 Object.create(O [, Properties])\n\t create: $create,\n\t // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n\t defineProperty: $defineProperty,\n\t // 19.1.2.3 Object.defineProperties(O, Properties)\n\t defineProperties: $defineProperties,\n\t // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n\t getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n\t // 19.1.2.7 Object.getOwnPropertyNames(O)\n\t getOwnPropertyNames: $getOwnPropertyNames,\n\t // 19.1.2.8 Object.getOwnPropertySymbols(O)\n\t getOwnPropertySymbols: $getOwnPropertySymbols\n\t});\n\t\n\t// 24.3.2 JSON.stringify(value [, replacer [, space]])\n\t$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n\t var S = $Symbol();\n\t // MS Edge converts symbol values to JSON as {}\n\t // WebKit converts symbol values to JSON as null\n\t // V8 throws on boxed symbols\n\t return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n\t})), 'JSON', {\n\t stringify: function stringify(it) {\n\t var args = [it];\n\t var i = 1;\n\t var replacer, $replacer;\n\t while (arguments.length > i) args.push(arguments[i++]);\n\t $replacer = replacer = args[1];\n\t if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n\t if (!isArray(replacer)) replacer = function (key, value) {\n\t if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n\t if (!isSymbol(value)) return value;\n\t };\n\t args[1] = replacer;\n\t return _stringify.apply($JSON, args);\n\t }\n\t});\n\t\n\t// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n\t$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(349)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n\t// 19.4.3.5 Symbol.prototype[@@toStringTag]\n\tsetToStringTag($Symbol, 'Symbol');\n\t// 20.2.1.9 Math[@@toStringTag]\n\tsetToStringTag(Math, 'Math', true);\n\t// 24.3.3 JSON[@@toStringTag]\n\tsetToStringTag(global.JSON, 'JSON', true);\n\n\n/***/ },\n/* 390 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar META = __webpack_require__(375)('meta');\n\tvar isObject = __webpack_require__(352);\n\tvar has = __webpack_require__(359);\n\tvar setDesc = __webpack_require__(350).f;\n\tvar id = 0;\n\tvar isExtensible = Object.isExtensible || function () {\n\t return true;\n\t};\n\tvar FREEZE = !__webpack_require__(355)(function () {\n\t return isExtensible(Object.preventExtensions({}));\n\t});\n\tvar setMeta = function (it) {\n\t setDesc(it, META, { value: {\n\t i: 'O' + ++id, // object ID\n\t w: {} // weak collections IDs\n\t } });\n\t};\n\tvar fastKey = function (it, create) {\n\t // return primitive with prefix\n\t if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n\t if (!has(it, META)) {\n\t // can't set metadata to uncaught frozen object\n\t if (!isExtensible(it)) return 'F';\n\t // not necessary to add metadata\n\t if (!create) return 'E';\n\t // add missing metadata\n\t setMeta(it);\n\t // return object ID\n\t } return it[META].i;\n\t};\n\tvar getWeak = function (it, create) {\n\t if (!has(it, META)) {\n\t // can't set metadata to uncaught frozen object\n\t if (!isExtensible(it)) return true;\n\t // not necessary to add metadata\n\t if (!create) return false;\n\t // add missing metadata\n\t setMeta(it);\n\t // return hash weak collections IDs\n\t } return it[META].w;\n\t};\n\t// add metadata on freeze-family methods calling\n\tvar onFreeze = function (it) {\n\t if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n\t return it;\n\t};\n\tvar meta = module.exports = {\n\t KEY: META,\n\t NEED: false,\n\t fastKey: fastKey,\n\t getWeak: getWeak,\n\t onFreeze: onFreeze\n\t};\n\n\n/***/ },\n/* 391 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar global = __webpack_require__(346);\n\tvar core = __webpack_require__(335);\n\tvar LIBRARY = __webpack_require__(344);\n\tvar wksExt = __webpack_require__(386);\n\tvar defineProperty = __webpack_require__(350).f;\n\tmodule.exports = function (name) {\n\t var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n\t if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n\t};\n\n\n/***/ },\n/* 392 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// all enumerable object keys, includes symbols\n\tvar getKeys = __webpack_require__(365);\n\tvar gOPS = __webpack_require__(393);\n\tvar pIE = __webpack_require__(394);\n\tmodule.exports = function (it) {\n\t var result = getKeys(it);\n\t var getSymbols = gOPS.f;\n\t if (getSymbols) {\n\t var symbols = getSymbols(it);\n\t var isEnum = pIE.f;\n\t var i = 0;\n\t var key;\n\t while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n\t } return result;\n\t};\n\n\n/***/ },\n/* 393 */\n/***/ function(module, exports) {\n\n\texports.f = Object.getOwnPropertySymbols;\n\n\n/***/ },\n/* 394 */\n/***/ function(module, exports) {\n\n\texports.f = {}.propertyIsEnumerable;\n\n\n/***/ },\n/* 395 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 7.2.2 IsArray(argument)\n\tvar cof = __webpack_require__(369);\n\tmodule.exports = Array.isArray || function isArray(arg) {\n\t return cof(arg) == 'Array';\n\t};\n\n\n/***/ },\n/* 396 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\n\tvar toIObject = __webpack_require__(367);\n\tvar gOPN = __webpack_require__(397).f;\n\tvar toString = {}.toString;\n\t\n\tvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n\t ? Object.getOwnPropertyNames(window) : [];\n\t\n\tvar getWindowNames = function (it) {\n\t try {\n\t return gOPN(it);\n\t } catch (e) {\n\t return windowNames.slice();\n\t }\n\t};\n\t\n\tmodule.exports.f = function getOwnPropertyNames(it) {\n\t return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n\t};\n\n\n/***/ },\n/* 397 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\n\tvar $keys = __webpack_require__(366);\n\tvar hiddenKeys = __webpack_require__(376).concat('length', 'prototype');\n\t\n\texports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n\t return $keys(O, hiddenKeys);\n\t};\n\n\n/***/ },\n/* 398 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar pIE = __webpack_require__(394);\n\tvar createDesc = __webpack_require__(358);\n\tvar toIObject = __webpack_require__(367);\n\tvar toPrimitive = __webpack_require__(357);\n\tvar has = __webpack_require__(359);\n\tvar IE8_DOM_DEFINE = __webpack_require__(353);\n\tvar gOPD = Object.getOwnPropertyDescriptor;\n\t\n\texports.f = __webpack_require__(354) ? gOPD : function getOwnPropertyDescriptor(O, P) {\n\t O = toIObject(O);\n\t P = toPrimitive(P, true);\n\t if (IE8_DOM_DEFINE) try {\n\t return gOPD(O, P);\n\t } catch (e) { /* empty */ }\n\t if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n\t};\n\n\n/***/ },\n/* 399 */\n/***/ function(module, exports) {\n\n\n\n/***/ },\n/* 400 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(391)('asyncIterator');\n\n\n/***/ },\n/* 401 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(391)('observable');\n\n\n/***/ },\n/* 402 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**!\n\t\n\t @license\n\t handlebars v4.0.11\n\t\n\tCopyright (C) 2011-2017 by Yehuda Katz\n\t\n\tPermission is hereby granted, free of charge, to any person obtaining a copy\n\tof this software and associated documentation files (the \"Software\"), to deal\n\tin the Software without restriction, including without limitation the rights\n\tto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\tcopies of the Software, and to permit persons to whom the Software is\n\tfurnished to do so, subject to the following conditions:\n\t\n\tThe above copyright notice and this permission notice shall be included in\n\tall copies or substantial portions of the Software.\n\t\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n\tTHE SOFTWARE.\n\t\n\t*/\n\t(function webpackUniversalModuleDefinition(root, factory) {\n\t\tif(true)\n\t\t\tmodule.exports = factory();\n\t\telse if(typeof define === 'function' && define.amd)\n\t\t\tdefine([], factory);\n\t\telse if(typeof exports === 'object')\n\t\t\texports[\"Handlebars\"] = factory();\n\t\telse\n\t\t\troot[\"Handlebars\"] = factory();\n\t})(this, function() {\n\treturn /******/ (function(modules) { // webpackBootstrap\n\t/******/ \t// The module cache\n\t/******/ \tvar installedModules = {};\n\t\n\t/******/ \t// The require function\n\t/******/ \tfunction __webpack_require__(moduleId) {\n\t\n\t/******/ \t\t// Check if module is in cache\n\t/******/ \t\tif(installedModules[moduleId])\n\t/******/ \t\t\treturn installedModules[moduleId].exports;\n\t\n\t/******/ \t\t// Create a new module (and put it into the cache)\n\t/******/ \t\tvar module = installedModules[moduleId] = {\n\t/******/ \t\t\texports: {},\n\t/******/ \t\t\tid: moduleId,\n\t/******/ \t\t\tloaded: false\n\t/******/ \t\t};\n\t\n\t/******/ \t\t// Execute the module function\n\t/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\t\n\t/******/ \t\t// Flag the module as loaded\n\t/******/ \t\tmodule.loaded = true;\n\t\n\t/******/ \t\t// Return the exports of the module\n\t/******/ \t\treturn module.exports;\n\t/******/ \t}\n\t\n\t\n\t/******/ \t// expose the modules object (__webpack_modules__)\n\t/******/ \t__webpack_require__.m = modules;\n\t\n\t/******/ \t// expose the module cache\n\t/******/ \t__webpack_require__.c = installedModules;\n\t\n\t/******/ \t// __webpack_public_path__\n\t/******/ \t__webpack_require__.p = \"\";\n\t\n\t/******/ \t// Load entry module and return exports\n\t/******/ \treturn __webpack_require__(0);\n\t/******/ })\n\t/************************************************************************/\n\t/******/ ([\n\t/* 0 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\t\n\t\texports.__esModule = true;\n\t\n\t\tvar _handlebarsRuntime = __webpack_require__(2);\n\t\n\t\tvar _handlebarsRuntime2 = _interopRequireDefault(_handlebarsRuntime);\n\t\n\t\t// Compiler imports\n\t\n\t\tvar _handlebarsCompilerAst = __webpack_require__(35);\n\t\n\t\tvar _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst);\n\t\n\t\tvar _handlebarsCompilerBase = __webpack_require__(36);\n\t\n\t\tvar _handlebarsCompilerCompiler = __webpack_require__(41);\n\t\n\t\tvar _handlebarsCompilerJavascriptCompiler = __webpack_require__(42);\n\t\n\t\tvar _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler);\n\t\n\t\tvar _handlebarsCompilerVisitor = __webpack_require__(39);\n\t\n\t\tvar _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor);\n\t\n\t\tvar _handlebarsNoConflict = __webpack_require__(34);\n\t\n\t\tvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\t\n\t\tvar _create = _handlebarsRuntime2['default'].create;\n\t\tfunction create() {\n\t\t var hb = _create();\n\t\n\t\t hb.compile = function (input, options) {\n\t\t return _handlebarsCompilerCompiler.compile(input, options, hb);\n\t\t };\n\t\t hb.precompile = function (input, options) {\n\t\t return _handlebarsCompilerCompiler.precompile(input, options, hb);\n\t\t };\n\t\n\t\t hb.AST = _handlebarsCompilerAst2['default'];\n\t\t hb.Compiler = _handlebarsCompilerCompiler.Compiler;\n\t\t hb.JavaScriptCompiler = _handlebarsCompilerJavascriptCompiler2['default'];\n\t\t hb.Parser = _handlebarsCompilerBase.parser;\n\t\t hb.parse = _handlebarsCompilerBase.parse;\n\t\n\t\t return hb;\n\t\t}\n\t\n\t\tvar inst = create();\n\t\tinst.create = create;\n\t\n\t\t_handlebarsNoConflict2['default'](inst);\n\t\n\t\tinst.Visitor = _handlebarsCompilerVisitor2['default'];\n\t\n\t\tinst['default'] = inst;\n\t\n\t\texports['default'] = inst;\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ }),\n\t/* 1 */\n\t/***/ (function(module, exports) {\n\t\n\t\t\"use strict\";\n\t\n\t\texports[\"default\"] = function (obj) {\n\t\t return obj && obj.__esModule ? obj : {\n\t\t \"default\": obj\n\t\t };\n\t\t};\n\t\n\t\texports.__esModule = true;\n\t\n\t/***/ }),\n\t/* 2 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\tvar _interopRequireWildcard = __webpack_require__(3)['default'];\n\t\n\t\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\t\n\t\texports.__esModule = true;\n\t\n\t\tvar _handlebarsBase = __webpack_require__(4);\n\t\n\t\tvar base = _interopRequireWildcard(_handlebarsBase);\n\t\n\t\t// Each of these augment the Handlebars object. No need to setup here.\n\t\t// (This is done to easily share code between commonjs and browse envs)\n\t\n\t\tvar _handlebarsSafeString = __webpack_require__(21);\n\t\n\t\tvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\t\n\t\tvar _handlebarsException = __webpack_require__(6);\n\t\n\t\tvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\t\n\t\tvar _handlebarsUtils = __webpack_require__(5);\n\t\n\t\tvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\t\n\t\tvar _handlebarsRuntime = __webpack_require__(22);\n\t\n\t\tvar runtime = _interopRequireWildcard(_handlebarsRuntime);\n\t\n\t\tvar _handlebarsNoConflict = __webpack_require__(34);\n\t\n\t\tvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\t\n\t\t// For compatibility and usage outside of module systems, make the Handlebars object a namespace\n\t\tfunction create() {\n\t\t var hb = new base.HandlebarsEnvironment();\n\t\n\t\t Utils.extend(hb, base);\n\t\t hb.SafeString = _handlebarsSafeString2['default'];\n\t\t hb.Exception = _handlebarsException2['default'];\n\t\t hb.Utils = Utils;\n\t\t hb.escapeExpression = Utils.escapeExpression;\n\t\n\t\t hb.VM = runtime;\n\t\t hb.template = function (spec) {\n\t\t return runtime.template(spec, hb);\n\t\t };\n\t\n\t\t return hb;\n\t\t}\n\t\n\t\tvar inst = create();\n\t\tinst.create = create;\n\t\n\t\t_handlebarsNoConflict2['default'](inst);\n\t\n\t\tinst['default'] = inst;\n\t\n\t\texports['default'] = inst;\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ }),\n\t/* 3 */\n\t/***/ (function(module, exports) {\n\t\n\t\t\"use strict\";\n\t\n\t\texports[\"default\"] = function (obj) {\n\t\t if (obj && obj.__esModule) {\n\t\t return obj;\n\t\t } else {\n\t\t var newObj = {};\n\t\n\t\t if (obj != null) {\n\t\t for (var key in obj) {\n\t\t if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n\t\t }\n\t\t }\n\t\n\t\t newObj[\"default\"] = obj;\n\t\t return newObj;\n\t\t }\n\t\t};\n\t\n\t\texports.__esModule = true;\n\t\n\t/***/ }),\n\t/* 4 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\t\n\t\texports.__esModule = true;\n\t\texports.HandlebarsEnvironment = HandlebarsEnvironment;\n\t\n\t\tvar _utils = __webpack_require__(5);\n\t\n\t\tvar _exception = __webpack_require__(6);\n\t\n\t\tvar _exception2 = _interopRequireDefault(_exception);\n\t\n\t\tvar _helpers = __webpack_require__(10);\n\t\n\t\tvar _decorators = __webpack_require__(18);\n\t\n\t\tvar _logger = __webpack_require__(20);\n\t\n\t\tvar _logger2 = _interopRequireDefault(_logger);\n\t\n\t\tvar VERSION = '4.0.11';\n\t\texports.VERSION = VERSION;\n\t\tvar COMPILER_REVISION = 7;\n\t\n\t\texports.COMPILER_REVISION = COMPILER_REVISION;\n\t\tvar REVISION_CHANGES = {\n\t\t 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n\t\t 2: '== 1.0.0-rc.3',\n\t\t 3: '== 1.0.0-rc.4',\n\t\t 4: '== 1.x.x',\n\t\t 5: '== 2.0.0-alpha.x',\n\t\t 6: '>= 2.0.0-beta.1',\n\t\t 7: '>= 4.0.0'\n\t\t};\n\t\n\t\texports.REVISION_CHANGES = REVISION_CHANGES;\n\t\tvar objectType = '[object Object]';\n\t\n\t\tfunction HandlebarsEnvironment(helpers, partials, decorators) {\n\t\t this.helpers = helpers || {};\n\t\t this.partials = partials || {};\n\t\t this.decorators = decorators || {};\n\t\n\t\t _helpers.registerDefaultHelpers(this);\n\t\t _decorators.registerDefaultDecorators(this);\n\t\t}\n\t\n\t\tHandlebarsEnvironment.prototype = {\n\t\t constructor: HandlebarsEnvironment,\n\t\n\t\t logger: _logger2['default'],\n\t\t log: _logger2['default'].log,\n\t\n\t\t registerHelper: function registerHelper(name, fn) {\n\t\t if (_utils.toString.call(name) === objectType) {\n\t\t if (fn) {\n\t\t throw new _exception2['default']('Arg not supported with multiple helpers');\n\t\t }\n\t\t _utils.extend(this.helpers, name);\n\t\t } else {\n\t\t this.helpers[name] = fn;\n\t\t }\n\t\t },\n\t\t unregisterHelper: function unregisterHelper(name) {\n\t\t delete this.helpers[name];\n\t\t },\n\t\n\t\t registerPartial: function registerPartial(name, partial) {\n\t\t if (_utils.toString.call(name) === objectType) {\n\t\t _utils.extend(this.partials, name);\n\t\t } else {\n\t\t if (typeof partial === 'undefined') {\n\t\t throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n\t\t }\n\t\t this.partials[name] = partial;\n\t\t }\n\t\t },\n\t\t unregisterPartial: function unregisterPartial(name) {\n\t\t delete this.partials[name];\n\t\t },\n\t\n\t\t registerDecorator: function registerDecorator(name, fn) {\n\t\t if (_utils.toString.call(name) === objectType) {\n\t\t if (fn) {\n\t\t throw new _exception2['default']('Arg not supported with multiple decorators');\n\t\t }\n\t\t _utils.extend(this.decorators, name);\n\t\t } else {\n\t\t this.decorators[name] = fn;\n\t\t }\n\t\t },\n\t\t unregisterDecorator: function unregisterDecorator(name) {\n\t\t delete this.decorators[name];\n\t\t }\n\t\t};\n\t\n\t\tvar log = _logger2['default'].log;\n\t\n\t\texports.log = log;\n\t\texports.createFrame = _utils.createFrame;\n\t\texports.logger = _logger2['default'];\n\t\n\t/***/ }),\n\t/* 5 */\n\t/***/ (function(module, exports) {\n\t\n\t\t'use strict';\n\t\n\t\texports.__esModule = true;\n\t\texports.extend = extend;\n\t\texports.indexOf = indexOf;\n\t\texports.escapeExpression = escapeExpression;\n\t\texports.isEmpty = isEmpty;\n\t\texports.createFrame = createFrame;\n\t\texports.blockParams = blockParams;\n\t\texports.appendContextPath = appendContextPath;\n\t\tvar escape = {\n\t\t '&': '&',\n\t\t '<': '<',\n\t\t '>': '>',\n\t\t '\"': '"',\n\t\t \"'\": ''',\n\t\t '`': '`',\n\t\t '=': '='\n\t\t};\n\t\n\t\tvar badChars = /[&<>\"'`=]/g,\n\t\t possible = /[&<>\"'`=]/;\n\t\n\t\tfunction escapeChar(chr) {\n\t\t return escape[chr];\n\t\t}\n\t\n\t\tfunction extend(obj /* , ...source */) {\n\t\t for (var i = 1; i < arguments.length; i++) {\n\t\t for (var key in arguments[i]) {\n\t\t if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n\t\t obj[key] = arguments[i][key];\n\t\t }\n\t\t }\n\t\t }\n\t\n\t\t return obj;\n\t\t}\n\t\n\t\tvar toString = Object.prototype.toString;\n\t\n\t\texports.toString = toString;\n\t\t// Sourced from lodash\n\t\t// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n\t\t/* eslint-disable func-style */\n\t\tvar isFunction = function isFunction(value) {\n\t\t return typeof value === 'function';\n\t\t};\n\t\t// fallback for older versions of Chrome and Safari\n\t\t/* istanbul ignore next */\n\t\tif (isFunction(/x/)) {\n\t\t exports.isFunction = isFunction = function (value) {\n\t\t return typeof value === 'function' && toString.call(value) === '[object Function]';\n\t\t };\n\t\t}\n\t\texports.isFunction = isFunction;\n\t\n\t\t/* eslint-enable func-style */\n\t\n\t\t/* istanbul ignore next */\n\t\tvar isArray = Array.isArray || function (value) {\n\t\t return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n\t\t};\n\t\n\t\texports.isArray = isArray;\n\t\t// Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\t\n\t\tfunction indexOf(array, value) {\n\t\t for (var i = 0, len = array.length; i < len; i++) {\n\t\t if (array[i] === value) {\n\t\t return i;\n\t\t }\n\t\t }\n\t\t return -1;\n\t\t}\n\t\n\t\tfunction escapeExpression(string) {\n\t\t if (typeof string !== 'string') {\n\t\t // don't escape SafeStrings, since they're already safe\n\t\t if (string && string.toHTML) {\n\t\t return string.toHTML();\n\t\t } else if (string == null) {\n\t\t return '';\n\t\t } else if (!string) {\n\t\t return string + '';\n\t\t }\n\t\n\t\t // Force a string conversion as this will be done by the append regardless and\n\t\t // the regex test will do this transparently behind the scenes, causing issues if\n\t\t // an object's to string has escaped characters in it.\n\t\t string = '' + string;\n\t\t }\n\t\n\t\t if (!possible.test(string)) {\n\t\t return string;\n\t\t }\n\t\t return string.replace(badChars, escapeChar);\n\t\t}\n\t\n\t\tfunction isEmpty(value) {\n\t\t if (!value && value !== 0) {\n\t\t return true;\n\t\t } else if (isArray(value) && value.length === 0) {\n\t\t return true;\n\t\t } else {\n\t\t return false;\n\t\t }\n\t\t}\n\t\n\t\tfunction createFrame(object) {\n\t\t var frame = extend({}, object);\n\t\t frame._parent = object;\n\t\t return frame;\n\t\t}\n\t\n\t\tfunction blockParams(params, ids) {\n\t\t params.path = ids;\n\t\t return params;\n\t\t}\n\t\n\t\tfunction appendContextPath(contextPath, id) {\n\t\t return (contextPath ? contextPath + '.' : '') + id;\n\t\t}\n\t\n\t/***/ }),\n\t/* 6 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\tvar _Object$defineProperty = __webpack_require__(7)['default'];\n\t\n\t\texports.__esModule = true;\n\t\n\t\tvar errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];\n\t\n\t\tfunction Exception(message, node) {\n\t\t var loc = node && node.loc,\n\t\t line = undefined,\n\t\t column = undefined;\n\t\t if (loc) {\n\t\t line = loc.start.line;\n\t\t column = loc.start.column;\n\t\n\t\t message += ' - ' + line + ':' + column;\n\t\t }\n\t\n\t\t var tmp = Error.prototype.constructor.call(this, message);\n\t\n\t\t // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n\t\t for (var idx = 0; idx < errorProps.length; idx++) {\n\t\t this[errorProps[idx]] = tmp[errorProps[idx]];\n\t\t }\n\t\n\t\t /* istanbul ignore else */\n\t\t if (Error.captureStackTrace) {\n\t\t Error.captureStackTrace(this, Exception);\n\t\t }\n\t\n\t\t try {\n\t\t if (loc) {\n\t\t this.lineNumber = line;\n\t\n\t\t // Work around issue under safari where we can't directly set the column value\n\t\t /* istanbul ignore next */\n\t\t if (_Object$defineProperty) {\n\t\t Object.defineProperty(this, 'column', {\n\t\t value: column,\n\t\t enumerable: true\n\t\t });\n\t\t } else {\n\t\t this.column = column;\n\t\t }\n\t\t }\n\t\t } catch (nop) {\n\t\t /* Ignore if the browser is very particular */\n\t\t }\n\t\t}\n\t\n\t\tException.prototype = new Error();\n\t\n\t\texports['default'] = Exception;\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ }),\n\t/* 7 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\tmodule.exports = { \"default\": __webpack_require__(8), __esModule: true };\n\t\n\t/***/ }),\n\t/* 8 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\tvar $ = __webpack_require__(9);\n\t\tmodule.exports = function defineProperty(it, key, desc){\n\t\t return $.setDesc(it, key, desc);\n\t\t};\n\t\n\t/***/ }),\n\t/* 9 */\n\t/***/ (function(module, exports) {\n\t\n\t\tvar $Object = Object;\n\t\tmodule.exports = {\n\t\t create: $Object.create,\n\t\t getProto: $Object.getPrototypeOf,\n\t\t isEnum: {}.propertyIsEnumerable,\n\t\t getDesc: $Object.getOwnPropertyDescriptor,\n\t\t setDesc: $Object.defineProperty,\n\t\t setDescs: $Object.defineProperties,\n\t\t getKeys: $Object.keys,\n\t\t getNames: $Object.getOwnPropertyNames,\n\t\t getSymbols: $Object.getOwnPropertySymbols,\n\t\t each: [].forEach\n\t\t};\n\t\n\t/***/ }),\n\t/* 10 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\t\n\t\texports.__esModule = true;\n\t\texports.registerDefaultHelpers = registerDefaultHelpers;\n\t\n\t\tvar _helpersBlockHelperMissing = __webpack_require__(11);\n\t\n\t\tvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\t\n\t\tvar _helpersEach = __webpack_require__(12);\n\t\n\t\tvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\t\n\t\tvar _helpersHelperMissing = __webpack_require__(13);\n\t\n\t\tvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\t\n\t\tvar _helpersIf = __webpack_require__(14);\n\t\n\t\tvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\t\n\t\tvar _helpersLog = __webpack_require__(15);\n\t\n\t\tvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\t\n\t\tvar _helpersLookup = __webpack_require__(16);\n\t\n\t\tvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\t\n\t\tvar _helpersWith = __webpack_require__(17);\n\t\n\t\tvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\t\n\t\tfunction registerDefaultHelpers(instance) {\n\t\t _helpersBlockHelperMissing2['default'](instance);\n\t\t _helpersEach2['default'](instance);\n\t\t _helpersHelperMissing2['default'](instance);\n\t\t _helpersIf2['default'](instance);\n\t\t _helpersLog2['default'](instance);\n\t\t _helpersLookup2['default'](instance);\n\t\t _helpersWith2['default'](instance);\n\t\t}\n\t\n\t/***/ }),\n\t/* 11 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\texports.__esModule = true;\n\t\n\t\tvar _utils = __webpack_require__(5);\n\t\n\t\texports['default'] = function (instance) {\n\t\t instance.registerHelper('blockHelperMissing', function (context, options) {\n\t\t var inverse = options.inverse,\n\t\t fn = options.fn;\n\t\n\t\t if (context === true) {\n\t\t return fn(this);\n\t\t } else if (context === false || context == null) {\n\t\t return inverse(this);\n\t\t } else if (_utils.isArray(context)) {\n\t\t if (context.length > 0) {\n\t\t if (options.ids) {\n\t\t options.ids = [options.name];\n\t\t }\n\t\n\t\t return instance.helpers.each(context, options);\n\t\t } else {\n\t\t return inverse(this);\n\t\t }\n\t\t } else {\n\t\t if (options.data && options.ids) {\n\t\t var data = _utils.createFrame(options.data);\n\t\t data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n\t\t options = { data: data };\n\t\t }\n\t\n\t\t return fn(context, options);\n\t\t }\n\t\t });\n\t\t};\n\t\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ }),\n\t/* 12 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\t\n\t\texports.__esModule = true;\n\t\n\t\tvar _utils = __webpack_require__(5);\n\t\n\t\tvar _exception = __webpack_require__(6);\n\t\n\t\tvar _exception2 = _interopRequireDefault(_exception);\n\t\n\t\texports['default'] = function (instance) {\n\t\t instance.registerHelper('each', function (context, options) {\n\t\t if (!options) {\n\t\t throw new _exception2['default']('Must pass iterator to #each');\n\t\t }\n\t\n\t\t var fn = options.fn,\n\t\t inverse = options.inverse,\n\t\t i = 0,\n\t\t ret = '',\n\t\t data = undefined,\n\t\t contextPath = undefined;\n\t\n\t\t if (options.data && options.ids) {\n\t\t contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n\t\t }\n\t\n\t\t if (_utils.isFunction(context)) {\n\t\t context = context.call(this);\n\t\t }\n\t\n\t\t if (options.data) {\n\t\t data = _utils.createFrame(options.data);\n\t\t }\n\t\n\t\t function execIteration(field, index, last) {\n\t\t if (data) {\n\t\t data.key = field;\n\t\t data.index = index;\n\t\t data.first = index === 0;\n\t\t data.last = !!last;\n\t\n\t\t if (contextPath) {\n\t\t data.contextPath = contextPath + field;\n\t\t }\n\t\t }\n\t\n\t\t ret = ret + fn(context[field], {\n\t\t data: data,\n\t\t blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n\t\t });\n\t\t }\n\t\n\t\t if (context && typeof context === 'object') {\n\t\t if (_utils.isArray(context)) {\n\t\t for (var j = context.length; i < j; i++) {\n\t\t if (i in context) {\n\t\t execIteration(i, i, i === context.length - 1);\n\t\t }\n\t\t }\n\t\t } else {\n\t\t var priorKey = undefined;\n\t\n\t\t for (var key in context) {\n\t\t if (context.hasOwnProperty(key)) {\n\t\t // We're running the iterations one step out of sync so we can detect\n\t\t // the last iteration without have to scan the object twice and create\n\t\t // an itermediate keys array.\n\t\t if (priorKey !== undefined) {\n\t\t execIteration(priorKey, i - 1);\n\t\t }\n\t\t priorKey = key;\n\t\t i++;\n\t\t }\n\t\t }\n\t\t if (priorKey !== undefined) {\n\t\t execIteration(priorKey, i - 1, true);\n\t\t }\n\t\t }\n\t\t }\n\t\n\t\t if (i === 0) {\n\t\t ret = inverse(this);\n\t\t }\n\t\n\t\t return ret;\n\t\t });\n\t\t};\n\t\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ }),\n\t/* 13 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\t\n\t\texports.__esModule = true;\n\t\n\t\tvar _exception = __webpack_require__(6);\n\t\n\t\tvar _exception2 = _interopRequireDefault(_exception);\n\t\n\t\texports['default'] = function (instance) {\n\t\t instance.registerHelper('helperMissing', function () /* [args, ]options */{\n\t\t if (arguments.length === 1) {\n\t\t // A missing field in a {{foo}} construct.\n\t\t return undefined;\n\t\t } else {\n\t\t // Someone is actually trying to call something, blow up.\n\t\t throw new _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n\t\t }\n\t\t });\n\t\t};\n\t\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ }),\n\t/* 14 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\texports.__esModule = true;\n\t\n\t\tvar _utils = __webpack_require__(5);\n\t\n\t\texports['default'] = function (instance) {\n\t\t instance.registerHelper('if', function (conditional, options) {\n\t\t if (_utils.isFunction(conditional)) {\n\t\t conditional = conditional.call(this);\n\t\t }\n\t\n\t\t // Default behavior is to render the positive path if the value is truthy and not empty.\n\t\t // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n\t\t // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n\t\t if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n\t\t return options.inverse(this);\n\t\t } else {\n\t\t return options.fn(this);\n\t\t }\n\t\t });\n\t\n\t\t instance.registerHelper('unless', function (conditional, options) {\n\t\t return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash });\n\t\t });\n\t\t};\n\t\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ }),\n\t/* 15 */\n\t/***/ (function(module, exports) {\n\t\n\t\t'use strict';\n\t\n\t\texports.__esModule = true;\n\t\n\t\texports['default'] = function (instance) {\n\t\t instance.registerHelper('log', function () /* message, options */{\n\t\t var args = [undefined],\n\t\t options = arguments[arguments.length - 1];\n\t\t for (var i = 0; i < arguments.length - 1; i++) {\n\t\t args.push(arguments[i]);\n\t\t }\n\t\n\t\t var level = 1;\n\t\t if (options.hash.level != null) {\n\t\t level = options.hash.level;\n\t\t } else if (options.data && options.data.level != null) {\n\t\t level = options.data.level;\n\t\t }\n\t\t args[0] = level;\n\t\n\t\t instance.log.apply(instance, args);\n\t\t });\n\t\t};\n\t\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ }),\n\t/* 16 */\n\t/***/ (function(module, exports) {\n\t\n\t\t'use strict';\n\t\n\t\texports.__esModule = true;\n\t\n\t\texports['default'] = function (instance) {\n\t\t instance.registerHelper('lookup', function (obj, field) {\n\t\t return obj && obj[field];\n\t\t });\n\t\t};\n\t\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ }),\n\t/* 17 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\texports.__esModule = true;\n\t\n\t\tvar _utils = __webpack_require__(5);\n\t\n\t\texports['default'] = function (instance) {\n\t\t instance.registerHelper('with', function (context, options) {\n\t\t if (_utils.isFunction(context)) {\n\t\t context = context.call(this);\n\t\t }\n\t\n\t\t var fn = options.fn;\n\t\n\t\t if (!_utils.isEmpty(context)) {\n\t\t var data = options.data;\n\t\t if (options.data && options.ids) {\n\t\t data = _utils.createFrame(options.data);\n\t\t data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n\t\t }\n\t\n\t\t return fn(context, {\n\t\t data: data,\n\t\t blockParams: _utils.blockParams([context], [data && data.contextPath])\n\t\t });\n\t\t } else {\n\t\t return options.inverse(this);\n\t\t }\n\t\t });\n\t\t};\n\t\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ }),\n\t/* 18 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\t\n\t\texports.__esModule = true;\n\t\texports.registerDefaultDecorators = registerDefaultDecorators;\n\t\n\t\tvar _decoratorsInline = __webpack_require__(19);\n\t\n\t\tvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\t\n\t\tfunction registerDefaultDecorators(instance) {\n\t\t _decoratorsInline2['default'](instance);\n\t\t}\n\t\n\t/***/ }),\n\t/* 19 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\texports.__esModule = true;\n\t\n\t\tvar _utils = __webpack_require__(5);\n\t\n\t\texports['default'] = function (instance) {\n\t\t instance.registerDecorator('inline', function (fn, props, container, options) {\n\t\t var ret = fn;\n\t\t if (!props.partials) {\n\t\t props.partials = {};\n\t\t ret = function (context, options) {\n\t\t // Create a new partials stack frame prior to exec.\n\t\t var original = container.partials;\n\t\t container.partials = _utils.extend({}, original, props.partials);\n\t\t var ret = fn(context, options);\n\t\t container.partials = original;\n\t\t return ret;\n\t\t };\n\t\t }\n\t\n\t\t props.partials[options.args[0]] = options.fn;\n\t\n\t\t return ret;\n\t\t });\n\t\t};\n\t\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ }),\n\t/* 20 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\texports.__esModule = true;\n\t\n\t\tvar _utils = __webpack_require__(5);\n\t\n\t\tvar logger = {\n\t\t methodMap: ['debug', 'info', 'warn', 'error'],\n\t\t level: 'info',\n\t\n\t\t // Maps a given level value to the `methodMap` indexes above.\n\t\t lookupLevel: function lookupLevel(level) {\n\t\t if (typeof level === 'string') {\n\t\t var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n\t\t if (levelMap >= 0) {\n\t\t level = levelMap;\n\t\t } else {\n\t\t level = parseInt(level, 10);\n\t\t }\n\t\t }\n\t\n\t\t return level;\n\t\t },\n\t\n\t\t // Can be overridden in the host environment\n\t\t log: function log(level) {\n\t\t level = logger.lookupLevel(level);\n\t\n\t\t if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n\t\t var method = logger.methodMap[level];\n\t\t if (!console[method]) {\n\t\t // eslint-disable-line no-console\n\t\t method = 'log';\n\t\t }\n\t\n\t\t for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\t message[_key - 1] = arguments[_key];\n\t\t }\n\t\n\t\t console[method].apply(console, message); // eslint-disable-line no-console\n\t\t }\n\t\t }\n\t\t};\n\t\n\t\texports['default'] = logger;\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ }),\n\t/* 21 */\n\t/***/ (function(module, exports) {\n\t\n\t\t// Build out our basic SafeString type\n\t\t'use strict';\n\t\n\t\texports.__esModule = true;\n\t\tfunction SafeString(string) {\n\t\t this.string = string;\n\t\t}\n\t\n\t\tSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n\t\t return '' + this.string;\n\t\t};\n\t\n\t\texports['default'] = SafeString;\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ }),\n\t/* 22 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\tvar _Object$seal = __webpack_require__(23)['default'];\n\t\n\t\tvar _interopRequireWildcard = __webpack_require__(3)['default'];\n\t\n\t\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\t\n\t\texports.__esModule = true;\n\t\texports.checkRevision = checkRevision;\n\t\texports.template = template;\n\t\texports.wrapProgram = wrapProgram;\n\t\texports.resolvePartial = resolvePartial;\n\t\texports.invokePartial = invokePartial;\n\t\texports.noop = noop;\n\t\n\t\tvar _utils = __webpack_require__(5);\n\t\n\t\tvar Utils = _interopRequireWildcard(_utils);\n\t\n\t\tvar _exception = __webpack_require__(6);\n\t\n\t\tvar _exception2 = _interopRequireDefault(_exception);\n\t\n\t\tvar _base = __webpack_require__(4);\n\t\n\t\tfunction checkRevision(compilerInfo) {\n\t\t var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n\t\t currentRevision = _base.COMPILER_REVISION;\n\t\n\t\t if (compilerRevision !== currentRevision) {\n\t\t if (compilerRevision < currentRevision) {\n\t\t var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n\t\t compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n\t\t throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n\t\t } else {\n\t\t // Use the embedded version info since the runtime doesn't know about this revision yet\n\t\t throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n\t\t }\n\t\t }\n\t\t}\n\t\n\t\tfunction template(templateSpec, env) {\n\t\t /* istanbul ignore next */\n\t\t if (!env) {\n\t\t throw new _exception2['default']('No environment passed to template');\n\t\t }\n\t\t if (!templateSpec || !templateSpec.main) {\n\t\t throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);\n\t\t }\n\t\n\t\t templateSpec.main.decorator = templateSpec.main_d;\n\t\n\t\t // Note: Using env.VM references rather than local var references throughout this section to allow\n\t\t // for external users to override these as psuedo-supported APIs.\n\t\t env.VM.checkRevision(templateSpec.compiler);\n\t\n\t\t function invokePartialWrapper(partial, context, options) {\n\t\t if (options.hash) {\n\t\t context = Utils.extend({}, context, options.hash);\n\t\t if (options.ids) {\n\t\t options.ids[0] = true;\n\t\t }\n\t\t }\n\t\n\t\t partial = env.VM.resolvePartial.call(this, partial, context, options);\n\t\t var result = env.VM.invokePartial.call(this, partial, context, options);\n\t\n\t\t if (result == null && env.compile) {\n\t\t options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n\t\t result = options.partials[options.name](context, options);\n\t\t }\n\t\t if (result != null) {\n\t\t if (options.indent) {\n\t\t var lines = result.split('\\n');\n\t\t for (var i = 0, l = lines.length; i < l; i++) {\n\t\t if (!lines[i] && i + 1 === l) {\n\t\t break;\n\t\t }\n\t\n\t\t lines[i] = options.indent + lines[i];\n\t\t }\n\t\t result = lines.join('\\n');\n\t\t }\n\t\t return result;\n\t\t } else {\n\t\t throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n\t\t }\n\t\t }\n\t\n\t\t // Just add water\n\t\t var container = {\n\t\t strict: function strict(obj, name) {\n\t\t if (!(name in obj)) {\n\t\t throw new _exception2['default']('\"' + name + '\" not defined in ' + obj);\n\t\t }\n\t\t return obj[name];\n\t\t },\n\t\t lookup: function lookup(depths, name) {\n\t\t var len = depths.length;\n\t\t for (var i = 0; i < len; i++) {\n\t\t if (depths[i] && depths[i][name] != null) {\n\t\t return depths[i][name];\n\t\t }\n\t\t }\n\t\t },\n\t\t lambda: function lambda(current, context) {\n\t\t return typeof current === 'function' ? current.call(context) : current;\n\t\t },\n\t\n\t\t escapeExpression: Utils.escapeExpression,\n\t\t invokePartial: invokePartialWrapper,\n\t\n\t\t fn: function fn(i) {\n\t\t var ret = templateSpec[i];\n\t\t ret.decorator = templateSpec[i + '_d'];\n\t\t return ret;\n\t\t },\n\t\n\t\t programs: [],\n\t\t program: function program(i, data, declaredBlockParams, blockParams, depths) {\n\t\t var programWrapper = this.programs[i],\n\t\t fn = this.fn(i);\n\t\t if (data || depths || blockParams || declaredBlockParams) {\n\t\t programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n\t\t } else if (!programWrapper) {\n\t\t programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n\t\t }\n\t\t return programWrapper;\n\t\t },\n\t\n\t\t data: function data(value, depth) {\n\t\t while (value && depth--) {\n\t\t value = value._parent;\n\t\t }\n\t\t return value;\n\t\t },\n\t\t merge: function merge(param, common) {\n\t\t var obj = param || common;\n\t\n\t\t if (param && common && param !== common) {\n\t\t obj = Utils.extend({}, common, param);\n\t\t }\n\t\n\t\t return obj;\n\t\t },\n\t\t // An empty object to use as replacement for null-contexts\n\t\t nullContext: _Object$seal({}),\n\t\n\t\t noop: env.VM.noop,\n\t\t compilerInfo: templateSpec.compiler\n\t\t };\n\t\n\t\t function ret(context) {\n\t\t var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\t\n\t\t var data = options.data;\n\t\n\t\t ret._setup(options);\n\t\t if (!options.partial && templateSpec.useData) {\n\t\t data = initData(context, data);\n\t\t }\n\t\t var depths = undefined,\n\t\t blockParams = templateSpec.useBlockParams ? [] : undefined;\n\t\t if (templateSpec.useDepths) {\n\t\t if (options.depths) {\n\t\t depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n\t\t } else {\n\t\t depths = [context];\n\t\t }\n\t\t }\n\t\n\t\t function main(context /*, options*/) {\n\t\t return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n\t\t }\n\t\t main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n\t\t return main(context, options);\n\t\t }\n\t\t ret.isTop = true;\n\t\n\t\t ret._setup = function (options) {\n\t\t if (!options.partial) {\n\t\t container.helpers = container.merge(options.helpers, env.helpers);\n\t\n\t\t if (templateSpec.usePartial) {\n\t\t container.partials = container.merge(options.partials, env.partials);\n\t\t }\n\t\t if (templateSpec.usePartial || templateSpec.useDecorators) {\n\t\t container.decorators = container.merge(options.decorators, env.decorators);\n\t\t }\n\t\t } else {\n\t\t container.helpers = options.helpers;\n\t\t container.partials = options.partials;\n\t\t container.decorators = options.decorators;\n\t\t }\n\t\t };\n\t\n\t\t ret._child = function (i, data, blockParams, depths) {\n\t\t if (templateSpec.useBlockParams && !blockParams) {\n\t\t throw new _exception2['default']('must pass block params');\n\t\t }\n\t\t if (templateSpec.useDepths && !depths) {\n\t\t throw new _exception2['default']('must pass parent depths');\n\t\t }\n\t\n\t\t return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n\t\t };\n\t\t return ret;\n\t\t}\n\t\n\t\tfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n\t\t function prog(context) {\n\t\t var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\t\n\t\t var currentDepths = depths;\n\t\t if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n\t\t currentDepths = [context].concat(depths);\n\t\t }\n\t\n\t\t return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n\t\t }\n\t\n\t\t prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\t\n\t\t prog.program = i;\n\t\t prog.depth = depths ? depths.length : 0;\n\t\t prog.blockParams = declaredBlockParams || 0;\n\t\t return prog;\n\t\t}\n\t\n\t\tfunction resolvePartial(partial, context, options) {\n\t\t if (!partial) {\n\t\t if (options.name === '@partial-block') {\n\t\t partial = options.data['partial-block'];\n\t\t } else {\n\t\t partial = options.partials[options.name];\n\t\t }\n\t\t } else if (!partial.call && !options.name) {\n\t\t // This is a dynamic partial that returned a string\n\t\t options.name = partial;\n\t\t partial = options.partials[partial];\n\t\t }\n\t\t return partial;\n\t\t}\n\t\n\t\tfunction invokePartial(partial, context, options) {\n\t\t // Use the current closure context to save the partial-block if this partial\n\t\t var currentPartialBlock = options.data && options.data['partial-block'];\n\t\t options.partial = true;\n\t\t if (options.ids) {\n\t\t options.data.contextPath = options.ids[0] || options.data.contextPath;\n\t\t }\n\t\n\t\t var partialBlock = undefined;\n\t\t if (options.fn && options.fn !== noop) {\n\t\t (function () {\n\t\t options.data = _base.createFrame(options.data);\n\t\t // Wrapper function to get access to currentPartialBlock from the closure\n\t\t var fn = options.fn;\n\t\t partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {\n\t\t var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\t\n\t\t // Restore the partial-block from the closure for the execution of the block\n\t\t // i.e. the part inside the block of the partial call.\n\t\t options.data = _base.createFrame(options.data);\n\t\t options.data['partial-block'] = currentPartialBlock;\n\t\t return fn(context, options);\n\t\t };\n\t\t if (fn.partials) {\n\t\t options.partials = Utils.extend({}, options.partials, fn.partials);\n\t\t }\n\t\t })();\n\t\t }\n\t\n\t\t if (partial === undefined && partialBlock) {\n\t\t partial = partialBlock;\n\t\t }\n\t\n\t\t if (partial === undefined) {\n\t\t throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n\t\t } else if (partial instanceof Function) {\n\t\t return partial(context, options);\n\t\t }\n\t\t}\n\t\n\t\tfunction noop() {\n\t\t return '';\n\t\t}\n\t\n\t\tfunction initData(context, data) {\n\t\t if (!data || !('root' in data)) {\n\t\t data = data ? _base.createFrame(data) : {};\n\t\t data.root = context;\n\t\t }\n\t\t return data;\n\t\t}\n\t\n\t\tfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n\t\t if (fn.decorator) {\n\t\t var props = {};\n\t\t prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n\t\t Utils.extend(prog, props);\n\t\t }\n\t\t return prog;\n\t\t}\n\t\n\t/***/ }),\n\t/* 23 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\tmodule.exports = { \"default\": __webpack_require__(24), __esModule: true };\n\t\n\t/***/ }),\n\t/* 24 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t__webpack_require__(25);\n\t\tmodule.exports = __webpack_require__(30).Object.seal;\n\t\n\t/***/ }),\n\t/* 25 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t// 19.1.2.17 Object.seal(O)\n\t\tvar isObject = __webpack_require__(26);\n\t\n\t\t__webpack_require__(27)('seal', function($seal){\n\t\t return function seal(it){\n\t\t return $seal && isObject(it) ? $seal(it) : it;\n\t\t };\n\t\t});\n\t\n\t/***/ }),\n\t/* 26 */\n\t/***/ (function(module, exports) {\n\t\n\t\tmodule.exports = function(it){\n\t\t return typeof it === 'object' ? it !== null : typeof it === 'function';\n\t\t};\n\t\n\t/***/ }),\n\t/* 27 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t// most Object methods by ES6 should accept primitives\n\t\tvar $export = __webpack_require__(28)\n\t\t , core = __webpack_require__(30)\n\t\t , fails = __webpack_require__(33);\n\t\tmodule.exports = function(KEY, exec){\n\t\t var fn = (core.Object || {})[KEY] || Object[KEY]\n\t\t , exp = {};\n\t\t exp[KEY] = exec(fn);\n\t\t $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n\t\t};\n\t\n\t/***/ }),\n\t/* 28 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\tvar global = __webpack_require__(29)\n\t\t , core = __webpack_require__(30)\n\t\t , ctx = __webpack_require__(31)\n\t\t , PROTOTYPE = 'prototype';\n\t\n\t\tvar $export = function(type, name, source){\n\t\t var IS_FORCED = type & $export.F\n\t\t , IS_GLOBAL = type & $export.G\n\t\t , IS_STATIC = type & $export.S\n\t\t , IS_PROTO = type & $export.P\n\t\t , IS_BIND = type & $export.B\n\t\t , IS_WRAP = type & $export.W\n\t\t , exports = IS_GLOBAL ? core : core[name] || (core[name] = {})\n\t\t , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\n\t\t , key, own, out;\n\t\t if(IS_GLOBAL)source = name;\n\t\t for(key in source){\n\t\t // contains in native\n\t\t own = !IS_FORCED && target && key in target;\n\t\t if(own && key in exports)continue;\n\t\t // export native or passed\n\t\t out = own ? target[key] : source[key];\n\t\t // prevent global pollution for namespaces\n\t\t exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n\t\t // bind timers to global for call from export context\n\t\t : IS_BIND && own ? ctx(out, global)\n\t\t // wrap global constructors for prevent change them in library\n\t\t : IS_WRAP && target[key] == out ? (function(C){\n\t\t var F = function(param){\n\t\t return this instanceof C ? new C(param) : C(param);\n\t\t };\n\t\t F[PROTOTYPE] = C[PROTOTYPE];\n\t\t return F;\n\t\t // make static versions for prototype methods\n\t\t })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n\t\t if(IS_PROTO)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out;\n\t\t }\n\t\t};\n\t\t// type bitmap\n\t\t$export.F = 1; // forced\n\t\t$export.G = 2; // global\n\t\t$export.S = 4; // static\n\t\t$export.P = 8; // proto\n\t\t$export.B = 16; // bind\n\t\t$export.W = 32; // wrap\n\t\tmodule.exports = $export;\n\t\n\t/***/ }),\n\t/* 29 */\n\t/***/ (function(module, exports) {\n\t\n\t\t// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\n\t\tvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n\t\t ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\n\t\tif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n\t\n\t/***/ }),\n\t/* 30 */\n\t/***/ (function(module, exports) {\n\t\n\t\tvar core = module.exports = {version: '1.2.6'};\n\t\tif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n\t\n\t/***/ }),\n\t/* 31 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t// optional / simple context binding\n\t\tvar aFunction = __webpack_require__(32);\n\t\tmodule.exports = function(fn, that, length){\n\t\t aFunction(fn);\n\t\t if(that === undefined)return fn;\n\t\t switch(length){\n\t\t case 1: return function(a){\n\t\t return fn.call(that, a);\n\t\t };\n\t\t case 2: return function(a, b){\n\t\t return fn.call(that, a, b);\n\t\t };\n\t\t case 3: return function(a, b, c){\n\t\t return fn.call(that, a, b, c);\n\t\t };\n\t\t }\n\t\t return function(/* ...args */){\n\t\t return fn.apply(that, arguments);\n\t\t };\n\t\t};\n\t\n\t/***/ }),\n\t/* 32 */\n\t/***/ (function(module, exports) {\n\t\n\t\tmodule.exports = function(it){\n\t\t if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n\t\t return it;\n\t\t};\n\t\n\t/***/ }),\n\t/* 33 */\n\t/***/ (function(module, exports) {\n\t\n\t\tmodule.exports = function(exec){\n\t\t try {\n\t\t return !!exec();\n\t\t } catch(e){\n\t\t return true;\n\t\t }\n\t\t};\n\t\n\t/***/ }),\n\t/* 34 */\n\t/***/ (function(module, exports) {\n\t\n\t\t/* WEBPACK VAR INJECTION */(function(global) {/* global window */\n\t\t'use strict';\n\t\n\t\texports.__esModule = true;\n\t\n\t\texports['default'] = function (Handlebars) {\n\t\t /* istanbul ignore next */\n\t\t var root = typeof global !== 'undefined' ? global : window,\n\t\t $Handlebars = root.Handlebars;\n\t\t /* istanbul ignore next */\n\t\t Handlebars.noConflict = function () {\n\t\t if (root.Handlebars === Handlebars) {\n\t\t root.Handlebars = $Handlebars;\n\t\t }\n\t\t return Handlebars;\n\t\t };\n\t\t};\n\t\n\t\tmodule.exports = exports['default'];\n\t\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\t\n\t/***/ }),\n\t/* 35 */\n\t/***/ (function(module, exports) {\n\t\n\t\t'use strict';\n\t\n\t\texports.__esModule = true;\n\t\tvar AST = {\n\t\t // Public API used to evaluate derived attributes regarding AST nodes\n\t\t helpers: {\n\t\t // a mustache is definitely a helper if:\n\t\t // * it is an eligible helper, and\n\t\t // * it has at least one parameter or hash segment\n\t\t helperExpression: function helperExpression(node) {\n\t\t return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash);\n\t\t },\n\t\n\t\t scopedId: function scopedId(path) {\n\t\t return (/^\\.|this\\b/.test(path.original)\n\t\t );\n\t\t },\n\t\n\t\t // an ID is simple if it only has one part, and that part is not\n\t\t // `..` or `this`.\n\t\t simpleId: function simpleId(path) {\n\t\t return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth;\n\t\t }\n\t\t }\n\t\t};\n\t\n\t\t// Must be exported as an object rather than the root of the module as the jison lexer\n\t\t// must modify the object to operate properly.\n\t\texports['default'] = AST;\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ }),\n\t/* 36 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\t\n\t\tvar _interopRequireWildcard = __webpack_require__(3)['default'];\n\t\n\t\texports.__esModule = true;\n\t\texports.parse = parse;\n\t\n\t\tvar _parser = __webpack_require__(37);\n\t\n\t\tvar _parser2 = _interopRequireDefault(_parser);\n\t\n\t\tvar _whitespaceControl = __webpack_require__(38);\n\t\n\t\tvar _whitespaceControl2 = _interopRequireDefault(_whitespaceControl);\n\t\n\t\tvar _helpers = __webpack_require__(40);\n\t\n\t\tvar Helpers = _interopRequireWildcard(_helpers);\n\t\n\t\tvar _utils = __webpack_require__(5);\n\t\n\t\texports.parser = _parser2['default'];\n\t\n\t\tvar yy = {};\n\t\t_utils.extend(yy, Helpers);\n\t\n\t\tfunction parse(input, options) {\n\t\t // Just return if an already-compiled AST was passed in.\n\t\t if (input.type === 'Program') {\n\t\t return input;\n\t\t }\n\t\n\t\t _parser2['default'].yy = yy;\n\t\n\t\t // Altering the shared object here, but this is ok as parser is a sync operation\n\t\t yy.locInfo = function (locInfo) {\n\t\t return new yy.SourceLocation(options && options.srcName, locInfo);\n\t\t };\n\t\n\t\t var strip = new _whitespaceControl2['default'](options);\n\t\t return strip.accept(_parser2['default'].parse(input));\n\t\t}\n\t\n\t/***/ }),\n\t/* 37 */\n\t/***/ (function(module, exports) {\n\t\n\t\t// File ignored in coverage tests via setting in .istanbul.yml\n\t\t/* Jison generated parser */\n\t\t\"use strict\";\n\t\n\t\texports.__esModule = true;\n\t\tvar handlebars = (function () {\n\t\t var parser = { trace: function trace() {},\n\t\t yy: {},\n\t\t symbols_: { \"error\": 2, \"root\": 3, \"program\": 4, \"EOF\": 5, \"program_repetition0\": 6, \"statement\": 7, \"mustache\": 8, \"block\": 9, \"rawBlock\": 10, \"partial\": 11, \"partialBlock\": 12, \"content\": 13, \"COMMENT\": 14, \"CONTENT\": 15, \"openRawBlock\": 16, \"rawBlock_repetition_plus0\": 17, \"END_RAW_BLOCK\": 18, \"OPEN_RAW_BLOCK\": 19, \"helperName\": 20, \"openRawBlock_repetition0\": 21, \"openRawBlock_option0\": 22, \"CLOSE_RAW_BLOCK\": 23, \"openBlock\": 24, \"block_option0\": 25, \"closeBlock\": 26, \"openInverse\": 27, \"block_option1\": 28, \"OPEN_BLOCK\": 29, \"openBlock_repetition0\": 30, \"openBlock_option0\": 31, \"openBlock_option1\": 32, \"CLOSE\": 33, \"OPEN_INVERSE\": 34, \"openInverse_repetition0\": 35, \"openInverse_option0\": 36, \"openInverse_option1\": 37, \"openInverseChain\": 38, \"OPEN_INVERSE_CHAIN\": 39, \"openInverseChain_repetition0\": 40, \"openInverseChain_option0\": 41, \"openInverseChain_option1\": 42, \"inverseAndProgram\": 43, \"INVERSE\": 44, \"inverseChain\": 45, \"inverseChain_option0\": 46, \"OPEN_ENDBLOCK\": 47, \"OPEN\": 48, \"mustache_repetition0\": 49, \"mustache_option0\": 50, \"OPEN_UNESCAPED\": 51, \"mustache_repetition1\": 52, \"mustache_option1\": 53, \"CLOSE_UNESCAPED\": 54, \"OPEN_PARTIAL\": 55, \"partialName\": 56, \"partial_repetition0\": 57, \"partial_option0\": 58, \"openPartialBlock\": 59, \"OPEN_PARTIAL_BLOCK\": 60, \"openPartialBlock_repetition0\": 61, \"openPartialBlock_option0\": 62, \"param\": 63, \"sexpr\": 64, \"OPEN_SEXPR\": 65, \"sexpr_repetition0\": 66, \"sexpr_option0\": 67, \"CLOSE_SEXPR\": 68, \"hash\": 69, \"hash_repetition_plus0\": 70, \"hashSegment\": 71, \"ID\": 72, \"EQUALS\": 73, \"blockParams\": 74, \"OPEN_BLOCK_PARAMS\": 75, \"blockParams_repetition_plus0\": 76, \"CLOSE_BLOCK_PARAMS\": 77, \"path\": 78, \"dataName\": 79, \"STRING\": 80, \"NUMBER\": 81, \"BOOLEAN\": 82, \"UNDEFINED\": 83, \"NULL\": 84, \"DATA\": 85, \"pathSegments\": 86, \"SEP\": 87, \"$accept\": 0, \"$end\": 1 },\n\t\t terminals_: { 2: \"error\", 5: \"EOF\", 14: \"COMMENT\", 15: \"CONTENT\", 18: \"END_RAW_BLOCK\", 19: \"OPEN_RAW_BLOCK\", 23: \"CLOSE_RAW_BLOCK\", 29: \"OPEN_BLOCK\", 33: \"CLOSE\", 34: \"OPEN_INVERSE\", 39: \"OPEN_INVERSE_CHAIN\", 44: \"INVERSE\", 47: \"OPEN_ENDBLOCK\", 48: \"OPEN\", 51: \"OPEN_UNESCAPED\", 54: \"CLOSE_UNESCAPED\", 55: \"OPEN_PARTIAL\", 60: \"OPEN_PARTIAL_BLOCK\", 65: \"OPEN_SEXPR\", 68: \"CLOSE_SEXPR\", 72: \"ID\", 73: \"EQUALS\", 75: \"OPEN_BLOCK_PARAMS\", 77: \"CLOSE_BLOCK_PARAMS\", 80: \"STRING\", 81: \"NUMBER\", 82: \"BOOLEAN\", 83: \"UNDEFINED\", 84: \"NULL\", 85: \"DATA\", 87: \"SEP\" },\n\t\t productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 1], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]],\n\t\t performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$\n\t\t /**/) {\n\t\n\t\t var $0 = $$.length - 1;\n\t\t switch (yystate) {\n\t\t case 1:\n\t\t return $$[$0 - 1];\n\t\t break;\n\t\t case 2:\n\t\t this.$ = yy.prepareProgram($$[$0]);\n\t\t break;\n\t\t case 3:\n\t\t this.$ = $$[$0];\n\t\t break;\n\t\t case 4:\n\t\t this.$ = $$[$0];\n\t\t break;\n\t\t case 5:\n\t\t this.$ = $$[$0];\n\t\t break;\n\t\t case 6:\n\t\t this.$ = $$[$0];\n\t\t break;\n\t\t case 7:\n\t\t this.$ = $$[$0];\n\t\t break;\n\t\t case 8:\n\t\t this.$ = $$[$0];\n\t\t break;\n\t\t case 9:\n\t\t this.$ = {\n\t\t type: 'CommentStatement',\n\t\t value: yy.stripComment($$[$0]),\n\t\t strip: yy.stripFlags($$[$0], $$[$0]),\n\t\t loc: yy.locInfo(this._$)\n\t\t };\n\t\n\t\t break;\n\t\t case 10:\n\t\t this.$ = {\n\t\t type: 'ContentStatement',\n\t\t original: $$[$0],\n\t\t value: $$[$0],\n\t\t loc: yy.locInfo(this._$)\n\t\t };\n\t\n\t\t break;\n\t\t case 11:\n\t\t this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n\t\t break;\n\t\t case 12:\n\t\t this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] };\n\t\t break;\n\t\t case 13:\n\t\t this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$);\n\t\t break;\n\t\t case 14:\n\t\t this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$);\n\t\t break;\n\t\t case 15:\n\t\t this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n\t\t break;\n\t\t case 16:\n\t\t this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n\t\t break;\n\t\t case 17:\n\t\t this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n\t\t break;\n\t\t case 18:\n\t\t this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] };\n\t\t break;\n\t\t case 19:\n\t\t var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$),\n\t\t program = yy.prepareProgram([inverse], $$[$0 - 1].loc);\n\t\t program.chained = true;\n\t\n\t\t this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true };\n\t\n\t\t break;\n\t\t case 20:\n\t\t this.$ = $$[$0];\n\t\t break;\n\t\t case 21:\n\t\t this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) };\n\t\t break;\n\t\t case 22:\n\t\t this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n\t\t break;\n\t\t case 23:\n\t\t this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n\t\t break;\n\t\t case 24:\n\t\t this.$ = {\n\t\t type: 'PartialStatement',\n\t\t name: $$[$0 - 3],\n\t\t params: $$[$0 - 2],\n\t\t hash: $$[$0 - 1],\n\t\t indent: '',\n\t\t strip: yy.stripFlags($$[$0 - 4], $$[$0]),\n\t\t loc: yy.locInfo(this._$)\n\t\t };\n\t\n\t\t break;\n\t\t case 25:\n\t\t this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n\t\t break;\n\t\t case 26:\n\t\t this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) };\n\t\t break;\n\t\t case 27:\n\t\t this.$ = $$[$0];\n\t\t break;\n\t\t case 28:\n\t\t this.$ = $$[$0];\n\t\t break;\n\t\t case 29:\n\t\t this.$ = {\n\t\t type: 'SubExpression',\n\t\t path: $$[$0 - 3],\n\t\t params: $$[$0 - 2],\n\t\t hash: $$[$0 - 1],\n\t\t loc: yy.locInfo(this._$)\n\t\t };\n\t\n\t\t break;\n\t\t case 30:\n\t\t this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) };\n\t\t break;\n\t\t case 31:\n\t\t this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) };\n\t\t break;\n\t\t case 32:\n\t\t this.$ = yy.id($$[$0 - 1]);\n\t\t break;\n\t\t case 33:\n\t\t this.$ = $$[$0];\n\t\t break;\n\t\t case 34:\n\t\t this.$ = $$[$0];\n\t\t break;\n\t\t case 35:\n\t\t this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) };\n\t\t break;\n\t\t case 36:\n\t\t this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) };\n\t\t break;\n\t\t case 37:\n\t\t this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) };\n\t\t break;\n\t\t case 38:\n\t\t this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) };\n\t\t break;\n\t\t case 39:\n\t\t this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) };\n\t\t break;\n\t\t case 40:\n\t\t this.$ = $$[$0];\n\t\t break;\n\t\t case 41:\n\t\t this.$ = $$[$0];\n\t\t break;\n\t\t case 42:\n\t\t this.$ = yy.preparePath(true, $$[$0], this._$);\n\t\t break;\n\t\t case 43:\n\t\t this.$ = yy.preparePath(false, $$[$0], this._$);\n\t\t break;\n\t\t case 44:\n\t\t $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2];\n\t\t break;\n\t\t case 45:\n\t\t this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }];\n\t\t break;\n\t\t case 46:\n\t\t this.$ = [];\n\t\t break;\n\t\t case 47:\n\t\t $$[$0 - 1].push($$[$0]);\n\t\t break;\n\t\t case 48:\n\t\t this.$ = [$$[$0]];\n\t\t break;\n\t\t case 49:\n\t\t $$[$0 - 1].push($$[$0]);\n\t\t break;\n\t\t case 50:\n\t\t this.$ = [];\n\t\t break;\n\t\t case 51:\n\t\t $$[$0 - 1].push($$[$0]);\n\t\t break;\n\t\t case 58:\n\t\t this.$ = [];\n\t\t break;\n\t\t case 59:\n\t\t $$[$0 - 1].push($$[$0]);\n\t\t break;\n\t\t case 64:\n\t\t this.$ = [];\n\t\t break;\n\t\t case 65:\n\t\t $$[$0 - 1].push($$[$0]);\n\t\t break;\n\t\t case 70:\n\t\t this.$ = [];\n\t\t break;\n\t\t case 71:\n\t\t $$[$0 - 1].push($$[$0]);\n\t\t break;\n\t\t case 78:\n\t\t this.$ = [];\n\t\t break;\n\t\t case 79:\n\t\t $$[$0 - 1].push($$[$0]);\n\t\t break;\n\t\t case 82:\n\t\t this.$ = [];\n\t\t break;\n\t\t case 83:\n\t\t $$[$0 - 1].push($$[$0]);\n\t\t break;\n\t\t case 86:\n\t\t this.$ = [];\n\t\t break;\n\t\t case 87:\n\t\t $$[$0 - 1].push($$[$0]);\n\t\t break;\n\t\t case 90:\n\t\t this.$ = [];\n\t\t break;\n\t\t case 91:\n\t\t $$[$0 - 1].push($$[$0]);\n\t\t break;\n\t\t case 94:\n\t\t this.$ = [];\n\t\t break;\n\t\t case 95:\n\t\t $$[$0 - 1].push($$[$0]);\n\t\t break;\n\t\t case 98:\n\t\t this.$ = [$$[$0]];\n\t\t break;\n\t\t case 99:\n\t\t $$[$0 - 1].push($$[$0]);\n\t\t break;\n\t\t case 100:\n\t\t this.$ = [$$[$0]];\n\t\t break;\n\t\t case 101:\n\t\t $$[$0 - 1].push($$[$0]);\n\t\t break;\n\t\t }\n\t\t },\n\t\t table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 13: 40, 15: [1, 20], 17: 39 }, { 20: 42, 56: 41, 64: 43, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 45, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 48, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 42, 56: 49, 64: 43, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 50, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 51] }, { 72: [1, 35], 86: 52 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 53, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 54, 38: 56, 39: [1, 58], 43: 57, 44: [1, 59], 45: 55, 47: [2, 54] }, { 28: 60, 43: 61, 44: [1, 59], 47: [2, 56] }, { 13: 63, 15: [1, 20], 18: [1, 62] }, { 15: [2, 48], 18: [2, 48] }, { 33: [2, 86], 57: 64, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 65, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 66, 47: [1, 67] }, { 30: 68, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 69, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 70, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 71, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 75, 33: [2, 80], 50: 72, 63: 73, 64: 76, 65: [1, 44], 69: 74, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 80] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 51] }, { 20: 75, 53: 81, 54: [2, 84], 63: 82, 64: 76, 65: [1, 44], 69: 83, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 84, 47: [1, 67] }, { 47: [2, 55] }, { 4: 85, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 86, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 87, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 88, 47: [1, 67] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 75, 33: [2, 88], 58: 89, 63: 90, 64: 76, 65: [1, 44], 69: 91, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 92, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 93, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 31: 94, 33: [2, 60], 63: 95, 64: 76, 65: [1, 44], 69: 96, 70: 77, 71: 78, 72: [1, 79], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 33: [2, 66], 36: 97, 63: 98, 64: 76, 65: [1, 44], 69: 99, 70: 77, 71: 78, 72: [1, 79], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 22: 100, 23: [2, 52], 63: 101, 64: 76, 65: [1, 44], 69: 102, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 33: [2, 92], 62: 103, 63: 104, 64: 76, 65: [1, 44], 69: 105, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 106] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 107, 72: [1, 108], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 109], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 110] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 56, 39: [1, 58], 43: 57, 44: [1, 59], 45: 112, 46: 111, 47: [2, 76] }, { 33: [2, 70], 40: 113, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 114] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 75, 63: 116, 64: 76, 65: [1, 44], 67: 115, 68: [2, 96], 69: 117, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 118] }, { 32: 119, 33: [2, 62], 74: 120, 75: [1, 121] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 122, 74: 123, 75: [1, 121] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 124] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 125] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 109] }, { 20: 75, 63: 126, 64: 76, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 75, 33: [2, 72], 41: 127, 63: 128, 64: 76, 65: [1, 44], 69: 129, 70: 77, 71: 78, 72: [1, 79], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 130] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 131] }, { 33: [2, 63] }, { 72: [1, 133], 76: 132 }, { 33: [1, 134] }, { 33: [2, 69] }, { 15: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 135, 74: 136, 75: [1, 121] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 138], 77: [1, 137] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 139] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }],\n\t\t defaultActions: { 4: [2, 1], 55: [2, 55], 57: [2, 20], 61: [2, 57], 74: [2, 81], 83: [2, 85], 87: [2, 18], 91: [2, 89], 102: [2, 53], 105: [2, 93], 111: [2, 19], 112: [2, 77], 117: [2, 97], 120: [2, 63], 123: [2, 69], 124: [2, 12], 136: [2, 75], 137: [2, 32] },\n\t\t parseError: function parseError(str, hash) {\n\t\t throw new Error(str);\n\t\t },\n\t\t parse: function parse(input) {\n\t\t var self = this,\n\t\t stack = [0],\n\t\t vstack = [null],\n\t\t lstack = [],\n\t\t table = this.table,\n\t\t yytext = \"\",\n\t\t yylineno = 0,\n\t\t yyleng = 0,\n\t\t recovering = 0,\n\t\t TERROR = 2,\n\t\t EOF = 1;\n\t\t this.lexer.setInput(input);\n\t\t this.lexer.yy = this.yy;\n\t\t this.yy.lexer = this.lexer;\n\t\t this.yy.parser = this;\n\t\t if (typeof this.lexer.yylloc == \"undefined\") this.lexer.yylloc = {};\n\t\t var yyloc = this.lexer.yylloc;\n\t\t lstack.push(yyloc);\n\t\t var ranges = this.lexer.options && this.lexer.options.ranges;\n\t\t if (typeof this.yy.parseError === \"function\") this.parseError = this.yy.parseError;\n\t\t function popStack(n) {\n\t\t stack.length = stack.length - 2 * n;\n\t\t vstack.length = vstack.length - n;\n\t\t lstack.length = lstack.length - n;\n\t\t }\n\t\t function lex() {\n\t\t var token;\n\t\t token = self.lexer.lex() || 1;\n\t\t if (typeof token !== \"number\") {\n\t\t token = self.symbols_[token] || token;\n\t\t }\n\t\t return token;\n\t\t }\n\t\t var symbol,\n\t\t preErrorSymbol,\n\t\t state,\n\t\t action,\n\t\t a,\n\t\t r,\n\t\t yyval = {},\n\t\t p,\n\t\t len,\n\t\t newState,\n\t\t expected;\n\t\t while (true) {\n\t\t state = stack[stack.length - 1];\n\t\t if (this.defaultActions[state]) {\n\t\t action = this.defaultActions[state];\n\t\t } else {\n\t\t if (symbol === null || typeof symbol == \"undefined\") {\n\t\t symbol = lex();\n\t\t }\n\t\t action = table[state] && table[state][symbol];\n\t\t }\n\t\t if (typeof action === \"undefined\" || !action.length || !action[0]) {\n\t\t var errStr = \"\";\n\t\t if (!recovering) {\n\t\t expected = [];\n\t\t for (p in table[state]) if (this.terminals_[p] && p > 2) {\n\t\t expected.push(\"'\" + this.terminals_[p] + \"'\");\n\t\t }\n\t\t if (this.lexer.showPosition) {\n\t\t errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + this.lexer.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n\t\t } else {\n\t\t errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == 1 ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t\t }\n\t\t this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected });\n\t\t }\n\t\t }\n\t\t if (action[0] instanceof Array && action.length > 1) {\n\t\t throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n\t\t }\n\t\t switch (action[0]) {\n\t\t case 1:\n\t\t stack.push(symbol);\n\t\t vstack.push(this.lexer.yytext);\n\t\t lstack.push(this.lexer.yylloc);\n\t\t stack.push(action[1]);\n\t\t symbol = null;\n\t\t if (!preErrorSymbol) {\n\t\t yyleng = this.lexer.yyleng;\n\t\t yytext = this.lexer.yytext;\n\t\t yylineno = this.lexer.yylineno;\n\t\t yyloc = this.lexer.yylloc;\n\t\t if (recovering > 0) recovering--;\n\t\t } else {\n\t\t symbol = preErrorSymbol;\n\t\t preErrorSymbol = null;\n\t\t }\n\t\t break;\n\t\t case 2:\n\t\t len = this.productions_[action[1]][1];\n\t\t yyval.$ = vstack[vstack.length - len];\n\t\t yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column };\n\t\t if (ranges) {\n\t\t yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t\t }\n\t\t r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n\t\t if (typeof r !== \"undefined\") {\n\t\t return r;\n\t\t }\n\t\t if (len) {\n\t\t stack = stack.slice(0, -1 * len * 2);\n\t\t vstack = vstack.slice(0, -1 * len);\n\t\t lstack = lstack.slice(0, -1 * len);\n\t\t }\n\t\t stack.push(this.productions_[action[1]][0]);\n\t\t vstack.push(yyval.$);\n\t\t lstack.push(yyval._$);\n\t\t newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t\t stack.push(newState);\n\t\t break;\n\t\t case 3:\n\t\t return true;\n\t\t }\n\t\t }\n\t\t return true;\n\t\t }\n\t\t };\n\t\t /* Jison generated lexer */\n\t\t var lexer = (function () {\n\t\t var lexer = { EOF: 1,\n\t\t parseError: function parseError(str, hash) {\n\t\t if (this.yy.parser) {\n\t\t this.yy.parser.parseError(str, hash);\n\t\t } else {\n\t\t throw new Error(str);\n\t\t }\n\t\t },\n\t\t setInput: function setInput(input) {\n\t\t this._input = input;\n\t\t this._more = this._less = this.done = false;\n\t\t this.yylineno = this.yyleng = 0;\n\t\t this.yytext = this.matched = this.match = '';\n\t\t this.conditionStack = ['INITIAL'];\n\t\t this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 };\n\t\t if (this.options.ranges) this.yylloc.range = [0, 0];\n\t\t this.offset = 0;\n\t\t return this;\n\t\t },\n\t\t input: function input() {\n\t\t var ch = this._input[0];\n\t\t this.yytext += ch;\n\t\t this.yyleng++;\n\t\t this.offset++;\n\t\t this.match += ch;\n\t\t this.matched += ch;\n\t\t var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t\t if (lines) {\n\t\t this.yylineno++;\n\t\t this.yylloc.last_line++;\n\t\t } else {\n\t\t this.yylloc.last_column++;\n\t\t }\n\t\t if (this.options.ranges) this.yylloc.range[1]++;\n\t\n\t\t this._input = this._input.slice(1);\n\t\t return ch;\n\t\t },\n\t\t unput: function unput(ch) {\n\t\t var len = ch.length;\n\t\t var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\t\n\t\t this._input = ch + this._input;\n\t\t this.yytext = this.yytext.substr(0, this.yytext.length - len - 1);\n\t\t //this.yyleng -= len;\n\t\t this.offset -= len;\n\t\t var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t\t this.match = this.match.substr(0, this.match.length - 1);\n\t\t this.matched = this.matched.substr(0, this.matched.length - 1);\n\t\n\t\t if (lines.length - 1) this.yylineno -= lines.length - 1;\n\t\t var r = this.yylloc.range;\n\t\n\t\t this.yylloc = { first_line: this.yylloc.first_line,\n\t\t last_line: this.yylineno + 1,\n\t\t first_column: this.yylloc.first_column,\n\t\t last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n\t\t };\n\t\n\t\t if (this.options.ranges) {\n\t\t this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t\t }\n\t\t return this;\n\t\t },\n\t\t more: function more() {\n\t\t this._more = true;\n\t\t return this;\n\t\t },\n\t\t less: function less(n) {\n\t\t this.unput(this.match.slice(n));\n\t\t },\n\t\t pastInput: function pastInput() {\n\t\t var past = this.matched.substr(0, this.matched.length - this.match.length);\n\t\t return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, \"\");\n\t\t },\n\t\t upcomingInput: function upcomingInput() {\n\t\t var next = this.match;\n\t\t if (next.length < 20) {\n\t\t next += this._input.substr(0, 20 - next.length);\n\t\t }\n\t\t return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n\t\t },\n\t\t showPosition: function showPosition() {\n\t\t var pre = this.pastInput();\n\t\t var c = new Array(pre.length + 1).join(\"-\");\n\t\t return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n\t\t },\n\t\t next: function next() {\n\t\t if (this.done) {\n\t\t return this.EOF;\n\t\t }\n\t\t if (!this._input) this.done = true;\n\t\n\t\t var token, match, tempMatch, index, col, lines;\n\t\t if (!this._more) {\n\t\t this.yytext = '';\n\t\t this.match = '';\n\t\t }\n\t\t var rules = this._currentRules();\n\t\t for (var i = 0; i < rules.length; i++) {\n\t\t tempMatch = this._input.match(this.rules[rules[i]]);\n\t\t if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t\t match = tempMatch;\n\t\t index = i;\n\t\t if (!this.options.flex) break;\n\t\t }\n\t\t }\n\t\t if (match) {\n\t\t lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t\t if (lines) this.yylineno += lines.length;\n\t\t this.yylloc = { first_line: this.yylloc.last_line,\n\t\t last_line: this.yylineno + 1,\n\t\t first_column: this.yylloc.last_column,\n\t\t last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length };\n\t\t this.yytext += match[0];\n\t\t this.match += match[0];\n\t\t this.matches = match;\n\t\t this.yyleng = this.yytext.length;\n\t\t if (this.options.ranges) {\n\t\t this.yylloc.range = [this.offset, this.offset += this.yyleng];\n\t\t }\n\t\t this._more = false;\n\t\t this._input = this._input.slice(match[0].length);\n\t\t this.matched += match[0];\n\t\t token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]);\n\t\t if (this.done && this._input) this.done = false;\n\t\t if (token) return token;else return;\n\t\t }\n\t\t if (this._input === \"\") {\n\t\t return this.EOF;\n\t\t } else {\n\t\t return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), { text: \"\", token: null, line: this.yylineno });\n\t\t }\n\t\t },\n\t\t lex: function lex() {\n\t\t var r = this.next();\n\t\t if (typeof r !== 'undefined') {\n\t\t return r;\n\t\t } else {\n\t\t return this.lex();\n\t\t }\n\t\t },\n\t\t begin: function begin(condition) {\n\t\t this.conditionStack.push(condition);\n\t\t },\n\t\t popState: function popState() {\n\t\t return this.conditionStack.pop();\n\t\t },\n\t\t _currentRules: function _currentRules() {\n\t\t return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t\t },\n\t\t topState: function topState() {\n\t\t return this.conditionStack[this.conditionStack.length - 2];\n\t\t },\n\t\t pushState: function begin(condition) {\n\t\t this.begin(condition);\n\t\t } };\n\t\t lexer.options = {};\n\t\t lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START\n\t\t /**/) {\n\t\n\t\t function strip(start, end) {\n\t\t return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng - end);\n\t\t }\n\t\n\t\t var YYSTATE = YY_START;\n\t\t switch ($avoiding_name_collisions) {\n\t\t case 0:\n\t\t if (yy_.yytext.slice(-2) === \"\\\\\\\\\") {\n\t\t strip(0, 1);\n\t\t this.begin(\"mu\");\n\t\t } else if (yy_.yytext.slice(-1) === \"\\\\\") {\n\t\t strip(0, 1);\n\t\t this.begin(\"emu\");\n\t\t } else {\n\t\t this.begin(\"mu\");\n\t\t }\n\t\t if (yy_.yytext) return 15;\n\t\n\t\t break;\n\t\t case 1:\n\t\t return 15;\n\t\t break;\n\t\t case 2:\n\t\t this.popState();\n\t\t return 15;\n\t\n\t\t break;\n\t\t case 3:\n\t\t this.begin('raw');return 15;\n\t\t break;\n\t\t case 4:\n\t\t this.popState();\n\t\t // Should be using `this.topState()` below, but it currently\n\t\t // returns the second top instead of the first top. Opened an\n\t\t // issue about it at https://github.com/zaach/jison/issues/291\n\t\t if (this.conditionStack[this.conditionStack.length - 1] === 'raw') {\n\t\t return 15;\n\t\t } else {\n\t\t yy_.yytext = yy_.yytext.substr(5, yy_.yyleng - 9);\n\t\t return 'END_RAW_BLOCK';\n\t\t }\n\t\n\t\t break;\n\t\t case 5:\n\t\t return 15;\n\t\t break;\n\t\t case 6:\n\t\t this.popState();\n\t\t return 14;\n\t\n\t\t break;\n\t\t case 7:\n\t\t return 65;\n\t\t break;\n\t\t case 8:\n\t\t return 68;\n\t\t break;\n\t\t case 9:\n\t\t return 19;\n\t\t break;\n\t\t case 10:\n\t\t this.popState();\n\t\t this.begin('raw');\n\t\t return 23;\n\t\n\t\t break;\n\t\t case 11:\n\t\t return 55;\n\t\t break;\n\t\t case 12:\n\t\t return 60;\n\t\t break;\n\t\t case 13:\n\t\t return 29;\n\t\t break;\n\t\t case 14:\n\t\t return 47;\n\t\t break;\n\t\t case 15:\n\t\t this.popState();return 44;\n\t\t break;\n\t\t case 16:\n\t\t this.popState();return 44;\n\t\t break;\n\t\t case 17:\n\t\t return 34;\n\t\t break;\n\t\t case 18:\n\t\t return 39;\n\t\t break;\n\t\t case 19:\n\t\t return 51;\n\t\t break;\n\t\t case 20:\n\t\t return 48;\n\t\t break;\n\t\t case 21:\n\t\t this.unput(yy_.yytext);\n\t\t this.popState();\n\t\t this.begin('com');\n\t\n\t\t break;\n\t\t case 22:\n\t\t this.popState();\n\t\t return 14;\n\t\n\t\t break;\n\t\t case 23:\n\t\t return 48;\n\t\t break;\n\t\t case 24:\n\t\t return 73;\n\t\t break;\n\t\t case 25:\n\t\t return 72;\n\t\t break;\n\t\t case 26:\n\t\t return 72;\n\t\t break;\n\t\t case 27:\n\t\t return 87;\n\t\t break;\n\t\t case 28:\n\t\t // ignore whitespace\n\t\t break;\n\t\t case 29:\n\t\t this.popState();return 54;\n\t\t break;\n\t\t case 30:\n\t\t this.popState();return 33;\n\t\t break;\n\t\t case 31:\n\t\t yy_.yytext = strip(1, 2).replace(/\\\\\"/g, '\"');return 80;\n\t\t break;\n\t\t case 32:\n\t\t yy_.yytext = strip(1, 2).replace(/\\\\'/g, \"'\");return 80;\n\t\t break;\n\t\t case 33:\n\t\t return 85;\n\t\t break;\n\t\t case 34:\n\t\t return 82;\n\t\t break;\n\t\t case 35:\n\t\t return 82;\n\t\t break;\n\t\t case 36:\n\t\t return 83;\n\t\t break;\n\t\t case 37:\n\t\t return 84;\n\t\t break;\n\t\t case 38:\n\t\t return 81;\n\t\t break;\n\t\t case 39:\n\t\t return 75;\n\t\t break;\n\t\t case 40:\n\t\t return 77;\n\t\t break;\n\t\t case 41:\n\t\t return 72;\n\t\t break;\n\t\t case 42:\n\t\t yy_.yytext = yy_.yytext.replace(/\\\\([\\\\\\]])/g, '$1');return 72;\n\t\t break;\n\t\t case 43:\n\t\t return 'INVALID';\n\t\t break;\n\t\t case 44:\n\t\t return 5;\n\t\t break;\n\t\t }\n\t\t };\n\t\t lexer.rules = [/^(?:[^\\x00]*?(?=(\\{\\{)))/, /^(?:[^\\x00]+)/, /^(?:[^\\x00]{2,}?(?=(\\{\\{|\\\\\\{\\{|\\\\\\\\\\{\\{|$)))/, /^(?:\\{\\{\\{\\{(?=[^\\/]))/, /^(?:\\{\\{\\{\\{\\/[^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=[=}\\s\\/.])\\}\\}\\}\\})/, /^(?:[^\\x00]*?(?=(\\{\\{\\{\\{)))/, /^(?:[\\s\\S]*?--(~)?\\}\\})/, /^(?:\\()/, /^(?:\\))/, /^(?:\\{\\{\\{\\{)/, /^(?:\\}\\}\\}\\})/, /^(?:\\{\\{(~)?>)/, /^(?:\\{\\{(~)?#>)/, /^(?:\\{\\{(~)?#\\*?)/, /^(?:\\{\\{(~)?\\/)/, /^(?:\\{\\{(~)?\\^\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\s*else\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\^)/, /^(?:\\{\\{(~)?\\s*else\\b)/, /^(?:\\{\\{(~)?\\{)/, /^(?:\\{\\{(~)?&)/, /^(?:\\{\\{(~)?!--)/, /^(?:\\{\\{(~)?![\\s\\S]*?\\}\\})/, /^(?:\\{\\{(~)?\\*?)/, /^(?:=)/, /^(?:\\.\\.)/, /^(?:\\.(?=([=~}\\s\\/.)|])))/, /^(?:[\\/.])/, /^(?:\\s+)/, /^(?:\\}(~)?\\}\\})/, /^(?:(~)?\\}\\})/, /^(?:\"(\\\\[\"]|[^\"])*\")/, /^(?:'(\\\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\\s)])))/, /^(?:false(?=([~}\\s)])))/, /^(?:undefined(?=([~}\\s)])))/, /^(?:null(?=([~}\\s)])))/, /^(?:-?[0-9]+(?:\\.[0-9]+)?(?=([~}\\s)])))/, /^(?:as\\s+\\|)/, /^(?:\\|)/, /^(?:([^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=([=~}\\s\\/.)|]))))/, /^(?:\\[(\\\\\\]|[^\\]])*\\])/, /^(?:.)/, /^(?:$)/];\n\t\t lexer.conditions = { \"mu\": { \"rules\": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], \"inclusive\": false }, \"emu\": { \"rules\": [2], \"inclusive\": false }, \"com\": { \"rules\": [6], \"inclusive\": false }, \"raw\": { \"rules\": [3, 4, 5], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 44], \"inclusive\": true } };\n\t\t return lexer;\n\t\t })();\n\t\t parser.lexer = lexer;\n\t\t function Parser() {\n\t\t this.yy = {};\n\t\t }Parser.prototype = parser;parser.Parser = Parser;\n\t\t return new Parser();\n\t\t})();exports[\"default\"] = handlebars;\n\t\tmodule.exports = exports[\"default\"];\n\t\n\t/***/ }),\n\t/* 38 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\t\n\t\texports.__esModule = true;\n\t\n\t\tvar _visitor = __webpack_require__(39);\n\t\n\t\tvar _visitor2 = _interopRequireDefault(_visitor);\n\t\n\t\tfunction WhitespaceControl() {\n\t\t var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\t\n\t\t this.options = options;\n\t\t}\n\t\tWhitespaceControl.prototype = new _visitor2['default']();\n\t\n\t\tWhitespaceControl.prototype.Program = function (program) {\n\t\t var doStandalone = !this.options.ignoreStandalone;\n\t\n\t\t var isRoot = !this.isRootSeen;\n\t\t this.isRootSeen = true;\n\t\n\t\t var body = program.body;\n\t\t for (var i = 0, l = body.length; i < l; i++) {\n\t\t var current = body[i],\n\t\t strip = this.accept(current);\n\t\n\t\t if (!strip) {\n\t\t continue;\n\t\t }\n\t\n\t\t var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),\n\t\t _isNextWhitespace = isNextWhitespace(body, i, isRoot),\n\t\t openStandalone = strip.openStandalone && _isPrevWhitespace,\n\t\t closeStandalone = strip.closeStandalone && _isNextWhitespace,\n\t\t inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;\n\t\n\t\t if (strip.close) {\n\t\t omitRight(body, i, true);\n\t\t }\n\t\t if (strip.open) {\n\t\t omitLeft(body, i, true);\n\t\t }\n\t\n\t\t if (doStandalone && inlineStandalone) {\n\t\t omitRight(body, i);\n\t\n\t\t if (omitLeft(body, i)) {\n\t\t // If we are on a standalone node, save the indent info for partials\n\t\t if (current.type === 'PartialStatement') {\n\t\t // Pull out the whitespace from the final line\n\t\t current.indent = /([ \\t]+$)/.exec(body[i - 1].original)[1];\n\t\t }\n\t\t }\n\t\t }\n\t\t if (doStandalone && openStandalone) {\n\t\t omitRight((current.program || current.inverse).body);\n\t\n\t\t // Strip out the previous content node if it's whitespace only\n\t\t omitLeft(body, i);\n\t\t }\n\t\t if (doStandalone && closeStandalone) {\n\t\t // Always strip the next node\n\t\t omitRight(body, i);\n\t\n\t\t omitLeft((current.inverse || current.program).body);\n\t\t }\n\t\t }\n\t\n\t\t return program;\n\t\t};\n\t\n\t\tWhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) {\n\t\t this.accept(block.program);\n\t\t this.accept(block.inverse);\n\t\n\t\t // Find the inverse program that is involed with whitespace stripping.\n\t\t var program = block.program || block.inverse,\n\t\t inverse = block.program && block.inverse,\n\t\t firstInverse = inverse,\n\t\t lastInverse = inverse;\n\t\n\t\t if (inverse && inverse.chained) {\n\t\t firstInverse = inverse.body[0].program;\n\t\n\t\t // Walk the inverse chain to find the last inverse that is actually in the chain.\n\t\t while (lastInverse.chained) {\n\t\t lastInverse = lastInverse.body[lastInverse.body.length - 1].program;\n\t\t }\n\t\t }\n\t\n\t\t var strip = {\n\t\t open: block.openStrip.open,\n\t\t close: block.closeStrip.close,\n\t\n\t\t // Determine the standalone candiacy. Basically flag our content as being possibly standalone\n\t\t // so our parent can determine if we actually are standalone\n\t\t openStandalone: isNextWhitespace(program.body),\n\t\t closeStandalone: isPrevWhitespace((firstInverse || program).body)\n\t\t };\n\t\n\t\t if (block.openStrip.close) {\n\t\t omitRight(program.body, null, true);\n\t\t }\n\t\n\t\t if (inverse) {\n\t\t var inverseStrip = block.inverseStrip;\n\t\n\t\t if (inverseStrip.open) {\n\t\t omitLeft(program.body, null, true);\n\t\t }\n\t\n\t\t if (inverseStrip.close) {\n\t\t omitRight(firstInverse.body, null, true);\n\t\t }\n\t\t if (block.closeStrip.open) {\n\t\t omitLeft(lastInverse.body, null, true);\n\t\t }\n\t\n\t\t // Find standalone else statments\n\t\t if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {\n\t\t omitLeft(program.body);\n\t\t omitRight(firstInverse.body);\n\t\t }\n\t\t } else if (block.closeStrip.open) {\n\t\t omitLeft(program.body, null, true);\n\t\t }\n\t\n\t\t return strip;\n\t\t};\n\t\n\t\tWhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {\n\t\t return mustache.strip;\n\t\t};\n\t\n\t\tWhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {\n\t\t /* istanbul ignore next */\n\t\t var strip = node.strip || {};\n\t\t return {\n\t\t inlineStandalone: true,\n\t\t open: strip.open,\n\t\t close: strip.close\n\t\t };\n\t\t};\n\t\n\t\tfunction isPrevWhitespace(body, i, isRoot) {\n\t\t if (i === undefined) {\n\t\t i = body.length;\n\t\t }\n\t\n\t\t // Nodes that end with newlines are considered whitespace (but are special\n\t\t // cased for strip operations)\n\t\t var prev = body[i - 1],\n\t\t sibling = body[i - 2];\n\t\t if (!prev) {\n\t\t return isRoot;\n\t\t }\n\t\n\t\t if (prev.type === 'ContentStatement') {\n\t\t return (sibling || !isRoot ? /\\r?\\n\\s*?$/ : /(^|\\r?\\n)\\s*?$/).test(prev.original);\n\t\t }\n\t\t}\n\t\tfunction isNextWhitespace(body, i, isRoot) {\n\t\t if (i === undefined) {\n\t\t i = -1;\n\t\t }\n\t\n\t\t var next = body[i + 1],\n\t\t sibling = body[i + 2];\n\t\t if (!next) {\n\t\t return isRoot;\n\t\t }\n\t\n\t\t if (next.type === 'ContentStatement') {\n\t\t return (sibling || !isRoot ? /^\\s*?\\r?\\n/ : /^\\s*?(\\r?\\n|$)/).test(next.original);\n\t\t }\n\t\t}\n\t\n\t\t// Marks the node to the right of the position as omitted.\n\t\t// I.e. {{foo}}' ' will mark the ' ' node as omitted.\n\t\t//\n\t\t// If i is undefined, then the first child will be marked as such.\n\t\t//\n\t\t// If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n\t\t// content is met.\n\t\tfunction omitRight(body, i, multiple) {\n\t\t var current = body[i == null ? 0 : i + 1];\n\t\t if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {\n\t\t return;\n\t\t }\n\t\n\t\t var original = current.value;\n\t\t current.value = current.value.replace(multiple ? /^\\s+/ : /^[ \\t]*\\r?\\n?/, '');\n\t\t current.rightStripped = current.value !== original;\n\t\t}\n\t\n\t\t// Marks the node to the left of the position as omitted.\n\t\t// I.e. ' '{{foo}} will mark the ' ' node as omitted.\n\t\t//\n\t\t// If i is undefined then the last child will be marked as such.\n\t\t//\n\t\t// If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n\t\t// content is met.\n\t\tfunction omitLeft(body, i, multiple) {\n\t\t var current = body[i == null ? body.length - 1 : i - 1];\n\t\t if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {\n\t\t return;\n\t\t }\n\t\n\t\t // We omit the last node if it's whitespace only and not preceeded by a non-content node.\n\t\t var original = current.value;\n\t\t current.value = current.value.replace(multiple ? /\\s+$/ : /[ \\t]+$/, '');\n\t\t current.leftStripped = current.value !== original;\n\t\t return current.leftStripped;\n\t\t}\n\t\n\t\texports['default'] = WhitespaceControl;\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ }),\n\t/* 39 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\t\n\t\texports.__esModule = true;\n\t\n\t\tvar _exception = __webpack_require__(6);\n\t\n\t\tvar _exception2 = _interopRequireDefault(_exception);\n\t\n\t\tfunction Visitor() {\n\t\t this.parents = [];\n\t\t}\n\t\n\t\tVisitor.prototype = {\n\t\t constructor: Visitor,\n\t\t mutating: false,\n\t\n\t\t // Visits a given value. If mutating, will replace the value if necessary.\n\t\t acceptKey: function acceptKey(node, name) {\n\t\t var value = this.accept(node[name]);\n\t\t if (this.mutating) {\n\t\t // Hacky sanity check: This may have a few false positives for type for the helper\n\t\t // methods but will generally do the right thing without a lot of overhead.\n\t\t if (value && !Visitor.prototype[value.type]) {\n\t\t throw new _exception2['default']('Unexpected node type \"' + value.type + '\" found when accepting ' + name + ' on ' + node.type);\n\t\t }\n\t\t node[name] = value;\n\t\t }\n\t\t },\n\t\n\t\t // Performs an accept operation with added sanity check to ensure\n\t\t // required keys are not removed.\n\t\t acceptRequired: function acceptRequired(node, name) {\n\t\t this.acceptKey(node, name);\n\t\n\t\t if (!node[name]) {\n\t\t throw new _exception2['default'](node.type + ' requires ' + name);\n\t\t }\n\t\t },\n\t\n\t\t // Traverses a given array. If mutating, empty respnses will be removed\n\t\t // for child elements.\n\t\t acceptArray: function acceptArray(array) {\n\t\t for (var i = 0, l = array.length; i < l; i++) {\n\t\t this.acceptKey(array, i);\n\t\n\t\t if (!array[i]) {\n\t\t array.splice(i, 1);\n\t\t i--;\n\t\t l--;\n\t\t }\n\t\t }\n\t\t },\n\t\n\t\t accept: function accept(object) {\n\t\t if (!object) {\n\t\t return;\n\t\t }\n\t\n\t\t /* istanbul ignore next: Sanity code */\n\t\t if (!this[object.type]) {\n\t\t throw new _exception2['default']('Unknown type: ' + object.type, object);\n\t\t }\n\t\n\t\t if (this.current) {\n\t\t this.parents.unshift(this.current);\n\t\t }\n\t\t this.current = object;\n\t\n\t\t var ret = this[object.type](object);\n\t\n\t\t this.current = this.parents.shift();\n\t\n\t\t if (!this.mutating || ret) {\n\t\t return ret;\n\t\t } else if (ret !== false) {\n\t\t return object;\n\t\t }\n\t\t },\n\t\n\t\t Program: function Program(program) {\n\t\t this.acceptArray(program.body);\n\t\t },\n\t\n\t\t MustacheStatement: visitSubExpression,\n\t\t Decorator: visitSubExpression,\n\t\n\t\t BlockStatement: visitBlock,\n\t\t DecoratorBlock: visitBlock,\n\t\n\t\t PartialStatement: visitPartial,\n\t\t PartialBlockStatement: function PartialBlockStatement(partial) {\n\t\t visitPartial.call(this, partial);\n\t\n\t\t this.acceptKey(partial, 'program');\n\t\t },\n\t\n\t\t ContentStatement: function ContentStatement() /* content */{},\n\t\t CommentStatement: function CommentStatement() /* comment */{},\n\t\n\t\t SubExpression: visitSubExpression,\n\t\n\t\t PathExpression: function PathExpression() /* path */{},\n\t\n\t\t StringLiteral: function StringLiteral() /* string */{},\n\t\t NumberLiteral: function NumberLiteral() /* number */{},\n\t\t BooleanLiteral: function BooleanLiteral() /* bool */{},\n\t\t UndefinedLiteral: function UndefinedLiteral() /* literal */{},\n\t\t NullLiteral: function NullLiteral() /* literal */{},\n\t\n\t\t Hash: function Hash(hash) {\n\t\t this.acceptArray(hash.pairs);\n\t\t },\n\t\t HashPair: function HashPair(pair) {\n\t\t this.acceptRequired(pair, 'value');\n\t\t }\n\t\t};\n\t\n\t\tfunction visitSubExpression(mustache) {\n\t\t this.acceptRequired(mustache, 'path');\n\t\t this.acceptArray(mustache.params);\n\t\t this.acceptKey(mustache, 'hash');\n\t\t}\n\t\tfunction visitBlock(block) {\n\t\t visitSubExpression.call(this, block);\n\t\n\t\t this.acceptKey(block, 'program');\n\t\t this.acceptKey(block, 'inverse');\n\t\t}\n\t\tfunction visitPartial(partial) {\n\t\t this.acceptRequired(partial, 'name');\n\t\t this.acceptArray(partial.params);\n\t\t this.acceptKey(partial, 'hash');\n\t\t}\n\t\n\t\texports['default'] = Visitor;\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ }),\n\t/* 40 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\t\n\t\texports.__esModule = true;\n\t\texports.SourceLocation = SourceLocation;\n\t\texports.id = id;\n\t\texports.stripFlags = stripFlags;\n\t\texports.stripComment = stripComment;\n\t\texports.preparePath = preparePath;\n\t\texports.prepareMustache = prepareMustache;\n\t\texports.prepareRawBlock = prepareRawBlock;\n\t\texports.prepareBlock = prepareBlock;\n\t\texports.prepareProgram = prepareProgram;\n\t\texports.preparePartialBlock = preparePartialBlock;\n\t\n\t\tvar _exception = __webpack_require__(6);\n\t\n\t\tvar _exception2 = _interopRequireDefault(_exception);\n\t\n\t\tfunction validateClose(open, close) {\n\t\t close = close.path ? close.path.original : close;\n\t\n\t\t if (open.path.original !== close) {\n\t\t var errorNode = { loc: open.path.loc };\n\t\n\t\t throw new _exception2['default'](open.path.original + \" doesn't match \" + close, errorNode);\n\t\t }\n\t\t}\n\t\n\t\tfunction SourceLocation(source, locInfo) {\n\t\t this.source = source;\n\t\t this.start = {\n\t\t line: locInfo.first_line,\n\t\t column: locInfo.first_column\n\t\t };\n\t\t this.end = {\n\t\t line: locInfo.last_line,\n\t\t column: locInfo.last_column\n\t\t };\n\t\t}\n\t\n\t\tfunction id(token) {\n\t\t if (/^\\[.*\\]$/.test(token)) {\n\t\t return token.substr(1, token.length - 2);\n\t\t } else {\n\t\t return token;\n\t\t }\n\t\t}\n\t\n\t\tfunction stripFlags(open, close) {\n\t\t return {\n\t\t open: open.charAt(2) === '~',\n\t\t close: close.charAt(close.length - 3) === '~'\n\t\t };\n\t\t}\n\t\n\t\tfunction stripComment(comment) {\n\t\t return comment.replace(/^\\{\\{~?\\!-?-?/, '').replace(/-?-?~?\\}\\}$/, '');\n\t\t}\n\t\n\t\tfunction preparePath(data, parts, loc) {\n\t\t loc = this.locInfo(loc);\n\t\n\t\t var original = data ? '@' : '',\n\t\t dig = [],\n\t\t depth = 0,\n\t\t depthString = '';\n\t\n\t\t for (var i = 0, l = parts.length; i < l; i++) {\n\t\t var part = parts[i].part,\n\t\n\t\t // If we have [] syntax then we do not treat path references as operators,\n\t\t // i.e. foo.[this] resolves to approximately context.foo['this']\n\t\t isLiteral = parts[i].original !== part;\n\t\t original += (parts[i].separator || '') + part;\n\t\n\t\t if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {\n\t\t if (dig.length > 0) {\n\t\t throw new _exception2['default']('Invalid path: ' + original, { loc: loc });\n\t\t } else if (part === '..') {\n\t\t depth++;\n\t\t depthString += '../';\n\t\t }\n\t\t } else {\n\t\t dig.push(part);\n\t\t }\n\t\t }\n\t\n\t\t return {\n\t\t type: 'PathExpression',\n\t\t data: data,\n\t\t depth: depth,\n\t\t parts: dig,\n\t\t original: original,\n\t\t loc: loc\n\t\t };\n\t\t}\n\t\n\t\tfunction prepareMustache(path, params, hash, open, strip, locInfo) {\n\t\t // Must use charAt to support IE pre-10\n\t\t var escapeFlag = open.charAt(3) || open.charAt(2),\n\t\t escaped = escapeFlag !== '{' && escapeFlag !== '&';\n\t\n\t\t var decorator = /\\*/.test(open);\n\t\t return {\n\t\t type: decorator ? 'Decorator' : 'MustacheStatement',\n\t\t path: path,\n\t\t params: params,\n\t\t hash: hash,\n\t\t escaped: escaped,\n\t\t strip: strip,\n\t\t loc: this.locInfo(locInfo)\n\t\t };\n\t\t}\n\t\n\t\tfunction prepareRawBlock(openRawBlock, contents, close, locInfo) {\n\t\t validateClose(openRawBlock, close);\n\t\n\t\t locInfo = this.locInfo(locInfo);\n\t\t var program = {\n\t\t type: 'Program',\n\t\t body: contents,\n\t\t strip: {},\n\t\t loc: locInfo\n\t\t };\n\t\n\t\t return {\n\t\t type: 'BlockStatement',\n\t\t path: openRawBlock.path,\n\t\t params: openRawBlock.params,\n\t\t hash: openRawBlock.hash,\n\t\t program: program,\n\t\t openStrip: {},\n\t\t inverseStrip: {},\n\t\t closeStrip: {},\n\t\t loc: locInfo\n\t\t };\n\t\t}\n\t\n\t\tfunction prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {\n\t\t if (close && close.path) {\n\t\t validateClose(openBlock, close);\n\t\t }\n\t\n\t\t var decorator = /\\*/.test(openBlock.open);\n\t\n\t\t program.blockParams = openBlock.blockParams;\n\t\n\t\t var inverse = undefined,\n\t\t inverseStrip = undefined;\n\t\n\t\t if (inverseAndProgram) {\n\t\t if (decorator) {\n\t\t throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram);\n\t\t }\n\t\n\t\t if (inverseAndProgram.chain) {\n\t\t inverseAndProgram.program.body[0].closeStrip = close.strip;\n\t\t }\n\t\n\t\t inverseStrip = inverseAndProgram.strip;\n\t\t inverse = inverseAndProgram.program;\n\t\t }\n\t\n\t\t if (inverted) {\n\t\t inverted = inverse;\n\t\t inverse = program;\n\t\t program = inverted;\n\t\t }\n\t\n\t\t return {\n\t\t type: decorator ? 'DecoratorBlock' : 'BlockStatement',\n\t\t path: openBlock.path,\n\t\t params: openBlock.params,\n\t\t hash: openBlock.hash,\n\t\t program: program,\n\t\t inverse: inverse,\n\t\t openStrip: openBlock.strip,\n\t\t inverseStrip: inverseStrip,\n\t\t closeStrip: close && close.strip,\n\t\t loc: this.locInfo(locInfo)\n\t\t };\n\t\t}\n\t\n\t\tfunction prepareProgram(statements, loc) {\n\t\t if (!loc && statements.length) {\n\t\t var firstLoc = statements[0].loc,\n\t\t lastLoc = statements[statements.length - 1].loc;\n\t\n\t\t /* istanbul ignore else */\n\t\t if (firstLoc && lastLoc) {\n\t\t loc = {\n\t\t source: firstLoc.source,\n\t\t start: {\n\t\t line: firstLoc.start.line,\n\t\t column: firstLoc.start.column\n\t\t },\n\t\t end: {\n\t\t line: lastLoc.end.line,\n\t\t column: lastLoc.end.column\n\t\t }\n\t\t };\n\t\t }\n\t\t }\n\t\n\t\t return {\n\t\t type: 'Program',\n\t\t body: statements,\n\t\t strip: {},\n\t\t loc: loc\n\t\t };\n\t\t}\n\t\n\t\tfunction preparePartialBlock(open, program, close, locInfo) {\n\t\t validateClose(open, close);\n\t\n\t\t return {\n\t\t type: 'PartialBlockStatement',\n\t\t name: open.path,\n\t\t params: open.params,\n\t\t hash: open.hash,\n\t\t program: program,\n\t\t openStrip: open.strip,\n\t\t closeStrip: close && close.strip,\n\t\t loc: this.locInfo(locInfo)\n\t\t };\n\t\t}\n\t\n\t/***/ }),\n\t/* 41 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t/* eslint-disable new-cap */\n\t\n\t\t'use strict';\n\t\n\t\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\t\n\t\texports.__esModule = true;\n\t\texports.Compiler = Compiler;\n\t\texports.precompile = precompile;\n\t\texports.compile = compile;\n\t\n\t\tvar _exception = __webpack_require__(6);\n\t\n\t\tvar _exception2 = _interopRequireDefault(_exception);\n\t\n\t\tvar _utils = __webpack_require__(5);\n\t\n\t\tvar _ast = __webpack_require__(35);\n\t\n\t\tvar _ast2 = _interopRequireDefault(_ast);\n\t\n\t\tvar slice = [].slice;\n\t\n\t\tfunction Compiler() {}\n\t\n\t\t// the foundHelper register will disambiguate helper lookup from finding a\n\t\t// function in a context. This is necessary for mustache compatibility, which\n\t\t// requires that context functions in blocks are evaluated by blockHelperMissing,\n\t\t// and then proceed as if the resulting value was provided to blockHelperMissing.\n\t\n\t\tCompiler.prototype = {\n\t\t compiler: Compiler,\n\t\n\t\t equals: function equals(other) {\n\t\t var len = this.opcodes.length;\n\t\t if (other.opcodes.length !== len) {\n\t\t return false;\n\t\t }\n\t\n\t\t for (var i = 0; i < len; i++) {\n\t\t var opcode = this.opcodes[i],\n\t\t otherOpcode = other.opcodes[i];\n\t\t if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) {\n\t\t return false;\n\t\t }\n\t\t }\n\t\n\t\t // We know that length is the same between the two arrays because they are directly tied\n\t\t // to the opcode behavior above.\n\t\t len = this.children.length;\n\t\t for (var i = 0; i < len; i++) {\n\t\t if (!this.children[i].equals(other.children[i])) {\n\t\t return false;\n\t\t }\n\t\t }\n\t\n\t\t return true;\n\t\t },\n\t\n\t\t guid: 0,\n\t\n\t\t compile: function compile(program, options) {\n\t\t this.sourceNode = [];\n\t\t this.opcodes = [];\n\t\t this.children = [];\n\t\t this.options = options;\n\t\t this.stringParams = options.stringParams;\n\t\t this.trackIds = options.trackIds;\n\t\n\t\t options.blockParams = options.blockParams || [];\n\t\n\t\t // These changes will propagate to the other compiler components\n\t\t var knownHelpers = options.knownHelpers;\n\t\t options.knownHelpers = {\n\t\t 'helperMissing': true,\n\t\t 'blockHelperMissing': true,\n\t\t 'each': true,\n\t\t 'if': true,\n\t\t 'unless': true,\n\t\t 'with': true,\n\t\t 'log': true,\n\t\t 'lookup': true\n\t\t };\n\t\t if (knownHelpers) {\n\t\t for (var _name in knownHelpers) {\n\t\t /* istanbul ignore else */\n\t\t if (_name in knownHelpers) {\n\t\t this.options.knownHelpers[_name] = knownHelpers[_name];\n\t\t }\n\t\t }\n\t\t }\n\t\n\t\t return this.accept(program);\n\t\t },\n\t\n\t\t compileProgram: function compileProgram(program) {\n\t\t var childCompiler = new this.compiler(),\n\t\t // eslint-disable-line new-cap\n\t\t result = childCompiler.compile(program, this.options),\n\t\t guid = this.guid++;\n\t\n\t\t this.usePartial = this.usePartial || result.usePartial;\n\t\n\t\t this.children[guid] = result;\n\t\t this.useDepths = this.useDepths || result.useDepths;\n\t\n\t\t return guid;\n\t\t },\n\t\n\t\t accept: function accept(node) {\n\t\t /* istanbul ignore next: Sanity code */\n\t\t if (!this[node.type]) {\n\t\t throw new _exception2['default']('Unknown type: ' + node.type, node);\n\t\t }\n\t\n\t\t this.sourceNode.unshift(node);\n\t\t var ret = this[node.type](node);\n\t\t this.sourceNode.shift();\n\t\t return ret;\n\t\t },\n\t\n\t\t Program: function Program(program) {\n\t\t this.options.blockParams.unshift(program.blockParams);\n\t\n\t\t var body = program.body,\n\t\t bodyLength = body.length;\n\t\t for (var i = 0; i < bodyLength; i++) {\n\t\t this.accept(body[i]);\n\t\t }\n\t\n\t\t this.options.blockParams.shift();\n\t\n\t\t this.isSimple = bodyLength === 1;\n\t\t this.blockParams = program.blockParams ? program.blockParams.length : 0;\n\t\n\t\t return this;\n\t\t },\n\t\n\t\t BlockStatement: function BlockStatement(block) {\n\t\t transformLiteralToPath(block);\n\t\n\t\t var program = block.program,\n\t\t inverse = block.inverse;\n\t\n\t\t program = program && this.compileProgram(program);\n\t\t inverse = inverse && this.compileProgram(inverse);\n\t\n\t\t var type = this.classifySexpr(block);\n\t\n\t\t if (type === 'helper') {\n\t\t this.helperSexpr(block, program, inverse);\n\t\t } else if (type === 'simple') {\n\t\t this.simpleSexpr(block);\n\t\n\t\t // now that the simple mustache is resolved, we need to\n\t\t // evaluate it by executing `blockHelperMissing`\n\t\t this.opcode('pushProgram', program);\n\t\t this.opcode('pushProgram', inverse);\n\t\t this.opcode('emptyHash');\n\t\t this.opcode('blockValue', block.path.original);\n\t\t } else {\n\t\t this.ambiguousSexpr(block, program, inverse);\n\t\n\t\t // now that the simple mustache is resolved, we need to\n\t\t // evaluate it by executing `blockHelperMissing`\n\t\t this.opcode('pushProgram', program);\n\t\t this.opcode('pushProgram', inverse);\n\t\t this.opcode('emptyHash');\n\t\t this.opcode('ambiguousBlockValue');\n\t\t }\n\t\n\t\t this.opcode('append');\n\t\t },\n\t\n\t\t DecoratorBlock: function DecoratorBlock(decorator) {\n\t\t var program = decorator.program && this.compileProgram(decorator.program);\n\t\t var params = this.setupFullMustacheParams(decorator, program, undefined),\n\t\t path = decorator.path;\n\t\n\t\t this.useDecorators = true;\n\t\t this.opcode('registerDecorator', params.length, path.original);\n\t\t },\n\t\n\t\t PartialStatement: function PartialStatement(partial) {\n\t\t this.usePartial = true;\n\t\n\t\t var program = partial.program;\n\t\t if (program) {\n\t\t program = this.compileProgram(partial.program);\n\t\t }\n\t\n\t\t var params = partial.params;\n\t\t if (params.length > 1) {\n\t\t throw new _exception2['default']('Unsupported number of partial arguments: ' + params.length, partial);\n\t\t } else if (!params.length) {\n\t\t if (this.options.explicitPartialContext) {\n\t\t this.opcode('pushLiteral', 'undefined');\n\t\t } else {\n\t\t params.push({ type: 'PathExpression', parts: [], depth: 0 });\n\t\t }\n\t\t }\n\t\n\t\t var partialName = partial.name.original,\n\t\t isDynamic = partial.name.type === 'SubExpression';\n\t\t if (isDynamic) {\n\t\t this.accept(partial.name);\n\t\t }\n\t\n\t\t this.setupFullMustacheParams(partial, program, undefined, true);\n\t\n\t\t var indent = partial.indent || '';\n\t\t if (this.options.preventIndent && indent) {\n\t\t this.opcode('appendContent', indent);\n\t\t indent = '';\n\t\t }\n\t\n\t\t this.opcode('invokePartial', isDynamic, partialName, indent);\n\t\t this.opcode('append');\n\t\t },\n\t\t PartialBlockStatement: function PartialBlockStatement(partialBlock) {\n\t\t this.PartialStatement(partialBlock);\n\t\t },\n\t\n\t\t MustacheStatement: function MustacheStatement(mustache) {\n\t\t this.SubExpression(mustache);\n\t\n\t\t if (mustache.escaped && !this.options.noEscape) {\n\t\t this.opcode('appendEscaped');\n\t\t } else {\n\t\t this.opcode('append');\n\t\t }\n\t\t },\n\t\t Decorator: function Decorator(decorator) {\n\t\t this.DecoratorBlock(decorator);\n\t\t },\n\t\n\t\t ContentStatement: function ContentStatement(content) {\n\t\t if (content.value) {\n\t\t this.opcode('appendContent', content.value);\n\t\t }\n\t\t },\n\t\n\t\t CommentStatement: function CommentStatement() {},\n\t\n\t\t SubExpression: function SubExpression(sexpr) {\n\t\t transformLiteralToPath(sexpr);\n\t\t var type = this.classifySexpr(sexpr);\n\t\n\t\t if (type === 'simple') {\n\t\t this.simpleSexpr(sexpr);\n\t\t } else if (type === 'helper') {\n\t\t this.helperSexpr(sexpr);\n\t\t } else {\n\t\t this.ambiguousSexpr(sexpr);\n\t\t }\n\t\t },\n\t\t ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) {\n\t\t var path = sexpr.path,\n\t\t name = path.parts[0],\n\t\t isBlock = program != null || inverse != null;\n\t\n\t\t this.opcode('getContext', path.depth);\n\t\n\t\t this.opcode('pushProgram', program);\n\t\t this.opcode('pushProgram', inverse);\n\t\n\t\t path.strict = true;\n\t\t this.accept(path);\n\t\n\t\t this.opcode('invokeAmbiguous', name, isBlock);\n\t\t },\n\t\n\t\t simpleSexpr: function simpleSexpr(sexpr) {\n\t\t var path = sexpr.path;\n\t\t path.strict = true;\n\t\t this.accept(path);\n\t\t this.opcode('resolvePossibleLambda');\n\t\t },\n\t\n\t\t helperSexpr: function helperSexpr(sexpr, program, inverse) {\n\t\t var params = this.setupFullMustacheParams(sexpr, program, inverse),\n\t\t path = sexpr.path,\n\t\t name = path.parts[0];\n\t\n\t\t if (this.options.knownHelpers[name]) {\n\t\t this.opcode('invokeKnownHelper', params.length, name);\n\t\t } else if (this.options.knownHelpersOnly) {\n\t\t throw new _exception2['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr);\n\t\t } else {\n\t\t path.strict = true;\n\t\t path.falsy = true;\n\t\n\t\t this.accept(path);\n\t\t this.opcode('invokeHelper', params.length, path.original, _ast2['default'].helpers.simpleId(path));\n\t\t }\n\t\t },\n\t\n\t\t PathExpression: function PathExpression(path) {\n\t\t this.addDepth(path.depth);\n\t\t this.opcode('getContext', path.depth);\n\t\n\t\t var name = path.parts[0],\n\t\t scoped = _ast2['default'].helpers.scopedId(path),\n\t\t blockParamId = !path.depth && !scoped && this.blockParamIndex(name);\n\t\n\t\t if (blockParamId) {\n\t\t this.opcode('lookupBlockParam', blockParamId, path.parts);\n\t\t } else if (!name) {\n\t\t // Context reference, i.e. `{{foo .}}` or `{{foo ..}}`\n\t\t this.opcode('pushContext');\n\t\t } else if (path.data) {\n\t\t this.options.data = true;\n\t\t this.opcode('lookupData', path.depth, path.parts, path.strict);\n\t\t } else {\n\t\t this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped);\n\t\t }\n\t\t },\n\t\n\t\t StringLiteral: function StringLiteral(string) {\n\t\t this.opcode('pushString', string.value);\n\t\t },\n\t\n\t\t NumberLiteral: function NumberLiteral(number) {\n\t\t this.opcode('pushLiteral', number.value);\n\t\t },\n\t\n\t\t BooleanLiteral: function BooleanLiteral(bool) {\n\t\t this.opcode('pushLiteral', bool.value);\n\t\t },\n\t\n\t\t UndefinedLiteral: function UndefinedLiteral() {\n\t\t this.opcode('pushLiteral', 'undefined');\n\t\t },\n\t\n\t\t NullLiteral: function NullLiteral() {\n\t\t this.opcode('pushLiteral', 'null');\n\t\t },\n\t\n\t\t Hash: function Hash(hash) {\n\t\t var pairs = hash.pairs,\n\t\t i = 0,\n\t\t l = pairs.length;\n\t\n\t\t this.opcode('pushHash');\n\t\n\t\t for (; i < l; i++) {\n\t\t this.pushParam(pairs[i].value);\n\t\t }\n\t\t while (i--) {\n\t\t this.opcode('assignToHash', pairs[i].key);\n\t\t }\n\t\t this.opcode('popHash');\n\t\t },\n\t\n\t\t // HELPERS\n\t\t opcode: function opcode(name) {\n\t\t this.opcodes.push({ opcode: name, args: slice.call(arguments, 1), loc: this.sourceNode[0].loc });\n\t\t },\n\t\n\t\t addDepth: function addDepth(depth) {\n\t\t if (!depth) {\n\t\t return;\n\t\t }\n\t\n\t\t this.useDepths = true;\n\t\t },\n\t\n\t\t classifySexpr: function classifySexpr(sexpr) {\n\t\t var isSimple = _ast2['default'].helpers.simpleId(sexpr.path);\n\t\n\t\t var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]);\n\t\n\t\t // a mustache is an eligible helper if:\n\t\t // * its id is simple (a single part, not `this` or `..`)\n\t\t var isHelper = !isBlockParam && _ast2['default'].helpers.helperExpression(sexpr);\n\t\n\t\t // if a mustache is an eligible helper but not a definite\n\t\t // helper, it is ambiguous, and will be resolved in a later\n\t\t // pass or at runtime.\n\t\t var isEligible = !isBlockParam && (isHelper || isSimple);\n\t\n\t\t // if ambiguous, we can possibly resolve the ambiguity now\n\t\t // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.\n\t\t if (isEligible && !isHelper) {\n\t\t var _name2 = sexpr.path.parts[0],\n\t\t options = this.options;\n\t\n\t\t if (options.knownHelpers[_name2]) {\n\t\t isHelper = true;\n\t\t } else if (options.knownHelpersOnly) {\n\t\t isEligible = false;\n\t\t }\n\t\t }\n\t\n\t\t if (isHelper) {\n\t\t return 'helper';\n\t\t } else if (isEligible) {\n\t\t return 'ambiguous';\n\t\t } else {\n\t\t return 'simple';\n\t\t }\n\t\t },\n\t\n\t\t pushParams: function pushParams(params) {\n\t\t for (var i = 0, l = params.length; i < l; i++) {\n\t\t this.pushParam(params[i]);\n\t\t }\n\t\t },\n\t\n\t\t pushParam: function pushParam(val) {\n\t\t var value = val.value != null ? val.value : val.original || '';\n\t\n\t\t if (this.stringParams) {\n\t\t if (value.replace) {\n\t\t value = value.replace(/^(\\.?\\.\\/)*/g, '').replace(/\\//g, '.');\n\t\t }\n\t\n\t\t if (val.depth) {\n\t\t this.addDepth(val.depth);\n\t\t }\n\t\t this.opcode('getContext', val.depth || 0);\n\t\t this.opcode('pushStringParam', value, val.type);\n\t\n\t\t if (val.type === 'SubExpression') {\n\t\t // SubExpressions get evaluated and passed in\n\t\t // in string params mode.\n\t\t this.accept(val);\n\t\t }\n\t\t } else {\n\t\t if (this.trackIds) {\n\t\t var blockParamIndex = undefined;\n\t\t if (val.parts && !_ast2['default'].helpers.scopedId(val) && !val.depth) {\n\t\t blockParamIndex = this.blockParamIndex(val.parts[0]);\n\t\t }\n\t\t if (blockParamIndex) {\n\t\t var blockParamChild = val.parts.slice(1).join('.');\n\t\t this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);\n\t\t } else {\n\t\t value = val.original || value;\n\t\t if (value.replace) {\n\t\t value = value.replace(/^this(?:\\.|$)/, '').replace(/^\\.\\//, '').replace(/^\\.$/, '');\n\t\t }\n\t\n\t\t this.opcode('pushId', val.type, value);\n\t\t }\n\t\t }\n\t\t this.accept(val);\n\t\t }\n\t\t },\n\t\n\t\t setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) {\n\t\t var params = sexpr.params;\n\t\t this.pushParams(params);\n\t\n\t\t this.opcode('pushProgram', program);\n\t\t this.opcode('pushProgram', inverse);\n\t\n\t\t if (sexpr.hash) {\n\t\t this.accept(sexpr.hash);\n\t\t } else {\n\t\t this.opcode('emptyHash', omitEmpty);\n\t\t }\n\t\n\t\t return params;\n\t\t },\n\t\n\t\t blockParamIndex: function blockParamIndex(name) {\n\t\t for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) {\n\t\t var blockParams = this.options.blockParams[depth],\n\t\t param = blockParams && _utils.indexOf(blockParams, name);\n\t\t if (blockParams && param >= 0) {\n\t\t return [depth, param];\n\t\t }\n\t\t }\n\t\t }\n\t\t};\n\t\n\t\tfunction precompile(input, options, env) {\n\t\t if (input == null || typeof input !== 'string' && input.type !== 'Program') {\n\t\t throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input);\n\t\t }\n\t\n\t\t options = options || {};\n\t\t if (!('data' in options)) {\n\t\t options.data = true;\n\t\t }\n\t\t if (options.compat) {\n\t\t options.useDepths = true;\n\t\t }\n\t\n\t\t var ast = env.parse(input, options),\n\t\t environment = new env.Compiler().compile(ast, options);\n\t\t return new env.JavaScriptCompiler().compile(environment, options);\n\t\t}\n\t\n\t\tfunction compile(input, options, env) {\n\t\t if (options === undefined) options = {};\n\t\n\t\t if (input == null || typeof input !== 'string' && input.type !== 'Program') {\n\t\t throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input);\n\t\t }\n\t\n\t\t options = _utils.extend({}, options);\n\t\t if (!('data' in options)) {\n\t\t options.data = true;\n\t\t }\n\t\t if (options.compat) {\n\t\t options.useDepths = true;\n\t\t }\n\t\n\t\t var compiled = undefined;\n\t\n\t\t function compileInput() {\n\t\t var ast = env.parse(input, options),\n\t\t environment = new env.Compiler().compile(ast, options),\n\t\t templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);\n\t\t return env.template(templateSpec);\n\t\t }\n\t\n\t\t // Template is only compiled on first use and cached after that point.\n\t\t function ret(context, execOptions) {\n\t\t if (!compiled) {\n\t\t compiled = compileInput();\n\t\t }\n\t\t return compiled.call(this, context, execOptions);\n\t\t }\n\t\t ret._setup = function (setupOptions) {\n\t\t if (!compiled) {\n\t\t compiled = compileInput();\n\t\t }\n\t\t return compiled._setup(setupOptions);\n\t\t };\n\t\t ret._child = function (i, data, blockParams, depths) {\n\t\t if (!compiled) {\n\t\t compiled = compileInput();\n\t\t }\n\t\t return compiled._child(i, data, blockParams, depths);\n\t\t };\n\t\t return ret;\n\t\t}\n\t\n\t\tfunction argEquals(a, b) {\n\t\t if (a === b) {\n\t\t return true;\n\t\t }\n\t\n\t\t if (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) {\n\t\t for (var i = 0; i < a.length; i++) {\n\t\t if (!argEquals(a[i], b[i])) {\n\t\t return false;\n\t\t }\n\t\t }\n\t\t return true;\n\t\t }\n\t\t}\n\t\n\t\tfunction transformLiteralToPath(sexpr) {\n\t\t if (!sexpr.path.parts) {\n\t\t var literal = sexpr.path;\n\t\t // Casting to string here to make false and 0 literal values play nicely with the rest\n\t\t // of the system.\n\t\t sexpr.path = {\n\t\t type: 'PathExpression',\n\t\t data: false,\n\t\t depth: 0,\n\t\t parts: [literal.original + ''],\n\t\t original: literal.original + '',\n\t\t loc: literal.loc\n\t\t };\n\t\t }\n\t\t}\n\t\n\t/***/ }),\n\t/* 42 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t'use strict';\n\t\n\t\tvar _interopRequireDefault = __webpack_require__(1)['default'];\n\t\n\t\texports.__esModule = true;\n\t\n\t\tvar _base = __webpack_require__(4);\n\t\n\t\tvar _exception = __webpack_require__(6);\n\t\n\t\tvar _exception2 = _interopRequireDefault(_exception);\n\t\n\t\tvar _utils = __webpack_require__(5);\n\t\n\t\tvar _codeGen = __webpack_require__(43);\n\t\n\t\tvar _codeGen2 = _interopRequireDefault(_codeGen);\n\t\n\t\tfunction Literal(value) {\n\t\t this.value = value;\n\t\t}\n\t\n\t\tfunction JavaScriptCompiler() {}\n\t\n\t\tJavaScriptCompiler.prototype = {\n\t\t // PUBLIC API: You can override these methods in a subclass to provide\n\t\t // alternative compiled forms for name lookup and buffering semantics\n\t\t nameLookup: function nameLookup(parent, name /* , type*/) {\n\t\t if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {\n\t\t return [parent, '.', name];\n\t\t } else {\n\t\t return [parent, '[', JSON.stringify(name), ']'];\n\t\t }\n\t\t },\n\t\t depthedLookup: function depthedLookup(name) {\n\t\t return [this.aliasable('container.lookup'), '(depths, \"', name, '\")'];\n\t\t },\n\t\n\t\t compilerInfo: function compilerInfo() {\n\t\t var revision = _base.COMPILER_REVISION,\n\t\t versions = _base.REVISION_CHANGES[revision];\n\t\t return [revision, versions];\n\t\t },\n\t\n\t\t appendToBuffer: function appendToBuffer(source, location, explicit) {\n\t\t // Force a source as this simplifies the merge logic.\n\t\t if (!_utils.isArray(source)) {\n\t\t source = [source];\n\t\t }\n\t\t source = this.source.wrap(source, location);\n\t\n\t\t if (this.environment.isSimple) {\n\t\t return ['return ', source, ';'];\n\t\t } else if (explicit) {\n\t\t // This is a case where the buffer operation occurs as a child of another\n\t\t // construct, generally braces. We have to explicitly output these buffer\n\t\t // operations to ensure that the emitted code goes in the correct location.\n\t\t return ['buffer += ', source, ';'];\n\t\t } else {\n\t\t source.appendToBuffer = true;\n\t\t return source;\n\t\t }\n\t\t },\n\t\n\t\t initializeBuffer: function initializeBuffer() {\n\t\t return this.quotedString('');\n\t\t },\n\t\t // END PUBLIC API\n\t\n\t\t compile: function compile(environment, options, context, asObject) {\n\t\t this.environment = environment;\n\t\t this.options = options;\n\t\t this.stringParams = this.options.stringParams;\n\t\t this.trackIds = this.options.trackIds;\n\t\t this.precompile = !asObject;\n\t\n\t\t this.name = this.environment.name;\n\t\t this.isChild = !!context;\n\t\t this.context = context || {\n\t\t decorators: [],\n\t\t programs: [],\n\t\t environments: []\n\t\t };\n\t\n\t\t this.preamble();\n\t\n\t\t this.stackSlot = 0;\n\t\t this.stackVars = [];\n\t\t this.aliases = {};\n\t\t this.registers = { list: [] };\n\t\t this.hashes = [];\n\t\t this.compileStack = [];\n\t\t this.inlineStack = [];\n\t\t this.blockParams = [];\n\t\n\t\t this.compileChildren(environment, options);\n\t\n\t\t this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat;\n\t\t this.useBlockParams = this.useBlockParams || environment.useBlockParams;\n\t\n\t\t var opcodes = environment.opcodes,\n\t\t opcode = undefined,\n\t\t firstLoc = undefined,\n\t\t i = undefined,\n\t\t l = undefined;\n\t\n\t\t for (i = 0, l = opcodes.length; i < l; i++) {\n\t\t opcode = opcodes[i];\n\t\n\t\t this.source.currentLocation = opcode.loc;\n\t\t firstLoc = firstLoc || opcode.loc;\n\t\t this[opcode.opcode].apply(this, opcode.args);\n\t\t }\n\t\n\t\t // Flush any trailing content that might be pending.\n\t\t this.source.currentLocation = firstLoc;\n\t\t this.pushSource('');\n\t\n\t\t /* istanbul ignore next */\n\t\t if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {\n\t\t throw new _exception2['default']('Compile completed with content left on stack');\n\t\t }\n\t\n\t\t if (!this.decorators.isEmpty()) {\n\t\t this.useDecorators = true;\n\t\n\t\t this.decorators.prepend('var decorators = container.decorators;\\n');\n\t\t this.decorators.push('return fn;');\n\t\n\t\t if (asObject) {\n\t\t this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]);\n\t\t } else {\n\t\t this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\\n');\n\t\t this.decorators.push('}\\n');\n\t\t this.decorators = this.decorators.merge();\n\t\t }\n\t\t } else {\n\t\t this.decorators = undefined;\n\t\t }\n\t\n\t\t var fn = this.createFunctionContext(asObject);\n\t\t if (!this.isChild) {\n\t\t var ret = {\n\t\t compiler: this.compilerInfo(),\n\t\t main: fn\n\t\t };\n\t\n\t\t if (this.decorators) {\n\t\t ret.main_d = this.decorators; // eslint-disable-line camelcase\n\t\t ret.useDecorators = true;\n\t\t }\n\t\n\t\t var _context = this.context;\n\t\t var programs = _context.programs;\n\t\t var decorators = _context.decorators;\n\t\n\t\t for (i = 0, l = programs.length; i < l; i++) {\n\t\t if (programs[i]) {\n\t\t ret[i] = programs[i];\n\t\t if (decorators[i]) {\n\t\t ret[i + '_d'] = decorators[i];\n\t\t ret.useDecorators = true;\n\t\t }\n\t\t }\n\t\t }\n\t\n\t\t if (this.environment.usePartial) {\n\t\t ret.usePartial = true;\n\t\t }\n\t\t if (this.options.data) {\n\t\t ret.useData = true;\n\t\t }\n\t\t if (this.useDepths) {\n\t\t ret.useDepths = true;\n\t\t }\n\t\t if (this.useBlockParams) {\n\t\t ret.useBlockParams = true;\n\t\t }\n\t\t if (this.options.compat) {\n\t\t ret.compat = true;\n\t\t }\n\t\n\t\t if (!asObject) {\n\t\t ret.compiler = JSON.stringify(ret.compiler);\n\t\n\t\t this.source.currentLocation = { start: { line: 1, column: 0 } };\n\t\t ret = this.objectLiteral(ret);\n\t\n\t\t if (options.srcName) {\n\t\t ret = ret.toStringWithSourceMap({ file: options.destName });\n\t\t ret.map = ret.map && ret.map.toString();\n\t\t } else {\n\t\t ret = ret.toString();\n\t\t }\n\t\t } else {\n\t\t ret.compilerOptions = this.options;\n\t\t }\n\t\n\t\t return ret;\n\t\t } else {\n\t\t return fn;\n\t\t }\n\t\t },\n\t\n\t\t preamble: function preamble() {\n\t\t // track the last context pushed into place to allow skipping the\n\t\t // getContext opcode when it would be a noop\n\t\t this.lastContext = 0;\n\t\t this.source = new _codeGen2['default'](this.options.srcName);\n\t\t this.decorators = new _codeGen2['default'](this.options.srcName);\n\t\t },\n\t\n\t\t createFunctionContext: function createFunctionContext(asObject) {\n\t\t var varDeclarations = '';\n\t\n\t\t var locals = this.stackVars.concat(this.registers.list);\n\t\t if (locals.length > 0) {\n\t\t varDeclarations += ', ' + locals.join(', ');\n\t\t }\n\t\n\t\t // Generate minimizer alias mappings\n\t\t //\n\t\t // When using true SourceNodes, this will update all references to the given alias\n\t\t // as the source nodes are reused in situ. For the non-source node compilation mode,\n\t\t // aliases will not be used, but this case is already being run on the client and\n\t\t // we aren't concern about minimizing the template size.\n\t\t var aliasCount = 0;\n\t\t for (var alias in this.aliases) {\n\t\t // eslint-disable-line guard-for-in\n\t\t var node = this.aliases[alias];\n\t\n\t\t if (this.aliases.hasOwnProperty(alias) && node.children && node.referenceCount > 1) {\n\t\t varDeclarations += ', alias' + ++aliasCount + '=' + alias;\n\t\t node.children[0] = 'alias' + aliasCount;\n\t\t }\n\t\t }\n\t\n\t\t var params = ['container', 'depth0', 'helpers', 'partials', 'data'];\n\t\n\t\t if (this.useBlockParams || this.useDepths) {\n\t\t params.push('blockParams');\n\t\t }\n\t\t if (this.useDepths) {\n\t\t params.push('depths');\n\t\t }\n\t\n\t\t // Perform a second pass over the output to merge content when possible\n\t\t var source = this.mergeSource(varDeclarations);\n\t\n\t\t if (asObject) {\n\t\t params.push(source);\n\t\n\t\t return Function.apply(this, params);\n\t\t } else {\n\t\t return this.source.wrap(['function(', params.join(','), ') {\\n ', source, '}']);\n\t\t }\n\t\t },\n\t\t mergeSource: function mergeSource(varDeclarations) {\n\t\t var isSimple = this.environment.isSimple,\n\t\t appendOnly = !this.forceBuffer,\n\t\t appendFirst = undefined,\n\t\t sourceSeen = undefined,\n\t\t bufferStart = undefined,\n\t\t bufferEnd = undefined;\n\t\t this.source.each(function (line) {\n\t\t if (line.appendToBuffer) {\n\t\t if (bufferStart) {\n\t\t line.prepend(' + ');\n\t\t } else {\n\t\t bufferStart = line;\n\t\t }\n\t\t bufferEnd = line;\n\t\t } else {\n\t\t if (bufferStart) {\n\t\t if (!sourceSeen) {\n\t\t appendFirst = true;\n\t\t } else {\n\t\t bufferStart.prepend('buffer += ');\n\t\t }\n\t\t bufferEnd.add(';');\n\t\t bufferStart = bufferEnd = undefined;\n\t\t }\n\t\n\t\t sourceSeen = true;\n\t\t if (!isSimple) {\n\t\t appendOnly = false;\n\t\t }\n\t\t }\n\t\t });\n\t\n\t\t if (appendOnly) {\n\t\t if (bufferStart) {\n\t\t bufferStart.prepend('return ');\n\t\t bufferEnd.add(';');\n\t\t } else if (!sourceSeen) {\n\t\t this.source.push('return \"\";');\n\t\t }\n\t\t } else {\n\t\t varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer());\n\t\n\t\t if (bufferStart) {\n\t\t bufferStart.prepend('return buffer + ');\n\t\t bufferEnd.add(';');\n\t\t } else {\n\t\t this.source.push('return buffer;');\n\t\t }\n\t\t }\n\t\n\t\t if (varDeclarations) {\n\t\t this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\\n'));\n\t\t }\n\t\n\t\t return this.source.merge();\n\t\t },\n\t\n\t\t // [blockValue]\n\t\t //\n\t\t // On stack, before: hash, inverse, program, value\n\t\t // On stack, after: return value of blockHelperMissing\n\t\t //\n\t\t // The purpose of this opcode is to take a block of the form\n\t\t // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and\n\t\t // replace it on the stack with the result of properly\n\t\t // invoking blockHelperMissing.\n\t\t blockValue: function blockValue(name) {\n\t\t var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'),\n\t\t params = [this.contextName(0)];\n\t\t this.setupHelperArgs(name, 0, params);\n\t\n\t\t var blockName = this.popStack();\n\t\t params.splice(1, 0, blockName);\n\t\n\t\t this.push(this.source.functionCall(blockHelperMissing, 'call', params));\n\t\t },\n\t\n\t\t // [ambiguousBlockValue]\n\t\t //\n\t\t // On stack, before: hash, inverse, program, value\n\t\t // Compiler value, before: lastHelper=value of last found helper, if any\n\t\t // On stack, after, if no lastHelper: same as [blockValue]\n\t\t // On stack, after, if lastHelper: value\n\t\t ambiguousBlockValue: function ambiguousBlockValue() {\n\t\t // We're being a bit cheeky and reusing the options value from the prior exec\n\t\t var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'),\n\t\t params = [this.contextName(0)];\n\t\t this.setupHelperArgs('', 0, params, true);\n\t\n\t\t this.flushInline();\n\t\n\t\t var current = this.topStack();\n\t\t params.splice(1, 0, current);\n\t\n\t\t this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']);\n\t\t },\n\t\n\t\t // [appendContent]\n\t\t //\n\t\t // On stack, before: ...\n\t\t // On stack, after: ...\n\t\t //\n\t\t // Appends the string value of `content` to the current buffer\n\t\t appendContent: function appendContent(content) {\n\t\t if (this.pendingContent) {\n\t\t content = this.pendingContent + content;\n\t\t } else {\n\t\t this.pendingLocation = this.source.currentLocation;\n\t\t }\n\t\n\t\t this.pendingContent = content;\n\t\t },\n\t\n\t\t // [append]\n\t\t //\n\t\t // On stack, before: value, ...\n\t\t // On stack, after: ...\n\t\t //\n\t\t // Coerces `value` to a String and appends it to the current buffer.\n\t\t //\n\t\t // If `value` is truthy, or 0, it is coerced into a string and appended\n\t\t // Otherwise, the empty string is appended\n\t\t append: function append() {\n\t\t if (this.isInline()) {\n\t\t this.replaceStack(function (current) {\n\t\t return [' != null ? ', current, ' : \"\"'];\n\t\t });\n\t\n\t\t this.pushSource(this.appendToBuffer(this.popStack()));\n\t\t } else {\n\t\t var local = this.popStack();\n\t\t this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']);\n\t\t if (this.environment.isSimple) {\n\t\t this.pushSource(['else { ', this.appendToBuffer(\"''\", undefined, true), ' }']);\n\t\t }\n\t\t }\n\t\t },\n\t\n\t\t // [appendEscaped]\n\t\t //\n\t\t // On stack, before: value, ...\n\t\t // On stack, after: ...\n\t\t //\n\t\t // Escape `value` and append it to the buffer\n\t\t appendEscaped: function appendEscaped() {\n\t\t this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')']));\n\t\t },\n\t\n\t\t // [getContext]\n\t\t //\n\t\t // On stack, before: ...\n\t\t // On stack, after: ...\n\t\t // Compiler value, after: lastContext=depth\n\t\t //\n\t\t // Set the value of the `lastContext` compiler value to the depth\n\t\t getContext: function getContext(depth) {\n\t\t this.lastContext = depth;\n\t\t },\n\t\n\t\t // [pushContext]\n\t\t //\n\t\t // On stack, before: ...\n\t\t // On stack, after: currentContext, ...\n\t\t //\n\t\t // Pushes the value of the current context onto the stack.\n\t\t pushContext: function pushContext() {\n\t\t this.pushStackLiteral(this.contextName(this.lastContext));\n\t\t },\n\t\n\t\t // [lookupOnContext]\n\t\t //\n\t\t // On stack, before: ...\n\t\t // On stack, after: currentContext[name], ...\n\t\t //\n\t\t // Looks up the value of `name` on the current context and pushes\n\t\t // it onto the stack.\n\t\t lookupOnContext: function lookupOnContext(parts, falsy, strict, scoped) {\n\t\t var i = 0;\n\t\n\t\t if (!scoped && this.options.compat && !this.lastContext) {\n\t\t // The depthed query is expected to handle the undefined logic for the root level that\n\t\t // is implemented below, so we evaluate that directly in compat mode\n\t\t this.push(this.depthedLookup(parts[i++]));\n\t\t } else {\n\t\t this.pushContext();\n\t\t }\n\t\n\t\t this.resolvePath('context', parts, i, falsy, strict);\n\t\t },\n\t\n\t\t // [lookupBlockParam]\n\t\t //\n\t\t // On stack, before: ...\n\t\t // On stack, after: blockParam[name], ...\n\t\t //\n\t\t // Looks up the value of `parts` on the given block param and pushes\n\t\t // it onto the stack.\n\t\t lookupBlockParam: function lookupBlockParam(blockParamId, parts) {\n\t\t this.useBlockParams = true;\n\t\n\t\t this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']);\n\t\t this.resolvePath('context', parts, 1);\n\t\t },\n\t\n\t\t // [lookupData]\n\t\t //\n\t\t // On stack, before: ...\n\t\t // On stack, after: data, ...\n\t\t //\n\t\t // Push the data lookup operator\n\t\t lookupData: function lookupData(depth, parts, strict) {\n\t\t if (!depth) {\n\t\t this.pushStackLiteral('data');\n\t\t } else {\n\t\t this.pushStackLiteral('container.data(data, ' + depth + ')');\n\t\t }\n\t\n\t\t this.resolvePath('data', parts, 0, true, strict);\n\t\t },\n\t\n\t\t resolvePath: function resolvePath(type, parts, i, falsy, strict) {\n\t\t // istanbul ignore next\n\t\n\t\t var _this = this;\n\t\n\t\t if (this.options.strict || this.options.assumeObjects) {\n\t\t this.push(strictLookup(this.options.strict && strict, this, parts, type));\n\t\t return;\n\t\t }\n\t\n\t\t var len = parts.length;\n\t\t for (; i < len; i++) {\n\t\t /* eslint-disable no-loop-func */\n\t\t this.replaceStack(function (current) {\n\t\t var lookup = _this.nameLookup(current, parts[i], type);\n\t\t // We want to ensure that zero and false are handled properly if the context (falsy flag)\n\t\t // needs to have the special handling for these values.\n\t\t if (!falsy) {\n\t\t return [' != null ? ', lookup, ' : ', current];\n\t\t } else {\n\t\t // Otherwise we can use generic falsy handling\n\t\t return [' && ', lookup];\n\t\t }\n\t\t });\n\t\t /* eslint-enable no-loop-func */\n\t\t }\n\t\t },\n\t\n\t\t // [resolvePossibleLambda]\n\t\t //\n\t\t // On stack, before: value, ...\n\t\t // On stack, after: resolved value, ...\n\t\t //\n\t\t // If the `value` is a lambda, replace it on the stack by\n\t\t // the return value of the lambda\n\t\t resolvePossibleLambda: function resolvePossibleLambda() {\n\t\t this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']);\n\t\t },\n\t\n\t\t // [pushStringParam]\n\t\t //\n\t\t // On stack, before: ...\n\t\t // On stack, after: string, currentContext, ...\n\t\t //\n\t\t // This opcode is designed for use in string mode, which\n\t\t // provides the string value of a parameter along with its\n\t\t // depth rather than resolving it immediately.\n\t\t pushStringParam: function pushStringParam(string, type) {\n\t\t this.pushContext();\n\t\t this.pushString(type);\n\t\n\t\t // If it's a subexpression, the string result\n\t\t // will be pushed after this opcode.\n\t\t if (type !== 'SubExpression') {\n\t\t if (typeof string === 'string') {\n\t\t this.pushString(string);\n\t\t } else {\n\t\t this.pushStackLiteral(string);\n\t\t }\n\t\t }\n\t\t },\n\t\n\t\t emptyHash: function emptyHash(omitEmpty) {\n\t\t if (this.trackIds) {\n\t\t this.push('{}'); // hashIds\n\t\t }\n\t\t if (this.stringParams) {\n\t\t this.push('{}'); // hashContexts\n\t\t this.push('{}'); // hashTypes\n\t\t }\n\t\t this.pushStackLiteral(omitEmpty ? 'undefined' : '{}');\n\t\t },\n\t\t pushHash: function pushHash() {\n\t\t if (this.hash) {\n\t\t this.hashes.push(this.hash);\n\t\t }\n\t\t this.hash = { values: [], types: [], contexts: [], ids: [] };\n\t\t },\n\t\t popHash: function popHash() {\n\t\t var hash = this.hash;\n\t\t this.hash = this.hashes.pop();\n\t\n\t\t if (this.trackIds) {\n\t\t this.push(this.objectLiteral(hash.ids));\n\t\t }\n\t\t if (this.stringParams) {\n\t\t this.push(this.objectLiteral(hash.contexts));\n\t\t this.push(this.objectLiteral(hash.types));\n\t\t }\n\t\n\t\t this.push(this.objectLiteral(hash.values));\n\t\t },\n\t\n\t\t // [pushString]\n\t\t //\n\t\t // On stack, before: ...\n\t\t // On stack, after: quotedString(string), ...\n\t\t //\n\t\t // Push a quoted version of `string` onto the stack\n\t\t pushString: function pushString(string) {\n\t\t this.pushStackLiteral(this.quotedString(string));\n\t\t },\n\t\n\t\t // [pushLiteral]\n\t\t //\n\t\t // On stack, before: ...\n\t\t // On stack, after: value, ...\n\t\t //\n\t\t // Pushes a value onto the stack. This operation prevents\n\t\t // the compiler from creating a temporary variable to hold\n\t\t // it.\n\t\t pushLiteral: function pushLiteral(value) {\n\t\t this.pushStackLiteral(value);\n\t\t },\n\t\n\t\t // [pushProgram]\n\t\t //\n\t\t // On stack, before: ...\n\t\t // On stack, after: program(guid), ...\n\t\t //\n\t\t // Push a program expression onto the stack. This takes\n\t\t // a compile-time guid and converts it into a runtime-accessible\n\t\t // expression.\n\t\t pushProgram: function pushProgram(guid) {\n\t\t if (guid != null) {\n\t\t this.pushStackLiteral(this.programExpression(guid));\n\t\t } else {\n\t\t this.pushStackLiteral(null);\n\t\t }\n\t\t },\n\t\n\t\t // [registerDecorator]\n\t\t //\n\t\t // On stack, before: hash, program, params..., ...\n\t\t // On stack, after: ...\n\t\t //\n\t\t // Pops off the decorator's parameters, invokes the decorator,\n\t\t // and inserts the decorator into the decorators list.\n\t\t registerDecorator: function registerDecorator(paramSize, name) {\n\t\t var foundDecorator = this.nameLookup('decorators', name, 'decorator'),\n\t\t options = this.setupHelperArgs(name, paramSize);\n\t\n\t\t this.decorators.push(['fn = ', this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), ' || fn;']);\n\t\t },\n\t\n\t\t // [invokeHelper]\n\t\t //\n\t\t // On stack, before: hash, inverse, program, params..., ...\n\t\t // On stack, after: result of helper invocation\n\t\t //\n\t\t // Pops off the helper's parameters, invokes the helper,\n\t\t // and pushes the helper's return value onto the stack.\n\t\t //\n\t\t // If the helper is not found, `helperMissing` is called.\n\t\t invokeHelper: function invokeHelper(paramSize, name, isSimple) {\n\t\t var nonHelper = this.popStack(),\n\t\t helper = this.setupHelper(paramSize, name),\n\t\t simple = isSimple ? [helper.name, ' || '] : '';\n\t\n\t\t var lookup = ['('].concat(simple, nonHelper);\n\t\t if (!this.options.strict) {\n\t\t lookup.push(' || ', this.aliasable('helpers.helperMissing'));\n\t\t }\n\t\t lookup.push(')');\n\t\n\t\t this.push(this.source.functionCall(lookup, 'call', helper.callParams));\n\t\t },\n\t\n\t\t // [invokeKnownHelper]\n\t\t //\n\t\t // On stack, before: hash, inverse, program, params..., ...\n\t\t // On stack, after: result of helper invocation\n\t\t //\n\t\t // This operation is used when the helper is known to exist,\n\t\t // so a `helperMissing` fallback is not required.\n\t\t invokeKnownHelper: function invokeKnownHelper(paramSize, name) {\n\t\t var helper = this.setupHelper(paramSize, name);\n\t\t this.push(this.source.functionCall(helper.name, 'call', helper.callParams));\n\t\t },\n\t\n\t\t // [invokeAmbiguous]\n\t\t //\n\t\t // On stack, before: hash, inverse, program, params..., ...\n\t\t // On stack, after: result of disambiguation\n\t\t //\n\t\t // This operation is used when an expression like `{{foo}}`\n\t\t // is provided, but we don't know at compile-time whether it\n\t\t // is a helper or a path.\n\t\t //\n\t\t // This operation emits more code than the other options,\n\t\t // and can be avoided by passing the `knownHelpers` and\n\t\t // `knownHelpersOnly` flags at compile-time.\n\t\t invokeAmbiguous: function invokeAmbiguous(name, helperCall) {\n\t\t this.useRegister('helper');\n\t\n\t\t var nonHelper = this.popStack();\n\t\n\t\t this.emptyHash();\n\t\t var helper = this.setupHelper(0, name, helperCall);\n\t\n\t\t var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');\n\t\n\t\t var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')'];\n\t\t if (!this.options.strict) {\n\t\t lookup[0] = '(helper = ';\n\t\t lookup.push(' != null ? helper : ', this.aliasable('helpers.helperMissing'));\n\t\t }\n\t\n\t\t this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('\"function\"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']);\n\t\t },\n\t\n\t\t // [invokePartial]\n\t\t //\n\t\t // On stack, before: context, ...\n\t\t // On stack after: result of partial invocation\n\t\t //\n\t\t // This operation pops off a context, invokes a partial with that context,\n\t\t // and pushes the result of the invocation back.\n\t\t invokePartial: function invokePartial(isDynamic, name, indent) {\n\t\t var params = [],\n\t\t options = this.setupParams(name, 1, params);\n\t\n\t\t if (isDynamic) {\n\t\t name = this.popStack();\n\t\t delete options.name;\n\t\t }\n\t\n\t\t if (indent) {\n\t\t options.indent = JSON.stringify(indent);\n\t\t }\n\t\t options.helpers = 'helpers';\n\t\t options.partials = 'partials';\n\t\t options.decorators = 'container.decorators';\n\t\n\t\t if (!isDynamic) {\n\t\t params.unshift(this.nameLookup('partials', name, 'partial'));\n\t\t } else {\n\t\t params.unshift(name);\n\t\t }\n\t\n\t\t if (this.options.compat) {\n\t\t options.depths = 'depths';\n\t\t }\n\t\t options = this.objectLiteral(options);\n\t\t params.push(options);\n\t\n\t\t this.push(this.source.functionCall('container.invokePartial', '', params));\n\t\t },\n\t\n\t\t // [assignToHash]\n\t\t //\n\t\t // On stack, before: value, ..., hash, ...\n\t\t // On stack, after: ..., hash, ...\n\t\t //\n\t\t // Pops a value off the stack and assigns it to the current hash\n\t\t assignToHash: function assignToHash(key) {\n\t\t var value = this.popStack(),\n\t\t context = undefined,\n\t\t type = undefined,\n\t\t id = undefined;\n\t\n\t\t if (this.trackIds) {\n\t\t id = this.popStack();\n\t\t }\n\t\t if (this.stringParams) {\n\t\t type = this.popStack();\n\t\t context = this.popStack();\n\t\t }\n\t\n\t\t var hash = this.hash;\n\t\t if (context) {\n\t\t hash.contexts[key] = context;\n\t\t }\n\t\t if (type) {\n\t\t hash.types[key] = type;\n\t\t }\n\t\t if (id) {\n\t\t hash.ids[key] = id;\n\t\t }\n\t\t hash.values[key] = value;\n\t\t },\n\t\n\t\t pushId: function pushId(type, name, child) {\n\t\t if (type === 'BlockParam') {\n\t\t this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : ''));\n\t\t } else if (type === 'PathExpression') {\n\t\t this.pushString(name);\n\t\t } else if (type === 'SubExpression') {\n\t\t this.pushStackLiteral('true');\n\t\t } else {\n\t\t this.pushStackLiteral('null');\n\t\t }\n\t\t },\n\t\n\t\t // HELPERS\n\t\n\t\t compiler: JavaScriptCompiler,\n\t\n\t\t compileChildren: function compileChildren(environment, options) {\n\t\t var children = environment.children,\n\t\t child = undefined,\n\t\t compiler = undefined;\n\t\n\t\t for (var i = 0, l = children.length; i < l; i++) {\n\t\t child = children[i];\n\t\t compiler = new this.compiler(); // eslint-disable-line new-cap\n\t\n\t\t var existing = this.matchExistingProgram(child);\n\t\n\t\t if (existing == null) {\n\t\t this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children\n\t\t var index = this.context.programs.length;\n\t\t child.index = index;\n\t\t child.name = 'program' + index;\n\t\t this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile);\n\t\t this.context.decorators[index] = compiler.decorators;\n\t\t this.context.environments[index] = child;\n\t\n\t\t this.useDepths = this.useDepths || compiler.useDepths;\n\t\t this.useBlockParams = this.useBlockParams || compiler.useBlockParams;\n\t\t child.useDepths = this.useDepths;\n\t\t child.useBlockParams = this.useBlockParams;\n\t\t } else {\n\t\t child.index = existing.index;\n\t\t child.name = 'program' + existing.index;\n\t\n\t\t this.useDepths = this.useDepths || existing.useDepths;\n\t\t this.useBlockParams = this.useBlockParams || existing.useBlockParams;\n\t\t }\n\t\t }\n\t\t },\n\t\t matchExistingProgram: function matchExistingProgram(child) {\n\t\t for (var i = 0, len = this.context.environments.length; i < len; i++) {\n\t\t var environment = this.context.environments[i];\n\t\t if (environment && environment.equals(child)) {\n\t\t return environment;\n\t\t }\n\t\t }\n\t\t },\n\t\n\t\t programExpression: function programExpression(guid) {\n\t\t var child = this.environment.children[guid],\n\t\t programParams = [child.index, 'data', child.blockParams];\n\t\n\t\t if (this.useBlockParams || this.useDepths) {\n\t\t programParams.push('blockParams');\n\t\t }\n\t\t if (this.useDepths) {\n\t\t programParams.push('depths');\n\t\t }\n\t\n\t\t return 'container.program(' + programParams.join(', ') + ')';\n\t\t },\n\t\n\t\t useRegister: function useRegister(name) {\n\t\t if (!this.registers[name]) {\n\t\t this.registers[name] = true;\n\t\t this.registers.list.push(name);\n\t\t }\n\t\t },\n\t\n\t\t push: function push(expr) {\n\t\t if (!(expr instanceof Literal)) {\n\t\t expr = this.source.wrap(expr);\n\t\t }\n\t\n\t\t this.inlineStack.push(expr);\n\t\t return expr;\n\t\t },\n\t\n\t\t pushStackLiteral: function pushStackLiteral(item) {\n\t\t this.push(new Literal(item));\n\t\t },\n\t\n\t\t pushSource: function pushSource(source) {\n\t\t if (this.pendingContent) {\n\t\t this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation));\n\t\t this.pendingContent = undefined;\n\t\t }\n\t\n\t\t if (source) {\n\t\t this.source.push(source);\n\t\t }\n\t\t },\n\t\n\t\t replaceStack: function replaceStack(callback) {\n\t\t var prefix = ['('],\n\t\t stack = undefined,\n\t\t createdStack = undefined,\n\t\t usedLiteral = undefined;\n\t\n\t\t /* istanbul ignore next */\n\t\t if (!this.isInline()) {\n\t\t throw new _exception2['default']('replaceStack on non-inline');\n\t\t }\n\t\n\t\t // We want to merge the inline statement into the replacement statement via ','\n\t\t var top = this.popStack(true);\n\t\n\t\t if (top instanceof Literal) {\n\t\t // Literals do not need to be inlined\n\t\t stack = [top.value];\n\t\t prefix = ['(', stack];\n\t\t usedLiteral = true;\n\t\t } else {\n\t\t // Get or create the current stack name for use by the inline\n\t\t createdStack = true;\n\t\t var _name = this.incrStack();\n\t\n\t\t prefix = ['((', this.push(_name), ' = ', top, ')'];\n\t\t stack = this.topStack();\n\t\t }\n\t\n\t\t var item = callback.call(this, stack);\n\t\n\t\t if (!usedLiteral) {\n\t\t this.popStack();\n\t\t }\n\t\t if (createdStack) {\n\t\t this.stackSlot--;\n\t\t }\n\t\t this.push(prefix.concat(item, ')'));\n\t\t },\n\t\n\t\t incrStack: function incrStack() {\n\t\t this.stackSlot++;\n\t\t if (this.stackSlot > this.stackVars.length) {\n\t\t this.stackVars.push('stack' + this.stackSlot);\n\t\t }\n\t\t return this.topStackName();\n\t\t },\n\t\t topStackName: function topStackName() {\n\t\t return 'stack' + this.stackSlot;\n\t\t },\n\t\t flushInline: function flushInline() {\n\t\t var inlineStack = this.inlineStack;\n\t\t this.inlineStack = [];\n\t\t for (var i = 0, len = inlineStack.length; i < len; i++) {\n\t\t var entry = inlineStack[i];\n\t\t /* istanbul ignore if */\n\t\t if (entry instanceof Literal) {\n\t\t this.compileStack.push(entry);\n\t\t } else {\n\t\t var stack = this.incrStack();\n\t\t this.pushSource([stack, ' = ', entry, ';']);\n\t\t this.compileStack.push(stack);\n\t\t }\n\t\t }\n\t\t },\n\t\t isInline: function isInline() {\n\t\t return this.inlineStack.length;\n\t\t },\n\t\n\t\t popStack: function popStack(wrapped) {\n\t\t var inline = this.isInline(),\n\t\t item = (inline ? this.inlineStack : this.compileStack).pop();\n\t\n\t\t if (!wrapped && item instanceof Literal) {\n\t\t return item.value;\n\t\t } else {\n\t\t if (!inline) {\n\t\t /* istanbul ignore next */\n\t\t if (!this.stackSlot) {\n\t\t throw new _exception2['default']('Invalid stack pop');\n\t\t }\n\t\t this.stackSlot--;\n\t\t }\n\t\t return item;\n\t\t }\n\t\t },\n\t\n\t\t topStack: function topStack() {\n\t\t var stack = this.isInline() ? this.inlineStack : this.compileStack,\n\t\t item = stack[stack.length - 1];\n\t\n\t\t /* istanbul ignore if */\n\t\t if (item instanceof Literal) {\n\t\t return item.value;\n\t\t } else {\n\t\t return item;\n\t\t }\n\t\t },\n\t\n\t\t contextName: function contextName(context) {\n\t\t if (this.useDepths && context) {\n\t\t return 'depths[' + context + ']';\n\t\t } else {\n\t\t return 'depth' + context;\n\t\t }\n\t\t },\n\t\n\t\t quotedString: function quotedString(str) {\n\t\t return this.source.quotedString(str);\n\t\t },\n\t\n\t\t objectLiteral: function objectLiteral(obj) {\n\t\t return this.source.objectLiteral(obj);\n\t\t },\n\t\n\t\t aliasable: function aliasable(name) {\n\t\t var ret = this.aliases[name];\n\t\t if (ret) {\n\t\t ret.referenceCount++;\n\t\t return ret;\n\t\t }\n\t\n\t\t ret = this.aliases[name] = this.source.wrap(name);\n\t\t ret.aliasable = true;\n\t\t ret.referenceCount = 1;\n\t\n\t\t return ret;\n\t\t },\n\t\n\t\t setupHelper: function setupHelper(paramSize, name, blockHelper) {\n\t\t var params = [],\n\t\t paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper);\n\t\t var foundHelper = this.nameLookup('helpers', name, 'helper'),\n\t\t callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : (container.nullContext || {})');\n\t\n\t\t return {\n\t\t params: params,\n\t\t paramsInit: paramsInit,\n\t\t name: foundHelper,\n\t\t callParams: [callContext].concat(params)\n\t\t };\n\t\t },\n\t\n\t\t setupParams: function setupParams(helper, paramSize, params) {\n\t\t var options = {},\n\t\t contexts = [],\n\t\t types = [],\n\t\t ids = [],\n\t\t objectArgs = !params,\n\t\t param = undefined;\n\t\n\t\t if (objectArgs) {\n\t\t params = [];\n\t\t }\n\t\n\t\t options.name = this.quotedString(helper);\n\t\t options.hash = this.popStack();\n\t\n\t\t if (this.trackIds) {\n\t\t options.hashIds = this.popStack();\n\t\t }\n\t\t if (this.stringParams) {\n\t\t options.hashTypes = this.popStack();\n\t\t options.hashContexts = this.popStack();\n\t\t }\n\t\n\t\t var inverse = this.popStack(),\n\t\t program = this.popStack();\n\t\n\t\t // Avoid setting fn and inverse if neither are set. This allows\n\t\t // helpers to do a check for `if (options.fn)`\n\t\t if (program || inverse) {\n\t\t options.fn = program || 'container.noop';\n\t\t options.inverse = inverse || 'container.noop';\n\t\t }\n\t\n\t\t // The parameters go on to the stack in order (making sure that they are evaluated in order)\n\t\t // so we need to pop them off the stack in reverse order\n\t\t var i = paramSize;\n\t\t while (i--) {\n\t\t param = this.popStack();\n\t\t params[i] = param;\n\t\n\t\t if (this.trackIds) {\n\t\t ids[i] = this.popStack();\n\t\t }\n\t\t if (this.stringParams) {\n\t\t types[i] = this.popStack();\n\t\t contexts[i] = this.popStack();\n\t\t }\n\t\t }\n\t\n\t\t if (objectArgs) {\n\t\t options.args = this.source.generateArray(params);\n\t\t }\n\t\n\t\t if (this.trackIds) {\n\t\t options.ids = this.source.generateArray(ids);\n\t\t }\n\t\t if (this.stringParams) {\n\t\t options.types = this.source.generateArray(types);\n\t\t options.contexts = this.source.generateArray(contexts);\n\t\t }\n\t\n\t\t if (this.options.data) {\n\t\t options.data = 'data';\n\t\t }\n\t\t if (this.useBlockParams) {\n\t\t options.blockParams = 'blockParams';\n\t\t }\n\t\t return options;\n\t\t },\n\t\n\t\t setupHelperArgs: function setupHelperArgs(helper, paramSize, params, useRegister) {\n\t\t var options = this.setupParams(helper, paramSize, params);\n\t\t options = this.objectLiteral(options);\n\t\t if (useRegister) {\n\t\t this.useRegister('options');\n\t\t params.push('options');\n\t\t return ['options=', options];\n\t\t } else if (params) {\n\t\t params.push(options);\n\t\t return '';\n\t\t } else {\n\t\t return options;\n\t\t }\n\t\t }\n\t\t};\n\t\n\t\t(function () {\n\t\t var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' ');\n\t\n\t\t var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};\n\t\n\t\t for (var i = 0, l = reservedWords.length; i < l; i++) {\n\t\t compilerWords[reservedWords[i]] = true;\n\t\t }\n\t\t})();\n\t\n\t\tJavaScriptCompiler.isValidJavaScriptVariableName = function (name) {\n\t\t return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name);\n\t\t};\n\t\n\t\tfunction strictLookup(requireTerminal, compiler, parts, type) {\n\t\t var stack = compiler.popStack(),\n\t\t i = 0,\n\t\t len = parts.length;\n\t\t if (requireTerminal) {\n\t\t len--;\n\t\t }\n\t\n\t\t for (; i < len; i++) {\n\t\t stack = compiler.nameLookup(stack, parts[i], type);\n\t\t }\n\t\n\t\t if (requireTerminal) {\n\t\t return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ')'];\n\t\t } else {\n\t\t return stack;\n\t\t }\n\t\t}\n\t\n\t\texports['default'] = JavaScriptCompiler;\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ }),\n\t/* 43 */\n\t/***/ (function(module, exports, __webpack_require__) {\n\t\n\t\t/* global define */\n\t\t'use strict';\n\t\n\t\texports.__esModule = true;\n\t\n\t\tvar _utils = __webpack_require__(5);\n\t\n\t\tvar SourceNode = undefined;\n\t\n\t\ttry {\n\t\t /* istanbul ignore next */\n\t\t if (false) {\n\t\t // We don't support this in AMD environments. For these environments, we asusme that\n\t\t // they are running on the browser and thus have no need for the source-map library.\n\t\t var SourceMap = require('source-map');\n\t\t SourceNode = SourceMap.SourceNode;\n\t\t }\n\t\t} catch (err) {}\n\t\t/* NOP */\n\t\n\t\t/* istanbul ignore if: tested but not covered in istanbul due to dist build */\n\t\tif (!SourceNode) {\n\t\t SourceNode = function (line, column, srcFile, chunks) {\n\t\t this.src = '';\n\t\t if (chunks) {\n\t\t this.add(chunks);\n\t\t }\n\t\t };\n\t\t /* istanbul ignore next */\n\t\t SourceNode.prototype = {\n\t\t add: function add(chunks) {\n\t\t if (_utils.isArray(chunks)) {\n\t\t chunks = chunks.join('');\n\t\t }\n\t\t this.src += chunks;\n\t\t },\n\t\t prepend: function prepend(chunks) {\n\t\t if (_utils.isArray(chunks)) {\n\t\t chunks = chunks.join('');\n\t\t }\n\t\t this.src = chunks + this.src;\n\t\t },\n\t\t toStringWithSourceMap: function toStringWithSourceMap() {\n\t\t return { code: this.toString() };\n\t\t },\n\t\t toString: function toString() {\n\t\t return this.src;\n\t\t }\n\t\t };\n\t\t}\n\t\n\t\tfunction castChunk(chunk, codeGen, loc) {\n\t\t if (_utils.isArray(chunk)) {\n\t\t var ret = [];\n\t\n\t\t for (var i = 0, len = chunk.length; i < len; i++) {\n\t\t ret.push(codeGen.wrap(chunk[i], loc));\n\t\t }\n\t\t return ret;\n\t\t } else if (typeof chunk === 'boolean' || typeof chunk === 'number') {\n\t\t // Handle primitives that the SourceNode will throw up on\n\t\t return chunk + '';\n\t\t }\n\t\t return chunk;\n\t\t}\n\t\n\t\tfunction CodeGen(srcFile) {\n\t\t this.srcFile = srcFile;\n\t\t this.source = [];\n\t\t}\n\t\n\t\tCodeGen.prototype = {\n\t\t isEmpty: function isEmpty() {\n\t\t return !this.source.length;\n\t\t },\n\t\t prepend: function prepend(source, loc) {\n\t\t this.source.unshift(this.wrap(source, loc));\n\t\t },\n\t\t push: function push(source, loc) {\n\t\t this.source.push(this.wrap(source, loc));\n\t\t },\n\t\n\t\t merge: function merge() {\n\t\t var source = this.empty();\n\t\t this.each(function (line) {\n\t\t source.add([' ', line, '\\n']);\n\t\t });\n\t\t return source;\n\t\t },\n\t\n\t\t each: function each(iter) {\n\t\t for (var i = 0, len = this.source.length; i < len; i++) {\n\t\t iter(this.source[i]);\n\t\t }\n\t\t },\n\t\n\t\t empty: function empty() {\n\t\t var loc = this.currentLocation || { start: {} };\n\t\t return new SourceNode(loc.start.line, loc.start.column, this.srcFile);\n\t\t },\n\t\t wrap: function wrap(chunk) {\n\t\t var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1];\n\t\n\t\t if (chunk instanceof SourceNode) {\n\t\t return chunk;\n\t\t }\n\t\n\t\t chunk = castChunk(chunk, this, loc);\n\t\n\t\t return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk);\n\t\t },\n\t\n\t\t functionCall: function functionCall(fn, type, params) {\n\t\t params = this.generateList(params);\n\t\t return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);\n\t\t },\n\t\n\t\t quotedString: function quotedString(str) {\n\t\t return '\"' + (str + '').replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\u2028/g, '\\\\u2028') // Per Ecma-262 7.3 + 7.8.4\n\t\t .replace(/\\u2029/g, '\\\\u2029') + '\"';\n\t\t },\n\t\n\t\t objectLiteral: function objectLiteral(obj) {\n\t\t var pairs = [];\n\t\n\t\t for (var key in obj) {\n\t\t if (obj.hasOwnProperty(key)) {\n\t\t var value = castChunk(obj[key], this);\n\t\t if (value !== 'undefined') {\n\t\t pairs.push([this.quotedString(key), ':', value]);\n\t\t }\n\t\t }\n\t\t }\n\t\n\t\t var ret = this.generateList(pairs);\n\t\t ret.prepend('{');\n\t\t ret.add('}');\n\t\t return ret;\n\t\t },\n\t\n\t\t generateList: function generateList(entries) {\n\t\t var ret = this.empty();\n\t\n\t\t for (var i = 0, len = entries.length; i < len; i++) {\n\t\t if (i) {\n\t\t ret.add(',');\n\t\t }\n\t\n\t\t ret.add(castChunk(entries[i], this));\n\t\t }\n\t\n\t\t return ret;\n\t\t },\n\t\n\t\t generateArray: function generateArray(entries) {\n\t\t var ret = this.generateList(entries);\n\t\t ret.prepend('[');\n\t\t ret.add(']');\n\t\n\t\t return ret;\n\t\t }\n\t\t};\n\t\n\t\texports['default'] = CodeGen;\n\t\tmodule.exports = exports['default'];\n\t\n\t/***/ })\n\t/******/ ])\n\t});\n\t;\n\n/***/ },\n/* 403 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global) {// Backbone.js 1.2.1\n\t\n\t// (c) 2010-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t// Backbone may be freely distributed under the MIT license.\n\t// For all details and documentation:\n\t// http://backbonejs.org\n\t\n\t(function(factory) {\n\t\n\t // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n\t // We use `self` instead of `window` for `WebWorker` support.\n\t var root = (typeof self == 'object' && self.self == self && self) ||\n\t (typeof global == 'object' && global.global == global && global);\n\t\n\t // Set up Backbone appropriately for the environment. Start with AMD.\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(328), __webpack_require__(404), exports], __WEBPACK_AMD_DEFINE_RESULT__ = function(_, $, exports) {\n\t // Export global even in AMD case in case this script is loaded with\n\t // others that may still expect a global Backbone.\n\t root.Backbone = factory(root, exports, _, $);\n\t }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n\t } else if (typeof exports !== 'undefined') {\n\t var _ = require('underscore'), $;\n\t try { $ = require('jquery'); } catch(e) {}\n\t factory(root, exports, _, $);\n\t\n\t // Finally, as a browser global.\n\t } else {\n\t root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$));\n\t }\n\t\n\t}(function(root, Backbone, _, $) {\n\t\n\t // Initial Setup\n\t // -------------\n\t\n\t // Save the previous value of the `Backbone` variable, so that it can be\n\t // restored later on, if `noConflict` is used.\n\t var previousBackbone = root.Backbone;\n\t\n\t // Create a local reference to a common array method we'll want to use later.\n\t var slice = [].slice;\n\t\n\t // Current version of the library. Keep in sync with `package.json`.\n\t Backbone.VERSION = '1.2.1';\n\t\n\t // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n\t // the `$` variable.\n\t Backbone.$ = $;\n\t\n\t // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n\t // to its previous owner. Returns a reference to this Backbone object.\n\t Backbone.noConflict = function() {\n\t root.Backbone = previousBackbone;\n\t return this;\n\t };\n\t\n\t // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n\t // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n\t // set a `X-Http-Method-Override` header.\n\t Backbone.emulateHTTP = false;\n\t\n\t // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n\t // `application/json` requests ... this will encode the body as\n\t // `application/x-www-form-urlencoded` instead and will send the model in a\n\t // form param named `model`.\n\t Backbone.emulateJSON = false;\n\t\n\t // Proxy Underscore methods to a Backbone class' prototype using a\n\t // particular attribute as the data argument\n\t var addMethod = function(length, method, attribute) {\n\t switch (length) {\n\t case 1: return function() {\n\t return _[method](this[attribute]);\n\t };\n\t case 2: return function(value) {\n\t return _[method](this[attribute], value);\n\t };\n\t case 3: return function(iteratee, context) {\n\t return _[method](this[attribute], iteratee, context);\n\t };\n\t case 4: return function(iteratee, defaultVal, context) {\n\t return _[method](this[attribute], iteratee, defaultVal, context);\n\t };\n\t default: return function() {\n\t var args = slice.call(arguments);\n\t args.unshift(this[attribute]);\n\t return _[method].apply(_, args);\n\t };\n\t }\n\t };\n\t var addUnderscoreMethods = function(Class, methods, attribute) {\n\t _.each(methods, function(length, method) {\n\t if (_[method]) Class.prototype[method] = addMethod(length, method, attribute);\n\t });\n\t };\n\t\n\t // Backbone.Events\n\t // ---------------\n\t\n\t // A module that can be mixed in to *any object* in order to provide it with\n\t // custom events. You may bind with `on` or remove with `off` callback\n\t // functions to an event; `trigger`-ing an event fires all callbacks in\n\t // succession.\n\t //\n\t // var object = {};\n\t // _.extend(object, Backbone.Events);\n\t // object.on('expand', function(){ alert('expanded'); });\n\t // object.trigger('expand');\n\t //\n\t var Events = Backbone.Events = {};\n\t\n\t // Regular expression used to split event strings.\n\t var eventSplitter = /\\s+/;\n\t\n\t // Iterates over the standard `event, callback` (as well as the fancy multiple\n\t // space-separated events `\"change blur\", callback` and jQuery-style event\n\t // maps `{event: callback}`), reducing them by manipulating `memo`.\n\t // Passes a normalized single event name and callback, as well as any\n\t // optional `opts`.\n\t var eventsApi = function(iteratee, memo, name, callback, opts) {\n\t var i = 0, names;\n\t if (name && typeof name === 'object') {\n\t // Handle event maps.\n\t if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n\t for (names = _.keys(name); i < names.length ; i++) {\n\t memo = iteratee(memo, names[i], name[names[i]], opts);\n\t }\n\t } else if (name && eventSplitter.test(name)) {\n\t // Handle space separated event names.\n\t for (names = name.split(eventSplitter); i < names.length; i++) {\n\t memo = iteratee(memo, names[i], callback, opts);\n\t }\n\t } else {\n\t memo = iteratee(memo, name, callback, opts);\n\t }\n\t return memo;\n\t };\n\t\n\t // Bind an event to a `callback` function. Passing `\"all\"` will bind\n\t // the callback to all events fired.\n\t Events.on = function(name, callback, context) {\n\t return internalOn(this, name, callback, context);\n\t };\n\t\n\t // An internal use `on` function, used to guard the `listening` argument from\n\t // the public API.\n\t var internalOn = function(obj, name, callback, context, listening) {\n\t obj._events = eventsApi(onApi, obj._events || {}, name, callback, {\n\t context: context,\n\t ctx: obj,\n\t listening: listening\n\t });\n\t\n\t if (listening) {\n\t var listeners = obj._listeners || (obj._listeners = {});\n\t listeners[listening.id] = listening;\n\t }\n\t\n\t return obj;\n\t };\n\t\n\t // Inversion-of-control versions of `on`. Tell *this* object to listen to\n\t // an event in another object... keeping track of what it's listening to.\n\t Events.listenTo = function(obj, name, callback) {\n\t if (!obj) return this;\n\t var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n\t var listeningTo = this._listeningTo || (this._listeningTo = {});\n\t var listening = listeningTo[id];\n\t\n\t // This object is not listening to any other events on `obj` yet.\n\t // Setup the necessary references to track the listening callbacks.\n\t if (!listening) {\n\t var thisId = this._listenId || (this._listenId = _.uniqueId('l'));\n\t listening = listeningTo[id] = {obj: obj, objId: id, id: thisId, listeningTo: listeningTo, count: 0};\n\t }\n\t\n\t // Bind callbacks on obj, and keep track of them on listening.\n\t internalOn(obj, name, callback, this, listening);\n\t return this;\n\t };\n\t\n\t // The reducing API that adds a callback to the `events` object.\n\t var onApi = function(events, name, callback, options) {\n\t if (callback) {\n\t var handlers = events[name] || (events[name] = []);\n\t var context = options.context, ctx = options.ctx, listening = options.listening;\n\t if (listening) listening.count++;\n\t\n\t handlers.push({ callback: callback, context: context, ctx: context || ctx, listening: listening });\n\t }\n\t return events;\n\t };\n\t\n\t // Remove one or many callbacks. If `context` is null, removes all\n\t // callbacks with that function. If `callback` is null, removes all\n\t // callbacks for the event. If `name` is null, removes all bound\n\t // callbacks for all events.\n\t Events.off = function(name, callback, context) {\n\t if (!this._events) return this;\n\t this._events = eventsApi(offApi, this._events, name, callback, {\n\t context: context,\n\t listeners: this._listeners\n\t });\n\t return this;\n\t };\n\t\n\t // Tell this object to stop listening to either specific events ... or\n\t // to every object it's currently listening to.\n\t Events.stopListening = function(obj, name, callback) {\n\t var listeningTo = this._listeningTo;\n\t if (!listeningTo) return this;\n\t\n\t var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n\t\n\t for (var i = 0; i < ids.length; i++) {\n\t var listening = listeningTo[ids[i]];\n\t\n\t // If listening doesn't exist, this object is not currently\n\t // listening to obj. Break out early.\n\t if (!listening) break;\n\t\n\t listening.obj.off(name, callback, this);\n\t }\n\t if (_.isEmpty(listeningTo)) this._listeningTo = void 0;\n\t\n\t return this;\n\t };\n\t\n\t // The reducing API that removes a callback from the `events` object.\n\t var offApi = function(events, name, callback, options) {\n\t // No events to consider.\n\t if (!events) return;\n\t\n\t var i = 0, listening;\n\t var context = options.context, listeners = options.listeners;\n\t\n\t // Delete all events listeners and \"drop\" events.\n\t if (!name && !callback && !context) {\n\t var ids = _.keys(listeners);\n\t for (; i < ids.length; i++) {\n\t listening = listeners[ids[i]];\n\t delete listeners[listening.id];\n\t delete listening.listeningTo[listening.objId];\n\t }\n\t return;\n\t }\n\t\n\t var names = name ? [name] : _.keys(events);\n\t for (; i < names.length; i++) {\n\t name = names[i];\n\t var handlers = events[name];\n\t\n\t // Bail out if there are no events stored.\n\t if (!handlers) break;\n\t\n\t // Replace events if there are any remaining. Otherwise, clean up.\n\t var remaining = [];\n\t for (var j = 0; j < handlers.length; j++) {\n\t var handler = handlers[j];\n\t if (\n\t callback && callback !== handler.callback &&\n\t callback !== handler.callback._callback ||\n\t context && context !== handler.context\n\t ) {\n\t remaining.push(handler);\n\t } else {\n\t listening = handler.listening;\n\t if (listening && --listening.count === 0) {\n\t delete listeners[listening.id];\n\t delete listening.listeningTo[listening.objId];\n\t }\n\t }\n\t }\n\t\n\t // Update tail event if the list has any events. Otherwise, clean up.\n\t if (remaining.length) {\n\t events[name] = remaining;\n\t } else {\n\t delete events[name];\n\t }\n\t }\n\t if (_.size(events)) return events;\n\t };\n\t\n\t // Bind an event to only be triggered a single time. After the first time\n\t // the callback is invoked, it will be removed. When multiple events are\n\t // passed in using the space-separated syntax, the event will fire once for every\n\t // event you passed in, not once for a combination of all events\n\t Events.once = function(name, callback, context) {\n\t // Map the event into a `{event: once}` object.\n\t var events = eventsApi(onceMap, {}, name, callback, _.bind(this.off, this));\n\t return this.on(events, void 0, context);\n\t };\n\t\n\t // Inversion-of-control versions of `once`.\n\t Events.listenToOnce = function(obj, name, callback) {\n\t // Map the event into a `{event: once}` object.\n\t var events = eventsApi(onceMap, {}, name, callback, _.bind(this.stopListening, this, obj));\n\t return this.listenTo(obj, events);\n\t };\n\t\n\t // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n\t // `offer` unbinds the `onceWrapper` after it has been called.\n\t var onceMap = function(map, name, callback, offer) {\n\t if (callback) {\n\t var once = map[name] = _.once(function() {\n\t offer(name, once);\n\t callback.apply(this, arguments);\n\t });\n\t once._callback = callback;\n\t }\n\t return map;\n\t };\n\t\n\t // Trigger one or many events, firing all bound callbacks. Callbacks are\n\t // passed the same arguments as `trigger` is, apart from the event name\n\t // (unless you're listening on `\"all\"`, which will cause your callback to\n\t // receive the true name of the event as the first argument).\n\t Events.trigger = function(name) {\n\t if (!this._events) return this;\n\t\n\t var length = Math.max(0, arguments.length - 1);\n\t var args = Array(length);\n\t for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\t\n\t eventsApi(triggerApi, this._events, name, void 0, args);\n\t return this;\n\t };\n\t\n\t // Handles triggering the appropriate event callbacks.\n\t var triggerApi = function(objEvents, name, cb, args) {\n\t if (objEvents) {\n\t var events = objEvents[name];\n\t var allEvents = objEvents.all;\n\t if (events && allEvents) allEvents = allEvents.slice();\n\t if (events) triggerEvents(events, args);\n\t if (allEvents) triggerEvents(allEvents, [name].concat(args));\n\t }\n\t return objEvents;\n\t };\n\t\n\t // A difficult-to-believe, but optimized internal dispatch function for\n\t // triggering events. Tries to keep the usual cases speedy (most internal\n\t // Backbone events have 3 arguments).\n\t var triggerEvents = function(events, args) {\n\t var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n\t switch (args.length) {\n\t case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n\t case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n\t case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n\t case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n\t default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n\t }\n\t };\n\t\n\t // Aliases for backwards compatibility.\n\t Events.bind = Events.on;\n\t Events.unbind = Events.off;\n\t\n\t // Allow the `Backbone` object to serve as a global event bus, for folks who\n\t // want global \"pubsub\" in a convenient place.\n\t _.extend(Backbone, Events);\n\t\n\t // Backbone.Model\n\t // --------------\n\t\n\t // Backbone **Models** are the basic data object in the framework --\n\t // frequently representing a row in a table in a database on your server.\n\t // A discrete chunk of data and a bunch of useful, related methods for\n\t // performing computations and transformations on that data.\n\t\n\t // Create a new model with the specified attributes. A client id (`cid`)\n\t // is automatically generated and assigned for you.\n\t var Model = Backbone.Model = function(attributes, options) {\n\t var attrs = attributes || {};\n\t options || (options = {});\n\t this.cid = _.uniqueId(this.cidPrefix);\n\t this.attributes = {};\n\t if (options.collection) this.collection = options.collection;\n\t if (options.parse) attrs = this.parse(attrs, options) || {};\n\t attrs = _.defaults({}, attrs, _.result(this, 'defaults'));\n\t this.set(attrs, options);\n\t this.changed = {};\n\t this.initialize.apply(this, arguments);\n\t };\n\t\n\t // Attach all inheritable methods to the Model prototype.\n\t _.extend(Model.prototype, Events, {\n\t\n\t // A hash of attributes whose current and previous value differ.\n\t changed: null,\n\t\n\t // The value returned during the last failed validation.\n\t validationError: null,\n\t\n\t // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n\t // CouchDB users may want to set this to `\"_id\"`.\n\t idAttribute: 'id',\n\t\n\t // The prefix is used to create the client id which is used to identify models locally.\n\t // You may want to override this if you're experiencing name clashes with model ids.\n\t cidPrefix: 'c',\n\t\n\t // Initialize is an empty function by default. Override it with your own\n\t // initialization logic.\n\t initialize: function(){},\n\t\n\t // Return a copy of the model's `attributes` object.\n\t toJSON: function(options) {\n\t return _.clone(this.attributes);\n\t },\n\t\n\t // Proxy `Backbone.sync` by default -- but override this if you need\n\t // custom syncing semantics for *this* particular model.\n\t sync: function() {\n\t return Backbone.sync.apply(this, arguments);\n\t },\n\t\n\t // Get the value of an attribute.\n\t get: function(attr) {\n\t return this.attributes[attr];\n\t },\n\t\n\t // Get the HTML-escaped value of an attribute.\n\t escape: function(attr) {\n\t return _.escape(this.get(attr));\n\t },\n\t\n\t // Returns `true` if the attribute contains a value that is not null\n\t // or undefined.\n\t has: function(attr) {\n\t return this.get(attr) != null;\n\t },\n\t\n\t // Special-cased proxy to underscore's `_.matches` method.\n\t matches: function(attrs) {\n\t return !!_.iteratee(attrs, this)(this.attributes);\n\t },\n\t\n\t // Set a hash of model attributes on the object, firing `\"change\"`. This is\n\t // the core primitive operation of a model, updating the data and notifying\n\t // anyone who needs to know about the change in state. The heart of the beast.\n\t set: function(key, val, options) {\n\t if (key == null) return this;\n\t\n\t // Handle both `\"key\", value` and `{key: value}` -style arguments.\n\t var attrs;\n\t if (typeof key === 'object') {\n\t attrs = key;\n\t options = val;\n\t } else {\n\t (attrs = {})[key] = val;\n\t }\n\t\n\t options || (options = {});\n\t\n\t // Run validation.\n\t if (!this._validate(attrs, options)) return false;\n\t\n\t // Extract attributes and options.\n\t var unset = options.unset;\n\t var silent = options.silent;\n\t var changes = [];\n\t var changing = this._changing;\n\t this._changing = true;\n\t\n\t if (!changing) {\n\t this._previousAttributes = _.clone(this.attributes);\n\t this.changed = {};\n\t }\n\t\n\t var current = this.attributes;\n\t var changed = this.changed;\n\t var prev = this._previousAttributes;\n\t\n\t // Check for changes of `id`.\n\t if (this.idAttribute in attrs) this.id = attrs[this.idAttribute];\n\t\n\t // For each `set` attribute, update or delete the current value.\n\t for (var attr in attrs) {\n\t val = attrs[attr];\n\t if (!_.isEqual(current[attr], val)) changes.push(attr);\n\t if (!_.isEqual(prev[attr], val)) {\n\t changed[attr] = val;\n\t } else {\n\t delete changed[attr];\n\t }\n\t unset ? delete current[attr] : current[attr] = val;\n\t }\n\t\n\t // Trigger all relevant attribute changes.\n\t if (!silent) {\n\t if (changes.length) this._pending = options;\n\t for (var i = 0; i < changes.length; i++) {\n\t this.trigger('change:' + changes[i], this, current[changes[i]], options);\n\t }\n\t }\n\t\n\t // You might be wondering why there's a `while` loop here. Changes can\n\t // be recursively nested within `\"change\"` events.\n\t if (changing) return this;\n\t if (!silent) {\n\t while (this._pending) {\n\t options = this._pending;\n\t this._pending = false;\n\t this.trigger('change', this, options);\n\t }\n\t }\n\t this._pending = false;\n\t this._changing = false;\n\t return this;\n\t },\n\t\n\t // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n\t // if the attribute doesn't exist.\n\t unset: function(attr, options) {\n\t return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n\t },\n\t\n\t // Clear all attributes on the model, firing `\"change\"`.\n\t clear: function(options) {\n\t var attrs = {};\n\t for (var key in this.attributes) attrs[key] = void 0;\n\t return this.set(attrs, _.extend({}, options, {unset: true}));\n\t },\n\t\n\t // Determine if the model has changed since the last `\"change\"` event.\n\t // If you specify an attribute name, determine if that attribute has changed.\n\t hasChanged: function(attr) {\n\t if (attr == null) return !_.isEmpty(this.changed);\n\t return _.has(this.changed, attr);\n\t },\n\t\n\t // Return an object containing all the attributes that have changed, or\n\t // false if there are no changed attributes. Useful for determining what\n\t // parts of a view need to be updated and/or what attributes need to be\n\t // persisted to the server. Unset attributes will be set to undefined.\n\t // You can also pass an attributes object to diff against the model,\n\t // determining if there *would be* a change.\n\t changedAttributes: function(diff) {\n\t if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n\t var old = this._changing ? this._previousAttributes : this.attributes;\n\t var changed = {};\n\t for (var attr in diff) {\n\t var val = diff[attr];\n\t if (_.isEqual(old[attr], val)) continue;\n\t changed[attr] = val;\n\t }\n\t return _.size(changed) ? changed : false;\n\t },\n\t\n\t // Get the previous value of an attribute, recorded at the time the last\n\t // `\"change\"` event was fired.\n\t previous: function(attr) {\n\t if (attr == null || !this._previousAttributes) return null;\n\t return this._previousAttributes[attr];\n\t },\n\t\n\t // Get all of the attributes of the model at the time of the previous\n\t // `\"change\"` event.\n\t previousAttributes: function() {\n\t return _.clone(this._previousAttributes);\n\t },\n\t\n\t // Fetch the model from the server, merging the response with the model's\n\t // local attributes. Any changed attributes will trigger a \"change\" event.\n\t fetch: function(options) {\n\t options = _.extend({parse: true}, options);\n\t var model = this;\n\t var success = options.success;\n\t options.success = function(resp) {\n\t var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n\t if (!model.set(serverAttrs, options)) return false;\n\t if (success) success.call(options.context, model, resp, options);\n\t model.trigger('sync', model, resp, options);\n\t };\n\t wrapError(this, options);\n\t return this.sync('read', this, options);\n\t },\n\t\n\t // Set a hash of model attributes, and sync the model to the server.\n\t // If the server returns an attributes hash that differs, the model's\n\t // state will be `set` again.\n\t save: function(key, val, options) {\n\t // Handle both `\"key\", value` and `{key: value}` -style arguments.\n\t var attrs;\n\t if (key == null || typeof key === 'object') {\n\t attrs = key;\n\t options = val;\n\t } else {\n\t (attrs = {})[key] = val;\n\t }\n\t\n\t options = _.extend({validate: true, parse: true}, options);\n\t var wait = options.wait;\n\t\n\t // If we're not waiting and attributes exist, save acts as\n\t // `set(attr).save(null, opts)` with validation. Otherwise, check if\n\t // the model will be valid when the attributes, if any, are set.\n\t if (attrs && !wait) {\n\t if (!this.set(attrs, options)) return false;\n\t } else {\n\t if (!this._validate(attrs, options)) return false;\n\t }\n\t\n\t // After a successful server-side save, the client is (optionally)\n\t // updated with the server-side state.\n\t var model = this;\n\t var success = options.success;\n\t var attributes = this.attributes;\n\t options.success = function(resp) {\n\t // Ensure attributes are restored during synchronous saves.\n\t model.attributes = attributes;\n\t var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n\t if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n\t if (serverAttrs && !model.set(serverAttrs, options)) return false;\n\t if (success) success.call(options.context, model, resp, options);\n\t model.trigger('sync', model, resp, options);\n\t };\n\t wrapError(this, options);\n\t\n\t // Set temporary attributes if `{wait: true}` to properly find new ids.\n\t if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\t\n\t var method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update');\n\t if (method === 'patch' && !options.attrs) options.attrs = attrs;\n\t var xhr = this.sync(method, this, options);\n\t\n\t // Restore attributes.\n\t this.attributes = attributes;\n\t\n\t return xhr;\n\t },\n\t\n\t // Destroy this model on the server if it was already persisted.\n\t // Optimistically removes the model from its collection, if it has one.\n\t // If `wait: true` is passed, waits for the server to respond before removal.\n\t destroy: function(options) {\n\t options = options ? _.clone(options) : {};\n\t var model = this;\n\t var success = options.success;\n\t var wait = options.wait;\n\t\n\t var destroy = function() {\n\t model.stopListening();\n\t model.trigger('destroy', model, model.collection, options);\n\t };\n\t\n\t options.success = function(resp) {\n\t if (wait) destroy();\n\t if (success) success.call(options.context, model, resp, options);\n\t if (!model.isNew()) model.trigger('sync', model, resp, options);\n\t };\n\t\n\t var xhr = false;\n\t if (this.isNew()) {\n\t _.defer(options.success);\n\t } else {\n\t wrapError(this, options);\n\t xhr = this.sync('delete', this, options);\n\t }\n\t if (!wait) destroy();\n\t return xhr;\n\t },\n\t\n\t // Default URL for the model's representation on the server -- if you're\n\t // using Backbone's restful methods, override this to change the endpoint\n\t // that will be called.\n\t url: function() {\n\t var base =\n\t _.result(this, 'urlRoot') ||\n\t _.result(this.collection, 'url') ||\n\t urlError();\n\t if (this.isNew()) return base;\n\t var id = this.get(this.idAttribute);\n\t return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n\t },\n\t\n\t // **parse** converts a response into the hash of attributes to be `set` on\n\t // the model. The default implementation is just to pass the response along.\n\t parse: function(resp, options) {\n\t return resp;\n\t },\n\t\n\t // Create a new model with identical attributes to this one.\n\t clone: function() {\n\t return new this.constructor(this.attributes);\n\t },\n\t\n\t // A model is new if it has never been saved to the server, and lacks an id.\n\t isNew: function() {\n\t return !this.has(this.idAttribute);\n\t },\n\t\n\t // Check if the model is currently in a valid state.\n\t isValid: function(options) {\n\t return this._validate({}, _.defaults({validate: true}, options));\n\t },\n\t\n\t // Run validation against the next complete set of model attributes,\n\t // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n\t _validate: function(attrs, options) {\n\t if (!options.validate || !this.validate) return true;\n\t attrs = _.extend({}, this.attributes, attrs);\n\t var error = this.validationError = this.validate(attrs, options) || null;\n\t if (!error) return true;\n\t this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n\t return false;\n\t }\n\t\n\t });\n\t\n\t // Underscore methods that we want to implement on the Model.\n\t var modelMethods = { keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n\t omit: 0, chain: 1, isEmpty: 1 };\n\t\n\t // Mix in each Underscore method as a proxy to `Model#attributes`.\n\t addUnderscoreMethods(Model, modelMethods, 'attributes');\n\t\n\t // Backbone.Collection\n\t // -------------------\n\t\n\t // If models tend to represent a single row of data, a Backbone Collection is\n\t // more analogous to a table full of data ... or a small slice or page of that\n\t // table, or a collection of rows that belong together for a particular reason\n\t // -- all of the messages in this particular folder, all of the documents\n\t // belonging to this particular author, and so on. Collections maintain\n\t // indexes of their models, both in order, and for lookup by `id`.\n\t\n\t // Create a new **Collection**, perhaps to contain a specific type of `model`.\n\t // If a `comparator` is specified, the Collection will maintain\n\t // its models in sort order, as they're added and removed.\n\t var Collection = Backbone.Collection = function(models, options) {\n\t options || (options = {});\n\t if (options.model) this.model = options.model;\n\t if (options.comparator !== void 0) this.comparator = options.comparator;\n\t this._reset();\n\t this.initialize.apply(this, arguments);\n\t if (models) this.reset(models, _.extend({silent: true}, options));\n\t };\n\t\n\t // Default options for `Collection#set`.\n\t var setOptions = {add: true, remove: true, merge: true};\n\t var addOptions = {add: true, remove: false};\n\t\n\t // Define the Collection's inheritable methods.\n\t _.extend(Collection.prototype, Events, {\n\t\n\t // The default model for a collection is just a **Backbone.Model**.\n\t // This should be overridden in most cases.\n\t model: Model,\n\t\n\t // Initialize is an empty function by default. Override it with your own\n\t // initialization logic.\n\t initialize: function(){},\n\t\n\t // The JSON representation of a Collection is an array of the\n\t // models' attributes.\n\t toJSON: function(options) {\n\t return this.map(function(model) { return model.toJSON(options); });\n\t },\n\t\n\t // Proxy `Backbone.sync` by default.\n\t sync: function() {\n\t return Backbone.sync.apply(this, arguments);\n\t },\n\t\n\t // Add a model, or list of models to the set.\n\t add: function(models, options) {\n\t return this.set(models, _.extend({merge: false}, options, addOptions));\n\t },\n\t\n\t // Remove a model, or a list of models from the set.\n\t remove: function(models, options) {\n\t options = _.extend({}, options);\n\t var singular = !_.isArray(models);\n\t models = singular ? [models] : _.clone(models);\n\t var removed = this._removeModels(models, options);\n\t if (!options.silent && removed) this.trigger('update', this, options);\n\t return singular ? removed[0] : removed;\n\t },\n\t\n\t // Update a collection by `set`-ing a new list of models, adding new ones,\n\t // removing models that are no longer present, and merging models that\n\t // already exist in the collection, as necessary. Similar to **Model#set**,\n\t // the core operation for updating the data contained by the collection.\n\t set: function(models, options) {\n\t options = _.defaults({}, options, setOptions);\n\t if (options.parse && !this._isModel(models)) models = this.parse(models, options);\n\t var singular = !_.isArray(models);\n\t models = singular ? (models ? [models] : []) : models.slice();\n\t var id, model, attrs, existing, sort;\n\t var at = options.at;\n\t if (at != null) at = +at;\n\t if (at < 0) at += this.length + 1;\n\t var sortable = this.comparator && (at == null) && options.sort !== false;\n\t var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\t var toAdd = [], toRemove = [], modelMap = {};\n\t var add = options.add, merge = options.merge, remove = options.remove;\n\t var order = !sortable && add && remove ? [] : false;\n\t var orderChanged = false;\n\t\n\t // Turn bare objects into model references, and prevent invalid models\n\t // from being added.\n\t for (var i = 0; i < models.length; i++) {\n\t attrs = models[i];\n\t\n\t // If a duplicate is found, prevent it from being added and\n\t // optionally merge it into the existing model.\n\t if (existing = this.get(attrs)) {\n\t if (remove) modelMap[existing.cid] = true;\n\t if (merge && attrs !== existing) {\n\t attrs = this._isModel(attrs) ? attrs.attributes : attrs;\n\t if (options.parse) attrs = existing.parse(attrs, options);\n\t existing.set(attrs, options);\n\t if (sortable && !sort && existing.hasChanged(sortAttr)) sort = true;\n\t }\n\t models[i] = existing;\n\t\n\t // If this is a new, valid model, push it to the `toAdd` list.\n\t } else if (add) {\n\t model = models[i] = this._prepareModel(attrs, options);\n\t if (!model) continue;\n\t toAdd.push(model);\n\t this._addReference(model, options);\n\t }\n\t\n\t // Do not add multiple models with the same `id`.\n\t model = existing || model;\n\t if (!model) continue;\n\t id = this.modelId(model.attributes);\n\t if (order && (model.isNew() || !modelMap[id])) {\n\t order.push(model);\n\t\n\t // Check to see if this is actually a new model at this index.\n\t orderChanged = orderChanged || !this.models[i] || model.cid !== this.models[i].cid;\n\t }\n\t\n\t modelMap[id] = true;\n\t }\n\t\n\t // Remove nonexistent models if appropriate.\n\t if (remove) {\n\t for (var i = 0; i < this.length; i++) {\n\t if (!modelMap[(model = this.models[i]).cid]) toRemove.push(model);\n\t }\n\t if (toRemove.length) this._removeModels(toRemove, options);\n\t }\n\t\n\t // See if sorting is needed, update `length` and splice in new models.\n\t if (toAdd.length || orderChanged) {\n\t if (sortable) sort = true;\n\t this.length += toAdd.length;\n\t if (at != null) {\n\t for (var i = 0; i < toAdd.length; i++) {\n\t this.models.splice(at + i, 0, toAdd[i]);\n\t }\n\t } else {\n\t if (order) this.models.length = 0;\n\t var orderedModels = order || toAdd;\n\t for (var i = 0; i < orderedModels.length; i++) {\n\t this.models.push(orderedModels[i]);\n\t }\n\t }\n\t }\n\t\n\t // Silently sort the collection if appropriate.\n\t if (sort) this.sort({silent: true});\n\t\n\t // Unless silenced, it's time to fire all appropriate add/sort events.\n\t if (!options.silent) {\n\t var addOpts = at != null ? _.clone(options) : options;\n\t for (var i = 0; i < toAdd.length; i++) {\n\t if (at != null) addOpts.index = at + i;\n\t (model = toAdd[i]).trigger('add', model, this, addOpts);\n\t }\n\t if (sort || orderChanged) this.trigger('sort', this, options);\n\t if (toAdd.length || toRemove.length) this.trigger('update', this, options);\n\t }\n\t\n\t // Return the added (or merged) model (or models).\n\t return singular ? models[0] : models;\n\t },\n\t\n\t // When you have more items than you want to add or remove individually,\n\t // you can reset the entire set with a new list of models, without firing\n\t // any granular `add` or `remove` events. Fires `reset` when finished.\n\t // Useful for bulk operations and optimizations.\n\t reset: function(models, options) {\n\t options = options ? _.clone(options) : {};\n\t for (var i = 0; i < this.models.length; i++) {\n\t this._removeReference(this.models[i], options);\n\t }\n\t options.previousModels = this.models;\n\t this._reset();\n\t models = this.add(models, _.extend({silent: true}, options));\n\t if (!options.silent) this.trigger('reset', this, options);\n\t return models;\n\t },\n\t\n\t // Add a model to the end of the collection.\n\t push: function(model, options) {\n\t return this.add(model, _.extend({at: this.length}, options));\n\t },\n\t\n\t // Remove a model from the end of the collection.\n\t pop: function(options) {\n\t var model = this.at(this.length - 1);\n\t return this.remove(model, options);\n\t },\n\t\n\t // Add a model to the beginning of the collection.\n\t unshift: function(model, options) {\n\t return this.add(model, _.extend({at: 0}, options));\n\t },\n\t\n\t // Remove a model from the beginning of the collection.\n\t shift: function(options) {\n\t var model = this.at(0);\n\t return this.remove(model, options);\n\t },\n\t\n\t // Slice out a sub-array of models from the collection.\n\t slice: function() {\n\t return slice.apply(this.models, arguments);\n\t },\n\t\n\t // Get a model from the set by id.\n\t get: function(obj) {\n\t if (obj == null) return void 0;\n\t var id = this.modelId(this._isModel(obj) ? obj.attributes : obj);\n\t return this._byId[obj] || this._byId[id] || this._byId[obj.cid];\n\t },\n\t\n\t // Get the model at the given index.\n\t at: function(index) {\n\t if (index < 0) index += this.length;\n\t return this.models[index];\n\t },\n\t\n\t // Return models with matching attributes. Useful for simple cases of\n\t // `filter`.\n\t where: function(attrs, first) {\n\t var matches = _.matches(attrs);\n\t return this[first ? 'find' : 'filter'](function(model) {\n\t return matches(model.attributes);\n\t });\n\t },\n\t\n\t // Return the first model with matching attributes. Useful for simple cases\n\t // of `find`.\n\t findWhere: function(attrs) {\n\t return this.where(attrs, true);\n\t },\n\t\n\t // Force the collection to re-sort itself. You don't need to call this under\n\t // normal circumstances, as the set will maintain sort order as each item\n\t // is added.\n\t sort: function(options) {\n\t if (!this.comparator) throw new Error('Cannot sort a set without a comparator');\n\t options || (options = {});\n\t\n\t // Run sort based on type of `comparator`.\n\t if (_.isString(this.comparator) || this.comparator.length === 1) {\n\t this.models = this.sortBy(this.comparator, this);\n\t } else {\n\t this.models.sort(_.bind(this.comparator, this));\n\t }\n\t\n\t if (!options.silent) this.trigger('sort', this, options);\n\t return this;\n\t },\n\t\n\t // Pluck an attribute from each model in the collection.\n\t pluck: function(attr) {\n\t return _.invoke(this.models, 'get', attr);\n\t },\n\t\n\t // Fetch the default set of models for this collection, resetting the\n\t // collection when they arrive. If `reset: true` is passed, the response\n\t // data will be passed through the `reset` method instead of `set`.\n\t fetch: function(options) {\n\t options = _.extend({parse: true}, options);\n\t var success = options.success;\n\t var collection = this;\n\t options.success = function(resp) {\n\t var method = options.reset ? 'reset' : 'set';\n\t collection[method](resp, options);\n\t if (success) success.call(options.context, collection, resp, options);\n\t collection.trigger('sync', collection, resp, options);\n\t };\n\t wrapError(this, options);\n\t return this.sync('read', this, options);\n\t },\n\t\n\t // Create a new instance of a model in this collection. Add the model to the\n\t // collection immediately, unless `wait: true` is passed, in which case we\n\t // wait for the server to agree.\n\t create: function(model, options) {\n\t options = options ? _.clone(options) : {};\n\t var wait = options.wait;\n\t model = this._prepareModel(model, options);\n\t if (!model) return false;\n\t if (!wait) this.add(model, options);\n\t var collection = this;\n\t var success = options.success;\n\t options.success = function(model, resp, callbackOpts) {\n\t if (wait) collection.add(model, callbackOpts);\n\t if (success) success.call(callbackOpts.context, model, resp, callbackOpts);\n\t };\n\t model.save(null, options);\n\t return model;\n\t },\n\t\n\t // **parse** converts a response into a list of models to be added to the\n\t // collection. The default implementation is just to pass it through.\n\t parse: function(resp, options) {\n\t return resp;\n\t },\n\t\n\t // Create a new collection with an identical list of models as this one.\n\t clone: function() {\n\t return new this.constructor(this.models, {\n\t model: this.model,\n\t comparator: this.comparator\n\t });\n\t },\n\t\n\t // Define how to uniquely identify models in the collection.\n\t modelId: function (attrs) {\n\t return attrs[this.model.prototype.idAttribute || 'id'];\n\t },\n\t\n\t // Private method to reset all internal state. Called when the collection\n\t // is first initialized or reset.\n\t _reset: function() {\n\t this.length = 0;\n\t this.models = [];\n\t this._byId = {};\n\t },\n\t\n\t // Prepare a hash of attributes (or other model) to be added to this\n\t // collection.\n\t _prepareModel: function(attrs, options) {\n\t if (this._isModel(attrs)) {\n\t if (!attrs.collection) attrs.collection = this;\n\t return attrs;\n\t }\n\t options = options ? _.clone(options) : {};\n\t options.collection = this;\n\t var model = new this.model(attrs, options);\n\t if (!model.validationError) return model;\n\t this.trigger('invalid', this, model.validationError, options);\n\t return false;\n\t },\n\t\n\t // Internal method called by both remove and set.\n\t // Returns removed models, or false if nothing is removed.\n\t _removeModels: function(models, options) {\n\t var removed = [];\n\t for (var i = 0; i < models.length; i++) {\n\t var model = this.get(models[i]);\n\t if (!model) continue;\n\t\n\t var index = this.indexOf(model);\n\t this.models.splice(index, 1);\n\t this.length--;\n\t\n\t if (!options.silent) {\n\t options.index = index;\n\t model.trigger('remove', model, this, options);\n\t }\n\t\n\t removed.push(model);\n\t this._removeReference(model, options);\n\t }\n\t return removed.length ? removed : false;\n\t },\n\t\n\t // Method for checking whether an object should be considered a model for\n\t // the purposes of adding to the collection.\n\t _isModel: function (model) {\n\t return model instanceof Model;\n\t },\n\t\n\t // Internal method to create a model's ties to a collection.\n\t _addReference: function(model, options) {\n\t this._byId[model.cid] = model;\n\t var id = this.modelId(model.attributes);\n\t if (id != null) this._byId[id] = model;\n\t model.on('all', this._onModelEvent, this);\n\t },\n\t\n\t // Internal method to sever a model's ties to a collection.\n\t _removeReference: function(model, options) {\n\t delete this._byId[model.cid];\n\t var id = this.modelId(model.attributes);\n\t if (id != null) delete this._byId[id];\n\t if (this === model.collection) delete model.collection;\n\t model.off('all', this._onModelEvent, this);\n\t },\n\t\n\t // Internal method called every time a model in the set fires an event.\n\t // Sets need to update their indexes when models change ids. All other\n\t // events simply proxy through. \"add\" and \"remove\" events that originate\n\t // in other collections are ignored.\n\t _onModelEvent: function(event, model, collection, options) {\n\t if ((event === 'add' || event === 'remove') && collection !== this) return;\n\t if (event === 'destroy') this.remove(model, options);\n\t if (event === 'change') {\n\t var prevId = this.modelId(model.previousAttributes());\n\t var id = this.modelId(model.attributes);\n\t if (prevId !== id) {\n\t if (prevId != null) delete this._byId[prevId];\n\t if (id != null) this._byId[id] = model;\n\t }\n\t }\n\t this.trigger.apply(this, arguments);\n\t }\n\t\n\t });\n\t\n\t // Underscore methods that we want to implement on the Collection.\n\t // 90% of the core usefulness of Backbone Collections is actually implemented\n\t // right here:\n\t var collectionMethods = { forEach: 3, each: 3, map: 3, collect: 3, reduce: 4,\n\t foldl: 4, inject: 4, reduceRight: 4, foldr: 4, find: 3, detect: 3, filter: 3,\n\t select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 2,\n\t contains: 2, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n\t head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n\t without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n\t isEmpty: 1, chain: 1, sample: 3, partition: 3 };\n\t\n\t // Mix in each Underscore method as a proxy to `Collection#models`.\n\t addUnderscoreMethods(Collection, collectionMethods, 'models');\n\t\n\t // Underscore methods that take a property name as an argument.\n\t var attributeMethods = ['groupBy', 'countBy', 'sortBy', 'indexBy'];\n\t\n\t // Use attributes instead of properties.\n\t _.each(attributeMethods, function(method) {\n\t if (!_[method]) return;\n\t Collection.prototype[method] = function(value, context) {\n\t var iterator = _.isFunction(value) ? value : function(model) {\n\t return model.get(value);\n\t };\n\t return _[method](this.models, iterator, context);\n\t };\n\t });\n\t\n\t // Backbone.View\n\t // -------------\n\t\n\t // Backbone Views are almost more convention than they are actual code. A View\n\t // is simply a JavaScript object that represents a logical chunk of UI in the\n\t // DOM. This might be a single item, an entire list, a sidebar or panel, or\n\t // even the surrounding frame which wraps your whole app. Defining a chunk of\n\t // UI as a **View** allows you to define your DOM events declaratively, without\n\t // having to worry about render order ... and makes it easy for the view to\n\t // react to specific changes in the state of your models.\n\t\n\t // Creating a Backbone.View creates its initial element outside of the DOM,\n\t // if an existing element is not provided...\n\t var View = Backbone.View = function(options) {\n\t this.cid = _.uniqueId('view');\n\t _.extend(this, _.pick(options, viewOptions));\n\t this._ensureElement();\n\t this.initialize.apply(this, arguments);\n\t };\n\t\n\t // Cached regex to split keys for `delegate`.\n\t var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\t\n\t // List of view options to be merged as properties.\n\t var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\t\n\t // Set up all inheritable **Backbone.View** properties and methods.\n\t _.extend(View.prototype, Events, {\n\t\n\t // The default `tagName` of a View's element is `\"div\"`.\n\t tagName: 'div',\n\t\n\t // jQuery delegate for element lookup, scoped to DOM elements within the\n\t // current view. This should be preferred to global lookups where possible.\n\t $: function(selector) {\n\t return this.$el.find(selector);\n\t },\n\t\n\t // Initialize is an empty function by default. Override it with your own\n\t // initialization logic.\n\t initialize: function(){},\n\t\n\t // **render** is the core function that your view should override, in order\n\t // to populate its element (`this.el`), with the appropriate HTML. The\n\t // convention is for **render** to always return `this`.\n\t render: function() {\n\t return this;\n\t },\n\t\n\t // Remove this view by taking the element out of the DOM, and removing any\n\t // applicable Backbone.Events listeners.\n\t remove: function() {\n\t this._removeElement();\n\t this.stopListening();\n\t return this;\n\t },\n\t\n\t // Remove this view's element from the document and all event listeners\n\t // attached to it. Exposed for subclasses using an alternative DOM\n\t // manipulation API.\n\t _removeElement: function() {\n\t this.$el.remove();\n\t },\n\t\n\t // Change the view's element (`this.el` property) and re-delegate the\n\t // view's events on the new element.\n\t setElement: function(element) {\n\t this.undelegateEvents();\n\t this._setElement(element);\n\t this.delegateEvents();\n\t return this;\n\t },\n\t\n\t // Creates the `this.el` and `this.$el` references for this view using the\n\t // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n\t // context or an element. Subclasses can override this to utilize an\n\t // alternative DOM manipulation API and are only required to set the\n\t // `this.el` property.\n\t _setElement: function(el) {\n\t this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n\t this.el = this.$el[0];\n\t },\n\t\n\t // Set callbacks, where `this.events` is a hash of\n\t //\n\t // *{\"event selector\": \"callback\"}*\n\t //\n\t // {\n\t // 'mousedown .title': 'edit',\n\t // 'click .button': 'save',\n\t // 'click .open': function(e) { ... }\n\t // }\n\t //\n\t // pairs. Callbacks will be bound to the view, with `this` set properly.\n\t // Uses event delegation for efficiency.\n\t // Omitting the selector binds the event to `this.el`.\n\t delegateEvents: function(events) {\n\t events || (events = _.result(this, 'events'));\n\t if (!events) return this;\n\t this.undelegateEvents();\n\t for (var key in events) {\n\t var method = events[key];\n\t if (!_.isFunction(method)) method = this[method];\n\t if (!method) continue;\n\t var match = key.match(delegateEventSplitter);\n\t this.delegate(match[1], match[2], _.bind(method, this));\n\t }\n\t return this;\n\t },\n\t\n\t // Add a single event listener to the view's element (or a child element\n\t // using `selector`). This only works for delegate-able events: not `focus`,\n\t // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n\t delegate: function(eventName, selector, listener) {\n\t this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n\t return this;\n\t },\n\t\n\t // Clears all callbacks previously bound to the view by `delegateEvents`.\n\t // You usually don't need to use this, but may wish to if you have multiple\n\t // Backbone views attached to the same DOM element.\n\t undelegateEvents: function() {\n\t if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n\t return this;\n\t },\n\t\n\t // A finer-grained `undelegateEvents` for removing a single delegated event.\n\t // `selector` and `listener` are both optional.\n\t undelegate: function(eventName, selector, listener) {\n\t this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n\t return this;\n\t },\n\t\n\t // Produces a DOM element to be assigned to your view. Exposed for\n\t // subclasses using an alternative DOM manipulation API.\n\t _createElement: function(tagName) {\n\t return document.createElement(tagName);\n\t },\n\t\n\t // Ensure that the View has a DOM element to render into.\n\t // If `this.el` is a string, pass it through `$()`, take the first\n\t // matching element, and re-assign it to `el`. Otherwise, create\n\t // an element from the `id`, `className` and `tagName` properties.\n\t _ensureElement: function() {\n\t if (!this.el) {\n\t var attrs = _.extend({}, _.result(this, 'attributes'));\n\t if (this.id) attrs.id = _.result(this, 'id');\n\t if (this.className) attrs['class'] = _.result(this, 'className');\n\t this.setElement(this._createElement(_.result(this, 'tagName')));\n\t this._setAttributes(attrs);\n\t } else {\n\t this.setElement(_.result(this, 'el'));\n\t }\n\t },\n\t\n\t // Set attributes from a hash on this view's element. Exposed for\n\t // subclasses using an alternative DOM manipulation API.\n\t _setAttributes: function(attributes) {\n\t this.$el.attr(attributes);\n\t }\n\t\n\t });\n\t\n\t // Backbone.sync\n\t // -------------\n\t\n\t // Override this function to change the manner in which Backbone persists\n\t // models to the server. You will be passed the type of request, and the\n\t // model in question. By default, makes a RESTful Ajax request\n\t // to the model's `url()`. Some possible customizations could be:\n\t //\n\t // * Use `setTimeout` to batch rapid-fire updates into a single request.\n\t // * Send up the models as XML instead of JSON.\n\t // * Persist models via WebSockets instead of Ajax.\n\t //\n\t // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n\t // as `POST`, with a `_method` parameter containing the true HTTP method,\n\t // as well as all requests with the body as `application/x-www-form-urlencoded`\n\t // instead of `application/json` with the model in a param named `model`.\n\t // Useful when interfacing with server-side languages like **PHP** that make\n\t // it difficult to read the body of `PUT` requests.\n\t Backbone.sync = function(method, model, options) {\n\t var type = methodMap[method];\n\t\n\t // Default options, unless specified.\n\t _.defaults(options || (options = {}), {\n\t emulateHTTP: Backbone.emulateHTTP,\n\t emulateJSON: Backbone.emulateJSON\n\t });\n\t\n\t // Default JSON-request options.\n\t var params = {type: type, dataType: 'json'};\n\t\n\t // Ensure that we have a URL.\n\t if (!options.url) {\n\t params.url = _.result(model, 'url') || urlError();\n\t }\n\t\n\t // Ensure that we have the appropriate request data.\n\t if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n\t params.contentType = 'application/json';\n\t params.data = JSON.stringify(options.attrs || model.toJSON(options));\n\t }\n\t\n\t // For older servers, emulate JSON by encoding the request into an HTML-form.\n\t if (options.emulateJSON) {\n\t params.contentType = 'application/x-www-form-urlencoded';\n\t params.data = params.data ? {model: params.data} : {};\n\t }\n\t\n\t // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n\t // And an `X-HTTP-Method-Override` header.\n\t if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n\t params.type = 'POST';\n\t if (options.emulateJSON) params.data._method = type;\n\t var beforeSend = options.beforeSend;\n\t options.beforeSend = function(xhr) {\n\t xhr.setRequestHeader('X-HTTP-Method-Override', type);\n\t if (beforeSend) return beforeSend.apply(this, arguments);\n\t };\n\t }\n\t\n\t // Don't process data on a non-GET request.\n\t if (params.type !== 'GET' && !options.emulateJSON) {\n\t params.processData = false;\n\t }\n\t\n\t // Pass along `textStatus` and `errorThrown` from jQuery.\n\t var error = options.error;\n\t options.error = function(xhr, textStatus, errorThrown) {\n\t options.textStatus = textStatus;\n\t options.errorThrown = errorThrown;\n\t if (error) error.call(options.context, xhr, textStatus, errorThrown);\n\t };\n\t\n\t // Make the request, allowing the user to override any Ajax options.\n\t var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n\t model.trigger('request', model, xhr, options);\n\t return xhr;\n\t };\n\t\n\t // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n\t var methodMap = {\n\t 'create': 'POST',\n\t 'update': 'PUT',\n\t 'patch': 'PATCH',\n\t 'delete': 'DELETE',\n\t 'read': 'GET'\n\t };\n\t\n\t // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n\t // Override this if you'd like to use a different library.\n\t Backbone.ajax = function() {\n\t return Backbone.$.ajax.apply(Backbone.$, arguments);\n\t };\n\t\n\t // Backbone.Router\n\t // ---------------\n\t\n\t // Routers map faux-URLs to actions, and fire events when routes are\n\t // matched. Creating a new one sets its `routes` hash, if not set statically.\n\t var Router = Backbone.Router = function(options) {\n\t options || (options = {});\n\t if (options.routes) this.routes = options.routes;\n\t this._bindRoutes();\n\t this.initialize.apply(this, arguments);\n\t };\n\t\n\t // Cached regular expressions for matching named param parts and splatted\n\t // parts of route strings.\n\t var optionalParam = /\\((.*?)\\)/g;\n\t var namedParam = /(\\(\\?)?:\\w+/g;\n\t var splatParam = /\\*\\w+/g;\n\t var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\t\n\t // Set up all inheritable **Backbone.Router** properties and methods.\n\t _.extend(Router.prototype, Events, {\n\t\n\t // Initialize is an empty function by default. Override it with your own\n\t // initialization logic.\n\t initialize: function(){},\n\t\n\t // Manually bind a single named route to a callback. For example:\n\t //\n\t // this.route('search/:query/p:num', 'search', function(query, num) {\n\t // ...\n\t // });\n\t //\n\t route: function(route, name, callback) {\n\t if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n\t if (_.isFunction(name)) {\n\t callback = name;\n\t name = '';\n\t }\n\t if (!callback) callback = this[name];\n\t var router = this;\n\t Backbone.history.route(route, function(fragment) {\n\t var args = router._extractParameters(route, fragment);\n\t if (router.execute(callback, args, name) !== false) {\n\t router.trigger.apply(router, ['route:' + name].concat(args));\n\t router.trigger('route', name, args);\n\t Backbone.history.trigger('route', router, name, args);\n\t }\n\t });\n\t return this;\n\t },\n\t\n\t // Execute a route handler with the provided parameters. This is an\n\t // excellent place to do pre-route setup or post-route cleanup.\n\t execute: function(callback, args, name) {\n\t if (callback) callback.apply(this, args);\n\t },\n\t\n\t // Simple proxy to `Backbone.history` to save a fragment into the history.\n\t navigate: function(fragment, options) {\n\t Backbone.history.navigate(fragment, options);\n\t return this;\n\t },\n\t\n\t // Bind all defined routes to `Backbone.history`. We have to reverse the\n\t // order of the routes here to support behavior where the most general\n\t // routes can be defined at the bottom of the route map.\n\t _bindRoutes: function() {\n\t if (!this.routes) return;\n\t this.routes = _.result(this, 'routes');\n\t var route, routes = _.keys(this.routes);\n\t while ((route = routes.pop()) != null) {\n\t this.route(route, this.routes[route]);\n\t }\n\t },\n\t\n\t // Convert a route string into a regular expression, suitable for matching\n\t // against the current location hash.\n\t _routeToRegExp: function(route) {\n\t route = route.replace(escapeRegExp, '\\\\$&')\n\t .replace(optionalParam, '(?:$1)?')\n\t .replace(namedParam, function(match, optional) {\n\t return optional ? match : '([^/?]+)';\n\t })\n\t .replace(splatParam, '([^?]*?)');\n\t return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n\t },\n\t\n\t // Given a route, and a URL fragment that it matches, return the array of\n\t // extracted decoded parameters. Empty or unmatched parameters will be\n\t // treated as `null` to normalize cross-browser behavior.\n\t _extractParameters: function(route, fragment) {\n\t var params = route.exec(fragment).slice(1);\n\t return _.map(params, function(param, i) {\n\t // Don't decode the search params.\n\t if (i === params.length - 1) return param || null;\n\t return param ? decodeURIComponent(param) : null;\n\t });\n\t }\n\t\n\t });\n\t\n\t // Backbone.History\n\t // ----------------\n\t\n\t // Handles cross-browser history management, based on either\n\t // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n\t // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n\t // and URL fragments. If the browser supports neither (old IE, natch),\n\t // falls back to polling.\n\t var History = Backbone.History = function() {\n\t this.handlers = [];\n\t _.bindAll(this, 'checkUrl');\n\t\n\t // Ensure that `History` can be used outside of the browser.\n\t if (typeof window !== 'undefined') {\n\t this.location = window.location;\n\t this.history = window.history;\n\t }\n\t };\n\t\n\t // Cached regex for stripping a leading hash/slash and trailing space.\n\t var routeStripper = /^[#\\/]|\\s+$/g;\n\t\n\t // Cached regex for stripping leading and trailing slashes.\n\t var rootStripper = /^\\/+|\\/+$/g;\n\t\n\t // Cached regex for stripping urls of hash.\n\t var pathStripper = /#.*$/;\n\t\n\t // Has the history handling already been started?\n\t History.started = false;\n\t\n\t // Set up all inheritable **Backbone.History** properties and methods.\n\t _.extend(History.prototype, Events, {\n\t\n\t // The default interval to poll for hash changes, if necessary, is\n\t // twenty times a second.\n\t interval: 50,\n\t\n\t // Are we at the app root?\n\t atRoot: function() {\n\t var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n\t return path === this.root && !this.getSearch();\n\t },\n\t\n\t // Does the pathname match the root?\n\t matchRoot: function() {\n\t var path = this.decodeFragment(this.location.pathname);\n\t var root = path.slice(0, this.root.length - 1) + '/';\n\t return root === this.root;\n\t },\n\t\n\t // Unicode characters in `location.pathname` are percent encoded so they're\n\t // decoded for comparison. `%25` should not be decoded since it may be part\n\t // of an encoded parameter.\n\t decodeFragment: function(fragment) {\n\t return decodeURI(fragment.replace(/%25/g, '%2525'));\n\t },\n\t\n\t // In IE6, the hash fragment and search params are incorrect if the\n\t // fragment contains `?`.\n\t getSearch: function() {\n\t var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n\t return match ? match[0] : '';\n\t },\n\t\n\t // Gets the true hash value. Cannot use location.hash directly due to bug\n\t // in Firefox where location.hash will always be decoded.\n\t getHash: function(window) {\n\t var match = (window || this).location.href.match(/#(.*)$/);\n\t return match ? match[1] : '';\n\t },\n\t\n\t // Get the pathname and search params, without the root.\n\t getPath: function() {\n\t var path = this.decodeFragment(\n\t this.location.pathname + this.getSearch()\n\t ).slice(this.root.length - 1);\n\t return path.charAt(0) === '/' ? path.slice(1) : path;\n\t },\n\t\n\t // Get the cross-browser normalized URL fragment from the path or hash.\n\t getFragment: function(fragment) {\n\t if (fragment == null) {\n\t if (this._usePushState || !this._wantsHashChange) {\n\t fragment = this.getPath();\n\t } else {\n\t fragment = this.getHash();\n\t }\n\t }\n\t return fragment.replace(routeStripper, '');\n\t },\n\t\n\t // Start the hash change handling, returning `true` if the current URL matches\n\t // an existing route, and `false` otherwise.\n\t start: function(options) {\n\t if (History.started) throw new Error('Backbone.history has already been started');\n\t History.started = true;\n\t\n\t // Figure out the initial configuration. Do we need an iframe?\n\t // Is pushState desired ... is it available?\n\t this.options = _.extend({root: '/'}, this.options, options);\n\t this.root = this.options.root;\n\t this._wantsHashChange = this.options.hashChange !== false;\n\t this._hasHashChange = 'onhashchange' in window;\n\t this._useHashChange = this._wantsHashChange && this._hasHashChange;\n\t this._wantsPushState = !!this.options.pushState;\n\t this._hasPushState = !!(this.history && this.history.pushState);\n\t this._usePushState = this._wantsPushState && this._hasPushState;\n\t this.fragment = this.getFragment();\n\t\n\t // Normalize root to always include a leading and trailing slash.\n\t this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\t\n\t // Transition from hashChange to pushState or vice versa if both are\n\t // requested.\n\t if (this._wantsHashChange && this._wantsPushState) {\n\t\n\t // If we've started off with a route from a `pushState`-enabled\n\t // browser, but we're currently in a browser that doesn't support it...\n\t if (!this._hasPushState && !this.atRoot()) {\n\t var root = this.root.slice(0, -1) || '/';\n\t this.location.replace(root + '#' + this.getPath());\n\t // Return immediately as browser will do redirect to new url\n\t return true;\n\t\n\t // Or if we've started out with a hash-based route, but we're currently\n\t // in a browser where it could be `pushState`-based instead...\n\t } else if (this._hasPushState && this.atRoot()) {\n\t this.navigate(this.getHash(), {replace: true});\n\t }\n\t\n\t }\n\t\n\t // Proxy an iframe to handle location events if the browser doesn't\n\t // support the `hashchange` event, HTML5 history, or the user wants\n\t // `hashChange` but not `pushState`.\n\t if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n\t this.iframe = document.createElement('iframe');\n\t this.iframe.src = 'javascript:0';\n\t this.iframe.style.display = 'none';\n\t this.iframe.tabIndex = -1;\n\t var body = document.body;\n\t // Using `appendChild` will throw on IE < 9 if the document is not ready.\n\t var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n\t iWindow.document.open();\n\t iWindow.document.close();\n\t iWindow.location.hash = '#' + this.fragment;\n\t }\n\t\n\t // Add a cross-platform `addEventListener` shim for older browsers.\n\t var addEventListener = window.addEventListener || function (eventName, listener) {\n\t return attachEvent('on' + eventName, listener);\n\t };\n\t\n\t // Depending on whether we're using pushState or hashes, and whether\n\t // 'onhashchange' is supported, determine how we check the URL state.\n\t if (this._usePushState) {\n\t addEventListener('popstate', this.checkUrl, false);\n\t } else if (this._useHashChange && !this.iframe) {\n\t addEventListener('hashchange', this.checkUrl, false);\n\t } else if (this._wantsHashChange) {\n\t this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n\t }\n\t\n\t if (!this.options.silent) return this.loadUrl();\n\t },\n\t\n\t // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n\t // but possibly useful for unit testing Routers.\n\t stop: function() {\n\t // Add a cross-platform `removeEventListener` shim for older browsers.\n\t var removeEventListener = window.removeEventListener || function (eventName, listener) {\n\t return detachEvent('on' + eventName, listener);\n\t };\n\t\n\t // Remove window listeners.\n\t if (this._usePushState) {\n\t removeEventListener('popstate', this.checkUrl, false);\n\t } else if (this._useHashChange && !this.iframe) {\n\t removeEventListener('hashchange', this.checkUrl, false);\n\t }\n\t\n\t // Clean up the iframe if necessary.\n\t if (this.iframe) {\n\t document.body.removeChild(this.iframe);\n\t this.iframe = null;\n\t }\n\t\n\t // Some environments will throw when clearing an undefined interval.\n\t if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n\t History.started = false;\n\t },\n\t\n\t // Add a route to be tested when the fragment changes. Routes added later\n\t // may override previous routes.\n\t route: function(route, callback) {\n\t this.handlers.unshift({route: route, callback: callback});\n\t },\n\t\n\t // Checks the current URL to see if it has changed, and if it has,\n\t // calls `loadUrl`, normalizing across the hidden iframe.\n\t checkUrl: function(e) {\n\t var current = this.getFragment();\n\t\n\t // If the user pressed the back button, the iframe's hash will have\n\t // changed and we should use that for comparison.\n\t if (current === this.fragment && this.iframe) {\n\t current = this.getHash(this.iframe.contentWindow);\n\t }\n\t\n\t if (current === this.fragment) return false;\n\t if (this.iframe) this.navigate(current);\n\t this.loadUrl();\n\t },\n\t\n\t // Attempt to load the current URL fragment. If a route succeeds with a\n\t // match, returns `true`. If no defined routes matches the fragment,\n\t // returns `false`.\n\t loadUrl: function(fragment) {\n\t // If the root doesn't match, no routes can match either.\n\t if (!this.matchRoot()) return false;\n\t fragment = this.fragment = this.getFragment(fragment);\n\t return _.any(this.handlers, function(handler) {\n\t if (handler.route.test(fragment)) {\n\t handler.callback(fragment);\n\t return true;\n\t }\n\t });\n\t },\n\t\n\t // Save a fragment into the hash history, or replace the URL state if the\n\t // 'replace' option is passed. You are responsible for properly URL-encoding\n\t // the fragment in advance.\n\t //\n\t // The options object can contain `trigger: true` if you wish to have the\n\t // route callback be fired (not usually desirable), or `replace: true`, if\n\t // you wish to modify the current URL without adding an entry to the history.\n\t navigate: function(fragment, options) {\n\t if (!History.started) return false;\n\t if (!options || options === true) options = {trigger: !!options};\n\t\n\t // Normalize the fragment.\n\t fragment = this.getFragment(fragment || '');\n\t\n\t // Don't include a trailing slash on the root.\n\t var root = this.root;\n\t if (fragment === '' || fragment.charAt(0) === '?') {\n\t root = root.slice(0, -1) || '/';\n\t }\n\t var url = root + fragment;\n\t\n\t // Strip the hash and decode for matching.\n\t fragment = this.decodeFragment(fragment.replace(pathStripper, ''));\n\t\n\t if (this.fragment === fragment) return;\n\t this.fragment = fragment;\n\t\n\t // If pushState is available, we use it to set the fragment as a real URL.\n\t if (this._usePushState) {\n\t this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\t\n\t // If hash changes haven't been explicitly disabled, update the hash\n\t // fragment to store history.\n\t } else if (this._wantsHashChange) {\n\t this._updateHash(this.location, fragment, options.replace);\n\t if (this.iframe && (fragment !== this.getHash(this.iframe.contentWindow))) {\n\t var iWindow = this.iframe.contentWindow;\n\t\n\t // Opening and closing the iframe tricks IE7 and earlier to push a\n\t // history entry on hash-tag change. When replace is true, we don't\n\t // want this.\n\t if (!options.replace) {\n\t iWindow.document.open();\n\t iWindow.document.close();\n\t }\n\t\n\t this._updateHash(iWindow.location, fragment, options.replace);\n\t }\n\t\n\t // If you've told us that you explicitly don't want fallback hashchange-\n\t // based history, then `navigate` becomes a page refresh.\n\t } else {\n\t return this.location.assign(url);\n\t }\n\t if (options.trigger) return this.loadUrl(fragment);\n\t },\n\t\n\t // Update the hash location, either replacing the current entry, or adding\n\t // a new one to the browser history.\n\t _updateHash: function(location, fragment, replace) {\n\t if (replace) {\n\t var href = location.href.replace(/(javascript:|#).*$/, '');\n\t location.replace(href + '#' + fragment);\n\t } else {\n\t // Some browsers require that `hash` contains a leading #.\n\t location.hash = '#' + fragment;\n\t }\n\t }\n\t\n\t });\n\t\n\t // Create the default Backbone.history.\n\t Backbone.history = new History;\n\t\n\t // Helpers\n\t // -------\n\t\n\t // Helper function to correctly set up the prototype chain for subclasses.\n\t // Similar to `goog.inherits`, but uses a hash of prototype properties and\n\t // class properties to be extended.\n\t var extend = function(protoProps, staticProps) {\n\t var parent = this;\n\t var child;\n\t\n\t // The constructor function for the new subclass is either defined by you\n\t // (the \"constructor\" property in your `extend` definition), or defaulted\n\t // by us to simply call the parent constructor.\n\t if (protoProps && _.has(protoProps, 'constructor')) {\n\t child = protoProps.constructor;\n\t } else {\n\t child = function(){ return parent.apply(this, arguments); };\n\t }\n\t\n\t // Add static properties to the constructor function, if supplied.\n\t _.extend(child, parent, staticProps);\n\t\n\t // Set the prototype chain to inherit from `parent`, without calling\n\t // `parent` constructor function.\n\t var Surrogate = function(){ this.constructor = child; };\n\t Surrogate.prototype = parent.prototype;\n\t child.prototype = new Surrogate;\n\t\n\t // Add prototype properties (instance properties) to the subclass,\n\t // if supplied.\n\t if (protoProps) _.extend(child.prototype, protoProps);\n\t\n\t // Set a convenience property in case the parent's prototype is needed\n\t // later.\n\t child.__super__ = parent.prototype;\n\t\n\t return child;\n\t };\n\t\n\t // Set up inheritance for the model, collection, router, view and history.\n\t Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\t\n\t // Throw an error when a URL is needed, and none is supplied.\n\t var urlError = function() {\n\t throw new Error('A \"url\" property or function must be specified');\n\t };\n\t\n\t // Wrap an optional error callback with a fallback error event.\n\t var wrapError = function(model, options) {\n\t var error = options.error;\n\t options.error = function(resp) {\n\t if (error) error.call(options.context, model, resp, options);\n\t model.trigger('error', model, resp, options);\n\t };\n\t };\n\t\n\t return Backbone;\n\t\n\t}));\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 404 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n\t * jQuery JavaScript Library v1.12.1\n\t * http://jquery.com/\n\t *\n\t * Includes Sizzle.js\n\t * http://sizzlejs.com/\n\t *\n\t * Copyright jQuery Foundation and other contributors\n\t * Released under the MIT license\n\t * http://jquery.org/license\n\t *\n\t * Date: 2016-02-22T19:07Z\n\t */\n\t\n\t(function( global, factory ) {\n\t\n\t\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t\t// is present, execute the factory and get jQuery.\n\t\t\t// For environments that do not have a `window` with a `document`\n\t\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t\t// This accentuates the need for the creation of a real `window`.\n\t\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t\t// See ticket #14549 for more info.\n\t\t\tmodule.exports = global.document ?\n\t\t\t\tfactory( global, true ) :\n\t\t\t\tfunction( w ) {\n\t\t\t\t\tif ( !w.document ) {\n\t\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t\t}\n\t\t\t\t\treturn factory( w );\n\t\t\t\t};\n\t\t} else {\n\t\t\tfactory( global );\n\t\t}\n\t\n\t// Pass this if window is not defined yet\n\t}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\t\n\t// Support: Firefox 18+\n\t// Can't be in strict mode, several libs including ASP.NET trace\n\t// the stack via arguments.caller.callee and Firefox dies if\n\t// you try to trace through \"use strict\" call chains. (#13335)\n\t//\"use strict\";\n\tvar deletedIds = [];\n\t\n\tvar document = window.document;\n\t\n\tvar slice = deletedIds.slice;\n\t\n\tvar concat = deletedIds.concat;\n\t\n\tvar push = deletedIds.push;\n\t\n\tvar indexOf = deletedIds.indexOf;\n\t\n\tvar class2type = {};\n\t\n\tvar toString = class2type.toString;\n\t\n\tvar hasOwn = class2type.hasOwnProperty;\n\t\n\tvar support = {};\n\t\n\t\n\t\n\tvar\n\t\tversion = \"1.12.1\",\n\t\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function( selector, context ) {\n\t\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init( selector, context );\n\t\t},\n\t\n\t\t// Support: Android<4.1, IE<9\n\t\t// Make sure we trim BOM and NBSP\n\t\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\t\n\t\t// Matches dashed string for camelizing\n\t\trmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([\\da-z])/gi,\n\t\n\t\t// Used by jQuery.camelCase as callback to replace()\n\t\tfcamelCase = function( all, letter ) {\n\t\t\treturn letter.toUpperCase();\n\t\t};\n\t\n\tjQuery.fn = jQuery.prototype = {\n\t\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\t\n\t\tconstructor: jQuery,\n\t\n\t\t// Start with an empty selector\n\t\tselector: \"\",\n\t\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\t\n\t\ttoArray: function() {\n\t\t\treturn slice.call( this );\n\t\t},\n\t\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function( num ) {\n\t\t\treturn num != null ?\n\t\n\t\t\t\t// Return just the one element from the set\n\t\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\t\n\t\t\t\t// Return all the elements in a clean array\n\t\t\t\tslice.call( this );\n\t\t},\n\t\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function( elems ) {\n\t\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\t\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\t\t\tret.context = this.context;\n\t\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\t\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function( callback ) {\n\t\t\treturn jQuery.each( this, callback );\n\t\t},\n\t\n\t\tmap: function( callback ) {\n\t\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\t\treturn callback.call( elem, i, elem );\n\t\t\t} ) );\n\t\t},\n\t\n\t\tslice: function() {\n\t\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t\t},\n\t\n\t\tfirst: function() {\n\t\t\treturn this.eq( 0 );\n\t\t},\n\t\n\t\tlast: function() {\n\t\t\treturn this.eq( -1 );\n\t\t},\n\t\n\t\teq: function( i ) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t\t},\n\t\n\t\tend: function() {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\t\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: deletedIds.sort,\n\t\tsplice: deletedIds.splice\n\t};\n\t\n\tjQuery.extend = jQuery.fn.extend = function() {\n\t\tvar src, copyIsArray, copy, name, options, clone,\n\t\t\ttarget = arguments[ 0 ] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\t\n\t\t// Handle a deep copy situation\n\t\tif ( typeof target === \"boolean\" ) {\n\t\t\tdeep = target;\n\t\n\t\t\t// skip the boolean and the target\n\t\t\ttarget = arguments[ i ] || {};\n\t\t\ti++;\n\t\t}\n\t\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\t\ttarget = {};\n\t\t}\n\t\n\t\t// extend jQuery itself if only one argument is passed\n\t\tif ( i === length ) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\t\n\t\tfor ( ; i < length; i++ ) {\n\t\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ( ( options = arguments[ i ] ) != null ) {\n\t\n\t\t\t\t// Extend the base object\n\t\t\t\tfor ( name in options ) {\n\t\t\t\t\tsrc = target[ name ];\n\t\t\t\t\tcopy = options[ name ];\n\t\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif ( target === copy ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\t\n\t\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\t\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\t\n\tjQuery.extend( {\n\t\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\t\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\t\n\t\terror: function( msg ) {\n\t\t\tthrow new Error( msg );\n\t\t},\n\t\n\t\tnoop: function() {},\n\t\n\t\t// See test/unit/core.js for details concerning isFunction.\n\t\t// Since version 1.3, DOM methods and functions like alert\n\t\t// aren't supported. They return false on IE (#2968).\n\t\tisFunction: function( obj ) {\n\t\t\treturn jQuery.type( obj ) === \"function\";\n\t\t},\n\t\n\t\tisArray: Array.isArray || function( obj ) {\n\t\t\treturn jQuery.type( obj ) === \"array\";\n\t\t},\n\t\n\t\tisWindow: function( obj ) {\n\t\t\t/* jshint eqeqeq: false */\n\t\t\treturn obj != null && obj == obj.window;\n\t\t},\n\t\n\t\tisNumeric: function( obj ) {\n\t\n\t\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\t\tvar realStringObj = obj && obj.toString();\n\t\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t\t},\n\t\n\t\tisEmptyObject: function( obj ) {\n\t\t\tvar name;\n\t\t\tfor ( name in obj ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\n\t\tisPlainObject: function( obj ) {\n\t\t\tvar key;\n\t\n\t\t\t// Must be an Object.\n\t\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\t\tif ( !obj || jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\ttry {\n\t\n\t\t\t\t// Not own constructor property must be Object\n\t\t\t\tif ( obj.constructor &&\n\t\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} catch ( e ) {\n\t\n\t\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// Support: IE<9\n\t\t\t// Handle iteration over inherited properties before own properties.\n\t\t\tif ( !support.ownFirst ) {\n\t\t\t\tfor ( key in obj ) {\n\t\t\t\t\treturn hasOwn.call( obj, key );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t\t// if last one is own, then all properties are own.\n\t\t\tfor ( key in obj ) {}\n\t\n\t\t\treturn key === undefined || hasOwn.call( obj, key );\n\t\t},\n\t\n\t\ttype: function( obj ) {\n\t\t\tif ( obj == null ) {\n\t\t\t\treturn obj + \"\";\n\t\t\t}\n\t\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\t\ttypeof obj;\n\t\t},\n\t\n\t\t// Workarounds based on findings by Jim Driscoll\n\t\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\t\tglobalEval: function( data ) {\n\t\t\tif ( data && jQuery.trim( data ) ) {\n\t\n\t\t\t\t// We use execScript on Internet Explorer\n\t\t\t\t// We use an anonymous function so that context is window\n\t\t\t\t// rather than jQuery in Firefox\n\t\t\t\t( window.execScript || function( data ) {\n\t\t\t\t\twindow[ \"eval\" ].call( window, data ); // jscs:ignore requireDotNotation\n\t\t\t\t} )( data );\n\t\t\t}\n\t\t},\n\t\n\t\t// Convert dashed to camelCase; used by the css and data modules\n\t\t// Microsoft forgot to hump their vendor prefix (#9572)\n\t\tcamelCase: function( string ) {\n\t\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t\t},\n\t\n\t\tnodeName: function( elem, name ) {\n\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t\t},\n\t\n\t\teach: function( obj, callback ) {\n\t\t\tvar length, i = 0;\n\t\n\t\t\tif ( isArrayLike( obj ) ) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn obj;\n\t\t},\n\t\n\t\t// Support: Android<4.1, IE<9\n\t\ttrim: function( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t\t},\n\t\n\t\t// results is for internal usage only\n\t\tmakeArray: function( arr, results ) {\n\t\t\tvar ret = results || [];\n\t\n\t\t\tif ( arr != null ) {\n\t\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call( ret, arr );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn ret;\n\t\t},\n\t\n\t\tinArray: function( elem, arr, i ) {\n\t\t\tvar len;\n\t\n\t\t\tif ( arr ) {\n\t\t\t\tif ( indexOf ) {\n\t\t\t\t\treturn indexOf.call( arr, elem, i );\n\t\t\t\t}\n\t\n\t\t\t\tlen = arr.length;\n\t\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\t\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\n\t\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\t\treturn i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn -1;\n\t\t},\n\t\n\t\tmerge: function( first, second ) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\t\n\t\t\twhile ( j < len ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\n\t\t\t// Support: IE<9\n\t\t\t// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)\n\t\t\tif ( len !== len ) {\n\t\t\t\twhile ( second[ j ] !== undefined ) {\n\t\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfirst.length = i;\n\t\n\t\t\treturn first;\n\t\t},\n\t\n\t\tgrep: function( elems, callback, invert ) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\t\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn matches;\n\t\t},\n\t\n\t\t// arg is for internal usage only\n\t\tmap: function( elems, callback, arg ) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\t\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif ( isArrayLike( elems ) ) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\t\n\t\t\t\t\tif ( value != null ) {\n\t\t\t\t\t\tret.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor ( i in elems ) {\n\t\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\t\n\t\t\t\t\tif ( value != null ) {\n\t\t\t\t\t\tret.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Flatten any nested arrays\n\t\t\treturn concat.apply( [], ret );\n\t\t},\n\t\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\t\n\t\t// Bind a function to a context, optionally partially applying any\n\t\t// arguments.\n\t\tproxy: function( fn, context ) {\n\t\t\tvar args, proxy, tmp;\n\t\n\t\t\tif ( typeof context === \"string\" ) {\n\t\t\t\ttmp = fn[ context ];\n\t\t\t\tcontext = fn;\n\t\t\t\tfn = tmp;\n\t\t\t}\n\t\n\t\t\t// Quick check to determine if target is callable, in the spec\n\t\t\t// this throws a TypeError, but we will just return undefined.\n\t\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\n\t\t\t// Simulated bind\n\t\t\targs = slice.call( arguments, 2 );\n\t\t\tproxy = function() {\n\t\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t\t};\n\t\n\t\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\t\n\t\t\treturn proxy;\n\t\t},\n\t\n\t\tnow: function() {\n\t\t\treturn +( new Date() );\n\t\t},\n\t\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t} );\n\t\n\t// JSHint would error on this code due to the Symbol not being defined in ES5.\n\t// Defining this global in .jshintrc would create a danger of using the global\n\t// unguarded in another place, it seems safer to just disable JSHint for these\n\t// three lines.\n\t/* jshint ignore: start */\n\tif ( typeof Symbol === \"function\" ) {\n\t\tjQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ];\n\t}\n\t/* jshint ignore: end */\n\t\n\t// Populate the class2type map\n\tjQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\t\n\tfunction isArrayLike( obj ) {\n\t\n\t\t// Support: iOS 8.2 (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = jQuery.type( obj );\n\t\n\t\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n\t}\n\tvar Sizzle =\n\t/*!\n\t * Sizzle CSS Selector Engine v2.2.1\n\t * http://sizzlejs.com/\n\t *\n\t * Copyright jQuery Foundation and other contributors\n\t * Released under the MIT license\n\t * http://jquery.org/license\n\t *\n\t * Date: 2015-10-17\n\t */\n\t(function( window ) {\n\t\n\tvar i,\n\t\tsupport,\n\t\tExpr,\n\t\tgetText,\n\t\tisXML,\n\t\ttokenize,\n\t\tcompile,\n\t\tselect,\n\t\toutermostContext,\n\t\tsortInput,\n\t\thasDuplicate,\n\t\n\t\t// Local document vars\n\t\tsetDocument,\n\t\tdocument,\n\t\tdocElem,\n\t\tdocumentIsHTML,\n\t\trbuggyQSA,\n\t\trbuggyMatches,\n\t\tmatches,\n\t\tcontains,\n\t\n\t\t// Instance-specific data\n\t\texpando = \"sizzle\" + 1 * new Date(),\n\t\tpreferredDoc = window.document,\n\t\tdirruns = 0,\n\t\tdone = 0,\n\t\tclassCache = createCache(),\n\t\ttokenCache = createCache(),\n\t\tcompilerCache = createCache(),\n\t\tsortOrder = function( a, b ) {\n\t\t\tif ( a === b ) {\n\t\t\t\thasDuplicate = true;\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\t\n\t\t// General-purpose constants\n\t\tMAX_NEGATIVE = 1 << 31,\n\t\n\t\t// Instance methods\n\t\thasOwn = ({}).hasOwnProperty,\n\t\tarr = [],\n\t\tpop = arr.pop,\n\t\tpush_native = arr.push,\n\t\tpush = arr.push,\n\t\tslice = arr.slice,\n\t\t// Use a stripped-down indexOf as it's faster than native\n\t\t// http://jsperf.com/thor-indexof-vs-for/5\n\t\tindexOf = function( list, elem ) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = list.length;\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tif ( list[i] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t},\n\t\n\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\t\n\t\t// Regular expressions\n\t\n\t\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\t\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t\n\t\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\t\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\t\n\t\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t\t// Operator (capture 2)\n\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\t\"*\\\\]\",\n\t\n\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t\t// 2. simple (capture 6)\n\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t\t// 3. anything else (capture 2)\n\t\t\t\".*\" +\n\t\t\t\")\\\\)|)\",\n\t\n\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\t\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\t\n\t\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\t\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\t\n\t\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\t\n\t\trpseudo = new RegExp( pseudos ),\n\t\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\t\n\t\tmatchExpr = {\n\t\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t\t// For use in libraries implementing .is()\n\t\t\t// We use this for POS matching in `select`\n\t\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t\t},\n\t\n\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\trheader = /^h\\d$/i,\n\t\n\t\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\t\n\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\t\n\t\trsibling = /[+~]/,\n\t\trescape = /'|\\\\/g,\n\t\n\t\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\t\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t\t// NaN means non-codepoint\n\t\t\t// Support: Firefox<24\n\t\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\t\treturn high !== high || escapedWhitespace ?\n\t\t\t\tescaped :\n\t\t\t\thigh < 0 ?\n\t\t\t\t\t// BMP codepoint\n\t\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t\t},\n\t\n\t\t// Used for iframes\n\t\t// See setDocument()\n\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t// error in IE\n\t\tunloadHandler = function() {\n\t\t\tsetDocument();\n\t\t};\n\t\n\t// Optimize for push.apply( _, NodeList )\n\ttry {\n\t\tpush.apply(\n\t\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\t\tpreferredDoc.childNodes\n\t\t);\n\t\t// Support: Android<4.0\n\t\t// Detect silently failing push.apply\n\t\tarr[ preferredDoc.childNodes.length ].nodeType;\n\t} catch ( e ) {\n\t\tpush = { apply: arr.length ?\n\t\n\t\t\t// Leverage slice if possible\n\t\t\tfunction( target, els ) {\n\t\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t\t} :\n\t\n\t\t\t// Support: IE<9\n\t\t\t// Otherwise append directly\n\t\t\tfunction( target, els ) {\n\t\t\t\tvar j = target.length,\n\t\t\t\t\ti = 0;\n\t\t\t\t// Can't trust NodeList.length\n\t\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\t\ttarget.length = j - 1;\n\t\t\t}\n\t\t};\n\t}\n\t\n\tfunction Sizzle( selector, context, results, seed ) {\n\t\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\t\tnewContext = context && context.ownerDocument,\n\t\n\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\tnodeType = context ? context.nodeType : 9;\n\t\n\t\tresults = results || [];\n\t\n\t\t// Return early from calls with invalid selector or context\n\t\tif ( typeof selector !== \"string\" || !selector ||\n\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\t\n\t\t\treturn results;\n\t\t}\n\t\n\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\tif ( !seed ) {\n\t\n\t\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\t\tsetDocument( context );\n\t\t\t}\n\t\t\tcontext = context || document;\n\t\n\t\t\tif ( documentIsHTML ) {\n\t\n\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\t\n\t\t\t\t\t// ID selector\n\t\t\t\t\tif ( (m = match[1]) ) {\n\t\n\t\t\t\t\t\t// Document context\n\t\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\t\n\t\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t} else {\n\t\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\t\telem.id === m ) {\n\t\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t// Type selector\n\t\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\t\treturn results;\n\t\n\t\t\t\t\t// Class selector\n\t\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\t\tcontext.getElementsByClassName ) {\n\t\n\t\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\tif ( support.qsa &&\n\t\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\n\t\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\t\tnewContext = context;\n\t\t\t\t\t\tnewSelector = selector;\n\t\n\t\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t\t// Support: IE <=8\n\t\t\t\t\t// Exclude object elements\n\t\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\t\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\n\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\t\tcontext;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif ( newSelector ) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// All others\n\t\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n\t}\n\t\n\t/**\n\t * Create key-value caches of limited size\n\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t *\tdeleting the oldest entry\n\t */\n\tfunction createCache() {\n\t\tvar keys = [];\n\t\n\t\tfunction cache( key, value ) {\n\t\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t\t// Only keep the most recent entries\n\t\t\t\tdelete cache[ keys.shift() ];\n\t\t\t}\n\t\t\treturn (cache[ key + \" \" ] = value);\n\t\t}\n\t\treturn cache;\n\t}\n\t\n\t/**\n\t * Mark a function for special use by Sizzle\n\t * @param {Function} fn The function to mark\n\t */\n\tfunction markFunction( fn ) {\n\t\tfn[ expando ] = true;\n\t\treturn fn;\n\t}\n\t\n\t/**\n\t * Support testing using an element\n\t * @param {Function} fn Passed the created div and expects a boolean result\n\t */\n\tfunction assert( fn ) {\n\t\tvar div = document.createElement(\"div\");\n\t\n\t\ttry {\n\t\t\treturn !!fn( div );\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t} finally {\n\t\t\t// Remove from its parent by default\n\t\t\tif ( div.parentNode ) {\n\t\t\t\tdiv.parentNode.removeChild( div );\n\t\t\t}\n\t\t\t// release memory in IE\n\t\t\tdiv = null;\n\t\t}\n\t}\n\t\n\t/**\n\t * Adds the same handler for all of the specified attrs\n\t * @param {String} attrs Pipe-separated list of attributes\n\t * @param {Function} handler The method that will be applied\n\t */\n\tfunction addHandle( attrs, handler ) {\n\t\tvar arr = attrs.split(\"|\"),\n\t\t\ti = arr.length;\n\t\n\t\twhile ( i-- ) {\n\t\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t\t}\n\t}\n\t\n\t/**\n\t * Checks document order of two siblings\n\t * @param {Element} a\n\t * @param {Element} b\n\t * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n\t */\n\tfunction siblingCheck( a, b ) {\n\t\tvar cur = b && a,\n\t\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\t\n\t\t// Use IE sourceIndex if available on both nodes\n\t\tif ( diff ) {\n\t\t\treturn diff;\n\t\t}\n\t\n\t\t// Check if b follows a\n\t\tif ( cur ) {\n\t\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\t\tif ( cur === b ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn a ? 1 : -1;\n\t}\n\t\n\t/**\n\t * Returns a function to use in pseudos for input types\n\t * @param {String} type\n\t */\n\tfunction createInputPseudo( type ) {\n\t\treturn function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === type;\n\t\t};\n\t}\n\t\n\t/**\n\t * Returns a function to use in pseudos for buttons\n\t * @param {String} type\n\t */\n\tfunction createButtonPseudo( type ) {\n\t\treturn function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t\t};\n\t}\n\t\n\t/**\n\t * Returns a function to use in pseudos for positionals\n\t * @param {Function} fn\n\t */\n\tfunction createPositionalPseudo( fn ) {\n\t\treturn markFunction(function( argument ) {\n\t\t\targument = +argument;\n\t\t\treturn markFunction(function( seed, matches ) {\n\t\t\t\tvar j,\n\t\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\t\ti = matchIndexes.length;\n\t\n\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\t\n\t/**\n\t * Checks a node for validity as a Sizzle context\n\t * @param {Element|Object=} context\n\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t */\n\tfunction testContext( context ) {\n\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t}\n\t\n\t// Expose support vars for convenience\n\tsupport = Sizzle.support = {};\n\t\n\t/**\n\t * Detects XML nodes\n\t * @param {Element|Object} elem An element or a document\n\t * @returns {Boolean} True iff elem is a non-HTML XML node\n\t */\n\tisXML = Sizzle.isXML = function( elem ) {\n\t\t// documentElement is verified for cases where it doesn't yet exist\n\t\t// (such as loading iframes in IE - #4833)\n\t\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\t\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n\t};\n\t\n\t/**\n\t * Sets document-related variables once based on the current document\n\t * @param {Element|Object} [doc] An element or document object to use to set the document\n\t * @returns {Object} Returns the current document\n\t */\n\tsetDocument = Sizzle.setDocument = function( node ) {\n\t\tvar hasCompare, parent,\n\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\t\n\t\t// Return early if doc is invalid or already selected\n\t\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\t\treturn document;\n\t\t}\n\t\n\t\t// Update global variables\n\t\tdocument = doc;\n\t\tdocElem = document.documentElement;\n\t\tdocumentIsHTML = !isXML( document );\n\t\n\t\t// Support: IE 9-11, Edge\n\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t\t// Support: IE 11\n\t\t\tif ( parent.addEventListener ) {\n\t\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\t\n\t\t\t// Support: IE 9 - 10 only\n\t\t\t} else if ( parent.attachEvent ) {\n\t\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Attributes\n\t\t---------------------------------------------------------------------- */\n\t\n\t\t// Support: IE<8\n\t\t// Verify that getAttribute really returns attributes and not properties\n\t\t// (excepting IE8 booleans)\n\t\tsupport.attributes = assert(function( div ) {\n\t\t\tdiv.className = \"i\";\n\t\t\treturn !div.getAttribute(\"className\");\n\t\t});\n\t\n\t\t/* getElement(s)By*\n\t\t---------------------------------------------------------------------- */\n\t\n\t\t// Check if getElementsByTagName(\"*\") returns only elements\n\t\tsupport.getElementsByTagName = assert(function( div ) {\n\t\t\tdiv.appendChild( document.createComment(\"\") );\n\t\t\treturn !div.getElementsByTagName(\"*\").length;\n\t\t});\n\t\n\t\t// Support: IE<9\n\t\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\t\n\t\t// Support: IE<10\n\t\t// Check if getElementById returns elements by name\n\t\t// The broken getElementById methods don't pick up programatically-set names,\n\t\t// so use a roundabout getElementsByName test\n\t\tsupport.getById = assert(function( div ) {\n\t\t\tdocElem.appendChild( div ).id = expando;\n\t\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t\t});\n\t\n\t\t// ID find and filter\n\t\tif ( support.getById ) {\n\t\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t\treturn m ? [ m ] : [];\n\t\t\t\t}\n\t\t\t};\n\t\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t};\n\t\t\t};\n\t\t} else {\n\t\t\t// Support: IE6/7\n\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\tdelete Expr.find[\"ID\"];\n\t\n\t\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t};\n\t\t\t};\n\t\t}\n\t\n\t\t// Tag\n\t\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\t\tfunction( tag, context ) {\n\t\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\t\treturn context.getElementsByTagName( tag );\n\t\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else if ( support.qsa ) {\n\t\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t\t}\n\t\t\t} :\n\t\n\t\t\tfunction( tag, context ) {\n\t\t\t\tvar elem,\n\t\t\t\t\ttmp = [],\n\t\t\t\t\ti = 0,\n\t\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\t\tresults = context.getElementsByTagName( tag );\n\t\n\t\t\t\t// Filter out possible comments\n\t\t\t\tif ( tag === \"*\" ) {\n\t\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\treturn tmp;\n\t\t\t\t}\n\t\t\t\treturn results;\n\t\t\t};\n\t\n\t\t// Class\n\t\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t};\n\t\n\t\t/* QSA/matchesSelector\n\t\t---------------------------------------------------------------------- */\n\t\n\t\t// QSA and matchesSelector support\n\t\n\t\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\t\trbuggyMatches = [];\n\t\n\t\t// qSa(:focus) reports false when true (Chrome 21)\n\t\t// We allow this because of a bug in IE8/9 that throws an error\n\t\t// whenever `document.activeElement` is accessed on an iframe\n\t\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t\t// See http://bugs.jquery.com/ticket/13378\n\t\trbuggyQSA = [];\n\t\n\t\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function( div ) {\n\t\t\t\t// Select is set to empty string on purpose\n\t\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t\t// setting a boolean content attribute,\n\t\t\t\t// since its presence should be enough\n\t\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\t\tdocElem.appendChild( div ).innerHTML = \"\" +\n\t\t\t\t\t\"\";\n\t\n\t\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t\t}\n\t\n\t\t\t\t// Support: IE8\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t\t}\n\t\n\t\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\t\n\t\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t// IE8 throws error here and will not see later tests\n\t\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\t\n\t\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\t\t\t});\n\t\n\t\t\tassert(function( div ) {\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tvar input = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\t\n\t\t\t\t// Support: IE8\n\t\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t\t}\n\t\n\t\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t\t// IE8 throws error here and will not see later tests\n\t\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t\t}\n\t\n\t\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\t\trbuggyQSA.push(\",.*:\");\n\t\t\t});\n\t\t}\n\t\n\t\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\t\tdocElem.webkitMatchesSelector ||\n\t\t\tdocElem.mozMatchesSelector ||\n\t\t\tdocElem.oMatchesSelector ||\n\t\t\tdocElem.msMatchesSelector) )) ) {\n\t\n\t\t\tassert(function( div ) {\n\t\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t\t// on a disconnected node (IE 9)\n\t\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\t\n\t\t\t\t// This should fail with an exception\n\t\t\t\t// Gecko does not error, returns false instead\n\t\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t\t});\n\t\t}\n\t\n\t\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\t\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\t\n\t\t/* Contains\n\t\t---------------------------------------------------------------------- */\n\t\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\t\n\t\t// Element contains another\n\t\t// Purposefully self-exclusive\n\t\t// As in, an element does not contain itself\n\t\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\t\tfunction( a, b ) {\n\t\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\t\tbup = b && b.parentNode;\n\t\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\t\tadown.contains ?\n\t\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t\t));\n\t\t\t} :\n\t\t\tfunction( a, b ) {\n\t\t\t\tif ( b ) {\n\t\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\n\t\t/* Sorting\n\t\t---------------------------------------------------------------------- */\n\t\n\t\t// Document order sorting\n\t\tsortOrder = hasCompare ?\n\t\tfunction( a, b ) {\n\t\n\t\t\t// Flag for duplicate removal\n\t\t\tif ( a === b ) {\n\t\t\t\thasDuplicate = true;\n\t\t\t\treturn 0;\n\t\t\t}\n\t\n\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\tif ( compare ) {\n\t\t\t\treturn compare;\n\t\t\t}\n\t\n\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\t\ta.compareDocumentPosition( b ) :\n\t\n\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t1;\n\t\n\t\t\t// Disconnected nodes\n\t\t\tif ( compare & 1 ||\n\t\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\t\n\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\n\t\t\t\t// Maintain original order\n\t\t\t\treturn sortInput ?\n\t\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t\t0;\n\t\t\t}\n\t\n\t\t\treturn compare & 4 ? -1 : 1;\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\t// Exit early if the nodes are identical\n\t\t\tif ( a === b ) {\n\t\t\t\thasDuplicate = true;\n\t\t\t\treturn 0;\n\t\t\t}\n\t\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\taup = a.parentNode,\n\t\t\t\tbup = b.parentNode,\n\t\t\t\tap = [ a ],\n\t\t\t\tbp = [ b ];\n\t\n\t\t\t// Parentless nodes are either documents or disconnected\n\t\t\tif ( !aup || !bup ) {\n\t\t\t\treturn a === document ? -1 :\n\t\t\t\t\tb === document ? 1 :\n\t\t\t\t\taup ? -1 :\n\t\t\t\t\tbup ? 1 :\n\t\t\t\t\tsortInput ?\n\t\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t\t0;\n\t\n\t\t\t// If the nodes are siblings, we can do a quick check\n\t\t\t} else if ( aup === bup ) {\n\t\t\t\treturn siblingCheck( a, b );\n\t\t\t}\n\t\n\t\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\t\tcur = a;\n\t\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\t\tap.unshift( cur );\n\t\t\t}\n\t\t\tcur = b;\n\t\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\t\tbp.unshift( cur );\n\t\t\t}\n\t\n\t\t\t// Walk down the tree looking for a discrepancy\n\t\t\twhile ( ap[i] === bp[i] ) {\n\t\t\t\ti++;\n\t\t\t}\n\t\n\t\t\treturn i ?\n\t\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\t\n\t\t\t\t// Otherwise nodes in our document sort first\n\t\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t\t0;\n\t\t};\n\t\n\t\treturn document;\n\t};\n\t\n\tSizzle.matches = function( expr, elements ) {\n\t\treturn Sizzle( expr, null, null, elements );\n\t};\n\t\n\tSizzle.matchesSelector = function( elem, expr ) {\n\t\t// Set document vars if needed\n\t\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\t\tsetDocument( elem );\n\t\t}\n\t\n\t\t// Make sure that attribute selectors are quoted\n\t\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\t\n\t\tif ( support.matchesSelector && documentIsHTML &&\n\t\t\t!compilerCache[ expr + \" \" ] &&\n\t\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\t\n\t\t\ttry {\n\t\t\t\tvar ret = matches.call( elem, expr );\n\t\n\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t\n\t\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n\t};\n\t\n\tSizzle.contains = function( context, elem ) {\n\t\t// Set document vars if needed\n\t\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\treturn contains( context, elem );\n\t};\n\t\n\tSizzle.attr = function( elem, name ) {\n\t\t// Set document vars if needed\n\t\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\t\tsetDocument( elem );\n\t\t}\n\t\n\t\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\t\tundefined;\n\t\n\t\treturn val !== undefined ?\n\t\t\tval :\n\t\t\tsupport.attributes || !documentIsHTML ?\n\t\t\t\telem.getAttribute( name ) :\n\t\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t};\n\t\n\tSizzle.error = function( msg ) {\n\t\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n\t};\n\t\n\t/**\n\t * Document sorting and removing duplicates\n\t * @param {ArrayLike} results\n\t */\n\tSizzle.uniqueSort = function( results ) {\n\t\tvar elem,\n\t\t\tduplicates = [],\n\t\t\tj = 0,\n\t\t\ti = 0;\n\t\n\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\thasDuplicate = !support.detectDuplicates;\n\t\tsortInput = !support.sortStable && results.slice( 0 );\n\t\tresults.sort( sortOrder );\n\t\n\t\tif ( hasDuplicate ) {\n\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\t\tj = duplicates.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile ( j-- ) {\n\t\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t\t}\n\t\t}\n\t\n\t\t// Clear input after sorting to release objects\n\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\tsortInput = null;\n\t\n\t\treturn results;\n\t};\n\t\n\t/**\n\t * Utility function for retrieving the text value of an array of DOM nodes\n\t * @param {Array|Element} elem\n\t */\n\tgetText = Sizzle.getText = function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\t\n\t\tif ( !nodeType ) {\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( (node = elem[i++]) ) {\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += getText( node );\n\t\t\t}\n\t\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t\t// Use textContent for elements\n\t\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else {\n\t\t\t\t// Traverse its children\n\t\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\t\tret += getText( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\t\t// Do not include comment or processing instruction nodes\n\t\n\t\treturn ret;\n\t};\n\t\n\tExpr = Sizzle.selectors = {\n\t\n\t\t// Can be adjusted by the user\n\t\tcacheLength: 50,\n\t\n\t\tcreatePseudo: markFunction,\n\t\n\t\tmatch: matchExpr,\n\t\n\t\tattrHandle: {},\n\t\n\t\tfind: {},\n\t\n\t\trelative: {\n\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t},\n\t\n\t\tpreFilter: {\n\t\t\t\"ATTR\": function( match ) {\n\t\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\t\n\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\t\n\t\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t}\n\t\n\t\t\t\treturn match.slice( 0, 4 );\n\t\t\t},\n\t\n\t\t\t\"CHILD\": function( match ) {\n\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t8 y of y-component\n\t\t\t\t*/\n\t\t\t\tmatch[1] = match[1].toLowerCase();\n\t\n\t\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\t\n\t\t\t\t// other types prohibit arguments\n\t\t\t\t} else if ( match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\t\n\t\t\t\treturn match;\n\t\t\t},\n\t\n\t\t\t\"PSEUDO\": function( match ) {\n\t\t\t\tvar excess,\n\t\t\t\t\tunquoted = !match[6] && match[2];\n\t\n\t\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\n\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\tif ( match[3] ) {\n\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\t\n\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\t\n\t\t\t\t\t// excess is a negative index\n\t\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t\t}\n\t\n\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\treturn match.slice( 0, 3 );\n\t\t\t}\n\t\t},\n\t\n\t\tfilter: {\n\t\n\t\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\tfunction() { return true; } :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t\t};\n\t\t\t},\n\t\n\t\t\t\"CLASS\": function( className ) {\n\t\t\t\tvar pattern = classCache[ className + \" \" ];\n\t\n\t\t\t\treturn pattern ||\n\t\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t\t});\n\t\t\t},\n\t\n\t\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\tvar result = Sizzle.attr( elem, name );\n\t\n\t\t\t\t\tif ( result == null ) {\n\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t}\n\t\t\t\t\tif ( !operator ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tresult += \"\";\n\t\n\t\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\t\tfalse;\n\t\t\t\t};\n\t\t\t},\n\t\n\t\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\t\tofType = what === \"of-type\";\n\t\n\t\t\t\treturn first === 1 && last === 0 ?\n\t\n\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t} :\n\t\n\t\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\tdiff = false;\n\t\n\t\t\t\t\t\tif ( parent ) {\n\t\n\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\t\n\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\t\n\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\tif ( forward && useCache ) {\n\t\n\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\t\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\t\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\t\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\n\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\t\n\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\t\n\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\t\n\t\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\t\n\t\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t\t++diff ) {\n\t\n\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\t\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\t\n\t\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t},\n\t\n\t\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\tvar args,\n\t\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\t\n\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t// just as Sizzle does\n\t\t\t\tif ( fn[ expando ] ) {\n\t\t\t\t\treturn fn( argument );\n\t\t\t\t}\n\t\n\t\t\t\t// But maintain support for old signatures\n\t\t\t\tif ( fn.length > 1 ) {\n\t\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t\t};\n\t\t\t\t}\n\t\n\t\t\t\treturn fn;\n\t\t\t}\n\t\t},\n\t\n\t\tpseudos: {\n\t\t\t// Potentially complex pseudos\n\t\t\t\"not\": markFunction(function( selector ) {\n\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t// spaces as combinators\n\t\t\t\tvar input = [],\n\t\t\t\t\tresults = [],\n\t\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\t\n\t\t\t\treturn matcher[ expando ] ?\n\t\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\t\ti = seed.length;\n\t\n\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t};\n\t\t\t}),\n\t\n\t\t\t\"has\": markFunction(function( selector ) {\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t\t};\n\t\t\t}),\n\t\n\t\t\t\"contains\": markFunction(function( text ) {\n\t\t\t\ttext = text.replace( runescape, funescape );\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t\t};\n\t\t\t}),\n\t\n\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t// is based solely on the element's language value\n\t\t\t// being equal to the identifier C,\n\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t\t// lang value must be a valid identifier\n\t\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t\t}\n\t\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\tvar elemLang;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\t\n\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t\t}),\n\t\n\t\t\t// Miscellaneous\n\t\t\t\"target\": function( elem ) {\n\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t\t},\n\t\n\t\t\t\"root\": function( elem ) {\n\t\t\t\treturn elem === docElem;\n\t\t\t},\n\t\n\t\t\t\"focus\": function( elem ) {\n\t\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t},\n\t\n\t\t\t// Boolean properties\n\t\t\t\"enabled\": function( elem ) {\n\t\t\t\treturn elem.disabled === false;\n\t\t\t},\n\t\n\t\t\t\"disabled\": function( elem ) {\n\t\t\t\treturn elem.disabled === true;\n\t\t\t},\n\t\n\t\t\t\"checked\": function( elem ) {\n\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t\t},\n\t\n\t\t\t\"selected\": function( elem ) {\n\t\t\t\t// Accessing this property makes selected-by-default\n\t\t\t\t// options in Safari work properly\n\t\t\t\tif ( elem.parentNode ) {\n\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t}\n\t\n\t\t\t\treturn elem.selected === true;\n\t\t\t},\n\t\n\t\t\t// Contents\n\t\t\t\"empty\": function( elem ) {\n\t\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t},\n\t\n\t\t\t\"parent\": function( elem ) {\n\t\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t\t},\n\t\n\t\t\t// Element/input types\n\t\t\t\"header\": function( elem ) {\n\t\t\t\treturn rheader.test( elem.nodeName );\n\t\t\t},\n\t\n\t\t\t\"input\": function( elem ) {\n\t\t\t\treturn rinputs.test( elem.nodeName );\n\t\t\t},\n\t\n\t\t\t\"button\": function( elem ) {\n\t\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t\t},\n\t\n\t\t\t\"text\": function( elem ) {\n\t\t\t\tvar attr;\n\t\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\t\telem.type === \"text\" &&\n\t\n\t\t\t\t\t// Support: IE<8\n\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t\t},\n\t\n\t\t\t// Position-in-collection\n\t\t\t\"first\": createPositionalPseudo(function() {\n\t\t\t\treturn [ 0 ];\n\t\t\t}),\n\t\n\t\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\t\treturn [ length - 1 ];\n\t\t\t}),\n\t\n\t\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t\t}),\n\t\n\t\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\t\tmatchIndexes.push( i );\n\t\t\t\t}\n\t\t\t\treturn matchIndexes;\n\t\t\t}),\n\t\n\t\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\t\tvar i = 1;\n\t\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\t\tmatchIndexes.push( i );\n\t\t\t\t}\n\t\t\t\treturn matchIndexes;\n\t\t\t}),\n\t\n\t\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\t\tmatchIndexes.push( i );\n\t\t\t\t}\n\t\t\t\treturn matchIndexes;\n\t\t\t}),\n\t\n\t\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\t\tmatchIndexes.push( i );\n\t\t\t\t}\n\t\t\t\treturn matchIndexes;\n\t\t\t})\n\t\t}\n\t};\n\t\n\tExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\t\n\t// Add button/input type pseudos\n\tfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\t\tExpr.pseudos[ i ] = createInputPseudo( i );\n\t}\n\tfor ( i in { submit: true, reset: true } ) {\n\t\tExpr.pseudos[ i ] = createButtonPseudo( i );\n\t}\n\t\n\t// Easy API for creating new setFilters\n\tfunction setFilters() {}\n\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\tExpr.setFilters = new setFilters();\n\t\n\ttokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\t\tvar matched, match, tokens, type,\n\t\t\tsoFar, groups, preFilters,\n\t\t\tcached = tokenCache[ selector + \" \" ];\n\t\n\t\tif ( cached ) {\n\t\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t\t}\n\t\n\t\tsoFar = selector;\n\t\tgroups = [];\n\t\tpreFilters = Expr.preFilter;\n\t\n\t\twhile ( soFar ) {\n\t\n\t\t\t// Comma and first run\n\t\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\t\tif ( match ) {\n\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t\t}\n\t\t\t\tgroups.push( (tokens = []) );\n\t\t\t}\n\t\n\t\t\tmatched = false;\n\t\n\t\t\t// Combinators\n\t\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\n\t\t\t// Filters\n\t\t\tfor ( type in Expr.filter ) {\n\t\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\tmatches: match\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( !matched ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\n\t\t// Return the length of the invalid excess\n\t\t// if we're just parsing\n\t\t// Otherwise, throw an error or return tokens\n\t\treturn parseOnly ?\n\t\t\tsoFar.length :\n\t\t\tsoFar ?\n\t\t\t\tSizzle.error( selector ) :\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache( selector, groups ).slice( 0 );\n\t};\n\t\n\tfunction toSelector( tokens ) {\n\t\tvar i = 0,\n\t\t\tlen = tokens.length,\n\t\t\tselector = \"\";\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tselector += tokens[i].value;\n\t\t}\n\t\treturn selector;\n\t}\n\t\n\tfunction addCombinator( matcher, combinator, base ) {\n\t\tvar dir = combinator.dir,\n\t\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\t\tdoneName = done++;\n\t\n\t\treturn combinator.first ?\n\t\t\t// Check against closest ancestor/preceding element\n\t\t\tfunction( elem, context, xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} :\n\t\n\t\t\t// Check against all ancestor/preceding elements\n\t\t\tfunction( elem, context, xml ) {\n\t\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\t\tnewCache = [ dirruns, doneName ];\n\t\n\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\tif ( xml ) {\n\t\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\t\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\t\n\t\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\t\n\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\t\n\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t}\n\t\n\tfunction elementMatcher( matchers ) {\n\t\treturn matchers.length > 1 ?\n\t\t\tfunction( elem, context, xml ) {\n\t\t\t\tvar i = matchers.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t} :\n\t\t\tmatchers[0];\n\t}\n\t\n\tfunction multipleContexts( selector, contexts, results ) {\n\t\tvar i = 0,\n\t\t\tlen = contexts.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tSizzle( selector, contexts[i], results );\n\t\t}\n\t\treturn results;\n\t}\n\t\n\tfunction condense( unmatched, map, filter, context, xml ) {\n\t\tvar elem,\n\t\t\tnewUnmatched = [],\n\t\t\ti = 0,\n\t\t\tlen = unmatched.length,\n\t\t\tmapped = map != null;\n\t\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\t\tif ( mapped ) {\n\t\t\t\t\t\tmap.push( i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn newUnmatched;\n\t}\n\t\n\tfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\t\tif ( postFilter && !postFilter[ expando ] ) {\n\t\t\tpostFilter = setMatcher( postFilter );\n\t\t}\n\t\tif ( postFinder && !postFinder[ expando ] ) {\n\t\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t\t}\n\t\treturn markFunction(function( seed, results, context, xml ) {\n\t\t\tvar temp, i, elem,\n\t\t\t\tpreMap = [],\n\t\t\t\tpostMap = [],\n\t\t\t\tpreexisting = results.length,\n\t\n\t\t\t\t// Get initial elements from seed or context\n\t\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\t\n\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\t\telems,\n\t\n\t\t\t\tmatcherOut = matcher ?\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\t\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\t\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults :\n\t\t\t\t\tmatcherIn;\n\t\n\t\t\t// Find primary matches\n\t\t\tif ( matcher ) {\n\t\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t\t}\n\t\n\t\t\t// Apply postFilter\n\t\t\tif ( postFilter ) {\n\t\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\t\tpostFilter( temp, [], context, xml );\n\t\n\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\ti = temp.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( seed ) {\n\t\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\t\n\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t} else {\n\t\t\t\tmatcherOut = condense(\n\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\t\tmatcherOut\n\t\t\t\t);\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t\t} else {\n\t\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t\n\tfunction matcherFromTokens( tokens ) {\n\t\tvar checkContext, matcher, j,\n\t\t\tlen = tokens.length,\n\t\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\ti = leadingRelative ? 1 : 0,\n\t\n\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\t\treturn elem === checkContext;\n\t\t\t}, implicitRelative, true ),\n\t\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t\t}, implicitRelative, true ),\n\t\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\t\tcheckContext = null;\n\t\t\t\treturn ret;\n\t\t\t} ];\n\t\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t\t} else {\n\t\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\t\n\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\tj = ++i;\n\t\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tmatchers.push( matcher );\n\t\t\t}\n\t\t}\n\t\n\t\treturn elementMatcher( matchers );\n\t}\n\t\n\tfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\t\tvar bySet = setMatchers.length > 0,\n\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\ti = \"0\",\n\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\tsetMatched = [],\n\t\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\tlen = elems.length;\n\t\n\t\t\t\tif ( outermost ) {\n\t\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t\t}\n\t\n\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t// Support: IE<9, Safari\n\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: