Socket
Socket
Sign inDemoInstall

@ckeditor/ckeditor5-angular

Package Overview
Dependencies
1
Maintainers
1
Versions
26
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.1.2 to 1.2.0

esm2015/uid.js

372

bundles/ckeditor-ckeditor5-angular.umd.js
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/forms')) :
typeof define === 'function' && define.amd ? define('@ckeditor/ckeditor5-angular', ['exports', '@angular/core', '@angular/common', '@angular/forms'], factory) :
(factory((global.ckeditor = global.ckeditor || {}, global.ckeditor['ckeditor5-angular'] = {}),global.ng.core,global.ng.common,global.ng.forms));
}(this, (function (exports,core,common,forms) { 'use strict';
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@ckeditor/ckeditor5-watchdog/src/editorwatchdog'), require('@angular/core'), require('@angular/common'), require('@angular/forms')) :
typeof define === 'function' && define.amd ? define('@ckeditor/ckeditor5-angular', ['exports', '@ckeditor/ckeditor5-watchdog/src/editorwatchdog', '@angular/core', '@angular/common', '@angular/forms'], factory) :
(factory((global.ckeditor = global.ckeditor || {}, global.ckeditor['ckeditor5-angular'] = {}),global.EditorWatchdog,global.ng.core,global.ng.common,global.ng.forms));
}(this, (function (exports,EditorWatchdog,core,common,forms) { 'use strict';
EditorWatchdog = EditorWatchdog && EditorWatchdog.hasOwnProperty('default') ? EditorWatchdog['default'] : EditorWatchdog;
/*! *****************************************************************************

@@ -33,2 +35,89 @@ Copyright (c) Microsoft Corporation. All rights reserved.

};
function __awaiter(thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try {
step(generator.next(value));
}
catch (e) {
reject(e);
} }
function rejected(value) { try {
step(generator["throw"](value));
}
catch (e) {
reject(e);
} }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
function __generator(thisArg, body) {
var _ = { label: 0, sent: function () { if (t[0] & 1)
throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f)
throw new TypeError("Generator is already executing.");
while (_)
try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
return t;
if (y = 0, t)
op = [op[0] & 2, t.value];
switch (op[0]) {
case 0:
case 1:
t = op;
break;
case 4:
_.label++;
return { value: op[1], done: false };
case 5:
_.label++;
y = op[1];
op = [0];
continue;
case 7:
op = _.ops.pop();
_.trys.pop();
continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
_ = 0;
continue;
}
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
_.label = op[1];
break;
}
if (op[0] === 6 && _.label < t[1]) {
_.label = t[1];
t = op;
break;
}
if (t && _.label < t[2]) {
_.label = t[2];
_.ops.push(op);
break;
}
if (t[2])
_.ops.pop();
_.trys.pop();
continue;
}
op = body.call(thisArg, _);
}
catch (e) {
op = [6, e];
y = 0;
}
finally {
f = t = 0;
}
if (op[0] & 5)
throw op[1];
return { value: op[0] ? op[1] : void 0, done: true };
}
}

@@ -39,2 +128,70 @@ /**

*/
/**
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
// A copy of @ckeditor/ckeditor5-utils/src/uid.js
// A hash table of hex numbers to avoid using toString() in uid() which is costly.
// [ '00', '01', '02', ..., 'fe', 'ff' ]
var ɵ0 = /**
* @param {?} val
* @param {?} index
* @return {?}
*/ function (val, index) { return ('0' + (index).toString(16)).slice(-2); };
/** @type {?} */
var HEX_NUMBERS = new Array(256).fill(0)
.map((ɵ0));
/**
* Returns a unique id. The id starts with an "e" character and a randomly generated string of
* 32 alphanumeric characters.
*
* **Note**: The characters the unique id is built from correspond to the hex number notation
* (from "0" to "9", from "a" to "f"). In other words, each id corresponds to an "e" followed
* by 16 8-bit numbers next to each other.
*
* @return {?} An unique id string.
*/
function uid() {
// Let's create some positive random 32bit integers first.
//
// 1. Math.random() is a float between 0 and 1.
// 2. 0x100000000 is 2^32 = 4294967296.
// 3. >>> 0 enforces integer (in JS all numbers are floating point).
//
// For instance:
// Math.random() * 0x100000000 = 3366450031.853859
// but
// Math.random() * 0x100000000 >>> 0 = 3366450031.
/** @type {?} */
var r1 = Math.random() * 0x100000000 >>> 0;
/** @type {?} */
var r2 = Math.random() * 0x100000000 >>> 0;
/** @type {?} */
var r3 = Math.random() * 0x100000000 >>> 0;
/** @type {?} */
var r4 = Math.random() * 0x100000000 >>> 0;
// Make sure that id does not start with number.
return 'e' +
HEX_NUMBERS[r1 >> 0 & 0xFF] +
HEX_NUMBERS[r1 >> 8 & 0xFF] +
HEX_NUMBERS[r1 >> 16 & 0xFF] +
HEX_NUMBERS[r1 >> 24 & 0xFF] +
HEX_NUMBERS[r2 >> 0 & 0xFF] +
HEX_NUMBERS[r2 >> 8 & 0xFF] +
HEX_NUMBERS[r2 >> 16 & 0xFF] +
HEX_NUMBERS[r2 >> 24 & 0xFF] +
HEX_NUMBERS[r3 >> 0 & 0xFF] +
HEX_NUMBERS[r3 >> 8 & 0xFF] +
HEX_NUMBERS[r3 >> 16 & 0xFF] +
HEX_NUMBERS[r3 >> 24 & 0xFF] +
HEX_NUMBERS[r4 >> 0 & 0xFF] +
HEX_NUMBERS[r4 >> 8 & 0xFF] +
HEX_NUMBERS[r4 >> 16 & 0xFF] +
HEX_NUMBERS[r4 >> 24 & 0xFF];
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var CKEditorComponent = /** @class */ (function () {

@@ -84,5 +241,5 @@ function CKEditorComponent(elementRef, ngZone) {

/**
* The instance of the editor created by this component.
* Fires when the editor component crashes.
*/
this.editorInstance = null;
this.error = new core.EventEmitter();
/**

@@ -97,2 +254,3 @@ * If the component is read–only before the editor instance is created, it remembers that state,

this.isEditorSettingData = false;
this.id = uid();
this.ngZone = ngZone;

@@ -127,2 +285,21 @@ this.elementRef = elementRef;

});
Object.defineProperty(CKEditorComponent.prototype, "editorInstance", {
/**
* The instance of the editor created by this component.
*/
get: /**
* The instance of the editor created by this component.
* @return {?}
*/ function () {
if (this.editorWatchdog) {
return this.editorWatchdog.editor;
}
if (this.watchdog) {
return this.watchdog.getItem(this.id);
}
return null;
},
enumerable: true,
configurable: true
});
// Implementing the AfterViewInit interface.

@@ -139,8 +316,3 @@ // Implementing the AfterViewInit interface.

function () {
var _this = this;
this.ngZone.runOutsideAngular(( /**
* @return {?}
*/function () {
_this.createEditor();
}));
this.attachToWatchdog();
};

@@ -158,6 +330,24 @@ // Implementing the OnDestroy interface.

function () {
if (this.editorInstance) {
this.editorInstance.destroy();
this.editorInstance = null;
}
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!this.watchdog)
return [3 /*break*/, 2];
return [4 /*yield*/, this.watchdog.remove(this.id)];
case 1:
_a.sent();
return [3 /*break*/, 4];
case 2:
if (!(this.editorWatchdog && this.editorWatchdog.editor))
return [3 /*break*/, 4];
return [4 /*yield*/, this.editorWatchdog.destroy()];
case 3:
_a.sent();
this.editorWatchdog = undefined;
_a.label = 4;
case 4: return [2 /*return*/];
}
});
});
};

@@ -243,10 +433,8 @@ // Implementing the ControlValueAccessor interface (only when binding to ngModel).

function (isDisabled) {
// If already initialized
// If already initialized.
if (this.editorInstance) {
this.editorInstance.isReadOnly = isDisabled;
}
// If not, wait for it to be ready; store the state.
else {
this.initialIsDisabled = isDisabled;
}
// Store the state anyway to use it once the editor is created.
this.initialIsDisabled = isDisabled;
};

@@ -265,3 +453,3 @@ /**

*/
CKEditorComponent.prototype.createEditor = /**
CKEditorComponent.prototype.attachToWatchdog = /**
* Creates the editor instance, sets initial editor data, then integrates

@@ -276,4 +464,114 @@ * the editor with the Angular component. This method does not use the `editor.setData()`

/** @type {?} */
var creator = ( /**
* @param {?} element
* @param {?} config
* @return {?}
*/function (element, config) {
return __awaiter(_this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
return [2 /*return*/, this.ngZone.runOutsideAngular(( /**
* @return {?}
*/function () {
return __awaiter(_this, void 0, void 0, function () {
var editor;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this.elementRef.nativeElement.appendChild(element);
return [4 /*yield*/, ( /** @type {?} */(this.editor)).create(element, config)];
case 1:
editor = _a.sent();
if (this.initialIsDisabled) {
editor.isReadOnly = this.initialIsDisabled;
}
this.ngZone.run(( /**
* @return {?}
*/function () {
_this.ready.emit(editor);
}));
this.setUpEditorEvents(editor);
return [2 /*return*/, editor];
}
});
});
}))];
});
});
});
/** @type {?} */
var destructor = ( /**
* @param {?} editor
* @return {?}
*/function (editor) {
return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, editor.destroy()];
case 1:
_a.sent();
this.elementRef.nativeElement.removeChild(( /** @type {?} */(this.editorElement)));
return [2 /*return*/];
}
});
});
});
/** @type {?} */
var emitError = ( /**
* @return {?}
*/function () {
_this.ngZone.run(( /**
* @return {?}
*/function () {
_this.error.emit();
}));
});
/** @type {?} */
var element = document.createElement(this.tagName);
/** @type {?} */
var config = this.getConfig();
this.editorElement = element;
// Based on the presence of the watchdog decide how to initialize the editor.
if (this.watchdog) {
// When the context watchdog is passed add the new item to it based on the passed configuration.
this.watchdog.add({
id: this.id,
type: 'editor',
creator: creator,
destructor: destructor,
sourceElementOrData: element,
config: config
});
this.watchdog.on('itemError', ( /**
* @param {?} _
* @param {?} __1
* @return {?}
*/function (_, _a) {
var itemId = _a.itemId;
if (itemId === _this.id) {
emitError();
}
}));
}
else {
// In the other case create the watchdog by hand to keep the editor running.
/** @type {?} */
var editorWatchdog = new EditorWatchdog(this.editor);
editorWatchdog.setCreator(creator);
editorWatchdog.setDestructor(destructor);
editorWatchdog.on('error', emitError);
this.editorWatchdog = editorWatchdog;
this.editorWatchdog.create(element, config);
}
};
/**
* @private
* @return {?}
*/
CKEditorComponent.prototype.getConfig = /**
* @private
* @return {?}
*/
function () {
if (this.data && this.config.initialData) {

@@ -283,27 +581,3 @@ throw new Error('Editor data should be provided either using `config.initialData` or `data` properties.');

// Merge two possible ways of providing data into the `config.initialData` field.
/** @type {?} */
var config = __assign({}, this.config, { initialData: this.config.initialData || this.data || '' });
this.elementRef.nativeElement.appendChild(element);
return ( /** @type {?} */(this.editor)).create(element, config)
.then(( /**
* @param {?} editor
* @return {?}
*/function (editor) {
_this.editorInstance = editor;
if (_this.initialIsDisabled) {
editor.isReadOnly = _this.initialIsDisabled;
}
_this.ngZone.run(( /**
* @return {?}
*/function () {
_this.ready.emit(editor);
}));
_this.setUpEditorEvents(editor);
}))
.catch(( /**
* @param {?} err
* @return {?}
*/function (err) {
console.error(err.stack);
}));
return __assign({}, this.config, { initialData: this.config.initialData || this.data || '' });
};

@@ -399,2 +673,3 @@ /**

tagName: [{ type: core.Input }],
watchdog: [{ type: core.Input }],
disabled: [{ type: core.Input }],

@@ -404,3 +679,4 @@ ready: [{ type: core.Output }],

blur: [{ type: core.Output }],
focus: [{ type: core.Output }]
focus: [{ type: core.Output }],
error: [{ type: core.Output }]
};

@@ -407,0 +683,0 @@ return CKEditorComponent;

@@ -1,2 +0,6 @@

!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@angular/common"),require("@angular/forms")):"function"==typeof define&&define.amd?define("@ckeditor/ckeditor5-angular",["exports","@angular/core","@angular/common","@angular/forms"],e):e((t.ckeditor=t.ckeditor||{},t.ckeditor["ckeditor5-angular"]={}),t.ng.core,t.ng.common,t.ng.forms)}(this,function(t,n,e,i){"use strict";var o=function(){return(o=Object.assign||function(t){for(var e,n=1,i=arguments.length;n<i;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t}).apply(this,arguments)},r=(Object.defineProperty(a.prototype,"disabled",{get:function(){return this.editorInstance?this.editorInstance.isReadOnly:this.initialIsDisabled},set:function(t){this.setDisabledState(t)},enumerable:!0,configurable:!0}),a.prototype.ngAfterViewInit=function(){var t=this;this.ngZone.runOutsideAngular(function(){t.createEditor()})},a.prototype.ngOnDestroy=function(){this.editorInstance&&(this.editorInstance.destroy(),this.editorInstance=null)},a.prototype.writeValue=function(t){null===t&&(t=""),this.editorInstance?(this.isEditorSettingData=!0,this.editorInstance.setData(t),this.isEditorSettingData=!1):(this.data=t,this.editorElement&&(this.editorElement.innerHTML=this.data))},a.prototype.registerOnChange=function(t){this.cvaOnChange=t},a.prototype.registerOnTouched=function(t){this.cvaOnTouched=t},a.prototype.setDisabledState=function(t){this.editorInstance?this.editorInstance.isReadOnly=t:this.initialIsDisabled=t},a.prototype.createEditor=function(){var e=this,t=document.createElement(this.tagName);if(this.editorElement=t,this.data&&this.config.initialData)throw new Error("Editor data should be provided either using `config.initialData` or `data` properties.");var n=o({},this.config,{initialData:this.config.initialData||this.data||""});return this.elementRef.nativeElement.appendChild(t),this.editor.create(t,n).then(function(t){e.editorInstance=t,e.initialIsDisabled&&(t.isReadOnly=e.initialIsDisabled),e.ngZone.run(function(){e.ready.emit(t)}),e.setUpEditorEvents(t)})["catch"](function(t){console.error(t.stack)})},a.prototype.setUpEditorEvents=function(n){var i=this,t=n.model.document,e=n.editing.view.document;t.on("change:data",function(e){i.ngZone.run(function(){if(i.cvaOnChange&&!i.isEditorSettingData){var t=n.getData();i.cvaOnChange(t)}i.change.emit({event:e,editor:n})})}),e.on("focus",function(t){i.ngZone.run(function(){i.focus.emit({event:t,editor:n})})}),e.on("blur",function(t){i.ngZone.run(function(){i.cvaOnTouched&&i.cvaOnTouched(),i.blur.emit({event:t,editor:n})})})},a.decorators=[{type:n.Component,args:[{selector:"ckeditor",template:"<ng-template></ng-template>",providers:[{provide:i.NG_VALUE_ACCESSOR,useExisting:n.forwardRef(function(){return a}),multi:!0}]}]}],a.ctorParameters=function(){return[{type:n.ElementRef},{type:n.NgZone}]},a.propDecorators={editor:[{type:n.Input}],config:[{type:n.Input}],data:[{type:n.Input}],tagName:[{type:n.Input}],disabled:[{type:n.Input}],ready:[{type:n.Output}],change:[{type:n.Output}],blur:[{type:n.Output}],focus:[{type:n.Output}]},a);function a(t,e){this.config={},this.data="",this.tagName="div",this.ready=new n.EventEmitter,this.change=new n.EventEmitter,this.blur=new n.EventEmitter,this.focus=new n.EventEmitter,this.editorInstance=null,this.initialIsDisabled=!1,this.isEditorSettingData=!1,this.ngZone=e,this.elementRef=t}var s=(c.decorators=[{type:n.NgModule,args:[{imports:[i.FormsModule,e.CommonModule],declarations:[r],exports:[r]}]}],c);function c(){}t.CKEditorComponent=r,t.CKEditorModule=s,Object.defineProperty(t,"__esModule",{value:!0})});
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@ckeditor/ckeditor5-watchdog/src/editorwatchdog"),require("@angular/core"),require("@angular/common"),require("@angular/forms")):"function"==typeof define&&define.amd?define("@ckeditor/ckeditor5-angular",["exports","@ckeditor/ckeditor5-watchdog/src/editorwatchdog","@angular/core","@angular/common","@angular/forms"],e):e((t.ckeditor=t.ckeditor||{},t.ckeditor["ckeditor5-angular"]={}),t.EditorWatchdog,t.ng.core,t.ng.common,t.ng.forms)}(this,function(t,s,n,e,i){"use strict";s=s&&s.hasOwnProperty("default")?s["default"]:s;var r=function(){return(r=Object.assign||function(t){for(var e,n=1,i=arguments.length;n<i;n++)for(var r in e=arguments[n])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}).apply(this,arguments)};function c(e,a,s,c){return new(s=s||Promise)(function(t,n){function i(t){try{o(c.next(t))}catch(e){n(e)}}function r(t){try{o(c["throw"](t))}catch(e){n(e)}}function o(e){e.done?t(e.value):new s(function(t){t(e.value)}).then(i,r)}o((c=c.apply(e,a||[])).next())})}function u(i,r){var o,a,s,t,c={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return t={next:e(0),"throw":e(1),"return":e(2)},"function"==typeof Symbol&&(t[Symbol.iterator]=function(){return this}),t;function e(e){return function(t){return function n(t){if(o)throw new TypeError("Generator is already executing.");for(;c;)try{if(o=1,a&&(s=2&t[0]?a["return"]:t[0]?a["throw"]||((s=a["return"])&&s.call(a),0):a.next)&&!(s=s.call(a,t[1])).done)return s;switch(a=0,s&&(t=[2&t[0],s.value]),t[0]){case 0:case 1:s=t;break;case 4:return c.label++,{value:t[1],done:!1};case 5:c.label++,a=t[1],t=[0];continue;case 7:t=c.ops.pop(),c.trys.pop();continue;default:if(!(s=0<(s=c.trys).length&&s[s.length-1])&&(6===t[0]||2===t[0])){c=0;continue}if(3===t[0]&&(!s||t[1]>s[0]&&t[1]<s[3])){c.label=t[1];break}if(6===t[0]&&c.label<s[1]){c.label=s[1],s=t;break}if(s&&c.label<s[2]){c.label=s[2],c.ops.push(t);break}s[2]&&c.ops.pop(),c.trys.pop();continue}t=r.call(i,c)}catch(e){t=[6,e],a=0}finally{o=s=0}if(5&t[0])throw t[1];return{value:t[0]?t[1]:void 0,done:!0}}([e,t])}}}
/**
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/var o=new Array(256).fill(0).map(function(t,e){return("0"+e.toString(16)).slice(-2)});var a=(Object.defineProperty(d.prototype,"disabled",{get:function(){return this.editorInstance?this.editorInstance.isReadOnly:this.initialIsDisabled},set:function(t){this.setDisabledState(t)},enumerable:!0,configurable:!0}),Object.defineProperty(d.prototype,"editorInstance",{get:function(){return this.editorWatchdog?this.editorWatchdog.editor:this.watchdog?this.watchdog.getItem(this.id):null},enumerable:!0,configurable:!0}),d.prototype.ngAfterViewInit=function(){this.attachToWatchdog()},d.prototype.ngOnDestroy=function(){return c(this,void 0,void 0,function(){return u(this,function(t){switch(t.label){case 0:return this.watchdog?[4,this.watchdog.remove(this.id)]:[3,2];case 1:return t.sent(),[3,4];case 2:return this.editorWatchdog&&this.editorWatchdog.editor?[4,this.editorWatchdog.destroy()]:[3,4];case 3:t.sent(),this.editorWatchdog=undefined,t.label=4;case 4:return[2]}})})},d.prototype.writeValue=function(t){null===t&&(t=""),this.editorInstance?(this.isEditorSettingData=!0,this.editorInstance.setData(t),this.isEditorSettingData=!1):(this.data=t,this.editorElement&&(this.editorElement.innerHTML=this.data))},d.prototype.registerOnChange=function(t){this.cvaOnChange=t},d.prototype.registerOnTouched=function(t){this.cvaOnTouched=t},d.prototype.setDisabledState=function(t){this.editorInstance&&(this.editorInstance.isReadOnly=t),this.initialIsDisabled=t},d.prototype.attachToWatchdog=function(){var n=this,t=function(i,r){return c(n,void 0,void 0,function(){var e=this;return u(this,function(t){return[2,this.ngZone.runOutsideAngular(function(){return c(e,void 0,void 0,function(){var e,n=this;return u(this,function(t){switch(t.label){case 0:return this.elementRef.nativeElement.appendChild(i),[4,this.editor.create(i,r)];case 1:return e=t.sent(),this.initialIsDisabled&&(e.isReadOnly=this.initialIsDisabled),this.ngZone.run(function(){n.ready.emit(e)}),this.setUpEditorEvents(e),[2,e]}})})})]})})},e=function(e){return c(n,void 0,void 0,function(){return u(this,function(t){switch(t.label){case 0:return[4,e.destroy()];case 1:return t.sent(),this.elementRef.nativeElement.removeChild(this.editorElement),[2]}})})},i=function(){n.ngZone.run(function(){n.error.emit()})},r=document.createElement(this.tagName),o=this.getConfig();if(this.editorElement=r,this.watchdog)this.watchdog.add({id:this.id,type:"editor",creator:t,destructor:e,sourceElementOrData:r,config:o}),this.watchdog.on("itemError",function(t,e){e.itemId===n.id&&i()});else{var a=new s(this.editor);a.setCreator(t),a.setDestructor(e),a.on("error",i),this.editorWatchdog=a,this.editorWatchdog.create(r,o)}},d.prototype.getConfig=function(){if(this.data&&this.config.initialData)throw new Error("Editor data should be provided either using `config.initialData` or `data` properties.");return r({},this.config,{initialData:this.config.initialData||this.data||""})},d.prototype.setUpEditorEvents=function(n){var i=this,t=n.model.document,e=n.editing.view.document;t.on("change:data",function(e){i.ngZone.run(function(){if(i.cvaOnChange&&!i.isEditorSettingData){var t=n.getData();i.cvaOnChange(t)}i.change.emit({event:e,editor:n})})}),e.on("focus",function(t){i.ngZone.run(function(){i.focus.emit({event:t,editor:n})})}),e.on("blur",function(t){i.ngZone.run(function(){i.cvaOnTouched&&i.cvaOnTouched(),i.blur.emit({event:t,editor:n})})})},d.decorators=[{type:n.Component,args:[{selector:"ckeditor",template:"<ng-template></ng-template>",providers:[{provide:i.NG_VALUE_ACCESSOR,useExisting:n.forwardRef(function(){return d}),multi:!0}]}]}],d.ctorParameters=function(){return[{type:n.ElementRef},{type:n.NgZone}]},d.propDecorators={editor:[{type:n.Input}],config:[{type:n.Input}],data:[{type:n.Input}],tagName:[{type:n.Input}],watchdog:[{type:n.Input}],disabled:[{type:n.Input}],ready:[{type:n.Output}],change:[{type:n.Output}],blur:[{type:n.Output}],focus:[{type:n.Output}],error:[{type:n.Output}]},d);function d(t,e){this.config={},this.data="",this.tagName="div",this.ready=new n.EventEmitter,this.change=new n.EventEmitter,this.blur=new n.EventEmitter,this.focus=new n.EventEmitter,this.error=new n.EventEmitter,this.initialIsDisabled=!1,this.isEditorSettingData=!1,this.id=function r(){var t=4294967296*Math.random()>>>0,e=4294967296*Math.random()>>>0,n=4294967296*Math.random()>>>0,i=4294967296*Math.random()>>>0;return"e"+o[t>>0&255]+o[t>>8&255]+o[t>>16&255]+o[t>>24&255]+o[e>>0&255]+o[e>>8&255]+o[e>>16&255]+o[e>>24&255]+o[n>>0&255]+o[n>>8&255]+o[n>>16&255]+o[n>>24&255]+o[i>>0&255]+o[i>>8&255]+o[i>>16&255]+o[i>>24&255]}(),this.ngZone=e,this.elementRef=t}var h=(l.decorators=[{type:n.NgModule,args:[{imports:[i.FormsModule,e.CommonModule],declarations:[a],exports:[a]}]}],l);function l(){}t.CKEditorComponent=a,t.CKEditorModule=h,Object.defineProperty(t,"__esModule",{value:!0})});
//# sourceMappingURL=ckeditor-ckeditor5-angular.umd.min.js.map
Changelog
=========
## [1.2.0](https://github.com/ckeditor/ckeditor5-angular/compare/v1.1.2...v1.2.0) (2020-02-27)
### Features
* Improved Angular integration to handle Context and ContextWatchdog. Closes [#165](https://github.com/ckeditor/ckeditor5-angular/issues/165). ([87a1c89](https://github.com/ckeditor/ckeditor5-angular/commit/87a1c89))
## [1.1.2](https://github.com/ckeditor/ckeditor5-angular/compare/v1.1.1...v1.1.2) (2019-11-04)

@@ -5,0 +12,0 @@

2

ckeditor-ckeditor5-angular.metadata.json

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":4,"exports":[{"from":"./ckeditor"}],"metadata":{"CKEditorComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":23,"character":1},"arguments":[{"selector":"ckeditor","template":"<ng-template></ng-template>","providers":[{"provide":{"__symbolic":"reference","module":"@angular/forms","name":"NG_VALUE_ACCESSOR","line":30,"character":12},"useExisting":{"__symbolic":"reference","name":"CKEditorComponent"},"multi":true}]}]}],"members":{"editor":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":47,"character":2}}]}],"config":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":54,"character":2}}]}],"data":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":60,"character":2}}]}],"tagName":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":67,"character":2}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":74,"character":2}}]}],"ready":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":91,"character":2}}]}],"change":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":98,"character":2}}]}],"blur":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":105,"character":2}}]}],"focus":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":112,"character":2}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":157,"character":33},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":157,"character":53}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}],"createEditor":[{"__symbolic":"method"}],"setUpEditorEvents":[{"__symbolic":"method"}]}},"BlurEvent":{"__symbolic":"interface"},"FocusEvent":{"__symbolic":"interface"},"ChangeEvent":{"__symbolic":"interface"},"CKEditorModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":10,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":11,"character":12},{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":11,"character":25}],"declarations":[{"__symbolic":"reference","name":"CKEditorComponent"}],"exports":[{"__symbolic":"reference","name":"CKEditorComponent"}]}]}],"members":{}}},"origins":{"CKEditorComponent":"./ckeditor.component","BlurEvent":"./ckeditor.component","FocusEvent":"./ckeditor.component","ChangeEvent":"./ckeditor.component","CKEditorModule":"./ckeditor.module"},"importAs":"@ckeditor/ckeditor5-angular"}
{"__symbolic":"module","version":4,"exports":[{"from":"./ckeditor"}],"metadata":{"CKEditorComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":27,"character":1},"arguments":[{"selector":"ckeditor","template":"<ng-template></ng-template>","providers":[{"provide":{"__symbolic":"reference","module":"@angular/forms","name":"NG_VALUE_ACCESSOR","line":34,"character":12},"useExisting":{"__symbolic":"reference","name":"CKEditorComponent"},"multi":true}]}]}],"members":{"editor":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":51,"character":2}}]}],"config":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":58,"character":2}}]}],"data":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":64,"character":2}}]}],"tagName":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":71,"character":2}}]}],"watchdog":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":76,"character":2}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":83,"character":2}}]}],"ready":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":100,"character":2}}]}],"change":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":107,"character":2}}]}],"blur":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":114,"character":2}}]}],"focus":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":121,"character":2}}]}],"error":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":126,"character":2}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":189,"character":33},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":189,"character":53}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}],"attachToWatchdog":[{"__symbolic":"method"}],"getConfig":[{"__symbolic":"method"}],"setUpEditorEvents":[{"__symbolic":"method"}]}},"BlurEvent":{"__symbolic":"interface"},"FocusEvent":{"__symbolic":"interface"},"ChangeEvent":{"__symbolic":"interface"},"CKEditorModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":10,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":11,"character":12},{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":11,"character":25}],"declarations":[{"__symbolic":"reference","name":"CKEditorComponent"}],"exports":[{"__symbolic":"reference","name":"CKEditorComponent"}]}]}],"members":{}}},"origins":{"CKEditorComponent":"./ckeditor.component","BlurEvent":"./ckeditor.component","FocusEvent":"./ckeditor.component","ChangeEvent":"./ckeditor.component","CKEditorModule":"./ckeditor.module"},"importAs":"@ckeditor/ckeditor5-angular"}
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.

@@ -36,2 +36,6 @@ */

/**
* The context watchdog.
*/
watchdog?: CKEditor5.ContextWatchdog;
/**
* When set `true`, the editor becomes read-only.

@@ -67,6 +71,15 @@ * See https://ckeditor.com/docs/ckeditor5/latest/api/module_core_editor_editor-Editor.html#member-isReadOnly

/**
* Fires when the editor component crashes.
*/
error: EventEmitter<void>;
/**
* The instance of the editor created by this component.
*/
editorInstance: CKEditor5.Editor | null;
readonly editorInstance: CKEditor5.Editor | null;
/**
* The editor watchdog. It is created when the context watchdog is not passed to the component.
* It keeps the editor running.
*/
private editorWatchdog?;
/**
* If the component is read–only before the editor instance is created, it remembers that state,

@@ -103,5 +116,6 @@ * so the editor can become read–only once it is ready.

private isEditorSettingData;
private id;
constructor(elementRef: ElementRef, ngZone: NgZone);
ngAfterViewInit(): void;
ngOnDestroy(): void;
ngOnDestroy(): Promise<void>;
writeValue(value: string | null): void;

@@ -116,3 +130,4 @@ registerOnChange(callback: (data: string) => void): void;

*/
private createEditor;
private attachToWatchdog;
private getConfig;
/**

@@ -119,0 +134,0 @@ * Integrates the editor with the component by attaching related event listeners.

/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.

@@ -79,2 +79,19 @@ */

}
interface ContextWatchdog extends Watchdog<any> {
context: any;
add(items: any): Promise<void>;
remove(items: string | string[]): Promise<void>;
getItem(itemId: string): Editor;
addItemWatchdog(itemId: string, itemType: string, watchdog: Watchdog<any>): Promise<void>;
}
interface EditorWatchdog extends Watchdog<Editor> {
editor: Editor;
}
interface Watchdog<T> {
setCreator(creator: (...args: any[]) => Promise<T>): void;
setDestructor(destructor: (item: T) => Promise<void>): void;
on(event: string, callback: (...args: any) => any): void;
destroy(): Promise<void>;
create(...args: any[]): Promise<void>;
}
}
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.

@@ -4,0 +4,0 @@ */

