{"ast":null,"code":"import _get from \"C:/Users/kgamal/Downloads/HijriGregorianDatepicker-master/HijriGregorianDatepicker-master/node_modules/@babel/runtime/helpers/esm/get\";\nimport _getPrototypeOf from \"C:/Users/kgamal/Downloads/HijriGregorianDatepicker-master/HijriGregorianDatepicker-master/node_modules/@babel/runtime/helpers/esm/getPrototypeOf\";\nimport _createClass from \"C:/Users/kgamal/Downloads/HijriGregorianDatepicker-master/HijriGregorianDatepicker-master/node_modules/@babel/runtime/helpers/esm/createClass\";\nimport _classCallCheck from \"C:/Users/kgamal/Downloads/HijriGregorianDatepicker-master/HijriGregorianDatepicker-master/node_modules/@babel/runtime/helpers/esm/classCallCheck\";\nimport _inherits from \"C:/Users/kgamal/Downloads/HijriGregorianDatepicker-master/HijriGregorianDatepicker-master/node_modules/@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"C:/Users/kgamal/Downloads/HijriGregorianDatepicker-master/HijriGregorianDatepicker-master/node_modules/@babel/runtime/helpers/esm/createSuper\";\n\n/**\n * @license Angular v12.2.16\n * (c) 2010-2021 Google LLC. https://angular.io/\n * License: MIT\n */\nimport { ɵDomAdapter, ɵsetRootDomAdapter, ɵparseCookieValue, ɵgetDOM, DOCUMENT, ɵPLATFORM_BROWSER_ID, XhrFactory, CommonModule } from '@angular/common';\nimport * as ɵngcc0 from '@angular/core';\nexport { ɵgetDOM } from '@angular/common';\nimport { InjectionToken, ApplicationInitStatus, APP_INITIALIZER, Injector, setTestabilityGetter, ɵglobal, Injectable, ApplicationRef, NgZone, ɵgetDebugNodeR2, NgProbeToken, Optional, Inject, ViewEncapsulation, APP_ID, RendererStyleFlags2, ɵConsole, NgModule, ɵɵdefineInjectable, ɵɵinject, forwardRef, SecurityContext, ɵallowSanitizationBypassAndThrow, ɵunwrapSafeValue, ɵgetSanitizationBypassType, ɵ_sanitizeUrl, ɵ_sanitizeHtml, ɵbypassSanitizationTrustHtml, ɵbypassSanitizationTrustStyle, ɵbypassSanitizationTrustScript, ɵbypassSanitizationTrustUrl, ɵbypassSanitizationTrustResourceUrl, INJECTOR, ErrorHandler, ɵsetDocument, PLATFORM_ID, PLATFORM_INITIALIZER, Sanitizer, createPlatformFactory, platformCore, ɵINJECTOR_SCOPE, RendererFactory2, Testability, ApplicationModule, SkipSelf, Version } from '@angular/core';\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Provides DOM operations in any browser environment.\n *\n * @security Tread carefully! Interacting with the DOM directly is dangerous and\n * can introduce XSS risks.\n */\n\nvar GenericBrowserDomAdapter = /*#__PURE__*/function (_ɵDomAdapter) {\n  _inherits(GenericBrowserDomAdapter, _ɵDomAdapter);\n\n  var _super = _createSuper(GenericBrowserDomAdapter);\n\n  function GenericBrowserDomAdapter() {\n    var _this;\n\n    _classCallCheck(this, GenericBrowserDomAdapter);\n\n    _this = _super.apply(this, arguments);\n    _this.supportsDOMEvents = true;\n    return _this;\n  }\n\n  return _createClass(GenericBrowserDomAdapter);\n}(ɵDomAdapter);\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * A `DomAdapter` powered by full browser DOM APIs.\n *\n * @security Tread carefully! Interacting with the DOM directly is dangerous and\n * can introduce XSS risks.\n */\n\n/* tslint:disable:requireParameterType no-console */\n\n\nvar BrowserDomAdapter = /*#__PURE__*/function (_GenericBrowserDomAda) {\n  _inherits(BrowserDomAdapter, _GenericBrowserDomAda);\n\n  var _super2 = _createSuper(BrowserDomAdapter);\n\n  function BrowserDomAdapter() {\n    _classCallCheck(this, BrowserDomAdapter);\n\n    return _super2.apply(this, arguments);\n  }\n\n  _createClass(BrowserDomAdapter, [{\n    key: \"onAndCancel\",\n    value: function onAndCancel(el, evt, listener) {\n      el.addEventListener(evt, listener, false); // Needed to follow Dart's subscription semantic, until fix of\n      // https://code.google.com/p/dart/issues/detail?id=17406\n\n      return function () {\n        el.removeEventListener(evt, listener, false);\n      };\n    }\n  }, {\n    key: \"dispatchEvent\",\n    value: function dispatchEvent(el, evt) {\n      el.dispatchEvent(evt);\n    }\n  }, {\n    key: \"remove\",\n    value: function remove(node) {\n      if (node.parentNode) {\n        node.parentNode.removeChild(node);\n      }\n    }\n  }, {\n    key: \"createElement\",\n    value: function createElement(tagName, doc) {\n      doc = doc || this.getDefaultDocument();\n      return doc.createElement(tagName);\n    }\n  }, {\n    key: \"createHtmlDocument\",\n    value: function createHtmlDocument() {\n      return document.implementation.createHTMLDocument('fakeTitle');\n    }\n  }, {\n    key: \"getDefaultDocument\",\n    value: function getDefaultDocument() {\n      return document;\n    }\n  }, {\n    key: \"isElementNode\",\n    value: function isElementNode(node) {\n      return node.nodeType === Node.ELEMENT_NODE;\n    }\n  }, {\n    key: \"isShadowRoot\",\n    value: function isShadowRoot(node) {\n      return node instanceof DocumentFragment;\n    }\n    /** @deprecated No longer being used in Ivy code. To be removed in version 14. */\n\n  }, {\n    key: \"getGlobalEventTarget\",\n    value: function getGlobalEventTarget(doc, target) {\n      if (target === 'window') {\n        return window;\n      }\n\n      if (target === 'document') {\n        return doc;\n      }\n\n      if (target === 'body') {\n        return doc.body;\n      }\n\n      return null;\n    }\n  }, {\n    key: \"getBaseHref\",\n    value: function getBaseHref(doc) {\n      var href = getBaseElementHref();\n      return href == null ? null : relativePath(href);\n    }\n  }, {\n    key: \"resetBaseElement\",\n    value: function resetBaseElement() {\n      baseElement = null;\n    }\n  }, {\n    key: \"getUserAgent\",\n    value: function getUserAgent() {\n      return window.navigator.userAgent;\n    }\n  }, {\n    key: \"getCookie\",\n    value: function getCookie(name) {\n      return ɵparseCookieValue(document.cookie, name);\n    }\n  }], [{\n    key: \"makeCurrent\",\n    value: function makeCurrent() {\n      ɵsetRootDomAdapter(new BrowserDomAdapter());\n    }\n  }]);\n\n  return BrowserDomAdapter;\n}(GenericBrowserDomAdapter);\n\nvar baseElement = null;\n\nfunction getBaseElementHref() {\n  baseElement = baseElement || document.querySelector('base');\n  return baseElement ? baseElement.getAttribute('href') : null;\n} // based on urlUtils.js in AngularJS 1\n\n\nvar urlParsingNode;\n\nfunction relativePath(url) {\n  urlParsingNode = urlParsingNode || document.createElement('a');\n  urlParsingNode.setAttribute('href', url);\n  var pathName = urlParsingNode.pathname;\n  return pathName.charAt(0) === '/' ? pathName : \"/\".concat(pathName);\n}\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * An id that identifies a particular application being bootstrapped, that should\n * match across the client/server boundary.\n */\n\n\nvar TRANSITION_ID = /*@__PURE__*/new InjectionToken('TRANSITION_ID');\n\nfunction appInitializerFactory(transitionId, document, injector) {\n  return function () {\n    // Wait for all application initializers to be completed before removing the styles set by\n    // the server.\n    injector.get(ApplicationInitStatus).donePromise.then(function () {\n      var dom = ɵgetDOM();\n      var styles = document.querySelectorAll(\"style[ng-transition=\\\"\".concat(transitionId, \"\\\"]\"));\n\n      for (var i = 0; i < styles.length; i++) {\n        dom.remove(styles[i]);\n      }\n    });\n  };\n}\n\nvar SERVER_TRANSITION_PROVIDERS = [{\n  provide: APP_INITIALIZER,\n  useFactory: appInitializerFactory,\n  deps: [TRANSITION_ID, DOCUMENT, Injector],\n  multi: true\n}];\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nvar BrowserGetTestability = /*#__PURE__*/function () {\n  function BrowserGetTestability() {\n    _classCallCheck(this, BrowserGetTestability);\n  }\n\n  _createClass(BrowserGetTestability, [{\n    key: \"addToWindow\",\n    value: function addToWindow(registry) {\n      ɵglobal['getAngularTestability'] = function (elem) {\n        var findInAncestors = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n        var testability = registry.findTestabilityInTree(elem, findInAncestors);\n\n        if (testability == null) {\n          throw new Error('Could not find testability for element.');\n        }\n\n        return testability;\n      };\n\n      ɵglobal['getAllAngularTestabilities'] = function () {\n        return registry.getAllTestabilities();\n      };\n\n      ɵglobal['getAllAngularRootElements'] = function () {\n        return registry.getAllRootElements();\n      };\n\n      var whenAllStable = function whenAllStable(callback\n      /** TODO #9100 */\n      ) {\n        var testabilities = ɵglobal['getAllAngularTestabilities']();\n        var count = testabilities.length;\n        var didWork = false;\n\n        var decrement = function decrement(didWork_\n        /** TODO #9100 */\n        ) {\n          didWork = didWork || didWork_;\n          count--;\n\n          if (count == 0) {\n            callback(didWork);\n          }\n        };\n\n        testabilities.forEach(function (testability\n        /** TODO #9100 */\n        ) {\n          testability.whenStable(decrement);\n        });\n      };\n\n      if (!ɵglobal['frameworkStabilizers']) {\n        ɵglobal['frameworkStabilizers'] = [];\n      }\n\n      ɵglobal['frameworkStabilizers'].push(whenAllStable);\n    }\n  }, {\n    key: \"findTestabilityInTree\",\n    value: function findTestabilityInTree(registry, elem, findInAncestors) {\n      if (elem == null) {\n        return null;\n      }\n\n      var t = registry.getTestability(elem);\n\n      if (t != null) {\n        return t;\n      } else if (!findInAncestors) {\n        return null;\n      }\n\n      if (ɵgetDOM().isShadowRoot(elem)) {\n        return this.findTestabilityInTree(registry, elem.host, true);\n      }\n\n      return this.findTestabilityInTree(registry, elem.parentElement, true);\n    }\n  }], [{\n    key: \"init\",\n    value: function init() {\n      setTestabilityGetter(new BrowserGetTestability());\n    }\n  }]);\n\n  return BrowserGetTestability;\n}();\n\nvar BrowserXhr = /*@__PURE__*/function () {\n  var BrowserXhr = /*#__PURE__*/function () {\n    function BrowserXhr() {\n      _classCallCheck(this, BrowserXhr);\n    }\n\n    _createClass(BrowserXhr, [{\n      key: \"build\",\n      value: function build() {\n        return new XMLHttpRequest();\n      }\n    }]);\n\n    return BrowserXhr;\n  }();\n\n  BrowserXhr.ɵfac = function BrowserXhr_Factory(t) {\n    return new (t || BrowserXhr)();\n  };\n\n  BrowserXhr.ɵprov =\n  /*@__PURE__*/\n\n  /*@__PURE__*/\n  ɵngcc0.ɵɵdefineInjectable({\n    token: BrowserXhr,\n    factory: BrowserXhr.ɵfac\n  });\n  return BrowserXhr;\n}();\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nvar CAMEL_CASE_REGEXP = /([A-Z])/g;\nvar DASH_CASE_REGEXP = /-([a-z])/g;\n\nfunction camelCaseToDashCase(input) {\n  return input.replace(CAMEL_CASE_REGEXP, function () {\n    for (var _len = arguments.length, m = new Array(_len), _key = 0; _key < _len; _key++) {\n      m[_key] = arguments[_key];\n    }\n\n    return '-' + m[1].toLowerCase();\n  });\n}\n\nfunction dashCaseToCamelCase(input) {\n  return input.replace(DASH_CASE_REGEXP, function () {\n    for (var _len2 = arguments.length, m = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      m[_key2] = arguments[_key2];\n    }\n\n    return m[1].toUpperCase();\n  });\n}\n/**\n * Exports the value under a given `name` in the global property `ng`. For example `ng.probe` if\n * `name` is `'probe'`.\n * @param name Name under which it will be exported. Keep in mind this will be a property of the\n * global `ng` object.\n * @param value The value to export.\n */\n\n\nfunction exportNgVar(name, value) {\n  if (typeof COMPILED === 'undefined' || !COMPILED) {\n    // Note: we can't export `ng` when using closure enhanced optimization as:\n    // - closure declares globals itself for minified names, which sometimes clobber our `ng` global\n    // - we can't declare a closure extern as the namespace `ng` is already used within Google\n    //   for typings for angularJS (via `goog.provide('ng....')`).\n    var ng = ɵglobal['ng'] = ɵglobal['ng'] || {};\n    ng[name] = value;\n  }\n}\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nvar ɵ0 = function ɵ0() {\n  return {\n    'ApplicationRef': ApplicationRef,\n    'NgZone': NgZone\n  };\n};\n\nvar CORE_TOKENS = /*@__PURE__*/ɵ0();\nvar INSPECT_GLOBAL_NAME = 'probe';\nvar CORE_TOKENS_GLOBAL_NAME = 'coreTokens';\n/**\n * Returns a {@link DebugElement} for the given native DOM element, or\n * null if the given native element does not have an Angular view associated\n * with it.\n */\n\nfunction inspectNativeElementR2(element) {\n  return ɵgetDebugNodeR2(element);\n}\n\nfunction _createNgProbeR2(coreTokens) {\n  exportNgVar(INSPECT_GLOBAL_NAME, inspectNativeElementR2);\n  exportNgVar(CORE_TOKENS_GLOBAL_NAME, Object.assign(Object.assign({}, CORE_TOKENS), _ngProbeTokensToMap(coreTokens || [])));\n  return function () {\n    return inspectNativeElementR2;\n  };\n}\n\nfunction _ngProbeTokensToMap(tokens) {\n  return tokens.reduce(function (prev, t) {\n    return prev[t.name] = t.token, prev;\n  }, {});\n}\n/**\n * In Ivy, we don't support NgProbe because we have our own set of testing utilities\n * with more robust functionality.\n *\n * We shouldn't bring in NgProbe because it prevents DebugNode and friends from\n * tree-shaking properly.\n */\n\n\nvar ELEMENT_PROBE_PROVIDERS__POST_R3__ = [];\n/**\n * Providers which support debugging Angular applications (e.g. via `ng.probe`).\n */\n\nvar ELEMENT_PROBE_PROVIDERS__PRE_R3__ = [{\n  provide: APP_INITIALIZER,\n  useFactory: _createNgProbeR2,\n  deps: [[NgProbeToken, /*@__PURE__*/new Optional()]],\n  multi: true\n}];\nvar ELEMENT_PROBE_PROVIDERS = ELEMENT_PROBE_PROVIDERS__POST_R3__;\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * The injection token for the event-manager plug-in service.\n *\n * @publicApi\n */\n\nvar EVENT_MANAGER_PLUGINS = /*@__PURE__*/new InjectionToken('EventManagerPlugins');\n\nvar EventManager = /*@__PURE__*/function () {\n  var EventManager = /*#__PURE__*/function () {\n    /**\n     * Initializes an instance of the event-manager service.\n     */\n    function EventManager(plugins, _zone) {\n      var _this2 = this;\n\n      _classCallCheck(this, EventManager);\n\n      this._zone = _zone;\n      this._eventNameToPlugin = new Map();\n      plugins.forEach(function (p) {\n        return p.manager = _this2;\n      });\n      this._plugins = plugins.slice().reverse();\n    }\n    /**\n     * Registers a handler for a specific element and event.\n     *\n     * @param element The HTML element to receive event notifications.\n     * @param eventName The name of the event to listen for.\n     * @param handler A function to call when the notification occurs. Receives the\n     * event object as an argument.\n     * @returns  A callback function that can be used to remove the handler.\n     */\n\n\n    _createClass(EventManager, [{\n      key: \"addEventListener\",\n      value: function addEventListener(element, eventName, handler) {\n        var plugin = this._findPluginFor(eventName);\n\n        return plugin.addEventListener(element, eventName, handler);\n      }\n      /**\n       * Registers a global handler for an event in a target view.\n       *\n       * @param target A target for global event notifications. One of \"window\", \"document\", or \"body\".\n       * @param eventName The name of the event to listen for.\n       * @param handler A function to call when the notification occurs. Receives the\n       * event object as an argument.\n       * @returns A callback function that can be used to remove the handler.\n       * @deprecated No longer being used in Ivy code. To be removed in version 14.\n       */\n\n    }, {\n      key: \"addGlobalEventListener\",\n      value: function addGlobalEventListener(target, eventName, handler) {\n        var plugin = this._findPluginFor(eventName);\n\n        return plugin.addGlobalEventListener(target, eventName, handler);\n      }\n      /**\n       * Retrieves the compilation zone in which event listeners are registered.\n       */\n\n    }, {\n      key: \"getZone\",\n      value: function getZone() {\n        return this._zone;\n      }\n      /** @internal */\n\n    }, {\n      key: \"_findPluginFor\",\n      value: function _findPluginFor(eventName) {\n        var plugin = this._eventNameToPlugin.get(eventName);\n\n        if (plugin) {\n          return plugin;\n        }\n\n        var plugins = this._plugins;\n\n        for (var i = 0; i < plugins.length; i++) {\n          var _plugin = plugins[i];\n\n          if (_plugin.supports(eventName)) {\n            this._eventNameToPlugin.set(eventName, _plugin);\n\n            return _plugin;\n          }\n        }\n\n        throw new Error(\"No event manager plugin found for event \".concat(eventName));\n      }\n    }]);\n\n    return EventManager;\n  }();\n\n  EventManager.ɵfac = function EventManager_Factory(t) {\n    return new (t || EventManager)(ɵngcc0.ɵɵinject(EVENT_MANAGER_PLUGINS), ɵngcc0.ɵɵinject(ɵngcc0.NgZone));\n  };\n\n  EventManager.ɵprov =\n  /*@__PURE__*/\n\n  /*@__PURE__*/\n  ɵngcc0.ɵɵdefineInjectable({\n    token: EventManager,\n    factory: EventManager.ɵfac\n  });\n  return EventManager;\n}();\n\nvar EventManagerPlugin = /*#__PURE__*/function () {\n  function EventManagerPlugin(_doc) {\n    _classCallCheck(this, EventManagerPlugin);\n\n    this._doc = _doc;\n  }\n\n  _createClass(EventManagerPlugin, [{\n    key: \"addGlobalEventListener\",\n    value: function addGlobalEventListener(element, eventName, handler) {\n      var target = ɵgetDOM().getGlobalEventTarget(this._doc, element);\n\n      if (!target) {\n        throw new Error(\"Unsupported event target \".concat(target, \" for event \").concat(eventName));\n      }\n\n      return this.addEventListener(target, eventName, handler);\n    }\n  }]);\n\n  return EventManagerPlugin;\n}();\n\nvar SharedStylesHost = /*@__PURE__*/function () {\n  var SharedStylesHost = /*#__PURE__*/function () {\n    function SharedStylesHost() {\n      _classCallCheck(this, SharedStylesHost);\n\n      /** @internal */\n      this._stylesSet = new Set();\n    }\n\n    _createClass(SharedStylesHost, [{\n      key: \"addStyles\",\n      value: function addStyles(styles) {\n        var _this3 = this;\n\n        var additions = new Set();\n        styles.forEach(function (style) {\n          if (!_this3._stylesSet.has(style)) {\n            _this3._stylesSet.add(style);\n\n            additions.add(style);\n          }\n        });\n        this.onStylesAdded(additions);\n      }\n    }, {\n      key: \"onStylesAdded\",\n      value: function onStylesAdded(additions) {}\n    }, {\n      key: \"getAllStyles\",\n      value: function getAllStyles() {\n        return Array.from(this._stylesSet);\n      }\n    }]);\n\n    return SharedStylesHost;\n  }();\n\n  SharedStylesHost.ɵfac = function SharedStylesHost_Factory(t) {\n    return new (t || SharedStylesHost)();\n  };\n\n  SharedStylesHost.ɵprov =\n  /*@__PURE__*/\n\n  /*@__PURE__*/\n  ɵngcc0.ɵɵdefineInjectable({\n    token: SharedStylesHost,\n    factory: SharedStylesHost.ɵfac\n  });\n  return SharedStylesHost;\n}();\n\nvar DomSharedStylesHost = /*@__PURE__*/function () {\n  var DomSharedStylesHost = /*#__PURE__*/function (_SharedStylesHost) {\n    _inherits(DomSharedStylesHost, _SharedStylesHost);\n\n    var _super3 = _createSuper(DomSharedStylesHost);\n\n    function DomSharedStylesHost(_doc) {\n      var _this4;\n\n      _classCallCheck(this, DomSharedStylesHost);\n\n      _this4 = _super3.call(this);\n      _this4._doc = _doc; // Maps all registered host nodes to a list of style nodes that have been added to the host node.\n\n      _this4._hostNodes = new Map();\n\n      _this4._hostNodes.set(_doc.head, []);\n\n      return _this4;\n    }\n\n    _createClass(DomSharedStylesHost, [{\n      key: \"_addStylesToHost\",\n      value: function _addStylesToHost(styles, host, styleNodes) {\n        var _this5 = this;\n\n        styles.forEach(function (style) {\n          var styleEl = _this5._doc.createElement('style');\n\n          styleEl.textContent = style;\n          styleNodes.push(host.appendChild(styleEl));\n        });\n      }\n    }, {\n      key: \"addHost\",\n      value: function addHost(hostNode) {\n        var styleNodes = [];\n\n        this._addStylesToHost(this._stylesSet, hostNode, styleNodes);\n\n        this._hostNodes.set(hostNode, styleNodes);\n      }\n    }, {\n      key: \"removeHost\",\n      value: function removeHost(hostNode) {\n        var styleNodes = this._hostNodes.get(hostNode);\n\n        if (styleNodes) {\n          styleNodes.forEach(removeStyle);\n        }\n\n        this._hostNodes.delete(hostNode);\n      }\n    }, {\n      key: \"onStylesAdded\",\n      value: function onStylesAdded(additions) {\n        var _this6 = this;\n\n        this._hostNodes.forEach(function (styleNodes, hostNode) {\n          _this6._addStylesToHost(additions, hostNode, styleNodes);\n        });\n      }\n    }, {\n      key: \"ngOnDestroy\",\n      value: function ngOnDestroy() {\n        this._hostNodes.forEach(function (styleNodes) {\n          return styleNodes.forEach(removeStyle);\n        });\n      }\n    }]);\n\n    return DomSharedStylesHost;\n  }(SharedStylesHost);\n\n  DomSharedStylesHost.ɵfac = function DomSharedStylesHost_Factory(t) {\n    return new (t || DomSharedStylesHost)(ɵngcc0.ɵɵinject(DOCUMENT));\n  };\n\n  DomSharedStylesHost.ɵprov =\n  /*@__PURE__*/\n\n  /*@__PURE__*/\n  ɵngcc0.ɵɵdefineInjectable({\n    token: DomSharedStylesHost,\n    factory: DomSharedStylesHost.ɵfac\n  });\n  return DomSharedStylesHost;\n}();\n\nfunction removeStyle(styleNode) {\n  ɵgetDOM().remove(styleNode);\n}\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nvar NAMESPACE_URIS = {\n  'svg': 'http://www.w3.org/2000/svg',\n  'xhtml': 'http://www.w3.org/1999/xhtml',\n  'xlink': 'http://www.w3.org/1999/xlink',\n  'xml': 'http://www.w3.org/XML/1998/namespace',\n  'xmlns': 'http://www.w3.org/2000/xmlns/'\n};\nvar COMPONENT_REGEX = /%COMP%/g;\nvar NG_DEV_MODE = typeof ngDevMode === 'undefined' || !!ngDevMode;\nvar COMPONENT_VARIABLE = '%COMP%';\nvar HOST_ATTR = \"_nghost-\".concat(COMPONENT_VARIABLE);\nvar CONTENT_ATTR = \"_ngcontent-\".concat(COMPONENT_VARIABLE);\n\nfunction shimContentAttribute(componentShortId) {\n  return CONTENT_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\n\nfunction shimHostAttribute(componentShortId) {\n  return HOST_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\n\nfunction flattenStyles(compId, styles, target) {\n  for (var i = 0; i < styles.length; i++) {\n    var style = styles[i];\n\n    if (Array.isArray(style)) {\n      flattenStyles(compId, style, target);\n    } else {\n      style = style.replace(COMPONENT_REGEX, compId);\n      target.push(style);\n    }\n  }\n\n  return target;\n}\n\nfunction decoratePreventDefault(eventHandler) {\n  // `DebugNode.triggerEventHandler` needs to know if the listener was created with\n  // decoratePreventDefault or is a listener added outside the Angular context so it can handle the\n  // two differently. In the first case, the special '__ngUnwrap__' token is passed to the unwrap\n  // the listener (see below).\n  return function (event) {\n    // Ivy uses '__ngUnwrap__' as a special token that allows us to unwrap the function\n    // so that it can be invoked programmatically by `DebugNode.triggerEventHandler`. The debug_node\n    // can inspect the listener toString contents for the existence of this special token. Because\n    // the token is a string literal, it is ensured to not be modified by compiled code.\n    if (event === '__ngUnwrap__') {\n      return eventHandler;\n    }\n\n    var allowDefaultBehavior = eventHandler(event);\n\n    if (allowDefaultBehavior === false) {\n      // TODO(tbosch): move preventDefault into event plugins...\n      event.preventDefault();\n      event.returnValue = false;\n    }\n\n    return undefined;\n  };\n}\n\nvar hasLoggedNativeEncapsulationWarning = false;\n\nvar DomRendererFactory2 = /*@__PURE__*/function () {\n  var DomRendererFactory2 = /*#__PURE__*/function () {\n    function DomRendererFactory2(eventManager, sharedStylesHost, appId) {\n      _classCallCheck(this, DomRendererFactory2);\n\n      this.eventManager = eventManager;\n      this.sharedStylesHost = sharedStylesHost;\n      this.appId = appId;\n      this.rendererByCompId = new Map();\n      this.defaultRenderer = new DefaultDomRenderer2(eventManager);\n    }\n\n    _createClass(DomRendererFactory2, [{\n      key: \"createRenderer\",\n      value: function createRenderer(element, type) {\n        if (!element || !type) {\n          return this.defaultRenderer;\n        }\n\n        switch (type.encapsulation) {\n          case ViewEncapsulation.Emulated:\n            {\n              var renderer = this.rendererByCompId.get(type.id);\n\n              if (!renderer) {\n                renderer = new EmulatedEncapsulationDomRenderer2(this.eventManager, this.sharedStylesHost, type, this.appId);\n                this.rendererByCompId.set(type.id, renderer);\n              }\n\n              renderer.applyToHost(element);\n              return renderer;\n            }\n          // @ts-ignore TODO: Remove as part of FW-2290. TS complains about us dealing with an enum\n          // value that is not known (but previously was the value for ViewEncapsulation.Native)\n\n          case 1:\n          case ViewEncapsulation.ShadowDom:\n            // TODO(FW-2290): remove the `case 1:` fallback logic and the warning in v12.\n            if ((typeof ngDevMode === 'undefined' || ngDevMode) && // @ts-ignore TODO: Remove as part of FW-2290. TS complains about us dealing with an\n            // enum value that is not known (but previously was the value for\n            // ViewEncapsulation.Native)\n            !hasLoggedNativeEncapsulationWarning && type.encapsulation === 1) {\n              hasLoggedNativeEncapsulationWarning = true;\n              console.warn('ViewEncapsulation.Native is no longer supported. Falling back to ViewEncapsulation.ShadowDom. The fallback will be removed in v12.');\n            }\n\n            return new ShadowDomRenderer(this.eventManager, this.sharedStylesHost, element, type);\n\n          default:\n            {\n              if (!this.rendererByCompId.has(type.id)) {\n                var styles = flattenStyles(type.id, type.styles, []);\n                this.sharedStylesHost.addStyles(styles);\n                this.rendererByCompId.set(type.id, this.defaultRenderer);\n              }\n\n              return this.defaultRenderer;\n            }\n        }\n      }\n    }, {\n      key: \"begin\",\n      value: function begin() {}\n    }, {\n      key: \"end\",\n      value: function end() {}\n    }]);\n\n    return DomRendererFactory2;\n  }();\n\n  DomRendererFactory2.ɵfac = function DomRendererFactory2_Factory(t) {\n    return new (t || DomRendererFactory2)(ɵngcc0.ɵɵinject(EventManager), ɵngcc0.ɵɵinject(DomSharedStylesHost), ɵngcc0.ɵɵinject(APP_ID));\n  };\n\n  DomRendererFactory2.ɵprov =\n  /*@__PURE__*/\n\n  /*@__PURE__*/\n  ɵngcc0.ɵɵdefineInjectable({\n    token: DomRendererFactory2,\n    factory: DomRendererFactory2.ɵfac\n  });\n  return DomRendererFactory2;\n}();\n\nvar DefaultDomRenderer2 = /*#__PURE__*/function () {\n  function DefaultDomRenderer2(eventManager) {\n    _classCallCheck(this, DefaultDomRenderer2);\n\n    this.eventManager = eventManager;\n    this.data = Object.create(null);\n  }\n\n  _createClass(DefaultDomRenderer2, [{\n    key: \"destroy\",\n    value: function destroy() {}\n  }, {\n    key: \"createElement\",\n    value: function createElement(name, namespace) {\n      if (namespace) {\n        // In cases where Ivy (not ViewEngine) is giving us the actual namespace, the look up by key\n        // will result in undefined, so we just return the namespace here.\n        return document.createElementNS(NAMESPACE_URIS[namespace] || namespace, name);\n      }\n\n      return document.createElement(name);\n    }\n  }, {\n    key: \"createComment\",\n    value: function createComment(value) {\n      return document.createComment(value);\n    }\n  }, {\n    key: \"createText\",\n    value: function createText(value) {\n      return document.createTextNode(value);\n    }\n  }, {\n    key: \"appendChild\",\n    value: function appendChild(parent, newChild) {\n      parent.appendChild(newChild);\n    }\n  }, {\n    key: \"insertBefore\",\n    value: function insertBefore(parent, newChild, refChild) {\n      if (parent) {\n        parent.insertBefore(newChild, refChild);\n      }\n    }\n  }, {\n    key: \"removeChild\",\n    value: function removeChild(parent, oldChild) {\n      if (parent) {\n        parent.removeChild(oldChild);\n      }\n    }\n  }, {\n    key: \"selectRootElement\",\n    value: function selectRootElement(selectorOrNode, preserveContent) {\n      var el = typeof selectorOrNode === 'string' ? document.querySelector(selectorOrNode) : selectorOrNode;\n\n      if (!el) {\n        throw new Error(\"The selector \\\"\".concat(selectorOrNode, \"\\\" did not match any elements\"));\n      }\n\n      if (!preserveContent) {\n        el.textContent = '';\n      }\n\n      return el;\n    }\n  }, {\n    key: \"parentNode\",\n    value: function parentNode(node) {\n      return node.parentNode;\n    }\n  }, {\n    key: \"nextSibling\",\n    value: function nextSibling(node) {\n      return node.nextSibling;\n    }\n  }, {\n    key: \"setAttribute\",\n    value: function setAttribute(el, name, value, namespace) {\n      if (namespace) {\n        name = namespace + ':' + name; // TODO(FW-811): Ivy may cause issues here because it's passing around\n        // full URIs for namespaces, therefore this lookup will fail.\n\n        var namespaceUri = NAMESPACE_URIS[namespace];\n\n        if (namespaceUri) {\n          el.setAttributeNS(namespaceUri, name, value);\n        } else {\n          el.setAttribute(name, value);\n        }\n      } else {\n        el.setAttribute(name, value);\n      }\n    }\n  }, {\n    key: \"removeAttribute\",\n    value: function removeAttribute(el, name, namespace) {\n      if (namespace) {\n        // TODO(FW-811): Ivy may cause issues here because it's passing around\n        // full URIs for namespaces, therefore this lookup will fail.\n        var namespaceUri = NAMESPACE_URIS[namespace];\n\n        if (namespaceUri) {\n          el.removeAttributeNS(namespaceUri, name);\n        } else {\n          // TODO(FW-811): Since ivy is passing around full URIs for namespaces\n          // this could result in properties like `http://www.w3.org/2000/svg:cx=\"123\"`,\n          // which is wrong.\n          el.removeAttribute(\"\".concat(namespace, \":\").concat(name));\n        }\n      } else {\n        el.removeAttribute(name);\n      }\n    }\n  }, {\n    key: \"addClass\",\n    value: function addClass(el, name) {\n      el.classList.add(name);\n    }\n  }, {\n    key: \"removeClass\",\n    value: function removeClass(el, name) {\n      el.classList.remove(name);\n    }\n  }, {\n    key: \"setStyle\",\n    value: function setStyle(el, style, value, flags) {\n      if (flags & (RendererStyleFlags2.DashCase | RendererStyleFlags2.Important)) {\n        el.style.setProperty(style, value, flags & RendererStyleFlags2.Important ? 'important' : '');\n      } else {\n        el.style[style] = value;\n      }\n    }\n  }, {\n    key: \"removeStyle\",\n    value: function removeStyle(el, style, flags) {\n      if (flags & RendererStyleFlags2.DashCase) {\n        el.style.removeProperty(style);\n      } else {\n        // IE requires '' instead of null\n        // see https://github.com/angular/angular/issues/7916\n        el.style[style] = '';\n      }\n    }\n  }, {\n    key: \"setProperty\",\n    value: function setProperty(el, name, value) {\n      NG_DEV_MODE && checkNoSyntheticProp(name, 'property');\n      el[name] = value;\n    }\n  }, {\n    key: \"setValue\",\n    value: function setValue(node, value) {\n      node.nodeValue = value;\n    }\n  }, {\n    key: \"listen\",\n    value: function listen(target, event, callback) {\n      NG_DEV_MODE && checkNoSyntheticProp(event, 'listener');\n\n      if (typeof target === 'string') {\n        return this.eventManager.addGlobalEventListener(target, event, decoratePreventDefault(callback));\n      }\n\n      return this.eventManager.addEventListener(target, event, decoratePreventDefault(callback));\n    }\n  }]);\n\n  return DefaultDomRenderer2;\n}();\n\nvar ɵ0$1 = function ɵ0$1() {\n  return '@'.charCodeAt(0);\n};\n\nvar AT_CHARCODE = /*@__PURE__*/ɵ0$1();\n\nfunction checkNoSyntheticProp(name, nameKind) {\n  if (name.charCodeAt(0) === AT_CHARCODE) {\n    throw new Error(\"Unexpected synthetic \".concat(nameKind, \" \").concat(name, \" found. Please make sure that:\\n  - Either `BrowserAnimationsModule` or `NoopAnimationsModule` are imported in your application.\\n  - There is corresponding configuration for the animation named `\").concat(name, \"` defined in the `animations` field of the `@Component` decorator (see https://angular.io/api/core/Component#animations).\"));\n  }\n}\n\nvar EmulatedEncapsulationDomRenderer2 = /*#__PURE__*/function (_DefaultDomRenderer) {\n  _inherits(EmulatedEncapsulationDomRenderer2, _DefaultDomRenderer);\n\n  var _super4 = _createSuper(EmulatedEncapsulationDomRenderer2);\n\n  function EmulatedEncapsulationDomRenderer2(eventManager, sharedStylesHost, component, appId) {\n    var _this7;\n\n    _classCallCheck(this, EmulatedEncapsulationDomRenderer2);\n\n    _this7 = _super4.call(this, eventManager);\n    _this7.component = component;\n    var styles = flattenStyles(appId + '-' + component.id, component.styles, []);\n    sharedStylesHost.addStyles(styles);\n    _this7.contentAttr = shimContentAttribute(appId + '-' + component.id);\n    _this7.hostAttr = shimHostAttribute(appId + '-' + component.id);\n    return _this7;\n  }\n\n  _createClass(EmulatedEncapsulationDomRenderer2, [{\n    key: \"applyToHost\",\n    value: function applyToHost(element) {\n      _get(_getPrototypeOf(EmulatedEncapsulationDomRenderer2.prototype), \"setAttribute\", this).call(this, element, this.hostAttr, '');\n    }\n  }, {\n    key: \"createElement\",\n    value: function createElement(parent, name) {\n      var el = _get(_getPrototypeOf(EmulatedEncapsulationDomRenderer2.prototype), \"createElement\", this).call(this, parent, name);\n\n      _get(_getPrototypeOf(EmulatedEncapsulationDomRenderer2.prototype), \"setAttribute\", this).call(this, el, this.contentAttr, '');\n\n      return el;\n    }\n  }]);\n\n  return EmulatedEncapsulationDomRenderer2;\n}(DefaultDomRenderer2);\n\nvar ShadowDomRenderer = /*#__PURE__*/function (_DefaultDomRenderer2) {\n  _inherits(ShadowDomRenderer, _DefaultDomRenderer2);\n\n  var _super5 = _createSuper(ShadowDomRenderer);\n\n  function ShadowDomRenderer(eventManager, sharedStylesHost, hostEl, component) {\n    var _this8;\n\n    _classCallCheck(this, ShadowDomRenderer);\n\n    _this8 = _super5.call(this, eventManager);\n    _this8.sharedStylesHost = sharedStylesHost;\n    _this8.hostEl = hostEl;\n    _this8.shadowRoot = hostEl.attachShadow({\n      mode: 'open'\n    });\n\n    _this8.sharedStylesHost.addHost(_this8.shadowRoot);\n\n    var styles = flattenStyles(component.id, component.styles, []);\n\n    for (var i = 0; i < styles.length; i++) {\n      var styleEl = document.createElement('style');\n      styleEl.textContent = styles[i];\n\n      _this8.shadowRoot.appendChild(styleEl);\n    }\n\n    return _this8;\n  }\n\n  _createClass(ShadowDomRenderer, [{\n    key: \"nodeOrShadowRoot\",\n    value: function nodeOrShadowRoot(node) {\n      return node === this.hostEl ? this.shadowRoot : node;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.sharedStylesHost.removeHost(this.shadowRoot);\n    }\n  }, {\n    key: \"appendChild\",\n    value: function appendChild(parent, newChild) {\n      return _get(_getPrototypeOf(ShadowDomRenderer.prototype), \"appendChild\", this).call(this, this.nodeOrShadowRoot(parent), newChild);\n    }\n  }, {\n    key: \"insertBefore\",\n    value: function insertBefore(parent, newChild, refChild) {\n      return _get(_getPrototypeOf(ShadowDomRenderer.prototype), \"insertBefore\", this).call(this, this.nodeOrShadowRoot(parent), newChild, refChild);\n    }\n  }, {\n    key: \"removeChild\",\n    value: function removeChild(parent, oldChild) {\n      return _get(_getPrototypeOf(ShadowDomRenderer.prototype), \"removeChild\", this).call(this, this.nodeOrShadowRoot(parent), oldChild);\n    }\n  }, {\n    key: \"parentNode\",\n    value: function parentNode(node) {\n      return this.nodeOrShadowRoot(_get(_getPrototypeOf(ShadowDomRenderer.prototype), \"parentNode\", this).call(this, this.nodeOrShadowRoot(node)));\n    }\n  }]);\n\n  return ShadowDomRenderer;\n}(DefaultDomRenderer2);\n\nvar DomEventsPlugin = /*@__PURE__*/function () {\n  var DomEventsPlugin = /*#__PURE__*/function (_EventManagerPlugin) {\n    _inherits(DomEventsPlugin, _EventManagerPlugin);\n\n    var _super6 = _createSuper(DomEventsPlugin);\n\n    function DomEventsPlugin(doc) {\n      _classCallCheck(this, DomEventsPlugin);\n\n      return _super6.call(this, doc);\n    } // This plugin should come last in the list of plugins, because it accepts all\n    // events.\n\n\n    _createClass(DomEventsPlugin, [{\n      key: \"supports\",\n      value: function supports(eventName) {\n        return true;\n      }\n    }, {\n      key: \"addEventListener\",\n      value: function addEventListener(element, eventName, handler) {\n        var _this9 = this;\n\n        element.addEventListener(eventName, handler, false);\n        return function () {\n          return _this9.removeEventListener(element, eventName, handler);\n        };\n      }\n    }, {\n      key: \"removeEventListener\",\n      value: function removeEventListener(target, eventName, callback) {\n        return target.removeEventListener(eventName, callback);\n      }\n    }]);\n\n    return DomEventsPlugin;\n  }(EventManagerPlugin);\n\n  DomEventsPlugin.ɵfac = function DomEventsPlugin_Factory(t) {\n    return new (t || DomEventsPlugin)(ɵngcc0.ɵɵinject(DOCUMENT));\n  };\n\n  DomEventsPlugin.ɵprov =\n  /*@__PURE__*/\n\n  /*@__PURE__*/\n  ɵngcc0.ɵɵdefineInjectable({\n    token: DomEventsPlugin,\n    factory: DomEventsPlugin.ɵfac\n  });\n  return DomEventsPlugin;\n}();\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Supported HammerJS recognizer event names.\n */\n\n\nvar EVENT_NAMES = {\n  // pan\n  'pan': true,\n  'panstart': true,\n  'panmove': true,\n  'panend': true,\n  'pancancel': true,\n  'panleft': true,\n  'panright': true,\n  'panup': true,\n  'pandown': true,\n  // pinch\n  'pinch': true,\n  'pinchstart': true,\n  'pinchmove': true,\n  'pinchend': true,\n  'pinchcancel': true,\n  'pinchin': true,\n  'pinchout': true,\n  // press\n  'press': true,\n  'pressup': true,\n  // rotate\n  'rotate': true,\n  'rotatestart': true,\n  'rotatemove': true,\n  'rotateend': true,\n  'rotatecancel': true,\n  // swipe\n  'swipe': true,\n  'swipeleft': true,\n  'swiperight': true,\n  'swipeup': true,\n  'swipedown': true,\n  // tap\n  'tap': true,\n  'doubletap': true\n};\n/**\n * DI token for providing [HammerJS](https://hammerjs.github.io/) support to Angular.\n * @see `HammerGestureConfig`\n *\n * @ngModule HammerModule\n * @publicApi\n */\n\nvar HAMMER_GESTURE_CONFIG = /*@__PURE__*/new InjectionToken('HammerGestureConfig');\n/**\n * Injection token used to provide a {@link HammerLoader} to Angular.\n *\n * @publicApi\n */\n\nvar HAMMER_LOADER = /*@__PURE__*/new InjectionToken('HammerLoader');\n\nvar HammerGestureConfig = /*@__PURE__*/function () {\n  var HammerGestureConfig = /*#__PURE__*/function () {\n    function HammerGestureConfig() {\n      _classCallCheck(this, HammerGestureConfig);\n\n      /**\n       * A set of supported event names for gestures to be used in Angular.\n       * Angular supports all built-in recognizers, as listed in\n       * [HammerJS documentation](https://hammerjs.github.io/).\n       */\n      this.events = [];\n      /**\n       * Maps gesture event names to a set of configuration options\n       * that specify overrides to the default values for specific properties.\n       *\n       * The key is a supported event name to be configured,\n       * and the options object contains a set of properties, with override values\n       * to be applied to the named recognizer event.\n       * For example, to disable recognition of the rotate event, specify\n       *  `{\"rotate\": {\"enable\": false}}`.\n       *\n       * Properties that are not present take the HammerJS default values.\n       * For information about which properties are supported for which events,\n       * and their allowed and default values, see\n       * [HammerJS documentation](https://hammerjs.github.io/).\n       *\n       */\n\n      this.overrides = {};\n    }\n    /**\n     * Creates a [HammerJS Manager](https://hammerjs.github.io/api/#hammermanager)\n     * and attaches it to a given HTML element.\n     * @param element The element that will recognize gestures.\n     * @returns A HammerJS event-manager object.\n     */\n\n\n    _createClass(HammerGestureConfig, [{\n      key: \"buildHammer\",\n      value: function buildHammer(element) {\n        var mc = new Hammer(element, this.options);\n        mc.get('pinch').set({\n          enable: true\n        });\n        mc.get('rotate').set({\n          enable: true\n        });\n\n        for (var eventName in this.overrides) {\n          mc.get(eventName).set(this.overrides[eventName]);\n        }\n\n        return mc;\n      }\n    }]);\n\n    return HammerGestureConfig;\n  }();\n\n  HammerGestureConfig.ɵfac = function HammerGestureConfig_Factory(t) {\n    return new (t || HammerGestureConfig)();\n  };\n\n  HammerGestureConfig.ɵprov =\n  /*@__PURE__*/\n\n  /*@__PURE__*/\n  ɵngcc0.ɵɵdefineInjectable({\n    token: HammerGestureConfig,\n    factory: HammerGestureConfig.ɵfac\n  });\n  return HammerGestureConfig;\n}();\n\nvar HammerGesturesPlugin = /*@__PURE__*/function () {\n  var HammerGesturesPlugin = /*#__PURE__*/function (_EventManagerPlugin2) {\n    _inherits(HammerGesturesPlugin, _EventManagerPlugin2);\n\n    var _super7 = _createSuper(HammerGesturesPlugin);\n\n    function HammerGesturesPlugin(doc, _config, console, loader) {\n      var _this10;\n\n      _classCallCheck(this, HammerGesturesPlugin);\n\n      _this10 = _super7.call(this, doc);\n      _this10._config = _config;\n      _this10.console = console;\n      _this10.loader = loader;\n      _this10._loaderPromise = null;\n      return _this10;\n    }\n\n    _createClass(HammerGesturesPlugin, [{\n      key: \"supports\",\n      value: function supports(eventName) {\n        if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {\n          return false;\n        }\n\n        if (!window.Hammer && !this.loader) {\n          if (typeof ngDevMode === 'undefined' || ngDevMode) {\n            this.console.warn(\"The \\\"\".concat(eventName, \"\\\" event cannot be bound because Hammer.JS is not \") + \"loaded and no custom loader has been specified.\");\n          }\n\n          return false;\n        }\n\n        return true;\n      }\n    }, {\n      key: \"addEventListener\",\n      value: function addEventListener(element, eventName, handler) {\n        var _this11 = this;\n\n        var zone = this.manager.getZone();\n        eventName = eventName.toLowerCase(); // If Hammer is not present but a loader is specified, we defer adding the event listener\n        // until Hammer is loaded.\n\n        if (!window.Hammer && this.loader) {\n          this._loaderPromise = this._loaderPromise || this.loader(); // This `addEventListener` method returns a function to remove the added listener.\n          // Until Hammer is loaded, the returned function needs to *cancel* the registration rather\n          // than remove anything.\n\n          var cancelRegistration = false;\n\n          var deregister = function deregister() {\n            cancelRegistration = true;\n          };\n\n          this._loaderPromise.then(function () {\n            // If Hammer isn't actually loaded when the custom loader resolves, give up.\n            if (!window.Hammer) {\n              if (typeof ngDevMode === 'undefined' || ngDevMode) {\n                _this11.console.warn(\"The custom HAMMER_LOADER completed, but Hammer.JS is not present.\");\n              }\n\n              deregister = function deregister() {};\n\n              return;\n            }\n\n            if (!cancelRegistration) {\n              // Now that Hammer is loaded and the listener is being loaded for real,\n              // the deregistration function changes from canceling registration to removal.\n              deregister = _this11.addEventListener(element, eventName, handler);\n            }\n          }).catch(function () {\n            if (typeof ngDevMode === 'undefined' || ngDevMode) {\n              _this11.console.warn(\"The \\\"\".concat(eventName, \"\\\" event cannot be bound because the custom \") + \"Hammer.JS loader failed.\");\n            }\n\n            deregister = function deregister() {};\n          }); // Return a function that *executes* `deregister` (and not `deregister` itself) so that we\n          // can change the behavior of `deregister` once the listener is added. Using a closure in\n          // this way allows us to avoid any additional data structures to track listener removal.\n\n\n          return function () {\n            deregister();\n          };\n        }\n\n        return zone.runOutsideAngular(function () {\n          // Creating the manager bind events, must be done outside of angular\n          var mc = _this11._config.buildHammer(element);\n\n          var callback = function callback(eventObj) {\n            zone.runGuarded(function () {\n              handler(eventObj);\n            });\n          };\n\n          mc.on(eventName, callback);\n          return function () {\n            mc.off(eventName, callback); // destroy mc to prevent memory leak\n\n            if (typeof mc.destroy === 'function') {\n              mc.destroy();\n            }\n          };\n        });\n      }\n    }, {\n      key: \"isCustomEvent\",\n      value: function isCustomEvent(eventName) {\n        return this._config.events.indexOf(eventName) > -1;\n      }\n    }]);\n\n    return HammerGesturesPlugin;\n  }(EventManagerPlugin);\n\n  HammerGesturesPlugin.ɵfac = function HammerGesturesPlugin_Factory(t) {\n    return new (t || HammerGesturesPlugin)(ɵngcc0.ɵɵinject(DOCUMENT), ɵngcc0.ɵɵinject(HAMMER_GESTURE_CONFIG), ɵngcc0.ɵɵinject(ɵngcc0.ɵConsole), ɵngcc0.ɵɵinject(HAMMER_LOADER, 8));\n  };\n\n  HammerGesturesPlugin.ɵprov =\n  /*@__PURE__*/\n\n  /*@__PURE__*/\n  ɵngcc0.ɵɵdefineInjectable({\n    token: HammerGesturesPlugin,\n    factory: HammerGesturesPlugin.ɵfac\n  });\n  return HammerGesturesPlugin;\n}();\n/**\n * In Ivy, support for Hammer gestures is optional, so applications must\n * import the `HammerModule` at root to turn on support. This means that\n * Hammer-specific code can be tree-shaken away if not needed.\n */\n\n\nvar HAMMER_PROVIDERS__POST_R3__ = [];\n/**\n * In View Engine, support for Hammer gestures is built-in by default.\n */\n\nvar HAMMER_PROVIDERS__PRE_R3__ = [{\n  provide: EVENT_MANAGER_PLUGINS,\n  useClass: HammerGesturesPlugin,\n  multi: true,\n  deps: [DOCUMENT, HAMMER_GESTURE_CONFIG, ɵConsole, [/*@__PURE__*/new Optional(), HAMMER_LOADER]]\n}, {\n  provide: HAMMER_GESTURE_CONFIG,\n  useClass: HammerGestureConfig,\n  deps: []\n}];\nvar HAMMER_PROVIDERS = HAMMER_PROVIDERS__POST_R3__;\n\nvar HammerModule = /*@__PURE__*/function () {\n  var HammerModule = /*#__PURE__*/_createClass(function HammerModule() {\n    _classCallCheck(this, HammerModule);\n  });\n\n  HammerModule.ɵfac = function HammerModule_Factory(t) {\n    return new (t || HammerModule)();\n  };\n\n  HammerModule.ɵmod =\n  /*@__PURE__*/\n\n  /*@__PURE__*/\n  ɵngcc0.ɵɵdefineNgModule({\n    type: HammerModule\n  });\n  HammerModule.ɵinj =\n  /*@__PURE__*/\n\n  /*@__PURE__*/\n  ɵngcc0.ɵɵdefineInjector({\n    providers: HAMMER_PROVIDERS__PRE_R3__\n  });\n  return HammerModule;\n}();\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Defines supported modifiers for key events.\n */\n\n\nvar MODIFIER_KEYS = ['alt', 'control', 'meta', 'shift'];\nvar DOM_KEY_LOCATION_NUMPAD = 3; // Map to convert some key or keyIdentifier values to what will be returned by getEventKey\n\nvar _keyMap = {\n  // The following values are here for cross-browser compatibility and to match the W3C standard\n  // cf https://www.w3.org/TR/DOM-Level-3-Events-key/\n  '\\b': 'Backspace',\n  '\\t': 'Tab',\n  '\\x7F': 'Delete',\n  '\\x1B': 'Escape',\n  'Del': 'Delete',\n  'Esc': 'Escape',\n  'Left': 'ArrowLeft',\n  'Right': 'ArrowRight',\n  'Up': 'ArrowUp',\n  'Down': 'ArrowDown',\n  'Menu': 'ContextMenu',\n  'Scroll': 'ScrollLock',\n  'Win': 'OS'\n}; // There is a bug in Chrome for numeric keypad keys:\n// https://code.google.com/p/chromium/issues/detail?id=155654\n// 1, 2, 3 ... are reported as A, B, C ...\n\nvar _chromeNumKeyPadMap = {\n  'A': '1',\n  'B': '2',\n  'C': '3',\n  'D': '4',\n  'E': '5',\n  'F': '6',\n  'G': '7',\n  'H': '8',\n  'I': '9',\n  'J': '*',\n  'K': '+',\n  'M': '-',\n  'N': '.',\n  'O': '/',\n  '\\x60': '0',\n  '\\x90': 'NumLock'\n};\n\nvar ɵ0$2 = function ɵ0$2(event) {\n  return event.altKey;\n},\n    ɵ1 = function ɵ1(event) {\n  return event.ctrlKey;\n},\n    ɵ2 = function ɵ2(event) {\n  return event.metaKey;\n},\n    ɵ3 = function ɵ3(event) {\n  return event.shiftKey;\n};\n/**\n * Retrieves modifiers from key-event objects.\n */\n\n\nvar MODIFIER_KEY_GETTERS = {\n  'alt': ɵ0$2,\n  'control': ɵ1,\n  'meta': ɵ2,\n  'shift': ɵ3\n};\n\nvar KeyEventsPlugin = /*@__PURE__*/function () {\n  var KeyEventsPlugin = /*#__PURE__*/function (_EventManagerPlugin3) {\n    _inherits(KeyEventsPlugin, _EventManagerPlugin3);\n\n    var _super8 = _createSuper(KeyEventsPlugin);\n\n    /**\n     * Initializes an instance of the browser plug-in.\n     * @param doc The document in which key events will be detected.\n     */\n    function KeyEventsPlugin(doc) {\n      _classCallCheck(this, KeyEventsPlugin);\n\n      return _super8.call(this, doc);\n    }\n    /**\n     * Reports whether a named key event is supported.\n     * @param eventName The event name to query.\n     * @return True if the named key event is supported.\n     */\n\n\n    _createClass(KeyEventsPlugin, [{\n      key: \"supports\",\n      value: function supports(eventName) {\n        return KeyEventsPlugin.parseEventName(eventName) != null;\n      }\n      /**\n       * Registers a handler for a specific element and key event.\n       * @param element The HTML element to receive event notifications.\n       * @param eventName The name of the key event to listen for.\n       * @param handler A function to call when the notification occurs. Receives the\n       * event object as an argument.\n       * @returns The key event that was registered.\n       */\n\n    }, {\n      key: \"addEventListener\",\n      value: function addEventListener(element, eventName, handler) {\n        var parsedEvent = KeyEventsPlugin.parseEventName(eventName);\n        var outsideHandler = KeyEventsPlugin.eventCallback(parsedEvent['fullKey'], handler, this.manager.getZone());\n        return this.manager.getZone().runOutsideAngular(function () {\n          return ɵgetDOM().onAndCancel(element, parsedEvent['domEventName'], outsideHandler);\n        });\n      }\n    }], [{\n      key: \"parseEventName\",\n      value: function parseEventName(eventName) {\n        var parts = eventName.toLowerCase().split('.');\n        var domEventName = parts.shift();\n\n        if (parts.length === 0 || !(domEventName === 'keydown' || domEventName === 'keyup')) {\n          return null;\n        }\n\n        var key = KeyEventsPlugin._normalizeKey(parts.pop());\n\n        var fullKey = '';\n        MODIFIER_KEYS.forEach(function (modifierName) {\n          var index = parts.indexOf(modifierName);\n\n          if (index > -1) {\n            parts.splice(index, 1);\n            fullKey += modifierName + '.';\n          }\n        });\n        fullKey += key;\n\n        if (parts.length != 0 || key.length === 0) {\n          // returning null instead of throwing to let another plugin process the event\n          return null;\n        } // NOTE: Please don't rewrite this as so, as it will break JSCompiler property renaming.\n        //       The code must remain in the `result['domEventName']` form.\n        // return {domEventName, fullKey};\n\n\n        var result = {};\n        result['domEventName'] = domEventName;\n        result['fullKey'] = fullKey;\n        return result;\n      }\n    }, {\n      key: \"getEventFullKey\",\n      value: function getEventFullKey(event) {\n        var fullKey = '';\n        var key = getEventKey(event);\n        key = key.toLowerCase();\n\n        if (key === ' ') {\n          key = 'space'; // for readability\n        } else if (key === '.') {\n          key = 'dot'; // because '.' is used as a separator in event names\n        }\n\n        MODIFIER_KEYS.forEach(function (modifierName) {\n          if (modifierName != key) {\n            var modifierGetter = MODIFIER_KEY_GETTERS[modifierName];\n\n            if (modifierGetter(event)) {\n              fullKey += modifierName + '.';\n            }\n          }\n        });\n        fullKey += key;\n        return fullKey;\n      }\n      /**\n       * Configures a handler callback for a key event.\n       * @param fullKey The event name that combines all simultaneous keystrokes.\n       * @param handler The function that responds to the key event.\n       * @param zone The zone in which the event occurred.\n       * @returns A callback function.\n       */\n\n    }, {\n      key: \"eventCallback\",\n      value: function eventCallback(fullKey, handler, zone) {\n        return function (event\n        /** TODO #9100 */\n        ) {\n          if (KeyEventsPlugin.getEventFullKey(event) === fullKey) {\n            zone.runGuarded(function () {\n              return handler(event);\n            });\n          }\n        };\n      }\n      /** @internal */\n\n    }, {\n      key: \"_normalizeKey\",\n      value: function _normalizeKey(keyName) {\n        // TODO: switch to a Map if the mapping grows too much\n        switch (keyName) {\n          case 'esc':\n            return 'escape';\n\n          default:\n            return keyName;\n        }\n      }\n    }]);\n\n    return KeyEventsPlugin;\n  }(EventManagerPlugin);\n\n  KeyEventsPlugin.ɵfac = function KeyEventsPlugin_Factory(t) {\n    return new (t || KeyEventsPlugin)(ɵngcc0.ɵɵinject(DOCUMENT));\n  };\n\n  KeyEventsPlugin.ɵprov =\n  /*@__PURE__*/\n\n  /*@__PURE__*/\n  ɵngcc0.ɵɵdefineInjectable({\n    token: KeyEventsPlugin,\n    factory: KeyEventsPlugin.ɵfac\n  });\n  return KeyEventsPlugin;\n}();\n\nfunction getEventKey(event) {\n  var key = event.key;\n\n  if (key == null) {\n    key = event.keyIdentifier; // keyIdentifier is defined in the old draft of DOM Level 3 Events implemented by Chrome and\n    // Safari cf\n    // https://www.w3.org/TR/2007/WD-DOM-Level-3-Events-20071221/events.html#Events-KeyboardEvents-Interfaces\n\n    if (key == null) {\n      return 'Unidentified';\n    }\n\n    if (key.startsWith('U+')) {\n      key = String.fromCharCode(parseInt(key.substring(2), 16));\n\n      if (event.location === DOM_KEY_LOCATION_NUMPAD && _chromeNumKeyPadMap.hasOwnProperty(key)) {\n        // There is a bug in Chrome for numeric keypad keys:\n        // https://code.google.com/p/chromium/issues/detail?id=155654\n        // 1, 2, 3 ... are reported as A, B, C ...\n        key = _chromeNumKeyPadMap[key];\n      }\n    }\n  }\n\n  return _keyMap[key] || key;\n}\n\nvar DomSanitizer = /*@__PURE__*/function () {\n  var DomSanitizer = /*#__PURE__*/_createClass(function DomSanitizer() {\n    _classCallCheck(this, DomSanitizer);\n  });\n\n  DomSanitizer.ɵfac = function DomSanitizer_Factory(t) {\n    return new (t || DomSanitizer)();\n  };\n\n  DomSanitizer.ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    factory: function DomSanitizer_Factory() {\n      return ɵɵinject(DomSanitizerImpl);\n    },\n    token: DomSanitizer,\n    providedIn: \"root\"\n  });\n  return DomSanitizer;\n}();\n\nfunction domSanitizerImplFactory(injector) {\n  return new DomSanitizerImpl(injector.get(DOCUMENT));\n}\n\nvar DomSanitizerImpl = /*@__PURE__*/function () {\n  var DomSanitizerImpl = /*#__PURE__*/function (_DomSanitizer) {\n    _inherits(DomSanitizerImpl, _DomSanitizer);\n\n    var _super9 = _createSuper(DomSanitizerImpl);\n\n    function DomSanitizerImpl(_doc) {\n      var _this12;\n\n      _classCallCheck(this, DomSanitizerImpl);\n\n      _this12 = _super9.call(this);\n      _this12._doc = _doc;\n      return _this12;\n    }\n\n    _createClass(DomSanitizerImpl, [{\n      key: \"sanitize\",\n      value: function sanitize(ctx, value) {\n        if (value == null) return null;\n\n        switch (ctx) {\n          case SecurityContext.NONE:\n            return value;\n\n          case SecurityContext.HTML:\n            if (ɵallowSanitizationBypassAndThrow(value, \"HTML\"\n            /* Html */\n            )) {\n              return ɵunwrapSafeValue(value);\n            }\n\n            return ɵ_sanitizeHtml(this._doc, String(value)).toString();\n\n          case SecurityContext.STYLE:\n            if (ɵallowSanitizationBypassAndThrow(value, \"Style\"\n            /* Style */\n            )) {\n              return ɵunwrapSafeValue(value);\n            }\n\n            return value;\n\n          case SecurityContext.SCRIPT:\n            if (ɵallowSanitizationBypassAndThrow(value, \"Script\"\n            /* Script */\n            )) {\n              return ɵunwrapSafeValue(value);\n            }\n\n            throw new Error('unsafe value used in a script context');\n\n          case SecurityContext.URL:\n            var type = ɵgetSanitizationBypassType(value);\n\n            if (ɵallowSanitizationBypassAndThrow(value, \"URL\"\n            /* Url */\n            )) {\n              return ɵunwrapSafeValue(value);\n            }\n\n            return ɵ_sanitizeUrl(String(value));\n\n          case SecurityContext.RESOURCE_URL:\n            if (ɵallowSanitizationBypassAndThrow(value, \"ResourceURL\"\n            /* ResourceUrl */\n            )) {\n              return ɵunwrapSafeValue(value);\n            }\n\n            throw new Error('unsafe value used in a resource URL context (see https://g.co/ng/security#xss)');\n\n          default:\n            throw new Error(\"Unexpected SecurityContext \".concat(ctx, \" (see https://g.co/ng/security#xss)\"));\n        }\n      }\n    }, {\n      key: \"bypassSecurityTrustHtml\",\n      value: function bypassSecurityTrustHtml(value) {\n        return ɵbypassSanitizationTrustHtml(value);\n      }\n    }, {\n      key: \"bypassSecurityTrustStyle\",\n      value: function bypassSecurityTrustStyle(value) {\n        return ɵbypassSanitizationTrustStyle(value);\n      }\n    }, {\n      key: \"bypassSecurityTrustScript\",\n      value: function bypassSecurityTrustScript(value) {\n        return ɵbypassSanitizationTrustScript(value);\n      }\n    }, {\n      key: \"bypassSecurityTrustUrl\",\n      value: function bypassSecurityTrustUrl(value) {\n        return ɵbypassSanitizationTrustUrl(value);\n      }\n    }, {\n      key: \"bypassSecurityTrustResourceUrl\",\n      value: function bypassSecurityTrustResourceUrl(value) {\n        return ɵbypassSanitizationTrustResourceUrl(value);\n      }\n    }]);\n\n    return DomSanitizerImpl;\n  }(DomSanitizer);\n\n  DomSanitizerImpl.ɵfac = function DomSanitizerImpl_Factory(t) {\n    return new (t || DomSanitizerImpl)(ɵngcc0.ɵɵinject(DOCUMENT));\n  };\n\n  DomSanitizerImpl.ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    factory: function DomSanitizerImpl_Factory() {\n      return domSanitizerImplFactory(ɵɵinject(INJECTOR));\n    },\n    token: DomSanitizerImpl,\n    providedIn: \"root\"\n  });\n  return DomSanitizerImpl;\n}();\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nfunction initDomAdapter() {\n  BrowserDomAdapter.makeCurrent();\n  BrowserGetTestability.init();\n}\n\nfunction errorHandler() {\n  return new ErrorHandler();\n}\n\nfunction _document() {\n  // Tell ivy about the global document\n  ɵsetDocument(document);\n  return document;\n}\n\nvar ɵ0$3 = ɵPLATFORM_BROWSER_ID;\nvar INTERNAL_BROWSER_PLATFORM_PROVIDERS = [{\n  provide: PLATFORM_ID,\n  useValue: ɵ0$3\n}, {\n  provide: PLATFORM_INITIALIZER,\n  useValue: initDomAdapter,\n  multi: true\n}, {\n  provide: DOCUMENT,\n  useFactory: _document,\n  deps: []\n}];\nvar BROWSER_SANITIZATION_PROVIDERS__PRE_R3__ = [{\n  provide: Sanitizer,\n  useExisting: DomSanitizer\n}, {\n  provide: DomSanitizer,\n  useClass: DomSanitizerImpl,\n  deps: [DOCUMENT]\n}];\nvar BROWSER_SANITIZATION_PROVIDERS__POST_R3__ = [];\n/**\n * @security Replacing built-in sanitization providers exposes the application to XSS risks.\n * Attacker-controlled data introduced by an unsanitized provider could expose your\n * application to XSS risks. For more detail, see the [Security Guide](https://g.co/ng/security).\n * @publicApi\n */\n\nvar BROWSER_SANITIZATION_PROVIDERS = BROWSER_SANITIZATION_PROVIDERS__POST_R3__;\n/**\n * A factory function that returns a `PlatformRef` instance associated with browser service\n * providers.\n *\n * @publicApi\n */\n\nvar platformBrowser = /*@__PURE__*/createPlatformFactory(platformCore, 'browser', INTERNAL_BROWSER_PLATFORM_PROVIDERS);\nvar BROWSER_MODULE_PROVIDERS = [BROWSER_SANITIZATION_PROVIDERS, {\n  provide: ɵINJECTOR_SCOPE,\n  useValue: 'root'\n}, {\n  provide: ErrorHandler,\n  useFactory: errorHandler,\n  deps: []\n}, {\n  provide: EVENT_MANAGER_PLUGINS,\n  useClass: DomEventsPlugin,\n  multi: true,\n  deps: [DOCUMENT, NgZone, PLATFORM_ID]\n}, {\n  provide: EVENT_MANAGER_PLUGINS,\n  useClass: KeyEventsPlugin,\n  multi: true,\n  deps: [DOCUMENT]\n}, HAMMER_PROVIDERS, {\n  provide: DomRendererFactory2,\n  useClass: DomRendererFactory2,\n  deps: [EventManager, DomSharedStylesHost, APP_ID]\n}, {\n  provide: RendererFactory2,\n  useExisting: DomRendererFactory2\n}, {\n  provide: SharedStylesHost,\n  useExisting: DomSharedStylesHost\n}, {\n  provide: DomSharedStylesHost,\n  useClass: DomSharedStylesHost,\n  deps: [DOCUMENT]\n}, {\n  provide: Testability,\n  useClass: Testability,\n  deps: [NgZone]\n}, {\n  provide: EventManager,\n  useClass: EventManager,\n  deps: [EVENT_MANAGER_PLUGINS, NgZone]\n}, {\n  provide: XhrFactory,\n  useClass: BrowserXhr,\n  deps: []\n}, ELEMENT_PROBE_PROVIDERS];\n\nvar BrowserModule = /*@__PURE__*/function () {\n  var BrowserModule = /*#__PURE__*/function () {\n    function BrowserModule(parentModule) {\n      _classCallCheck(this, BrowserModule);\n\n      if (parentModule) {\n        throw new Error(\"BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.\");\n      }\n    }\n    /**\n     * Configures a browser-based app to transition from a server-rendered app, if\n     * one is present on the page.\n     *\n     * @param params An object containing an identifier for the app to transition.\n     * The ID must match between the client and server versions of the app.\n     * @returns The reconfigured `BrowserModule` to import into the app's root `AppModule`.\n     */\n\n\n    _createClass(BrowserModule, null, [{\n      key: \"withServerTransition\",\n      value: function withServerTransition(params) {\n        return {\n          ngModule: BrowserModule,\n          providers: [{\n            provide: APP_ID,\n            useValue: params.appId\n          }, {\n            provide: TRANSITION_ID,\n            useExisting: APP_ID\n          }, SERVER_TRANSITION_PROVIDERS]\n        };\n      }\n    }]);\n\n    return BrowserModule;\n  }();\n\n  BrowserModule.ɵfac = function BrowserModule_Factory(t) {\n    return new (t || BrowserModule)(ɵngcc0.ɵɵinject(BrowserModule, 12));\n  };\n\n  BrowserModule.ɵmod =\n  /*@__PURE__*/\n\n  /*@__PURE__*/\n  ɵngcc0.ɵɵdefineNgModule({\n    type: BrowserModule\n  });\n  BrowserModule.ɵinj =\n  /*@__PURE__*/\n\n  /*@__PURE__*/\n  ɵngcc0.ɵɵdefineInjector({\n    providers: BROWSER_MODULE_PROVIDERS,\n    imports: [CommonModule, ApplicationModule]\n  });\n  return BrowserModule;\n}();\n/*@__PURE__*/\n\n\n(function () {\n  (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(BrowserModule, {\n    exports: function exports() {\n      return [CommonModule, ApplicationModule];\n    }\n  });\n})();\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Factory to create a `Meta` service instance for the current DOM document.\n */\n\n\nfunction createMeta() {\n  return new Meta(ɵɵinject(DOCUMENT));\n}\n\nvar Meta = /*@__PURE__*/function () {\n  var Meta = /*#__PURE__*/function () {\n    function Meta(_doc) {\n      _classCallCheck(this, Meta);\n\n      this._doc = _doc;\n      this._dom = ɵgetDOM();\n    }\n    /**\n     * Retrieves or creates a specific `<meta>` tag element in the current HTML document.\n     * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute\n     * values in the provided tag definition, and verifies that all other attribute values are equal.\n     * If an existing element is found, it is returned and is not modified in any way.\n     * @param tag The definition of a `<meta>` element to match or create.\n     * @param forceCreation True to create a new element without checking whether one already exists.\n     * @returns The existing element with the same attributes and values if found,\n     * the new element if no match is found, or `null` if the tag parameter is not defined.\n     */\n\n\n    _createClass(Meta, [{\n      key: \"addTag\",\n      value: function addTag(tag) {\n        var forceCreation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n        if (!tag) return null;\n        return this._getOrCreateElement(tag, forceCreation);\n      }\n      /**\n       * Retrieves or creates a set of `<meta>` tag elements in the current HTML document.\n       * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute\n       * values in the provided tag definition, and verifies that all other attribute values are equal.\n       * @param tags An array of tag definitions to match or create.\n       * @param forceCreation True to create new elements without checking whether they already exist.\n       * @returns The matching elements if found, or the new elements.\n       */\n\n    }, {\n      key: \"addTags\",\n      value: function addTags(tags) {\n        var _this13 = this;\n\n        var forceCreation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n        if (!tags) return [];\n        return tags.reduce(function (result, tag) {\n          if (tag) {\n            result.push(_this13._getOrCreateElement(tag, forceCreation));\n          }\n\n          return result;\n        }, []);\n      }\n      /**\n       * Retrieves a `<meta>` tag element in the current HTML document.\n       * @param attrSelector The tag attribute and value to match against, in the format\n       * `\"tag_attribute='value string'\"`.\n       * @returns The matching element, if any.\n       */\n\n    }, {\n      key: \"getTag\",\n      value: function getTag(attrSelector) {\n        if (!attrSelector) return null;\n        return this._doc.querySelector(\"meta[\".concat(attrSelector, \"]\")) || null;\n      }\n      /**\n       * Retrieves a set of `<meta>` tag elements in the current HTML document.\n       * @param attrSelector The tag attribute and value to match against, in the format\n       * `\"tag_attribute='value string'\"`.\n       * @returns The matching elements, if any.\n       */\n\n    }, {\n      key: \"getTags\",\n      value: function getTags(attrSelector) {\n        if (!attrSelector) return [];\n\n        var list\n        /*NodeList*/\n        = this._doc.querySelectorAll(\"meta[\".concat(attrSelector, \"]\"));\n\n        return list ? [].slice.call(list) : [];\n      }\n      /**\n       * Modifies an existing `<meta>` tag element in the current HTML document.\n       * @param tag The tag description with which to replace the existing tag content.\n       * @param selector A tag attribute and value to match against, to identify\n       * an existing tag. A string in the format `\"tag_attribute=`value string`\"`.\n       * If not supplied, matches a tag with the same `name` or `property` attribute value as the\n       * replacement tag.\n       * @return The modified element.\n       */\n\n    }, {\n      key: \"updateTag\",\n      value: function updateTag(tag, selector) {\n        if (!tag) return null;\n        selector = selector || this._parseSelector(tag);\n        var meta = this.getTag(selector);\n\n        if (meta) {\n          return this._setMetaElementAttributes(tag, meta);\n        }\n\n        return this._getOrCreateElement(tag, true);\n      }\n      /**\n       * Removes an existing `<meta>` tag element from the current HTML document.\n       * @param attrSelector A tag attribute and value to match against, to identify\n       * an existing tag. A string in the format `\"tag_attribute=`value string`\"`.\n       */\n\n    }, {\n      key: \"removeTag\",\n      value: function removeTag(attrSelector) {\n        this.removeTagElement(this.getTag(attrSelector));\n      }\n      /**\n       * Removes an existing `<meta>` tag element from the current HTML document.\n       * @param meta The tag definition to match against to identify an existing tag.\n       */\n\n    }, {\n      key: \"removeTagElement\",\n      value: function removeTagElement(meta) {\n        if (meta) {\n          this._dom.remove(meta);\n        }\n      }\n    }, {\n      key: \"_getOrCreateElement\",\n      value: function _getOrCreateElement(meta) {\n        var _this14 = this;\n\n        var forceCreation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n        if (!forceCreation) {\n          var selector = this._parseSelector(meta); // It's allowed to have multiple elements with the same name so it's not enough to\n          // just check that element with the same name already present on the page. We also need to\n          // check if element has tag attributes\n\n\n          var elem = this.getTags(selector).filter(function (elem) {\n            return _this14._containsAttributes(meta, elem);\n          })[0];\n          if (elem !== undefined) return elem;\n        }\n\n        var element = this._dom.createElement('meta');\n\n        this._setMetaElementAttributes(meta, element);\n\n        var head = this._doc.getElementsByTagName('head')[0];\n\n        head.appendChild(element);\n        return element;\n      }\n    }, {\n      key: \"_setMetaElementAttributes\",\n      value: function _setMetaElementAttributes(tag, el) {\n        var _this15 = this;\n\n        Object.keys(tag).forEach(function (prop) {\n          return el.setAttribute(_this15._getMetaKeyMap(prop), tag[prop]);\n        });\n        return el;\n      }\n    }, {\n      key: \"_parseSelector\",\n      value: function _parseSelector(tag) {\n        var attr = tag.name ? 'name' : 'property';\n        return \"\".concat(attr, \"=\\\"\").concat(tag[attr], \"\\\"\");\n      }\n    }, {\n      key: \"_containsAttributes\",\n      value: function _containsAttributes(tag, elem) {\n        var _this16 = this;\n\n        return Object.keys(tag).every(function (key) {\n          return elem.getAttribute(_this16._getMetaKeyMap(key)) === tag[key];\n        });\n      }\n    }, {\n      key: \"_getMetaKeyMap\",\n      value: function _getMetaKeyMap(prop) {\n        return META_KEYS_MAP[prop] || prop;\n      }\n    }]);\n\n    return Meta;\n  }();\n\n  Meta.ɵfac = function Meta_Factory(t) {\n    return new (t || Meta)(ɵngcc0.ɵɵinject(DOCUMENT));\n  };\n\n  Meta.ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    factory: createMeta,\n    token: Meta,\n    providedIn: \"root\"\n  });\n  return Meta;\n}();\n/**\n * Mapping for MetaDefinition properties with their correct meta attribute names\n */\n\n\nvar META_KEYS_MAP = {\n  httpEquiv: 'http-equiv'\n};\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Factory to create Title service.\n */\n\nfunction createTitle() {\n  return new Title(ɵɵinject(DOCUMENT));\n}\n\nvar Title = /*@__PURE__*/function () {\n  var Title = /*#__PURE__*/function () {\n    function Title(_doc) {\n      _classCallCheck(this, Title);\n\n      this._doc = _doc;\n    }\n    /**\n     * Get the title of the current HTML document.\n     */\n\n\n    _createClass(Title, [{\n      key: \"getTitle\",\n      value: function getTitle() {\n        return this._doc.title;\n      }\n      /**\n       * Set the title of the current HTML document.\n       * @param newTitle\n       */\n\n    }, {\n      key: \"setTitle\",\n      value: function setTitle(newTitle) {\n        this._doc.title = newTitle || '';\n      }\n    }]);\n\n    return Title;\n  }();\n\n  Title.ɵfac = function Title_Factory(t) {\n    return new (t || Title)(ɵngcc0.ɵɵinject(DOCUMENT));\n  };\n\n  Title.ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    factory: createTitle,\n    token: Title,\n    providedIn: \"root\"\n  });\n  return Title;\n}();\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nvar win = typeof window !== 'undefined' && window || {};\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nvar ChangeDetectionPerfRecord = /*#__PURE__*/_createClass(function ChangeDetectionPerfRecord(msPerTick, numTicks) {\n  _classCallCheck(this, ChangeDetectionPerfRecord);\n\n  this.msPerTick = msPerTick;\n  this.numTicks = numTicks;\n});\n/**\n * Entry point for all Angular profiling-related debug tools. This object\n * corresponds to the `ng.profiler` in the dev console.\n */\n\n\nvar AngularProfiler = /*#__PURE__*/function () {\n  function AngularProfiler(ref) {\n    _classCallCheck(this, AngularProfiler);\n\n    this.appRef = ref.injector.get(ApplicationRef);\n  } // tslint:disable:no-console\n\n  /**\n   * Exercises change detection in a loop and then prints the average amount of\n   * time in milliseconds how long a single round of change detection takes for\n   * the current state of the UI. It runs a minimum of 5 rounds for a minimum\n   * of 500 milliseconds.\n   *\n   * Optionally, a user may pass a `config` parameter containing a map of\n   * options. Supported options are:\n   *\n   * `record` (boolean) - causes the profiler to record a CPU profile while\n   * it exercises the change detector. Example:\n   *\n   * ```\n   * ng.profiler.timeChangeDetection({record: true})\n   * ```\n   */\n\n\n  _createClass(AngularProfiler, [{\n    key: \"timeChangeDetection\",\n    value: function timeChangeDetection(config) {\n      var record = config && config['record'];\n      var profileName = 'Change Detection'; // Profiler is not available in Android browsers without dev tools opened\n\n      var isProfilerAvailable = win.console.profile != null;\n\n      if (record && isProfilerAvailable) {\n        win.console.profile(profileName);\n      }\n\n      var start = performanceNow();\n      var numTicks = 0;\n\n      while (numTicks < 5 || performanceNow() - start < 500) {\n        this.appRef.tick();\n        numTicks++;\n      }\n\n      var end = performanceNow();\n\n      if (record && isProfilerAvailable) {\n        win.console.profileEnd(profileName);\n      }\n\n      var msPerTick = (end - start) / numTicks;\n      win.console.log(\"ran \".concat(numTicks, \" change detection cycles\"));\n      win.console.log(\"\".concat(msPerTick.toFixed(2), \" ms per check\"));\n      return new ChangeDetectionPerfRecord(msPerTick, numTicks);\n    }\n  }]);\n\n  return AngularProfiler;\n}();\n\nfunction performanceNow() {\n  return win.performance && win.performance.now ? win.performance.now() : new Date().getTime();\n}\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nvar PROFILER_GLOBAL_NAME = 'profiler';\n/**\n * Enabled Angular debug tools that are accessible via your browser's\n * developer console.\n *\n * Usage:\n *\n * 1. Open developer console (e.g. in Chrome Ctrl + Shift + j)\n * 1. Type `ng.` (usually the console will show auto-complete suggestion)\n * 1. Try the change detection profiler `ng.profiler.timeChangeDetection()`\n *    then hit Enter.\n *\n * @publicApi\n */\n\nfunction enableDebugTools(ref) {\n  exportNgVar(PROFILER_GLOBAL_NAME, new AngularProfiler(ref));\n  return ref;\n}\n/**\n * Disables Angular tools.\n *\n * @publicApi\n */\n\n\nfunction disableDebugTools() {\n  exportNgVar(PROFILER_GLOBAL_NAME, null);\n}\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nfunction escapeHtml(text) {\n  var escapedText = {\n    '&': '&a;',\n    '\"': '&q;',\n    '\\'': '&s;',\n    '<': '&l;',\n    '>': '&g;'\n  };\n  return text.replace(/[&\"'<>]/g, function (s) {\n    return escapedText[s];\n  });\n}\n\nfunction unescapeHtml(text) {\n  var unescapedText = {\n    '&a;': '&',\n    '&q;': '\"',\n    '&s;': '\\'',\n    '&l;': '<',\n    '&g;': '>'\n  };\n  return text.replace(/&[^;]+;/g, function (s) {\n    return unescapedText[s];\n  });\n}\n/**\n * Create a `StateKey<T>` that can be used to store value of type T with `TransferState`.\n *\n * Example:\n *\n * ```\n * const COUNTER_KEY = makeStateKey<number>('counter');\n * let value = 10;\n *\n * transferState.set(COUNTER_KEY, value);\n * ```\n *\n * @publicApi\n */\n\n\nfunction makeStateKey(key) {\n  return key;\n}\n\nvar TransferState = /*@__PURE__*/function () {\n  var TransferState = /*#__PURE__*/function () {\n    function TransferState() {\n      _classCallCheck(this, TransferState);\n\n      this.store = {};\n      this.onSerializeCallbacks = {};\n    }\n    /** @internal */\n\n\n    _createClass(TransferState, [{\n      key: \"get\",\n      value:\n      /**\n       * Get the value corresponding to a key. Return `defaultValue` if key is not found.\n       */\n      function get(key, defaultValue) {\n        return this.store[key] !== undefined ? this.store[key] : defaultValue;\n      }\n      /**\n       * Set the value corresponding to a key.\n       */\n\n    }, {\n      key: \"set\",\n      value: function set(key, value) {\n        this.store[key] = value;\n      }\n      /**\n       * Remove a key from the store.\n       */\n\n    }, {\n      key: \"remove\",\n      value: function remove(key) {\n        delete this.store[key];\n      }\n      /**\n       * Test whether a key exists in the store.\n       */\n\n    }, {\n      key: \"hasKey\",\n      value: function hasKey(key) {\n        return this.store.hasOwnProperty(key);\n      }\n      /**\n       * Register a callback to provide the value for a key when `toJson` is called.\n       */\n\n    }, {\n      key: \"onSerialize\",\n      value: function onSerialize(key, callback) {\n        this.onSerializeCallbacks[key] = callback;\n      }\n      /**\n       * Serialize the current state of the store to JSON.\n       */\n\n    }, {\n      key: \"toJson\",\n      value: function toJson() {\n        // Call the onSerialize callbacks and put those values into the store.\n        for (var key in this.onSerializeCallbacks) {\n          if (this.onSerializeCallbacks.hasOwnProperty(key)) {\n            try {\n              this.store[key] = this.onSerializeCallbacks[key]();\n            } catch (e) {\n              console.warn('Exception in onSerialize callback: ', e);\n            }\n          }\n        }\n\n        return JSON.stringify(this.store);\n      }\n    }], [{\n      key: \"init\",\n      value: function init(initState) {\n        var transferState = new TransferState();\n        transferState.store = initState;\n        return transferState;\n      }\n    }]);\n\n    return TransferState;\n  }();\n\n  TransferState.ɵfac = function TransferState_Factory(t) {\n    return new (t || TransferState)();\n  };\n\n  TransferState.ɵprov =\n  /*@__PURE__*/\n\n  /*@__PURE__*/\n  ɵngcc0.ɵɵdefineInjectable({\n    token: TransferState,\n    factory: TransferState.ɵfac\n  });\n  return TransferState;\n}();\n\nfunction initTransferState(doc, appId) {\n  // Locate the script tag with the JSON data transferred from the server.\n  // The id of the script tag is set to the Angular appId + 'state'.\n  var script = doc.getElementById(appId + '-state');\n  var initialState = {};\n\n  if (script && script.textContent) {\n    try {\n      // Avoid using any here as it triggers lint errors in google3 (any is not allowed).\n      initialState = JSON.parse(unescapeHtml(script.textContent));\n    } catch (e) {\n      console.warn('Exception while restoring TransferState for app ' + appId, e);\n    }\n  }\n\n  return TransferState.init(initialState);\n}\n\nvar BrowserTransferStateModule = /*@__PURE__*/function () {\n  var BrowserTransferStateModule = /*#__PURE__*/_createClass(function BrowserTransferStateModule() {\n    _classCallCheck(this, BrowserTransferStateModule);\n  });\n\n  BrowserTransferStateModule.ɵfac = function BrowserTransferStateModule_Factory(t) {\n    return new (t || BrowserTransferStateModule)();\n  };\n\n  BrowserTransferStateModule.ɵmod =\n  /*@__PURE__*/\n\n  /*@__PURE__*/\n  ɵngcc0.ɵɵdefineNgModule({\n    type: BrowserTransferStateModule\n  });\n  BrowserTransferStateModule.ɵinj =\n  /*@__PURE__*/\n\n  /*@__PURE__*/\n  ɵngcc0.ɵɵdefineInjector({\n    providers: [{\n      provide: TransferState,\n      useFactory: initTransferState,\n      deps: [DOCUMENT, APP_ID]\n    }]\n  });\n  return BrowserTransferStateModule;\n}();\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Predicates for use with {@link DebugElement}'s query functions.\n *\n * @publicApi\n */\n\n\nvar By = /*#__PURE__*/function () {\n  function By() {\n    _classCallCheck(this, By);\n  }\n\n  _createClass(By, null, [{\n    key: \"all\",\n    value:\n    /**\n     * Match all nodes.\n     *\n     * @usageNotes\n     * ### Example\n     *\n     * {@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}\n     */\n    function all() {\n      return function () {\n        return true;\n      };\n    }\n    /**\n     * Match elements by the given CSS selector.\n     *\n     * @usageNotes\n     * ### Example\n     *\n     * {@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}\n     */\n\n  }, {\n    key: \"css\",\n    value: function css(selector) {\n      return function (debugElement) {\n        return debugElement.nativeElement != null ? elementMatches(debugElement.nativeElement, selector) : false;\n      };\n    }\n    /**\n     * Match nodes that have the given directive present.\n     *\n     * @usageNotes\n     * ### Example\n     *\n     * {@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}\n     */\n\n  }, {\n    key: \"directive\",\n    value: function directive(type) {\n      return function (debugNode) {\n        return debugNode.providerTokens.indexOf(type) !== -1;\n      };\n    }\n  }]);\n\n  return By;\n}();\n\nfunction elementMatches(n, selector) {\n  if (ɵgetDOM().isElementNode(n)) {\n    return n.matches && n.matches(selector) || n.msMatchesSelector && n.msMatchesSelector(selector) || n.webkitMatchesSelector && n.webkitMatchesSelector(selector);\n  }\n\n  return false;\n}\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @publicApi\n */\n\n\nvar VERSION = /*@__PURE__*/new Version('12.2.16');\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// This file only reexports content of the `src` folder. Keep it that way.\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BrowserModule, BrowserTransferStateModule, By, DomSanitizer, EVENT_MANAGER_PLUGINS, EventManager, HAMMER_GESTURE_CONFIG, HAMMER_LOADER, HammerGestureConfig, HammerModule, Meta, Title, TransferState, VERSION, disableDebugTools, enableDebugTools, makeStateKey, platformBrowser, BROWSER_SANITIZATION_PROVIDERS as ɵBROWSER_SANITIZATION_PROVIDERS, BROWSER_SANITIZATION_PROVIDERS__POST_R3__ as ɵBROWSER_SANITIZATION_PROVIDERS__POST_R3__, BrowserDomAdapter as ɵBrowserDomAdapter, BrowserGetTestability as ɵBrowserGetTestability, DomEventsPlugin as ɵDomEventsPlugin, DomRendererFactory2 as ɵDomRendererFactory2, DomSanitizerImpl as ɵDomSanitizerImpl, DomSharedStylesHost as ɵDomSharedStylesHost, ELEMENT_PROBE_PROVIDERS as ɵELEMENT_PROBE_PROVIDERS, ELEMENT_PROBE_PROVIDERS__POST_R3__ as ɵELEMENT_PROBE_PROVIDERS__POST_R3__, HAMMER_PROVIDERS__POST_R3__ as ɵHAMMER_PROVIDERS__POST_R3__, HammerGesturesPlugin as ɵHammerGesturesPlugin, INTERNAL_BROWSER_PLATFORM_PROVIDERS as ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS, KeyEventsPlugin as ɵKeyEventsPlugin, NAMESPACE_URIS as ɵNAMESPACE_URIS, SharedStylesHost as ɵSharedStylesHost, TRANSITION_ID as ɵTRANSITION_ID, errorHandler as ɵangular_packages_platform_browser_platform_browser_a, _document as ɵangular_packages_platform_browser_platform_browser_b, BROWSER_MODULE_PROVIDERS as ɵangular_packages_platform_browser_platform_browser_c, createMeta as ɵangular_packages_platform_browser_platform_browser_d, createTitle as ɵangular_packages_platform_browser_platform_browser_e, initTransferState as ɵangular_packages_platform_browser_platform_browser_f, EventManagerPlugin as ɵangular_packages_platform_browser_platform_browser_g, HAMMER_PROVIDERS__PRE_R3__ as ɵangular_packages_platform_browser_platform_browser_h, HAMMER_PROVIDERS as ɵangular_packages_platform_browser_platform_browser_i, domSanitizerImplFactory as ɵangular_packages_platform_browser_platform_browser_j, appInitializerFactory as ɵangular_packages_platform_browser_platform_browser_k, SERVER_TRANSITION_PROVIDERS as ɵangular_packages_platform_browser_platform_browser_l, _createNgProbeR2 as ɵangular_packages_platform_browser_platform_browser_m, ELEMENT_PROBE_PROVIDERS__PRE_R3__ as ɵangular_packages_platform_browser_platform_browser_n, BrowserXhr as ɵangular_packages_platform_browser_platform_browser_o, GenericBrowserDomAdapter as ɵangular_packages_platform_browser_platform_browser_p, escapeHtml as ɵescapeHtml, flattenStyles as ɵflattenStyles, initDomAdapter as ɵinitDomAdapter, shimContentAttribute as ɵshimContentAttribute, shimHostAttribute as ɵshimHostAttribute }; //# sourceMappingURL=platform-browser.js.map","map":null,"metadata":{},"sourceType":"module"}