{"version":3,"sources":["platform-browser.umd.js"],"names":["global","factory","exports","module","require","define","amd","ng","platformBrowser","common","core","this","_angular_common","_angular_core","__extends","d","b","__","constructor","extendStatics","prototype","Object","create","getDOM","_DOM","setRootDomAdapter","adapter","getBaseElementHref","baseElement","document","querySelector","getAttribute","relativePath","url","urlParsingNode","createElement","setAttribute","pathname","charAt","supportsState","window","history","pushState","appInitializerFactory","transitionId","injector","get","ApplicationInitStatus","donePromise","then","dom","Array","slice","apply","querySelectorAll","filter","el","forEach","remove","exportNgVar","name","value","COMPILED","ɵglobal","inspectNativeElement","element","getDebugNode","_createNgProbe","coreTokens","INSPECT_GLOBAL_NAME","CORE_TOKENS_GLOBAL_NAME","__assign","CORE_TOKENS","_ngProbeTokensToMap","tokens","reduce","prev","t","token","shimContentAttribute","componentShortId","CONTENT_ATTR","replace","COMPONENT_REGEX","shimHostAttribute","HOST_ATTR","flattenStyles","compId","styles","target","i","length","style","isArray","push","decoratePreventDefault","eventHandler","event","preventDefault","returnValue","checkNoSyntheticProp","nameKind","charCodeAt","AT_CHARCODE","Error","isDOMParserAvailable","DOMParser","e","sanitizeUrl","String","match","SAFE_URL_PATTERN","DATA_URL_PATTERN","isDevMode","log","sanitizeSrcset","srcset","split","map","trim","join","tagSet","tags","res","_i","_a","merge","sets","arguments","sets_1","s","v","hasOwnProperty","encodeEntities","SURROGATE_PAIR_REGEXP","NON_ALPHANUMERIC_REGEXP","sanitizeHtml","defaultDoc","unsafeHtmlInput","DOM","inertBodyElement","inertBodyHelper","InertBodyHelper","unsafeHtml","getInertBodyElement","mXSSAttempts","parsedHtml","getInnerHTML","sanitizer","SanitizingHtmlSerializer","safeHtml","sanitizeChildren","getTemplateContent","sanitizedSomething","parent_1","childNodesAsList","child","removeChild","hasBalancedQuotes","outsideSingle","outsideDouble","c","sanitizeStyle","urlMatch","URL_RE","SAFE_STYLE_VALUE","initDomAdapter","BrowserDomAdapter","makeCurrent","BrowserGetTestability","init","errorHandler","ErrorHandler","_document","enableDebugTools","ref","PROFILER_GLOBAL_NAME","AngularProfiler","disableDebugTools","escapeHtml","text","escapedText","&","\"","'","<",">","unescapeHtml","unescapedText","&a;","&q;","&s;","&l;","&g;","makeStateKey","key","initTransferState","doc","appId","script","getElementById","initialState","textContent","JSON","parse","console","warn","TransferState","nodeContains","setPrototypeOf","__proto__","p","assign","n","call","DomAdapter","resourceLoaderType","defineProperty","_attrToPropMap","set","enumerable","configurable","GenericBrowserDomAdapter","_super","_this","_animationPrefix","_transitionEnd","element_1","getStyle","domPrefixes","toLowerCase","transEndEventNames_1","WebkitTransition","MozTransition","OTransition","transition","keys","getDistributedNodes","resolveAndSetHref","baseUrl","href","supportsDOMEvents","supportsNativeShadowDOM","createShadowRoot","getAnimationPrefix","getTransitionEnd","supportsAnimation","class","innerHtml","readonly","tabindex","_keyMap","\b","\t","","\u001b","Del","Esc","Left","Right","Up","Down","Menu","Scroll","Win","_chromeNumKeyPadMap","A","B","C","D","E","F","G","H","I","J","K","M","N","O","`","","contains","node","compareDocumentPosition","blackListedMap","templateHtml","hasProperty","setProperty","getProperty","invoke","methodName","args","logError","error","logGroup","group","logGroupEnd","groupEnd","nodeA","nodeB","selector","on","evt","listener","addEventListener","onAndCancel","removeEventListener","dispatchEvent","createMouseEvent","eventType","getDefaultDocument","createEvent","initEvent","isPrevented","defaultPrevented","innerHTML","isTemplateElement","content","getOuterHTML","outerHTML","nodeName","nodeValue","type","firstChild","nextSibling","parentElement","parentNode","childNodes","clearNodes","appendChild","replaceChild","newChild","oldChild","insertBefore","parent","insertAllBefore","nodes","insertAfter","setInnerHTML","getText","setText","getValue","setValue","getChecked","checked","setChecked","createComment","createTemplate","html","tagName","createElementNS","ns","createTextNode","createScriptTag","attrName","attrValue","createStyleElement","css","getShadowRoot","shadowRoot","getHost","host","clone","cloneNode","getElementsByClassName","getElementsByTagName","classList","addClass","className","add","removeClass","hasClass","setStyle","styleName","styleValue","removeStyle","stylename","hasStyle","attributeMap","Map","elAttrs","attributes","attrib","item","hasAttribute","attribute","hasAttributeNS","getAttributeNS","setAttributeNS","removeAttribute","removeAttributeNS","templateAwareRoot","createHtmlDocument","implementation","createHTMLDocument","getBoundingClientRect","top","bottom","left","right","width","height","getTitle","title","setTitle","newTitle","elementMatches","isElementNode","matches","msMatchesSelector","webkitMatchesSelector","isTextNode","nodeType","Node","TEXT_NODE","isCommentNode","COMMENT_NODE","ELEMENT_NODE","hasShadowRoot","HTMLElement","isShadowRoot","DocumentFragment","importIntoDoc","importNode","adoptNode","getHref","getEventKey","keyIdentifier","startsWith","fromCharCode","parseInt","substring","location","getGlobalEventTarget","body","getHistory","getLocation","getBaseHref","resetBaseElement","getUserAgent","navigator","userAgent","setData","getData","getComputedStyle","supportsWebAnimation","performanceNow","performance","now","Date","getTime","supportsCookies","getCookie","ɵparseCookieValue","cookie","setCookie","encodeURIComponent","DOCUMENT$1","DOCUMENT","BrowserPlatformLocation","_doc","_init","_history","getBaseHrefFromDOM","onPopState","fn","onHashChange","newPath","search","hash","state","replaceState","forward","back","decorators","Injectable","ctorParameters","undefined","Inject","PlatformLocation","Meta","_dom","addTag","tag","forceCreation","_getOrCreateElement","addTags","result","getTag","attrSelector","getTags","list","updateTag","_parseSelector","meta","_setMetaElementAttributes","removeTag","removeTagElement","elem","_containsAttributes","head","prop","attr","every","TRANSITION_ID","InjectionToken","SERVER_TRANSITION_PROVIDERS","provide","APP_INITIALIZER","useFactory","deps","Injector","multi","setTestabilityGetter","addToWindow","registry","findInAncestors","testability","findTestabilityInTree","getAllTestabilities","getAllRootElements","whenAllStable","callback","testabilities","count","didWork","decrement","didWork_","whenStable","getTestability","Title","ApplicationRef","NgZone","ELEMENT_PROBE_PROVIDERS","NgProbeToken","Optional","EVENT_MANAGER_PLUGINS","EventManager","plugins","_zone","_eventNameToPlugin","manager","_plugins","reverse","eventName","handler","_findPluginFor","addGlobalEventListener","getZone","plugin","plugin_1","supports","EventManagerPlugin","SharedStylesHost","_stylesSet","Set","addStyles","additions","has","onStylesAdded","getAllStyles","from","DomSharedStylesHost","_hostNodes","_styleNodes","_addStylesToHost","styleEl","addHost","hostNode","removeHost","delete","ngOnDestroy","styleNode","NAMESPACE_URIS","svg","xhtml","xlink","xml","xmlns","DomRendererFactory2","eventManager","sharedStylesHost","rendererByCompId","defaultRenderer","DefaultDomRenderer2","createRenderer","encapsulation","ViewEncapsulation","Emulated","renderer","id","EmulatedEncapsulationDomRenderer2","applyToHost","Native","ShadowDomRenderer","begin","end","data","destroy","namespace","createText","refChild","selectRootElement","selectorOrNode","namespaceUri","flags","RendererStyleFlags2","DashCase","Important","removeProperty","listen","component","contentAttr","hostAttr","hostEl","nodeOrShadowRoot","ɵ0","__symbol__","Zone","ADD_EVENT_LISTENER","REMOVE_EVENT_LISTENER","symbolNames","stopSymbol","blackListedEvents","isBlackListedEvent","globalListener","symbolName","taskDatas","taskData","zone","current","run","copiedTasks","DomEventsPlugin","ngZone","patchEvent","Event","delegate","stopImmediatePropagation","zoneJsLoaded","isInAngularZone","globalListenerRegistered","root","callbackRegistered","underlyingRemove","found","splice","EVENT_NAMES","pan","panstart","panmove","panend","pancancel","panleft","panright","panup","pandown","pinch","pinchstart","pinchmove","pinchend","pinchcancel","pinchin","pinchout","press","pressup","rotate","rotatestart","rotatemove","rotateend","rotatecancel","swipe","swipeleft","swiperight","swipeup","swipedown","tap","HAMMER_GESTURE_CONFIG","HammerGestureConfig","events","overrides","buildHammer","mc","Hammer","enable","HammerGesturesPlugin","_config","isCustomEvent","runOutsideAngular","eventObj","runGuarded","off","indexOf","MODIFIER_KEYS","ɵ0$1","altKey","ɵ1$1","ctrlKey","ɵ2$1","metaKey","ɵ3","shiftKey","MODIFIER_KEY_GETTERS","alt","control","shift","KeyEventsPlugin","parseEventName","parsedEvent","outsideHandler","eventCallback","parts","domEventName","_normalizeKey","pop","fullKey","modifierName","index","getEventFullKey","modifierGetter","keyName","inertDocument","inertHtml","getInertBodyElement_XHR","getInertBodyElement_DOMParser","getInertBodyElement_InertDocument","encodeURI","xhr","XMLHttpRequest","responseType","open","send","response","parseFromString","templateEl","documentMode","stripCustomNsAttrs","_","VOID_ELEMENTS","OPTIONAL_END_TAG_BLOCK_ELEMENTS","OPTIONAL_END_TAG_INLINE_ELEMENTS","OPTIONAL_END_TAG_ELEMENTS","BLOCK_ELEMENTS","INLINE_ELEMENTS","VALID_ELEMENTS","URI_ATTRS","SRCSET_ATTRS","HTML_ATTRS","VALID_ATTRS","buf","startElement","chars","endElement","next","checkClobberedElement","lower","nextNode","RegExp","DomSanitizer","DomSanitizerImpl","sanitize","ctx","SecurityContext","NONE","HTML","SafeHtmlImpl","changingThisBreaksApplicationSecurity","checkNotSafeValue","STYLE","SafeStyleImpl","SCRIPT","SafeScriptImpl","URL","SafeResourceUrlImpl","SafeUrlImpl","RESOURCE_URL","expectedType","SafeValueImpl","getTypeName","bypassSecurityTrustHtml","bypassSecurityTrustStyle","bypassSecurityTrustScript","bypassSecurityTrustUrl","bypassSecurityTrustResourceUrl","toString","INTERNAL_BROWSER_PLATFORM_PROVIDERS","PLATFORM_ID","useValue","ɵPLATFORM_BROWSER_ID","PLATFORM_INITIALIZER","useClass","BROWSER_SANITIZATION_PROVIDERS","Sanitizer","useExisting","createPlatformFactory","platformCore","BrowserModule","parentModule","withServerTransition","params","ngModule","providers","APP_ID","NgModule","RendererFactory2","Testability","CommonModule","ApplicationModule","SkipSelf","win","ChangeDetectionPerfRecord","msPerTick","numTicks","appRef","timeChangeDetection","config","record","isProfilerAvailable","profile","start","tick","toFixed","store","onSerializeCallbacks","initState","transferState","defaultValue","hasKey","onSerialize","toJson","stringify","BrowserTransferStateModule","By","all","debugElement","nativeElement","directive","VERSION","Version","ɵBROWSER_SANITIZATION_PROVIDERS","ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS","ɵinitDomAdapter","ɵBrowserDomAdapter","ɵBrowserPlatformLocation","ɵTRANSITION_ID","ɵBrowserGetTestability","ɵescapeHtml","ɵELEMENT_PROBE_PROVIDERS","ɵDomAdapter","ɵgetDOM","ɵsetRootDomAdapter","ɵDomRendererFactory2","ɵNAMESPACE_URIS","ɵflattenStyles","ɵshimContentAttribute","ɵshimHostAttribute","ɵDomEventsPlugin","ɵHammerGesturesPlugin","ɵKeyEventsPlugin","ɵDomSharedStylesHost","ɵSharedStylesHost","ɵb","ɵa","ɵi","ɵg","ɵf","ɵc","ɵh","ɵd","ɵe"],"mappings":"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","file":"platform-browser.umd.min.js","sourcesContent":["/**\n * @license Angular v5.2.11\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('@angular/core')) :\n\ttypeof define === 'function' && define.amd ? define('@angular/platform-browser', ['exports', '@angular/common', '@angular/core'], factory) :\n\t(factory((global.ng = global.ng || {}, global.ng.platformBrowser = {}),global.ng.common,global.ng.core));\n}(this, (function (exports,_angular_common,_angular_core) { 'use strict';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nfunction __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n};\n\n/**\n * @license Angular v5.2.11\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 */\nvar _DOM = /** @type {?} */ ((null));\n/**\n * @return {?}\n */\nfunction getDOM() {\n return _DOM;\n}\n/**\n * @param {?} adapter\n * @return {?}\n */\n\n/**\n * @param {?} adapter\n * @return {?}\n */\nfunction setRootDomAdapter(adapter) {\n if (!_DOM) {\n _DOM = adapter;\n }\n}\n/**\n * Provides DOM operations in an environment-agnostic way.\n *\n * \\@security Tread carefully! Interacting with the DOM directly is dangerous and\n * can introduce XSS risks.\n * @abstract\n */\nvar DomAdapter = /** @class */ (function () {\n function DomAdapter() {\n this.resourceLoaderType = /** @type {?} */ ((null));\n }\n Object.defineProperty(DomAdapter.prototype, \"attrToPropMap\", {\n /**\n * Maps attribute names to their corresponding property names for cases\n * where attribute name doesn't match property name.\n */\n get: /**\n * Maps attribute names to their corresponding property names for cases\n * where attribute name doesn't match property name.\n * @return {?}\n */\n function () { return this._attrToPropMap; },\n set: /**\n * @param {?} value\n * @return {?}\n */\n function (value) { this._attrToPropMap = value; },\n enumerable: true,\n configurable: true\n });\n return DomAdapter;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * 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 * @abstract\n */\nvar GenericBrowserDomAdapter = /** @class */ (function (_super) {\n __extends(GenericBrowserDomAdapter, _super);\n function GenericBrowserDomAdapter() {\n var _this = _super.call(this) || this;\n _this._animationPrefix = null;\n _this._transitionEnd = null;\n try {\n var /** @type {?} */ element_1 = _this.createElement('div', document);\n if (_this.getStyle(element_1, 'animationName') != null) {\n _this._animationPrefix = '';\n }\n else {\n var /** @type {?} */ domPrefixes = ['Webkit', 'Moz', 'O', 'ms'];\n for (var /** @type {?} */ i = 0; i < domPrefixes.length; i++) {\n if (_this.getStyle(element_1, domPrefixes[i] + 'AnimationName') != null) {\n _this._animationPrefix = '-' + domPrefixes[i].toLowerCase() + '-';\n break;\n }\n }\n }\n var /** @type {?} */ transEndEventNames_1 = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend'\n };\n Object.keys(transEndEventNames_1).forEach(function (key) {\n if (_this.getStyle(element_1, key) != null) {\n _this._transitionEnd = transEndEventNames_1[key];\n }\n });\n }\n catch (/** @type {?} */ e) {\n _this._animationPrefix = null;\n _this._transitionEnd = null;\n }\n return _this;\n }\n /**\n * @param {?} el\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.getDistributedNodes = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return (/** @type {?} */ (el)).getDistributedNodes(); };\n /**\n * @param {?} el\n * @param {?} baseUrl\n * @param {?} href\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.resolveAndSetHref = /**\n * @param {?} el\n * @param {?} baseUrl\n * @param {?} href\n * @return {?}\n */\n function (el, baseUrl, href) {\n el.href = href == null ? baseUrl : baseUrl + '/../' + href;\n };\n /**\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.supportsDOMEvents = /**\n * @return {?}\n */\n function () { return true; };\n /**\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.supportsNativeShadowDOM = /**\n * @return {?}\n */\n function () {\n return typeof (/** @type {?} */ (document.body)).createShadowRoot === 'function';\n };\n /**\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.getAnimationPrefix = /**\n * @return {?}\n */\n function () { return this._animationPrefix ? this._animationPrefix : ''; };\n /**\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.getTransitionEnd = /**\n * @return {?}\n */\n function () { return this._transitionEnd ? this._transitionEnd : ''; };\n /**\n * @return {?}\n */\n GenericBrowserDomAdapter.prototype.supportsAnimation = /**\n * @return {?}\n */\n function () {\n return this._animationPrefix != null && this._transitionEnd != null;\n };\n return GenericBrowserDomAdapter;\n}(DomAdapter));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 */\nvar _attrToPropMap = {\n 'class': 'className',\n 'innerHtml': 'innerHTML',\n 'readonly': 'readOnly',\n 'tabindex': 'tabIndex',\n};\nvar DOM_KEY_LOCATION_NUMPAD = 3;\n// Map to convert some key or keyIdentifier values to what will be returned by getEventKey\nvar _keyMap = {\n // The following values are here for cross-browser compatibility and to match the W3C standard\n // cf http://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};\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 ...\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};\nvar nodeContains;\nif (_angular_core.ɵglobal['Node']) {\n nodeContains = _angular_core.ɵglobal['Node'].prototype.contains || function (node) {\n return !!(this.compareDocumentPosition(node) & 16);\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 */\nvar BrowserDomAdapter = /** @class */ (function (_super) {\n __extends(BrowserDomAdapter, _super);\n function BrowserDomAdapter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @param {?} templateHtml\n * @return {?}\n */\n BrowserDomAdapter.prototype.parse = /**\n * @param {?} templateHtml\n * @return {?}\n */\n function (templateHtml) { throw new Error('parse not implemented'); };\n /**\n * @return {?}\n */\n BrowserDomAdapter.makeCurrent = /**\n * @return {?}\n */\n function () { setRootDomAdapter(new BrowserDomAdapter()); };\n /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasProperty = /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n function (element, name) { return name in element; };\n /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setProperty = /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (el, name, value) { (/** @type {?} */ (el))[name] = value; };\n /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getProperty = /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n function (el, name) { return (/** @type {?} */ (el))[name]; };\n /**\n * @param {?} el\n * @param {?} methodName\n * @param {?} args\n * @return {?}\n */\n BrowserDomAdapter.prototype.invoke = /**\n * @param {?} el\n * @param {?} methodName\n * @param {?} args\n * @return {?}\n */\n function (el, methodName, args) {\n (_a = (/** @type {?} */ (el)))[methodName].apply(_a, args);\n var _a;\n };\n // TODO(tbosch): move this into a separate environment class once we have it\n /**\n * @param {?} error\n * @return {?}\n */\n BrowserDomAdapter.prototype.logError = /**\n * @param {?} error\n * @return {?}\n */\n function (error) {\n if (window.console) {\n if (console.error) {\n console.error(error);\n }\n else {\n console.log(error);\n }\n }\n };\n /**\n * @param {?} error\n * @return {?}\n */\n BrowserDomAdapter.prototype.log = /**\n * @param {?} error\n * @return {?}\n */\n function (error) {\n if (window.console) {\n window.console.log && window.console.log(error);\n }\n };\n /**\n * @param {?} error\n * @return {?}\n */\n BrowserDomAdapter.prototype.logGroup = /**\n * @param {?} error\n * @return {?}\n */\n function (error) {\n if (window.console) {\n window.console.group && window.console.group(error);\n }\n };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.logGroupEnd = /**\n * @return {?}\n */\n function () {\n if (window.console) {\n window.console.groupEnd && window.console.groupEnd();\n }\n };\n Object.defineProperty(BrowserDomAdapter.prototype, \"attrToPropMap\", {\n get: /**\n * @return {?}\n */\n function () { return _attrToPropMap; },\n enumerable: true,\n configurable: true\n });\n /**\n * @param {?} nodeA\n * @param {?} nodeB\n * @return {?}\n */\n BrowserDomAdapter.prototype.contains = /**\n * @param {?} nodeA\n * @param {?} nodeB\n * @return {?}\n */\n function (nodeA, nodeB) { return nodeContains.call(nodeA, nodeB); };\n /**\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\n BrowserDomAdapter.prototype.querySelector = /**\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\n function (el, selector) { return el.querySelector(selector); };\n /**\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\n BrowserDomAdapter.prototype.querySelectorAll = /**\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\n function (el, selector) { return el.querySelectorAll(selector); };\n /**\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\n BrowserDomAdapter.prototype.on = /**\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\n function (el, evt, listener) { el.addEventListener(evt, listener, false); };\n /**\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\n BrowserDomAdapter.prototype.onAndCancel = /**\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\n function (el, evt, listener) {\n el.addEventListener(evt, listener, false);\n // Needed to follow Dart's subscription semantic, until fix of\n // https://code.google.com/p/dart/issues/detail?id=17406\n return function () { el.removeEventListener(evt, listener, false); };\n };\n /**\n * @param {?} el\n * @param {?} evt\n * @return {?}\n */\n BrowserDomAdapter.prototype.dispatchEvent = /**\n * @param {?} el\n * @param {?} evt\n * @return {?}\n */\n function (el, evt) { el.dispatchEvent(evt); };\n /**\n * @param {?} eventType\n * @return {?}\n */\n BrowserDomAdapter.prototype.createMouseEvent = /**\n * @param {?} eventType\n * @return {?}\n */\n function (eventType) {\n var /** @type {?} */ evt = this.getDefaultDocument().createEvent('MouseEvent');\n evt.initEvent(eventType, true, true);\n return evt;\n };\n /**\n * @param {?} eventType\n * @return {?}\n */\n BrowserDomAdapter.prototype.createEvent = /**\n * @param {?} eventType\n * @return {?}\n */\n function (eventType) {\n var /** @type {?} */ evt = this.getDefaultDocument().createEvent('Event');\n evt.initEvent(eventType, true, true);\n return evt;\n };\n /**\n * @param {?} evt\n * @return {?}\n */\n BrowserDomAdapter.prototype.preventDefault = /**\n * @param {?} evt\n * @return {?}\n */\n function (evt) {\n evt.preventDefault();\n evt.returnValue = false;\n };\n /**\n * @param {?} evt\n * @return {?}\n */\n BrowserDomAdapter.prototype.isPrevented = /**\n * @param {?} evt\n * @return {?}\n */\n function (evt) {\n return evt.defaultPrevented || evt.returnValue != null && !evt.returnValue;\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getInnerHTML = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.innerHTML; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getTemplateContent = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\n return 'content' in el && this.isTemplateElement(el) ? (/** @type {?} */ (el)).content : null;\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getOuterHTML = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.outerHTML; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.nodeName = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nodeName; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.nodeValue = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nodeValue; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.type = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.type; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.content = /**\n * @param {?} node\n * @return {?}\n */\n function (node) {\n if (this.hasProperty(node, 'content')) {\n return (/** @type {?} */ (node)).content;\n }\n else {\n return node;\n }\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.firstChild = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.firstChild; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.nextSibling = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.nextSibling; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.parentElement = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.parentNode; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.childNodes = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.childNodes; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.childNodesAsList = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\n var /** @type {?} */ childNodes = el.childNodes;\n var /** @type {?} */ res = new Array(childNodes.length);\n for (var /** @type {?} */ i = 0; i < childNodes.length; i++) {\n res[i] = childNodes[i];\n }\n return res;\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.clearNodes = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n };\n /**\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.appendChild = /**\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\n function (el, node) { el.appendChild(node); };\n /**\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.removeChild = /**\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\n function (el, node) { el.removeChild(node); };\n /**\n * @param {?} el\n * @param {?} newChild\n * @param {?} oldChild\n * @return {?}\n */\n BrowserDomAdapter.prototype.replaceChild = /**\n * @param {?} el\n * @param {?} newChild\n * @param {?} oldChild\n * @return {?}\n */\n function (el, newChild, oldChild) { el.replaceChild(newChild, oldChild); };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.remove = /**\n * @param {?} node\n * @return {?}\n */\n function (node) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n return node;\n };\n /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.insertBefore = /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} node\n * @return {?}\n */\n function (parent, ref, node) { parent.insertBefore(node, ref); };\n /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} nodes\n * @return {?}\n */\n BrowserDomAdapter.prototype.insertAllBefore = /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} nodes\n * @return {?}\n */\n function (parent, ref, nodes) {\n nodes.forEach(function (n) { return parent.insertBefore(n, ref); });\n };\n /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.insertAfter = /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} node\n * @return {?}\n */\n function (parent, ref, node) { parent.insertBefore(node, ref.nextSibling); };\n /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setInnerHTML = /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n function (el, value) { el.innerHTML = value; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getText = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.textContent; };\n /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setText = /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n function (el, value) { el.textContent = value; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getValue = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.value; };\n /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setValue = /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n function (el, value) { el.value = value; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getChecked = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return el.checked; };\n /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setChecked = /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n function (el, value) { el.checked = value; };\n /**\n * @param {?} text\n * @return {?}\n */\n BrowserDomAdapter.prototype.createComment = /**\n * @param {?} text\n * @return {?}\n */\n function (text) { return this.getDefaultDocument().createComment(text); };\n /**\n * @param {?} html\n * @return {?}\n */\n BrowserDomAdapter.prototype.createTemplate = /**\n * @param {?} html\n * @return {?}\n */\n function (html) {\n var /** @type {?} */ t = this.getDefaultDocument().createElement('template');\n t.innerHTML = html;\n return t;\n };\n /**\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.createElement = /**\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\n function (tagName, doc) {\n doc = doc || this.getDefaultDocument();\n return doc.createElement(tagName);\n };\n /**\n * @param {?} ns\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.createElementNS = /**\n * @param {?} ns\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\n function (ns, tagName, doc) {\n doc = doc || this.getDefaultDocument();\n return doc.createElementNS(ns, tagName);\n };\n /**\n * @param {?} text\n * @param {?=} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.createTextNode = /**\n * @param {?} text\n * @param {?=} doc\n * @return {?}\n */\n function (text, doc) {\n doc = doc || this.getDefaultDocument();\n return doc.createTextNode(text);\n };\n /**\n * @param {?} attrName\n * @param {?} attrValue\n * @param {?=} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.createScriptTag = /**\n * @param {?} attrName\n * @param {?} attrValue\n * @param {?=} doc\n * @return {?}\n */\n function (attrName, attrValue, doc) {\n doc = doc || this.getDefaultDocument();\n var /** @type {?} */ el = /** @type {?} */ (doc.createElement('SCRIPT'));\n el.setAttribute(attrName, attrValue);\n return el;\n };\n /**\n * @param {?} css\n * @param {?=} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.createStyleElement = /**\n * @param {?} css\n * @param {?=} doc\n * @return {?}\n */\n function (css, doc) {\n doc = doc || this.getDefaultDocument();\n var /** @type {?} */ style = /** @type {?} */ (doc.createElement('style'));\n this.appendChild(style, this.createTextNode(css, doc));\n return style;\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.createShadowRoot = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return (/** @type {?} */ (el)).createShadowRoot(); };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getShadowRoot = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return (/** @type {?} */ (el)).shadowRoot; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getHost = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return (/** @type {?} */ (el)).host; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.clone = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.cloneNode(true); };\n /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getElementsByClassName = /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n function (element, name) {\n return element.getElementsByClassName(name);\n };\n /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getElementsByTagName = /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n function (element, name) {\n return element.getElementsByTagName(name);\n };\n /**\n * @param {?} element\n * @return {?}\n */\n BrowserDomAdapter.prototype.classList = /**\n * @param {?} element\n * @return {?}\n */\n function (element) { return Array.prototype.slice.call(element.classList, 0); };\n /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n BrowserDomAdapter.prototype.addClass = /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n function (element, className) { element.classList.add(className); };\n /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n BrowserDomAdapter.prototype.removeClass = /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n function (element, className) { element.classList.remove(className); };\n /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasClass = /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n function (element, className) {\n return element.classList.contains(className);\n };\n /**\n * @param {?} element\n * @param {?} styleName\n * @param {?} styleValue\n * @return {?}\n */\n BrowserDomAdapter.prototype.setStyle = /**\n * @param {?} element\n * @param {?} styleName\n * @param {?} styleValue\n * @return {?}\n */\n function (element, styleName, styleValue) {\n element.style[styleName] = styleValue;\n };\n /**\n * @param {?} element\n * @param {?} stylename\n * @return {?}\n */\n BrowserDomAdapter.prototype.removeStyle = /**\n * @param {?} element\n * @param {?} stylename\n * @return {?}\n */\n function (element, stylename) {\n // IE requires '' instead of null\n // see https://github.com/angular/angular/issues/7916\n element.style[stylename] = '';\n };\n /**\n * @param {?} element\n * @param {?} stylename\n * @return {?}\n */\n BrowserDomAdapter.prototype.getStyle = /**\n * @param {?} element\n * @param {?} stylename\n * @return {?}\n */\n function (element, stylename) { return element.style[stylename]; };\n /**\n * @param {?} element\n * @param {?} styleName\n * @param {?=} styleValue\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasStyle = /**\n * @param {?} element\n * @param {?} styleName\n * @param {?=} styleValue\n * @return {?}\n */\n function (element, styleName, styleValue) {\n var /** @type {?} */ value = this.getStyle(element, styleName) || '';\n return styleValue ? value == styleValue : value.length > 0;\n };\n /**\n * @param {?} element\n * @return {?}\n */\n BrowserDomAdapter.prototype.tagName = /**\n * @param {?} element\n * @return {?}\n */\n function (element) { return element.tagName; };\n /**\n * @param {?} element\n * @return {?}\n */\n BrowserDomAdapter.prototype.attributeMap = /**\n * @param {?} element\n * @return {?}\n */\n function (element) {\n var /** @type {?} */ res = new Map();\n var /** @type {?} */ elAttrs = element.attributes;\n for (var /** @type {?} */ i = 0; i < elAttrs.length; i++) {\n var /** @type {?} */ attrib = elAttrs.item(i);\n res.set(attrib.name, attrib.value);\n }\n return res;\n };\n /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasAttribute = /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n function (element, attribute) {\n return element.hasAttribute(attribute);\n };\n /**\n * @param {?} element\n * @param {?} ns\n * @param {?} attribute\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasAttributeNS = /**\n * @param {?} element\n * @param {?} ns\n * @param {?} attribute\n * @return {?}\n */\n function (element, ns, attribute) {\n return element.hasAttributeNS(ns, attribute);\n };\n /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n BrowserDomAdapter.prototype.getAttribute = /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n function (element, attribute) {\n return element.getAttribute(attribute);\n };\n /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getAttributeNS = /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @return {?}\n */\n function (element, ns, name) {\n return element.getAttributeNS(ns, name);\n };\n /**\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setAttribute = /**\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (element, name, value) { element.setAttribute(name, value); };\n /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setAttributeNS = /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (element, ns, name, value) {\n element.setAttributeNS(ns, name, value);\n };\n /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n BrowserDomAdapter.prototype.removeAttribute = /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n function (element, attribute) { element.removeAttribute(attribute); };\n /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.removeAttributeNS = /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @return {?}\n */\n function (element, ns, name) {\n element.removeAttributeNS(ns, name);\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.templateAwareRoot = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return this.isTemplateElement(el) ? this.content(el) : el; };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.createHtmlDocument = /**\n * @return {?}\n */\n function () {\n return document.implementation.createHTMLDocument('fakeTitle');\n };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.getDefaultDocument = /**\n * @return {?}\n */\n function () { return document; };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getBoundingClientRect = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\n try {\n return el.getBoundingClientRect();\n }\n catch (/** @type {?} */ e) {\n return { top: 0, bottom: 0, left: 0, right: 0, width: 0, height: 0 };\n }\n };\n /**\n * @param {?} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.getTitle = /**\n * @param {?} doc\n * @return {?}\n */\n function (doc) { return doc.title; };\n /**\n * @param {?} doc\n * @param {?} newTitle\n * @return {?}\n */\n BrowserDomAdapter.prototype.setTitle = /**\n * @param {?} doc\n * @param {?} newTitle\n * @return {?}\n */\n function (doc, newTitle) { doc.title = newTitle || ''; };\n /**\n * @param {?} n\n * @param {?} selector\n * @return {?}\n */\n BrowserDomAdapter.prototype.elementMatches = /**\n * @param {?} n\n * @param {?} selector\n * @return {?}\n */\n function (n, selector) {\n if (this.isElementNode(n)) {\n return n.matches && n.matches(selector) ||\n n.msMatchesSelector && n.msMatchesSelector(selector) ||\n n.webkitMatchesSelector && n.webkitMatchesSelector(selector);\n }\n return false;\n };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.isTemplateElement = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\n return this.isElementNode(el) && el.nodeName === 'TEMPLATE';\n };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.isTextNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nodeType === Node.TEXT_NODE; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.isCommentNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nodeType === Node.COMMENT_NODE; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.isElementNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nodeType === Node.ELEMENT_NODE; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.hasShadowRoot = /**\n * @param {?} node\n * @return {?}\n */\n function (node) {\n return node.shadowRoot != null && node instanceof HTMLElement;\n };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.isShadowRoot = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node instanceof DocumentFragment; };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.importIntoDoc = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return document.importNode(this.templateAwareRoot(node), true); };\n /**\n * @param {?} node\n * @return {?}\n */\n BrowserDomAdapter.prototype.adoptNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return document.adoptNode(node); };\n /**\n * @param {?} el\n * @return {?}\n */\n BrowserDomAdapter.prototype.getHref = /**\n * @param {?} el\n * @return {?}\n */\n function (el) { return /** @type {?} */ ((el.getAttribute('href'))); };\n /**\n * @param {?} event\n * @return {?}\n */\n BrowserDomAdapter.prototype.getEventKey = /**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n var /** @type {?} */ key = event.key;\n if (key == null) {\n key = event.keyIdentifier;\n // keyIdentifier is defined in the old draft of DOM Level 3 Events implemented by Chrome and\n // Safari cf\n // http://www.w3.org/TR/2007/WD-DOM-Level-3-Events-20071221/events.html#Events-KeyboardEvents-Interfaces\n if (key == null) {\n return 'Unidentified';\n }\n if (key.startsWith('U+')) {\n key = String.fromCharCode(parseInt(key.substring(2), 16));\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 = (/** @type {?} */ (_chromeNumKeyPadMap))[key];\n }\n }\n }\n return _keyMap[key] || key;\n };\n /**\n * @param {?} doc\n * @param {?} target\n * @return {?}\n */\n BrowserDomAdapter.prototype.getGlobalEventTarget = /**\n * @param {?} doc\n * @param {?} target\n * @return {?}\n */\n function (doc, target) {\n if (target === 'window') {\n return window;\n }\n if (target === 'document') {\n return doc;\n }\n if (target === 'body') {\n return doc.body;\n }\n return null;\n };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.getHistory = /**\n * @return {?}\n */\n function () { return window.history; };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.getLocation = /**\n * @return {?}\n */\n function () { return window.location; };\n /**\n * @param {?} doc\n * @return {?}\n */\n BrowserDomAdapter.prototype.getBaseHref = /**\n * @param {?} doc\n * @return {?}\n */\n function (doc) {\n var /** @type {?} */ href = getBaseElementHref();\n return href == null ? null : relativePath(href);\n };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.resetBaseElement = /**\n * @return {?}\n */\n function () { baseElement = null; };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.getUserAgent = /**\n * @return {?}\n */\n function () { return window.navigator.userAgent; };\n /**\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setData = /**\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (element, name, value) {\n this.setAttribute(element, 'data-' + name, value);\n };\n /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getData = /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n function (element, name) {\n return this.getAttribute(element, 'data-' + name);\n };\n /**\n * @param {?} element\n * @return {?}\n */\n BrowserDomAdapter.prototype.getComputedStyle = /**\n * @param {?} element\n * @return {?}\n */\n function (element) { return getComputedStyle(element); };\n // TODO(tbosch): move this into a separate environment class once we have it\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.supportsWebAnimation = /**\n * @return {?}\n */\n function () {\n return typeof (/** @type {?} */ (Element)).prototype['animate'] === 'function';\n };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.performanceNow = /**\n * @return {?}\n */\n function () {\n // performance.now() is not available in all browsers, see\n // http://caniuse.com/#search=performance.now\n return window.performance && window.performance.now ? window.performance.now() :\n new Date().getTime();\n };\n /**\n * @return {?}\n */\n BrowserDomAdapter.prototype.supportsCookies = /**\n * @return {?}\n */\n function () { return true; };\n /**\n * @param {?} name\n * @return {?}\n */\n BrowserDomAdapter.prototype.getCookie = /**\n * @param {?} name\n * @return {?}\n */\n function (name) { return _angular_common.ɵparseCookieValue(document.cookie, name); };\n /**\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n BrowserDomAdapter.prototype.setCookie = /**\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (name, value) {\n // document.cookie is magical, assigning into it assigns/overrides one cookie value, but does\n // not clear other cookies.\n document.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value);\n };\n return BrowserDomAdapter;\n}(GenericBrowserDomAdapter));\nvar baseElement = null;\n/**\n * @return {?}\n */\nfunction getBaseElementHref() {\n if (!baseElement) {\n baseElement = /** @type {?} */ ((document.querySelector('base')));\n if (!baseElement) {\n return null;\n }\n }\n return baseElement.getAttribute('href');\n}\n// based on urlUtils.js in AngularJS 1\nvar urlParsingNode;\n/**\n * @param {?} url\n * @return {?}\n */\nfunction relativePath(url) {\n if (!urlParsingNode) {\n urlParsingNode = document.createElement('a');\n }\n urlParsingNode.setAttribute('href', url);\n return (urlParsingNode.pathname.charAt(0) === '/') ? urlParsingNode.pathname :\n '/' + urlParsingNode.pathname;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * A DI Token representing the main rendering context. In a browser this is the DOM Document.\n *\n * Note: Document might not be available in the Application Context when Application and Rendering\n * Contexts are not the same (e.g. when running the application into a Web Worker).\n *\n * @deprecated import from `\\@angular/common` instead.\n */\nvar DOCUMENT$1 = _angular_common.DOCUMENT;\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * @return {?}\n */\nfunction supportsState() {\n return !!window.history.pushState;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * `PlatformLocation` encapsulates all of the direct calls to platform APIs.\n * This class should not be used directly by an application developer. Instead, use\n * {\\@link Location}.\n */\nvar BrowserPlatformLocation = /** @class */ (function (_super) {\n __extends(BrowserPlatformLocation, _super);\n function BrowserPlatformLocation(_doc) {\n var _this = _super.call(this) || this;\n _this._doc = _doc;\n _this._init();\n return _this;\n }\n // This is moved to its own method so that `MockPlatformLocationStrategy` can overwrite it\n /** @internal */\n /**\n * \\@internal\n * @return {?}\n */\n BrowserPlatformLocation.prototype._init = /**\n * \\@internal\n * @return {?}\n */\n function () {\n (/** @type {?} */ (this)).location = getDOM().getLocation();\n this._history = getDOM().getHistory();\n };\n /**\n * @return {?}\n */\n BrowserPlatformLocation.prototype.getBaseHrefFromDOM = /**\n * @return {?}\n */\n function () { return /** @type {?} */ ((getDOM().getBaseHref(this._doc))); };\n /**\n * @param {?} fn\n * @return {?}\n */\n BrowserPlatformLocation.prototype.onPopState = /**\n * @param {?} fn\n * @return {?}\n */\n function (fn) {\n getDOM().getGlobalEventTarget(this._doc, 'window').addEventListener('popstate', fn, false);\n };\n /**\n * @param {?} fn\n * @return {?}\n */\n BrowserPlatformLocation.prototype.onHashChange = /**\n * @param {?} fn\n * @return {?}\n */\n function (fn) {\n getDOM().getGlobalEventTarget(this._doc, 'window').addEventListener('hashchange', fn, false);\n };\n Object.defineProperty(BrowserPlatformLocation.prototype, \"pathname\", {\n get: /**\n * @return {?}\n */\n function () { return this.location.pathname; },\n set: /**\n * @param {?} newPath\n * @return {?}\n */\n function (newPath) { this.location.pathname = newPath; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BrowserPlatformLocation.prototype, \"search\", {\n get: /**\n * @return {?}\n */\n function () { return this.location.search; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BrowserPlatformLocation.prototype, \"hash\", {\n get: /**\n * @return {?}\n */\n function () { return this.location.hash; },\n enumerable: true,\n configurable: true\n });\n /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\n BrowserPlatformLocation.prototype.pushState = /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\n function (state, title, url) {\n if (supportsState()) {\n this._history.pushState(state, title, url);\n }\n else {\n this.location.hash = url;\n }\n };\n /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\n BrowserPlatformLocation.prototype.replaceState = /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\n function (state, title, url) {\n if (supportsState()) {\n this._history.replaceState(state, title, url);\n }\n else {\n this.location.hash = url;\n }\n };\n /**\n * @return {?}\n */\n BrowserPlatformLocation.prototype.forward = /**\n * @return {?}\n */\n function () { this._history.forward(); };\n /**\n * @return {?}\n */\n BrowserPlatformLocation.prototype.back = /**\n * @return {?}\n */\n function () { this._history.back(); };\n BrowserPlatformLocation.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n BrowserPlatformLocation.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return BrowserPlatformLocation;\n}(_angular_common.PlatformLocation));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * A service that can be used to get and add meta tags.\n *\n * \\@experimental\n */\nvar Meta = /** @class */ (function () {\n function Meta(_doc) {\n this._doc = _doc;\n this._dom = getDOM();\n }\n /**\n * @param {?} tag\n * @param {?=} forceCreation\n * @return {?}\n */\n Meta.prototype.addTag = /**\n * @param {?} tag\n * @param {?=} forceCreation\n * @return {?}\n */\n function (tag, forceCreation) {\n if (forceCreation === void 0) { forceCreation = false; }\n if (!tag)\n return null;\n return this._getOrCreateElement(tag, forceCreation);\n };\n /**\n * @param {?} tags\n * @param {?=} forceCreation\n * @return {?}\n */\n Meta.prototype.addTags = /**\n * @param {?} tags\n * @param {?=} forceCreation\n * @return {?}\n */\n function (tags, forceCreation) {\n var _this = this;\n if (forceCreation === void 0) { forceCreation = false; }\n if (!tags)\n return [];\n return tags.reduce(function (result, tag) {\n if (tag) {\n result.push(_this._getOrCreateElement(tag, forceCreation));\n }\n return result;\n }, []);\n };\n /**\n * @param {?} attrSelector\n * @return {?}\n */\n Meta.prototype.getTag = /**\n * @param {?} attrSelector\n * @return {?}\n */\n function (attrSelector) {\n if (!attrSelector)\n return null;\n return this._dom.querySelector(this._doc, \"meta[\" + attrSelector + \"]\") || null;\n };\n /**\n * @param {?} attrSelector\n * @return {?}\n */\n Meta.prototype.getTags = /**\n * @param {?} attrSelector\n * @return {?}\n */\n function (attrSelector) {\n if (!attrSelector)\n return [];\n var /** @type {?} */ list = this._dom.querySelectorAll(this._doc, \"meta[\" + attrSelector + \"]\");\n return list ? [].slice.call(list) : [];\n };\n /**\n * @param {?} tag\n * @param {?=} selector\n * @return {?}\n */\n Meta.prototype.updateTag = /**\n * @param {?} tag\n * @param {?=} selector\n * @return {?}\n */\n function (tag, selector) {\n if (!tag)\n return null;\n selector = selector || this._parseSelector(tag);\n var /** @type {?} */ meta = /** @type {?} */ ((this.getTag(selector)));\n if (meta) {\n return this._setMetaElementAttributes(tag, meta);\n }\n return this._getOrCreateElement(tag, true);\n };\n /**\n * @param {?} attrSelector\n * @return {?}\n */\n Meta.prototype.removeTag = /**\n * @param {?} attrSelector\n * @return {?}\n */\n function (attrSelector) { this.removeTagElement(/** @type {?} */ ((this.getTag(attrSelector)))); };\n /**\n * @param {?} meta\n * @return {?}\n */\n Meta.prototype.removeTagElement = /**\n * @param {?} meta\n * @return {?}\n */\n function (meta) {\n if (meta) {\n this._dom.remove(meta);\n }\n };\n /**\n * @param {?} meta\n * @param {?=} forceCreation\n * @return {?}\n */\n Meta.prototype._getOrCreateElement = /**\n * @param {?} meta\n * @param {?=} forceCreation\n * @return {?}\n */\n function (meta, forceCreation) {\n if (forceCreation === void 0) { forceCreation = false; }\n if (!forceCreation) {\n var /** @type {?} */ selector = this._parseSelector(meta);\n var /** @type {?} */ elem = /** @type {?} */ ((this.getTag(selector)));\n // 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 if (elem && this._containsAttributes(meta, elem))\n return elem;\n }\n var /** @type {?} */ element = /** @type {?} */ (this._dom.createElement('meta'));\n this._setMetaElementAttributes(meta, element);\n var /** @type {?} */ head = this._dom.getElementsByTagName(this._doc, 'head')[0];\n this._dom.appendChild(head, element);\n return element;\n };\n /**\n * @param {?} tag\n * @param {?} el\n * @return {?}\n */\n Meta.prototype._setMetaElementAttributes = /**\n * @param {?} tag\n * @param {?} el\n * @return {?}\n */\n function (tag, el) {\n var _this = this;\n Object.keys(tag).forEach(function (prop) { return _this._dom.setAttribute(el, prop, tag[prop]); });\n return el;\n };\n /**\n * @param {?} tag\n * @return {?}\n */\n Meta.prototype._parseSelector = /**\n * @param {?} tag\n * @return {?}\n */\n function (tag) {\n var /** @type {?} */ attr = tag.name ? 'name' : 'property';\n return attr + \"=\\\"\" + tag[attr] + \"\\\"\";\n };\n /**\n * @param {?} tag\n * @param {?} elem\n * @return {?}\n */\n Meta.prototype._containsAttributes = /**\n * @param {?} tag\n * @param {?} elem\n * @return {?}\n */\n function (tag, elem) {\n var _this = this;\n return Object.keys(tag).every(function (key) { return _this._dom.getAttribute(elem, key) === tag[key]; });\n };\n Meta.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n Meta.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return Meta;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * An id that identifies a particular application being bootstrapped, that should\n * match across the client/server boundary.\n */\nvar TRANSITION_ID = new _angular_core.InjectionToken('TRANSITION_ID');\n/**\n * @param {?} transitionId\n * @param {?} document\n * @param {?} injector\n * @return {?}\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(_angular_core.ApplicationInitStatus).donePromise.then(function () {\n var /** @type {?} */ dom = getDOM();\n var /** @type {?} */ styles = Array.prototype.slice.apply(dom.querySelectorAll(document, \"style[ng-transition]\"));\n styles.filter(function (el) { return dom.getAttribute(el, 'ng-transition') === transitionId; })\n .forEach(function (el) { return dom.remove(el); });\n });\n };\n}\nvar SERVER_TRANSITION_PROVIDERS = [\n {\n provide: _angular_core.APP_INITIALIZER,\n useFactory: appInitializerFactory,\n deps: [TRANSITION_ID, DOCUMENT$1, _angular_core.Injector],\n multi: true\n },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 */\nvar BrowserGetTestability = /** @class */ (function () {\n function BrowserGetTestability() {\n }\n /**\n * @return {?}\n */\n BrowserGetTestability.init = /**\n * @return {?}\n */\n function () { _angular_core.setTestabilityGetter(new BrowserGetTestability()); };\n /**\n * @param {?} registry\n * @return {?}\n */\n BrowserGetTestability.prototype.addToWindow = /**\n * @param {?} registry\n * @return {?}\n */\n function (registry) {\n _angular_core.ɵglobal['getAngularTestability'] = function (elem, findInAncestors) {\n if (findInAncestors === void 0) { findInAncestors = true; }\n var /** @type {?} */ testability = registry.findTestabilityInTree(elem, findInAncestors);\n if (testability == null) {\n throw new Error('Could not find testability for element.');\n }\n return testability;\n };\n _angular_core.ɵglobal['getAllAngularTestabilities'] = function () { return registry.getAllTestabilities(); };\n _angular_core.ɵglobal['getAllAngularRootElements'] = function () { return registry.getAllRootElements(); };\n var /** @type {?} */ whenAllStable = function (callback /** TODO #9100 */) {\n var /** @type {?} */ testabilities = _angular_core.ɵglobal['getAllAngularTestabilities']();\n var /** @type {?} */ count = testabilities.length;\n var /** @type {?} */ didWork = false;\n var /** @type {?} */ decrement = function (didWork_ /** TODO #9100 */) {\n didWork = didWork || didWork_;\n count--;\n if (count == 0) {\n callback(didWork);\n }\n };\n testabilities.forEach(function (testability /** TODO #9100 */) {\n testability.whenStable(decrement);\n });\n };\n if (!_angular_core.ɵglobal['frameworkStabilizers']) {\n _angular_core.ɵglobal['frameworkStabilizers'] = [];\n }\n _angular_core.ɵglobal['frameworkStabilizers'].push(whenAllStable);\n };\n /**\n * @param {?} registry\n * @param {?} elem\n * @param {?} findInAncestors\n * @return {?}\n */\n BrowserGetTestability.prototype.findTestabilityInTree = /**\n * @param {?} registry\n * @param {?} elem\n * @param {?} findInAncestors\n * @return {?}\n */\n function (registry, elem, findInAncestors) {\n if (elem == null) {\n return null;\n }\n var /** @type {?} */ t = registry.getTestability(elem);\n if (t != null) {\n return t;\n }\n else if (!findInAncestors) {\n return null;\n }\n if (getDOM().isShadowRoot(elem)) {\n return this.findTestabilityInTree(registry, getDOM().getHost(elem), true);\n }\n return this.findTestabilityInTree(registry, getDOM().parentElement(elem), true);\n };\n return BrowserGetTestability;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * A service that can be used to get and set the title of a current HTML document.\n *\n * Since an Angular application can't be bootstrapped on the entire HTML document (`` tag)\n * it is not possible to bind to the `text` property of the `HTMLTitleElement` elements\n * (representing the `` tag). Instead, this service can be used to set and get the current\n * title value.\n *\n * \\@experimental\n */\nvar Title = /** @class */ (function () {\n function Title(_doc) {\n this._doc = _doc;\n }\n /**\n * Get the title of the current HTML document.\n */\n /**\n * Get the title of the current HTML document.\n * @return {?}\n */\n Title.prototype.getTitle = /**\n * Get the title of the current HTML document.\n * @return {?}\n */\n function () { return getDOM().getTitle(this._doc); };\n /**\n * Set the title of the current HTML document.\n * @param newTitle\n */\n /**\n * Set the title of the current HTML document.\n * @param {?} newTitle\n * @return {?}\n */\n Title.prototype.setTitle = /**\n * Set the title of the current HTML document.\n * @param {?} newTitle\n * @return {?}\n */\n function (newTitle) { getDOM().setTitle(this._doc, newTitle); };\n Title.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n Title.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return Title;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * @param {?} input\n * @return {?}\n */\n\n/**\n * @param {?} input\n * @return {?}\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 * @return {?}\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 /** @type {?} */ ng = _angular_core.ɵglobal['ng'] = (/** @type {?} */ (_angular_core.ɵglobal['ng'])) || {};\n ng[name] = value;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 */\nvar CORE_TOKENS = {\n 'ApplicationRef': _angular_core.ApplicationRef,\n 'NgZone': _angular_core.NgZone,\n};\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 * @param {?} element\n * @return {?}\n */\nfunction inspectNativeElement(element) {\n return _angular_core.getDebugNode(element);\n}\n/**\n * @param {?} coreTokens\n * @return {?}\n */\nfunction _createNgProbe(coreTokens) {\n exportNgVar(INSPECT_GLOBAL_NAME, inspectNativeElement);\n exportNgVar(CORE_TOKENS_GLOBAL_NAME, __assign({}, CORE_TOKENS, _ngProbeTokensToMap(coreTokens || [])));\n return function () { return inspectNativeElement; };\n}\n/**\n * @param {?} tokens\n * @return {?}\n */\nfunction _ngProbeTokensToMap(tokens) {\n return tokens.reduce(function (prev, t) { return (prev[t.name] = t.token, prev); }, {});\n}\n/**\n * Providers which support debugging Angular applications (e.g. via `ng.probe`).\n */\nvar ELEMENT_PROBE_PROVIDERS = [\n {\n provide: _angular_core.APP_INITIALIZER,\n useFactory: _createNgProbe,\n deps: [\n [_angular_core.NgProbeToken, new _angular_core.Optional()],\n ],\n multi: true,\n },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * \\@stable\n */\nvar EVENT_MANAGER_PLUGINS = new _angular_core.InjectionToken('EventManagerPlugins');\n/**\n * \\@stable\n */\nvar EventManager = /** @class */ (function () {\n function EventManager(plugins, _zone) {\n var _this = this;\n this._zone = _zone;\n this._eventNameToPlugin = new Map();\n plugins.forEach(function (p) { return p.manager = _this; });\n this._plugins = plugins.slice().reverse();\n }\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n EventManager.prototype.addEventListener = /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (element, eventName, handler) {\n var /** @type {?} */ plugin = this._findPluginFor(eventName);\n return plugin.addEventListener(element, eventName, handler);\n };\n /**\n * @param {?} target\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n EventManager.prototype.addGlobalEventListener = /**\n * @param {?} target\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (target, eventName, handler) {\n var /** @type {?} */ plugin = this._findPluginFor(eventName);\n return plugin.addGlobalEventListener(target, eventName, handler);\n };\n /**\n * @return {?}\n */\n EventManager.prototype.getZone = /**\n * @return {?}\n */\n function () { return this._zone; };\n /** @internal */\n /**\n * \\@internal\n * @param {?} eventName\n * @return {?}\n */\n EventManager.prototype._findPluginFor = /**\n * \\@internal\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) {\n var /** @type {?} */ plugin = this._eventNameToPlugin.get(eventName);\n if (plugin) {\n return plugin;\n }\n var /** @type {?} */ plugins = this._plugins;\n for (var /** @type {?} */ i = 0; i < plugins.length; i++) {\n var /** @type {?} */ plugin_1 = plugins[i];\n if (plugin_1.supports(eventName)) {\n this._eventNameToPlugin.set(eventName, plugin_1);\n return plugin_1;\n }\n }\n throw new Error(\"No event manager plugin found for event \" + eventName);\n };\n EventManager.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n EventManager.ctorParameters = function () { return [\n { type: Array, decorators: [{ type: _angular_core.Inject, args: [EVENT_MANAGER_PLUGINS,] },] },\n { type: _angular_core.NgZone, },\n ]; };\n return EventManager;\n}());\n/**\n * @abstract\n */\nvar EventManagerPlugin = /** @class */ (function () {\n function EventManagerPlugin(_doc) {\n this._doc = _doc;\n }\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n EventManagerPlugin.prototype.addGlobalEventListener = /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (element, eventName, handler) {\n var /** @type {?} */ target = getDOM().getGlobalEventTarget(this._doc, element);\n if (!target) {\n throw new Error(\"Unsupported event target \" + target + \" for event \" + eventName);\n }\n return this.addEventListener(target, eventName, handler);\n };\n return EventManagerPlugin;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 */\nvar SharedStylesHost = /** @class */ (function () {\n function SharedStylesHost() {\n /**\n * \\@internal\n */\n this._stylesSet = new Set();\n }\n /**\n * @param {?} styles\n * @return {?}\n */\n SharedStylesHost.prototype.addStyles = /**\n * @param {?} styles\n * @return {?}\n */\n function (styles) {\n var _this = this;\n var /** @type {?} */ additions = new Set();\n styles.forEach(function (style) {\n if (!_this._stylesSet.has(style)) {\n _this._stylesSet.add(style);\n additions.add(style);\n }\n });\n this.onStylesAdded(additions);\n };\n /**\n * @param {?} additions\n * @return {?}\n */\n SharedStylesHost.prototype.onStylesAdded = /**\n * @param {?} additions\n * @return {?}\n */\n function (additions) { };\n /**\n * @return {?}\n */\n SharedStylesHost.prototype.getAllStyles = /**\n * @return {?}\n */\n function () { return Array.from(this._stylesSet); };\n SharedStylesHost.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n SharedStylesHost.ctorParameters = function () { return []; };\n return SharedStylesHost;\n}());\nvar DomSharedStylesHost = /** @class */ (function (_super) {\n __extends(DomSharedStylesHost, _super);\n function DomSharedStylesHost(_doc) {\n var _this = _super.call(this) || this;\n _this._doc = _doc;\n _this._hostNodes = new Set();\n _this._styleNodes = new Set();\n _this._hostNodes.add(_doc.head);\n return _this;\n }\n /**\n * @param {?} styles\n * @param {?} host\n * @return {?}\n */\n DomSharedStylesHost.prototype._addStylesToHost = /**\n * @param {?} styles\n * @param {?} host\n * @return {?}\n */\n function (styles, host) {\n var _this = this;\n styles.forEach(function (style) {\n var /** @type {?} */ styleEl = _this._doc.createElement('style');\n styleEl.textContent = style;\n _this._styleNodes.add(host.appendChild(styleEl));\n });\n };\n /**\n * @param {?} hostNode\n * @return {?}\n */\n DomSharedStylesHost.prototype.addHost = /**\n * @param {?} hostNode\n * @return {?}\n */\n function (hostNode) {\n this._addStylesToHost(this._stylesSet, hostNode);\n this._hostNodes.add(hostNode);\n };\n /**\n * @param {?} hostNode\n * @return {?}\n */\n DomSharedStylesHost.prototype.removeHost = /**\n * @param {?} hostNode\n * @return {?}\n */\n function (hostNode) { this._hostNodes.delete(hostNode); };\n /**\n * @param {?} additions\n * @return {?}\n */\n DomSharedStylesHost.prototype.onStylesAdded = /**\n * @param {?} additions\n * @return {?}\n */\n function (additions) {\n var _this = this;\n this._hostNodes.forEach(function (hostNode) { return _this._addStylesToHost(additions, hostNode); });\n };\n /**\n * @return {?}\n */\n DomSharedStylesHost.prototype.ngOnDestroy = /**\n * @return {?}\n */\n function () { this._styleNodes.forEach(function (styleNode) { return getDOM().remove(styleNode); }); };\n DomSharedStylesHost.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n DomSharedStylesHost.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return DomSharedStylesHost;\n}(SharedStylesHost));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 */\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 COMPONENT_VARIABLE = '%COMP%';\nvar HOST_ATTR = \"_nghost-\" + COMPONENT_VARIABLE;\nvar CONTENT_ATTR = \"_ngcontent-\" + COMPONENT_VARIABLE;\n/**\n * @param {?} componentShortId\n * @return {?}\n */\nfunction shimContentAttribute(componentShortId) {\n return CONTENT_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\n/**\n * @param {?} componentShortId\n * @return {?}\n */\nfunction shimHostAttribute(componentShortId) {\n return HOST_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\n/**\n * @param {?} compId\n * @param {?} styles\n * @param {?} target\n * @return {?}\n */\nfunction flattenStyles(compId, styles, target) {\n for (var /** @type {?} */ i = 0; i < styles.length; i++) {\n var /** @type {?} */ style = styles[i];\n if (Array.isArray(style)) {\n flattenStyles(compId, style, target);\n }\n else {\n style = style.replace(COMPONENT_REGEX, compId);\n target.push(style);\n }\n }\n return target;\n}\n/**\n * @param {?} eventHandler\n * @return {?}\n */\nfunction decoratePreventDefault(eventHandler) {\n return function (event) {\n var /** @type {?} */ allowDefaultBehavior = eventHandler(event);\n if (allowDefaultBehavior === false) {\n // TODO(tbosch): move preventDefault into event plugins...\n event.preventDefault();\n event.returnValue = false;\n }\n };\n}\nvar DomRendererFactory2 = /** @class */ (function () {\n function DomRendererFactory2(eventManager, sharedStylesHost) {\n this.eventManager = eventManager;\n this.sharedStylesHost = sharedStylesHost;\n this.rendererByCompId = new Map();\n this.defaultRenderer = new DefaultDomRenderer2(eventManager);\n }\n /**\n * @param {?} element\n * @param {?} type\n * @return {?}\n */\n DomRendererFactory2.prototype.createRenderer = /**\n * @param {?} element\n * @param {?} type\n * @return {?}\n */\n function (element, type) {\n if (!element || !type) {\n return this.defaultRenderer;\n }\n switch (type.encapsulation) {\n case _angular_core.ViewEncapsulation.Emulated: {\n var /** @type {?} */ renderer = this.rendererByCompId.get(type.id);\n if (!renderer) {\n renderer =\n new EmulatedEncapsulationDomRenderer2(this.eventManager, this.sharedStylesHost, type);\n this.rendererByCompId.set(type.id, renderer);\n }\n (/** @type {?} */ (renderer)).applyToHost(element);\n return renderer;\n }\n case _angular_core.ViewEncapsulation.Native:\n return new ShadowDomRenderer(this.eventManager, this.sharedStylesHost, element, type);\n default: {\n if (!this.rendererByCompId.has(type.id)) {\n var /** @type {?} */ styles = flattenStyles(type.id, type.styles, []);\n this.sharedStylesHost.addStyles(styles);\n this.rendererByCompId.set(type.id, this.defaultRenderer);\n }\n return this.defaultRenderer;\n }\n }\n };\n /**\n * @return {?}\n */\n DomRendererFactory2.prototype.begin = /**\n * @return {?}\n */\n function () { };\n /**\n * @return {?}\n */\n DomRendererFactory2.prototype.end = /**\n * @return {?}\n */\n function () { };\n DomRendererFactory2.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n DomRendererFactory2.ctorParameters = function () { return [\n { type: EventManager, },\n { type: DomSharedStylesHost, },\n ]; };\n return DomRendererFactory2;\n}());\nvar DefaultDomRenderer2 = /** @class */ (function () {\n function DefaultDomRenderer2(eventManager) {\n this.eventManager = eventManager;\n this.data = Object.create(null);\n }\n /**\n * @return {?}\n */\n DefaultDomRenderer2.prototype.destroy = /**\n * @return {?}\n */\n function () { };\n /**\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n DefaultDomRenderer2.prototype.createElement = /**\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n function (name, namespace) {\n if (namespace) {\n return document.createElementNS(NAMESPACE_URIS[namespace], name);\n }\n return document.createElement(name);\n };\n /**\n * @param {?} value\n * @return {?}\n */\n DefaultDomRenderer2.prototype.createComment = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return document.createComment(value); };\n /**\n * @param {?} value\n * @return {?}\n */\n DefaultDomRenderer2.prototype.createText = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return document.createTextNode(value); };\n /**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\n DefaultDomRenderer2.prototype.appendChild = /**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\n function (parent, newChild) { parent.appendChild(newChild); };\n /**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\n DefaultDomRenderer2.prototype.insertBefore = /**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\n function (parent, newChild, refChild) {\n if (parent) {\n parent.insertBefore(newChild, refChild);\n }\n };\n /**\n * @param {?} parent\n * @param {?} oldChild\n * @return {?}\n */\n DefaultDomRenderer2.prototype.removeChild = /**\n * @param {?} parent\n * @param {?} oldChild\n * @return {?}\n */\n function (parent, oldChild) {\n if (parent) {\n parent.removeChild(oldChild);\n }\n };\n /**\n * @param {?} selectorOrNode\n * @return {?}\n */\n DefaultDomRenderer2.prototype.selectRootElement = /**\n * @param {?} selectorOrNode\n * @return {?}\n */\n function (selectorOrNode) {\n var /** @type {?} */ el = typeof selectorOrNode === 'string' ? document.querySelector(selectorOrNode) :\n selectorOrNode;\n if (!el) {\n throw new Error(\"The selector \\\"\" + selectorOrNode + \"\\\" did not match any elements\");\n }\n el.textContent = '';\n return el;\n };\n /**\n * @param {?} node\n * @return {?}\n */\n DefaultDomRenderer2.prototype.parentNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.parentNode; };\n /**\n * @param {?} node\n * @return {?}\n */\n DefaultDomRenderer2.prototype.nextSibling = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node.nextSibling; };\n /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @param {?=} namespace\n * @return {?}\n */\n DefaultDomRenderer2.prototype.setAttribute = /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @param {?=} namespace\n * @return {?}\n */\n function (el, name, value, namespace) {\n if (namespace) {\n name = namespace + \":\" + name;\n var /** @type {?} */ namespaceUri = NAMESPACE_URIS[namespace];\n if (namespaceUri) {\n el.setAttributeNS(namespaceUri, name, value);\n }\n else {\n el.setAttribute(name, value);\n }\n }\n else {\n el.setAttribute(name, value);\n }\n };\n /**\n * @param {?} el\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n DefaultDomRenderer2.prototype.removeAttribute = /**\n * @param {?} el\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n function (el, name, namespace) {\n if (namespace) {\n var /** @type {?} */ namespaceUri = NAMESPACE_URIS[namespace];\n if (namespaceUri) {\n el.removeAttributeNS(namespaceUri, name);\n }\n else {\n el.removeAttribute(namespace + \":\" + name);\n }\n }\n else {\n el.removeAttribute(name);\n }\n };\n /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n DefaultDomRenderer2.prototype.addClass = /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n function (el, name) { el.classList.add(name); };\n /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n DefaultDomRenderer2.prototype.removeClass = /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n function (el, name) { el.classList.remove(name); };\n /**\n * @param {?} el\n * @param {?} style\n * @param {?} value\n * @param {?} flags\n * @return {?}\n */\n DefaultDomRenderer2.prototype.setStyle = /**\n * @param {?} el\n * @param {?} style\n * @param {?} value\n * @param {?} flags\n * @return {?}\n */\n function (el, style, value, flags) {\n if (flags & _angular_core.RendererStyleFlags2.DashCase) {\n el.style.setProperty(style, value, !!(flags & _angular_core.RendererStyleFlags2.Important) ? 'important' : '');\n }\n else {\n el.style[style] = value;\n }\n };\n /**\n * @param {?} el\n * @param {?} style\n * @param {?} flags\n * @return {?}\n */\n DefaultDomRenderer2.prototype.removeStyle = /**\n * @param {?} el\n * @param {?} style\n * @param {?} flags\n * @return {?}\n */\n function (el, style, flags) {\n if (flags & _angular_core.RendererStyleFlags2.DashCase) {\n el.style.removeProperty(style);\n }\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 * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n DefaultDomRenderer2.prototype.setProperty = /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n function (el, name, value) {\n checkNoSyntheticProp(name, 'property');\n el[name] = value;\n };\n /**\n * @param {?} node\n * @param {?} value\n * @return {?}\n */\n DefaultDomRenderer2.prototype.setValue = /**\n * @param {?} node\n * @param {?} value\n * @return {?}\n */\n function (node, value) { node.nodeValue = value; };\n /**\n * @param {?} target\n * @param {?} event\n * @param {?} callback\n * @return {?}\n */\n DefaultDomRenderer2.prototype.listen = /**\n * @param {?} target\n * @param {?} event\n * @param {?} callback\n * @return {?}\n */\n function (target, event, callback) {\n checkNoSyntheticProp(event, 'listener');\n if (typeof target === 'string') {\n return /** @type {?} */ (this.eventManager.addGlobalEventListener(target, event, decoratePreventDefault(callback)));\n }\n return /** @type {?} */ ((this.eventManager.addEventListener(target, event, decoratePreventDefault(callback))));\n };\n return DefaultDomRenderer2;\n}());\nvar AT_CHARCODE = '@'.charCodeAt(0);\n/**\n * @param {?} name\n * @param {?} nameKind\n * @return {?}\n */\nfunction checkNoSyntheticProp(name, nameKind) {\n if (name.charCodeAt(0) === AT_CHARCODE) {\n throw new Error(\"Found the synthetic \" + nameKind + \" \" + name + \". Please include either \\\"BrowserAnimationsModule\\\" or \\\"NoopAnimationsModule\\\" in your application.\");\n }\n}\nvar EmulatedEncapsulationDomRenderer2 = /** @class */ (function (_super) {\n __extends(EmulatedEncapsulationDomRenderer2, _super);\n function EmulatedEncapsulationDomRenderer2(eventManager, sharedStylesHost, component) {\n var _this = _super.call(this, eventManager) || this;\n _this.component = component;\n var /** @type {?} */ styles = flattenStyles(component.id, component.styles, []);\n sharedStylesHost.addStyles(styles);\n _this.contentAttr = shimContentAttribute(component.id);\n _this.hostAttr = shimHostAttribute(component.id);\n return _this;\n }\n /**\n * @param {?} element\n * @return {?}\n */\n EmulatedEncapsulationDomRenderer2.prototype.applyToHost = /**\n * @param {?} element\n * @return {?}\n */\n function (element) { _super.prototype.setAttribute.call(this, element, this.hostAttr, ''); };\n /**\n * @param {?} parent\n * @param {?} name\n * @return {?}\n */\n EmulatedEncapsulationDomRenderer2.prototype.createElement = /**\n * @param {?} parent\n * @param {?} name\n * @return {?}\n */\n function (parent, name) {\n var /** @type {?} */ el = _super.prototype.createElement.call(this, parent, name);\n _super.prototype.setAttribute.call(this, el, this.contentAttr, '');\n return el;\n };\n return EmulatedEncapsulationDomRenderer2;\n}(DefaultDomRenderer2));\nvar ShadowDomRenderer = /** @class */ (function (_super) {\n __extends(ShadowDomRenderer, _super);\n function ShadowDomRenderer(eventManager, sharedStylesHost, hostEl, component) {\n var _this = _super.call(this, eventManager) || this;\n _this.sharedStylesHost = sharedStylesHost;\n _this.hostEl = hostEl;\n _this.component = component;\n _this.shadowRoot = (/** @type {?} */ (hostEl)).createShadowRoot();\n _this.sharedStylesHost.addHost(_this.shadowRoot);\n var /** @type {?} */ styles = flattenStyles(component.id, component.styles, []);\n for (var /** @type {?} */ i = 0; i < styles.length; i++) {\n var /** @type {?} */ styleEl = document.createElement('style');\n styleEl.textContent = styles[i];\n _this.shadowRoot.appendChild(styleEl);\n }\n return _this;\n }\n /**\n * @param {?} node\n * @return {?}\n */\n ShadowDomRenderer.prototype.nodeOrShadowRoot = /**\n * @param {?} node\n * @return {?}\n */\n function (node) { return node === this.hostEl ? this.shadowRoot : node; };\n /**\n * @return {?}\n */\n ShadowDomRenderer.prototype.destroy = /**\n * @return {?}\n */\n function () { this.sharedStylesHost.removeHost(this.shadowRoot); };\n /**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\n ShadowDomRenderer.prototype.appendChild = /**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\n function (parent, newChild) {\n return _super.prototype.appendChild.call(this, this.nodeOrShadowRoot(parent), newChild);\n };\n /**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\n ShadowDomRenderer.prototype.insertBefore = /**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\n function (parent, newChild, refChild) {\n return _super.prototype.insertBefore.call(this, this.nodeOrShadowRoot(parent), newChild, refChild);\n };\n /**\n * @param {?} parent\n * @param {?} oldChild\n * @return {?}\n */\n ShadowDomRenderer.prototype.removeChild = /**\n * @param {?} parent\n * @param {?} oldChild\n * @return {?}\n */\n function (parent, oldChild) {\n return _super.prototype.removeChild.call(this, this.nodeOrShadowRoot(parent), oldChild);\n };\n /**\n * @param {?} node\n * @return {?}\n */\n ShadowDomRenderer.prototype.parentNode = /**\n * @param {?} node\n * @return {?}\n */\n function (node) {\n return this.nodeOrShadowRoot(_super.prototype.parentNode.call(this, this.nodeOrShadowRoot(node)));\n };\n return ShadowDomRenderer;\n}(DefaultDomRenderer2));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 */\nvar ɵ0 = function (v) {\n return '__zone_symbol__' + v;\n};\n/**\n * Detect if Zone is present. If it is then use simple zone aware 'addEventListener'\n * since Angular can do much more\n * efficient bookkeeping than Zone can, because we have additional information. This speeds up\n * addEventListener by 3x.\n */\nvar __symbol__ = (typeof Zone !== 'undefined') && (/** @type {?} */ (Zone))['__symbol__'] || ɵ0;\nvar ADD_EVENT_LISTENER = __symbol__('addEventListener');\nvar REMOVE_EVENT_LISTENER = __symbol__('removeEventListener');\nvar symbolNames = {};\nvar FALSE = 'FALSE';\nvar ANGULAR = 'ANGULAR';\nvar NATIVE_ADD_LISTENER = 'addEventListener';\nvar NATIVE_REMOVE_LISTENER = 'removeEventListener';\n// use the same symbol string which is used in zone.js\nvar stopSymbol = '__zone_symbol__propagationStopped';\nvar stopMethodSymbol = '__zone_symbol__stopImmediatePropagation';\nvar blackListedEvents = (typeof Zone !== 'undefined') && (/** @type {?} */ (Zone))[__symbol__('BLACK_LISTED_EVENTS')];\nvar blackListedMap;\nif (blackListedEvents) {\n blackListedMap = {};\n blackListedEvents.forEach(function (eventName) { blackListedMap[eventName] = eventName; });\n}\nvar isBlackListedEvent = function (eventName) {\n if (!blackListedMap) {\n return false;\n }\n return blackListedMap.hasOwnProperty(eventName);\n};\n// a global listener to handle all dom event,\n// so we do not need to create a closure everytime\nvar globalListener = function (event) {\n var /** @type {?} */ symbolName = symbolNames[event.type];\n if (!symbolName) {\n return;\n }\n var /** @type {?} */ taskDatas = this[symbolName];\n if (!taskDatas) {\n return;\n }\n var /** @type {?} */ args = [event];\n if (taskDatas.length === 1) {\n // if taskDatas only have one element, just invoke it\n var /** @type {?} */ taskData = taskDatas[0];\n if (taskData.zone !== Zone.current) {\n // only use Zone.run when Zone.current not equals to stored zone\n return taskData.zone.run(taskData.handler, this, args);\n }\n else {\n return taskData.handler.apply(this, args);\n }\n }\n else {\n // copy tasks as a snapshot to avoid event handlers remove\n // itself or others\n var /** @type {?} */ copiedTasks = taskDatas.slice();\n for (var /** @type {?} */ i = 0; i < copiedTasks.length; i++) {\n // if other listener call event.stopImmediatePropagation\n // just break\n if ((/** @type {?} */ (event))[stopSymbol] === true) {\n break;\n }\n var /** @type {?} */ taskData = copiedTasks[i];\n if (taskData.zone !== Zone.current) {\n // only use Zone.run when Zone.current not equals to stored zone\n taskData.zone.run(taskData.handler, this, args);\n }\n else {\n taskData.handler.apply(this, args);\n }\n }\n }\n};\nvar DomEventsPlugin = /** @class */ (function (_super) {\n __extends(DomEventsPlugin, _super);\n function DomEventsPlugin(doc, ngZone) {\n var _this = _super.call(this, doc) || this;\n _this.ngZone = ngZone;\n _this.patchEvent();\n return _this;\n }\n /**\n * @return {?}\n */\n DomEventsPlugin.prototype.patchEvent = /**\n * @return {?}\n */\n function () {\n if (!Event || !Event.prototype) {\n return;\n }\n if ((/** @type {?} */ (Event.prototype))[stopMethodSymbol]) {\n // already patched by zone.js\n return;\n }\n var /** @type {?} */ delegate = (/** @type {?} */ (Event.prototype))[stopMethodSymbol] =\n Event.prototype.stopImmediatePropagation;\n Event.prototype.stopImmediatePropagation = function () {\n if (this) {\n this[stopSymbol] = true;\n }\n // should call native delegate in case\n // in some enviroment part of the application\n // will not use the patched Event\n delegate && delegate.apply(this, arguments);\n };\n };\n // This plugin should come last in the list of plugins, because it accepts all\n // events.\n /**\n * @param {?} eventName\n * @return {?}\n */\n DomEventsPlugin.prototype.supports = /**\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) { return true; };\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n DomEventsPlugin.prototype.addEventListener = /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (element, eventName, handler) {\n var _this = this;\n /**\n * This code is about to add a listener to the DOM. If Zone.js is present, than\n * `addEventListener` has been patched. The patched code adds overhead in both\n * memory and speed (3x slower) than native. For this reason if we detect that\n * Zone.js is present we use a simple version of zone aware addEventListener instead.\n * The result is faster registration and the zone will be restored.\n * But ZoneSpec.onScheduleTask, ZoneSpec.onInvokeTask, ZoneSpec.onCancelTask\n * will not be invoked\n * We also do manual zone restoration in element.ts renderEventHandlerClosure method.\n *\n * NOTE: it is possible that the element is from different iframe, and so we\n * have to check before we execute the method.\n */\n var /** @type {?} */ self = this;\n var /** @type {?} */ zoneJsLoaded = element[ADD_EVENT_LISTENER];\n var /** @type {?} */ callback = /** @type {?} */ (handler);\n // if zonejs is loaded and current zone is not ngZone\n // we keep Zone.current on target for later restoration.\n if (zoneJsLoaded && (!_angular_core.NgZone.isInAngularZone() || isBlackListedEvent(eventName))) {\n var /** @type {?} */ symbolName = symbolNames[eventName];\n if (!symbolName) {\n symbolName = symbolNames[eventName] = __symbol__(ANGULAR + eventName + FALSE);\n }\n var /** @type {?} */ taskDatas = (/** @type {?} */ (element))[symbolName];\n var /** @type {?} */ globalListenerRegistered = taskDatas && taskDatas.length > 0;\n if (!taskDatas) {\n taskDatas = (/** @type {?} */ (element))[symbolName] = [];\n }\n var /** @type {?} */ zone = isBlackListedEvent(eventName) ? Zone.root : Zone.current;\n if (taskDatas.length === 0) {\n taskDatas.push({ zone: zone, handler: callback });\n }\n else {\n var /** @type {?} */ callbackRegistered = false;\n for (var /** @type {?} */ i = 0; i < taskDatas.length; i++) {\n if (taskDatas[i].handler === callback) {\n callbackRegistered = true;\n break;\n }\n }\n if (!callbackRegistered) {\n taskDatas.push({ zone: zone, handler: callback });\n }\n }\n if (!globalListenerRegistered) {\n element[ADD_EVENT_LISTENER](eventName, globalListener, false);\n }\n }\n else {\n element[NATIVE_ADD_LISTENER](eventName, callback, false);\n }\n return function () { return _this.removeEventListener(element, eventName, callback); };\n };\n /**\n * @param {?} target\n * @param {?} eventName\n * @param {?} callback\n * @return {?}\n */\n DomEventsPlugin.prototype.removeEventListener = /**\n * @param {?} target\n * @param {?} eventName\n * @param {?} callback\n * @return {?}\n */\n function (target, eventName, callback) {\n var /** @type {?} */ underlyingRemove = target[REMOVE_EVENT_LISTENER];\n // zone.js not loaded, use native removeEventListener\n if (!underlyingRemove) {\n return target[NATIVE_REMOVE_LISTENER].apply(target, [eventName, callback, false]);\n }\n var /** @type {?} */ symbolName = symbolNames[eventName];\n var /** @type {?} */ taskDatas = symbolName && target[symbolName];\n if (!taskDatas) {\n // addEventListener not using patched version\n // just call native removeEventListener\n return target[NATIVE_REMOVE_LISTENER].apply(target, [eventName, callback, false]);\n }\n // fix issue 20532, should be able to remove\n // listener which was added inside of ngZone\n var /** @type {?} */ found = false;\n for (var /** @type {?} */ i = 0; i < taskDatas.length; i++) {\n // remove listener from taskDatas if the callback equals\n if (taskDatas[i].handler === callback) {\n found = true;\n taskDatas.splice(i, 1);\n break;\n }\n }\n if (found) {\n if (taskDatas.length === 0) {\n // all listeners are removed, we can remove the globalListener from target\n underlyingRemove.apply(target, [eventName, globalListener, false]);\n }\n }\n else {\n // not found in taskDatas, the callback may be added inside of ngZone\n // use native remove listener to remove the calback\n target[NATIVE_REMOVE_LISTENER].apply(target, [eventName, callback, false]);\n }\n };\n DomEventsPlugin.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n DomEventsPlugin.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n { type: _angular_core.NgZone, },\n ]; };\n return DomEventsPlugin;\n}(EventManagerPlugin));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 */\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};\n/**\n * A DI token that you can use to provide{\\@link HammerGestureConfig} to Angular. Use it to configure\n * Hammer gestures.\n *\n * \\@experimental\n */\nvar HAMMER_GESTURE_CONFIG = new _angular_core.InjectionToken('HammerGestureConfig');\n/**\n * @record\n */\n\n/**\n * \\@experimental\n */\nvar HammerGestureConfig = /** @class */ (function () {\n function HammerGestureConfig() {\n this.events = [];\n this.overrides = {};\n }\n /**\n * @param {?} element\n * @return {?}\n */\n HammerGestureConfig.prototype.buildHammer = /**\n * @param {?} element\n * @return {?}\n */\n function (element) {\n var /** @type {?} */ mc = new Hammer(element);\n mc.get('pinch').set({ enable: true });\n mc.get('rotate').set({ enable: true });\n for (var /** @type {?} */ eventName in this.overrides) {\n mc.get(eventName).set(this.overrides[eventName]);\n }\n return mc;\n };\n HammerGestureConfig.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n HammerGestureConfig.ctorParameters = function () { return []; };\n return HammerGestureConfig;\n}());\nvar HammerGesturesPlugin = /** @class */ (function (_super) {\n __extends(HammerGesturesPlugin, _super);\n function HammerGesturesPlugin(doc, _config) {\n var _this = _super.call(this, doc) || this;\n _this._config = _config;\n return _this;\n }\n /**\n * @param {?} eventName\n * @return {?}\n */\n HammerGesturesPlugin.prototype.supports = /**\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) {\n if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {\n return false;\n }\n if (!(/** @type {?} */ (window)).Hammer) {\n throw new Error(\"Hammer.js is not loaded, can not bind \" + eventName + \" event\");\n }\n return true;\n };\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n HammerGesturesPlugin.prototype.addEventListener = /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (element, eventName, handler) {\n var _this = this;\n var /** @type {?} */ zone = this.manager.getZone();\n eventName = eventName.toLowerCase();\n return zone.runOutsideAngular(function () {\n // Creating the manager bind events, must be done outside of angular\n var /** @type {?} */ mc = _this._config.buildHammer(element);\n var /** @type {?} */ callback = function (eventObj) {\n zone.runGuarded(function () { handler(eventObj); });\n };\n mc.on(eventName, callback);\n return function () { return mc.off(eventName, callback); };\n });\n };\n /**\n * @param {?} eventName\n * @return {?}\n */\n HammerGesturesPlugin.prototype.isCustomEvent = /**\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) { return this._config.events.indexOf(eventName) > -1; };\n HammerGesturesPlugin.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n HammerGesturesPlugin.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n { type: HammerGestureConfig, decorators: [{ type: _angular_core.Inject, args: [HAMMER_GESTURE_CONFIG,] },] },\n ]; };\n return HammerGesturesPlugin;\n}(EventManagerPlugin));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 */\nvar MODIFIER_KEYS = ['alt', 'control', 'meta', 'shift'];\nvar ɵ0$1 = function (event) { return event.altKey; };\nvar ɵ1$1 = function (event) { return event.ctrlKey; };\nvar ɵ2$1 = function (event) { return event.metaKey; };\nvar ɵ3 = function (event) { return event.shiftKey; };\nvar MODIFIER_KEY_GETTERS = {\n 'alt': ɵ0$1,\n 'control': ɵ1$1,\n 'meta': ɵ2$1,\n 'shift': ɵ3\n};\n/**\n * \\@experimental\n */\nvar KeyEventsPlugin = /** @class */ (function (_super) {\n __extends(KeyEventsPlugin, _super);\n function KeyEventsPlugin(doc) {\n return _super.call(this, doc) || this;\n }\n /**\n * @param {?} eventName\n * @return {?}\n */\n KeyEventsPlugin.prototype.supports = /**\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) { return KeyEventsPlugin.parseEventName(eventName) != null; };\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n KeyEventsPlugin.prototype.addEventListener = /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n function (element, eventName, handler) {\n var /** @type {?} */ parsedEvent = /** @type {?} */ ((KeyEventsPlugin.parseEventName(eventName)));\n var /** @type {?} */ 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 * @param {?} eventName\n * @return {?}\n */\n KeyEventsPlugin.parseEventName = /**\n * @param {?} eventName\n * @return {?}\n */\n function (eventName) {\n var /** @type {?} */ parts = eventName.toLowerCase().split('.');\n var /** @type {?} */ domEventName = parts.shift();\n if ((parts.length === 0) || !(domEventName === 'keydown' || domEventName === 'keyup')) {\n return null;\n }\n var /** @type {?} */ key = KeyEventsPlugin._normalizeKey(/** @type {?} */ ((parts.pop())));\n var /** @type {?} */ fullKey = '';\n MODIFIER_KEYS.forEach(function (modifierName) {\n var /** @type {?} */ index = parts.indexOf(modifierName);\n if (index > -1) {\n parts.splice(index, 1);\n fullKey += modifierName + '.';\n }\n });\n fullKey += key;\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 }\n var /** @type {?} */ result = {};\n result['domEventName'] = domEventName;\n result['fullKey'] = fullKey;\n return result;\n };\n /**\n * @param {?} event\n * @return {?}\n */\n KeyEventsPlugin.getEventFullKey = /**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n var /** @type {?} */ fullKey = '';\n var /** @type {?} */ key = getDOM().getEventKey(event);\n key = key.toLowerCase();\n if (key === ' ') {\n key = 'space'; // for readability\n }\n else if (key === '.') {\n key = 'dot'; // because '.' is used as a separator in event names\n }\n MODIFIER_KEYS.forEach(function (modifierName) {\n if (modifierName != key) {\n var /** @type {?} */ modifierGetter = MODIFIER_KEY_GETTERS[modifierName];\n if (modifierGetter(event)) {\n fullKey += modifierName + '.';\n }\n }\n });\n fullKey += key;\n return fullKey;\n };\n /**\n * @param {?} fullKey\n * @param {?} handler\n * @param {?} zone\n * @return {?}\n */\n KeyEventsPlugin.eventCallback = /**\n * @param {?} fullKey\n * @param {?} handler\n * @param {?} zone\n * @return {?}\n */\n function (fullKey, handler, zone) {\n return function (event /** TODO #9100 */) {\n if (KeyEventsPlugin.getEventFullKey(event) === fullKey) {\n zone.runGuarded(function () { return handler(event); });\n }\n };\n };\n /** @internal */\n /**\n * \\@internal\n * @param {?} keyName\n * @return {?}\n */\n KeyEventsPlugin._normalizeKey = /**\n * \\@internal\n * @param {?} keyName\n * @return {?}\n */\n function (keyName) {\n // TODO: switch to a Map if the mapping grows too much\n switch (keyName) {\n case 'esc':\n return 'escape';\n default:\n return keyName;\n }\n };\n KeyEventsPlugin.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n KeyEventsPlugin.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return KeyEventsPlugin;\n}(EventManagerPlugin));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * This helper class is used to get hold of an inert tree of DOM elements containing dirty HTML\n * that needs sanitizing.\n * Depending upon browser support we must use one of three strategies for doing this.\n * Support: Safari 10.x -> XHR strategy\n * Support: Firefox -> DomParser strategy\n * Default: InertDocument strategy\n */\nvar InertBodyHelper = /** @class */ (function () {\n function InertBodyHelper(defaultDoc, DOM) {\n this.defaultDoc = defaultDoc;\n this.DOM = DOM;\n var /** @type {?} */ inertDocument = this.DOM.createHtmlDocument();\n this.inertBodyElement = inertDocument.body;\n if (this.inertBodyElement == null) {\n // usually there should be only one body element in the document, but IE doesn't have any, so\n // we need to create one.\n var /** @type {?} */ inertHtml = this.DOM.createElement('html', inertDocument);\n this.inertBodyElement = this.DOM.createElement('body', inertDocument);\n this.DOM.appendChild(inertHtml, this.inertBodyElement);\n this.DOM.appendChild(inertDocument, inertHtml);\n }\n this.DOM.setInnerHTML(this.inertBodyElement, '<svg><g onload=\"this.parentNode.remove()\"></g></svg>');\n if (this.inertBodyElement.querySelector && !this.inertBodyElement.querySelector('svg')) {\n // We just hit the Safari 10.1 bug - which allows JS to run inside the SVG G element\n // so use the XHR strategy.\n this.getInertBodyElement = this.getInertBodyElement_XHR;\n return;\n }\n this.DOM.setInnerHTML(this.inertBodyElement, '<svg><p><style><img src=\"</style><img src=x onerror=alert(1)//\">');\n if (this.inertBodyElement.querySelector && this.inertBodyElement.querySelector('svg img')) {\n // We just hit the Firefox bug - which prevents the inner img JS from being sanitized\n // so use the DOMParser strategy, if it is available.\n // If the DOMParser is not available then we are not in Firefox (Server/WebWorker?) so we\n // fall through to the default strategy below.\n if (isDOMParserAvailable()) {\n this.getInertBodyElement = this.getInertBodyElement_DOMParser;\n return;\n }\n }\n // None of the bugs were hit so it is safe for us to use the default InertDocument strategy\n this.getInertBodyElement = this.getInertBodyElement_InertDocument;\n }\n /**\n * Use XHR to create and fill an inert body element (on Safari 10.1)\n * See\n * https://github.com/cure53/DOMPurify/blob/a992d3a75031cb8bb032e5ea8399ba972bdf9a65/src/purify.js#L439-L449\n * @param {?} html\n * @return {?}\n */\n InertBodyHelper.prototype.getInertBodyElement_XHR = /**\n * Use XHR to create and fill an inert body element (on Safari 10.1)\n * See\n * https://github.com/cure53/DOMPurify/blob/a992d3a75031cb8bb032e5ea8399ba972bdf9a65/src/purify.js#L439-L449\n * @param {?} html\n * @return {?}\n */\n function (html) {\n // We add these extra elements to ensure that the rest of the content is parsed as expected\n // e.g. leading whitespace is maintained and tags like `<meta>` do not get hoisted to the\n // `<head>` tag.\n html = '<body><remove></remove>' + html + '</body>';\n try {\n html = encodeURI(html);\n }\n catch (/** @type {?} */ e) {\n return null;\n }\n var /** @type {?} */ xhr = new XMLHttpRequest();\n xhr.responseType = 'document';\n xhr.open('GET', 'data:text/html;charset=utf-8,' + html, false);\n xhr.send(null);\n var /** @type {?} */ body = xhr.response.body;\n body.removeChild(/** @type {?} */ ((body.firstChild)));\n return body;\n };\n /**\n * Use DOMParser to create and fill an inert body element (on Firefox)\n * See https://github.com/cure53/DOMPurify/releases/tag/0.6.7\n *\n * @param {?} html\n * @return {?}\n */\n InertBodyHelper.prototype.getInertBodyElement_DOMParser = /**\n * Use DOMParser to create and fill an inert body element (on Firefox)\n * See https://github.com/cure53/DOMPurify/releases/tag/0.6.7\n *\n * @param {?} html\n * @return {?}\n */\n function (html) {\n // We add these extra elements to ensure that the rest of the content is parsed as expected\n // e.g. leading whitespace is maintained and tags like `<meta>` do not get hoisted to the\n // `<head>` tag.\n html = '<body><remove></remove>' + html + '</body>';\n try {\n var /** @type {?} */ body = /** @type {?} */ (new (/** @type {?} */ (window))\n .DOMParser()\n .parseFromString(html, 'text/html')\n .body);\n body.removeChild(/** @type {?} */ ((body.firstChild)));\n return body;\n }\n catch (/** @type {?} */ e) {\n return null;\n }\n };\n /**\n * Use an HTML5 `template` element, if supported, or an inert body element created via\n * `createHtmlDocument` to create and fill an inert DOM element.\n * This is the default sane strategy to use if the browser does not require one of the specialised\n * strategies above.\n * @param {?} html\n * @return {?}\n */\n InertBodyHelper.prototype.getInertBodyElement_InertDocument = /**\n * Use an HTML5 `template` element, if supported, or an inert body element created via\n * `createHtmlDocument` to create and fill an inert DOM element.\n * This is the default sane strategy to use if the browser does not require one of the specialised\n * strategies above.\n * @param {?} html\n * @return {?}\n */\n function (html) {\n // Prefer using <template> element if supported.\n var /** @type {?} */ templateEl = this.DOM.createElement('template');\n if ('content' in templateEl) {\n this.DOM.setInnerHTML(templateEl, html);\n return templateEl;\n }\n this.DOM.setInnerHTML(this.inertBodyElement, html);\n // Support: IE 9-11 only\n // strip custom-namespaced attributes on IE<=11\n if (this.defaultDoc.documentMode) {\n this.stripCustomNsAttrs(this.inertBodyElement);\n }\n return this.inertBodyElement;\n };\n /**\n * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1'\n * attribute to declare ns1 namespace and prefixes the attribute with 'ns1' (e.g.\n * 'ns1:xlink:foo').\n *\n * This is undesirable since we don't want to allow any of these custom attributes. This method\n * strips them all.\n * @param {?} el\n * @return {?}\n */\n InertBodyHelper.prototype.stripCustomNsAttrs = /**\n * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1'\n * attribute to declare ns1 namespace and prefixes the attribute with 'ns1' (e.g.\n * 'ns1:xlink:foo').\n *\n * This is undesirable since we don't want to allow any of these custom attributes. This method\n * strips them all.\n * @param {?} el\n * @return {?}\n */\n function (el) {\n var _this = this;\n this.DOM.attributeMap(el).forEach(function (_, attrName) {\n if (attrName === 'xmlns:ns1' || attrName.indexOf('ns1:') === 0) {\n _this.DOM.removeAttribute(el, attrName);\n }\n });\n for (var _i = 0, _a = this.DOM.childNodesAsList(el); _i < _a.length; _i++) {\n var n = _a[_i];\n if (this.DOM.isElementNode(n))\n this.stripCustomNsAttrs(/** @type {?} */ (n));\n }\n };\n return InertBodyHelper;\n}());\n/**\n * We need to determine whether the DOMParser exists in the global context.\n * The try-catch is because, on some browsers, trying to access this property\n * on window can actually throw an error.\n *\n * @suppress {uselessCode}\n * @return {?}\n */\nfunction isDOMParserAvailable() {\n try {\n return !!(/** @type {?} */ (window)).DOMParser;\n }\n catch (/** @type {?} */ e) {\n return false;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * This regular expression matches a subset of URLs that will not cause script\n * execution if used in URL context within a HTML document. Specifically, this\n * regular expression matches if (comment from here on and regex copied from\n * Soy's EscapingConventions):\n * (1) Either a protocol in a whitelist (http, https, mailto or ftp).\n * (2) or no protocol. A protocol must be followed by a colon. The below\n * allows that by allowing colons only after one of the characters [/?#].\n * A colon after a hash (#) must be in the fragment.\n * Otherwise, a colon after a (?) must be in a query.\n * Otherwise, a colon after a single solidus (/) must be in a path.\n * Otherwise, a colon after a double solidus (//) must be in the authority\n * (before port).\n *\n * The pattern disallows &, used in HTML entity declarations before\n * one of the characters in [/?#]. This disallows HTML entities used in the\n * protocol name, which should never happen, e.g. \"http\" for \"http\".\n * It also disallows HTML entities in the first path part of a relative path,\n * e.g. \"foo<bar/baz\". Our existing escaping functions should not produce\n * that. More importantly, it disallows masking of a colon,\n * e.g. \"javascript:...\".\n *\n * This regular expression was taken from the Closure sanitization library.\n */\nvar SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n */\nvar DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\\/]+=*$/i;\n/**\n * @param {?} url\n * @return {?}\n */\nfunction sanitizeUrl(url) {\n url = String(url);\n if (url.match(SAFE_URL_PATTERN) || url.match(DATA_URL_PATTERN))\n return url;\n if (_angular_core.isDevMode()) {\n getDOM().log(\"WARNING: sanitizing unsafe URL value \" + url + \" (see http://g.co/ng/security#xss)\");\n }\n return 'unsafe:' + url;\n}\n/**\n * @param {?} srcset\n * @return {?}\n */\nfunction sanitizeSrcset(srcset) {\n srcset = String(srcset);\n return srcset.split(',').map(function (srcset) { return sanitizeUrl(srcset.trim()); }).join(', ');\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * @param {?} tags\n * @return {?}\n */\nfunction tagSet(tags) {\n var /** @type {?} */ res = {};\n for (var _i = 0, _a = tags.split(','); _i < _a.length; _i++) {\n var t = _a[_i];\n res[t] = true;\n }\n return res;\n}\n/**\n * @param {...?} sets\n * @return {?}\n */\nfunction merge() {\n var sets = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n sets[_i] = arguments[_i];\n }\n var /** @type {?} */ res = {};\n for (var _a = 0, sets_1 = sets; _a < sets_1.length; _a++) {\n var s = sets_1[_a];\n for (var /** @type {?} */ v in s) {\n if (s.hasOwnProperty(v))\n res[v] = true;\n }\n }\n return res;\n}\n// Good source of info about elements and attributes\n// http://dev.w3.org/html5/spec/Overview.html#semantics\n// http://simon.html5.org/html-elements\n// Safe Void Elements - HTML5\n// http://dev.w3.org/html5/spec/Overview.html#void-elements\nvar VOID_ELEMENTS = tagSet('area,br,col,hr,img,wbr');\n// Elements that you can, intentionally, leave open (and which close themselves)\n// http://dev.w3.org/html5/spec/Overview.html#optional-tags\nvar OPTIONAL_END_TAG_BLOCK_ELEMENTS = tagSet('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr');\nvar OPTIONAL_END_TAG_INLINE_ELEMENTS = tagSet('rp,rt');\nvar OPTIONAL_END_TAG_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, OPTIONAL_END_TAG_BLOCK_ELEMENTS);\n// Safe Block Elements - HTML5\nvar BLOCK_ELEMENTS = merge(OPTIONAL_END_TAG_BLOCK_ELEMENTS, tagSet('address,article,' +\n 'aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' +\n 'h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul'));\n// Inline Elements - HTML5\nvar INLINE_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, tagSet('a,abbr,acronym,audio,b,' +\n 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,' +\n 'samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video'));\nvar VALID_ELEMENTS = merge(VOID_ELEMENTS, BLOCK_ELEMENTS, INLINE_ELEMENTS, OPTIONAL_END_TAG_ELEMENTS);\n// Attributes that have href and hence need to be sanitized\nvar URI_ATTRS = tagSet('background,cite,href,itemtype,longdesc,poster,src,xlink:href');\n// Attributes that have special href set hence need to be sanitized\nvar SRCSET_ATTRS = tagSet('srcset');\nvar HTML_ATTRS = tagSet('abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,' +\n 'compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,' +\n 'ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,' +\n 'scope,scrolling,shape,size,sizes,span,srclang,start,summary,tabindex,target,title,translate,type,usemap,' +\n 'valign,value,vspace,width');\n// NB: This currently consciously doesn't support SVG. SVG sanitization has had several security\n// issues in the past, so it seems safer to leave it out if possible. If support for binding SVG via\n// innerHTML is required, SVG attributes should be added here.\n// NB: Sanitization does not allow <form> elements or other active elements (<button> etc). Those\n// can be sanitized, but they increase security surface area without a legitimate use case, so they\n// are left out here.\nvar VALID_ATTRS = merge(URI_ATTRS, SRCSET_ATTRS, HTML_ATTRS);\n/**\n * SanitizingHtmlSerializer serializes a DOM fragment, stripping out any unsafe elements and unsafe\n * attributes.\n */\nvar SanitizingHtmlSerializer = /** @class */ (function () {\n function SanitizingHtmlSerializer() {\n this.sanitizedSomething = false;\n this.buf = [];\n this.DOM = getDOM();\n }\n /**\n * @param {?} el\n * @return {?}\n */\n SanitizingHtmlSerializer.prototype.sanitizeChildren = /**\n * @param {?} el\n * @return {?}\n */\n function (el) {\n // This cannot use a TreeWalker, as it has to run on Angular's various DOM adapters.\n // However this code never accesses properties off of `document` before deleting its contents\n // again, so it shouldn't be vulnerable to DOM clobbering.\n var /** @type {?} */ current = /** @type {?} */ ((this.DOM.firstChild(el)));\n while (current) {\n if (this.DOM.isElementNode(current)) {\n this.startElement(/** @type {?} */ (current));\n }\n else if (this.DOM.isTextNode(current)) {\n this.chars(/** @type {?} */ ((this.DOM.nodeValue(current))));\n }\n else {\n // Strip non-element, non-text nodes.\n this.sanitizedSomething = true;\n }\n if (this.DOM.firstChild(current)) {\n current = /** @type {?} */ ((this.DOM.firstChild(current)));\n continue;\n }\n while (current) {\n // Leaving the element. Walk up and to the right, closing tags as we go.\n if (this.DOM.isElementNode(current)) {\n this.endElement(/** @type {?} */ (current));\n }\n var /** @type {?} */ next = this.checkClobberedElement(current, /** @type {?} */ ((this.DOM.nextSibling(current))));\n if (next) {\n current = next;\n break;\n }\n current = this.checkClobberedElement(current, /** @type {?} */ ((this.DOM.parentElement(current))));\n }\n }\n return this.buf.join('');\n };\n /**\n * @param {?} element\n * @return {?}\n */\n SanitizingHtmlSerializer.prototype.startElement = /**\n * @param {?} element\n * @return {?}\n */\n function (element) {\n var _this = this;\n var /** @type {?} */ tagName = this.DOM.nodeName(element).toLowerCase();\n if (!VALID_ELEMENTS.hasOwnProperty(tagName)) {\n this.sanitizedSomething = true;\n return;\n }\n this.buf.push('<');\n this.buf.push(tagName);\n this.DOM.attributeMap(element).forEach(function (value, attrName) {\n var /** @type {?} */ lower = attrName.toLowerCase();\n if (!VALID_ATTRS.hasOwnProperty(lower)) {\n _this.sanitizedSomething = true;\n return;\n }\n // TODO(martinprobst): Special case image URIs for data:image/...\n if (URI_ATTRS[lower])\n value = sanitizeUrl(value);\n if (SRCSET_ATTRS[lower])\n value = sanitizeSrcset(value);\n _this.buf.push(' ');\n _this.buf.push(attrName);\n _this.buf.push('=\"');\n _this.buf.push(encodeEntities(value));\n _this.buf.push('\"');\n });\n this.buf.push('>');\n };\n /**\n * @param {?} current\n * @return {?}\n */\n SanitizingHtmlSerializer.prototype.endElement = /**\n * @param {?} current\n * @return {?}\n */\n function (current) {\n var /** @type {?} */ tagName = this.DOM.nodeName(current).toLowerCase();\n if (VALID_ELEMENTS.hasOwnProperty(tagName) && !VOID_ELEMENTS.hasOwnProperty(tagName)) {\n this.buf.push('</');\n this.buf.push(tagName);\n this.buf.push('>');\n }\n };\n /**\n * @param {?} chars\n * @return {?}\n */\n SanitizingHtmlSerializer.prototype.chars = /**\n * @param {?} chars\n * @return {?}\n */\n function (chars) { this.buf.push(encodeEntities(chars)); };\n /**\n * @param {?} node\n * @param {?} nextNode\n * @return {?}\n */\n SanitizingHtmlSerializer.prototype.checkClobberedElement = /**\n * @param {?} node\n * @param {?} nextNode\n * @return {?}\n */\n function (node, nextNode) {\n if (nextNode && this.DOM.contains(node, nextNode)) {\n throw new Error(\"Failed to sanitize html because the element is clobbered: \" + this.DOM.getOuterHTML(node));\n }\n return nextNode;\n };\n return SanitizingHtmlSerializer;\n}());\n// Regular Expressions for parsing tags and attributes\nvar SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n// ! to ~ is the ASCII range.\nvar NON_ALPHANUMERIC_REGEXP = /([^\\#-~ |!])/g;\n/**\n * Escapes all potentially dangerous characters, so that the\n * resulting string can be safely inserted into attribute or\n * element text.\n * @param {?} value\n * @return {?}\n */\nfunction encodeEntities(value) {\n return value.replace(/&/g, '&')\n .replace(SURROGATE_PAIR_REGEXP, function (match) {\n var /** @type {?} */ hi = match.charCodeAt(0);\n var /** @type {?} */ low = match.charCodeAt(1);\n return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\n })\n .replace(NON_ALPHANUMERIC_REGEXP, function (match) { return '&#' + match.charCodeAt(0) + ';'; })\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\nvar inertBodyHelper;\n/**\n * Sanitizes the given unsafe, untrusted HTML fragment, and returns HTML text that is safe to add to\n * the DOM in a browser environment.\n * @param {?} defaultDoc\n * @param {?} unsafeHtmlInput\n * @return {?}\n */\nfunction sanitizeHtml(defaultDoc, unsafeHtmlInput) {\n var /** @type {?} */ DOM = getDOM();\n var /** @type {?} */ inertBodyElement = null;\n try {\n inertBodyHelper = inertBodyHelper || new InertBodyHelper(defaultDoc, DOM);\n // Make sure unsafeHtml is actually a string (TypeScript types are not enforced at runtime).\n var /** @type {?} */ unsafeHtml = unsafeHtmlInput ? String(unsafeHtmlInput) : '';\n inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);\n // mXSS protection. Repeatedly parse the document to make sure it stabilizes, so that a browser\n // trying to auto-correct incorrect HTML cannot cause formerly inert HTML to become dangerous.\n var /** @type {?} */ mXSSAttempts = 5;\n var /** @type {?} */ parsedHtml = unsafeHtml;\n do {\n if (mXSSAttempts === 0) {\n throw new Error('Failed to sanitize html because the input is unstable');\n }\n mXSSAttempts--;\n unsafeHtml = parsedHtml;\n parsedHtml = DOM.getInnerHTML(inertBodyElement);\n inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);\n } while (unsafeHtml !== parsedHtml);\n var /** @type {?} */ sanitizer = new SanitizingHtmlSerializer();\n var /** @type {?} */ safeHtml = sanitizer.sanitizeChildren(DOM.getTemplateContent(inertBodyElement) || inertBodyElement);\n if (_angular_core.isDevMode() && sanitizer.sanitizedSomething) {\n DOM.log('WARNING: sanitizing HTML stripped some content (see http://g.co/ng/security#xss).');\n }\n return safeHtml;\n }\n finally {\n // In case anything goes wrong, clear out inertElement to reset the entire DOM structure.\n if (inertBodyElement) {\n var /** @type {?} */ parent_1 = DOM.getTemplateContent(inertBodyElement) || inertBodyElement;\n for (var _i = 0, _a = DOM.childNodesAsList(parent_1); _i < _a.length; _i++) {\n var child = _a[_i];\n DOM.removeChild(parent_1, child);\n }\n }\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * Regular expression for safe style values.\n *\n * Quotes (\" and ') are allowed, but a check must be done elsewhere to ensure they're balanced.\n *\n * ',' allows multiple values to be assigned to the same property (e.g. background-attachment or\n * font-family) and hence could allow multiple values to get injected, but that should pose no risk\n * of XSS.\n *\n * The function expression checks only for XSS safety, not for CSS validity.\n *\n * This regular expression was taken from the Closure sanitization library, and augmented for\n * transformation values.\n */\nvar VALUES = '[-,.\"\\'%_!# a-zA-Z0-9]+';\nvar TRANSFORMATION_FNS = '(?:matrix|translate|scale|rotate|skew|perspective)(?:X|Y|3d)?';\nvar COLOR_FNS = '(?:rgb|hsl)a?';\nvar GRADIENTS = '(?:repeating-)?(?:linear|radial)-gradient';\nvar CSS3_FNS = '(?:calc|attr)';\nvar FN_ARGS = '\\\\([-0-9.%, #a-zA-Z]+\\\\)';\nvar SAFE_STYLE_VALUE = new RegExp(\"^(\" + VALUES + \"|\" +\n (\"(?:\" + TRANSFORMATION_FNS + \"|\" + COLOR_FNS + \"|\" + GRADIENTS + \"|\" + CSS3_FNS + \")\") +\n (FN_ARGS + \")$\"), 'g');\n/**\n * Matches a `url(...)` value with an arbitrary argument as long as it does\n * not contain parentheses.\n *\n * The URL value still needs to be sanitized separately.\n *\n * `url(...)` values are a very common use case, e.g. for `background-image`. With carefully crafted\n * CSS style rules, it is possible to construct an information leak with `url` values in CSS, e.g.\n * by observing whether scroll bars are displayed, or character ranges used by a font face\n * definition.\n *\n * Angular only allows binding CSS values (as opposed to entire CSS rules), so it is unlikely that\n * binding a URL value without further cooperation from the page will cause an information leak, and\n * if so, it is just a leak, not a full blown XSS vulnerability.\n *\n * Given the common use case, low likelihood of attack vector, and low impact of an attack, this\n * code is permissive and allows URLs that sanitize otherwise.\n */\nvar URL_RE = /^url\\(([^)]+)\\)$/;\n/**\n * Checks that quotes (\" and ') are properly balanced inside a string. Assumes\n * that neither escape (\\) nor any other character that could result in\n * breaking out of a string parsing context are allowed;\n * see http://www.w3.org/TR/css3-syntax/#string-token-diagram.\n *\n * This code was taken from the Closure sanitization library.\n * @param {?} value\n * @return {?}\n */\nfunction hasBalancedQuotes(value) {\n var /** @type {?} */ outsideSingle = true;\n var /** @type {?} */ outsideDouble = true;\n for (var /** @type {?} */ i = 0; i < value.length; i++) {\n var /** @type {?} */ c = value.charAt(i);\n if (c === '\\'' && outsideDouble) {\n outsideSingle = !outsideSingle;\n }\n else if (c === '\"' && outsideSingle) {\n outsideDouble = !outsideDouble;\n }\n }\n return outsideSingle && outsideDouble;\n}\n/**\n * Sanitizes the given untrusted CSS style property value (i.e. not an entire object, just a single\n * value) and returns a value that is safe to use in a browser environment.\n * @param {?} value\n * @return {?}\n */\nfunction sanitizeStyle(value) {\n value = String(value).trim(); // Make sure it's actually a string.\n if (!value)\n return '';\n // Single url(...) values are supported, but only for URLs that sanitize cleanly. See above for\n // reasoning behind this.\n var /** @type {?} */ urlMatch = value.match(URL_RE);\n if ((urlMatch && sanitizeUrl(urlMatch[1]) === urlMatch[1]) ||\n value.match(SAFE_STYLE_VALUE) && hasBalancedQuotes(value)) {\n return value; // Safe style values.\n }\n if (_angular_core.isDevMode()) {\n getDOM().log(\"WARNING: sanitizing unsafe style value \" + value + \" (see http://g.co/ng/security#xss).\");\n }\n return 'unsafe';\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * Marker interface for a value that's safe to use in a particular context.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as HTML.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as style (CSS).\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as JavaScript.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as a URL linking to a document.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as a URL to load executable code from.\n *\n * \\@stable\n * @record\n */\n\n/**\n * DomSanitizer helps preventing Cross Site Scripting Security bugs (XSS) by sanitizing\n * values to be safe to use in the different DOM contexts.\n *\n * For example, when binding a URL in an `<a [href]=\"someValue\">` hyperlink, `someValue` will be\n * sanitized so that an attacker cannot inject e.g. a `javascript:` URL that would execute code on\n * the website.\n *\n * In specific situations, it might be necessary to disable sanitization, for example if the\n * application genuinely needs to produce a `javascript:` style link with a dynamic value in it.\n * Users can bypass security by constructing a value with one of the `bypassSecurityTrust...`\n * methods, and then binding to that value from the template.\n *\n * These situations should be very rare, and extraordinary care must be taken to avoid creating a\n * Cross Site Scripting (XSS) security bug!\n *\n * When using `bypassSecurityTrust...`, make sure to call the method as early as possible and as\n * close as possible to the source of the value, to make it easy to verify no security bug is\n * created by its use.\n *\n * It is not required (and not recommended) to bypass security if the value is safe, e.g. a URL that\n * does not start with a suspicious protocol, or an HTML snippet that does not contain dangerous\n * code. The sanitizer leaves safe values intact.\n *\n * \\@security Calling any of the `bypassSecurityTrust...` APIs disables Angular's built-in\n * sanitization for the value passed in. Carefully check and audit all values and code paths going\n * into this call. Make sure any user data is appropriately escaped for this security context.\n * For more detail, see the [Security Guide](http://g.co/ng/security).\n *\n * \\@stable\n * @abstract\n */\nvar DomSanitizer = /** @class */ (function () {\n function DomSanitizer() {\n }\n return DomSanitizer;\n}());\nvar DomSanitizerImpl = /** @class */ (function (_super) {\n __extends(DomSanitizerImpl, _super);\n function DomSanitizerImpl(_doc) {\n var _this = _super.call(this) || this;\n _this._doc = _doc;\n return _this;\n }\n /**\n * @param {?} ctx\n * @param {?} value\n * @return {?}\n */\n DomSanitizerImpl.prototype.sanitize = /**\n * @param {?} ctx\n * @param {?} value\n * @return {?}\n */\n function (ctx, value) {\n if (value == null)\n return null;\n switch (ctx) {\n case _angular_core.SecurityContext.NONE:\n return /** @type {?} */ (value);\n case _angular_core.SecurityContext.HTML:\n if (value instanceof SafeHtmlImpl)\n return value.changingThisBreaksApplicationSecurity;\n this.checkNotSafeValue(value, 'HTML');\n return sanitizeHtml(this._doc, String(value));\n case _angular_core.SecurityContext.STYLE:\n if (value instanceof SafeStyleImpl)\n return value.changingThisBreaksApplicationSecurity;\n this.checkNotSafeValue(value, 'Style');\n return sanitizeStyle(/** @type {?} */ (value));\n case _angular_core.SecurityContext.SCRIPT:\n if (value instanceof SafeScriptImpl)\n return value.changingThisBreaksApplicationSecurity;\n this.checkNotSafeValue(value, 'Script');\n throw new Error('unsafe value used in a script context');\n case _angular_core.SecurityContext.URL:\n if (value instanceof SafeResourceUrlImpl || value instanceof SafeUrlImpl) {\n // Allow resource URLs in URL contexts, they are strictly more trusted.\n return value.changingThisBreaksApplicationSecurity;\n }\n this.checkNotSafeValue(value, 'URL');\n return sanitizeUrl(String(value));\n case _angular_core.SecurityContext.RESOURCE_URL:\n if (value instanceof SafeResourceUrlImpl) {\n return value.changingThisBreaksApplicationSecurity;\n }\n this.checkNotSafeValue(value, 'ResourceURL');\n throw new Error('unsafe value used in a resource URL context (see http://g.co/ng/security#xss)');\n default:\n throw new Error(\"Unexpected SecurityContext \" + ctx + \" (see http://g.co/ng/security#xss)\");\n }\n };\n /**\n * @param {?} value\n * @param {?} expectedType\n * @return {?}\n */\n DomSanitizerImpl.prototype.checkNotSafeValue = /**\n * @param {?} value\n * @param {?} expectedType\n * @return {?}\n */\n function (value, expectedType) {\n if (value instanceof SafeValueImpl) {\n throw new Error(\"Required a safe \" + expectedType + \", got a \" + value.getTypeName() + \" \" +\n \"(see http://g.co/ng/security#xss)\");\n }\n };\n /**\n * @param {?} value\n * @return {?}\n */\n DomSanitizerImpl.prototype.bypassSecurityTrustHtml = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return new SafeHtmlImpl(value); };\n /**\n * @param {?} value\n * @return {?}\n */\n DomSanitizerImpl.prototype.bypassSecurityTrustStyle = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return new SafeStyleImpl(value); };\n /**\n * @param {?} value\n * @return {?}\n */\n DomSanitizerImpl.prototype.bypassSecurityTrustScript = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return new SafeScriptImpl(value); };\n /**\n * @param {?} value\n * @return {?}\n */\n DomSanitizerImpl.prototype.bypassSecurityTrustUrl = /**\n * @param {?} value\n * @return {?}\n */\n function (value) { return new SafeUrlImpl(value); };\n /**\n * @param {?} value\n * @return {?}\n */\n DomSanitizerImpl.prototype.bypassSecurityTrustResourceUrl = /**\n * @param {?} value\n * @return {?}\n */\n function (value) {\n return new SafeResourceUrlImpl(value);\n };\n DomSanitizerImpl.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n DomSanitizerImpl.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: _angular_core.Inject, args: [DOCUMENT$1,] },] },\n ]; };\n return DomSanitizerImpl;\n}(DomSanitizer));\n/**\n * @abstract\n */\nvar SafeValueImpl = /** @class */ (function () {\n function SafeValueImpl(changingThisBreaksApplicationSecurity) {\n // empty\n this.changingThisBreaksApplicationSecurity = changingThisBreaksApplicationSecurity;\n }\n /**\n * @return {?}\n */\n SafeValueImpl.prototype.toString = /**\n * @return {?}\n */\n function () {\n return \"SafeValue must use [property]=binding: \" + this.changingThisBreaksApplicationSecurity +\n \" (see http://g.co/ng/security#xss)\";\n };\n return SafeValueImpl;\n}());\nvar SafeHtmlImpl = /** @class */ (function (_super) {\n __extends(SafeHtmlImpl, _super);\n function SafeHtmlImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @return {?}\n */\n SafeHtmlImpl.prototype.getTypeName = /**\n * @return {?}\n */\n function () { return 'HTML'; };\n return SafeHtmlImpl;\n}(SafeValueImpl));\nvar SafeStyleImpl = /** @class */ (function (_super) {\n __extends(SafeStyleImpl, _super);\n function SafeStyleImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @return {?}\n */\n SafeStyleImpl.prototype.getTypeName = /**\n * @return {?}\n */\n function () { return 'Style'; };\n return SafeStyleImpl;\n}(SafeValueImpl));\nvar SafeScriptImpl = /** @class */ (function (_super) {\n __extends(SafeScriptImpl, _super);\n function SafeScriptImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @return {?}\n */\n SafeScriptImpl.prototype.getTypeName = /**\n * @return {?}\n */\n function () { return 'Script'; };\n return SafeScriptImpl;\n}(SafeValueImpl));\nvar SafeUrlImpl = /** @class */ (function (_super) {\n __extends(SafeUrlImpl, _super);\n function SafeUrlImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @return {?}\n */\n SafeUrlImpl.prototype.getTypeName = /**\n * @return {?}\n */\n function () { return 'URL'; };\n return SafeUrlImpl;\n}(SafeValueImpl));\nvar SafeResourceUrlImpl = /** @class */ (function (_super) {\n __extends(SafeResourceUrlImpl, _super);\n function SafeResourceUrlImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @return {?}\n */\n SafeResourceUrlImpl.prototype.getTypeName = /**\n * @return {?}\n */\n function () { return 'ResourceURL'; };\n return SafeResourceUrlImpl;\n}(SafeValueImpl));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 */\nvar INTERNAL_BROWSER_PLATFORM_PROVIDERS = [\n { provide: _angular_core.PLATFORM_ID, useValue: _angular_common.ɵPLATFORM_BROWSER_ID },\n { provide: _angular_core.PLATFORM_INITIALIZER, useValue: initDomAdapter, multi: true },\n { provide: _angular_common.PlatformLocation, useClass: BrowserPlatformLocation, deps: [DOCUMENT$1] },\n { provide: DOCUMENT$1, useFactory: _document, deps: [] },\n];\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](http://g.co/ng/security).\n * \\@experimental\n */\nvar BROWSER_SANITIZATION_PROVIDERS = [\n { provide: _angular_core.Sanitizer, useExisting: DomSanitizer },\n { provide: DomSanitizer, useClass: DomSanitizerImpl, deps: [DOCUMENT$1] },\n];\n/**\n * \\@stable\n */\nvar platformBrowser = _angular_core.createPlatformFactory(_angular_core.platformCore, 'browser', INTERNAL_BROWSER_PLATFORM_PROVIDERS);\n/**\n * @return {?}\n */\nfunction initDomAdapter() {\n BrowserDomAdapter.makeCurrent();\n BrowserGetTestability.init();\n}\n/**\n * @return {?}\n */\nfunction errorHandler() {\n return new _angular_core.ErrorHandler();\n}\n/**\n * @return {?}\n */\nfunction _document() {\n return document;\n}\n/**\n * The ng module for the browser.\n *\n * \\@stable\n */\nvar BrowserModule = /** @class */ (function () {\n function BrowserModule(parentModule) {\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 application to transition from a server-rendered app, if\n * one is present on the page. The specified parameters must include an application id,\n * which must match between the client and server applications.\n *\n * @experimental\n */\n /**\n * Configures a browser-based application to transition from a server-rendered app, if\n * one is present on the page. The specified parameters must include an application id,\n * which must match between the client and server applications.\n *\n * \\@experimental\n * @param {?} params\n * @return {?}\n */\n BrowserModule.withServerTransition = /**\n * Configures a browser-based application to transition from a server-rendered app, if\n * one is present on the page. The specified parameters must include an application id,\n * which must match between the client and server applications.\n *\n * \\@experimental\n * @param {?} params\n * @return {?}\n */\n function (params) {\n return {\n ngModule: BrowserModule,\n providers: [\n { provide: _angular_core.APP_ID, useValue: params.appId },\n { provide: TRANSITION_ID, useExisting: _angular_core.APP_ID },\n SERVER_TRANSITION_PROVIDERS,\n ],\n };\n };\n BrowserModule.decorators = [\n { type: _angular_core.NgModule, args: [{\n providers: [\n BROWSER_SANITIZATION_PROVIDERS,\n { provide: _angular_core.ErrorHandler, useFactory: errorHandler, deps: [] },\n { provide: EVENT_MANAGER_PLUGINS, useClass: DomEventsPlugin, multi: true },\n { provide: EVENT_MANAGER_PLUGINS, useClass: KeyEventsPlugin, multi: true },\n { provide: EVENT_MANAGER_PLUGINS, useClass: HammerGesturesPlugin, multi: true },\n { provide: HAMMER_GESTURE_CONFIG, useClass: HammerGestureConfig },\n DomRendererFactory2,\n { provide: _angular_core.RendererFactory2, useExisting: DomRendererFactory2 },\n { provide: SharedStylesHost, useExisting: DomSharedStylesHost },\n DomSharedStylesHost,\n _angular_core.Testability,\n EventManager,\n ELEMENT_PROBE_PROVIDERS,\n Meta,\n Title,\n ],\n exports: [_angular_common.CommonModule, _angular_core.ApplicationModule]\n },] },\n ];\n /** @nocollapse */\n BrowserModule.ctorParameters = function () { return [\n { type: BrowserModule, decorators: [{ type: _angular_core.Optional }, { type: _angular_core.SkipSelf },] },\n ]; };\n return BrowserModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 */\nvar win = typeof window !== 'undefined' && window || /** @type {?} */ ({});\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 */\nvar ChangeDetectionPerfRecord = /** @class */ (function () {\n function ChangeDetectionPerfRecord(msPerTick, numTicks) {\n this.msPerTick = msPerTick;\n this.numTicks = numTicks;\n }\n return ChangeDetectionPerfRecord;\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 */\nvar AngularProfiler = /** @class */ (function () {\n function AngularProfiler(ref) {\n this.appRef = ref.injector.get(_angular_core.ApplicationRef);\n }\n // tslint:disable:no-console\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 * 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 * @param {?} config\n * @return {?}\n */\n AngularProfiler.prototype.timeChangeDetection = /**\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 * @param {?} config\n * @return {?}\n */\n function (config) {\n var /** @type {?} */ record = config && config['record'];\n var /** @type {?} */ profileName = 'Change Detection';\n // Profiler is not available in Android browsers, nor in IE 9 without dev tools opened\n var /** @type {?} */ isProfilerAvailable = win.console.profile != null;\n if (record && isProfilerAvailable) {\n win.console.profile(profileName);\n }\n var /** @type {?} */ start = getDOM().performanceNow();\n var /** @type {?} */ numTicks = 0;\n while (numTicks < 5 || (getDOM().performanceNow() - start) < 500) {\n this.appRef.tick();\n numTicks++;\n }\n var /** @type {?} */ end = getDOM().performanceNow();\n if (record && isProfilerAvailable) {\n // need to cast to <any> because type checker thinks there's no argument\n // while in fact there is:\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/Console/profileEnd\n (/** @type {?} */ (win.console.profileEnd))(profileName);\n }\n var /** @type {?} */ msPerTick = (end - start) / numTicks;\n win.console.log(\"ran \" + numTicks + \" change detection cycles\");\n win.console.log(msPerTick.toFixed(2) + \" ms per check\");\n return new ChangeDetectionPerfRecord(msPerTick, numTicks);\n };\n return AngularProfiler;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 */\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 * \\@experimental All debugging apis are currently experimental.\n * @template T\n * @param {?} ref\n * @return {?}\n */\nfunction enableDebugTools(ref) {\n exportNgVar(PROFILER_GLOBAL_NAME, new AngularProfiler(ref));\n return ref;\n}\n/**\n * Disables Angular tools.\n *\n * \\@experimental All debugging apis are currently experimental.\n * @return {?}\n */\nfunction disableDebugTools() {\n exportNgVar(PROFILER_GLOBAL_NAME, null);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * @param {?} text\n * @return {?}\n */\nfunction escapeHtml(text) {\n var /** @type {?} */ escapedText = {\n '&': '&a;',\n '\"': '&q;',\n '\\'': '&s;',\n '<': '&l;',\n '>': '&g;',\n };\n return text.replace(/[&\"'<>]/g, function (s) { return escapedText[s]; });\n}\n/**\n * @param {?} text\n * @return {?}\n */\nfunction unescapeHtml(text) {\n var /** @type {?} */ unescapedText = {\n '&a;': '&',\n '&q;': '\"',\n '&s;': '\\'',\n '&l;': '<',\n '&g;': '>',\n };\n return text.replace(/&[^;]+;/g, function (s) { return unescapedText[s]; });\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 * \\@experimental\n * @template T\n * @param {?} key\n * @return {?}\n */\nfunction makeStateKey(key) {\n return /** @type {?} */ (key);\n}\n/**\n * A key value store that is transferred from the application on the server side to the application\n * on the client side.\n *\n * `TransferState` will be available as an injectable token. To use it import\n * `ServerTransferStateModule` on the server and `BrowserTransferStateModule` on the client.\n *\n * The values in the store are serialized/deserialized using JSON.stringify/JSON.parse. So only\n * boolean, number, string, null and non-class objects will be serialized and deserialzied in a\n * non-lossy manner.\n *\n * \\@experimental\n */\nvar TransferState = /** @class */ (function () {\n function TransferState() {\n this.store = {};\n this.onSerializeCallbacks = {};\n }\n /** @internal */\n /**\n * \\@internal\n * @param {?} initState\n * @return {?}\n */\n TransferState.init = /**\n * \\@internal\n * @param {?} initState\n * @return {?}\n */\n function (initState) {\n var /** @type {?} */ transferState = new TransferState();\n transferState.store = initState;\n return transferState;\n };\n /**\n * Get the value corresponding to a key. Return `defaultValue` if key is not found.\n */\n /**\n * Get the value corresponding to a key. Return `defaultValue` if key is not found.\n * @template T\n * @param {?} key\n * @param {?} defaultValue\n * @return {?}\n */\n TransferState.prototype.get = /**\n * Get the value corresponding to a key. Return `defaultValue` if key is not found.\n * @template T\n * @param {?} key\n * @param {?} defaultValue\n * @return {?}\n */\n function (key, defaultValue) {\n return this.store[key] !== undefined ? /** @type {?} */ (this.store[key]) : defaultValue;\n };\n /**\n * Set the value corresponding to a key.\n */\n /**\n * Set the value corresponding to a key.\n * @template T\n * @param {?} key\n * @param {?} value\n * @return {?}\n */\n TransferState.prototype.set = /**\n * Set the value corresponding to a key.\n * @template T\n * @param {?} key\n * @param {?} value\n * @return {?}\n */\n function (key, value) { this.store[key] = value; };\n /**\n * Remove a key from the store.\n */\n /**\n * Remove a key from the store.\n * @template T\n * @param {?} key\n * @return {?}\n */\n TransferState.prototype.remove = /**\n * Remove a key from the store.\n * @template T\n * @param {?} key\n * @return {?}\n */\n function (key) { delete this.store[key]; };\n /**\n * Test whether a key exists in the store.\n */\n /**\n * Test whether a key exists in the store.\n * @template T\n * @param {?} key\n * @return {?}\n */\n TransferState.prototype.hasKey = /**\n * Test whether a key exists in the store.\n * @template T\n * @param {?} key\n * @return {?}\n */\n function (key) { return this.store.hasOwnProperty(key); };\n /**\n * Register a callback to provide the value for a key when `toJson` is called.\n */\n /**\n * Register a callback to provide the value for a key when `toJson` is called.\n * @template T\n * @param {?} key\n * @param {?} callback\n * @return {?}\n */\n TransferState.prototype.onSerialize = /**\n * Register a callback to provide the value for a key when `toJson` is called.\n * @template T\n * @param {?} key\n * @param {?} callback\n * @return {?}\n */\n function (key, callback) {\n this.onSerializeCallbacks[key] = callback;\n };\n /**\n * Serialize the current state of the store to JSON.\n */\n /**\n * Serialize the current state of the store to JSON.\n * @return {?}\n */\n TransferState.prototype.toJson = /**\n * Serialize the current state of the store to JSON.\n * @return {?}\n */\n function () {\n // Call the onSerialize callbacks and put those values into the store.\n for (var /** @type {?} */ key in this.onSerializeCallbacks) {\n if (this.onSerializeCallbacks.hasOwnProperty(key)) {\n try {\n this.store[key] = this.onSerializeCallbacks[key]();\n }\n catch (/** @type {?} */ e) {\n console.warn('Exception in onSerialize callback: ', e);\n }\n }\n }\n return JSON.stringify(this.store);\n };\n TransferState.decorators = [\n { type: _angular_core.Injectable },\n ];\n /** @nocollapse */\n TransferState.ctorParameters = function () { return []; };\n return TransferState;\n}());\n/**\n * @param {?} doc\n * @param {?} appId\n * @return {?}\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 /** @type {?} */ script = doc.getElementById(appId + '-state');\n var /** @type {?} */ initialState = {};\n if (script && script.textContent) {\n try {\n initialState = JSON.parse(unescapeHtml(script.textContent));\n }\n catch (/** @type {?} */ e) {\n console.warn('Exception while restoring TransferState for app ' + appId, e);\n }\n }\n return TransferState.init(initialState);\n}\n/**\n * NgModule to install on the client side while using the `TransferState` to transfer state from\n * server to client.\n *\n * \\@experimental\n */\nvar BrowserTransferStateModule = /** @class */ (function () {\n function BrowserTransferStateModule() {\n }\n BrowserTransferStateModule.decorators = [\n { type: _angular_core.NgModule, args: [{\n providers: [{ provide: TransferState, useFactory: initTransferState, deps: [DOCUMENT$1, _angular_core.APP_ID] }],\n },] },\n ];\n /** @nocollapse */\n BrowserTransferStateModule.ctorParameters = function () { return []; };\n return BrowserTransferStateModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * Predicates for use with {\\@link DebugElement}'s query functions.\n *\n * \\@experimental All debugging apis are currently experimental.\n */\nvar By = /** @class */ (function () {\n function By() {\n }\n /**\n * Match all elements.\n *\n * ## Example\n *\n * {@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}\n */\n /**\n * Match all elements.\n *\n * ## Example\n *\n * {\\@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}\n * @return {?}\n */\n By.all = /**\n * Match all elements.\n *\n * ## Example\n *\n * {\\@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}\n * @return {?}\n */\n function () { return function (debugElement) { return true; }; };\n /**\n * Match elements by the given CSS selector.\n *\n * ## Example\n *\n * {@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}\n */\n /**\n * Match elements by the given CSS selector.\n *\n * ## Example\n *\n * {\\@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}\n * @param {?} selector\n * @return {?}\n */\n By.css = /**\n * Match elements by the given CSS selector.\n *\n * ## Example\n *\n * {\\@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}\n * @param {?} selector\n * @return {?}\n */\n function (selector) {\n return function (debugElement) {\n return debugElement.nativeElement != null ?\n getDOM().elementMatches(debugElement.nativeElement, selector) :\n false;\n };\n };\n /**\n * Match elements that have the given directive present.\n *\n * ## Example\n *\n * {@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}\n */\n /**\n * Match elements that have the given directive present.\n *\n * ## Example\n *\n * {\\@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}\n * @param {?} type\n * @return {?}\n */\n By.directive = /**\n * Match elements that have the given directive present.\n *\n * ## Example\n *\n * {\\@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}\n * @param {?} type\n * @return {?}\n */\n function (type) {\n return function (debugElement) { return ((debugElement.providerTokens)).indexOf(type) !== -1; };\n };\n return By;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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 * \\@stable\n */\nvar VERSION = new _angular_core.Version('5.2.11');\n\nexports.BrowserModule = BrowserModule;\nexports.platformBrowser = platformBrowser;\nexports.Meta = Meta;\nexports.Title = Title;\nexports.disableDebugTools = disableDebugTools;\nexports.enableDebugTools = enableDebugTools;\nexports.BrowserTransferStateModule = BrowserTransferStateModule;\nexports.TransferState = TransferState;\nexports.makeStateKey = makeStateKey;\nexports.By = By;\nexports.DOCUMENT = DOCUMENT$1;\nexports.EVENT_MANAGER_PLUGINS = EVENT_MANAGER_PLUGINS;\nexports.EventManager = EventManager;\nexports.HAMMER_GESTURE_CONFIG = HAMMER_GESTURE_CONFIG;\nexports.HammerGestureConfig = HammerGestureConfig;\nexports.DomSanitizer = DomSanitizer;\nexports.VERSION = VERSION;\nexports.ɵBROWSER_SANITIZATION_PROVIDERS = BROWSER_SANITIZATION_PROVIDERS;\nexports.ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS = INTERNAL_BROWSER_PLATFORM_PROVIDERS;\nexports.ɵinitDomAdapter = initDomAdapter;\nexports.ɵBrowserDomAdapter = BrowserDomAdapter;\nexports.ɵBrowserPlatformLocation = BrowserPlatformLocation;\nexports.ɵTRANSITION_ID = TRANSITION_ID;\nexports.ɵBrowserGetTestability = BrowserGetTestability;\nexports.ɵescapeHtml = escapeHtml;\nexports.ɵELEMENT_PROBE_PROVIDERS = ELEMENT_PROBE_PROVIDERS;\nexports.ɵDomAdapter = DomAdapter;\nexports.ɵgetDOM = getDOM;\nexports.ɵsetRootDomAdapter = setRootDomAdapter;\nexports.ɵDomRendererFactory2 = DomRendererFactory2;\nexports.ɵNAMESPACE_URIS = NAMESPACE_URIS;\nexports.ɵflattenStyles = flattenStyles;\nexports.ɵshimContentAttribute = shimContentAttribute;\nexports.ɵshimHostAttribute = shimHostAttribute;\nexports.ɵDomEventsPlugin = DomEventsPlugin;\nexports.ɵHammerGesturesPlugin = HammerGesturesPlugin;\nexports.ɵKeyEventsPlugin = KeyEventsPlugin;\nexports.ɵDomSharedStylesHost = DomSharedStylesHost;\nexports.ɵSharedStylesHost = SharedStylesHost;\nexports.ɵb = _document;\nexports.ɵa = errorHandler;\nexports.ɵi = GenericBrowserDomAdapter;\nexports.ɵg = SERVER_TRANSITION_PROVIDERS;\nexports.ɵf = appInitializerFactory;\nexports.ɵc = initTransferState;\nexports.ɵh = _createNgProbe;\nexports.ɵd = EventManagerPlugin;\nexports.ɵe = DomSanitizerImpl;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=platform-browser.umd.js.map\n"]}