@@ -5,7 +5,10 @@ /**

*/
import * as tslib_1 from "tslib";
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
import { Component, Input, Output, NgZone, EventEmitter, forwardRef, ElementRef } from '@angular/core';
import EditorWatchdog from '@ckeditor/ckeditor5-watchdog/src/editorwatchdog';
import uid from './uid';
import { NG_VALUE_ACCESSOR } from '@angular/forms';

@@ -60,5 +63,5 @@ export class CKEditorComponent {

/**
* The instance of the editor created by this component.
* Fires when the editor component crashes.
*/
this.editorInstance = null;
this.error = new EventEmitter();
/**

@@ -73,2 +76,3 @@ * If the component is read–only before the editor instance is created, it remembers that state,

this.isEditorSettingData = false;
this.id = uid();
this.ngZone = ngZone;

@@ -96,2 +100,15 @@ this.elementRef = elementRef;

}
/**
* The instance of the editor created by this component.
* @return {?}
*/
get editorInstance() {
if (this.editorWatchdog) {
return this.editorWatchdog.editor;
}
if (this.watchdog) {
return this.watchdog.getItem(this.id);
}
return null;
}
// Implementing the AfterViewInit interface.

@@ -102,8 +119,3 @@ /**

ngAfterViewInit() {
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
() => {
this.createEditor();
}));
this.attachToWatchdog();
}

@@ -115,6 +127,11 @@ // Implementing the OnDestroy interface.

ngOnDestroy() {
if (this.editorInstance) {
this.editorInstance.destroy();
this.editorInstance = null;
}
return tslib_1.__awaiter(this, void 0, void 0, /** @this {!CKEditorComponent} */ function* () {
if (this.watchdog) {
yield this.watchdog.remove(this.id);
}
else if (this.editorWatchdog && this.editorWatchdog.editor) {
yield this.editorWatchdog.destroy();
this.editorWatchdog = undefined;
}
});
}

@@ -172,10 +189,8 @@ // Implementing the ControlValueAccessor interface (only when binding to ngModel).

setDisabledState(isDisabled) {
// If already initialized
// If already initialized.
if (this.editorInstance) {
this.editorInstance.isReadOnly = isDisabled;
}
// If not, wait for it to be ready; store the state.
else {
this.initialIsDisabled = isDisabled;
}
// Store the state anyway to use it once the editor is created.
this.initialIsDisabled = isDisabled;
}

@@ -189,23 +204,44 @@ /**

*/
createEditor() {
attachToWatchdog() {
/** @type {?} */
const element = document.createElement(this.tagName);
this.editorElement = element;
if (this.data && this.config.initialData) {
throw new Error('Editor data should be provided either using `config.initialData` or `data` properties.');
}
// Merge two possible ways of providing data into the `config.initialData` field.
const creator = (/**
* @param {?} element
* @param {?} config
* @return {?}
*/
(element, config) => tslib_1.__awaiter(this, void 0, void 0, function* () {
return this.ngZone.runOutsideAngular((/**
* @return {?}
*/
() => tslib_1.__awaiter(this, void 0, void 0, function* () {
this.elementRef.nativeElement.appendChild(element);
/** @type {?} */
const editor = yield (/** @type {?} */ (this.editor)).create(element, config);
if (this.initialIsDisabled) {
editor.isReadOnly = this.initialIsDisabled;
}
this.ngZone.run((/**
* @return {?}
*/
() => {
this.ready.emit(editor);
}));
this.setUpEditorEvents(editor);
return editor;
})));
}));
/** @type {?} */
const config = Object.assign({}, this.config, { initialData: this.config.initialData || this.data || '' });
this.elementRef.nativeElement.appendChild(element);
return (/** @type {?} */ (this.editor)).create(element, config)
.then((/**
const destructor = (/**
* @param {?} editor
* @return {?}
*/
editor => {
this.editorInstance = editor;
if (this.initialIsDisabled) {
editor.isReadOnly = this.initialIsDisabled;
}
(editor) => tslib_1.__awaiter(this, void 0, void 0, function* () {
yield editor.destroy();
this.elementRef.nativeElement.removeChild((/** @type {?} */ (this.editorElement)));
}));
/** @type {?} */
const emitError = (/**
* @return {?}
*/
() => {
this.ngZone.run((/**

@@ -215,15 +251,55 @@ * @return {?}

() => {
this.ready.emit(editor);
this.error.emit();
}));
this.setUpEditorEvents(editor);
}))
.catch((/**
* @param {?} err
* @return {?}
*/
(err) => {
console.error(err.stack);
}));
});
/** @type {?} */
const element = document.createElement(this.tagName);
/** @type {?} */
const config = this.getConfig();
this.editorElement = element;
// Based on the presence of the watchdog decide how to initialize the editor.
if (this.watchdog) {
// When the context watchdog is passed add the new item to it based on the passed configuration.
this.watchdog.add({
id: this.id,
type: 'editor',
creator,
destructor,
sourceElementOrData: element,
config
});
this.watchdog.on('itemError', (/**
* @param {?} _
* @param {?} __1
* @return {?}
*/
(_, { itemId }) => {
if (itemId === this.id) {
emitError();
}
}));
}
else {
// In the other case create the watchdog by hand to keep the editor running.
/** @type {?} */
const editorWatchdog = new EditorWatchdog(this.editor);
editorWatchdog.setCreator(creator);
editorWatchdog.setDestructor(destructor);
editorWatchdog.on('error', emitError);
this.editorWatchdog = editorWatchdog;
this.editorWatchdog.create(element, config);
}
}
/**
* @private
* @return {?}
*/
getConfig() {
if (this.data && this.config.initialData) {
throw new Error('Editor data should be provided either using `config.initialData` or `data` properties.');
}
// Merge two possible ways of providing data into the `config.initialData` field.
return Object.assign({}, this.config, { initialData: this.config.initialData || this.data || '' });
}
/**
* Integrates the editor with the component by attaching related event listeners.

@@ -313,2 +389,3 @@ * @private

tagName: [{ type: Input }],
watchdog: [{ type: Input }],
disabled: [{ type: Input }],

@@ -318,3 +395,4 @@ ready: [{ type: Output }],

blur: [{ type: Output }],
focus: [{ type: Output }]
focus: [{ type: Output }],
error: [{ type: Output }]
};

@@ -355,2 +433,7 @@ if (false) {

/**
* The context watchdog.
* @type {?}
*/
CKEditorComponent.prototype.watchdog;
/**
* Fires when the editor is ready. It corresponds with the `editor#ready`

@@ -384,7 +467,14 @@ * https://ckeditor.com/docs/ckeditor5/latest/api/module_core_editor_editor-Editor.html#event-ready

/**
* The instance of the editor created by this component.
* Fires when the editor component crashes.
* @type {?}
*/
CKEditorComponent.prototype.editorInstance;
CKEditorComponent.prototype.error;
/**
* The editor watchdog. It is created when the context watchdog is not passed to the component.
* It keeps the editor running.
* @type {?}
* @private
*/
CKEditorComponent.prototype.editorWatchdog;
/**
* If the component is read–only before the editor instance is created, it remembers that state,

@@ -433,2 +523,7 @@ * so the editor can become read–only once it is ready.

CKEditorComponent.prototype.isEditorSettingData;
/**
* @type {?}
* @private
*/
CKEditorComponent.prototype.id;
}

@@ -465,2 +560,2 @@ /**

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNrZWRpdG9yL2NrZWRpdG9yNS1hbmd1bGFyLyIsInNvdXJjZXMiOlsiY2tlZGl0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBS0EsT0FBTyxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixZQUFZLEVBQ1osVUFBVSxFQUVWLFVBQVUsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBRU4saUJBQWlCLEVBQ2pCLE1BQU0sZ0JBQWdCLENBQUM7QUFrQnhCLE1BQU0sT0FBTyxpQkFBaUI7Ozs7O0lBd0g3QixZQUFvQixVQUFzQixFQUFFLE1BQWM7Ozs7OztRQXZHMUMsV0FBTSxHQUFxQixFQUFFLENBQUM7Ozs7O1FBTTlCLFNBQUksR0FBRyxFQUFFLENBQUM7Ozs7OztRQU9WLFlBQU8sR0FBRyxLQUFLLENBQUM7Ozs7OztRQXdCZixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7Ozs7OztRQU83QyxXQUFNLEdBQThCLElBQUksWUFBWSxFQUFlLENBQUM7Ozs7OztRQU9wRSxTQUFJLEdBQTRCLElBQUksWUFBWSxFQUFhLENBQUM7Ozs7OztRQU85RCxVQUFLLEdBQTZCLElBQUksWUFBWSxFQUFjLENBQUM7Ozs7UUFLM0UsbUJBQWMsR0FBNEIsSUFBSSxDQUFDOzs7OztRQU05QyxzQkFBaUIsR0FBRyxLQUFLLENBQUM7Ozs7UUFnQzFCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUduQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUM5QixDQUFDOzs7Ozs7OztJQXRGRCxJQUFvQixRQUFRLENBQUUsVUFBbUI7UUFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFFLFVBQVUsQ0FBRSxDQUFDO0lBQ3JDLENBQUM7Ozs7SUFFRCxJ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aUNBQTBCOzs7Ozs7O0lBTzFCLG9DQUFnQzs7Ozs7OztJQXdCaEMsa0NBQThEOzs7Ozs7O0lBTzlELG1DQUFxRjs7Ozs7OztJQU9yRixpQ0FBK0U7Ozs7Ozs7SUFPL0Usa0NBQWtGOzs7OztJQUtsRiwyQ0FBc0Q7Ozs7Ozs7SUFNdEQsOENBQWtDOzs7Ozs7O0lBTWxDLG1DQUF1Qjs7Ozs7Ozs7O0lBUXZCLHdDQUErQzs7Ozs7Ozs7O0lBUS9DLHlDQUFrQzs7Ozs7O0lBS2xDLDBDQUFvQzs7Ozs7O0lBS3BDLGdEQUFvQzs7Ozs7QUFxSnJDLCtCQUdDOzs7SUFGQSwwQkFBbUM7O0lBQ25DLDJCQUF5Qjs7Ozs7QUFHMUIsZ0NBR0M7OztJQUZBLDJCQUFvQzs7SUFDcEMsNEJBQXlCOzs7OztBQUcxQixpQ0FHQzs7O0lBRkEsNEJBQTBDOztJQUMxQyw2QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAwMy0yMDE5LCBDS1NvdXJjZSAtIEZyZWRlcmljbyBLbmFiYmVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogRm9yIGxpY2Vuc2luZywgc2VlIExJQ0VOU0UubWQuXG4gKi9cblxuaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRJbnB1dCxcblx0T3V0cHV0LFxuXHROZ1pvbmUsXG5cdEV2ZW50RW1pdHRlcixcblx0Zm9yd2FyZFJlZixcblx0QWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LFxuXHRFbGVtZW50UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuXHRDb250cm9sVmFsdWVBY2Nlc3Nvcixcblx0TkdfVkFMVUVfQUNDRVNTT1Jcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBDS0VkaXRvcjUgfSBmcm9tICcuL2NrZWRpdG9yJztcblxuQENvbXBvbmVudCgge1xuXHRzZWxlY3RvcjogJ2NrZWRpdG9yJyxcblx0dGVtcGxhdGU6ICc8bmctdGVtcGxhdGU+PC9uZy10ZW1wbGF0ZT4nLFxuXG5cdC8vIEludGVncmF0aW9uIHdpdGggQGFuZ3VsYXIvZm9ybXMuXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuXHRcdFx0dXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoICgpID0+IENLRWRpdG9yQ29tcG9uZW50ICksXG5cdFx0XHRtdWx0aTogdHJ1ZSxcblx0XHR9XG5cdF1cbn0gKVxuZXhwb3J0IGNsYXNzIENLRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cdC8qKlxuXHQgKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBET00gZWxlbWVudCBjcmVhdGVkIGJ5IHRoZSBjb21wb25lbnQuXG5cdCAqL1xuXHRwcml2YXRlIGVsZW1lbnRSZWYhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuXHQvKipcblx0ICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBlZGl0b3IgdG8gYmUgdXNlZCBmb3IgdGhlIGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQuXG5cdCAqIEl0IGNhbiBiZSBlLmcuIHRoZSBgQ2xhc3NpY0VkaXRvckJ1aWxkYCwgYElubGluZUVkaXRvckJ1aWxkYCBvciBzb21lIGN1c3RvbSBlZGl0b3IuXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgZWRpdG9yPzogQ0tFZGl0b3I1LkVkaXRvckNvbnN0cnVjdG9yO1xuXG5cdC8qKlxuXHQgKiBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZWRpdG9yLlxuXHQgKiBTZWUgaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjUvbGF0ZXN0L2FwaS9tb2R1bGVfY29yZV9lZGl0b3JfZWRpdG9yY29uZmlnLUVkaXRvckNvbmZpZy5odG1sXG5cdCAqIHRvIGxlYXJuIG1vcmUuXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgY29uZmlnOiBDS0VkaXRvcjUuQ29uZmlnID0ge307XG5cblx0LyoqXG5cdCAqIFRoZSBpbml0aWFsIGRhdGEgb2YgdGhlIGVkaXRvci4gVXNlZnVsIHdoZW4gbm90IHVzaW5nIHRoZSBuZ01vZGVsLlxuXHQgKiBTZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9mb3Jtcy9OZ01vZGVsIHRvIGxlYXJuIG1vcmUuXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgZGF0YSA9ICcnO1xuXG5cdC8qKlxuXHQgKiBUYWcgbmFtZSBvZiB0aGUgZWRpdG9yIGNvbXBvbmVudC5cblx0ICpcblx0ICogVGhlIGRlZmF1bHQgdGFnIGlzICdkaXYnLlxuXHQgKi9cblx0QElucHV0KCkgcHVibGljIHRhZ05hbWUgPSAnZGl2JztcblxuXHQvKipcblx0ICogV2hlbiBzZXQgYHRydWVgLCB0aGUgZWRpdG9yIGJlY29tZXMgcmVhZC1vbmx5LlxuXHQgKiBTZWUgaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjUvbGF0ZXN0L2FwaS9tb2R1bGVfY29yZV9lZGl0b3JfZWRpdG9yLUVkaXRvci5odG1sI21lbWJlci1pc1JlYWRPbmx5XG5cdCAqIHRvIGxlYXJuIG1vcmUuXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgc2V0IGRpc2FibGVkKCBpc0Rpc2FibGVkOiBib29sZWFuICkge1xuXHRcdHRoaXMuc2V0RGlzYWJsZWRTdGF0ZSggaXNEaXNhYmxlZCApO1xuXHR9XG5cblx0cHVibGljIGdldCBkaXNhYmxlZCgpIHtcblx0XHRpZiAoIHRoaXMuZWRpdG9ySW5zdGFuY2UgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lZGl0b3JJbnN0YW5jZS5pc1JlYWRPbmx5O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmluaXRpYWxJc0Rpc2FibGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpcmVzIHdoZW4gdGhlIGVkaXRvciBpcyByZWFkeS4gSXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgYGVkaXRvciNyZWFkeWBcblx0ICogaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjUvbGF0ZXN0L2FwaS9tb2R1bGVfY29yZV9lZGl0b3JfZWRpdG9yLUVkaXRvci5odG1sI2V2ZW50LXJlYWR5XG5cdCAqIGV2ZW50LlxuXHQgKi9cblx0QE91dHB1dCgpIHB1YmxpYyByZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8Q0tFZGl0b3I1LkVkaXRvcj4oKTtcblxuXHQvKipcblx0ICogRmlyZXMgd2hlbiB0aGUgY29udGVudCBvZiB0aGUgZWRpdG9yIGhhcyBjaGFuZ2VkLiBJdCBjb3JyZXNwb25kcyB3aXRoIHRoZSBgZWRpdG9yLm1vZGVsLmRvY3VtZW50I2NoYW5nZWBcblx0ICogaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjUvbGF0ZXN0L2FwaS9tb2R1bGVfZW5naW5lX21vZGVsX2RvY3VtZW50LURvY3VtZW50Lmh0bWwjZXZlbnQtY2hhbmdlXG5cdCAqIGV2ZW50LlxuXHQgKi9cblx0QE91dHB1dCgpIHB1YmxpYyBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPENoYW5nZUV2ZW50PigpO1xuXG5cdC8qKlxuXHQgKiBGaXJlcyB3aGVuIHRoZSBlZGl0aW5nIHZpZXcgb2YgdGhlIGVkaXRvciBpcyBibHVycmVkLiBJdCBjb3JyZXNwb25kcyB3aXRoIHRoZSBgZWRpdG9yLmVkaXRpbmcudmlldy5kb2N1bWVudCNibHVyYFxuXHQgKiBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNS9sYXRlc3QvYXBpL21vZHVsZV9lbmdpbmVfdmlld19kb2N1bWVudC1Eb2N1bWVudC5odG1sI2V2ZW50LWV2ZW50OmJsdXJcblx0ICogZXZlbnQuXG5cdCAqL1xuXHRAT3V0cHV0KCkgcHVibGljIGJsdXI6IEV2ZW50RW1pdHRlcjxCbHVyRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxCbHVyRXZlbnQ+KCk7XG5cblx0LyoqXG5cdCAqIEZpcmVzIHdoZW4gdGhlIGVkaXRpbmcgdmlldyBvZiB0aGUgZWRpdG9yIGlzIGZvY3VzZWQuIEl0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGBlZGl0b3IuZWRpdGluZy52aWV3LmRvY3VtZW50I2ZvY3VzYFxuXHQgKiBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNS9sYXRlc3QvYXBpL21vZHVsZV9lbmdpbmVfdmlld19kb2N1bWVudC1Eb2N1bWVudC5odG1sI2V2ZW50LWV2ZW50OmZvY3VzXG5cdCAqIGV2ZW50LlxuXHQgKi9cblx0QE91dHB1dCgpIHB1YmxpYyBmb2N1czogRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuXG5cdC8qKlxuXHQgKiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGVkaXRvciBjcmVhdGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuXHQgKi9cblx0cHVibGljIGVkaXRvckluc3RhbmNlOiBDS0VkaXRvcjUuRWRpdG9yIHwgbnVsbCA9IG51bGw7XG5cblx0LyoqXG5cdCAqIElmIHRoZSBjb21wb25lbnQgaXMgcmVhZOKAk29ubHkgYmVmb3JlIHRoZSBlZGl0b3IgaW5zdGFuY2UgaXMgY3JlYXRlZCwgaXQgcmVtZW1iZXJzIHRoYXQgc3RhdGUsXG5cdCAqIHNvIHRoZSBlZGl0b3IgY2FuIGJlY29tZSByZWFk4oCTb25seSBvbmNlIGl0IGlzIHJlYWR5LlxuXHQgKi9cblx0cHJpdmF0ZSBpbml0aWFsSXNEaXNhYmxlZCA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBBbiBpbnN0YW5jZSBvZiBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvcmUvTmdab25lIHRvIGFsbG93IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBlZGl0b3Jcblx0ICogd2l0aGluZyB0aGUgQW5ndWxhciBldmVudCBsb29wLlxuXHQgKi9cblx0cHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZTtcblxuXHQvKipcblx0ICogQSBjYWxsYmFjayBleGVjdXRlZCB3aGVuIHRoZSBjb250ZW50IG9mIHRoZSBlZGl0b3IgY2hhbmdlcy4gUGFydCBvZiB0aGVcblx0ICogYENvbnRyb2xWYWx1ZUFjY2Vzc29yYCAoaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9mb3Jtcy9Db250cm9sVmFsdWVBY2Nlc3NvcikgaW50ZXJmYWNlLlxuXHQgKlxuXHQgKiBOb3RlOiBVbnNldCB1bmxlc3MgdGhlIGNvbXBvbmVudCB1c2VzIHRoZSBgbmdNb2RlbGAuXG5cdCAqL1xuXHRwcml2YXRlIGN2YU9uQ2hhbmdlPzogKCBkYXRhOiBzdHJpbmcgKSA9PiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBBIGNhbGxiYWNrIGV4ZWN1dGVkIHdoZW4gdGhlIGVkaXRvciBoYXMgYmVlbiBibHVycmVkLiBQYXJ0IG9mIHRoZVxuXHQgKiBgQ29udHJvbFZhbHVlQWNjZXNzb3JgIChodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zL0NvbnRyb2xWYWx1ZUFjY2Vzc29yKSBpbnRlcmZhY2UuXG5cdCAqXG5cdCAqIE5vdGU6IFVuc2V0IHVubGVzcyB0aGUgY29tcG9uZW50IHVzZXMgdGhlIGBuZ01vZGVsYC5cblx0ICovXG5cdHByaXZhdGUgY3ZhT25Ub3VjaGVkPzogKCkgPT4gdm9pZDtcblxuXHQvKipcblx0ICogUmVmZXJlbmNlIHRvIHRoZSBzb3VyY2UgZWxlbWVudCB1c2VkIGJ5IHRoZSBlZGl0b3IuXG5cdCAqL1xuXHRwcml2YXRlIGVkaXRvckVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcblxuXHQvKipcblx0ICogQSBsb2NrIGZsYWcgcHJldmVudGluZyBmcm9tIGNhbGxpbmcgdGhlIGBjdmFPbkNoYW5nZSgpYCBkdXJpbmcgc2V0dGluZyBlZGl0b3IgZGF0YS5cblx0ICovXG5cdHByaXZhdGUgaXNFZGl0b3JTZXR0aW5nRGF0YSA9IGZhbHNlO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvciggZWxlbWVudFJlZjogRWxlbWVudFJlZiwgbmdab25lOiBOZ1pvbmUgKSB7XG5cdFx0dGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG5cdFx0dGhpcy5lbGVtZW50UmVmID0gZWxlbWVudFJlZjtcblx0fVxuXG5cdC8vIEltcGxlbWVudGluZyB0aGUgQWZ0ZXJWaWV3SW5pdCBpbnRlcmZhY2UuXG5cdHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG5cdFx0dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoICgpID0+IHtcblx0XHRcdHRoaXMuY3JlYXRlRWRpdG9yKCk7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gSW1wbGVtZW50aW5nIHRoZSBPbkRlc3Ryb3kgaW50ZXJmYWNlLlxuXHRwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG5cdFx0aWYgKCB0aGlzLmVkaXRvckluc3RhbmNlICkge1xuXHRcdFx0dGhpcy5lZGl0b3JJbnN0YW5jZS5kZXN0cm95KCk7XG5cdFx0XHR0aGlzLmVkaXRvckluc3RhbmNlID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHQvLyBJbXBsZW1lbnRpbmcgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSAob25seSB3aGVuIGJpbmRpbmcgdG8gbmdNb2RlbCkuXG5cdHB1YmxpYyB3cml0ZVZhbHVlKCB2YWx1ZTogc3RyaW5nIHwgbnVsbCApOiB2b2lkIHtcblx0XHQvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCB0aGUgYG51bGxgIHZhbHVlIHdoZW4gdGhlIGZvcm0gcmVzZXRzLlxuXHRcdC8vIEEgY29tcG9uZW50J3MgcmVzcG9uc2liaWxpdHkgaXMgdG8gcmVzdG9yZSB0byB0aGUgaW5pdGlhbCBzdGF0ZS5cblx0XHRpZiAoIHZhbHVlID09PSBudWxsICkge1xuXHRcdFx0dmFsdWUgPSAnJztcblx0XHR9XG5cblx0XHQvLyBJZiBhbHJlYWR5IGluaXRpYWxpemVkLlxuXHRcdGlmICggdGhpcy5lZGl0b3JJbnN0YW5jZSApIHtcblx0XHRcdC8vIFRoZSBsb2NrIG1lY2hhbmlzbSBwcmV2ZW50cyBmcm9tIGNhbGxpbmcgYGN2YU9uQ2hhbmdlKClgIGR1cmluZyBjaGFuZ2luZ1xuXHRcdFx0Ly8gdGhlIGVkaXRvciBzdGF0ZS4gU2VlICMxMzlcblx0XHRcdHRoaXMuaXNFZGl0b3JTZXR0aW5nRGF0YSA9IHRydWU7XG5cdFx0XHR0aGlzLmVkaXRvckluc3RhbmNlLnNldERhdGEoIHZhbHVlICk7XG5cdFx0XHR0aGlzLmlzRWRpdG9yU2V0dGluZ0RhdGEgPSBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gSWYgbm90LCB3YWl0IGZvciBpdCB0byBiZSByZWFkeTsgc3RvcmUgdGhlIGRhdGEuXG5cdFx0ZWxzZSB7XG5cdFx0XHR0aGlzLmRhdGEgPSB2YWx1ZTtcblxuXHRcdFx0Ly8gSWYgdGhlIGVkaXRvciBlbGVtZW50IGlzIGFscmVhZHkgYXZhaWxhYmxlLCB0aGVuIHVwZGF0ZSBpdHMgY29udGVudC5cblx0XHRcdC8vIElmIHRoZSBuZ01vZGVsIGlzIHVzZWQgdGhlbiB0aGUgZWRpdG9yIGVsZW1lbnQgc2hvdWxkIGJlIHVwZGF0ZWQgZGlyZWN0bHkgaGVyZS5cblx0XHRcdGlmICggdGhpcy5lZGl0b3JFbGVtZW50ICkge1xuXHRcdFx0XHR0aGlzLmVkaXRvckVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5kYXRhO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEltcGxlbWVudGluZyB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlIChvbmx5IHdoZW4gYmluZGluZyB0byBuZ01vZGVsKS5cblx0cHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoIGNhbGxiYWNrOiAoIGRhdGE6IHN0cmluZyApID0+IHZvaWQgKTogdm9pZCB7XG5cdFx0dGhpcy5jdmFPbkNoYW5nZSA9IGNhbGxiYWNrO1xuXHR9XG5cblx0Ly8gSW1wbGVtZW50aW5nIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UgKG9ubHkgd2hlbiBiaW5kaW5nIHRvIG5nTW9kZWwpLlxuXHRwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoIGNhbGxiYWNrOiAoKSA9PiB2b2lkICk6IHZvaWQge1xuXHRcdHRoaXMuY3ZhT25Ub3VjaGVkID0gY2FsbGJhY2s7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnRpbmcgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSAob25seSB3aGVuIGJpbmRpbmcgdG8gbmdNb2RlbCkuXG5cdHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKCBpc0Rpc2FibGVkOiBib29sZWFuICk6IHZvaWQge1xuXHRcdC8vIElmIGFscmVhZHkgaW5pdGlhbGl6ZWRcblx0XHRpZiAoIHRoaXMuZWRpdG9ySW5zdGFuY2UgKSB7XG5cdFx0XHR0aGlzLmVkaXRvckluc3RhbmNlLmlzUmVhZE9ubHkgPSBpc0Rpc2FibGVkO1xuXHRcdH1cblx0XHQvLyBJZiBub3QsIHdhaXQgZm9yIGl0IHRvIGJlIHJlYWR5OyBzdG9yZSB0aGUgc3RhdGUuXG5cdFx0ZWxzZSB7XG5cdFx0XHR0aGlzLmluaXRpYWxJc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgZWRpdG9yIGluc3RhbmNlLCBzZXRzIGluaXRpYWwgZWRpdG9yIGRhdGEsIHRoZW4gaW50ZWdyYXRlc1xuXHQgKiB0aGUgZWRpdG9yIHdpdGggdGhlIEFuZ3VsYXIgY29tcG9uZW50LiBUaGlzIG1ldGhvZCBkb2VzIG5vdCB1c2UgdGhlIGBlZGl0b3Iuc2V0RGF0YSgpYFxuXHQgKiBiZWNhdXNlIG9mIHRoZSBpc3N1ZSBpbiB0aGUgY29sbGFib3JhdGlvbiBtb2RlICgjNikuXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZUVkaXRvcigpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggdGhpcy50YWdOYW1lICk7XG5cdFx0dGhpcy5lZGl0b3JFbGVtZW50ID0gZWxlbWVudDtcblxuXHRcdGlmICggdGhpcy5kYXRhICYmIHRoaXMuY29uZmlnLmluaXRpYWxEYXRhICkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCAnRWRpdG9yIGRhdGEgc2hvdWxkIGJlIHByb3ZpZGVkIGVpdGhlciB1c2luZyBgY29uZmlnLmluaXRpYWxEYXRhYCBvciBgZGF0YWAgcHJvcGVydGllcy4nICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWVyZ2UgdHdvIHBvc3NpYmxlIHdheXMgb2YgcHJvdmlkaW5nIGRhdGEgaW50byB0aGUgYGNvbmZpZy5pbml0aWFsRGF0YWAgZmllbGQuXG5cdFx0Y29uc3QgY29uZmlnID0ge1xuXHRcdFx0Li4udGhpcy5jb25maWcsXG5cdFx0XHRpbml0aWFsRGF0YTogdGhpcy5jb25maWcuaW5pdGlhbERhdGEgfHwgdGhpcy5kYXRhIHx8ICcnXG5cdFx0fTtcblxuXHRcdHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKCBlbGVtZW50ICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lZGl0b3IhLmNyZWF0ZSggZWxlbWVudCwgY29uZmlnIClcblx0XHRcdC50aGVuKCBlZGl0b3IgPT4ge1xuXHRcdFx0XHR0aGlzLmVkaXRvckluc3RhbmNlID0gZWRpdG9yO1xuXG5cdFx0XHRcdGlmICggdGhpcy5pbml0aWFsSXNEaXNhYmxlZCApIHtcblx0XHRcdFx0XHRlZGl0b3IuaXNSZWFkT25seSA9IHRoaXMuaW5pdGlhbElzRGlzYWJsZWQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLnJlYWR5LmVtaXQoIGVkaXRvciApO1xuXHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0dGhpcy5zZXRVcEVkaXRvckV2ZW50cyggZWRpdG9yICk7XG5cdFx0XHR9IClcblx0XHRcdC5jYXRjaCggKCBlcnI6IEVycm9yICkgPT4ge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKCBlcnIuc3RhY2sgKTtcblx0XHRcdH0gKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbnRlZ3JhdGVzIHRoZSBlZGl0b3Igd2l0aCB0aGUgY29tcG9uZW50IGJ5IGF0dGFjaGluZyByZWxhdGVkIGV2ZW50IGxpc3RlbmVycy5cblx0ICovXG5cdHByaXZhdGUgc2V0VXBFZGl0b3JFdmVudHMoIGVkaXRvcjogQ0tFZGl0b3I1LkVkaXRvciApOiB2b2lkIHtcblx0XHRjb25zdCBtb2RlbERvY3VtZW50ID0gZWRpdG9yLm1vZGVsLmRvY3VtZW50O1xuXHRcdGNvbnN0IHZpZXdEb2N1bWVudCA9IGVkaXRvci5lZGl0aW5nLnZpZXcuZG9jdW1lbnQ7XG5cblx0XHRtb2RlbERvY3VtZW50Lm9uKCAnY2hhbmdlOmRhdGEnLCAoIGV2dDogQ0tFZGl0b3I1LkV2ZW50SW5mbzwnY2hhbmdlOmRhdGEnPiApID0+IHtcblx0XHRcdHRoaXMubmdab25lLnJ1biggKCkgPT4ge1xuXHRcdFx0XHRpZiAoIHRoaXMuY3ZhT25DaGFuZ2UgJiYgIXRoaXMuaXNFZGl0b3JTZXR0aW5nRGF0YSApIHtcblx0XHRcdFx0XHRjb25zdCBkYXRhID0gZWRpdG9yLmdldERhdGEoKTtcblxuXHRcdFx0XHRcdHRoaXMuY3ZhT25DaGFuZ2UoIGRhdGEgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuY2hhbmdlLmVtaXQoIHsgZXZlbnQ6IGV2dCwgZWRpdG9yIH0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cblx0XHR2aWV3RG9jdW1lbnQub24oICdmb2N1cycsICggZXZ0OiBDS0VkaXRvcjUuRXZlbnRJbmZvPCdmb2N1cyc+ICkgPT4ge1xuXHRcdFx0dGhpcy5uZ1pvbmUucnVuKCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZm9jdXMuZW1pdCggeyBldmVudDogZXZ0LCBlZGl0b3IgfSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblxuXHRcdHZpZXdEb2N1bWVudC5vbiggJ2JsdXInLCAoIGV2dDogQ0tFZGl0b3I1LkV2ZW50SW5mbzwnYmx1cic+ICkgPT4ge1xuXHRcdFx0dGhpcy5uZ1pvbmUucnVuKCAoKSA9PiB7XG5cdFx0XHRcdGlmICggdGhpcy5jdmFPblRvdWNoZWQgKSB7XG5cdFx0XHRcdFx0dGhpcy5jdmFPblRvdWNoZWQoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuYmx1ci5lbWl0KCB7IGV2ZW50OiBldnQsIGVkaXRvciB9ICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmx1ckV2ZW50IHtcblx0ZXZlbnQ6IENLRWRpdG9yNS5FdmVudEluZm88J2JsdXInPjtcblx0ZWRpdG9yOiBDS0VkaXRvcjUuRWRpdG9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvY3VzRXZlbnQge1xuXHRldmVudDogQ0tFZGl0b3I1LkV2ZW50SW5mbzwnZm9jdXMnPjtcblx0ZWRpdG9yOiBDS0VkaXRvcjUuRWRpdG9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZUV2ZW50IHtcblx0ZXZlbnQ6IENLRWRpdG9yNS5FdmVudEluZm88J2NoYW5nZTpkYXRhJz47XG5cdGVkaXRvcjogQ0tFZGl0b3I1LkVkaXRvcjtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNrZWRpdG9yL2NrZWRpdG9yNS1hbmd1bGFyLyIsInNvdXJjZXMiOlsiY2tlZGl0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUtBLE9BQU8sRUFDTixTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sWUFBWSxFQUNaLFVBQVUsRUFFVixVQUFVLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxjQUFjLE1BQU0saURBQWlELENBQUM7QUFFN0UsT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDO0FBRXhCLE9BQU8sRUFFTixpQkFBaUIsRUFDakIsTUFBTSxnQkFBZ0IsQ0FBQztBQWtCeEIsTUFBTSxPQUFPLGlCQUFpQjs7Ozs7SUFvSjdCLFlBQW9CLFVBQXNCLEVBQUUsTUFBYzs7Ozs7O1FBbkkxQyxXQUFNLEdBQXFCLEVBQUUsQ0FBQzs7Ozs7UUFNOUIsU0FBSSxHQUFHLEVBQUUsQ0FBQzs7Ozs7O1FBT1YsWUFBTyxHQUFHLEtBQUssQ0FBQzs7Ozs7O1FBNkJmLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQzs7Ozs7O1FBTzdDLFdBQU0sR0FBOEIsSUFBSSxZQUFZLEVBQWUsQ0FBQzs7Ozs7O1FBT3BFLFNBQUksR0FBNEIsSUFBSSxZQUFZLEVBQWEsQ0FBQzs7Ozs7O1FBTzlELFVBQUssR0FBNkIsSUFBSSxZQUFZLEVBQWMsQ0FBQzs7OztRQUtqRSxVQUFLLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7Ozs7O1FBMkI5RCxzQkFBaUIsR0FBRyxLQUFLLENBQUM7Ozs7UUFnQzFCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUU1QixPQUFFLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFHbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFD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Ozs7SUFFcEMsK0JBQW1COzs7OztBQW1NcEIsK0JBR0M7OztJQUZBLDBCQUFtQzs7SUFDbkMsMkJBQXlCOzs7OztBQUcxQixnQ0FHQzs7O0lBRkEsMkJBQW9DOztJQUNwQyw0QkFBeUI7Ozs7O0FBRzFCLGlDQUdDOzs7SUFGQSw0QkFBMEM7O0lBQzFDLDZCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDAzLTIwMjAsIENLU291cmNlIC0gRnJlZGVyaWNvIEtuYWJiZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBGb3IgbGljZW5zaW5nLCBzZWUgTElDRU5TRS5tZC5cbiAqL1xuXG5pbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdE5nWm9uZSxcblx0RXZlbnRFbWl0dGVyLFxuXHRmb3J3YXJkUmVmLFxuXHRBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksXG5cdEVsZW1lbnRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCBFZGl0b3JXYXRjaGRvZyBmcm9tICdAY2tlZGl0b3IvY2tlZGl0b3I1LXdhdGNoZG9nL3NyYy9lZGl0b3J3YXRjaGRvZyc7XG5cbmltcG9ydCB1aWQgZnJvbSAnLi91aWQnO1xuXG5pbXBvcnQge1xuXHRDb250cm9sVmFsdWVBY2Nlc3Nvcixcblx0TkdfVkFMVUVfQUNDRVNTT1Jcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBDS0VkaXRvcjUgfSBmcm9tICcuL2NrZWRpdG9yJztcblxuQENvbXBvbmVudCgge1xuXHRzZWxlY3RvcjogJ2NrZWRpdG9yJyxcblx0dGVtcGxhdGU6ICc8bmctdGVtcGxhdGU+PC9uZy10ZW1wbGF0ZT4nLFxuXG5cdC8vIEludGVncmF0aW9uIHdpdGggQGFuZ3VsYXIvZm9ybXMuXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuXHRcdFx0dXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoICgpID0+IENLRWRpdG9yQ29tcG9uZW50ICksXG5cdFx0XHRtdWx0aTogdHJ1ZSxcblx0XHR9XG5cdF1cbn0gKVxuZXhwb3J0IGNsYXNzIENLRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cdC8qKlxuXHQgKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBET00gZWxlbWVudCBjcmVhdGVkIGJ5IHRoZSBjb21wb25lbnQuXG5cdCAqL1xuXHRwcml2YXRlIGVsZW1lbnRSZWYhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuXHQvKipcblx0ICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBlZGl0b3IgdG8gYmUgdXNlZCBmb3IgdGhlIGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQuXG5cdCAqIEl0IGNhbiBiZSBlLmcuIHRoZSBgQ2xhc3NpY0VkaXRvckJ1aWxkYCwgYElubGluZUVkaXRvckJ1aWxkYCBvciBzb21lIGN1c3RvbSBlZGl0b3IuXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgZWRpdG9yPzogQ0tFZGl0b3I1LkVkaXRvckNvbnN0cnVjdG9yO1xuXG5cdC8qKlxuXHQgKiBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZWRpdG9yLlxuXHQgKiBTZWUgaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjUvbGF0ZXN0L2FwaS9tb2R1bGVfY29yZV9lZGl0b3JfZWRpdG9yY29uZmlnLUVkaXRvckNvbmZpZy5odG1sXG5cdCAqIHRvIGxlYXJuIG1vcmUuXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgY29uZmlnOiBDS0VkaXRvcjUuQ29uZmlnID0ge307XG5cblx0LyoqXG5cdCAqIFRoZSBpbml0aWFsIGRhdGEgb2YgdGhlIGVkaXRvci4gVXNlZnVsIHdoZW4gbm90IHVzaW5nIHRoZSBuZ01vZGVsLlxuXHQgKiBTZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9mb3Jtcy9OZ01vZGVsIHRvIGxlYXJuIG1vcmUuXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgZGF0YSA9ICcnO1xuXG5cdC8qKlxuXHQgKiBUYWcgbmFtZSBvZiB0aGUgZWRpdG9yIGNvbXBvbmVudC5cblx0ICpcblx0ICogVGhlIGRlZmF1bHQgdGFnIGlzICdkaXYnLlxuXHQgKi9cblx0QElucHV0KCkgcHVibGljIHRhZ05hbWUgPSAnZGl2JztcblxuXHQvKipcblx0ICogVGhlIGNvbnRleHQgd2F0Y2hkb2cuXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgd2F0Y2hkb2c/OiBDS0VkaXRvcjUuQ29udGV4dFdhdGNoZG9nO1xuXG5cdC8qKlxuXHQgKiBXaGVuIHNldCBgdHJ1ZWAsIHRoZSBlZGl0b3IgYmVjb21lcyByZWFkLW9ubHkuXG5cdCAqIFNlZSBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNS9sYXRlc3QvYXBpL21vZHVsZV9jb3JlX2VkaXRvcl9lZGl0b3ItRWRpdG9yLmh0bWwjbWVtYmVyLWlzUmVhZE9ubHlcblx0ICogdG8gbGVhcm4gbW9yZS5cblx0ICovXG5cdEBJbnB1dCgpIHB1YmxpYyBzZXQgZGlzYWJsZWQoIGlzRGlzYWJsZWQ6IGJvb2xlYW4gKSB7XG5cdFx0dGhpcy5zZXREaXNhYmxlZFN0YXRlKCBpc0Rpc2FibGVkICk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGRpc2FibGVkKCkge1xuXHRcdGlmICggdGhpcy5lZGl0b3JJbnN0YW5jZSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVkaXRvckluc3RhbmNlLmlzUmVhZE9ubHk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuaW5pdGlhbElzRGlzYWJsZWQ7XG5cdH1cblxuXHQvKipcblx0ICogRmlyZXMgd2hlbiB0aGUgZWRpdG9yIGlzIHJlYWR5LiBJdCBjb3JyZXNwb25kcyB3aXRoIHRoZSBgZWRpdG9yI3JlYWR5YFxuXHQgKiBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNS9sYXRlc3QvYXBpL21vZHVsZV9jb3JlX2VkaXRvcl9lZGl0b3ItRWRpdG9yLmh0bWwjZXZlbnQtcmVhZHlcblx0ICogZXZlbnQuXG5cdCAqL1xuXHRAT3V0cHV0KCkgcHVibGljIHJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxDS0VkaXRvcjUuRWRpdG9yPigpO1xuXG5cdC8qKlxuXHQgKiBGaXJlcyB3aGVuIHRoZSBjb250ZW50IG9mIHRoZSBlZGl0b3IgaGFzIGNoYW5nZWQuIEl0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGBlZGl0b3IubW9kZWwuZG9jdW1lbnQjY2hhbmdlYFxuXHQgKiBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNS9sYXRlc3QvYXBpL21vZHVsZV9lbmdpbmVfbW9kZWxfZG9jdW1lbnQtRG9jdW1lbnQuaHRtbCNldmVudC1jaGFuZ2Vcblx0ICogZXZlbnQuXG5cdCAqL1xuXHRAT3V0cHV0KCkgcHVibGljIGNoYW5nZTogRXZlbnRFbWl0dGVyPENoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hhbmdlRXZlbnQ+KCk7XG5cblx0LyoqXG5cdCAqIEZpcmVzIHdoZW4gdGhlIGVkaXRpbmcgdmlldyBvZiB0aGUgZWRpdG9yIGlzIGJsdXJyZWQuIEl0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGBlZGl0b3IuZWRpdGluZy52aWV3LmRvY3VtZW50I2JsdXJgXG5cdCAqIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I1L2xhdGVzdC9hcGkvbW9kdWxlX2VuZ2luZV92aWV3X2RvY3VtZW50LURvY3VtZW50Lmh0bWwjZXZlbnQtZXZlbnQ6Ymx1clxuXHQgKiBldmVudC5cblx0ICovXG5cdEBPdXRwdXQoKSBwdWJsaWMgYmx1cjogRXZlbnRFbWl0dGVyPEJsdXJFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEJsdXJFdmVudD4oKTtcblxuXHQvKipcblx0ICogRmlyZXMgd2hlbiB0aGUgZWRpdGluZyB2aWV3IG9mIHRoZSBlZGl0b3IgaXMgZm9jdXNlZC4gSXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgYGVkaXRvci5lZGl0aW5nLnZpZXcuZG9jdW1lbnQjZm9jdXNgXG5cdCAqIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I1L2xhdGVzdC9hcGkvbW9kdWxlX2VuZ2luZV92aWV3X2RvY3VtZW50LURvY3VtZW50Lmh0bWwjZXZlbnQtZXZlbnQ6Zm9jdXNcblx0ICogZXZlbnQuXG5cdCAqL1xuXHRAT3V0cHV0KCkgcHVibGljIGZvY3VzOiBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG5cblx0LyoqXG5cdCAqIEZpcmVzIHdoZW4gdGhlIGVkaXRvciBjb21wb25lbnQgY3Jhc2hlcy5cblx0ICovXG5cdEBPdXRwdXQoKSBwdWJsaWMgZXJyb3I6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuXHQvKipcblx0ICogVGhlIGluc3RhbmNlIG9mIHRoZSBlZGl0b3IgY3JlYXRlZCBieSB0aGlzIGNvbXBvbmVudC5cblx0ICovXG5cdHB1YmxpYyBnZXQgZWRpdG9ySW5zdGFuY2UoKTogQ0tFZGl0b3I1LkVkaXRvciB8IG51bGwge1xuXHRcdGlmICggdGhpcy5lZGl0b3JXYXRjaGRvZyApIHtcblx0XHRcdHJldHVybiB0aGlzLmVkaXRvcldhdGNoZG9nLmVkaXRvcjtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMud2F0Y2hkb2cgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy53YXRjaGRvZy5nZXRJdGVtKCB0aGlzLmlkICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGVkaXRvciB3YXRjaGRvZy4gSXQgaXMgY3JlYXRlZCB3aGVuIHRoZSBjb250ZXh0IHdhdGNoZG9nIGlzIG5vdCBwYXNzZWQgdG8gdGhlIGNvbXBvbmVudC5cblx0ICogSXQga2VlcHMgdGhlIGVkaXRvciBydW5uaW5nLlxuXHQgKi9cblx0cHJpdmF0ZSBlZGl0b3JXYXRjaGRvZz86IENLRWRpdG9yNS5FZGl0b3JXYXRjaGRvZztcblxuXHQvKipcblx0ICogSWYgdGhlIGNvbXBvbmVudCBpcyByZWFk4oCTb25seSBiZWZvcmUgdGhlIGVkaXRvciBpbnN0YW5jZSBpcyBjcmVhdGVkLCBpdCByZW1lbWJlcnMgdGhhdCBzdGF0ZSxcblx0ICogc28gdGhlIGVkaXRvciBjYW4gYmVjb21lIHJlYWTigJNvbmx5IG9uY2UgaXQgaXMgcmVhZHkuXG5cdCAqL1xuXHRwcml2YXRlIGluaXRpYWxJc0Rpc2FibGVkID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEFuIGluc3RhbmNlIG9mIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvY29yZS9OZ1pvbmUgdG8gYWxsb3cgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGVkaXRvclxuXHQgKiB3aXRoaW5nIHRoZSBBbmd1bGFyIGV2ZW50IGxvb3AuXG5cdCAqL1xuXHRwcml2YXRlIG5nWm9uZTogTmdab25lO1xuXG5cdC8qKlxuXHQgKiBBIGNhbGxiYWNrIGV4ZWN1dGVkIHdoZW4gdGhlIGNvbnRlbnQgb2YgdGhlIGVkaXRvciBjaGFuZ2VzLiBQYXJ0IG9mIHRoZVxuXHQgKiBgQ29udHJvbFZhbHVlQWNjZXNzb3JgIChodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zL0NvbnRyb2xWYWx1ZUFjY2Vzc29yKSBpbnRlcmZhY2UuXG5cdCAqXG5cdCAqIE5vdGU6IFVuc2V0IHVubGVzcyB0aGUgY29tcG9uZW50IHVzZXMgdGhlIGBuZ01vZGVsYC5cblx0ICovXG5cdHByaXZhdGUgY3ZhT25DaGFuZ2U/OiAoIGRhdGE6IHN0cmluZyApID0+IHZvaWQ7XG5cblx0LyoqXG5cdCAqIEEgY2FsbGJhY2sgZXhlY3V0ZWQgd2hlbiB0aGUgZWRpdG9yIGhhcyBiZWVuIGJsdXJyZWQuIFBhcnQgb2YgdGhlXG5cdCAqIGBDb250cm9sVmFsdWVBY2Nlc3NvcmAgKGh0dHBzOi8vYW5ndWxhci5pby9hcGkvZm9ybXMvQ29udHJvbFZhbHVlQWNjZXNzb3IpIGludGVyZmFjZS5cblx0ICpcblx0ICogTm90ZTogVW5zZXQgdW5sZXNzIHRoZSBjb21wb25lbnQgdXNlcyB0aGUgYG5nTW9kZWxgLlxuXHQgKi9cblx0cHJpdmF0ZSBjdmFPblRvdWNoZWQ/OiAoKSA9PiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBSZWZlcmVuY2UgdG8gdGhlIHNvdXJjZSBlbGVtZW50IHVzZWQgYnkgdGhlIGVkaXRvci5cblx0ICovXG5cdHByaXZhdGUgZWRpdG9yRWxlbWVudD86IEhUTUxFbGVtZW50O1xuXG5cdC8qKlxuXHQgKiBBIGxvY2sgZmxhZyBwcmV2ZW50aW5nIGZyb20gY2FsbGluZyB0aGUgYGN2YU9uQ2hhbmdlKClgIGR1cmluZyBzZXR0aW5nIGVkaXRvciBkYXRhLlxuXHQgKi9cblx0cHJpdmF0ZSBpc0VkaXRvclNldHRpbmdEYXRhID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBpZCA9IHVpZCgpO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvciggZWxlbWVudFJlZjogRWxlbWVudFJlZiwgbmdab25lOiBOZ1pvbmUgKSB7XG5cdFx0dGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG5cdFx0dGhpcy5lbGVtZW50UmVmID0gZWxlbWVudFJlZjtcblx0fVxuXG5cdC8vIEltcGxlbWVudGluZyB0aGUgQWZ0ZXJWaWV3SW5pdCBpbnRlcmZhY2UuXG5cdHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG5cdFx0dGhpcy5hdHRhY2hUb1dhdGNoZG9nKCk7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnRpbmcgdGhlIE9uRGVzdHJveSBpbnRlcmZhY2UuXG5cdHB1YmxpYyBhc3luYyBuZ09uRGVzdHJveSgpIHtcblx0XHRpZiAoIHRoaXMud2F0Y2hkb2cgKSB7XG5cdFx0XHRhd2FpdCB0aGlzLndhdGNoZG9nLnJlbW92ZSggdGhpcy5pZCApO1xuXHRcdH0gZWxzZSBpZiAoIHRoaXMuZWRpdG9yV2F0Y2hkb2cgJiYgdGhpcy5lZGl0b3JXYXRjaGRvZy5lZGl0b3IgKSB7XG5cdFx0XHRhd2FpdCB0aGlzLmVkaXRvcldhdGNoZG9nLmRlc3Ryb3koKTtcblxuXHRcdFx0dGhpcy5lZGl0b3JXYXRjaGRvZyA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHQvLyBJbXBsZW1lbnRpbmcgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSAob25seSB3aGVuIGJpbmRpbmcgdG8gbmdNb2RlbCkuXG5cdHB1YmxpYyB3cml0ZVZhbHVlKCB2YWx1ZTogc3RyaW5nIHwgbnVsbCApOiB2b2lkIHtcblx0XHQvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCB0aGUgYG51bGxgIHZhbHVlIHdoZW4gdGhlIGZvcm0gcmVzZXRzLlxuXHRcdC8vIEEgY29tcG9uZW50J3MgcmVzcG9uc2liaWxpdHkgaXMgdG8gcmVzdG9yZSB0byB0aGUgaW5pdGlhbCBzdGF0ZS5cblx0XHRpZiAoIHZhbHVlID09PSBudWxsICkge1xuXHRcdFx0dmFsdWUgPSAnJztcblx0XHR9XG5cblx0XHQvLyBJZiBhbHJlYWR5IGluaXRpYWxpemVkLlxuXHRcdGlmICggdGhpcy5lZGl0b3JJbnN0YW5jZSApIHtcblx0XHRcdC8vIFRoZSBsb2NrIG1lY2hhbmlzbSBwcmV2ZW50cyBmcm9tIGNhbGxpbmcgYGN2YU9uQ2hhbmdlKClgIGR1cmluZyBjaGFuZ2luZ1xuXHRcdFx0Ly8gdGhlIGVkaXRvciBzdGF0ZS4gU2VlICMxMzlcblx0XHRcdHRoaXMuaXNFZGl0b3JTZXR0aW5nRGF0YSA9IHRydWU7XG5cdFx0XHR0aGlzLmVkaXRvckluc3RhbmNlLnNldERhdGEoIHZhbHVlICk7XG5cdFx0XHR0aGlzLmlzRWRpdG9yU2V0dGluZ0RhdGEgPSBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gSWYgbm90LCB3YWl0IGZvciBpdCB0byBiZSByZWFkeTsgc3RvcmUgdGhlIGRhdGEuXG5cdFx0ZWxzZSB7XG5cdFx0XHR0aGlzLmRhdGEgPSB2YWx1ZTtcblxuXHRcdFx0Ly8gSWYgdGhlIGVkaXRvciBlbGVtZW50IGlzIGFscmVhZHkgYXZhaWxhYmxlLCB0aGVuIHVwZGF0ZSBpdHMgY29udGVudC5cblx0XHRcdC8vIElmIHRoZSBuZ01vZGVsIGlzIHVzZWQgdGhlbiB0aGUgZWRpdG9yIGVsZW1lbnQgc2hvdWxkIGJlIHVwZGF0ZWQgZGlyZWN0bHkgaGVyZS5cblx0XHRcdGlmICggdGhpcy5lZGl0b3JFbGVtZW50ICkge1xuXHRcdFx0XHR0aGlzLmVkaXRvckVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5kYXRhO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEltcGxlbWVudGluZyB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlIChvbmx5IHdoZW4gYmluZGluZyB0byBuZ01vZGVsKS5cblx0cHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoIGNhbGxiYWNrOiAoIGRhdGE6IHN0cmluZyApID0+IHZvaWQgKTogdm9pZCB7XG5cdFx0dGhpcy5jdmFPbkNoYW5nZSA9IGNhbGxiYWNrO1xuXHR9XG5cblx0Ly8gSW1wbGVtZW50aW5nIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UgKG9ubHkgd2hlbiBiaW5kaW5nIHRvIG5nTW9kZWwpLlxuXHRwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoIGNhbGxiYWNrOiAoKSA9PiB2b2lkICk6IHZvaWQge1xuXHRcdHRoaXMuY3ZhT25Ub3VjaGVkID0gY2FsbGJhY2s7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnRpbmcgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSAob25seSB3aGVuIGJpbmRpbmcgdG8gbmdNb2RlbCkuXG5cdHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKCBpc0Rpc2FibGVkOiBib29sZWFuICk6IHZvaWQge1xuXHRcdC8vIElmIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG5cdFx0aWYgKCB0aGlzLmVkaXRvckluc3RhbmNlICkge1xuXHRcdFx0dGhpcy5lZGl0b3JJbnN0YW5jZS5pc1JlYWRPbmx5ID0gaXNEaXNhYmxlZDtcblx0XHR9XG5cblx0XHQvLyBTdG9yZSB0aGUgc3RhdGUgYW55d2F5IHRvIHVzZSBpdCBvbmNlIHRoZSBlZGl0b3IgaXMgY3JlYXRlZC5cblx0XHR0aGlzLmluaXRpYWxJc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBlZGl0b3IgaW5zdGFuY2UsIHNldHMgaW5pdGlhbCBlZGl0b3IgZGF0YSwgdGhlbiBpbnRlZ3JhdGVzXG5cdCAqIHRoZSBlZGl0b3Igd2l0aCB0aGUgQW5ndWxhciBjb21wb25lbnQuIFRoaXMgbWV0aG9kIGRvZXMgbm90IHVzZSB0aGUgYGVkaXRvci5zZXREYXRhKClgXG5cdCAqIGJlY2F1c2Ugb2YgdGhlIGlzc3VlIGluIHRoZSBjb2xsYWJvcmF0aW9uIG1vZGUgKCM2KS5cblx0ICovXG5cdHByaXZhdGUgYXR0YWNoVG9XYXRjaGRvZygpIHtcblx0XHRjb25zdCBjcmVhdG9yID0gYXN5bmMgKCBlbGVtZW50OiBIVE1MRWxlbWVudCwgY29uZmlnOiBDS0VkaXRvcjUuQ29uZmlnICkgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCBhc3luYyAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKCBlbGVtZW50ICk7XG5cblx0XHRcdFx0Y29uc3QgZWRpdG9yID0gYXdhaXQgdGhpcy5lZGl0b3IhLmNyZWF0ZSggZWxlbWVudCwgY29uZmlnICk7XG5cblx0XHRcdFx0aWYgKCB0aGlzLmluaXRpYWxJc0Rpc2FibGVkICkge1xuXHRcdFx0XHRcdGVkaXRvci5pc1JlYWRPbmx5ID0gdGhpcy5pbml0aWFsSXNEaXNhYmxlZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMubmdab25lLnJ1biggKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucmVhZHkuZW1pdCggZWRpdG9yICk7XG5cdFx0XHRcdH0gKTtcblxuXHRcdFx0XHR0aGlzLnNldFVwRWRpdG9yRXZlbnRzKCBlZGl0b3IgKTtcblxuXHRcdFx0XHRyZXR1cm4gZWRpdG9yO1xuXHRcdFx0fSApO1xuXHRcdH07XG5cblx0XHRjb25zdCBkZXN0cnVjdG9yID0gYXN5bmMgKCBlZGl0b3I6IENLRWRpdG9yNS5FZGl0b3IgKSA9PiB7XG5cdFx0XHRhd2FpdCBlZGl0b3IuZGVzdHJveSgpO1xuXG5cdFx0XHR0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVDaGlsZCggdGhpcy5lZGl0b3JFbGVtZW50ISApO1xuXHRcdH07XG5cblx0XHRjb25zdCBlbWl0RXJyb3IgPSAoKSA9PiB7XG5cdFx0XHR0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcblx0XHRcdFx0dGhpcy5lcnJvci5lbWl0KCk7XG5cdFx0XHR9ICk7XG5cdFx0fTtcblxuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCB0aGlzLnRhZ05hbWUgKTtcblx0XHRjb25zdCBjb25maWcgPSB0aGlzLmdldENvbmZpZygpO1xuXG5cdFx0dGhpcy5lZGl0b3JFbGVtZW50ID0gZWxlbWVudDtcblxuXHRcdC8vIEJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGUgd2F0Y2hkb2cgZGVjaWRlIGhvdyB0byBpbml0aWFsaXplIHRoZSBlZGl0b3IuXG5cdFx0aWYgKCB0aGlzLndhdGNoZG9nICkge1xuXHRcdFx0Ly8gV2hlbiB0aGUgY29udGV4dCB3YXRjaGRvZyBpcyBwYXNzZWQgYWRkIHRoZSBuZXcgaXRlbSB0byBpdCBiYXNlZCBvbiB0aGUgcGFzc2VkIGNvbmZpZ3VyYXRpb24uXG5cdFx0XHR0aGlzLndhdGNoZG9nLmFkZCgge1xuXHRcdFx0XHRpZDogdGhpcy5pZCxcblx0XHRcdFx0dHlwZTogJ2VkaXRvcicsXG5cdFx0XHRcdGNyZWF0b3IsXG5cdFx0XHRcdGRlc3RydWN0b3IsXG5cdFx0XHRcdHNvdXJjZUVsZW1lbnRPckRhdGE6IGVsZW1lbnQsXG5cdFx0XHRcdGNvbmZpZ1xuXHRcdFx0fSApO1xuXG5cdFx0XHR0aGlzLndhdGNoZG9nLm9uKCAnaXRlbUVycm9yJywgKCBfLCB7IGl0ZW1JZCB9ICkgPT4ge1xuXHRcdFx0XHRpZiAoIGl0ZW1JZCA9PT0gdGhpcy5pZCApIHtcblx0XHRcdFx0XHRlbWl0RXJyb3IoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBJbiB0aGUgb3RoZXIgY2FzZSBjcmVhdGUgdGhlIHdhdGNoZG9nIGJ5IGhhbmQgdG8ga2VlcCB0aGUgZWRpdG9yIHJ1bm5pbmcuXG5cdFx0XHRjb25zdCBlZGl0b3JXYXRjaGRvZzogQ0tFZGl0b3I1LkVkaXRvcldhdGNoZG9nID0gbmV3IEVkaXRvcldhdGNoZG9nKCB0aGlzLmVkaXRvciApO1xuXG5cdFx0XHRlZGl0b3JXYXRjaGRvZy5zZXRDcmVhdG9yKCBjcmVhdG9yICk7XG5cdFx0XHRlZGl0b3JXYXRjaGRvZy5zZXREZXN0cnVjdG9yKCBkZXN0cnVjdG9yICk7XG5cdFx0XHRlZGl0b3JXYXRjaGRvZy5vbiggJ2Vycm9yJywgZW1pdEVycm9yICk7XG5cblx0XHRcdHRoaXMuZWRpdG9yV2F0Y2hkb2cgPSBlZGl0b3JXYXRjaGRvZztcblxuXHRcdFx0dGhpcy5lZGl0b3JXYXRjaGRvZy5jcmVhdGUoIGVsZW1lbnQsIGNvbmZpZyApO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0Q29uZmlnKCkge1xuXHRcdGlmICggdGhpcy5kYXRhICYmIHRoaXMuY29uZmlnLmluaXRpYWxEYXRhICkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCAnRWRpdG9yIGRhdGEgc2hvdWxkIGJlIHByb3ZpZGVkIGVpdGhlciB1c2luZyBgY29uZmlnLmluaXRpYWxEYXRhYCBvciBgZGF0YWAgcHJvcGVydGllcy4nICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWVyZ2UgdHdvIHBvc3NpYmxlIHdheXMgb2YgcHJvdmlkaW5nIGRhdGEgaW50byB0aGUgYGNvbmZpZy5pbml0aWFsRGF0YWAgZmllbGQuXG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLnRoaXMuY29uZmlnLFxuXHRcdFx0aW5pdGlhbERhdGE6IHRoaXMuY29uZmlnLmluaXRpYWxEYXRhIHx8IHRoaXMuZGF0YSB8fCAnJ1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogSW50ZWdyYXRlcyB0aGUgZWRpdG9yIHdpdGggdGhlIGNvbXBvbmVudCBieSBhdHRhY2hpbmcgcmVsYXRlZCBldmVudCBsaXN0ZW5lcnMuXG5cdCAqL1xuXHRwcml2YXRlIHNldFVwRWRpdG9yRXZlbnRzKCBlZGl0b3I6IENLRWRpdG9yNS5FZGl0b3IgKTogdm9pZCB7XG5cdFx0Y29uc3QgbW9kZWxEb2N1bWVudCA9IGVkaXRvci5tb2RlbC5kb2N1bWVudDtcblx0XHRjb25zdCB2aWV3RG9jdW1lbnQgPSBlZGl0b3IuZWRpdGluZy52aWV3LmRvY3VtZW50O1xuXG5cdFx0bW9kZWxEb2N1bWVudC5vbiggJ2NoYW5nZTpkYXRhJywgKCBldnQ6IENLRWRpdG9yNS5FdmVudEluZm88J2NoYW5nZTpkYXRhJz4gKSA9PiB7XG5cdFx0XHR0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcblx0XHRcdFx0aWYgKCB0aGlzLmN2YU9uQ2hhbmdlICYmICF0aGlzLmlzRWRpdG9yU2V0dGluZ0RhdGEgKSB7XG5cdFx0XHRcdFx0Y29uc3QgZGF0YSA9IGVkaXRvci5nZXREYXRhKCk7XG5cblx0XHRcdFx0XHR0aGlzLmN2YU9uQ2hhbmdlKCBkYXRhICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmNoYW5nZS5lbWl0KCB7IGV2ZW50OiBldnQsIGVkaXRvciB9ICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXG5cdFx0dmlld0RvY3VtZW50Lm9uKCAnZm9jdXMnLCAoIGV2dDogQ0tFZGl0b3I1LkV2ZW50SW5mbzwnZm9jdXMnPiApID0+IHtcblx0XHRcdHRoaXMubmdab25lLnJ1biggKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmZvY3VzLmVtaXQoIHsgZXZlbnQ6IGV2dCwgZWRpdG9yIH0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cblx0XHR2aWV3RG9jdW1lbnQub24oICdibHVyJywgKCBldnQ6IENLRWRpdG9yNS5FdmVudEluZm88J2JsdXInPiApID0+IHtcblx0XHRcdHRoaXMubmdab25lLnJ1biggKCkgPT4ge1xuXHRcdFx0XHRpZiAoIHRoaXMuY3ZhT25Ub3VjaGVkICkge1xuXHRcdFx0XHRcdHRoaXMuY3ZhT25Ub3VjaGVkKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmJsdXIuZW1pdCggeyBldmVudDogZXZ0LCBlZGl0b3IgfSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJsdXJFdmVudCB7XG5cdGV2ZW50OiBDS0VkaXRvcjUuRXZlbnRJbmZvPCdibHVyJz47XG5cdGVkaXRvcjogQ0tFZGl0b3I1LkVkaXRvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb2N1c0V2ZW50IHtcblx0ZXZlbnQ6IENLRWRpdG9yNS5FdmVudEluZm88J2ZvY3VzJz47XG5cdGVkaXRvcjogQ0tFZGl0b3I1LkVkaXRvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2VFdmVudCB7XG5cdGV2ZW50OiBDS0VkaXRvcjUuRXZlbnRJbmZvPCdjaGFuZ2U6ZGF0YSc+O1xuXHRlZGl0b3I6IENLRWRpdG9yNS5FZGl0b3I7XG59XG4iXX0=

@@ -6,3 +6,3 @@ /**

/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.

@@ -183,3 +183,76 @@ */

CKEditor5.Editor = Editor;
/**
* @record
*/
function ContextWatchdog() { }
CKEditor5.ContextWatchdog = ContextWatchdog;
if (false) {
/** @type {?} */
ContextWatchdog.prototype.context;
/**
* @param {?} items
* @return {?}
*/
ContextWatchdog.prototype.add = function (items) { };
/**
* @param {?} items
* @return {?}
*/
ContextWatchdog.prototype.remove = function (items) { };
/**
* @param {?} itemId
* @return {?}
*/
ContextWatchdog.prototype.getItem = function (itemId) { };
/**
* @param {?} itemId
* @param {?} itemType
* @param {?} watchdog
* @return {?}
*/
ContextWatchdog.prototype.addItemWatchdog = function (itemId, itemType, watchdog) { };
}
/**
* @record
*/
function EditorWatchdog() { }
CKEditor5.EditorWatchdog = EditorWatchdog;
if (false) {
/** @type {?} */
EditorWatchdog.prototype.editor;
}
/**
* @record
* @template T
*/
function Watchdog() { }
CKEditor5.Watchdog = Watchdog;
if (false) {
/**
* @param {?} creator
* @return {?}
*/
Watchdog.prototype.setCreator = function (creator) { };
/**
* @param {?} destructor
* @return {?}
*/
Watchdog.prototype.setDestructor = function (destructor) { };
/**
* @param {?} event
* @param {?} callback
* @return {?}
*/
Watchdog.prototype.on = function (event, callback) { };
/**
* @return {?}
*/
Watchdog.prototype.destroy = function () { };
/**
* @param {...?} args
* @return {?}
*/
Watchdog.prototype.create = function (args) { };
}
})(CKEditor5 || (CKEditor5 = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY2tlZGl0b3IvY2tlZGl0b3I1LWFuZ3VsYXIvIiwic291cmNlcyI6WyJja2VkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVFBLE1BQU0sS0FBVyxTQUFTLENBZ0Z6QjtBQWhGRCxXQUFpQixTQUFTOzs7OztJQUt6QixnQ0FFQzs7Ozs7Ozs7UUFEQSxnRkFBc0Y7Ozs7OztJQU12RixxQkFFQzs7Ozs7Ozs7O0lBT0Qsd0JBUUM7Ozs7UUFQQSx5QkFBeUI7O1FBQ3pCLHlCQUFxQjs7UUFDckIsMkJBQXFCOztRQUNyQiwyQkFBYTs7OztRQUViLDBDQUFZOzs7O1FBQ1osMkNBQWE7Ozs7Ozs7O0lBUWQseUJBMEJDOzs7O1FBekJBLDhCQUF1Qjs7UUFDdkIsNEJBQXFCOztRQUNyQixnQ0FBeUI7O1FBQ3pCLDBCQUFtQjs7UUFDbkIsNkJBQXNCOztRQUN0QixnQ0FBeUI7O1FBQ3pCLDRCQUFxQjs7UUFDckIsMkJBQW9COztRQUNwQiw2QkFBc0I7O1FBQ3RCLDJCQUF1RDs7UUFFdkQsZ0NBQW9COzs7Ozs7UUFFcEIsc0RBQWtDOzs7O1FBQ2xDLCtDQUF5Qjs7Ozs7O1FBQ3pCLGtFQUFzRDs7Ozs7O1FBQ3RELDJEQUEyQzs7Ozs7Ozs7UUFDM0MscUZBQXFGOzs7Ozs7UUFDckYsOERBQW1EOzs7Ozs7O1FBQ25ELHNFQUFpRTs7Ozs7OztRQUNqRSx3RUFBbUU7Ozs7Ozs7UUFDbkUsaUZBQTJFOzs7OztRQUMzRSw2Q0FBMEI7Ozs7Ozs7O0lBVTNCLHNCQUdDOzs7Ozs7UUFGQSw0Q0FBa0I7Ozs7O1FBQ2xCLGdEQUE4Qjs7Ozs7Ozs7SUFRL0IscUJBQXNEOztBQUN2RCxDQUFDLEVBaEZnQixTQUFTLEtBQVQsU0FBUyxRQWdGekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAwMy0yMDE5LCBDS1NvdXJjZSAtIEZyZWRlcmljbyBLbmFiYmVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogRm9yIGxpY2Vuc2luZywgc2VlIExJQ0VOU0UubWQuXG4gKi9cblxuLyoqXG4gKiBCYXNpYyB0eXBpbmdzIGZvciB0aGUgQ0tFZGl0b3I1IGVsZW1lbnRzLlxuICovXG5leHBvcnQgbmFtZXNwYWNlIENLRWRpdG9yNSB7XG5cblx0LyoqXG5cdCAqIFRoZSBDS0VkaXRvcjUgZWRpdG9yIGNvbnN0cnVjdG9yLlxuXHQgKi9cblx0ZXhwb3J0IGludGVyZmFjZSBFZGl0b3JDb25zdHJ1Y3RvciB7XG5cdFx0Y3JlYXRlKCBzb3VyY2VFbGVtZW50T3JEYXRhOiBIVE1MRWxlbWVudCB8IHN0cmluZywgY29uZmlnPzogQ29uZmlnICk6IFByb21pc2U8RWRpdG9yPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQ0tFZGl0b3I1IGVkaXRvciBjb25maWcuXG5cdCAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIENvbmZpZyB7XG5cdFx0WyBrZXk6IHN0cmluZyBdOiBhbnk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGV2ZW50IG9iamVjdCBwYXNzZWQgdG8gQ0tFZGl0b3I1IGV2ZW50IGNhbGxiYWNrcy5cblx0ICpcblx0ICogU2VlIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I1L2xhdGVzdC9hcGkvbW9kdWxlX3V0aWxzX2V2ZW50aW5mby1FdmVudEluZm8uaHRtbFxuXHQgKi9cblx0ZXhwb3J0IGludGVyZmFjZSBFdmVudEluZm88RXZlbnROYW1lIGV4dGVuZHMgc3RyaW5nPiB7XG5cdFx0cmVhZG9ubHkgbmFtZTogRXZlbnROYW1lO1xuXHRcdHJlYWRvbmx5IHBhdGg6IGFueVtdO1xuXHRcdHJlYWRvbmx5IHNvdXJjZTogYW55O1xuXHRcdHJldHVybj86IGFueTtcblxuXHRcdG9mZigpOiB2b2lkO1xuXHRcdHN0b3AoKTogdm9pZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYmFzZSBFZGl0b3IgY2xhc3MuXG5cdCAqXG5cdCAqIFNlZSBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNS9sYXRlc3QvYXBpL21vZHVsZV9jb3JlX2VkaXRvcl9lZGl0b3ItRWRpdG9yLmh0bWxcblx0ICovXG5cdGV4cG9ydCBpbnRlcmZhY2UgQmFzZUVkaXRvciB7XG5cdFx0cmVhZG9ubHkgY29tbWFuZHM6IGFueTtcblx0XHRyZWFkb25seSBjb25maWc6IGFueTtcblx0XHRyZWFkb25seSBjb252ZXJzaW9uOiBhbnk7XG5cdFx0cmVhZG9ubHkgZGF0YTogYW55O1xuXHRcdHJlYWRvbmx5IGVkaXRpbmc6IGFueTtcblx0XHRyZWFkb25seSBrZXlzdHJva2VzOiBhbnk7XG5cdFx0cmVhZG9ubHkgbG9jYWxlOiBhbnk7XG5cdFx0cmVhZG9ubHkgbW9kZWw6IGFueTtcblx0XHRyZWFkb25seSBwbHVnaW5zOiBhbnk7XG5cdFx0cmVhZG9ubHkgc3RhdGU6ICdpbml0aWFsaXppbmcnIHwgJ3JlYWR5JyB8ICdkZXN0cm95ZWQnO1xuXG5cdFx0aXNSZWFkT25seTogYm9vbGVhbjtcblxuXHRcdGRlbGVnYXRlKCBldmVudHM6IHN0cmluZ1tdICk6IGFueTtcblx0XHRkZXN0cm95KCk6IFByb21pc2U8dm9pZD47XG5cdFx0ZXhlY3V0ZSggY29tbWFuZE5hbWU6IHN0cmluZywgLi4ucGFyYW1zOiBhbnlbXSApOiBhbnk7XG5cdFx0ZmlyZSggZXZlbnROYW1lOiBzdHJpbmcsIGFyZ3M/OiBhbnkgKTogYW55O1xuXHRcdGxpc3RlblRvKCBlbWl0dGVyOiBhbnksIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24sIG9wdGlvbnM/OiBhbnkgKTogdm9pZDtcblx0XHRvZmYoIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24gKTogdm9pZDtcblx0XHRvbiggZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbiwgb3B0aW9ucz86IGFueSApOiB2b2lkO1xuXHRcdG9uY2UoIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24sIG9wdGlvbnM/OiBhbnkgKTogdm9pZDtcblx0XHRzdG9wTGlzdGVuaW5nKCBlbWl0dGVyOiBhbnksIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24gKTogdm9pZDtcblx0XHR0KCAuLi5hcmdzOiBhbnlbXSApOiB2b2lkO1xuXG5cdFx0WyBwcm9wZXJ0eTogc3RyaW5nIF06IGFueTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQ0tFZGl0b3I1IERhdGFBcGkgaW50ZXJmYWNlLlxuXHQgKlxuXHQgKiBTZWUgaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjUvbGF0ZXN0L2FwaS9tb2R1bGVfY29yZV9lZGl0b3JfdXRpbHNfZGF0YWFwaW1peGluLURhdGFBcGkuaHRtbC5cblx0ICovXG5cdGV4cG9ydCBpbnRlcmZhY2UgRGF0YUFwaSB7XG5cdFx0Z2V0RGF0YSgpOiBzdHJpbmc7XG5cdFx0c2V0RGF0YSggZGF0YTogc3RyaW5nICk6IHZvaWQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBDS0VkaXRvcjUgZWRpdG9yIHRoYXQgaW1wbGVtZW50cyB0aGVcblx0ICogW0RhdGFBcGkgaW50ZXJmYWNlXShodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNS9sYXRlc3QvYXBpL21vZHVsZV9jb3JlX2VkaXRvcl91dGlsc19kYXRhYXBpbWl4aW4tRGF0YUFwaS5odG1sKS5cblx0ICogRS5nLiB0aGUgYENsYXNzaWNFZGl0b3JgLCBgSW5saW5lRWRpdG9yYCwgZXRjLlxuXHQgKi9cblx0ZXhwb3J0IGludGVyZmFjZSBFZGl0b3IgZXh0ZW5kcyBCYXNlRWRpdG9yLCBEYXRhQXBpIHt9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY2tlZGl0b3IvY2tlZGl0b3I1LWFuZ3VsYXIvIiwic291cmNlcyI6WyJja2VkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVFBLE1BQU0sS0FBVyxTQUFTLENBb0d6QjtBQXBHRCxXQUFpQixTQUFTOzs7OztJQUt6QixnQ0FFQzs7Ozs7Ozs7UUFEQSxnRkFBc0Y7Ozs7OztJQU12RixxQkFFQzs7Ozs7Ozs7O0lBT0Qsd0JBUUM7Ozs7UUFQQSx5QkFBeUI7O1FBQ3pCLHlCQUFxQjs7UUFDckIsMkJBQXFCOztRQUNyQiwyQkFBYTs7OztRQUViLDBDQUFZOzs7O1FBQ1osMkNBQWE7Ozs7Ozs7O0lBUWQseUJBMEJDOzs7O1FBekJBLDhCQUF1Qjs7UUFDdkIsNEJBQXFCOztRQUNyQixnQ0FBeUI7O1FBQ3pCLDBCQUFtQjs7UUFDbkIsNkJBQXNCOztRQUN0QixnQ0FBeUI7O1FBQ3pCLDRCQUFxQjs7UUFDckIsMkJBQW9COztRQUNwQiw2QkFBc0I7O1FBQ3RCLDJCQUF1RDs7UUFFdkQsZ0NBQW9COzs7Ozs7UUFFcEIsc0RBQWtDOzs7O1FBQ2xDLCtDQUF5Qjs7Ozs7O1FBQ3pCLGtFQUFzRDs7Ozs7O1FBQ3RELDJEQUEyQzs7Ozs7Ozs7UUFDM0MscUZBQXFGOzs7Ozs7UUFDckYsOERBQW1EOzs7Ozs7O1FBQ25ELHNFQUFpRTs7Ozs7OztRQUNqRSx3RUFBbUU7Ozs7Ozs7UUFDbkUsaUZBQTJFOzs7OztRQUMzRSw2Q0FBMEI7Ozs7Ozs7O0lBVTNCLHNCQUdDOzs7Ozs7UUFGQSw0Q0FBa0I7Ozs7O1FBQ2xCLGdEQUE4Qjs7Ozs7Ozs7SUFRL0IscUJBQXNEOzs7OztJQUV0RCw4QkFNQzs7OztRQUxBLGtDQUFhOzs7OztRQUNiLHFEQUFpQzs7Ozs7UUFDakMsd0RBQWtEOzs7OztRQUNsRCwwREFBa0M7Ozs7Ozs7UUFDbEMsc0ZBQTRGOzs7OztJQUc3Riw2QkFFQzs7OztRQURBLGdDQUFlOzs7Ozs7SUFHaEIsdUJBTUM7Ozs7Ozs7UUFMQSx1REFBOEQ7Ozs7O1FBQzlELDZEQUFnRTs7Ozs7O1FBQ2hFLHVEQUE2RDs7OztRQUM3RCw2Q0FBeUI7Ozs7O1FBQ3pCLGdEQUF3Qzs7QUFFMUMsQ0FBQyxFQXBHZ0IsU0FBUyxLQUFULFNBQVMsUUFvR3pCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMDMtMjAyMCwgQ0tTb3VyY2UgLSBGcmVkZXJpY28gS25hYmJlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEZvciBsaWNlbnNpbmcsIHNlZSBMSUNFTlNFLm1kLlxuICovXG5cbi8qKlxuICogQmFzaWMgdHlwaW5ncyBmb3IgdGhlIENLRWRpdG9yNSBlbGVtZW50cy5cbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBDS0VkaXRvcjUge1xuXG5cdC8qKlxuXHQgKiBUaGUgQ0tFZGl0b3I1IGVkaXRvciBjb25zdHJ1Y3Rvci5cblx0ICovXG5cdGV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yQ29uc3RydWN0b3Ige1xuXHRcdGNyZWF0ZSggc291cmNlRWxlbWVudE9yRGF0YTogSFRNTEVsZW1lbnQgfCBzdHJpbmcsIGNvbmZpZz86IENvbmZpZyApOiBQcm9taXNlPEVkaXRvcj47XG5cdH1cblxuXHQvKipcblx0ICogVGhlIENLRWRpdG9yNSBlZGl0b3IgY29uZmlnLlxuXHQgKi9cblx0ZXhwb3J0IGludGVyZmFjZSBDb25maWcge1xuXHRcdFsga2V5OiBzdHJpbmcgXTogYW55O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBldmVudCBvYmplY3QgcGFzc2VkIHRvIENLRWRpdG9yNSBldmVudCBjYWxsYmFja3MuXG5cdCAqXG5cdCAqIFNlZSBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNS9sYXRlc3QvYXBpL21vZHVsZV91dGlsc19ldmVudGluZm8tRXZlbnRJbmZvLmh0bWxcblx0ICovXG5cdGV4cG9ydCBpbnRlcmZhY2UgRXZlbnRJbmZvPEV2ZW50TmFtZSBleHRlbmRzIHN0cmluZz4ge1xuXHRcdHJlYWRvbmx5IG5hbWU6IEV2ZW50TmFtZTtcblx0XHRyZWFkb25seSBwYXRoOiBhbnlbXTtcblx0XHRyZWFkb25seSBzb3VyY2U6IGFueTtcblx0XHRyZXR1cm4/OiBhbnk7XG5cblx0XHRvZmYoKTogdm9pZDtcblx0XHRzdG9wKCk6IHZvaWQ7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGJhc2UgRWRpdG9yIGNsYXNzLlxuXHQgKlxuXHQgKiBTZWUgaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjUvbGF0ZXN0L2FwaS9tb2R1bGVfY29yZV9lZGl0b3JfZWRpdG9yLUVkaXRvci5odG1sXG5cdCAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIEJhc2VFZGl0b3Ige1xuXHRcdHJlYWRvbmx5IGNvbW1hbmRzOiBhbnk7XG5cdFx0cmVhZG9ubHkgY29uZmlnOiBhbnk7XG5cdFx0cmVhZG9ubHkgY29udmVyc2lvbjogYW55O1xuXHRcdHJlYWRvbmx5IGRhdGE6IGFueTtcblx0XHRyZWFkb25seSBlZGl0aW5nOiBhbnk7XG5cdFx0cmVhZG9ubHkga2V5c3Ryb2tlczogYW55O1xuXHRcdHJlYWRvbmx5IGxvY2FsZTogYW55O1xuXHRcdHJlYWRvbmx5IG1vZGVsOiBhbnk7XG5cdFx0cmVhZG9ubHkgcGx1Z2luczogYW55O1xuXHRcdHJlYWRvbmx5IHN0YXRlOiAnaW5pdGlhbGl6aW5nJyB8ICdyZWFkeScgfCAnZGVzdHJveWVkJztcblxuXHRcdGlzUmVhZE9ubHk6IGJvb2xlYW47XG5cblx0XHRkZWxlZ2F0ZSggZXZlbnRzOiBzdHJpbmdbXSApOiBhbnk7XG5cdFx0ZGVzdHJveSgpOiBQcm9taXNlPHZvaWQ+O1xuXHRcdGV4ZWN1dGUoIGNvbW1hbmROYW1lOiBzdHJpbmcsIC4uLnBhcmFtczogYW55W10gKTogYW55O1xuXHRcdGZpcmUoIGV2ZW50TmFtZTogc3RyaW5nLCBhcmdzPzogYW55ICk6IGFueTtcblx0XHRsaXN0ZW5UbyggZW1pdHRlcjogYW55LCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uLCBvcHRpb25zPzogYW55ICk6IHZvaWQ7XG5cdFx0b2ZmKCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uICk6IHZvaWQ7XG5cdFx0b24oIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24sIG9wdGlvbnM/OiBhbnkgKTogdm9pZDtcblx0XHRvbmNlKCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uLCBvcHRpb25zPzogYW55ICk6IHZvaWQ7XG5cdFx0c3RvcExpc3RlbmluZyggZW1pdHRlcjogYW55LCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uICk6IHZvaWQ7XG5cdFx0dCggLi4uYXJnczogYW55W10gKTogdm9pZDtcblxuXHRcdFsgcHJvcGVydHk6IHN0cmluZyBdOiBhbnk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIENLRWRpdG9yNSBEYXRhQXBpIGludGVyZmFjZS5cblx0ICpcblx0ICogU2VlIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I1L2xhdGVzdC9hcGkvbW9kdWxlX2NvcmVfZWRpdG9yX3V0aWxzX2RhdGFhcGltaXhpbi1EYXRhQXBpLmh0bWwuXG5cdCAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIERhdGFBcGkge1xuXHRcdGdldERhdGEoKTogc3RyaW5nO1xuXHRcdHNldERhdGEoIGRhdGE6IHN0cmluZyApOiB2b2lkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgQ0tFZGl0b3I1IGVkaXRvciB0aGF0IGltcGxlbWVudHMgdGhlXG5cdCAqIFtEYXRhQXBpIGludGVyZmFjZV0oaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjUvbGF0ZXN0L2FwaS9tb2R1bGVfY29yZV9lZGl0b3JfdXRpbHNfZGF0YWFwaW1peGluLURhdGFBcGkuaHRtbCkuXG5cdCAqIEUuZy4gdGhlIGBDbGFzc2ljRWRpdG9yYCwgYElubGluZUVkaXRvcmAsIGV0Yy5cblx0ICovXG5cdGV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yIGV4dGVuZHMgQmFzZUVkaXRvciwgRGF0YUFwaSB7fVxuXG5cdGV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dFdhdGNoZG9nIGV4dGVuZHMgV2F0Y2hkb2c8YW55Pntcblx0XHRjb250ZXh0OiBhbnk7XG5cdFx0YWRkKCBpdGVtczogYW55ICk6IFByb21pc2U8dm9pZD47XG5cdFx0cmVtb3ZlKCBpdGVtczogc3RyaW5nIHwgc3RyaW5nW10gKTogUHJvbWlzZTx2b2lkPjtcblx0XHRnZXRJdGVtKCBpdGVtSWQ6IHN0cmluZyApOiBFZGl0b3I7XG5cdFx0YWRkSXRlbVdhdGNoZG9nKCBpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgd2F0Y2hkb2c6IFdhdGNoZG9nPGFueT4gKTogUHJvbWlzZTx2b2lkPjtcblx0fVxuXG5cdGV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yV2F0Y2hkb2cgZXh0ZW5kcyBXYXRjaGRvZzxFZGl0b3I+IHtcblx0XHRlZGl0b3I6IEVkaXRvcjtcblx0fVxuXG5cdGV4cG9ydCBpbnRlcmZhY2UgV2F0Y2hkb2c8VD4ge1xuXHRcdHNldENyZWF0b3IoIGNyZWF0b3I6ICggLi4uYXJnczogYW55W10gKSA9PiBQcm9taXNlPFQ+ICk6IHZvaWQ7XG5cdFx0c2V0RGVzdHJ1Y3RvciggZGVzdHJ1Y3RvcjogKCBpdGVtOiBUICkgPT4gUHJvbWlzZTx2b2lkPiApOiB2b2lkO1xuXHRcdG9uKCBldmVudDogc3RyaW5nLCBjYWxsYmFjazogKCAuLi5hcmdzOiBhbnkgKSA9PiBhbnkgKTogdm9pZDtcblx0XHRkZXN0cm95KCk6IFByb21pc2U8dm9pZD47XG5cdFx0Y3JlYXRlKCAuLi5hcmdzOiBhbnlbXSApOiBQcm9taXNlPHZvaWQ+O1xuXHR9XG59XG4iXX0=

@@ -6,3 +6,3 @@ /**

/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.

@@ -23,2 +23,2 @@ */

];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNrZWRpdG9yL2NrZWRpdG9yNS1hbmd1bGFyLyIsInNvdXJjZXMiOlsiY2tlZGl0b3IubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBS0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBT3pELE1BQU0sT0FBTyxjQUFjOzs7WUFMMUIsUUFBUSxTQUFFO2dCQUNWLE9BQU8sRUFBRSxDQUFFLFdBQVcsRUFBRSxZQUFZLENBQUU7Z0JBQ3RDLFlBQVksRUFBRSxDQUFFLGlCQUFpQixDQUFFO2dCQUNuQyxPQUFPLEVBQUUsQ0FBRSxpQkFBaUIsQ0FBRTthQUM5QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDAzLTIwMTksIENLU291cmNlIC0gRnJlZGVyaWNvIEtuYWJiZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBGb3IgbGljZW5zaW5nLCBzZWUgTElDRU5TRS5tZC5cbiAqL1xuXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ0tFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuL2NrZWRpdG9yLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSgge1xuXHRpbXBvcnRzOiBbIEZvcm1zTW9kdWxlLCBDb21tb25Nb2R1bGUgXSxcblx0ZGVjbGFyYXRpb25zOiBbIENLRWRpdG9yQ29tcG9uZW50IF0sXG5cdGV4cG9ydHM6IFsgQ0tFZGl0b3JDb21wb25lbnQgXVxufSApXG5leHBvcnQgY2xhc3MgQ0tFZGl0b3JNb2R1bGUge31cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNrZWRpdG9yL2NrZWRpdG9yNS1hbmd1bGFyLyIsInNvdXJjZXMiOlsiY2tlZGl0b3IubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBS0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBT3pELE1BQU0sT0FBTyxjQUFjOzs7WUFMMUIsUUFBUSxTQUFFO2dCQUNWLE9BQU8sRUFBRSxDQUFFLFdBQVcsRUFBRSxZQUFZLENBQUU7Z0JBQ3RDLFlBQVksRUFBRSxDQUFFLGlCQUFpQixDQUFFO2dCQUNuQyxPQUFPLEVBQUUsQ0FBRSxpQkFBaUIsQ0FBRTthQUM5QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDAzLTIwMjAsIENLU291cmNlIC0gRnJlZGVyaWNvIEtuYWJiZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBGb3IgbGljZW5zaW5nLCBzZWUgTElDRU5TRS5tZC5cbiAqL1xuXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ0tFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuL2NrZWRpdG9yLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSgge1xuXHRpbXBvcnRzOiBbIEZvcm1zTW9kdWxlLCBDb21tb25Nb2R1bGUgXSxcblx0ZGVjbGFyYXRpb25zOiBbIENLRWRpdG9yQ29tcG9uZW50IF0sXG5cdGV4cG9ydHM6IFsgQ0tFZGl0b3JDb21wb25lbnQgXVxufSApXG5leHBvcnQgY2xhc3MgQ0tFZGl0b3JNb2R1bGUge31cbiJdfQ==

@@ -6,3 +6,3 @@ /**

/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.

@@ -13,2 +13,2 @@ */

export { CKEditorModule } from './ckeditor.module';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY2tlZGl0b3IvY2tlZGl0b3I1LWFuZ3VsYXIvIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUtBLGVBQWMsWUFBWSxDQUFDO0FBQzNCLGtDQUFjLHNCQUFzQixDQUFDO0FBQ3JDLCtCQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxOSwgQ0tTb3VyY2UgLSBGcmVkZXJpY28gS25hYmJlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEZvciBsaWNlbnNpbmcsIHNlZSBMSUNFTlNFLm1kLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vY2tlZGl0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9ja2VkaXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9ja2VkaXRvci5tb2R1bGUnO1xuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY2tlZGl0b3IvY2tlZGl0b3I1LWFuZ3VsYXIvIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUtBLGVBQWMsWUFBWSxDQUFDO0FBQzNCLGtDQUFjLHNCQUFzQixDQUFDO0FBQ3JDLCtCQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMDMtMjAyMCwgQ0tTb3VyY2UgLSBGcmVkZXJpY28gS25hYmJlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEZvciBsaWNlbnNpbmcsIHNlZSBMSUNFTlNFLm1kLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vY2tlZGl0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9ja2VkaXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9ja2VkaXRvci5tb2R1bGUnO1xuIl19

@@ -7,6 +7,8 @@ /**

/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
import { Component, Input, Output, NgZone, EventEmitter, forwardRef, ElementRef } from '@angular/core';
import EditorWatchdog from '@ckeditor/ckeditor5-watchdog/src/editorwatchdog';
import uid from './uid';
import { NG_VALUE_ACCESSOR } from '@angular/forms';

@@ -57,5 +59,5 @@ var CKEditorComponent = /** @class */ (function () {

/**
* The instance of the editor created by this component.
* Fires when the editor component crashes.
*/
this.editorInstance = null;
this.error = new EventEmitter();
/**

@@ -70,2 +72,3 @@ * If the component is read–only before the editor instance is created, it remembers that state,

this.isEditorSettingData = false;
this.id = uid();
this.ngZone = ngZone;

@@ -102,2 +105,22 @@ this.elementRef = elementRef;

});
Object.defineProperty(CKEditorComponent.prototype, "editorInstance", {
/**
* The instance of the editor created by this component.
*/
get: /**
* The instance of the editor created by this component.
* @return {?}
*/
function () {
if (this.editorWatchdog) {
return this.editorWatchdog.editor;
}
if (this.watchdog) {
return this.watchdog.getItem(this.id);
}
return null;
},
enumerable: true,
configurable: true
});
// Implementing the AfterViewInit interface.

@@ -114,9 +137,3 @@ // Implementing the AfterViewInit interface.

function () {
var _this = this;
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
function () {
_this.createEditor();
}));
this.attachToWatchdog();
};

@@ -134,6 +151,22 @@ // Implementing the OnDestroy interface.

function () {
if (this.editorInstance) {
this.editorInstance.destroy();
this.editorInstance = null;
}
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!this.watchdog) return [3 /*break*/, 2];
return [4 /*yield*/, this.watchdog.remove(this.id)];
case 1:
_a.sent();
return [3 /*break*/, 4];
case 2:
if (!(this.editorWatchdog && this.editorWatchdog.editor)) return [3 /*break*/, 4];
return [4 /*yield*/, this.editorWatchdog.destroy()];
case 3:
_a.sent();
this.editorWatchdog = undefined;
_a.label = 4;
case 4: return [2 /*return*/];
}
});
});
};

@@ -219,10 +252,8 @@ // Implementing the ControlValueAccessor interface (only when binding to ngModel).

function (isDisabled) {
// If already initialized
// If already initialized.
if (this.editorInstance) {
this.editorInstance.isReadOnly = isDisabled;
}
// If not, wait for it to be ready; store the state.
else {
this.initialIsDisabled = isDisabled;
}
// Store the state anyway to use it once the editor is created.
this.initialIsDisabled = isDisabled;
};

@@ -241,3 +272,3 @@ /**

*/
CKEditorComponent.prototype.createEditor = /**
CKEditorComponent.prototype.attachToWatchdog = /**
* Creates the editor instance, sets initial editor data, then integrates

@@ -252,21 +283,60 @@ * the editor with the Angular component. This method does not use the `editor.setData()`

/** @type {?} */
var element = document.createElement(this.tagName);
this.editorElement = element;
if (this.data && this.config.initialData) {
throw new Error('Editor data should be provided either using `config.initialData` or `data` properties.');
}
// Merge two possible ways of providing data into the `config.initialData` field.
var creator = (/**
* @param {?} element
* @param {?} config
* @return {?}
*/
function (element, config) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var _this = this;
return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, this.ngZone.runOutsideAngular((/**
* @return {?}
*/
function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var editor;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
this.elementRef.nativeElement.appendChild(element);
return [4 /*yield*/, (/** @type {?} */ (this.editor)).create(element, config)];
case 1:
editor = _a.sent();
if (this.initialIsDisabled) {
editor.isReadOnly = this.initialIsDisabled;
}
this.ngZone.run((/**
* @return {?}
*/
function () {
_this.ready.emit(editor);
}));
this.setUpEditorEvents(editor);
return [2 /*return*/, editor];
}
});
}); }))];
});
}); });
/** @type {?} */
var config = tslib_1.__assign({}, this.config, { initialData: this.config.initialData || this.data || '' });
this.elementRef.nativeElement.appendChild(element);
return (/** @type {?} */ (this.editor)).create(element, config)
.then((/**
var destructor = (/**
* @param {?} editor
* @return {?}
*/
function (editor) {
_this.editorInstance = editor;
if (_this.initialIsDisabled) {
editor.isReadOnly = _this.initialIsDisabled;
}
function (editor) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, editor.destroy()];
case 1:
_a.sent();
this.elementRef.nativeElement.removeChild((/** @type {?} */ (this.editorElement)));
return [2 /*return*/];
}
});
}); });
/** @type {?} */
var emitError = (/**
* @return {?}
*/
function () {
_this.ngZone.run((/**

@@ -276,15 +346,60 @@ * @return {?}

function () {
_this.ready.emit(editor);
_this.error.emit();
}));
_this.setUpEditorEvents(editor);
}))
.catch((/**
* @param {?} err
* @return {?}
*/
function (err) {
console.error(err.stack);
}));
});
/** @type {?} */
var element = document.createElement(this.tagName);
/** @type {?} */
var config = this.getConfig();
this.editorElement = element;
// Based on the presence of the watchdog decide how to initialize the editor.
if (this.watchdog) {
// When the context watchdog is passed add the new item to it based on the passed configuration.
this.watchdog.add({
id: this.id,
type: 'editor',
creator: creator,
destructor: destructor,
sourceElementOrData: element,
config: config
});
this.watchdog.on('itemError', (/**
* @param {?} _
* @param {?} __1
* @return {?}
*/
function (_, _a) {
var itemId = _a.itemId;
if (itemId === _this.id) {
emitError();
}
}));
}
else {
// In the other case create the watchdog by hand to keep the editor running.
/** @type {?} */
var editorWatchdog = new EditorWatchdog(this.editor);
editorWatchdog.setCreator(creator);
editorWatchdog.setDestructor(destructor);
editorWatchdog.on('error', emitError);
this.editorWatchdog = editorWatchdog;
this.editorWatchdog.create(element, config);
}
};
/**
* @private
* @return {?}
*/
CKEditorComponent.prototype.getConfig = /**
* @private
* @return {?}
*/
function () {
if (this.data && this.config.initialData) {
throw new Error('Editor data should be provided either using `config.initialData` or `data` properties.');
}
// Merge two possible ways of providing data into the `config.initialData` field.
return tslib_1.__assign({}, this.config, { initialData: this.config.initialData || this.data || '' });
};
/**
* Integrates the editor with the component by attaching related event listeners.

@@ -383,2 +498,3 @@ */

tagName: [{ type: Input }],
watchdog: [{ type: Input }],
disabled: [{ type: Input }],

@@ -388,3 +504,4 @@ ready: [{ type: Output }],

blur: [{ type: Output }],
focus: [{ type: Output }]
focus: [{ type: Output }],
error: [{ type: Output }]
};

@@ -428,2 +545,7 @@ return CKEditorComponent;

/**
* The context watchdog.
* @type {?}
*/
CKEditorComponent.prototype.watchdog;
/**
* Fires when the editor is ready. It corresponds with the `editor#ready`

@@ -457,7 +579,14 @@ * https://ckeditor.com/docs/ckeditor5/latest/api/module_core_editor_editor-Editor.html#event-ready

/**
* The instance of the editor created by this component.
* Fires when the editor component crashes.
* @type {?}
*/
CKEditorComponent.prototype.editorInstance;
CKEditorComponent.prototype.error;
/**
* The editor watchdog. It is created when the context watchdog is not passed to the component.
* It keeps the editor running.
* @type {?}
* @private
*/
CKEditorComponent.prototype.editorWatchdog;
/**
* If the component is read–only before the editor instance is created, it remembers that state,

@@ -506,2 +635,7 @@ * so the editor can become read–only once it is ready.

CKEditorComponent.prototype.isEditorSettingData;
/**
* @type {?}
* @private
*/
CKEditorComponent.prototype.id;
}

@@ -538,2 +672,2 @@ /**

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNrZWRpdG9yL2NrZWRpdG9yNS1hbmd1bGFyLyIsInNvdXJjZXMiOlsiY2tlZGl0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUtBLE9BQU8sRUFDTixTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sWUFBWSxFQUNaLFVBQVUsRUFFVixVQUFVLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUVOLGlCQUFpQixFQUNqQixNQUFNLGdCQUFnQixDQUFDO0FBSXhCO0lBc0lDLDJCQUFvQixVQUFzQixFQUFFLE1BQWM7Ozs7OztRQXZHMUMsV0FBTSxHQUFxQixFQUFFLENBQUM7Ozs7O1FBTTlCLFNBQUksR0FBRyxFQUFFLENBQUM7Ozs7OztRQU9WLFlBQU8sR0FBRyxLQUFLLENBQUM7Ozs7OztRQXdCZixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7Ozs7OztRQU83QyxXQUFNLEdBQThCLElBQUksWUFBWSxFQUFlLENBQUM7Ozs7OztRQU9wRSxTQUFJLEdBQTRCLElBQUksWUFBWSxFQUFhLENBQUM7Ozs7OztRQU85RCxVQUFLLEdBQTZCLElBQUksWUFBWSxFQUFjLENBQUM7Ozs7UUFLM0UsbUJBQWMsR0FBNEIsSUFBSSxDQUFDOzs7OztRQU05QyxzQkFBaUIsR0FBRyxLQUFLLENBQUM7Ozs7UUFnQzFCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUduQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUM5QixDQUFDO0lBdEZELHNCQUFvQix1Q0FBUTs7OztRQUk1QjtZQUNDLElBQUssSUFBSSxDQUFDLGNBQWMsRUFBRztnQkFDMUIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzthQUN0QztZQUVELE9BQU8sSUFB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QUFLO3lCQU9MLEtBQUs7dUJBTUwsS0FBSzswQkFPTCxLQUFLOzJCQU9MLEtBQUs7d0JBaUJMLE1BQU07eUJBT04sTUFBTTt1QkFPTixNQUFNO3dCQU9OLE1BQU07O0lBOExSLHdCQUFDO0NBQUEsQUF2UkQsSUF1UkM7U0F6UVksaUJBQWlCOzs7Ozs7O0lBSTdCLHVDQUE2Qzs7Ozs7O0lBTTdDLG1DQUFxRDs7Ozs7OztJQU9yRCxtQ0FBOEM7Ozs7OztJQU05QyxpQ0FBMEI7Ozs7Ozs7SUFPMUIsb0NBQWdDOzs7Ozs7O0lBd0JoQyxrQ0FBOEQ7Ozs7Ozs7SUFPOUQsbUNBQXFGOzs7Ozs7O0lBT3JGLGlDQUErRTs7Ozs7OztJQU8vRSxrQ0FBa0Y7Ozs7O0lBS2xGLDJDQUFzRDs7Ozs7OztJQU10RCw4Q0FBa0M7Ozs7Ozs7SUFNbEMsbUNBQXVCOzs7Ozs7Ozs7SUFRdkIsd0NBQStDOzs7Ozs7Ozs7SUFRL0MseUNBQWtDOzs7Ozs7SUFLbEMsMENBQW9DOzs7Ozs7SUFLcEMsZ0RBQW9DOzs7OztBQXFKckMsK0JBR0M7OztJQUZBLDBCQUFtQzs7SUFDbkMsMkJBQXlCOzs7OztBQUcxQixnQ0FHQzs7O0lBRkEsMkJBQW9DOztJQUNwQyw0QkFBeUI7Ozs7O0FBRzFCLGlDQUdDOzs7SUFGQSw0QkFBMEM7O0lBQzFDLDZCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDAzLTIwMTksIENLU291cmNlIC0gRnJlZGVyaWNvIEtuYWJiZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBGb3IgbGljZW5zaW5nLCBzZWUgTElDRU5TRS5tZC5cbiAqL1xuXG5pbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdE5nWm9uZSxcblx0RXZlbnRFbWl0dGVyLFxuXHRmb3J3YXJkUmVmLFxuXHRBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksXG5cdEVsZW1lbnRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG5cdENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuXHROR19WQUxVRV9BQ0NFU1NPUlxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IENLRWRpdG9yNSB9IGZyb20gJy4vY2tlZGl0b3InO1xuXG5AQ29tcG9uZW50KCB7XG5cdHNlbGVjdG9yOiAnY2tlZGl0b3InLFxuXHR0ZW1wbGF0ZTogJzxuZy10ZW1wbGF0ZT48L25nLXRlbXBsYXRlPicsXG5cblx0Ly8gSW50ZWdyYXRpb24gd2l0aCBAYW5ndWxhci9mb3Jtcy5cblx0cHJvdmlkZXJzOiBbXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG5cdFx0XHR1c2VFeGlzdGluZzogZm9yd2FyZFJlZiggKCkgPT4gQ0tFZGl0b3JDb21wb25lbnQgKSxcblx0XHRcdG11bHRpOiB0cnVlLFxuXHRcdH1cblx0XVxufSApXG5leHBvcnQgY2xhc3MgQ0tFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblx0LyoqXG5cdCAqIFRoZSByZWZlcmVuY2UgdG8gdGhlIERPTSBlbGVtZW50IGNyZWF0ZWQgYnkgdGhlIGNvbXBvbmVudC5cblx0ICovXG5cdHByaXZhdGUgZWxlbWVudFJlZiE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG5cdC8qKlxuXHQgKiBUaGUgY29uc3RydWN0b3Igb2YgdGhlIGVkaXRvciB0byBiZSB1c2VkIGZvciB0aGUgaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudC5cblx0ICogSXQgY2FuIGJlIGUuZy4gdGhlIGBDbGFzc2ljRWRpdG9yQnVpbGRgLCBgSW5saW5lRWRpdG9yQnVpbGRgIG9yIHNvbWUgY3VzdG9tIGVkaXRvci5cblx0ICovXG5cdEBJbnB1dCgpIHB1YmxpYyBlZGl0b3I/OiBDS0VkaXRvcjUuRWRpdG9yQ29uc3RydWN0b3I7XG5cblx0LyoqXG5cdCAqIFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBlZGl0b3IuXG5cdCAqIFNlZSBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNS9sYXRlc3QvYXBpL21vZHVsZV9jb3JlX2VkaXRvcl9lZGl0b3Jjb25maWctRWRpdG9yQ29uZmlnLmh0bWxcblx0ICogdG8gbGVhcm4gbW9yZS5cblx0ICovXG5cdEBJbnB1dCgpIHB1YmxpYyBjb25maWc6IENLRWRpdG9yNS5Db25maWcgPSB7fTtcblxuXHQvKipcblx0ICogVGhlIGluaXRpYWwgZGF0YSBvZiB0aGUgZWRpdG9yLiBVc2VmdWwgd2hlbiBub3QgdXNpbmcgdGhlIG5nTW9kZWwuXG5cdCAqIFNlZSBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zL05nTW9kZWwgdG8gbGVhcm4gbW9yZS5cblx0ICovXG5cdEBJbnB1dCgpIHB1YmxpYyBkYXRhID0gJyc7XG5cblx0LyoqXG5cdCAqIFRhZyBuYW1lIG9mIHRoZSBlZGl0b3IgY29tcG9uZW50LlxuXHQgKlxuXHQgKiBUaGUgZGVmYXVsdCB0YWcgaXMgJ2RpdicuXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgdGFnTmFtZSA9ICdkaXYnO1xuXG5cdC8qKlxuXHQgKiBXaGVuIHNldCBgdHJ1ZWAsIHRoZSBlZGl0b3IgYmVjb21lcyByZWFkLW9ubHkuXG5cdCAqIFNlZSBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNS9sYXRlc3QvYXBpL21vZHVsZV9jb3JlX2VkaXRvcl9lZGl0b3ItRWRpdG9yLmh0bWwjbWVtYmVyLWlzUmVhZE9ubHlcblx0ICogdG8gbGVhcm4gbW9yZS5cblx0ICovXG5cdEBJbnB1dCgpIHB1YmxpYyBzZXQgZGlzYWJsZWQoIGlzRGlzYWJsZWQ6IGJvb2xlYW4gKSB7XG5cdFx0dGhpcy5zZXREaXNhYmxlZFN0YXRlKCBpc0Rpc2FibGVkICk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGRpc2FibGVkKCkge1xuXHRcdGlmICggdGhpcy5lZGl0b3JJbnN0YW5jZSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVkaXRvckluc3RhbmNlLmlzUmVhZE9ubHk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuaW5pdGlhbElzRGlzYWJsZWQ7XG5cdH1cblxuXHQvKipcblx0ICogRmlyZXMgd2hlbiB0aGUgZWRpdG9yIGlzIHJlYWR5LiBJdCBjb3JyZXNwb25kcyB3aXRoIHRoZSBgZWRpdG9yI3JlYWR5YFxuXHQgKiBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNS9sYXRlc3QvYXBpL21vZHVsZV9jb3JlX2VkaXRvcl9lZGl0b3ItRWRpdG9yLmh0bWwjZXZlbnQtcmVhZHlcblx0ICogZXZlbnQuXG5cdCAqL1xuXHRAT3V0cHV0KCkgcHVibGljIHJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxDS0VkaXRvcjUuRWRpdG9yPigpO1xuXG5cdC8qKlxuXHQgKiBGaXJlcyB3aGVuIHRoZSBjb250ZW50IG9mIHRoZSBlZGl0b3IgaGFzIGNoYW5nZWQuIEl0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGBlZGl0b3IubW9kZWwuZG9jdW1lbnQjY2hhbmdlYFxuXHQgKiBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNS9sYXRlc3QvYXBpL21vZHVsZV9lbmdpbmVfbW9kZWxfZG9jdW1lbnQtRG9jdW1lbnQuaHRtbCNldmVudC1jaGFuZ2Vcblx0ICogZXZlbnQuXG5cdCAqL1xuXHRAT3V0cHV0KCkgcHVibGljIGNoYW5nZTogRXZlbnRFbWl0dGVyPENoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hhbmdlRXZlbnQ+KCk7XG5cblx0LyoqXG5cdCAqIEZpcmVzIHdoZW4gdGhlIGVkaXRpbmcgdmlldyBvZiB0aGUgZWRpdG9yIGlzIGJsdXJyZWQuIEl0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGBlZGl0b3IuZWRpdGluZy52aWV3LmRvY3VtZW50I2JsdXJgXG5cdCAqIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I1L2xhdGVzdC9hcGkvbW9kdWxlX2VuZ2luZV92aWV3X2RvY3VtZW50LURvY3VtZW50Lmh0bWwjZXZlbnQtZXZlbnQ6Ymx1clxuXHQgKiBldmVudC5cblx0ICovXG5cdEBPdXRwdXQoKSBwdWJsaWMgYmx1cjogRXZlbnRFbWl0dGVyPEJsdXJFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEJsdXJFdmVudD4oKTtcblxuXHQvKipcblx0ICogRmlyZXMgd2hlbiB0aGUgZWRpdGluZyB2aWV3IG9mIHRoZSBlZGl0b3IgaXMgZm9jdXNlZC4gSXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgYGVkaXRvci5lZGl0aW5nLnZpZXcuZG9jdW1lbnQjZm9jdXNgXG5cdCAqIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I1L2xhdGVzdC9hcGkvbW9kdWxlX2VuZ2luZV92aWV3X2RvY3VtZW50LURvY3VtZW50Lmh0bWwjZXZlbnQtZXZlbnQ6Zm9jdXNcblx0ICogZXZlbnQuXG5cdCAqL1xuXHRAT3V0cHV0KCkgcHVibGljIGZvY3VzOiBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG5cblx0LyoqXG5cdCAqIFRoZSBpbnN0YW5jZSBvZiB0aGUgZWRpdG9yIGNyZWF0ZWQgYnkgdGhpcyBjb21wb25lbnQuXG5cdCAqL1xuXHRwdWJsaWMgZWRpdG9ySW5zdGFuY2U6IENLRWRpdG9yNS5FZGl0b3IgfCBudWxsID0gbnVsbDtcblxuXHQvKipcblx0ICogSWYgdGhlIGNvbXBvbmVudCBpcyByZWFk4oCTb25seSBiZWZvcmUgdGhlIGVkaXRvciBpbnN0YW5jZSBpcyBjcmVhdGVkLCBpdCByZW1lbWJlcnMgdGhhdCBzdGF0ZSxcblx0ICogc28gdGhlIGVkaXRvciBjYW4gYmVjb21lIHJlYWTigJNvbmx5IG9uY2UgaXQgaXMgcmVhZHkuXG5cdCAqL1xuXHRwcml2YXRlIGluaXRpYWxJc0Rpc2FibGVkID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEFuIGluc3RhbmNlIG9mIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvY29yZS9OZ1pvbmUgdG8gYWxsb3cgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGVkaXRvclxuXHQgKiB3aXRoaW5nIHRoZSBBbmd1bGFyIGV2ZW50IGxvb3AuXG5cdCAqL1xuXHRwcml2YXRlIG5nWm9uZTogTmdab25lO1xuXG5cdC8qKlxuXHQgKiBBIGNhbGxiYWNrIGV4ZWN1dGVkIHdoZW4gdGhlIGNvbnRlbnQgb2YgdGhlIGVkaXRvciBjaGFuZ2VzLiBQYXJ0IG9mIHRoZVxuXHQgKiBgQ29udHJvbFZhbHVlQWNjZXNzb3JgIChodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zL0NvbnRyb2xWYWx1ZUFjY2Vzc29yKSBpbnRlcmZhY2UuXG5cdCAqXG5cdCAqIE5vdGU6IFVuc2V0IHVubGVzcyB0aGUgY29tcG9uZW50IHVzZXMgdGhlIGBuZ01vZGVsYC5cblx0ICovXG5cdHByaXZhdGUgY3ZhT25DaGFuZ2U/OiAoIGRhdGE6IHN0cmluZyApID0+IHZvaWQ7XG5cblx0LyoqXG5cdCAqIEEgY2FsbGJhY2sgZXhlY3V0ZWQgd2hlbiB0aGUgZWRpdG9yIGhhcyBiZWVuIGJsdXJyZWQuIFBhcnQgb2YgdGhlXG5cdCAqIGBDb250cm9sVmFsdWVBY2Nlc3NvcmAgKGh0dHBzOi8vYW5ndWxhci5pby9hcGkvZm9ybXMvQ29udHJvbFZhbHVlQWNjZXNzb3IpIGludGVyZmFjZS5cblx0ICpcblx0ICogTm90ZTogVW5zZXQgdW5sZXNzIHRoZSBjb21wb25lbnQgdXNlcyB0aGUgYG5nTW9kZWxgLlxuXHQgKi9cblx0cHJpdmF0ZSBjdmFPblRvdWNoZWQ/OiAoKSA9PiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBSZWZlcmVuY2UgdG8gdGhlIHNvdXJjZSBlbGVtZW50IHVzZWQgYnkgdGhlIGVkaXRvci5cblx0ICovXG5cdHByaXZhdGUgZWRpdG9yRWxlbWVudD86IEhUTUxFbGVtZW50O1xuXG5cdC8qKlxuXHQgKiBBIGxvY2sgZmxhZyBwcmV2ZW50aW5nIGZyb20gY2FsbGluZyB0aGUgYGN2YU9uQ2hhbmdlKClgIGR1cmluZyBzZXR0aW5nIGVkaXRvciBkYXRhLlxuXHQgKi9cblx0cHJpdmF0ZSBpc0VkaXRvclNldHRpbmdEYXRhID0gZmFsc2U7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBuZ1pvbmU6IE5nWm9uZSApIHtcblx0XHR0aGlzLm5nWm9uZSA9IG5nWm9uZTtcblx0XHR0aGlzLmVsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuXHR9XG5cblx0Ly8gSW1wbGVtZW50aW5nIHRoZSBBZnRlclZpZXdJbml0IGludGVyZmFjZS5cblx0cHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHR0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhciggKCkgPT4ge1xuXHRcdFx0dGhpcy5jcmVhdGVFZGl0b3IoKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnRpbmcgdGhlIE9uRGVzdHJveSBpbnRlcmZhY2UuXG5cdHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcblx0XHRpZiAoIHRoaXMuZWRpdG9ySW5zdGFuY2UgKSB7XG5cdFx0XHR0aGlzLmVkaXRvckluc3RhbmNlLmRlc3Ryb3koKTtcblx0XHRcdHRoaXMuZWRpdG9ySW5zdGFuY2UgPSBudWxsO1xuXHRcdH1cblx0fVxuXG5cdC8vIEltcGxlbWVudGluZyB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlIChvbmx5IHdoZW4gYmluZGluZyB0byBuZ01vZGVsKS5cblx0cHVibGljIHdyaXRlVmFsdWUoIHZhbHVlOiBzdHJpbmcgfCBudWxsICk6IHZvaWQge1xuXHRcdC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aXRoIHRoZSBgbnVsbGAgdmFsdWUgd2hlbiB0aGUgZm9ybSByZXNldHMuXG5cdFx0Ly8gQSBjb21wb25lbnQncyByZXNwb25zaWJpbGl0eSBpcyB0byByZXN0b3JlIHRvIHRoZSBpbml0aWFsIHN0YXRlLlxuXHRcdGlmICggdmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHR2YWx1ZSA9ICcnO1xuXHRcdH1cblxuXHRcdC8vIElmIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG5cdFx0aWYgKCB0aGlzLmVkaXRvckluc3RhbmNlICkge1xuXHRcdFx0Ly8gVGhlIGxvY2sgbWVjaGFuaXNtIHByZXZlbnRzIGZyb20gY2FsbGluZyBgY3ZhT25DaGFuZ2UoKWAgZHVyaW5nIGNoYW5naW5nXG5cdFx0XHQvLyB0aGUgZWRpdG9yIHN0YXRlLiBTZWUgIzEzOVxuXHRcdFx0dGhpcy5pc0VkaXRvclNldHRpbmdEYXRhID0gdHJ1ZTtcblx0XHRcdHRoaXMuZWRpdG9ySW5zdGFuY2Uuc2V0RGF0YSggdmFsdWUgKTtcblx0XHRcdHRoaXMuaXNFZGl0b3JTZXR0aW5nRGF0YSA9IGZhbHNlO1xuXHRcdH1cblx0XHQvLyBJZiBub3QsIHdhaXQgZm9yIGl0IHRvIGJlIHJlYWR5OyBzdG9yZSB0aGUgZGF0YS5cblx0XHRlbHNlIHtcblx0XHRcdHRoaXMuZGF0YSA9IHZhbHVlO1xuXG5cdFx0XHQvLyBJZiB0aGUgZWRpdG9yIGVsZW1lbnQgaXMgYWxyZWFkeSBhdmFpbGFibGUsIHRoZW4gdXBkYXRlIGl0cyBjb250ZW50LlxuXHRcdFx0Ly8gSWYgdGhlIG5nTW9kZWwgaXMgdXNlZCB0aGVuIHRoZSBlZGl0b3IgZWxlbWVudCBzaG91bGQgYmUgdXBkYXRlZCBkaXJlY3RseSBoZXJlLlxuXHRcdFx0aWYgKCB0aGlzLmVkaXRvckVsZW1lbnQgKSB7XG5cdFx0XHRcdHRoaXMuZWRpdG9yRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLmRhdGE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gSW1wbGVtZW50aW5nIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UgKG9ubHkgd2hlbiBiaW5kaW5nIHRvIG5nTW9kZWwpLlxuXHRwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZSggY2FsbGJhY2s6ICggZGF0YTogc3RyaW5nICkgPT4gdm9pZCApOiB2b2lkIHtcblx0XHR0aGlzLmN2YU9uQ2hhbmdlID0gY2FsbGJhY2s7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnRpbmcgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSAob25seSB3aGVuIGJpbmRpbmcgdG8gbmdNb2RlbCkuXG5cdHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZCggY2FsbGJhY2s6ICgpID0+IHZvaWQgKTogdm9pZCB7XG5cdFx0dGhpcy5jdmFPblRvdWNoZWQgPSBjYWxsYmFjaztcblx0fVxuXG5cdC8vIEltcGxlbWVudGluZyB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlIChvbmx5IHdoZW4gYmluZGluZyB0byBuZ01vZGVsKS5cblx0cHVibGljIHNldERpc2FibGVkU3RhdGUoIGlzRGlzYWJsZWQ6IGJvb2xlYW4gKTogdm9pZCB7XG5cdFx0Ly8gSWYgYWxyZWFkeSBpbml0aWFsaXplZFxuXHRcdGlmICggdGhpcy5lZGl0b3JJbnN0YW5jZSApIHtcblx0XHRcdHRoaXMuZWRpdG9ySW5zdGFuY2UuaXNSZWFkT25seSA9IGlzRGlzYWJsZWQ7XG5cdFx0fVxuXHRcdC8vIElmIG5vdCwgd2FpdCBmb3IgaXQgdG8gYmUgcmVhZHk7IHN0b3JlIHRoZSBzdGF0ZS5cblx0XHRlbHNlIHtcblx0XHRcdHRoaXMuaW5pdGlhbElzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBlZGl0b3IgaW5zdGFuY2UsIHNldHMgaW5pdGlhbCBlZGl0b3IgZGF0YSwgdGhlbiBpbnRlZ3JhdGVzXG5cdCAqIHRoZSBlZGl0b3Igd2l0aCB0aGUgQW5ndWxhciBjb21wb25lbnQuIFRoaXMgbWV0aG9kIGRvZXMgbm90IHVzZSB0aGUgYGVkaXRvci5zZXREYXRhKClgXG5cdCAqIGJlY2F1c2Ugb2YgdGhlIGlzc3VlIGluIHRoZSBjb2xsYWJvcmF0aW9uIG1vZGUgKCM2KS5cblx0ICovXG5cdHByaXZhdGUgY3JlYXRlRWRpdG9yKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCB0aGlzLnRhZ05hbWUgKTtcblx0XHR0aGlzLmVkaXRvckVsZW1lbnQgPSBlbGVtZW50O1xuXG5cdFx0aWYgKCB0aGlzLmRhdGEgJiYgdGhpcy5jb25maWcuaW5pdGlhbERhdGEgKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoICdFZGl0b3IgZGF0YSBzaG91bGQgYmUgcHJvdmlkZWQgZWl0aGVyIHVzaW5nIGBjb25maWcuaW5pdGlhbERhdGFgIG9yIGBkYXRhYCBwcm9wZXJ0aWVzLicgKTtcblx0XHR9XG5cblx0XHQvLyBNZXJnZSB0d28gcG9zc2libGUgd2F5cyBvZiBwcm92aWRpbmcgZGF0YSBpbnRvIHRoZSBgY29uZmlnLmluaXRpYWxEYXRhYCBmaWVsZC5cblx0XHRjb25zdCBjb25maWcgPSB7XG5cdFx0XHQuLi50aGlzLmNvbmZpZyxcblx0XHRcdGluaXRpYWxEYXRhOiB0aGlzLmNvbmZpZy5pbml0aWFsRGF0YSB8fCB0aGlzLmRhdGEgfHwgJydcblx0XHR9O1xuXG5cdFx0dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoIGVsZW1lbnQgKTtcblxuXHRcdHJldHVybiB0aGlzLmVkaXRvciEuY3JlYXRlKCBlbGVtZW50LCBjb25maWcgKVxuXHRcdFx0LnRoZW4oIGVkaXRvciA9PiB7XG5cdFx0XHRcdHRoaXMuZWRpdG9ySW5zdGFuY2UgPSBlZGl0b3I7XG5cblx0XHRcdFx0aWYgKCB0aGlzLmluaXRpYWxJc0Rpc2FibGVkICkge1xuXHRcdFx0XHRcdGVkaXRvci5pc1JlYWRPbmx5ID0gdGhpcy5pbml0aWFsSXNEaXNhYmxlZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMubmdab25lLnJ1biggKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucmVhZHkuZW1pdCggZWRpdG9yICk7XG5cdFx0XHRcdH0gKTtcblxuXHRcdFx0XHR0aGlzLnNldFVwRWRpdG9yRXZlbnRzKCBlZGl0b3IgKTtcblx0XHRcdH0gKVxuXHRcdFx0LmNhdGNoKCAoIGVycjogRXJyb3IgKSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoIGVyci5zdGFjayApO1xuXHRcdFx0fSApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEludGVncmF0ZXMgdGhlIGVkaXRvciB3aXRoIHRoZSBjb21wb25lbnQgYnkgYXR0YWNoaW5nIHJlbGF0ZWQgZXZlbnQgbGlzdGVuZXJzLlxuXHQgKi9cblx0cHJpdmF0ZSBzZXRVcEVkaXRvckV2ZW50cyggZWRpdG9yOiBDS0VkaXRvcjUuRWRpdG9yICk6IHZvaWQge1xuXHRcdGNvbnN0IG1vZGVsRG9jdW1lbnQgPSBlZGl0b3IubW9kZWwuZG9jdW1lbnQ7XG5cdFx0Y29uc3Qgdmlld0RvY3VtZW50ID0gZWRpdG9yLmVkaXRpbmcudmlldy5kb2N1bWVudDtcblxuXHRcdG1vZGVsRG9jdW1lbnQub24oICdjaGFuZ2U6ZGF0YScsICggZXZ0OiBDS0VkaXRvcjUuRXZlbnRJbmZvPCdjaGFuZ2U6ZGF0YSc+ICkgPT4ge1xuXHRcdFx0dGhpcy5uZ1pvbmUucnVuKCAoKSA9PiB7XG5cdFx0XHRcdGlmICggdGhpcy5jdmFPbkNoYW5nZSAmJiAhdGhpcy5pc0VkaXRvclNldHRpbmdEYXRhICkge1xuXHRcdFx0XHRcdGNvbnN0IGRhdGEgPSBlZGl0b3IuZ2V0RGF0YSgpO1xuXG5cdFx0XHRcdFx0dGhpcy5jdmFPbkNoYW5nZSggZGF0YSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5jaGFuZ2UuZW1pdCggeyBldmVudDogZXZ0LCBlZGl0b3IgfSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblxuXHRcdHZpZXdEb2N1bWVudC5vbiggJ2ZvY3VzJywgKCBldnQ6IENLRWRpdG9yNS5FdmVudEluZm88J2ZvY3VzJz4gKSA9PiB7XG5cdFx0XHR0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcblx0XHRcdFx0dGhpcy5mb2N1cy5lbWl0KCB7IGV2ZW50OiBldnQsIGVkaXRvciB9ICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXG5cdFx0dmlld0RvY3VtZW50Lm9uKCAnYmx1cicsICggZXZ0OiBDS0VkaXRvcjUuRXZlbnRJbmZvPCdibHVyJz4gKSA9PiB7XG5cdFx0XHR0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcblx0XHRcdFx0aWYgKCB0aGlzLmN2YU9uVG91Y2hlZCApIHtcblx0XHRcdFx0XHR0aGlzLmN2YU9uVG91Y2hlZCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5ibHVyLmVtaXQoIHsgZXZlbnQ6IGV2dCwgZWRpdG9yIH0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBCbHVyRXZlbnQge1xuXHRldmVudDogQ0tFZGl0b3I1LkV2ZW50SW5mbzwnYmx1cic+O1xuXHRlZGl0b3I6IENLRWRpdG9yNS5FZGl0b3I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9jdXNFdmVudCB7XG5cdGV2ZW50OiBDS0VkaXRvcjUuRXZlbnRJbmZvPCdmb2N1cyc+O1xuXHRlZGl0b3I6IENLRWRpdG9yNS5FZGl0b3I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlRXZlbnQge1xuXHRldmVudDogQ0tFZGl0b3I1LkV2ZW50SW5mbzwnY2hhbmdlOmRhdGEnPjtcblx0ZWRpdG9yOiBDS0VkaXRvcjUuRWRpdG9yO1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNrZWRpdG9yL2NrZWRpdG9yNS1hbmd1bGFyLyIsInNvdXJjZXMiOlsiY2tlZGl0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUtBLE9BQU8sRUFDTixTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sWUFBWSxFQUNaLFVBQVUsRUFFVixVQUFVLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxjQUFjLE1BQU0saURBQWlELENBQUM7QUFFN0UsT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDO0FBRXhCLE9BQU8sRUFFTixpQkFBaUIsRUFDakIsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QjtJQWtLQywyQkFBb0IsVUFBc0IsRUFBRSxNQUFjOzs7Ozs7UUFuSTFDLFdBQU0sR0FBcUIsRUFBRSxDQUFDOzs7OztRQU05QixTQUFJLEdBQUcsRUFBRSxDQUFDOzs7Ozs7UUFPVixZQUFPLEdBQUcsS0FBSyxDQUFDOzs7Ozs7UUE2QmYsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDOzs7Ozs7UUFPN0MsV0FBTSxHQUE4QixJQUFJLFlBQVksRUFBZSxDQUFDOzs7Ozs7UUFPcEUsU0FBSSxHQUE0QixJQUFJLFlBQVksRUFBYSxDQUFDOzs7Ozs7UUFPOUQsVUFBSyxHQUE2QixJQUFJLFlBQVksRUFBYyxDQUFDOzs7O1FBS2pFLFVBQUssR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQzs7Ozs7UUEyQjlELHNCQUFpQixHQUFHLEtBQUssQ0FBQzs7OztRQWdDMUIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRTVCLE9BQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUdsQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUM5QixDQUFDO0lBN0dELHNCQUFvQix1Q0FBUTs7OztRQUk1QjtZQUNDLElBQUssSUFBSSxDQUFDLGNBQWMsRUFBRztnQkFDMUIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzthQUN0QztZQUVELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQy9CLENBQUM7UUFmRDs7OztXQUlHOzs7Ozs7OztRQUNILFVBQThCLFVBQW1CO1lBQ2hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBRSxVQUFVLENBQUUsQ0FBQztRQUNyQyxDQUFDOzs7T0FBQTtJQThDRCxzQkFBVyw2Q0FBYztRQUh6Qjs7V0FFRzs7Ozs7UUFDSDtZQUNDLElBQUssSUFBSSxDQUFDLGNBQWMsRUFBRztnQkFDMUIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUNsQztZQUVELElBQUssSUFBSSxDQUFDLFFBQVEsRUFBRztnQkFDcEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBRSxJQUFJLENBQUMsRUFBRSxDQUFFLENBQUM7YUFDeEM7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7OztPQUFBO0lBcURELDRDQUE0Qzs7Ozs7SUFDckMsMkNBQWU7Ozs7O0lBQXRCO1FBQ0MsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELHdDQUF3Qzs7Ozs7SUFDM0IsdUNBQVc7Ozs7O0lBQXhCOzs7Ozs2QkFDTSxJQUFJLENBQUMsUUFBUSxFQUFiLHdCQUFhO3dCQUNqQixxQkFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBRSxJQUFJLENBQUMsRUFBRSxDQUFFLEVBQUE7O3dCQUFyQyxTQUFxQyxDQUFDOzs7NkJBQzNCLENBQUEsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQSxFQUFqRCx3QkFBaUQ7d0JBQzVELHFCQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEVBQUE7O3dCQUFuQyxTQUFtQyxDQUFDO3dCQUVwQyxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQzs7Ozs7O0tBRWpDO0lBRUQsa0ZBQWtGOzs7Ozs7SUFDM0Usc0NBQVU7Ozs7OztJQUFqQixVQUFtQixLQUFvQjtRQUN0QyxvRUFBb0U7UUFDcEUsbUVBQW1FO1FBQ25FLElBQUssS0FBSyxLQUFLLElBQUksRUFBRztZQUNyQixLQUFLLEdBQUcsRUFBRSxDQUFDO1NBQ1g7UUFFRCwwQkFBMEI7UUFDMUIsSUFBSyxJQUFJLENBQUMsY0FBYyxFQUFHO1lBQzFCLDJFQUEyRTtZQUMzRSw2QkFBNkI7WUFDN0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztZQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBRSxLQUFLLENBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1NBQ2pDO1FBQ0QsbURBQW1EO2FBQzlDO1lBQ0osSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7WUFFbEIsdUVBQXVFO1lBQ3ZFLGtGQUFrRjtZQUNsRixJQUFLLElBQUksQ0FBQyxhQUFhLEVBQUc7Z0JBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDekM7U0FDRDtJQUNGLENBQUM7SUFFRCxrRkFBa0Y7Ozs7OztJQUMzRSw0Q0FBZ0I7Ozs7OztJQUF2QixVQUF5QixRQUFrQztRQUMxRCxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztJQUM3QixDQUFDO0lBRUQsa0ZBQWtGOzs7Ozs7SUFDM0UsNkNBQWlCOzs7Ozs7SUFBeEIsVUFBMEIsUUFBb0I7UUFDN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVELGtGQUFrRjs7Ozs7O0lBQzNFLDRDQUFnQjs7Ozs7O0lBQXZCLFVBQXlCLFVBQW1CO1FBQzNDLDBCQUEwQjtRQUMxQixJQUFLLElBQUksQ0FBQyxjQUFjLEVBQUc7WUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1NBQzVDO1FBRUQsK0RBQStEO1FBQy9ELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7O09BSUc7Ozs7Ozs7O0lBQ0ssNENBQWdCOzs7Ozs7O0lBQXhCO1FBQUEsaUJBbUVDOztZQWxFTSxPQUFPOzs7OztRQUFHLFVBQVEsT0FBb0IsRUFBRSxNQUF3Qjs7O2dCQUNyRSxzQkFBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQjs7O29CQUFFOzs7Ozs7b0NBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBRSxPQUFPLENBQUUsQ0FBQztvQ0FFdEMscUJBQU0sbUJBQUEsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDLE1BQU0sQ0FBRSxPQUFPLEVBQUUsTUFBTSxDQUFFLEVBQUE7O29DQUFyRCxNQUFNLEdBQUcsU0FBNEM7b0NBRTNELElBQUssSUFBSSxDQUFDLGlCQUFpQixFQUFHO3dDQUM3QixNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztxQ0FDM0M7b0NBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHOzs7b0NBQUU7d0NBQ2hCLEtBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFFLE1BQU0sQ0FBRSxDQUFDO29DQUMzQixDQUFDLEVBQUUsQ0FBQztvQ0FFSixJQUFJLENBQUMsaUJBQWlCLENBQUUsTUFBTSxDQUFFLENBQUM7b0NBRWpDLHNCQUFPLE1BQU0sRUFBQzs7O3lCQUNkLEVBQUUsRUFBQzs7YUFDSixDQUFBOztZQUVLLFVBQVU7Ozs7UUFBRyxVQUFRLE1BQXdCOzs7NEJBQ2xELHFCQUFNLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBQTs7d0JBQXRCLFNBQXNCLENBQUM7d0JBRXZCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBRSxtQkFBQSxJQUFJLENBQUMsYUFBYSxFQUFDLENBQUUsQ0FBQzs7OzthQUNqRSxDQUFBOztZQUVLLFNBQVM7OztRQUFHO1lBQ2pCLEtBQUksQ0FBQyxNQUFNLENBQUMsR0FBRzs7O1lBQUU7Z0JBQ2hCLEtBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsQ0FBQyxFQUFFLENBQUM7UUFDTCxDQUFDLENBQUE7O1lBRUssT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBRTs7WUFDaEQsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7UUFFL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7UUFFN0IsNkVBQTZFO1FBQzdFLElBQUssSUFBSSxDQUFDLFFBQVEsRUFBRztZQUNwQixnR0FBZ0c7WUFDaEcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUU7Z0JBQ2xCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDWCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxPQUFPLFNBQUE7Z0JBQ1AsVUFBVSxZQUFBO2dCQUNWLG1CQUFtQixFQUFFLE9BQU87Z0JBQzVCLE1BQU0sUUFBQTthQUNOLENBQUUsQ0FBQztZQUVKLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFFLFdBQVc7Ozs7O1lBQUUsVUFBRSxDQUFDLEVBQUUsRUFBVTtvQkFBUixrQkFBTTtnQkFDM0MsSUFBSyxNQUFNLEtBQUssS0FBSSxDQUFDLEVBQUUsRUFBRztvQkFDekIsU0FBUyxFQUFFLENBQUM7aUJBQ1o7WUFDRixDQUFDLEVBQUUsQ0FBQztTQUNKO2FBQU07OztnQkFFQSxjQUFjLEdBQTZCLElBQUksY0FBYyxDQUFFLElBQUksQ0FBQyxNQUFNLENBQUU7WUFFbEYsY0FBYyxDQUFDLFVBQVUsQ0FBRSxPQUFPLENBQUUsQ0FBQztZQUNyQyxjQUFjLENBQUMsYUFBYSxDQUFFLFVBQVUsQ0FBRSxDQUFDO1lBQzNDLGNBQWMsQ0FBQyxFQUFFLENBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBRSxDQUFDO1lBRXhDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBRXJDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFFLE9BQU8sRUFBRSxNQUFNLENBQUUsQ0FBQztTQUM5QztJQUNGLENBQUM7Ozs7O0lBRU8scUNBQVM7Ozs7SUFBakI7UUFDQyxJQUFLLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUc7WUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBRSx3RkFBd0YsQ0FBRSxDQUFDO1NBQzVHO1FBRUQsaUZBQWlGO1FBQ2pGLDRCQUNJLElBQUksQ0FBQyxNQUFNLElBQ2QsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxJQUN0RDtJQUNILENBQUM7SUFFRDs7T0FFRzs7Ozs7OztJQUNLLDZDQUFpQjs7Ozs7O0lBQXpCLFVBQTJCLE1BQXdCO1FBQW5ELGlCQStCQzs7WUE5Qk0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUTs7WUFDckMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVE7UUFFakQsYUFBYSxDQUFDLEVBQUUsQ0FBRSxhQUFhOzs7O1FBQUUsVUFBRSxHQUF1QztZQUN6RSxLQUFJLENBQUMsTUFBTSxDQUFDLEdBQUc7OztZQUFFO2dCQUNoQixJQUFLLEtBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxLQUFJLENBQUMsbUJBQW1CLEVBQUc7O3dCQUM5QyxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRTtvQkFFN0IsS0FBSSxDQUFDLFdBQVcsQ0FBRSxJQUFJLENBQUUsQ0FBQztpQkFDekI7Z0JBRUQsS0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBQSxFQUFFLENBQUUsQ0FBQztZQUM1QyxDQUFDLEVBQUUsQ0FBQztRQUNMLENBQUMsRUFBRSxDQUFDO1FBRUosWUFBWSxDQUFDLEVBQUUsQ0FBRSxPQUFPOzs7O1FBQUUsVUFBRSxHQUFpQztZQUM1RCxLQUFJLENBQUMsTUFBTSxDQUFDLEdBQUc7OztZQUFFO2dCQUNoQixLQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxRQUFBLEVBQUUsQ0FBRSxDQUFDO1lBQzNDLENBQUMsRUFBRSxDQUFDO1FBQ0wsQ0FBQyxFQUFFLENBQUM7UUFFSixZQUFZLENBQUMsRUFBRSxDQUFFLE1BQU07Ozs7UUFBRSxVQUFFLEdBQWdDO1lBQzFELEtBQUksQ0FBQyxNQUFNLENBQUMsR0FBRzs7O1lBQUU7Z0JBQ2hCLElBQUssS0FBSSxDQUFDLFlBQVksRUFBRztvQkFDeEIsS0FBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2lCQUNwQjtnQkFFRCxLQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxRQUFBLEVBQUUsQ0FBRSxDQUFDO1lBQzFDLENBQUMsRUFBRSxDQUFDO1FBQ0wsQ0FBQyxFQUFFLENBQUM7SUFDTCxDQUFDOztnQkFoV0QsU0FBUyxTQUFFO29CQUNYLFFBQVEsRUFBRSxVQUFVO29CQUNwQixRQUFRLEVBQUUsNkJBQTZCOztvQkFHdkMsU0FBUyxFQUFFO3dCQUNWOzRCQUNDLE9BQU8sRUFBRSxpQkFBaUI7OzRCQUUxQixXQUFXLEVBQUUsVUFBVTs7OzRCQUFFLGNBQU0sT0FBQSxpQkFBaUIsRUFBakIsQ0FBaUIsRUFBRTs0QkFDbEQsS0FBSyxFQUFFLElBQUk7eUJBQ1g7cUJBQ0Q7aUJBQ0Q7Ozs7Z0JBM0JBLFVBQVU7Z0JBSlYsTUFBTTs7O3lCQTBDTCxLQUFLO3lCQU9MLEtBQUs7dUJBTUwsS0FBSzswQkFPTCxLQUFLOzJCQUtMLEtBQUs7MkJBT0wsS0FBSzt3QkFpQkwsTUFBTTt5QkFPTixNQUFNO3VCQU9OLE1BQU07d0JBT04sTUFBTTt3QkFLTixNQUFNOztJQThQUix3QkFBQztDQUFBLEFBaldELElBaVdDO1NBblZZLGlCQUFpQjs7Ozs7OztJQUk3Qix1Q0FBNkM7Ozs7OztJQU03QyxtQ0FBcUQ7Ozs7Ozs7SUFPckQsbUNBQThDOzs7Ozs7SUFNOUMsaUNBQTBCOzs7Ozs7O0lBTzFCLG9DQUFnQzs7Ozs7SUFLaEMscUNBQXFEOzs7Ozs7O0lBd0JyRCxrQ0FBOEQ7Ozs7Ozs7SUFPOUQsbUNBQXFGOzs7Ozs7O0lBT3JGLGlDQUErRTs7Ozs7OztJQU8vRSxrQ0FBa0Y7Ozs7O0lBS2xGLGtDQUFzRTs7Ozs7OztJQXFCdEUsMkNBQWtEOzs7Ozs7O0lBTWxELDhDQUFrQzs7Ozs7OztJQU1sQyxtQ0FBdUI7Ozs7Ozs7OztJQVF2Qix3Q0FBK0M7Ozs7Ozs7OztJQVEvQyx5Q0FBa0M7Ozs7OztJQUtsQywwQ0FBb0M7Ozs7OztJQUtwQyxnREFBb0M7Ozs7O0lBRXBDLCtCQUFtQjs7Ozs7QUFtTXBCLCtCQUdDOzs7SUFGQSwwQkFBbUM7O0lBQ25DLDJCQUF5Qjs7Ozs7QUFHMUIsZ0NBR0M7OztJQUZBLDJCQUFvQzs7SUFDcEMsNEJBQXlCOzs7OztBQUcxQixpQ0FHQzs7O0lBRkEsNEJBQTBDOztJQUMxQyw2QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAwMy0yMDIwLCBDS1NvdXJjZSAtIEZyZWRlcmljbyBLbmFiYmVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogRm9yIGxpY2Vuc2luZywgc2VlIExJQ0VOU0UubWQuXG4gKi9cblxuaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRJbnB1dCxcblx0T3V0cHV0LFxuXHROZ1pvbmUsXG5cdEV2ZW50RW1pdHRlcixcblx0Zm9yd2FyZFJlZixcblx0QWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LFxuXHRFbGVtZW50UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgRWRpdG9yV2F0Y2hkb2cgZnJvbSAnQGNrZWRpdG9yL2NrZWRpdG9yNS13YXRjaGRvZy9zcmMvZWRpdG9yd2F0Y2hkb2cnO1xuXG5pbXBvcnQgdWlkIGZyb20gJy4vdWlkJztcblxuaW1wb3J0IHtcblx0Q29udHJvbFZhbHVlQWNjZXNzb3IsXG5cdE5HX1ZBTFVFX0FDQ0VTU09SXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQ0tFZGl0b3I1IH0gZnJvbSAnLi9ja2VkaXRvcic7XG5cbkBDb21wb25lbnQoIHtcblx0c2VsZWN0b3I6ICdja2VkaXRvcicsXG5cdHRlbXBsYXRlOiAnPG5nLXRlbXBsYXRlPjwvbmctdGVtcGxhdGU+JyxcblxuXHQvLyBJbnRlZ3JhdGlvbiB3aXRoIEBhbmd1bGFyL2Zvcm1zLlxuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcblx0XHRcdHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCAoKSA9PiBDS0VkaXRvckNvbXBvbmVudCApLFxuXHRcdFx0bXVsdGk6IHRydWUsXG5cdFx0fVxuXHRdXG59IClcbmV4cG9ydCBjbGFzcyBDS0VkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXHQvKipcblx0ICogVGhlIHJlZmVyZW5jZSB0byB0aGUgRE9NIGVsZW1lbnQgY3JlYXRlZCBieSB0aGUgY29tcG9uZW50LlxuXHQgKi9cblx0cHJpdmF0ZSBlbGVtZW50UmVmITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cblx0LyoqXG5cdCAqIFRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgZWRpdG9yIHRvIGJlIHVzZWQgZm9yIHRoZSBpbnN0YW5jZSBvZiB0aGUgY29tcG9uZW50LlxuXHQgKiBJdCBjYW4gYmUgZS5nLiB0aGUgYENsYXNzaWNFZGl0b3JCdWlsZGAsIGBJbmxpbmVFZGl0b3JCdWlsZGAgb3Igc29tZSBjdXN0b20gZWRpdG9yLlxuXHQgKi9cblx0QElucHV0KCkgcHVibGljIGVkaXRvcj86IENLRWRpdG9yNS5FZGl0b3JDb25zdHJ1Y3RvcjtcblxuXHQvKipcblx0ICogVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGVkaXRvci5cblx0ICogU2VlIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I1L2xhdGVzdC9hcGkvbW9kdWxlX2NvcmVfZWRpdG9yX2VkaXRvcmNvbmZpZy1FZGl0b3JDb25maWcuaHRtbFxuXHQgKiB0byBsZWFybiBtb3JlLlxuXHQgKi9cblx0QElucHV0KCkgcHVibGljIGNvbmZpZzogQ0tFZGl0b3I1LkNvbmZpZyA9IHt9O1xuXG5cdC8qKlxuXHQgKiBUaGUgaW5pdGlhbCBkYXRhIG9mIHRoZSBlZGl0b3IuIFVzZWZ1bCB3aGVuIG5vdCB1c2luZyB0aGUgbmdNb2RlbC5cblx0ICogU2VlIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvZm9ybXMvTmdNb2RlbCB0byBsZWFybiBtb3JlLlxuXHQgKi9cblx0QElucHV0KCkgcHVibGljIGRhdGEgPSAnJztcblxuXHQvKipcblx0ICogVGFnIG5hbWUgb2YgdGhlIGVkaXRvciBjb21wb25lbnQuXG5cdCAqXG5cdCAqIFRoZSBkZWZhdWx0IHRhZyBpcyAnZGl2Jy5cblx0ICovXG5cdEBJbnB1dCgpIHB1YmxpYyB0YWdOYW1lID0gJ2Rpdic7XG5cblx0LyoqXG5cdCAqIFRoZSBjb250ZXh0IHdhdGNoZG9nLlxuXHQgKi9cblx0QElucHV0KCkgcHVibGljIHdhdGNoZG9nPzogQ0tFZGl0b3I1LkNvbnRleHRXYXRjaGRvZztcblxuXHQvKipcblx0ICogV2hlbiBzZXQgYHRydWVgLCB0aGUgZWRpdG9yIGJlY29tZXMgcmVhZC1vbmx5LlxuXHQgKiBTZWUgaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjUvbGF0ZXN0L2FwaS9tb2R1bGVfY29yZV9lZGl0b3JfZWRpdG9yLUVkaXRvci5odG1sI21lbWJlci1pc1JlYWRPbmx5XG5cdCAqIHRvIGxlYXJuIG1vcmUuXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgc2V0IGRpc2FibGVkKCBpc0Rpc2FibGVkOiBib29sZWFuICkge1xuXHRcdHRoaXMuc2V0RGlzYWJsZWRTdGF0ZSggaXNEaXNhYmxlZCApO1xuXHR9XG5cblx0cHVibGljIGdldCBkaXNhYmxlZCgpIHtcblx0XHRpZiAoIHRoaXMuZWRpdG9ySW5zdGFuY2UgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lZGl0b3JJbnN0YW5jZS5pc1JlYWRPbmx5O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmluaXRpYWxJc0Rpc2FibGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpcmVzIHdoZW4gdGhlIGVkaXRvciBpcyByZWFkeS4gSXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgYGVkaXRvciNyZWFkeWBcblx0ICogaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjUvbGF0ZXN0L2FwaS9tb2R1bGVfY29yZV9lZGl0b3JfZWRpdG9yLUVkaXRvci5odG1sI2V2ZW50LXJlYWR5XG5cdCAqIGV2ZW50LlxuXHQgKi9cblx0QE91dHB1dCgpIHB1YmxpYyByZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8Q0tFZGl0b3I1LkVkaXRvcj4oKTtcblxuXHQvKipcblx0ICogRmlyZXMgd2hlbiB0aGUgY29udGVudCBvZiB0aGUgZWRpdG9yIGhhcyBjaGFuZ2VkLiBJdCBjb3JyZXNwb25kcyB3aXRoIHRoZSBgZWRpdG9yLm1vZGVsLmRvY3VtZW50I2NoYW5nZWBcblx0ICogaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjUvbGF0ZXN0L2FwaS9tb2R1bGVfZW5naW5lX21vZGVsX2RvY3VtZW50LURvY3VtZW50Lmh0bWwjZXZlbnQtY2hhbmdlXG5cdCAqIGV2ZW50LlxuXHQgKi9cblx0QE91dHB1dCgpIHB1YmxpYyBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPENoYW5nZUV2ZW50PigpO1xuXG5cdC8qKlxuXHQgKiBGaXJlcyB3aGVuIHRoZSBlZGl0aW5nIHZpZXcgb2YgdGhlIGVkaXRvciBpcyBibHVycmVkLiBJdCBjb3JyZXNwb25kcyB3aXRoIHRoZSBgZWRpdG9yLmVkaXRpbmcudmlldy5kb2N1bWVudCNibHVyYFxuXHQgKiBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNS9sYXRlc3QvYXBpL21vZHVsZV9lbmdpbmVfdmlld19kb2N1bWVudC1Eb2N1bWVudC5odG1sI2V2ZW50LWV2ZW50OmJsdXJcblx0ICogZXZlbnQuXG5cdCAqL1xuXHRAT3V0cHV0KCkgcHVibGljIGJsdXI6IEV2ZW50RW1pdHRlcjxCbHVyRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxCbHVyRXZlbnQ+KCk7XG5cblx0LyoqXG5cdCAqIEZpcmVzIHdoZW4gdGhlIGVkaXRpbmcgdmlldyBvZiB0aGUgZWRpdG9yIGlzIGZvY3VzZWQuIEl0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGBlZGl0b3IuZWRpdGluZy52aWV3LmRvY3VtZW50I2ZvY3VzYFxuXHQgKiBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNS9sYXRlc3QvYXBpL21vZHVsZV9lbmdpbmVfdmlld19kb2N1bWVudC1Eb2N1bWVudC5odG1sI2V2ZW50LWV2ZW50OmZvY3VzXG5cdCAqIGV2ZW50LlxuXHQgKi9cblx0QE91dHB1dCgpIHB1YmxpYyBmb2N1czogRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuXG5cdC8qKlxuXHQgKiBGaXJlcyB3aGVuIHRoZSBlZGl0b3IgY29tcG9uZW50IGNyYXNoZXMuXG5cdCAqL1xuXHRAT3V0cHV0KCkgcHVibGljIGVycm9yOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cblx0LyoqXG5cdCAqIFRoZSBpbnN0YW5jZSBvZiB0aGUgZWRpdG9yIGNyZWF0ZWQgYnkgdGhpcyBjb21wb25lbnQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGVkaXRvckluc3RhbmNlKCk6IENLRWRpdG9yNS5FZGl0b3IgfCBudWxsIHtcblx0XHRpZiAoIHRoaXMuZWRpdG9yV2F0Y2hkb2cgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lZGl0b3JXYXRjaGRvZy5lZGl0b3I7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLndhdGNoZG9nICkge1xuXHRcdFx0cmV0dXJuIHRoaXMud2F0Y2hkb2cuZ2V0SXRlbSggdGhpcy5pZCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBlZGl0b3Igd2F0Y2hkb2cuIEl0IGlzIGNyZWF0ZWQgd2hlbiB0aGUgY29udGV4dCB3YXRjaGRvZyBpcyBub3QgcGFzc2VkIHRvIHRoZSBjb21wb25lbnQuXG5cdCAqIEl0IGtlZXBzIHRoZSBlZGl0b3IgcnVubmluZy5cblx0ICovXG5cdHByaXZhdGUgZWRpdG9yV2F0Y2hkb2c/OiBDS0VkaXRvcjUuRWRpdG9yV2F0Y2hkb2c7XG5cblx0LyoqXG5cdCAqIElmIHRoZSBjb21wb25lbnQgaXMgcmVhZOKAk29ubHkgYmVmb3JlIHRoZSBlZGl0b3IgaW5zdGFuY2UgaXMgY3JlYXRlZCwgaXQgcmVtZW1iZXJzIHRoYXQgc3RhdGUsXG5cdCAqIHNvIHRoZSBlZGl0b3IgY2FuIGJlY29tZSByZWFk4oCTb25seSBvbmNlIGl0IGlzIHJlYWR5LlxuXHQgKi9cblx0cHJpdmF0ZSBpbml0aWFsSXNEaXNhYmxlZCA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBBbiBpbnN0YW5jZSBvZiBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvcmUvTmdab25lIHRvIGFsbG93IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBlZGl0b3Jcblx0ICogd2l0aGluZyB0aGUgQW5ndWxhciBldmVudCBsb29wLlxuXHQgKi9cblx0cHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZTtcblxuXHQvKipcblx0ICogQSBjYWxsYmFjayBleGVjdXRlZCB3aGVuIHRoZSBjb250ZW50IG9mIHRoZSBlZGl0b3IgY2hhbmdlcy4gUGFydCBvZiB0aGVcblx0ICogYENvbnRyb2xWYWx1ZUFjY2Vzc29yYCAoaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9mb3Jtcy9Db250cm9sVmFsdWVBY2Nlc3NvcikgaW50ZXJmYWNlLlxuXHQgKlxuXHQgKiBOb3RlOiBVbnNldCB1bmxlc3MgdGhlIGNvbXBvbmVudCB1c2VzIHRoZSBgbmdNb2RlbGAuXG5cdCAqL1xuXHRwcml2YXRlIGN2YU9uQ2hhbmdlPzogKCBkYXRhOiBzdHJpbmcgKSA9PiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBBIGNhbGxiYWNrIGV4ZWN1dGVkIHdoZW4gdGhlIGVkaXRvciBoYXMgYmVlbiBibHVycmVkLiBQYXJ0IG9mIHRoZVxuXHQgKiBgQ29udHJvbFZhbHVlQWNjZXNzb3JgIChodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zL0NvbnRyb2xWYWx1ZUFjY2Vzc29yKSBpbnRlcmZhY2UuXG5cdCAqXG5cdCAqIE5vdGU6IFVuc2V0IHVubGVzcyB0aGUgY29tcG9uZW50IHVzZXMgdGhlIGBuZ01vZGVsYC5cblx0ICovXG5cdHByaXZhdGUgY3ZhT25Ub3VjaGVkPzogKCkgPT4gdm9pZDtcblxuXHQvKipcblx0ICogUmVmZXJlbmNlIHRvIHRoZSBzb3VyY2UgZWxlbWVudCB1c2VkIGJ5IHRoZSBlZGl0b3IuXG5cdCAqL1xuXHRwcml2YXRlIGVkaXRvckVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcblxuXHQvKipcblx0ICogQSBsb2NrIGZsYWcgcHJldmVudGluZyBmcm9tIGNhbGxpbmcgdGhlIGBjdmFPbkNoYW5nZSgpYCBkdXJpbmcgc2V0dGluZyBlZGl0b3IgZGF0YS5cblx0ICovXG5cdHByaXZhdGUgaXNFZGl0b3JTZXR0aW5nRGF0YSA9IGZhbHNlO1xuXG5cdHByaXZhdGUgaWQgPSB1aWQoKTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIG5nWm9uZTogTmdab25lICkge1xuXHRcdHRoaXMubmdab25lID0gbmdab25lO1xuXHRcdHRoaXMuZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnRpbmcgdGhlIEFmdGVyVmlld0luaXQgaW50ZXJmYWNlLlxuXHRwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuXHRcdHRoaXMuYXR0YWNoVG9XYXRjaGRvZygpO1xuXHR9XG5cblx0Ly8gSW1wbGVtZW50aW5nIHRoZSBPbkRlc3Ryb3kgaW50ZXJmYWNlLlxuXHRwdWJsaWMgYXN5bmMgbmdPbkRlc3Ryb3koKSB7XG5cdFx0aWYgKCB0aGlzLndhdGNoZG9nICkge1xuXHRcdFx0YXdhaXQgdGhpcy53YXRjaGRvZy5yZW1vdmUoIHRoaXMuaWQgKTtcblx0XHR9IGVsc2UgaWYgKCB0aGlzLmVkaXRvcldhdGNoZG9nICYmIHRoaXMuZWRpdG9yV2F0Y2hkb2cuZWRpdG9yICkge1xuXHRcdFx0YXdhaXQgdGhpcy5lZGl0b3JXYXRjaGRvZy5kZXN0cm95KCk7XG5cblx0XHRcdHRoaXMuZWRpdG9yV2F0Y2hkb2cgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSW1wbGVtZW50aW5nIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UgKG9ubHkgd2hlbiBiaW5kaW5nIHRvIG5nTW9kZWwpLlxuXHRwdWJsaWMgd3JpdGVWYWx1ZSggdmFsdWU6IHN0cmluZyB8IG51bGwgKTogdm9pZCB7XG5cdFx0Ly8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdpdGggdGhlIGBudWxsYCB2YWx1ZSB3aGVuIHRoZSBmb3JtIHJlc2V0cy5cblx0XHQvLyBBIGNvbXBvbmVudCdzIHJlc3BvbnNpYmlsaXR5IGlzIHRvIHJlc3RvcmUgdG8gdGhlIGluaXRpYWwgc3RhdGUuXG5cdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdHZhbHVlID0gJyc7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgYWxyZWFkeSBpbml0aWFsaXplZC5cblx0XHRpZiAoIHRoaXMuZWRpdG9ySW5zdGFuY2UgKSB7XG5cdFx0XHQvLyBUaGUgbG9jayBtZWNoYW5pc20gcHJldmVudHMgZnJvbSBjYWxsaW5nIGBjdmFPbkNoYW5nZSgpYCBkdXJpbmcgY2hhbmdpbmdcblx0XHRcdC8vIHRoZSBlZGl0b3Igc3RhdGUuIFNlZSAjMTM5XG5cdFx0XHR0aGlzLmlzRWRpdG9yU2V0dGluZ0RhdGEgPSB0cnVlO1xuXHRcdFx0dGhpcy5lZGl0b3JJbnN0YW5jZS5zZXREYXRhKCB2YWx1ZSApO1xuXHRcdFx0dGhpcy5pc0VkaXRvclNldHRpbmdEYXRhID0gZmFsc2U7XG5cdFx0fVxuXHRcdC8vIElmIG5vdCwgd2FpdCBmb3IgaXQgdG8gYmUgcmVhZHk7IHN0b3JlIHRoZSBkYXRhLlxuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy5kYXRhID0gdmFsdWU7XG5cblx0XHRcdC8vIElmIHRoZSBlZGl0b3IgZWxlbWVudCBpcyBhbHJlYWR5IGF2YWlsYWJsZSwgdGhlbiB1cGRhdGUgaXRzIGNvbnRlbnQuXG5cdFx0XHQvLyBJZiB0aGUgbmdNb2RlbCBpcyB1c2VkIHRoZW4gdGhlIGVkaXRvciBlbGVtZW50IHNob3VsZCBiZSB1cGRhdGVkIGRpcmVjdGx5IGhlcmUuXG5cdFx0XHRpZiAoIHRoaXMuZWRpdG9yRWxlbWVudCApIHtcblx0XHRcdFx0dGhpcy5lZGl0b3JFbGVtZW50LmlubmVySFRNTCA9IHRoaXMuZGF0YTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBJbXBsZW1lbnRpbmcgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSAob25seSB3aGVuIGJpbmRpbmcgdG8gbmdNb2RlbCkuXG5cdHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKCBjYWxsYmFjazogKCBkYXRhOiBzdHJpbmcgKSA9PiB2b2lkICk6IHZvaWQge1xuXHRcdHRoaXMuY3ZhT25DaGFuZ2UgPSBjYWxsYmFjaztcblx0fVxuXG5cdC8vIEltcGxlbWVudGluZyB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlIChvbmx5IHdoZW4gYmluZGluZyB0byBuZ01vZGVsKS5cblx0cHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKCBjYWxsYmFjazogKCkgPT4gdm9pZCApOiB2b2lkIHtcblx0XHR0aGlzLmN2YU9uVG91Y2hlZCA9IGNhbGxiYWNrO1xuXHR9XG5cblx0Ly8gSW1wbGVtZW50aW5nIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UgKG9ubHkgd2hlbiBiaW5kaW5nIHRvIG5nTW9kZWwpLlxuXHRwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZSggaXNEaXNhYmxlZDogYm9vbGVhbiApOiB2b2lkIHtcblx0XHQvLyBJZiBhbHJlYWR5IGluaXRpYWxpemVkLlxuXHRcdGlmICggdGhpcy5lZGl0b3JJbnN0YW5jZSApIHtcblx0XHRcdHRoaXMuZWRpdG9ySW5zdGFuY2UuaXNSZWFkT25seSA9IGlzRGlzYWJsZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgdGhlIHN0YXRlIGFueXdheSB0byB1c2UgaXQgb25jZSB0aGUgZWRpdG9yIGlzIGNyZWF0ZWQuXG5cdFx0dGhpcy5pbml0aWFsSXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgZWRpdG9yIGluc3RhbmNlLCBzZXRzIGluaXRpYWwgZWRpdG9yIGRhdGEsIHRoZW4gaW50ZWdyYXRlc1xuXHQgKiB0aGUgZWRpdG9yIHdpdGggdGhlIEFuZ3VsYXIgY29tcG9uZW50LiBUaGlzIG1ldGhvZCBkb2VzIG5vdCB1c2UgdGhlIGBlZGl0b3Iuc2V0RGF0YSgpYFxuXHQgKiBiZWNhdXNlIG9mIHRoZSBpc3N1ZSBpbiB0aGUgY29sbGFib3JhdGlvbiBtb2RlICgjNikuXG5cdCAqL1xuXHRwcml2YXRlIGF0dGFjaFRvV2F0Y2hkb2coKSB7XG5cdFx0Y29uc3QgY3JlYXRvciA9IGFzeW5jICggZWxlbWVudDogSFRNTEVsZW1lbnQsIGNvbmZpZzogQ0tFZGl0b3I1LkNvbmZpZyApID0+IHtcblx0XHRcdHJldHVybiB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhciggYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCggZWxlbWVudCApO1xuXG5cdFx0XHRcdGNvbnN0IGVkaXRvciA9IGF3YWl0IHRoaXMuZWRpdG9yIS5jcmVhdGUoIGVsZW1lbnQsIGNvbmZpZyApO1xuXG5cdFx0XHRcdGlmICggdGhpcy5pbml0aWFsSXNEaXNhYmxlZCApIHtcblx0XHRcdFx0XHRlZGl0b3IuaXNSZWFkT25seSA9IHRoaXMuaW5pdGlhbElzRGlzYWJsZWQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLnJlYWR5LmVtaXQoIGVkaXRvciApO1xuXHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0dGhpcy5zZXRVcEVkaXRvckV2ZW50cyggZWRpdG9yICk7XG5cblx0XHRcdFx0cmV0dXJuIGVkaXRvcjtcblx0XHRcdH0gKTtcblx0XHR9O1xuXG5cdFx0Y29uc3QgZGVzdHJ1Y3RvciA9IGFzeW5jICggZWRpdG9yOiBDS0VkaXRvcjUuRWRpdG9yICkgPT4ge1xuXHRcdFx0YXdhaXQgZWRpdG9yLmRlc3Ryb3koKTtcblxuXHRcdFx0dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQ2hpbGQoIHRoaXMuZWRpdG9yRWxlbWVudCEgKTtcblx0XHR9O1xuXG5cdFx0Y29uc3QgZW1pdEVycm9yID0gKCkgPT4ge1xuXHRcdFx0dGhpcy5uZ1pvbmUucnVuKCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZXJyb3IuZW1pdCgpO1xuXHRcdFx0fSApO1xuXHRcdH07XG5cblx0XHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggdGhpcy50YWdOYW1lICk7XG5cdFx0Y29uc3QgY29uZmlnID0gdGhpcy5nZXRDb25maWcoKTtcblxuXHRcdHRoaXMuZWRpdG9yRWxlbWVudCA9IGVsZW1lbnQ7XG5cblx0XHQvLyBCYXNlZCBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIHdhdGNoZG9nIGRlY2lkZSBob3cgdG8gaW5pdGlhbGl6ZSB0aGUgZWRpdG9yLlxuXHRcdGlmICggdGhpcy53YXRjaGRvZyApIHtcblx0XHRcdC8vIFdoZW4gdGhlIGNvbnRleHQgd2F0Y2hkb2cgaXMgcGFzc2VkIGFkZCB0aGUgbmV3IGl0ZW0gdG8gaXQgYmFzZWQgb24gdGhlIHBhc3NlZCBjb25maWd1cmF0aW9uLlxuXHRcdFx0dGhpcy53YXRjaGRvZy5hZGQoIHtcblx0XHRcdFx0aWQ6IHRoaXMuaWQsXG5cdFx0XHRcdHR5cGU6ICdlZGl0b3InLFxuXHRcdFx0XHRjcmVhdG9yLFxuXHRcdFx0XHRkZXN0cnVjdG9yLFxuXHRcdFx0XHRzb3VyY2VFbGVtZW50T3JEYXRhOiBlbGVtZW50LFxuXHRcdFx0XHRjb25maWdcblx0XHRcdH0gKTtcblxuXHRcdFx0dGhpcy53YXRjaGRvZy5vbiggJ2l0ZW1FcnJvcicsICggXywgeyBpdGVtSWQgfSApID0+IHtcblx0XHRcdFx0aWYgKCBpdGVtSWQgPT09IHRoaXMuaWQgKSB7XG5cdFx0XHRcdFx0ZW1pdEVycm9yKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSW4gdGhlIG90aGVyIGNhc2UgY3JlYXRlIHRoZSB3YXRjaGRvZyBieSBoYW5kIHRvIGtlZXAgdGhlIGVkaXRvciBydW5uaW5nLlxuXHRcdFx0Y29uc3QgZWRpdG9yV2F0Y2hkb2c6IENLRWRpdG9yNS5FZGl0b3JXYXRjaGRvZyA9IG5ldyBFZGl0b3JXYXRjaGRvZyggdGhpcy5lZGl0b3IgKTtcblxuXHRcdFx0ZWRpdG9yV2F0Y2hkb2cuc2V0Q3JlYXRvciggY3JlYXRvciApO1xuXHRcdFx0ZWRpdG9yV2F0Y2hkb2cuc2V0RGVzdHJ1Y3RvciggZGVzdHJ1Y3RvciApO1xuXHRcdFx0ZWRpdG9yV2F0Y2hkb2cub24oICdlcnJvcicsIGVtaXRFcnJvciApO1xuXG5cdFx0XHR0aGlzLmVkaXRvcldhdGNoZG9nID0gZWRpdG9yV2F0Y2hkb2c7XG5cblx0XHRcdHRoaXMuZWRpdG9yV2F0Y2hkb2cuY3JlYXRlKCBlbGVtZW50LCBjb25maWcgKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldENvbmZpZygpIHtcblx0XHRpZiAoIHRoaXMuZGF0YSAmJiB0aGlzLmNvbmZpZy5pbml0aWFsRGF0YSApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvciggJ0VkaXRvciBkYXRhIHNob3VsZCBiZSBwcm92aWRlZCBlaXRoZXIgdXNpbmcgYGNvbmZpZy5pbml0aWFsRGF0YWAgb3IgYGRhdGFgIHByb3BlcnRpZXMuJyApO1xuXHRcdH1cblxuXHRcdC8vIE1lcmdlIHR3byBwb3NzaWJsZSB3YXlzIG9mIHByb3ZpZGluZyBkYXRhIGludG8gdGhlIGBjb25maWcuaW5pdGlhbERhdGFgIGZpZWxkLlxuXHRcdHJldHVybiB7XG5cdFx0XHQuLi50aGlzLmNvbmZpZyxcblx0XHRcdGluaXRpYWxEYXRhOiB0aGlzLmNvbmZpZy5pbml0aWFsRGF0YSB8fCB0aGlzLmRhdGEgfHwgJydcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEludGVncmF0ZXMgdGhlIGVkaXRvciB3aXRoIHRoZSBjb21wb25lbnQgYnkgYXR0YWNoaW5nIHJlbGF0ZWQgZXZlbnQgbGlzdGVuZXJzLlxuXHQgKi9cblx0cHJpdmF0ZSBzZXRVcEVkaXRvckV2ZW50cyggZWRpdG9yOiBDS0VkaXRvcjUuRWRpdG9yICk6IHZvaWQge1xuXHRcdGNvbnN0IG1vZGVsRG9jdW1lbnQgPSBlZGl0b3IubW9kZWwuZG9jdW1lbnQ7XG5cdFx0Y29uc3Qgdmlld0RvY3VtZW50ID0gZWRpdG9yLmVkaXRpbmcudmlldy5kb2N1bWVudDtcblxuXHRcdG1vZGVsRG9jdW1lbnQub24oICdjaGFuZ2U6ZGF0YScsICggZXZ0OiBDS0VkaXRvcjUuRXZlbnRJbmZvPCdjaGFuZ2U6ZGF0YSc+ICkgPT4ge1xuXHRcdFx0dGhpcy5uZ1pvbmUucnVuKCAoKSA9PiB7XG5cdFx0XHRcdGlmICggdGhpcy5jdmFPbkNoYW5nZSAmJiAhdGhpcy5pc0VkaXRvclNldHRpbmdEYXRhICkge1xuXHRcdFx0XHRcdGNvbnN0IGRhdGEgPSBlZGl0b3IuZ2V0RGF0YSgpO1xuXG5cdFx0XHRcdFx0dGhpcy5jdmFPbkNoYW5nZSggZGF0YSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5jaGFuZ2UuZW1pdCggeyBldmVudDogZXZ0LCBlZGl0b3IgfSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblxuXHRcdHZpZXdEb2N1bWVudC5vbiggJ2ZvY3VzJywgKCBldnQ6IENLRWRpdG9yNS5FdmVudEluZm88J2ZvY3VzJz4gKSA9PiB7XG5cdFx0XHR0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcblx0XHRcdFx0dGhpcy5mb2N1cy5lbWl0KCB7IGV2ZW50OiBldnQsIGVkaXRvciB9ICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXG5cdFx0dmlld0RvY3VtZW50Lm9uKCAnYmx1cicsICggZXZ0OiBDS0VkaXRvcjUuRXZlbnRJbmZvPCdibHVyJz4gKSA9PiB7XG5cdFx0XHR0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcblx0XHRcdFx0aWYgKCB0aGlzLmN2YU9uVG91Y2hlZCApIHtcblx0XHRcdFx0XHR0aGlzLmN2YU9uVG91Y2hlZCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5ibHVyLmVtaXQoIHsgZXZlbnQ6IGV2dCwgZWRpdG9yIH0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBCbHVyRXZlbnQge1xuXHRldmVudDogQ0tFZGl0b3I1LkV2ZW50SW5mbzwnYmx1cic+O1xuXHRlZGl0b3I6IENLRWRpdG9yNS5FZGl0b3I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9jdXNFdmVudCB7XG5cdGV2ZW50OiBDS0VkaXRvcjUuRXZlbnRJbmZvPCdmb2N1cyc+O1xuXHRlZGl0b3I6IENLRWRpdG9yNS5FZGl0b3I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlRXZlbnQge1xuXHRldmVudDogQ0tFZGl0b3I1LkV2ZW50SW5mbzwnY2hhbmdlOmRhdGEnPjtcblx0ZWRpdG9yOiBDS0VkaXRvcjUuRWRpdG9yO1xufVxuIl19

@@ -6,3 +6,3 @@ /**

/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.

@@ -183,3 +183,76 @@ */

CKEditor5.Editor = Editor;
/**
* @record
*/
function ContextWatchdog() { }
CKEditor5.ContextWatchdog = ContextWatchdog;
if (false) {
/** @type {?} */
ContextWatchdog.prototype.context;
/**
* @param {?} items
* @return {?}
*/
ContextWatchdog.prototype.add = function (items) { };
/**
* @param {?} items
* @return {?}
*/
ContextWatchdog.prototype.remove = function (items) { };
/**
* @param {?} itemId
* @return {?}
*/
ContextWatchdog.prototype.getItem = function (itemId) { };
/**
* @param {?} itemId
* @param {?} itemType
* @param {?} watchdog
* @return {?}
*/
ContextWatchdog.prototype.addItemWatchdog = function (itemId, itemType, watchdog) { };
}
/**
* @record
*/
function EditorWatchdog() { }
CKEditor5.EditorWatchdog = EditorWatchdog;
if (false) {
/** @type {?} */
EditorWatchdog.prototype.editor;
}
/**
* @record
* @template T
*/
function Watchdog() { }
CKEditor5.Watchdog = Watchdog;
if (false) {
/**
* @param {?} creator
* @return {?}
*/
Watchdog.prototype.setCreator = function (creator) { };
/**
* @param {?} destructor
* @return {?}
*/
Watchdog.prototype.setDestructor = function (destructor) { };
/**
* @param {?} event
* @param {?} callback
* @return {?}
*/
Watchdog.prototype.on = function (event, callback) { };
/**
* @return {?}
*/
Watchdog.prototype.destroy = function () { };
/**
* @param {...?} args
* @return {?}
*/
Watchdog.prototype.create = function (args) { };
}
})(CKEditor5 || (CKEditor5 = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY2tlZGl0b3IvY2tlZGl0b3I1LWFuZ3VsYXIvIiwic291cmNlcyI6WyJja2VkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVFBLE1BQU0sS0FBVyxTQUFTLENBZ0Z6QjtBQWhGRCxXQUFpQixTQUFTOzs7OztJQUt6QixnQ0FFQzs7Ozs7Ozs7UUFEQSxnRkFBc0Y7Ozs7OztJQU12RixxQkFFQzs7Ozs7Ozs7O0lBT0Qsd0JBUUM7Ozs7UUFQQSx5QkFBeUI7O1FBQ3pCLHlCQUFxQjs7UUFDckIsMkJBQXFCOztRQUNyQiwyQkFBYTs7OztRQUViLDBDQUFZOzs7O1FBQ1osMkNBQWE7Ozs7Ozs7O0lBUWQseUJBMEJDOzs7O1FBekJBLDhCQUF1Qjs7UUFDdkIsNEJBQXFCOztRQUNyQixnQ0FBeUI7O1FBQ3pCLDBCQUFtQjs7UUFDbkIsNkJBQXNCOztRQUN0QixnQ0FBeUI7O1FBQ3pCLDRCQUFxQjs7UUFDckIsMkJBQW9COztRQUNwQiw2QkFBc0I7O1FBQ3RCLDJCQUF1RDs7UUFFdkQsZ0NBQW9COzs7Ozs7UUFFcEIsc0RBQWtDOzs7O1FBQ2xDLCtDQUF5Qjs7Ozs7O1FBQ3pCLGtFQUFzRDs7Ozs7O1FBQ3RELDJEQUEyQzs7Ozs7Ozs7UUFDM0MscUZBQXFGOzs7Ozs7UUFDckYsOERBQW1EOzs7Ozs7O1FBQ25ELHNFQUFpRTs7Ozs7OztRQUNqRSx3RUFBbUU7Ozs7Ozs7UUFDbkUsaUZBQTJFOzs7OztRQUMzRSw2Q0FBMEI7Ozs7Ozs7O0lBVTNCLHNCQUdDOzs7Ozs7UUFGQSw0Q0FBa0I7Ozs7O1FBQ2xCLGdEQUE4Qjs7Ozs7Ozs7SUFRL0IscUJBQXNEOztBQUN2RCxDQUFDLEVBaEZnQixTQUFTLEtBQVQsU0FBUyxRQWdGekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAwMy0yMDE5LCBDS1NvdXJjZSAtIEZyZWRlcmljbyBLbmFiYmVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogRm9yIGxpY2Vuc2luZywgc2VlIExJQ0VOU0UubWQuXG4gKi9cblxuLyoqXG4gKiBCYXNpYyB0eXBpbmdzIGZvciB0aGUgQ0tFZGl0b3I1IGVsZW1lbnRzLlxuICovXG5leHBvcnQgbmFtZXNwYWNlIENLRWRpdG9yNSB7XG5cblx0LyoqXG5cdCAqIFRoZSBDS0VkaXRvcjUgZWRpdG9yIGNvbnN0cnVjdG9yLlxuXHQgKi9cblx0ZXhwb3J0IGludGVyZmFjZSBFZGl0b3JDb25zdHJ1Y3RvciB7XG5cdFx0Y3JlYXRlKCBzb3VyY2VFbGVtZW50T3JEYXRhOiBIVE1MRWxlbWVudCB8IHN0cmluZywgY29uZmlnPzogQ29uZmlnICk6IFByb21pc2U8RWRpdG9yPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQ0tFZGl0b3I1IGVkaXRvciBjb25maWcuXG5cdCAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIENvbmZpZyB7XG5cdFx0WyBrZXk6IHN0cmluZyBdOiBhbnk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGV2ZW50IG9iamVjdCBwYXNzZWQgdG8gQ0tFZGl0b3I1IGV2ZW50IGNhbGxiYWNrcy5cblx0ICpcblx0ICogU2VlIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I1L2xhdGVzdC9hcGkvbW9kdWxlX3V0aWxzX2V2ZW50aW5mby1FdmVudEluZm8uaHRtbFxuXHQgKi9cblx0ZXhwb3J0IGludGVyZmFjZSBFdmVudEluZm88RXZlbnROYW1lIGV4dGVuZHMgc3RyaW5nPiB7XG5cdFx0cmVhZG9ubHkgbmFtZTogRXZlbnROYW1lO1xuXHRcdHJlYWRvbmx5IHBhdGg6IGFueVtdO1xuXHRcdHJlYWRvbmx5IHNvdXJjZTogYW55O1xuXHRcdHJldHVybj86IGFueTtcblxuXHRcdG9mZigpOiB2b2lkO1xuXHRcdHN0b3AoKTogdm9pZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYmFzZSBFZGl0b3IgY2xhc3MuXG5cdCAqXG5cdCAqIFNlZSBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNS9sYXRlc3QvYXBpL21vZHVsZV9jb3JlX2VkaXRvcl9lZGl0b3ItRWRpdG9yLmh0bWxcblx0ICovXG5cdGV4cG9ydCBpbnRlcmZhY2UgQmFzZUVkaXRvciB7XG5cdFx0cmVhZG9ubHkgY29tbWFuZHM6IGFueTtcblx0XHRyZWFkb25seSBjb25maWc6IGFueTtcblx0XHRyZWFkb25seSBjb252ZXJzaW9uOiBhbnk7XG5cdFx0cmVhZG9ubHkgZGF0YTogYW55O1xuXHRcdHJlYWRvbmx5IGVkaXRpbmc6IGFueTtcblx0XHRyZWFkb25seSBrZXlzdHJva2VzOiBhbnk7XG5cdFx0cmVhZG9ubHkgbG9jYWxlOiBhbnk7XG5cdFx0cmVhZG9ubHkgbW9kZWw6IGFueTtcblx0XHRyZWFkb25seSBwbHVnaW5zOiBhbnk7XG5cdFx0cmVhZG9ubHkgc3RhdGU6ICdpbml0aWFsaXppbmcnIHwgJ3JlYWR5JyB8ICdkZXN0cm95ZWQnO1xuXG5cdFx0aXNSZWFkT25seTogYm9vbGVhbjtcblxuXHRcdGRlbGVnYXRlKCBldmVudHM6IHN0cmluZ1tdICk6IGFueTtcblx0XHRkZXN0cm95KCk6IFByb21pc2U8dm9pZD47XG5cdFx0ZXhlY3V0ZSggY29tbWFuZE5hbWU6IHN0cmluZywgLi4ucGFyYW1zOiBhbnlbXSApOiBhbnk7XG5cdFx0ZmlyZSggZXZlbnROYW1lOiBzdHJpbmcsIGFyZ3M/OiBhbnkgKTogYW55O1xuXHRcdGxpc3RlblRvKCBlbWl0dGVyOiBhbnksIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24sIG9wdGlvbnM/OiBhbnkgKTogdm9pZDtcblx0XHRvZmYoIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24gKTogdm9pZDtcblx0XHRvbiggZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbiwgb3B0aW9ucz86IGFueSApOiB2b2lkO1xuXHRcdG9uY2UoIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24sIG9wdGlvbnM/OiBhbnkgKTogdm9pZDtcblx0XHRzdG9wTGlzdGVuaW5nKCBlbWl0dGVyOiBhbnksIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24gKTogdm9pZDtcblx0XHR0KCAuLi5hcmdzOiBhbnlbXSApOiB2b2lkO1xuXG5cdFx0WyBwcm9wZXJ0eTogc3RyaW5nIF06IGFueTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQ0tFZGl0b3I1IERhdGFBcGkgaW50ZXJmYWNlLlxuXHQgKlxuXHQgKiBTZWUgaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjUvbGF0ZXN0L2FwaS9tb2R1bGVfY29yZV9lZGl0b3JfdXRpbHNfZGF0YWFwaW1peGluLURhdGFBcGkuaHRtbC5cblx0ICovXG5cdGV4cG9ydCBpbnRlcmZhY2UgRGF0YUFwaSB7XG5cdFx0Z2V0RGF0YSgpOiBzdHJpbmc7XG5cdFx0c2V0RGF0YSggZGF0YTogc3RyaW5nICk6IHZvaWQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBDS0VkaXRvcjUgZWRpdG9yIHRoYXQgaW1wbGVtZW50cyB0aGVcblx0ICogW0RhdGFBcGkgaW50ZXJmYWNlXShodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNS9sYXRlc3QvYXBpL21vZHVsZV9jb3JlX2VkaXRvcl91dGlsc19kYXRhYXBpbWl4aW4tRGF0YUFwaS5odG1sKS5cblx0ICogRS5nLiB0aGUgYENsYXNzaWNFZGl0b3JgLCBgSW5saW5lRWRpdG9yYCwgZXRjLlxuXHQgKi9cblx0ZXhwb3J0IGludGVyZmFjZSBFZGl0b3IgZXh0ZW5kcyBCYXNlRWRpdG9yLCBEYXRhQXBpIHt9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY2tlZGl0b3IvY2tlZGl0b3I1LWFuZ3VsYXIvIiwic291cmNlcyI6WyJja2VkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVFBLE1BQU0sS0FBVyxTQUFTLENBb0d6QjtBQXBHRCxXQUFpQixTQUFTOzs7OztJQUt6QixnQ0FFQzs7Ozs7Ozs7UUFEQSxnRkFBc0Y7Ozs7OztJQU12RixxQkFFQzs7Ozs7Ozs7O0lBT0Qsd0JBUUM7Ozs7UUFQQSx5QkFBeUI7O1FBQ3pCLHlCQUFxQjs7UUFDckIsMkJBQXFCOztRQUNyQiwyQkFBYTs7OztRQUViLDBDQUFZOzs7O1FBQ1osMkNBQWE7Ozs7Ozs7O0lBUWQseUJBMEJDOzs7O1FBekJBLDhCQUF1Qjs7UUFDdkIsNEJBQXFCOztRQUNyQixnQ0FBeUI7O1FBQ3pCLDBCQUFtQjs7UUFDbkIsNkJBQXNCOztRQUN0QixnQ0FBeUI7O1FBQ3pCLDRCQUFxQjs7UUFDckIsMkJBQW9COztRQUNwQiw2QkFBc0I7O1FBQ3RCLDJCQUF1RDs7UUFFdkQsZ0NBQW9COzs7Ozs7UUFFcEIsc0RBQWtDOzs7O1FBQ2xDLCtDQUF5Qjs7Ozs7O1FBQ3pCLGtFQUFzRDs7Ozs7O1FBQ3RELDJEQUEyQzs7Ozs7Ozs7UUFDM0MscUZBQXFGOzs7Ozs7UUFDckYsOERBQW1EOzs7Ozs7O1FBQ25ELHNFQUFpRTs7Ozs7OztRQUNqRSx3RUFBbUU7Ozs7Ozs7UUFDbkUsaUZBQTJFOzs7OztRQUMzRSw2Q0FBMEI7Ozs7Ozs7O0lBVTNCLHNCQUdDOzs7Ozs7UUFGQSw0Q0FBa0I7Ozs7O1FBQ2xCLGdEQUE4Qjs7Ozs7Ozs7SUFRL0IscUJBQXNEOzs7OztJQUV0RCw4QkFNQzs7OztRQUxBLGtDQUFhOzs7OztRQUNiLHFEQUFpQzs7Ozs7UUFDakMsd0RBQWtEOzs7OztRQUNsRCwwREFBa0M7Ozs7Ozs7UUFDbEMsc0ZBQTRGOzs7OztJQUc3Riw2QkFFQzs7OztRQURBLGdDQUFlOzs7Ozs7SUFHaEIsdUJBTUM7Ozs7Ozs7UUFMQSx1REFBOEQ7Ozs7O1FBQzlELDZEQUFnRTs7Ozs7O1FBQ2hFLHVEQUE2RDs7OztRQUM3RCw2Q0FBeUI7Ozs7O1FBQ3pCLGdEQUF3Qzs7QUFFMUMsQ0FBQyxFQXBHZ0IsU0FBUyxLQUFULFNBQVMsUUFvR3pCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMDMtMjAyMCwgQ0tTb3VyY2UgLSBGcmVkZXJpY28gS25hYmJlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEZvciBsaWNlbnNpbmcsIHNlZSBMSUNFTlNFLm1kLlxuICovXG5cbi8qKlxuICogQmFzaWMgdHlwaW5ncyBmb3IgdGhlIENLRWRpdG9yNSBlbGVtZW50cy5cbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBDS0VkaXRvcjUge1xuXG5cdC8qKlxuXHQgKiBUaGUgQ0tFZGl0b3I1IGVkaXRvciBjb25zdHJ1Y3Rvci5cblx0ICovXG5cdGV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yQ29uc3RydWN0b3Ige1xuXHRcdGNyZWF0ZSggc291cmNlRWxlbWVudE9yRGF0YTogSFRNTEVsZW1lbnQgfCBzdHJpbmcsIGNvbmZpZz86IENvbmZpZyApOiBQcm9taXNlPEVkaXRvcj47XG5cdH1cblxuXHQvKipcblx0ICogVGhlIENLRWRpdG9yNSBlZGl0b3IgY29uZmlnLlxuXHQgKi9cblx0ZXhwb3J0IGludGVyZmFjZSBDb25maWcge1xuXHRcdFsga2V5OiBzdHJpbmcgXTogYW55O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBldmVudCBvYmplY3QgcGFzc2VkIHRvIENLRWRpdG9yNSBldmVudCBjYWxsYmFja3MuXG5cdCAqXG5cdCAqIFNlZSBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNS9sYXRlc3QvYXBpL21vZHVsZV91dGlsc19ldmVudGluZm8tRXZlbnRJbmZvLmh0bWxcblx0ICovXG5cdGV4cG9ydCBpbnRlcmZhY2UgRXZlbnRJbmZvPEV2ZW50TmFtZSBleHRlbmRzIHN0cmluZz4ge1xuXHRcdHJlYWRvbmx5IG5hbWU6IEV2ZW50TmFtZTtcblx0XHRyZWFkb25seSBwYXRoOiBhbnlbXTtcblx0XHRyZWFkb25seSBzb3VyY2U6IGFueTtcblx0XHRyZXR1cm4/OiBhbnk7XG5cblx0XHRvZmYoKTogdm9pZDtcblx0XHRzdG9wKCk6IHZvaWQ7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGJhc2UgRWRpdG9yIGNsYXNzLlxuXHQgKlxuXHQgKiBTZWUgaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjUvbGF0ZXN0L2FwaS9tb2R1bGVfY29yZV9lZGl0b3JfZWRpdG9yLUVkaXRvci5odG1sXG5cdCAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIEJhc2VFZGl0b3Ige1xuXHRcdHJlYWRvbmx5IGNvbW1hbmRzOiBhbnk7XG5cdFx0cmVhZG9ubHkgY29uZmlnOiBhbnk7XG5cdFx0cmVhZG9ubHkgY29udmVyc2lvbjogYW55O1xuXHRcdHJlYWRvbmx5IGRhdGE6IGFueTtcblx0XHRyZWFkb25seSBlZGl0aW5nOiBhbnk7XG5cdFx0cmVhZG9ubHkga2V5c3Ryb2tlczogYW55O1xuXHRcdHJlYWRvbmx5IGxvY2FsZTogYW55O1xuXHRcdHJlYWRvbmx5IG1vZGVsOiBhbnk7XG5cdFx0cmVhZG9ubHkgcGx1Z2luczogYW55O1xuXHRcdHJlYWRvbmx5IHN0YXRlOiAnaW5pdGlhbGl6aW5nJyB8ICdyZWFkeScgfCAnZGVzdHJveWVkJztcblxuXHRcdGlzUmVhZE9ubHk6IGJvb2xlYW47XG5cblx0XHRkZWxlZ2F0ZSggZXZlbnRzOiBzdHJpbmdbXSApOiBhbnk7XG5cdFx0ZGVzdHJveSgpOiBQcm9taXNlPHZvaWQ+O1xuXHRcdGV4ZWN1dGUoIGNvbW1hbmROYW1lOiBzdHJpbmcsIC4uLnBhcmFtczogYW55W10gKTogYW55O1xuXHRcdGZpcmUoIGV2ZW50TmFtZTogc3RyaW5nLCBhcmdzPzogYW55ICk6IGFueTtcblx0XHRsaXN0ZW5UbyggZW1pdHRlcjogYW55LCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uLCBvcHRpb25zPzogYW55ICk6IHZvaWQ7XG5cdFx0b2ZmKCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uICk6IHZvaWQ7XG5cdFx0b24oIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24sIG9wdGlvbnM/OiBhbnkgKTogdm9pZDtcblx0XHRvbmNlKCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uLCBvcHRpb25zPzogYW55ICk6IHZvaWQ7XG5cdFx0c3RvcExpc3RlbmluZyggZW1pdHRlcjogYW55LCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uICk6IHZvaWQ7XG5cdFx0dCggLi4uYXJnczogYW55W10gKTogdm9pZDtcblxuXHRcdFsgcHJvcGVydHk6IHN0cmluZyBdOiBhbnk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIENLRWRpdG9yNSBEYXRhQXBpIGludGVyZmFjZS5cblx0ICpcblx0ICogU2VlIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I1L2xhdGVzdC9hcGkvbW9kdWxlX2NvcmVfZWRpdG9yX3V0aWxzX2RhdGFhcGltaXhpbi1EYXRhQXBpLmh0bWwuXG5cdCAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIERhdGFBcGkge1xuXHRcdGdldERhdGEoKTogc3RyaW5nO1xuXHRcdHNldERhdGEoIGRhdGE6IHN0cmluZyApOiB2b2lkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgQ0tFZGl0b3I1IGVkaXRvciB0aGF0IGltcGxlbWVudHMgdGhlXG5cdCAqIFtEYXRhQXBpIGludGVyZmFjZV0oaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjUvbGF0ZXN0L2FwaS9tb2R1bGVfY29yZV9lZGl0b3JfdXRpbHNfZGF0YWFwaW1peGluLURhdGFBcGkuaHRtbCkuXG5cdCAqIEUuZy4gdGhlIGBDbGFzc2ljRWRpdG9yYCwgYElubGluZUVkaXRvcmAsIGV0Yy5cblx0ICovXG5cdGV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yIGV4dGVuZHMgQmFzZUVkaXRvciwgRGF0YUFwaSB7fVxuXG5cdGV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dFdhdGNoZG9nIGV4dGVuZHMgV2F0Y2hkb2c8YW55Pntcblx0XHRjb250ZXh0OiBhbnk7XG5cdFx0YWRkKCBpdGVtczogYW55ICk6IFByb21pc2U8dm9pZD47XG5cdFx0cmVtb3ZlKCBpdGVtczogc3RyaW5nIHwgc3RyaW5nW10gKTogUHJvbWlzZTx2b2lkPjtcblx0XHRnZXRJdGVtKCBpdGVtSWQ6IHN0cmluZyApOiBFZGl0b3I7XG5cdFx0YWRkSXRlbVdhdGNoZG9nKCBpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgd2F0Y2hkb2c6IFdhdGNoZG9nPGFueT4gKTogUHJvbWlzZTx2b2lkPjtcblx0fVxuXG5cdGV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yV2F0Y2hkb2cgZXh0ZW5kcyBXYXRjaGRvZzxFZGl0b3I+IHtcblx0XHRlZGl0b3I6IEVkaXRvcjtcblx0fVxuXG5cdGV4cG9ydCBpbnRlcmZhY2UgV2F0Y2hkb2c8VD4ge1xuXHRcdHNldENyZWF0b3IoIGNyZWF0b3I6ICggLi4uYXJnczogYW55W10gKSA9PiBQcm9taXNlPFQ+ICk6IHZvaWQ7XG5cdFx0c2V0RGVzdHJ1Y3RvciggZGVzdHJ1Y3RvcjogKCBpdGVtOiBUICkgPT4gUHJvbWlzZTx2b2lkPiApOiB2b2lkO1xuXHRcdG9uKCBldmVudDogc3RyaW5nLCBjYWxsYmFjazogKCAuLi5hcmdzOiBhbnkgKSA9PiBhbnkgKTogdm9pZDtcblx0XHRkZXN0cm95KCk6IFByb21pc2U8dm9pZD47XG5cdFx0Y3JlYXRlKCAuLi5hcmdzOiBhbnlbXSApOiBQcm9taXNlPHZvaWQ+O1xuXHR9XG59XG4iXX0=

@@ -6,3 +6,3 @@ /**

/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.

@@ -27,2 +27,2 @@ */

export { CKEditorModule };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNrZWRpdG9yL2NrZWRpdG9yNS1hbmd1bGFyLyIsInNvdXJjZXMiOlsiY2tlZGl0b3IubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBS0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpEO0lBQUE7SUFLNkIsQ0FBQzs7Z0JBTDdCLFFBQVEsU0FBRTtvQkFDVixPQUFPLEVBQUUsQ0FBRSxXQUFXLEVBQUUsWUFBWSxDQUFFO29CQUN0QyxZQUFZLEVBQUUsQ0FBRSxpQkFBaUIsQ0FBRTtvQkFDbkMsT0FBTyxFQUFFLENBQUUsaUJBQWlCLENBQUU7aUJBQzlCOztJQUM0QixxQkFBQztDQUFBLEFBTDlCLElBSzhCO1NBQWpCLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAwMy0yMDE5LCBDS1NvdXJjZSAtIEZyZWRlcmljbyBLbmFiYmVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogRm9yIGxpY2Vuc2luZywgc2VlIExJQ0VOU0UubWQuXG4gKi9cblxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENLRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9ja2VkaXRvci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoIHtcblx0aW1wb3J0czogWyBGb3Jtc01vZHVsZSwgQ29tbW9uTW9kdWxlIF0sXG5cdGRlY2xhcmF0aW9uczogWyBDS0VkaXRvckNvbXBvbmVudCBdLFxuXHRleHBvcnRzOiBbIENLRWRpdG9yQ29tcG9uZW50IF1cbn0gKVxuZXhwb3J0IGNsYXNzIENLRWRpdG9yTW9kdWxlIHt9XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNrZWRpdG9yL2NrZWRpdG9yNS1hbmd1bGFyLyIsInNvdXJjZXMiOlsiY2tlZGl0b3IubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBS0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpEO0lBQUE7SUFLNkIsQ0FBQzs7Z0JBTDdCLFFBQVEsU0FBRTtvQkFDVixPQUFPLEVBQUUsQ0FBRSxXQUFXLEVBQUUsWUFBWSxDQUFFO29CQUN0QyxZQUFZLEVBQUUsQ0FBRSxpQkFBaUIsQ0FBRTtvQkFDbkMsT0FBTyxFQUFFLENBQUUsaUJBQWlCLENBQUU7aUJBQzlCOztJQUM0QixxQkFBQztDQUFBLEFBTDlCLElBSzhCO1NBQWpCLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAwMy0yMDIwLCBDS1NvdXJjZSAtIEZyZWRlcmljbyBLbmFiYmVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogRm9yIGxpY2Vuc2luZywgc2VlIExJQ0VOU0UubWQuXG4gKi9cblxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENLRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9ja2VkaXRvci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoIHtcblx0aW1wb3J0czogWyBGb3Jtc01vZHVsZSwgQ29tbW9uTW9kdWxlIF0sXG5cdGRlY2xhcmF0aW9uczogWyBDS0VkaXRvckNvbXBvbmVudCBdLFxuXHRleHBvcnRzOiBbIENLRWRpdG9yQ29tcG9uZW50IF1cbn0gKVxuZXhwb3J0IGNsYXNzIENLRWRpdG9yTW9kdWxlIHt9XG4iXX0=

@@ -6,3 +6,3 @@ /**

/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.

@@ -13,2 +13,2 @@ */

export { CKEditorModule } from './ckeditor.module';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY2tlZGl0b3IvY2tlZGl0b3I1LWFuZ3VsYXIvIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUtBLGVBQWMsWUFBWSxDQUFDO0FBQzNCLGtDQUFjLHNCQUFzQixDQUFDO0FBQ3JDLCtCQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxOSwgQ0tTb3VyY2UgLSBGcmVkZXJpY28gS25hYmJlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEZvciBsaWNlbnNpbmcsIHNlZSBMSUNFTlNFLm1kLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vY2tlZGl0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9ja2VkaXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9ja2VkaXRvci5tb2R1bGUnO1xuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY2tlZGl0b3IvY2tlZGl0b3I1LWFuZ3VsYXIvIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUtBLGVBQWMsWUFBWSxDQUFDO0FBQzNCLGtDQUFjLHNCQUFzQixDQUFDO0FBQ3JDLCtCQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMDMtMjAyMCwgQ0tTb3VyY2UgLSBGcmVkZXJpY28gS25hYmJlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEZvciBsaWNlbnNpbmcsIHNlZSBMSUNFTlNFLm1kLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vY2tlZGl0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9ja2VkaXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9ja2VkaXRvci5tb2R1bGUnO1xuIl19

@@ -0,1 +1,3 @@

import { __awaiter } from 'tslib';
import EditorWatchdog from '@ckeditor/ckeditor5-watchdog/src/editorwatchdog';
import { Component, Input, Output, NgZone, EventEmitter, forwardRef, ElementRef, NgModule } from '@angular/core';

@@ -10,3 +12,3 @@ import { CommonModule } from '@angular/common';

/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.

@@ -64,2 +66,18 @@ */

CKEditor5.Editor = Editor;
/**
* @record
*/
function ContextWatchdog() { }
CKEditor5.ContextWatchdog = ContextWatchdog;
/**
* @record
*/
function EditorWatchdog$$1() { }
CKEditor5.EditorWatchdog = EditorWatchdog$$1;
/**
* @record
* @template T
*/
function Watchdog() { }
CKEditor5.Watchdog = Watchdog;
})(CKEditor5 || (CKEditor5 = {}));

@@ -71,2 +89,71 @@

*/
/**
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
// A copy of @ckeditor/ckeditor5-utils/src/uid.js
// A hash table of hex numbers to avoid using toString() in uid() which is costly.
// [ '00', '01', '02', ..., 'fe', 'ff' ]
const ɵ0 = /**
* @param {?} val
* @param {?} index
* @return {?}
*/
(val, index) => ('0' + (index).toString(16)).slice(-2);
/** @type {?} */
const HEX_NUMBERS = new Array(256).fill(0)
.map((ɵ0));
/**
* Returns a unique id. The id starts with an "e" character and a randomly generated string of
* 32 alphanumeric characters.
*
* **Note**: The characters the unique id is built from correspond to the hex number notation
* (from "0" to "9", from "a" to "f"). In other words, each id corresponds to an "e" followed
* by 16 8-bit numbers next to each other.
*
* @return {?} An unique id string.
*/
function uid() {
// Let's create some positive random 32bit integers first.
//
// 1. Math.random() is a float between 0 and 1.
// 2. 0x100000000 is 2^32 = 4294967296.
// 3. >>> 0 enforces integer (in JS all numbers are floating point).
//
// For instance:
// Math.random() * 0x100000000 = 3366450031.853859
// but
// Math.random() * 0x100000000 >>> 0 = 3366450031.
/** @type {?} */
const r1 = Math.random() * 0x100000000 >>> 0;
/** @type {?} */
const r2 = Math.random() * 0x100000000 >>> 0;
/** @type {?} */
const r3 = Math.random() * 0x100000000 >>> 0;
/** @type {?} */
const r4 = Math.random() * 0x100000000 >>> 0;
// Make sure that id does not start with number.
return 'e' +
HEX_NUMBERS[r1 >> 0 & 0xFF] +
HEX_NUMBERS[r1 >> 8 & 0xFF] +
HEX_NUMBERS[r1 >> 16 & 0xFF] +
HEX_NUMBERS[r1 >> 24 & 0xFF] +
HEX_NUMBERS[r2 >> 0 & 0xFF] +
HEX_NUMBERS[r2 >> 8 & 0xFF] +
HEX_NUMBERS[r2 >> 16 & 0xFF] +
HEX_NUMBERS[r2 >> 24 & 0xFF] +
HEX_NUMBERS[r3 >> 0 & 0xFF] +
HEX_NUMBERS[r3 >> 8 & 0xFF] +
HEX_NUMBERS[r3 >> 16 & 0xFF] +
HEX_NUMBERS[r3 >> 24 & 0xFF] +
HEX_NUMBERS[r4 >> 0 & 0xFF] +
HEX_NUMBERS[r4 >> 8 & 0xFF] +
HEX_NUMBERS[r4 >> 16 & 0xFF] +
HEX_NUMBERS[r4 >> 24 & 0xFF];
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class CKEditorComponent {

@@ -120,5 +207,5 @@ /**

/**
* The instance of the editor created by this component.
* Fires when the editor component crashes.
*/
this.editorInstance = null;
this.error = new EventEmitter();
/**

@@ -133,2 +220,3 @@ * If the component is read–only before the editor instance is created, it remembers that state,

this.isEditorSettingData = false;
this.id = uid();
this.ngZone = ngZone;

@@ -156,2 +244,15 @@ this.elementRef = elementRef;

}
/**
* The instance of the editor created by this component.
* @return {?}
*/
get editorInstance() {
if (this.editorWatchdog) {
return this.editorWatchdog.editor;
}
if (this.watchdog) {
return this.watchdog.getItem(this.id);
}
return null;
}
// Implementing the AfterViewInit interface.

@@ -162,8 +263,3 @@ /**

ngAfterViewInit() {
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
() => {
this.createEditor();
}));
this.attachToWatchdog();
}

@@ -175,6 +271,11 @@ // Implementing the OnDestroy interface.

ngOnDestroy() {
if (this.editorInstance) {
this.editorInstance.destroy();
this.editorInstance = null;
}
return __awaiter(this, void 0, void 0, /** @this {!CKEditorComponent} */ function* () {
if (this.watchdog) {
yield this.watchdog.remove(this.id);
}
else if (this.editorWatchdog && this.editorWatchdog.editor) {
yield this.editorWatchdog.destroy();
this.editorWatchdog = undefined;
}
});
}

@@ -232,10 +333,8 @@ // Implementing the ControlValueAccessor interface (only when binding to ngModel).

setDisabledState(isDisabled) {
// If already initialized
// If already initialized.
if (this.editorInstance) {
this.editorInstance.isReadOnly = isDisabled;
}
// If not, wait for it to be ready; store the state.
else {
this.initialIsDisabled = isDisabled;
}
// Store the state anyway to use it once the editor is created.
this.initialIsDisabled = isDisabled;
}

@@ -249,23 +348,44 @@ /**

*/
createEditor() {
attachToWatchdog() {
/** @type {?} */
const element = document.createElement(this.tagName);
this.editorElement = element;
if (this.data && this.config.initialData) {
throw new Error('Editor data should be provided either using `config.initialData` or `data` properties.');
}
// Merge two possible ways of providing data into the `config.initialData` field.
const creator = (/**
* @param {?} element
* @param {?} config
* @return {?}
*/
(element, config) => __awaiter(this, void 0, void 0, function* () {
return this.ngZone.runOutsideAngular((/**
* @return {?}
*/
() => __awaiter(this, void 0, void 0, function* () {
this.elementRef.nativeElement.appendChild(element);
/** @type {?} */
const editor = yield (/** @type {?} */ (this.editor)).create(element, config);
if (this.initialIsDisabled) {
editor.isReadOnly = this.initialIsDisabled;
}
this.ngZone.run((/**
* @return {?}
*/
() => {
this.ready.emit(editor);
}));
this.setUpEditorEvents(editor);
return editor;
})));
}));
/** @type {?} */
const config = Object.assign({}, this.config, { initialData: this.config.initialData || this.data || '' });
this.elementRef.nativeElement.appendChild(element);
return (/** @type {?} */ (this.editor)).create(element, config)
.then((/**
const destructor = (/**
* @param {?} editor
* @return {?}
*/
editor => {
this.editorInstance = editor;
if (this.initialIsDisabled) {
editor.isReadOnly = this.initialIsDisabled;
}
(editor) => __awaiter(this, void 0, void 0, function* () {
yield editor.destroy();
this.elementRef.nativeElement.removeChild((/** @type {?} */ (this.editorElement)));
}));
/** @type {?} */
const emitError = (/**
* @return {?}
*/
() => {
this.ngZone.run((/**

@@ -275,15 +395,55 @@ * @return {?}

() => {
this.ready.emit(editor);
this.error.emit();
}));
this.setUpEditorEvents(editor);
}))
.catch((/**
* @param {?} err
* @return {?}
*/
(err) => {
console.error(err.stack);
}));
});
/** @type {?} */
const element = document.createElement(this.tagName);
/** @type {?} */
const config = this.getConfig();
this.editorElement = element;
// Based on the presence of the watchdog decide how to initialize the editor.
if (this.watchdog) {
// When the context watchdog is passed add the new item to it based on the passed configuration.
this.watchdog.add({
id: this.id,
type: 'editor',
creator,
destructor,
sourceElementOrData: element,
config
});
this.watchdog.on('itemError', (/**
* @param {?} _
* @param {?} __1
* @return {?}
*/
(_, { itemId }) => {
if (itemId === this.id) {
emitError();
}
}));
}
else {
// In the other case create the watchdog by hand to keep the editor running.
/** @type {?} */
const editorWatchdog = new EditorWatchdog(this.editor);
editorWatchdog.setCreator(creator);
editorWatchdog.setDestructor(destructor);
editorWatchdog.on('error', emitError);
this.editorWatchdog = editorWatchdog;
this.editorWatchdog.create(element, config);
}
}
/**
* @private
* @return {?}
*/
getConfig() {
if (this.data && this.config.initialData) {
throw new Error('Editor data should be provided either using `config.initialData` or `data` properties.');
}
// Merge two possible ways of providing data into the `config.initialData` field.
return Object.assign({}, this.config, { initialData: this.config.initialData || this.data || '' });
}
/**
* Integrates the editor with the component by attaching related event listeners.

@@ -373,2 +533,3 @@ * @private

tagName: [{ type: Input }],
watchdog: [{ type: Input }],
disabled: [{ type: Input }],

@@ -378,3 +539,4 @@ ready: [{ type: Output }],

blur: [{ type: Output }],
focus: [{ type: Output }]
focus: [{ type: Output }],
error: [{ type: Output }]
};

@@ -381,0 +543,0 @@

@@ -1,2 +0,3 @@

import { __assign } from 'tslib';
import { __awaiter, __generator, __assign } from 'tslib';
import EditorWatchdog from '@ckeditor/ckeditor5-watchdog/src/editorwatchdog';
import { Component, Input, Output, NgZone, EventEmitter, forwardRef, ElementRef, NgModule } from '@angular/core';

@@ -11,3 +12,3 @@ import { CommonModule } from '@angular/common';

/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.

@@ -65,2 +66,18 @@ */

CKEditor5.Editor = Editor;
/**
* @record
*/
function ContextWatchdog() { }
CKEditor5.ContextWatchdog = ContextWatchdog;
/**
* @record
*/
function EditorWatchdog$$1() { }
CKEditor5.EditorWatchdog = EditorWatchdog$$1;
/**
* @record
* @template T
*/
function Watchdog() { }
CKEditor5.Watchdog = Watchdog;
})(CKEditor5 || (CKEditor5 = {}));

@@ -72,2 +89,71 @@

*/
/**
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
// A copy of @ckeditor/ckeditor5-utils/src/uid.js
// A hash table of hex numbers to avoid using toString() in uid() which is costly.
// [ '00', '01', '02', ..., 'fe', 'ff' ]
var ɵ0 = /**
* @param {?} val
* @param {?} index
* @return {?}
*/
function (val, index) { return ('0' + (index).toString(16)).slice(-2); };
/** @type {?} */
var HEX_NUMBERS = new Array(256).fill(0)
.map((ɵ0));
/**
* Returns a unique id. The id starts with an "e" character and a randomly generated string of
* 32 alphanumeric characters.
*
* **Note**: The characters the unique id is built from correspond to the hex number notation
* (from "0" to "9", from "a" to "f"). In other words, each id corresponds to an "e" followed
* by 16 8-bit numbers next to each other.
*
* @return {?} An unique id string.
*/
function uid() {
// Let's create some positive random 32bit integers first.
//
// 1. Math.random() is a float between 0 and 1.
// 2. 0x100000000 is 2^32 = 4294967296.
// 3. >>> 0 enforces integer (in JS all numbers are floating point).
//
// For instance:
// Math.random() * 0x100000000 = 3366450031.853859
// but
// Math.random() * 0x100000000 >>> 0 = 3366450031.
/** @type {?} */
var r1 = Math.random() * 0x100000000 >>> 0;
/** @type {?} */
var r2 = Math.random() * 0x100000000 >>> 0;
/** @type {?} */
var r3 = Math.random() * 0x100000000 >>> 0;
/** @type {?} */
var r4 = Math.random() * 0x100000000 >>> 0;
// Make sure that id does not start with number.
return 'e' +
HEX_NUMBERS[r1 >> 0 & 0xFF] +
HEX_NUMBERS[r1 >> 8 & 0xFF] +
HEX_NUMBERS[r1 >> 16 & 0xFF] +
HEX_NUMBERS[r1 >> 24 & 0xFF] +
HEX_NUMBERS[r2 >> 0 & 0xFF] +
HEX_NUMBERS[r2 >> 8 & 0xFF] +
HEX_NUMBERS[r2 >> 16 & 0xFF] +
HEX_NUMBERS[r2 >> 24 & 0xFF] +
HEX_NUMBERS[r3 >> 0 & 0xFF] +
HEX_NUMBERS[r3 >> 8 & 0xFF] +
HEX_NUMBERS[r3 >> 16 & 0xFF] +
HEX_NUMBERS[r3 >> 24 & 0xFF] +
HEX_NUMBERS[r4 >> 0 & 0xFF] +
HEX_NUMBERS[r4 >> 8 & 0xFF] +
HEX_NUMBERS[r4 >> 16 & 0xFF] +
HEX_NUMBERS[r4 >> 24 & 0xFF];
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var CKEditorComponent = /** @class */ (function () {

@@ -117,5 +203,5 @@ function CKEditorComponent(elementRef, ngZone) {

/**
* The instance of the editor created by this component.
* Fires when the editor component crashes.
*/
this.editorInstance = null;
this.error = new EventEmitter();
/**

@@ -130,2 +216,3 @@ * If the component is read–only before the editor instance is created, it remembers that state,

this.isEditorSettingData = false;
this.id = uid();
this.ngZone = ngZone;

@@ -162,2 +249,22 @@ this.elementRef = elementRef;

});
Object.defineProperty(CKEditorComponent.prototype, "editorInstance", {
/**
* The instance of the editor created by this component.
*/
get: /**
* The instance of the editor created by this component.
* @return {?}
*/
function () {
if (this.editorWatchdog) {
return this.editorWatchdog.editor;
}
if (this.watchdog) {
return this.watchdog.getItem(this.id);
}
return null;
},
enumerable: true,
configurable: true
});
// Implementing the AfterViewInit interface.

@@ -174,9 +281,3 @@ // Implementing the AfterViewInit interface.

function () {
var _this = this;
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
function () {
_this.createEditor();
}));
this.attachToWatchdog();
};

@@ -194,6 +295,22 @@ // Implementing the OnDestroy interface.

function () {
if (this.editorInstance) {
this.editorInstance.destroy();
this.editorInstance = null;
}
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!this.watchdog) return [3 /*break*/, 2];
return [4 /*yield*/, this.watchdog.remove(this.id)];
case 1:
_a.sent();
return [3 /*break*/, 4];
case 2:
if (!(this.editorWatchdog && this.editorWatchdog.editor)) return [3 /*break*/, 4];
return [4 /*yield*/, this.editorWatchdog.destroy()];
case 3:
_a.sent();
this.editorWatchdog = undefined;
_a.label = 4;
case 4: return [2 /*return*/];
}
});
});
};

@@ -279,10 +396,8 @@ // Implementing the ControlValueAccessor interface (only when binding to ngModel).

function (isDisabled) {
// If already initialized
// If already initialized.
if (this.editorInstance) {
this.editorInstance.isReadOnly = isDisabled;
}
// If not, wait for it to be ready; store the state.
else {
this.initialIsDisabled = isDisabled;
}
// Store the state anyway to use it once the editor is created.
this.initialIsDisabled = isDisabled;
};

@@ -301,3 +416,3 @@ /**

*/
CKEditorComponent.prototype.createEditor = /**
CKEditorComponent.prototype.attachToWatchdog = /**
* Creates the editor instance, sets initial editor data, then integrates

@@ -312,21 +427,60 @@ * the editor with the Angular component. This method does not use the `editor.setData()`

/** @type {?} */
var element = document.createElement(this.tagName);
this.editorElement = element;
if (this.data && this.config.initialData) {
throw new Error('Editor data should be provided either using `config.initialData` or `data` properties.');
}
// Merge two possible ways of providing data into the `config.initialData` field.
var creator = (/**
* @param {?} element
* @param {?} config
* @return {?}
*/
function (element, config) { return __awaiter(_this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
return [2 /*return*/, this.ngZone.runOutsideAngular((/**
* @return {?}
*/
function () { return __awaiter(_this, void 0, void 0, function () {
var editor;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this.elementRef.nativeElement.appendChild(element);
return [4 /*yield*/, (/** @type {?} */ (this.editor)).create(element, config)];
case 1:
editor = _a.sent();
if (this.initialIsDisabled) {
editor.isReadOnly = this.initialIsDisabled;
}
this.ngZone.run((/**
* @return {?}
*/
function () {
_this.ready.emit(editor);
}));
this.setUpEditorEvents(editor);
return [2 /*return*/, editor];
}
});
}); }))];
});
}); });
/** @type {?} */
var config = __assign({}, this.config, { initialData: this.config.initialData || this.data || '' });
this.elementRef.nativeElement.appendChild(element);
return (/** @type {?} */ (this.editor)).create(element, config)
.then((/**
var destructor = (/**
* @param {?} editor
* @return {?}
*/
function (editor) {
_this.editorInstance = editor;
if (_this.initialIsDisabled) {
editor.isReadOnly = _this.initialIsDisabled;
}
function (editor) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, editor.destroy()];
case 1:
_a.sent();
this.elementRef.nativeElement.removeChild((/** @type {?} */ (this.editorElement)));
return [2 /*return*/];
}
});
}); });
/** @type {?} */
var emitError = (/**
* @return {?}
*/
function () {
_this.ngZone.run((/**

@@ -336,15 +490,60 @@ * @return {?}

function () {
_this.ready.emit(editor);
_this.error.emit();
}));
_this.setUpEditorEvents(editor);
}))
.catch((/**
* @param {?} err
* @return {?}
*/
function (err) {
console.error(err.stack);
}));
});
/** @type {?} */
var element = document.createElement(this.tagName);
/** @type {?} */
var config = this.getConfig();
this.editorElement = element;
// Based on the presence of the watchdog decide how to initialize the editor.
if (this.watchdog) {
// When the context watchdog is passed add the new item to it based on the passed configuration.
this.watchdog.add({
id: this.id,
type: 'editor',
creator: creator,
destructor: destructor,
sourceElementOrData: element,
config: config
});
this.watchdog.on('itemError', (/**
* @param {?} _
* @param {?} __1
* @return {?}
*/
function (_, _a) {
var itemId = _a.itemId;
if (itemId === _this.id) {
emitError();
}
}));
}
else {
// In the other case create the watchdog by hand to keep the editor running.
/** @type {?} */
var editorWatchdog = new EditorWatchdog(this.editor);
editorWatchdog.setCreator(creator);
editorWatchdog.setDestructor(destructor);
editorWatchdog.on('error', emitError);
this.editorWatchdog = editorWatchdog;
this.editorWatchdog.create(element, config);
}
};
/**
* @private
* @return {?}
*/
CKEditorComponent.prototype.getConfig = /**
* @private
* @return {?}
*/
function () {
if (this.data && this.config.initialData) {
throw new Error('Editor data should be provided either using `config.initialData` or `data` properties.');
}
// Merge two possible ways of providing data into the `config.initialData` field.
return __assign({}, this.config, { initialData: this.config.initialData || this.data || '' });
};
/**
* Integrates the editor with the component by attaching related event listeners.

@@ -443,2 +642,3 @@ */

tagName: [{ type: Input }],
watchdog: [{ type: Input }],
disabled: [{ type: Input }],

@@ -448,3 +648,4 @@ ready: [{ type: Output }],

blur: [{ type: Output }],
focus: [{ type: Output }]
focus: [{ type: Output }],
error: [{ type: Output }]
};

@@ -451,0 +652,0 @@ return CKEditorComponent;

/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.

@@ -4,0 +4,0 @@ */

@@ -5,3 +5,3 @@ Software License Agreement

**CKEditor 5 component for Angular** – https://github.com/ckeditor/ckeditor5-angular <br>
Copyright (c) 2003-2019, [CKSource](http://cksource.com) Frederico Knabben. All rights reserved.
Copyright (c) 2003-2020, [CKSource](http://cksource.com) Frederico Knabben. All rights reserved.

@@ -8,0 +8,0 @@ Licensed under the terms of [GNU General Public License Version 2 or later](http://www.gnu.org/licenses/gpl.html).

{
"name": "@ckeditor/ckeditor5-angular",
"version": "1.1.2",
"version": "1.2.0",
"description": "Official Angular component for CKEditor 5 – the best browser-based rich text editor.",

@@ -5,0 +5,0 @@ "keywords": [

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc