UNPKG

fs-tpp-api

Version:

FirstSpirit Third-Party-Preview API

1 lines 330 kB
{"version":3,"sources":["webpack://TPP_API/webpack/universalModuleDefinition","webpack://TPP_API/webpack/bootstrap","webpack://TPP_API/./node_modules/core-js/library/modules/_core.js","webpack://TPP_API/./node_modules/core-js/library/modules/_global.js","webpack://TPP_API/./node_modules/core-js/library/modules/_export.js","webpack://TPP_API/./node_modules/core-js/library/modules/_wks.js","webpack://TPP_API/./node_modules/core-js/library/modules/_an-object.js","webpack://TPP_API/./node_modules/core-js/library/modules/_hide.js","webpack://TPP_API/./node_modules/core-js/library/modules/_ctx.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-dp.js","webpack://TPP_API/./node_modules/core-js/library/modules/_is-object.js","webpack://TPP_API/./node_modules/core-js/library/modules/_descriptors.js","webpack://TPP_API/./node_modules/core-js/library/modules/_fails.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iterators.js","webpack://TPP_API/./node_modules/core-js/library/modules/_a-function.js","webpack://TPP_API/./node_modules/core-js/library/modules/_has.js","webpack://TPP_API/./node_modules/core-js/library/modules/_defined.js","webpack://TPP_API/./node_modules/core-js/library/modules/_cof.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-object.js","webpack://TPP_API/./node_modules/core-js/library/modules/_dom-create.js","webpack://TPP_API/./node_modules/core-js/library/modules/_property-desc.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-integer.js","webpack://TPP_API/./node_modules/core-js/library/modules/_library.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-keys.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-iobject.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-length.js","webpack://TPP_API/./node_modules/core-js/library/modules/_shared-key.js","webpack://TPP_API/./node_modules/core-js/library/modules/_set-to-string-tag.js","webpack://TPP_API/./node_modules/core-js/library/modules/_new-promise-capability.js","webpack://TPP_API/./node_modules/core-js/library/modules/_string-ws.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.string.iterator.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iter-define.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-create.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iobject.js","webpack://TPP_API/./node_modules/core-js/library/modules/_shared.js","webpack://TPP_API/./node_modules/core-js/library/modules/_uid.js","webpack://TPP_API/./node_modules/core-js/library/modules/_enum-bug-keys.js","webpack://TPP_API/./node_modules/core-js/library/modules/_html.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iter-call.js","webpack://TPP_API/./node_modules/core-js/library/modules/_is-array-iter.js","webpack://TPP_API/./node_modules/core-js/library/modules/core.get-iterator-method.js","webpack://TPP_API/./node_modules/core-js/library/modules/_classof.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iter-detect.js","webpack://TPP_API/./node_modules/core-js/library/modules/_species-constructor.js","webpack://TPP_API/./node_modules/core-js/library/modules/_task.js","webpack://TPP_API/./node_modules/core-js/library/modules/_perform.js","webpack://TPP_API/./node_modules/core-js/library/modules/_promise-resolve.js","webpack://TPP_API/./lib/fs-tpp-api-module-wrapper.js","webpack://TPP_API/./lib/fs-tpp-api.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/number/is-nan.js","webpack://TPP_API/./node_modules/core-js/library/fn/number/is-nan.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.number.is-nan.js","webpack://TPP_API/./node_modules/core-js/library/modules/_ie8-dom-define.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-primitive.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/number/parse-int.js","webpack://TPP_API/./node_modules/core-js/library/fn/number/parse-int.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.number.parse-int.js","webpack://TPP_API/./node_modules/core-js/library/modules/_parse-int.js","webpack://TPP_API/./node_modules/core-js/library/modules/_string-trim.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/array/from.js","webpack://TPP_API/./node_modules/core-js/library/fn/array/from.js","webpack://TPP_API/./node_modules/core-js/library/modules/_string-at.js","webpack://TPP_API/./node_modules/core-js/library/modules/_redefine.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iter-create.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-dps.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-keys-internal.js","webpack://TPP_API/./node_modules/core-js/library/modules/_array-includes.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-absolute-index.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-gpo.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.array.from.js","webpack://TPP_API/./node_modules/core-js/library/modules/_create-property.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/object/keys.js","webpack://TPP_API/./node_modules/core-js/library/fn/object/keys.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.object.keys.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-sap.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/json/stringify.js","webpack://TPP_API/./node_modules/core-js/library/fn/json/stringify.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/promise.js","webpack://TPP_API/./node_modules/core-js/library/fn/promise.js","webpack://TPP_API/./node_modules/core-js/library/modules/web.dom.iterable.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.array.iterator.js","webpack://TPP_API/./node_modules/core-js/library/modules/_add-to-unscopables.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iter-step.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.promise.js","webpack://TPP_API/./node_modules/core-js/library/modules/_an-instance.js","webpack://TPP_API/./node_modules/core-js/library/modules/_for-of.js","webpack://TPP_API/./node_modules/core-js/library/modules/_invoke.js","webpack://TPP_API/./node_modules/core-js/library/modules/_microtask.js","webpack://TPP_API/./node_modules/core-js/library/modules/_user-agent.js","webpack://TPP_API/./node_modules/core-js/library/modules/_redefine-all.js","webpack://TPP_API/./node_modules/core-js/library/modules/_set-species.js","webpack://TPP_API/./node_modules/core-js/library/modules/es7.promise.finally.js","webpack://TPP_API/./node_modules/core-js/library/modules/es7.promise.try.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/object/assign.js","webpack://TPP_API/./node_modules/core-js/library/fn/object/assign.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.object.assign.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-assign.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-gops.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-pie.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/object/create.js","webpack://TPP_API/./node_modules/core-js/library/fn/object/create.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.object.create.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","core","version","__e","global","Math","self","Function","__g","ctx","hide","has","$export","type","source","own","out","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","P","IS_BIND","B","IS_WRAP","W","expProto","target","undefined","C","a","b","this","arguments","length","apply","virtual","R","U","store","uid","USE_SYMBOL","isObject","it","TypeError","dP","createDesc","f","aFunction","fn","that","anObject","IE8_DOM_DEFINE","toPrimitive","O","Attributes","e","exec","toString","slice","defined","document","is","createElement","bitmap","configurable","writable","ceil","floor","isNaN","$keys","enumBugKeys","keys","IObject","toInteger","min","shared","def","TAG","tag","stat","PromiseCapability","resolve","reject","promise","$$resolve","$$reject","$at","String","iterated","_t","_i","point","index","done","LIBRARY","redefine","Iterators","$iterCreate","setToStringTag","getPrototypeOf","ITERATOR","BUGGY","returnThis","Base","NAME","Constructor","next","DEFAULT","IS_SET","FORCED","methods","IteratorPrototype","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","dPs","IE_PROTO","Empty","createDict","iframeDocument","iframe","style","display","appendChild","src","contentWindow","open","write","lt","close","Properties","result","cof","propertyIsEnumerable","split","push","copyright","id","px","random","concat","documentElement","iterator","ret","ArrayProto","Array","classof","getIteratorMethod","ARG","T","tryGet","callee","SAFE_CLOSING","riter","from","skipClosing","safe","arr","iter","SPECIES","D","constructor","defer","channel","port","invoke","html","cel","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","data","args","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","removeChild","setTimeout","set","clear","v","newPromiseCapability","x","promiseCapability","require","ui","hasClass","addClass","removeClass","actionSpecToBuilder","_cache","getInfo","_enabledFallback","_isEnabled","_log","FRONTEND_VERSION","GIT_HASH","messageReceiverOverride","DEFAULT_CONFIG","origin","autoScanDelay","alwaysDebug","autoReload","deleteSectionEnabled","deletePageWorkflow","workflowMode","config","util","$root","querySelectorAll","filter","byId","previewId","$el","dataset","byNonEmpty","matchAffectedInfo","affected","statusMap","forEach","status","fsIdInfo","previewIdCache","$target","isFunction","val","isString","messageService","ms","MESSAGE_TYPE","CALLBACK","EVENT","storage","serialize","callback","tryParseResult","match","JSON","parse","ignore","handleCallback","tppMessage","response","_response","callbackId","_callbackId","permanent","deserialize","EVENT_HANDLER","setInternalEventHandler","eventHandler","receiveMessage","tpp","log","_messageType","_eventId","payload","_payload","handleOuterEvent","send","message","top","sendMessageInternal","updateReceiverOverride","registerOnMessage","connectApi","console","isEnabled","localStorage","getItem","setEnabled","enabled","setItem","emit","eventName","detail","CustomEvent","bubbles","body","dispatchEvent","fsIdObject","previewIdObjectString","atob","previewIdObject","parsePreviewId","getValue","path","pathSpec","Types","createActionBuilder","builderWith","template","_template","_create2","default","_assign2","createBuilder","builder","_name","label","_label","context","_context","contextUpdate","element","_element","url","_icon","_previewId","execute","_execute","getOptions","_getOptions","options","build","action","_status","conf","_typeMarker","getStatus","setStatus","getName","getLabel","getIcon","getPreviewId","getElement","getContext","supportsOptions","actionHelper","actionSpec","actionBuilder","createActionFromBuilder","pathString","elements","isFolder","raw","normalized","join","parent","className","classList","contains","RegExp","test","add","remove","replace","renderFrame","tppFrameDecorator","$borders","$buttonContainer","$activeElement","drawBorders","rect","getBoundingClientRect","setAttribute","map","prop","max","enter","leave","removeAttribute","getButtonContainer","disposeBorders","tppBorders","parentElement","renderButtons","$container","$buttons","_buttons","_dropdownButtons","buttonBuilder","_updateButton","button","$element","appendActionIcon","iconUrl","$image","updateButtons","$flyout","innerHTML","$grouptitle","$list","option","$option","_updateDropdownButton","clearButtons","addButton","buttonSpec","$button","actionName","left","width","_addDropdownButton","_addSimpleButton","ActionStore","Common","api","_previewRequestHandlers","_navigationChangeHandlers","_workflowProcessedHandlers","fireDOMEvents","previewElements","error","Event","ELEMENT_REQUESTED","handler","NAVIGATION_CHANGED","workflowInfo","isDeleted","deleted","ELEMENT_DELETED","workflowId","transitionId","WORKFLOW_PROCESSED","Operation","getAffectedWorkflowElements","then","affectedElements","affectedInfo","STATUS_CHANGED","identifier","params","_promise2","setPreviewElement","addPreviewRequestHandler","addNavigationChangeHandler","addWorkflowProcessedHandler","ping","_project","languages","previewUrl","location","href","Action","EDIT","EDIT_META_DATA","STATUS","DELETE","DELETE_WORKFLOW","RENDER","CREATE_PAGE","CREATE_SIBLING_SECTION","CREATE_CHILD_SECTION","CREATE_DATASET","WORKFLOW_START","WORKFLOW_PROCESS","CROP_IMAGE","TOGGLE_BOOKMARK","PROJECT_INFO","TRANSLATION","createDetail","detailName","executeOperation","language","master","unshift","lang","showEditDialog","CONTENT_CHANGED","showMetaDataDialog","getElementStatus","renderElement","renderStartNode","deleteSection","deletePage","deleteWorkflowUID","startWorkflow","workflow","processWorkflow","transition","createPage","selectedTemplate","_stringify2","ELEMENT_CREATED","createSectionParams","sectionName","position","positionIndex","createChildSection","CHILD_SECTION_CREATED","createSiblingSection","SIBLING_SECTION_CREATED","createDataset","cropImage","resolution","IMAGE_CHANGED","toggleBookmark","getLanguages","getPreviewUrl","showTranslationDialog","Decorate","decorate","initialized","CUSTOM","icon","Icon","CREATE_SECTION","DEBUG_STATUS","DEBUG","EDIT_ELEMENT","DELETE_SECTION","elementType","DELETE_PAGE","workflows","deleteWorkflow","current","getDeleteWorkflowUID","START_WORKFLOW","WORKFLOW","allowed","_workflows","storeType","displayName","PROCESS_WORKFLOW","transitions","resolutions","ADD_BOOKMARK","indexOf","DELETE_BOOKMARK","TRANSLATE","ln","j","INITIAL_DEFAULT_DECORATION_ACTIONS","defaultDecorationActions","setDefaultButtons","buttons","scan","head","initPreviewId","contextFromAttributes","_keys2","startsWith","reduce","substr","toLowerCase","initContext","_customActions","frameDecorator","observer","MutationObserver","mutations","mutation","nodes","_from2","removedNodes","directMatch","parentMatch","some","observe","subtree","childList","_updateDecoration","customActions","updateContext","updateDecoration","decorator","updatePreviewId","Debug","debug","currentConfig","defaultConfig","enableDebugLog","rawProp","apiInitialized","gitHash","checkVersions","timeout","backendVersion","frontendVersion","TPP_API","INIT","WORKFLOW_STARTED","FIRST","LAST","BEFORE","AFTER","INDEX","PAGE_DRIVE","PAGE_REF_DRIVEN","GROUPACTION","_internal","CommonConstructor","OperationConstructor","DecorateConstructor","DebugConstructor","setMessageReceiver","receiver","enable","initCalled","init","tppConfig","Button","parseInt","reload","common","inIFrame","pingResult","checkForReceiver","receiverFound","connectHandler","$script","getTppCamelCase","str","toUpperCase","setBoolean","strValue","setString","_parseInt2","_isNan2","setNumber","querySelector","Number","number","valueOf","$parseInt","$trim","trim","ws","hex","radix","string","fails","spaces","space","ltrim","rtrim","exporter","KEY","ALIAS","exp","FORCE","TYPE","TO_STRING","pos","charCodeAt","charAt","descriptor","getKeys","defineProperties","toIObject","arrayIndexOf","names","toLength","toAbsoluteIndex","IS_INCLUDES","$this","el","fromIndex","toObject","ObjectProto","isArrayIter","createProperty","getIterFn","arrayLike","step","aLen","mapfn","mapping","iterFn","$defineProperty","$JSON","stringify","Promise","TO_STRING_TAG","DOMIterables","Collection","addToUnscopables","_k","Arguments","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","anInstance","forOf","speciesConstructor","task","microtask","newPromiseCapabilityModule","perform","userAgent","promiseResolve","versions","v8","$Promise","isNode","empty","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","notify","isReject","_n","chain","_c","_v","ok","_s","reaction","exited","fail","domain","_h","onHandleUnhandled","exit","onUnhandled","unhandled","isUnhandled","onunhandledrejection","reason","_a","onrejectionhandled","$reject","_d","_w","$resolve","wrapper","executor","err","onFulfilled","onRejected","catch","capability","all","iterable","remaining","$index","alreadyCalled","race","forbiddenField","BREAK","RETURN","un","macrotask","Observer","WebKitMutationObserver","last","flush","navigator","standalone","toggle","node","createTextNode","characterData","DESCRIPTORS","finally","onFinally","try","callbackfn","assign","gOPS","pIE","$assign","A","K","k","getSymbols","isEnum","getOwnPropertySymbols","$Object"],"mappings":"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","file":"fs-tpp-api.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TPP_API\"] = factory();\n\telse\n\t\troot[\"TPP_API\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 45);\n","var core = module.exports = { version: '2.6.5' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var IS_WRAP = type & $export.W;\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE];\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n  var key, own, out;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if (own && has(exports, key)) continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function (C) {\n      var F = function (a, b, c) {\n        if (this instanceof C) {\n          switch (arguments.length) {\n            case 0: return new C();\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if (IS_PROTO) {\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n","module.exports = {};\n","module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","module.exports = true;\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n  '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: require('./_library') ? 'pure' : 'global',\n  copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n  var id = +this;\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function (event) {\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n  setTask = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (require('./_cof')(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if (MessageChannel) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n    defer = function (id) {\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in cel('script')) {\n    defer = function (id) {\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set: setTask,\n  clear: clearTask\n};\n","module.exports = function (exec) {\n  try {\n    return { e: false, v: exec() };\n  } catch (e) {\n    return { e: true, v: e };\n  }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n","// noinspection JSAnnotator\nexport default require(\"./fs-tpp-api.js\");\n// wrapper so the api could be transpiled with babel, but kept in the old form for compatibility","(function (root, factory) {\n  /*global module, define, define*/\n  if (typeof exports === 'object') {\n    // COMMON-JS\n    module.exports = factory();\n  } else if (typeof define === 'function' && define['amd']) {\n    // Asynchronous Module Definition AMD\n    define([], factory);\n  } else {\n    //GLOBAL (e.g. browser)\n    root['TPP_API'] = factory();\n  }\n}(this, function () {\n  'use strict';\n  /* globals Promise */\n\n\n  var FRONTEND_VERSION = \"1.2.17\";\n  var GIT_HASH = \"58e04854ee7e5216adab8fdb159570d4fa822e68\";\n\n  var messageReceiverOverride = null; // for debugging and tests\n\n  var DEFAULT_CONFIG = {\n    origin: \"*\",          // every origin allowed\n    autoScanDelay: null,  // disabled,\n    alwaysDebug: false,   // debug will be enabled by default, \"false\" means debug has to be toggled manually\n    autoReload: false,     // disabled\n    deleteSectionEnabled: false,\n    deletePageWorkflow: null,\n    workflowMode: 'PAGE_DRIVEN'\n  };\n\n  var config = {};\n\n  var util = {};\n\n  /**\n   * @private\n   * @param {HTMLElement} [$root] - The root to search from, document if not set.\n   * @return {[]}\n   */\n  util.previewElements = function ($root) {\n    return [].slice.call(($root || document).querySelectorAll('[data-preview-id]'));\n  };\n\n  util.filter = {};\n\n  /*\n   * Filter predicate\n   */\n  util.filter.byId = function (previewId) {\n    return function ($el) {\n      return $el.dataset.previewId === previewId;\n    };\n  };\n\n  util.filter.byNonEmpty = function (result) {\n    return (!!result);\n  };\n\n\n  /**\n   * This generates a mapper that is initialized by a list of status elements.\n   * The generated mapper matches a given element with a previewId against the list\n   * of status elements.\n   *  If there is no match it maps to null.\n   *  If there is a match it maps to an info object like this:\n   *  {\n   *    target,    //The HTMLElement that was given.\n   *    previewId, //The involved previewId as string\n   *    status     //The status object of the store element\n   *  }\n   * @private\n   * @param affected\n   *  A WorkflowResult holding a \"statusList\"\n   * @return {Function}\n   *  A mapper from {HTMLElement}->{target,previewId,status}\n   */\n  util.filter.matchAffectedInfo = function (affected) {\n\n    var statusMap = {};\n    if (affected && affected['statusList']) {\n      affected['statusList'].forEach(function (status) {\n        statusMap[status['id']] = status;\n      });\n    }\n\n    return function ($el) {\n      var previewId = $el.dataset.previewId;\n      var fsIdInfo = util.previewIdCache(previewId);\n      if (fsIdInfo) {\n        var id = fsIdInfo['id'].toString();\n        var status = statusMap[id];\n        if (status && status['storeType'] === fsIdInfo['store']) {\n          return {\n            previewId: previewId,\n            status: status,\n            $target: $el\n          };\n        }\n      }\n      return null;\n    }\n  };\n\n\n  /**\n   * Poor-developers isFunction. Not full lodash version.\n   */\n  util.isFunction = function (val) {\n    return typeof (val) === 'function';\n  };\n\n  /**\n   * Object means arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`\n   * Compare with lodash.\n   * @param val\n   * @return {boolean} true, if val is an 'Object'\n   */\n  util.isObject = function (val) {\n    var type = typeof val\n    return val != null && (type == 'object' || type == 'function')\n  };\n\n  /**\n   * Poor-developers isString. Not full lodash version.\n   */\n  util.isString = function (val) {\n    return typeof (val) === 'string';\n  };\n\n\n  /**\n   * Message Service doing all the communication with the\n   * fs-tpp-receiver.js located in the ContentCreator parent window.\n   *\n   * Utilizes Window.postMessage.\n   * The Service stores the callbacks, calls them when the matching response-message is received\n   * and then remove the callback from storage.\n   * @name TppMessageService\n   * @private\n   * @see {Window}\n   * @type {{init, send, serialize, setInternalEventHandler, updateReceiver}}\n   */\n  // Serialize a callback to an id for postMessage usage\n  util.messageService = (function () {\n\n\n    var ms = {};\n\n    /**\n     * Message type of incoming messages from the fs-tpp-receiver in the outer frame.\n     * @name TppMessageService.MessageType\n     * @private\n     */\n    var MESSAGE_TYPE = {\n      /**\n       * @name TppMessageService.MessageType.CALLBACK\n       */\n      CALLBACK: \"CALLBACK\",\n      /**\n       * @name TppMessageService.MessageType.EVENT\n       */\n      EVENT: \"EVENT\"\n    };\n\n    /// ====== Callback storage ======\n    var storage = [null];\n\n    /**\n     * Stores a callback under a given id.\n     * @param {function} callback - The function to be stored.\n     * @return {number} - The callback id.\n     *        Might be null if no function is given.\n     */\n    ms.serialize = function (callback) {\n      if (typeof (callback) === 'function') {\n        return storage.push(callback) - 1;\n      }\n      return null;\n    };\n\n    /**\n     * Invokes a callback for the given callbackId with data as first parameter\n     * @param {number} callbackId - A callback id\n     * @param {string|Object}data\n     * @private\n     */\n    var deserialize = function (callbackId, data, permanent) {\n      if (callbackId && storage[callbackId]) {\n        storage[callbackId].call(null, data);\n        if (!permanent) {\n          delete storage[callbackId];\n        }\n      }\n    };\n\n    var tryParseResult = function (result) {\n      if (typeof (result) === 'string' && result.match(/^\\s*[\\[{\"]/) !== null) {\n        try {\n          return JSON.parse(result);\n        } catch (ignore) {\n          // not a json\n        }\n      }\n      return result;\n    };\n\n    var handleCallback = function (tppMessage) {\n      /** @type {string|Object} */\n      var response = tppMessage._response;\n      var callbackId = tppMessage._callbackId;\n      deserialize(callbackId, tryParseResult(response));\n    };\n\n\n    // ======= Event Handler ====== //\n    /**\n     * List of possible event handlers. The handlers translates the internal _messageId\n     * These are internal markers of events.\n     */\n    var EVENT_HANDLER = {};\n    var handleOuterEvent = function (tppMessage) {\n      var eventHandler = EVENT_HANDLER[tppMessage._eventId];\n      if (typeof eventHandler === 'function') {\n        var payload = tppMessage._payload;\n        eventHandler(tryParseResult(payload));\n      }\n    };\n\n    ms.setInternalEventHandler = function (name, eventHandler) {\n      EVENT_HANDLER[name] = eventHandler;\n    };\n\n    /**\n     * Handles incomming messages from the fs-tpp-receiver in the outer frame.\n     * It dispatches the diferent types of messages.\n     * @param e\n     */\n    var receiveMessage = function (e) {\n      if (typeof (e.data) === 'object' && typeof (e.data.tpp) === 'object') {\n        util.log(\"Message Received \", e.data);\n        if (e.data.tpp._messageType === MESSAGE_TYPE.CALLBACK) {\n          handleCallback(e.data.tpp);\n        } else if (e.data.tpp._messageType === MESSAGE_TYPE.EVENT) {\n          handleOuterEvent(e.data.tpp);\n        }\n      }\n    };\n\n    /**\n     * Internal send message to the fs-tpp-receiver.\n     * The messageReceiverOverride gives the opportunity to mock the outer frame during testing or write\n     * your own connection glue code.\n     * @param message\n     * @param origin\n     */\n    var sendMessageInternal = function (message, origin) {\n      if (messageReceiverOverride && typeof messageReceiverOverride.postMessage === 'function') {\n        // Testing and mocking override\n        messageReceiverOverride.postMessage(message, origin);\n      } else if (typeof window !== 'undefined' && window['top'] !== window) {\n        // Default case\n        window.top.postMessage(message, origin);\n      }\n    };\n\n    /**\n     * Send a message to the fs-tpp-receiver running in the outer frame.\n     * Expect to get a message back of {@link TppMessageService.MessageType.CALLBACK}\n     * @private\n     * @param {Object} message\n     * @param {Function} [callback]\n     * @param {string} origin\n     */\n    ms.send = function (message, origin, callback) {\n      if (typeof callback === 'function') {\n        message.tpp = message.tpp || {};\n        message.tpp._callbackId = ms.serialize(callback);\n      }\n      sendMessageInternal(message, origin);\n      util.log(\"Message send \", message, origin);\n    };\n\n    /**\n     * (Re-)initialize message receiving for unit test mode\n     */\n    ms.updateReceiverOverride = function () {\n      if (messageReceiverOverride && typeof messageReceiverOverride.registerOnMessage === 'function') {\n        // testing and mocking\n        messageReceiverOverride.registerOnMessage(receiveMessage);\n      } // no else (handling here is not exclusive)\n    };\n\n    /**\n     * Send message to receiver so the receiver can send back {@link TppMessageService.MessageType.EVENT} messages.\n     */\n    ms.connectApi = function (origin, callback) {\n      var message = {\n        tpp: {connectApi: true}\n      };\n      ms.send(message, origin, callback);\n    };\n\n    //init message handler\n    if (typeof window !== 'undefined') {\n      // Default case\n      window.addEventListener('message', receiveMessage);\n    }\n    return ms;\n  })();\n\n\n  /**\n   * Internal logging util. Stores enabled state within localStorage.\n   * It can be enabled without code changes in the browsers dev console:\n   * TPP_API.enableDebugLog().\n   *\n   * @private\n   * @type {Function}\n   */\n  util.log = (function () {\n    var LOCAL_STORAGE_DEBUG_LOG_ENABLED = 'tpp_debug_log_enabled';\n    var _enabledFallback = false;\n    var _isEnabled = function () {\n      if (typeof localStorage !== 'undefined') {\n        try {\n          return localStorage.getItem(LOCAL_STORAGE_DEBUG_LOG_ENABLED) === 'true';\n        } catch (e) {\n          // localStorage not available\n        }\n      }\n      return _enabledFallback;\n    };\n\n    var _setEnabled = function (enabled) {\n      if (typeof localStorage !== 'undefined') {\n        try {\n          localStorage.setItem(LOCAL_STORAGE_DEBUG_LOG_ENABLED, enabled);\n        } catch (e) {\n          // localStorage not available\n        }\n      }\n      _enabledFallback = enabled;\n    };\n\n    var _log = function debugLogger() {\n      if (_isEnabled()) {\n        var args = ['%cTPP:%c', 'font-style:italic', ''].concat([].slice.call(arguments));\n        // noinspection JSUnresolvedFunction\n        console.log.apply(console, args);\n      }\n    };\n\n    _log.isEnabled = _isEnabled;\n    _log.setEnabled = _setEnabled;\n\n    return _log;\n  })();\n\n  // EventEmitter\n  util.emit = function (eventName, detail, $target) {\n    // noinspection JSCheckFunctionSignatures\n    var event = new CustomEvent(eventName, {detail: detail, bubbles: true});\n    $target = $target || document.body;\n    $target.dispatchEvent(event);\n    util.log(\"Event emitted\", event);\n  };\n\n\n  //list the parsed results from previewId-Strings\n  util.previewIdCache = function () {\n    var _cache = {};\n\n    var parsePreviewId = function (previewId) {\n      try {\n        var previewIdObjectString = atob(previewId);\n        var previewIdObject = JSON.parse(previewIdObjectString);\n        return JSON.parse(atob(previewIdObject['data-fs-id']));\n      } catch (e) {\n        util.log(\"Error in previewIdMatchesStatus for\", previewId, e);\n        return null;\n      }\n    };\n\n    var getInfo = function (previewId) {\n      if (!_cache[previewId]) {\n        var fsIdObject = parsePreviewId(previewId);\n        if (fsIdObject) {\n          _cache[previewId] = fsIdObject;\n        }\n      }\n      return _cache[previewId];\n    };\n\n    getInfo.clear = function () { _cache = {};};\n    return getInfo;\n  }();\n\n  /**\n   *\n   * A light variant of underscore/lodash _.get().\n   * Can read path expressions like\n   *  * 'a'\n   *  * 'a.b.c'\n   *  * ['a','b','c']\n   * But not:\n   *  * 'a[1].b'\n   *\n   * Results:\n   * * If object is null, undefined, or otherwise 'falsey'\n   * * If path is null, undefined, an empty string, or not a string nor an array of String: undefined.\n   * * Given a path 'a': object['a']\n   * * Give a path 'a.b.c': getPath(['b','c'],object['a']);\n   * * If path is []: undefined\n   * * Given a path ['a']: object['a']\n   * * Given a path ['a','b','c']: getPath(['b','c'],object['a']);\n   * @protected\n   * @param {string|[]} path\n   * @param {Object} object\n   * @return {*}\n   */\n  util.getValue = function (path, object) {\n    if (!object || !path) {\n      return undefined;\n    }\n    var pathSpec = [];\n    if (typeof path === 'string') {\n      pathSpec = path.split('.');\n    } else if (path.constructor !== 'Array') {\n      pathSpec = path;\n    }\n    if (pathSpec.length === 0) {\n      return undefined;\n    } else if (pathSpec.length === 1) {\n      return object[pathSpec[0]];\n    }\n    return util.getValue(pathSpec.slice(1), object[pathSpec[0]]);\n  };\n\n\n  /**\n   * The basic status object of a FirstSpirit element.\n   * The documented properties are a subset and describe a fixed API.\n   * Properties not documented here may change at any time.\n   *\n   * @example\n   * {\n   *  \"storeType\": \"PAGESTORE\",\n   *  \"elementType\": \"Page\",\n   *  \"displayName\": \"_banner_xml\",\n   *  \"uid\": \"_banner_xml\",\n   *  \"released\": true,\n   *  \"releaseSupported\": true,\n   *  \"workflows\" : {... }\n   *  \"permissions\": { ... }\n   * }\n   *\n   * @public\n   * @since 1.0.0\n   * @name TppElementStatus\n   * @property {string} uid - the uid of the element\n   * @property {string} displayName - the display name of the element\n   * @property {string} elementType - the type of the element\n   * @property {string} storeType - the type of the elements store\n   * @property {boolean} releaseSupported - 'true' if the given element supports release\n   * @property {boolean} release - the current release status of the element (value must be ignored if 'releaseSupported' is false)\n   * @property {TppWorkflowStatus} workflows\n   * @property {TppPermissionStatus} permissions\n   **/\n\n\n  /**\n   * The descriptor of a FirstSpirit workflow.\n   * @example\n   *   {\n   *      \"uid\": \"Freigabe Anfordern\",\n   *      \"displayName\": \"Release request\",\n   *      \"storeType\": \"TEMPLATESTORE\",\n   *      \"elementType\": \"Workflow\",\n   *      \"permissions\": {...}\n   *      ...\n   *   }\n   *  @public\n   *  @since 1.0.0\n   *  @name TppWorkflowDescriptor\n   *  @property {string} uid - the uid of the workflow\n   *  @property {string} displayName - the display name of the workflow\n   *  @property {string} storeType - the type of the elements store - in this case always \"TEMPLATESTORE\"\n   *  @property {string} elementType - the type of the workflow - in this case always \"Workflow\"\n   *  @property {TppPermissionStatus} permission - the current permissions on the workflow element itself\n   */\n\n  /**\n   * The descriptor of a workflows transition.\n   *\n   *\n   *\n   * @example\n   * {\n   *    \"id\": \"8\",\n   *    \"displayName\": \"Check\",\n   *    \"uid\": \"Prüfen\"\n   * }\n   * @public\n   * @since 1.0.0\n   * @name TppTransitionDescriptor\n   * @property {string} id - the id of the transition\n   * @property {string} displayName - the display name of the transition\n   * @property {string} uid - the uid of the element\n   */\n\n  /**\n   * The current workflow status of the element. Containing running and possible workflows and their status.\n   *\n   * Called on a Page, the workflow status of the current page will be given.\n   * Called on a Section, the workflow status of the page will be given, which contains the section.\n   *\n   * @example\n   * {\n   *    \"allowed\": [...],\n   *    \"current\": {...},\n   *    \"transitions\": [...],\n   *    \"deleteWorkflow\": null\n   * }\n   * @public\n   * @since 1.0.0\n   * @name TppWorkflowStatus\n   * @property {[TppWorkflowDescriptor]} allowed - list of all allowed workflows in the current element\n   * @property {TppWorkflowDescriptor} current - gives the current running workflow of this element (can be null)\n   * @property {[TppTransitionDescriptor]} transitions - gives a list a possible transitions in the running workflow (can be null)\n   * @property {TppWorkflowDescriptor} deleteWorkflow - gives a dedicated deleteWorkflow for this element, if one is configured in the FirstSpirit project (can be null)\n   **/\n\n\n  /**\n   * The permission of the current user on the given element.\n   * @example\n   *  {\n   *    \"see\": true,\n   *    \"read\": true,\n   *    \"change\": true,\n   *    \"delete\": true,\n   *    \"appendLeaf\": true,\n   *    \"deleteLeaf\": true,\n   *    \"release\": true,\n   *    \"seeMeta\": true,\n   *    \"changeMeta\": true,\n   *    \"changePermission\": true\n   *  }\n   * @public\n   * @since 1.0.0\n   * @name TppPermissionStatus\n   * @property {boolean} see\n   * @property {boolean} read\n   * @property {boolean} change\n   * @property {boolean} delete\n   * @property {boolean} appendLeaf\n   * @property {boolean} deleteLeaf\n   * @property {boolean} release\n   * @property {boolean} seeMeta\n   * @property {boolean} changeMeta\n   * @property {boolean} changePermission\n   **/\n\n\n  /**\n   * Fluent builders to create typed objects.\n   * Ensures the \"interface\" the object and should provide a stable API.\n   *\n   * @private Could be made part of the official api.\n   */\n  util.Types = (function () {\n\n    /**\n     * Internal representation if a concrete button action in the decorate API.\n     *\n     * Instances of action will be produced by the API.\n     *\n     * @public\n     * @since 1.0.0\n     * @name TppAction\n     * @class\n     */\n    /**\n     * @protected\n     * @name TppActionBuilder\n     * @example\n     * var action = createActionBuilder().name('sendMail').execute(...).build();\n     *\n     * @return {TppActionBuilder}\n     */\n    var createActionBuilder = function () {\n\n      var build = function (template) {\n\n        var action = {};\n\n        var _status = {};\n\n        var conf = Object.create(template);\n\n        action._typeMarker = 'TppAction';\n\n        /**\n         * The current status of the FirstSpirit element connected with this action.\n         *\n         * This object might be empty, if there is no current element given by a previewId or the\n         * information is not fetched yet by using {@link TPP_API.Operation.getElementStatus}.\n         *\n         * To avoid null- and undefined-checks, the method provides an optional argument path to query a\n         * nested object property.\n         *\n         * @example\n         * action.getStatus()       // Give the object set with action.setStatus\n         * action.getStatus(\"a.b\")  // Gives action.getStatus().a.b, if value exists. Otherwise: undefined\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppAction#getStatus\n         * @method\n         * @param {string} [path] - Optional property path to query on status\n         * @return {TppElementStatus|*} - the status of the current element. Might be an empty object.\n         */\n        action.getStatus = function (path) {\n          if (path) {\n            return util.getValue(path, _status);\n          }\n          return _status;\n        };\n\n        /**\n         * Set the current status of the action.\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppAction#setStatus\n         * @method\n         * @param status\n         */\n        action.setStatus = function (status) {\n          _status = status;\n        };\n\n\n        /**\n         * The current name of the action.\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppAction#getName\n         * @method\n         * @return {string}\n         */\n        action.getName = function () {\n          return conf._name;\n        };\n\n        /**\n         * The label of the action\n         * @public\n         * @since 1.0.0\n         * @name TppAction#getLabel\n         * @method\n         * @return {string}\n         */\n        action.getLabel = function () {\n          return conf._label;\n        };\n\n        /**\n         * The icon url of the action\n         * @public\n         * @since 1.0.0\n         * @name TppAction#getIcon\n         * @method\n         * @return {string}\n         */\n        action.getIcon = function () {\n          return conf._icon;\n        };\n\n        /**\n         * The preview id of the action\n         * @public\n         * @since 1.0.0\n         * @name TppAction#getPreviewId\n         * @method\n         * @return {string} - can be null.\n         */\n        action.getPreviewId = function () {\n          return conf._previewId;\n        };\n\n        /**\n         * The current DOM element the action is attached to\n         * @public\n         * @since 1.0.0\n         * @name TppAction#getElement\n         * @method\n         * @return {HTMLElement} - can be null\n         */\n        action.getElement = function () {\n          return conf._element;\n        };\n\n        /**\n         * The context of the action.\n         * To avoid null- and undefined-checks, the method provides an optional argument path to query a\n         * nested object property.\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppAction#getContext\n         * @method\n         * @param {string} [path] - Optional property path to query on context\n         * @return {Object}\n         */\n        action.getContext = function (path) {\n          if (path) {\n            return util.getValue(path, conf._context);\n          }\n          return conf._context;\n        };\n\n        /**\n         * Check if the action is enabled\n         * @public\n         * @since 1.0.0\n         * @name TppAction#isEnabled\n         * @method\n         * @return {boolean}\n         */\n        action.isEnabled = function () {\n          if (typeof conf._isEnabled === 'function') {\n            return !!(conf._isEnabled(action, Array.prototype.slice.call(arguments)));\n          }\n          return true;\n        };\n\n        /**\n         * Execute the action\n         * @public\n         * @since 1.0.0\n         * @name TppAction#execute\n         * @method\n         */\n        action.execute = function () {\n          if (typeof conf._execute === 'function') {\n            return conf._execute(action, Array.prototype.slice.call(arguments));\n          }\n        };\n\n        /**\n         * Check if the action is configured with options.\n         * Compare to {@link TppActionBuilder#options}.\n         * @public\n         * @since 1.0.0\n         * @name TppAction#supportsOptions\n         * @return {boolean}\n         */\n        action.supportsOptions = function () {\n          return (!!conf._getOptions);\n        };\n\n        /**\n         * Returns the action's possible options\n         * @public\n         * @since 1.0.0\n         * @name TppAction#getOptions\n         * @return {[TppActionOptions]}\n         */\n        action.getOptions = function () {\n          if (typeof conf._getOptions === 'function') {\n            return conf._getOptions(action, Array.prototype.slice.call(arguments));\n          } else {\n            return conf._getOptions; //fixme: freeze the array\n          }\n        };\n\n        return action;\n\n      };\n\n      /**\n       *\n       * Creates a copy and sets the values.\n       * This is used to make the builder immutable,\n       * in the way that every chain-able function\n       * gives a new instance of a builder keeping.\n       *\n       * Object.freeze is not used as an optimization,\n       * because the we handle the template here as\n       * \"private\" variable\n       * @protected\n       * @param {Object} template\n       * @param {Object} values\n       *\n       */\n      var builderWith = function (template, values) {\n        var _template = Object.create(template);\n        if (values) {\n          _template = Object.assign(_template, values);\n        }\n        return createBuilder(_template);\n      };\n\n\n      /**\n       * Fluent and immutable API to configure custom buttons.\n       * Methods can be chained and they produce a new immutable\n       * instance of an action builder.\n       *\n       * See {@link TPP_API.Button.CUSTOM} for more configuration examples.\n       *\n       * See {@link TppDecorator} and {@link TPP_API.Decorate.element} for\n       *  normal use case in decorate Api.\n       *\n       * @example\n       * // Basic API\n       *\n       * // 1. Configuration of a custom action\n       * var actionBuilder = TPP_API.createActionBuilder()\n       *        .name('sendMail')\n       *        .execute(...)\n       *        .options();\n\n       * // 2. Immutable usage\n       * var basic = TPP_API.createActionBuilder().\n       *        .isEnable(elementIsWritable)\n       *        .context({conf : \"some common settings\"});\n       *\n       * // The two following examples share the same basic properties.\n       * // 2.1\n       * var rotateActionBuilder = basic\n       *       .options([{id:'left', label:'left'}, {id : right}])\n       *       .execute(rotate);\n       *\n       * // 2.2\n       * // basic action builder can be used here as well.\n       * var flipActionBuilder = basic.execute(flip);\n       *\n       * @class\n       * @public\n       * @since 1.0.0\n       * @name TppActionBuilder\n       * @type {TppActionBuilder}\n       */\n      /**\n       * @protected\n       * @param {Object} template\n       */\n      var createBuilder = function (template) {\n\n        var builder = {};\n        builder._typeMarker = 'TppActionBuilder';\n\n        /**\n         * Internal button name, should be unique.\n         * Will also be used for css classes.\n         *\n         * Defines the result of {@link TppAction#getName}\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#name\n         * @method\n         * @param {string} name The unique name of the button.\n         * @return {TppActionBuilder}\n         */\n        builder.name = function (name) {\n          return builderWith(template, {_name: name});\n        };\n\n        /**\n         * Button label (Currently only used to title dropdown buttons).\n         *\n         * Defines the result of {@link TppAction#getLabel}.\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#label\n         * @method\n         * @param {string} label - The readable and translated label of the button.\n         * @return {TppActionBuilder}\n         */\n        builder.label = function (label) {\n          return builderWith(template, {_label: label});\n        };\n\n        /**\n         * Provide context, available to action.\n         *\n         * This is intended to hold fixed configuration for the resulted actions.\n         *\n         * Variable data will be stored in {@link TppAction#getStatus}.\n         * For this reason there is no method to set the status in the action builder but in the current\n         * action itself {@link TppAction#setStatus}. And vice versa there is no method to set the context\n         * in the {@link TppAction}.\n         *\n         * Defines the result of {@link TppAction#getContext}.\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#context\n         * @method\n         * @param {Object} context - An arbitrary object of user data.\n         * @return {TppActionBuilder}\n         */\n        builder.context = function (context) {\n          return builderWith(template, {_context: context});\n        };\n\n\n        /**\n         * Update the provided context.\n         *\n         * This can be used, if the context has to be build up step by step.\n         *\n         * @name TppActionBuilder#updateContext\n         * @public\n         * @since 1.1.0\n         * @param {Object} contextUpdate - The current object of user data will be updated by Object assign\n         * @return {TppActionBuilder}\n         * @example\n         * builder\n         *      .context({a:'foo', b:1});      // Set.      Context is now: {a: 'foo', b: 1}\n         *      .updateContext({b: 2});        // Update.   Context is now: {a: 'foo', b: 2}\n         *      .updateContext({c: 'bar'});    // Update.   Context is now: {a: 'foo', b: 2, c: 'bar'}\n         *      .context({b: 3});              // Override. Context is now: {b: 3}\n         *\n         */\n        builder.updateContext = function (contextUpdate) {\n          var context = Object.assign({}, template._context, contextUpdate);\n          return builderWith(template, {_context: context});\n        };\n\n\n        /**\n         * This will be called internally when used in decorated elements.\n         *\n         * Defines the result of {@link TppAction#getElement}.\n         *\n         * It is not necessary to call this manually in the decorate use case.\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#element\n         * @method\n         * @param element\n         * @return {TppActionBuilder}\n         */\n        builder.element = function (element) {\n          return builderWith(template, {_element: element});\n        };\n\n        /**\n         * Icon, dimension should be 24x24 pixels.\n         *\n         * Defines the result of {@link TppAction#getIcon}\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#icon\n         * @param {string} url - The url of the buttons icon.\n         * @return {TppActionBuilder}\n         */\n        builder.icon = function (url) {\n          return builderWith(template, {_icon: url});\n        };\n\n        /**\n         * This will be called internally when used in decorated elements.\n         *\n         * It is not necessary to call this manually in the decorate use case.\n         *\n         * Use {@link TppDecorator.updatePreviewId} instead to update the preview id for all actions\n         * of one element.\n         *\n         * Defines the result of {@link TppAction#getPreviewId}\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#previewId\n         * @method\n         * @param {string} previewId - The preview id connected with the current action.\n         * @return {TppActionBuilder}\n         */\n        builder.previewId = function (previewId) {\n          return builderWith(template, {_previewId: previewId});\n        };\n\n        /**\n         * Callback will get the current {@link TppAction} as first parameter.\n         * The action is given to use the read only properties in this callback.\n         * Like: {@link TppAction#getContext}, {@link TppAction#getStatus},\n         * {@link TppAction#getOptions}, {@link TppAction#getName}.\n         *\n         * @public\n         * @since 1.0.0\n         * @callback TppAction~IsEnabledCallback\n         * @param {TppAction} self - The action itself\n         * @return {boolean} - true if the button should be enabled and visible.\n         */\n        /**\n         * The call to {@link TppAction#isEnabled} will be delegated to\n         * the given callback.\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#isEnabled\n         * @method\n         * @param {TppAction~IsEnabledCallback} isEnabled - An isEnabled callback\n         * @return {TppActionBuilder}\n         */\n        builder.isEnabled = function (isEnabled) {\n          return builderWith(template, {_isEnabled: isEnabled});\n        };\n\n\n        /**\n         * Callback will get the current {@link TppAction} as first parameter.\n         * The action is given to use the read only properties in this callback.\n         * Like: {@link TppAction#getContext}, {@link TppAction#getStatus},\n         * {@link TppAction#getOptions}, {@link TppAction#getName}.\n         *\n         * The arguments array of the {@link TppAction#execute} call will be given as second parameter.\n         * Used in the decorate API: If the {@link TppAction} has options, the selected option will given\n         * as first two parameters of this array.\n         * @public\n         * @since 1.0.0\n         * @callback TppAction~ExecuteCallback\n         * @param {TppAction} self - The action itself\n         * @param {Array} args - An array of arguments given to the {@link TppAction#execute}.\n         *      args[0] will be the selected Options id\n         *      args[1] will be the selected Options label\n         */\n        /**\n         * The call to {@link TppAction#execute} will be delegated to\n         * the given callback. The decorate api binds this execute to its buttons or options.\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#execute\n         * @method\n         * @param {TppAction~ExecuteCallback} execute - An executeCallback\n         * @return {TppActionBuilder}\n         */\n        builder.execute = function (execute) {\n          return builderWith(template, {_execute: execute});\n        };\n\n        /**\n         * A possible option of a drop down action.\n         * The options contains a unique id and a redable and translated label.\n         * @public\n         * @since 1.0.0\n         * @typedef {{id,label}} TppActionOptions\n         */\n        /**\n         * Callback will get the current {@link TppAction} as first parameter.\n         * The action is given to use the read only properties in this callback.\n         * Like: {@link TppAction#getContext}, {@link TppAction#getStatus},\n         * {@link TppAction#getOptions}, {@link TppAction#getName}.\n         *\n         *\n         * The arguments array of the {@link TppAction#getOptions} call will be given as second parameter.\n         *\n         * @public\n         * @since 1.0.0\n         * @callback TppAction~GetOptionsCallback\n         * @param {TppAction} self - The action itself\n         * @param {Array} args - An array of arguments given to the TppAction#getOptions.\n         * @return {[TppActionOptions]}\n         */\n        /**\n         * The call to {@link TppAction#getOptions} will be delegated to\n         * the given callback or will return the given array.\n         * The callback can be used to calculate dynamic options.\n         *\n         * If the callback or array is given {@link TppAction#supportsOptions} returns true,\n         * and a drop down button will be rendered with all given options, instead of a simple button.\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#options\n         * @param {TppAction~GetOptionsCallback|[TppActionOptions]} getOptions - Either a callback or a static list of TppActionOptions\n         * @return {TppActionBuilder}\n         */\n        builder.options = function (getOptions) {\n          return builderWith(template, {_getOptions: getOptions});\n        };\n\n        /**\n         * Alias for {@link TppActionBuilder#options}.\n         * @public\n         * @since 1.0.0\n         * @name TppActionBuilder#getOptions\n         * @param {TppAction~GetOptionsCallback|[TppActionOptions]} getOptions - Either a callback or a static list of TppActionOptions\n         * @return {TppActionBuilder}\n         */\n        builder.getOptions = builder.options;\n\n        /**\n         * Gives a new instance of {@link TppAction}.\n         *\n         * It is not necessary to call this manually in the decorate use case.\n         *\n         * @protected\n         * @name TppActionBuilder#build\n         * @method\n         * @return {TppAction}\n         */\n        builder.build = function () {\n          return build(template);\n        };\n\n        return builder;\n      };\n\n      var defaultIcon = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAACUef2IAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAF1JREFUOE/t00sKACAIRVH3v2n7UNFIb4qzgmZ6kIeKqkrFL0HHoB8+CdAoemzz0Xqc8YYxTie4YYRHYRfPwCaegc3eKOz2uQVrxcq3gg6C9xiD+4ieG+j1ffgk0AB67wNERdYKGwAAAABJRU5ErkJggg==\";\n\n      var initialTemplate = {\n        _name: null,\n        _label: null,\n        _previewId: null,\n        _element: null,\n        _context: {},\n        _isEnabled: null,\n        _execute: null,\n        _getOptions: null,\n        _icon: defaultIcon\n      };\n\n      return builderWith({}, initialTemplate);\n    };\n\n\n    var actionHelper = (/**\n     *\n     * Convenience functions to create actions from builder\n     * @protected\n     * @return {{create}}\n     */\n    function () {\n      var createActionFromBuilder = function (builder, context) {\n        if (typeof context === 'object') {\n          return builder.context(context).build();\n        } else {\n          return builder.build();\n        }\n      };\n\n      var actionSpecToBuilder = function (actionSpec) {\n        if (actionSpec['_typeMarker'] === 'TppActionBuilder') {\n          return actionSpec;\n        }\n        if (typeof actionSpec === 'function') {\n          var builder = actionSpec(util.Types.createActionBuilder());\n          if (typeof builder === 'undefined') {\n            util.log(\"TppActionBuilderCallback has to return the buttonBuilder!\");\n            return null;\n          }\n          return builder;\n        }\n      };\n\n      /**\n       * @return {TppAction}\n       */\n      var create = function (actionSpec, context) {\n        var action = null;\n        var actionBuilder = actionSpecToBuilder(actionSpec);\n        if (actionBuilder) {\n          action = createActionFromBuilder(actionBuilder, context);\n        }\n        if (actionSpec['_typeMarker'] === 'TppAction') {\n          if (!context) {\n            action = actionSpec;\n          } else {\n            util.log(\"Illegal arguments context not allowed with given action\");\n          }\n        }\n        return action\n      };\n\n      return {\n        create: create,\n        actionSpecToBuilder: actionSpecToBuilder\n      };\n\n    })();\n\n    return {\n      createActionBuilder: createActionBuilder,\n      actionHelper: actionHelper\n    };\n  })();\n\n\n  util.path = function (pathString) {\n    if (typeof pathString !== 'string') {\n      return null;\n    }\n    var elements = pathString\n      .split('/')\n      .filter(function (element) {return (element.length > 0); });\n\n    if (elements.length === 0) {\n      return null;\n    }\n\n    var isFolder = (pathString[pathString.length - 1] === '/');\n    return {\n      raw: pathString,\n      isFolder: isFolder,\n      normalized: elements.join('/'),\n      parent: elements.slice(0, -1).join('/'),\n      name: elements[elements.length - 1]\n    };\n  };\n\n\n  /**\n   * DOM manipulations to create the user interface.\n   *\n   * @private\n   * @type {{renderFrame, renderButtons}}\n   */\n  util.ui = (function () {\n\n    var ui = {};\n\n    var hasClass = function (element, className) {\n      if (element.classList) {\n        return element.classList.contains(className);\n      } else {\n        return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className);\n      }\n    };\n\n    var addClass = function (element, className) {\n      if (element.classList) {\n        element.classList.add(className);\n      } else {\n        element.className += ' ' + className;\n      }\n    };\n\n    var removeClass = function (element, className) {\n      if (element.classList) {\n        element.classList.remove(className);\n      } else {\n        element.className = element.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n      }\n    };\n\n\n    /**\n     * Adds an interactive/mouseover frame to a given element of the external app.\n     * @private\n     * @function\n     */\n    ui.renderFrame = function ($el) {\n\n      var tppFrameDecorator = {};\n\n      var $borders = document.body.appendChild(document.createElement('div'));\n      $borders.className = 'tpp-borders';\n\n      var $buttonContainer = $borders.appendChild(document.createElement('div'));\n      $buttonContainer.className = 'tpp-buttons-container';\n\n      var $activeElement = null;\n\n      var drawBorders = function () {\n        if ($activeElement !== null) {\n          var rect = $activeElement.getBoundingClientRect();\n          $borders.setAttribute('style', 'opacity: 1; ' + ['top', 'left', 'width', 'height'].map(function (prop) {\n            return prop + ': ' + (prop === 'height' ? Math.max(rect[prop], 27) : rect[prop]) + 'px;'\n          }).join(' '));\n          $buttonContainer.setAttribute('style', 'display: block; ' + ['top', 'left', 'width'].map(function (prop) {\n            return prop + ': ' + rect[prop] + 'px;'\n          }).join(' '));\n        }\n      };\n\n      var hideBorders = function () {\n        $borders.setAttribute('style', 'transition: all 0s;');\n        $buttonContainer.removeAttribute('style');\n      };\n\n      // we expect a window here\n      window.addEventListener('scroll', drawBorders);\n\n      var enter = function () {\n        $activeElement = $el;\n        drawBorders();\n      };\n\n      var leave = function () {\n        $activeElement = null;\n        setTimeout(function () {\n          if ($activeElement === null) {\n            hideBorders();\n          }\n        }, 0);\n      };\n\n      $el.addEventListener('mouseenter', enter);\n      $buttonContainer.addEventListener('mouseenter', enter);\n\n      $el.addEventListener('mouseleave', leave);\n      $buttonContainer.addEventListener('mouseleave', leave);\n\n      tppFrameDecorator.getButtonContainer = function () {\n        return $buttonContainer;\n      };\n      tppFrameDecorator.disposeBorders = function () {\n        var tppBorders = $buttonContainer.parentElement;\n        if (tppBorders.parentElement) {\n          tppBorders.parentElement.removeChild(tppBorders);\n        }\n      };\n\n      return tppFrameDecorator;\n    };\n\n\n    /**\n     * @typedef {{addButton, clearButtons, updateButtons}} TppButtonDecorator\n     */\n    /**\n     * Add buttons panel to the given container element.\n     * @private\n     * @param $container\n     * @returns {TppButtonDecorator}\n     */\n    ui.renderButtons = function ($container) {\n\n      var $buttons = $container.appendChild(document.createElement('span'));\n      $buttons.className = 'tpp-buttons';\n\n      /** @type {[]} */\n      var _buttons = [];\n      /** @type {[]} */\n      var _dropdownButtons = [];\n\n      /** @type TppButtonDecorator */\n      var buttonBuilder = {};\n\n      var _updateButton = function (status, button) {\n        button.action.setStatus(status);\n        button.$element.dataset.enabled = button.action.isEnabled();\n        if (button.action.isEnabled()) {\n          if (hasClass(button.$element, 'tpp-disabled')) {\n            removeClass(button.$element, 'tpp-disabled');\n          }\n        } else {\n          if (!hasClass(button.$element, 'tpp-disabled')) {\n            addClass(button.$element, 'tpp-disabled');\n          }\n        }\n      };\n\n      var _updateDropdownButton = function (status, button) {\n        _updateButton(status, button);\n        var action = button.action;\n        var options = action.getOptions();\n        var $flyout = button.$flyout;\n        $flyout.innerHTML = '';\n\n        var $grouptitle = $flyout.appendChild(document.createElement(\"div\"));\n        addClass($grouptitle, \"tpp-workflow-grouptitle\");\n        $grouptitle.innerHTML = action.getLabel();\n\n        var $list = $flyout.appendChild(document.createElement(\"ul\"));\n        options.map(function (option) {\n          var $option = document.createElement(\"li\");\n          $option.innerHTML = option.label;\n          $option.addEventListener('click', function () {\n            action.execute(option.id, option.label);\n          });\n          $list.appendChild($option)\n        });\n      };\n\n\n      /**\n       * Creates a button in the given button bar\n       * @private\n       * @param {TppAction} action\n       * @return {void}\n       */\n      var _addSimpleButton = function (action) {\n        var $button = $buttons.appendChild(document.createElement('span'));\n        addClass($button, 'tpp-button');\n        addClass($button, 'tpp-disabled');\n        addClass($button, \"tpp-\" + action.getName());\n        $button.dataset.actionName = action.getName();\n        $button.dataset.enabled = 'false';\n\n        $button.addEventListener('click', function () {\n          action.execute();\n        });\n\n        _buttons.push({\n                        $element: $button, action: action\n                      });\n        appendActionIcon($button, action.getIcon());\n      };\n\n\n      /**\n       * Creates a drop down button in the given button bar\n       * @private\n       * @param {TppAction} action\n       * @return {void}\n       */\n      var _addDropdownButton = function (action) {\n        var $flyout = $container.appendChild(document.createElement(\"div\"));\n        addClass($flyout, 'tpp-workflow-flyout');\n        $flyout.addEventListener('mouseover', function () {\n          addClass($flyout, 'selected');\n        });\n        $flyout.addEventListener('mouseout', function () {\n          removeClass($flyout, 'selected');\n        });\n\n\n        var $button = $buttons.appendChild(document.createElement('span'));\n        addClass($button, 'tpp-button');\n        addClass($button, 'tpp-disabled');\n        addClass($button, 'tpp-' + action.getName());\n        $button.dataset.actionName = action.getName();\n        $button.dataset.enabled = 'false';\n\n        $button.addEventListener('mouseover', function () {\n          addClass($flyout, 'selected');\n          $flyout.style.left = ($button.getBoundingClientRect().left - $container.getBoundingClientRect().left - $flyout.getBoundingClientRect().width + $button.getBoundingClientRect().width) + \"px\";\n        });\n\n        $button.addEventListener('mouseout', function () {\n          removeClass($flyout, 'selected');\n        });\n\n        _dropdownButtons.push({\n                                $element: $button, $flyout: $flyout, action: action\n                              });\n        appendActionIcon($button, action.getIcon());\n      };\n\n\n      var appendActionIcon = function (element, iconUrl) {\n        var $image = element.appendChild(document.createElement(\"img\"));\n        $image.src = iconUrl;\n      };\n\n      /**\n       * @name TppButtonDecorator.updateButtons\n       * @type TppButtonDecorator.updateButtons\n       * @private\n       */\n      buttonBuilder.updateButtons = function (status) {\n        _buttons.forEach(function (button) {\n          _updateButton(status, button);\n        });\n        _dropdownButtons.forEach(function (button) {\n          _updateDropdownButton(status, button);\n        });\n\n      };\n\n      /**\n       * @name TppButtonDecorator.clearButtons\n       * @private\n       */\n      buttonBuilder.clearButtons = function () {\n        _buttons = [];\n        _dropdownButtons = [];\n        $buttons.innerHTML = '';\n      };\n\n\n      /**\n       * @public\n       * @since 1.0.0\n       * @callback TppActionBuilderCallback\n       * @param {TppActionBuilder} _\n       * @return {undefined|TppActionBuilder}\n       */\n      /**\n       * @name TppButtonDecorator.addButton\n       * @private\n       * @param {TppAction|TppActionBuilder|TppActionBuilderCallback} buttonSpec\n       * @param {Object} [context]\n       * @return {Object} the created action (can be null)\n       */\n      buttonBuilder.addButton = function (buttonSpec, context) {\n\n        var action = util.Types.actionHelper.create(buttonSpec, context);\n        if (action) {\n          if (action.supportsOptions()) {\n            _addDropdownButton(action);\n          } else {\n            _addSimpleButton(action);\n          }\n        } else {\n          util.log(\"Could not create action from buttonSpec\", buttonSpec);\n        }\n        return buttonBuilder;\n      };\n\n\n      return buttonBuilder;\n    };\n\n    return ui;\n\n  })();\n\n  //Internal collection of action creators\n  var ActionStore = {};\n\n\n  // noinspection JSUnusedLocalSymbols to provide same signature for each API component\n  /**\n   * Basic TPP functions\n   *\n   * @name TPP_API.Common\n   * @public\n   * @since 1.0.0\n   */\n  function Common(api, util, config) {\n    //This constructor takes api, util and config for better testability\n\n    var common = this;\n\n    var _previewRequestHandlers = [];\n    var _navigationChangeHandlers = [];\n    var _workflowProcessedHandlers = [];\n\n    var _language = null;\n\n\n    var fireDOMEvents = function (previewId, event, detail) {\n      if (!!previewId) {\n        util.previewElements()\n          .filter(util.filter.byId(previewId))\n          .forEach(function ($target) {\n            util.emit(event, detail, $target);\n          });\n      }\n\n      if (typeof document !== 'undefined' && typeof document.body !== 'undefined') {\n        util.emit(event, detail, document.body);\n      }\n    };\n\n    var fireStatusUpdates = function (response) {\n\n      util.previewElements()\n        .map(util.filter.matchAffectedInfo(response))\n        .filter(util.filter.byNonEmpty)\n        .forEach(function (affectedInfo) {\n          var detail = {previewId: affectedInfo.previewId, status: affectedInfo.status, context: null};\n          util.emit(api.Event.STATUS_CHANGED, detail, affectedInfo.$target);\n        });\n    };\n\n    /**\n     * @name TppInternalEventHandler.TPP_PREVIEW_REQUEST\n     * @private\n     */\n    util.messageService.setInternalEventHandler('TPP_PREVIEW_REQUEST', function (payload) {\n      if (!payload.error) {\n        var previewId = payload.object;\n        var detail = {previewId: previewId};\n        fireDOMEvents(previewId, api.Event.ELEMENT_REQUESTED, detail);\n        _previewRequestHandlers.forEach(function (handler) {handler(previewId);});\n      }\n    });\n\n    /**\n     * @name TppInternalEventHandler.TPP_NAVIGATION_CHANGED\n     * @private\n     */\n    util.messageService.setInternalEventHandler('TPP_NAVIGATION_CHANGED', function (payload) {\n      if (!payload.error) {\n        var previewId = payload.object;\n        var detail = {previewId: previewId};\n        fireDOMEvents(previewId, api.Event.NAVIGATION_CHANGED, detail);\n        _navigationChangeHandlers.forEach(function (handler) {handler(previewId);})\n      }\n    });\n\n    /**\n     * @name TppInternalEventHandler.TPP_WORKFLOW_ACTION\n     * @private\n     */\n    util.messageService.setInternalEventHandler('TPP_WORKFLOW_ACTION', function (payload) {\n      if (!payload.error) {\n        var workflowInfo = payload.object;\n        var previewId = workflowInfo.previewId;\n        if (workflowInfo.isDeleted) {\n          var detail = {\n            previewId: workflowInfo.previewId,\n            context: null,\n            deleted: true\n          };\n          fireDOMEvents(previewId, api.Event.ELEMENT_DELETED, detail);\n        } else {\n          var detail = {\n            previewId: workflowInfo.previewId,\n            workflowId: workflowInfo.workflowId,\n            transitionId: workflowInfo.transitionId\n          };\n          fireDOMEvents(previewId, api.Event.WORKFLOW_PROCESSED, detail);\n          _workflowProcessedHandlers.forEach(function (handler) {handler(detail);});\n          // Status Update for all affected elements\n          api.Operation.getAffectedWorkflowElements(previewId)\n            .then(function (affectedElements) {\n              fireStatusUpdates(affectedElements);\n            });\n        }\n      }\n    });\n\n\n    /**\n     * Provides access to the WE_API's execute method.\n     *\n     * The result can be fetched by giving a callback function.\n     * If this callback is not set, the function returns a Promise.\n     * These are exclusive options.\n     *\n     * @name TPP_API.Common.execute\n     * @public\n     * @since 1.0.0\n     * @param {string} identifier\n     * @param {Object} params\n     * @param {Function} [callback] if callback is set, this will be called.\n     * @return {Promise|undefined} if callback is not set, this returns a promise\n     */\n    common.execute = function (identifier, params, callback) {\n      var message = {\n        tpp: {\n          execute: identifier,\n          params: params || {}\n        }\n      };\n      if (util.isFunction(callback)) {\n        util.messageService.send(message, config.origin, callback);\n      } else {\n        return new Promise(function (resolve) {\n          util.messageService.send(message, config.origin, resolve);\n        });\n      }\n    };\n\n    /**\n     * Sets Element the ContentCreator should handle as preview element.\n     * The PreviewElement of the ContentCreator is given by a PageRef.\n     *\n     * This has to be controlled by the third party app because a \"page\" in the third party app can possibly contain\n     * several first spirit page refs.\n     *\n     * This delegates to WE_API.Common.setPreviewElement\n     *\n     * @name TPP_API.Common.setPreviewElement\n     * @public\n     * @since 1.1.0\n     * @param {string} previewId\n     * @param {Function} [callback] if callback is set, this will be called when preview element is set\n     * @return {Promise|undefined} if callback is not set, this return a promise\n     */\n    common.setPreviewElement = function (previewId, callback) {\n      var message = {\n        tpp: {\n          setPreviewElement: true,\n          previewId: previewId\n        }\n      };\n      if (typeof callback === 'function') {\n        util.messageService.send(message, config.origin, callback);\n      } else {\n        return new Promise(function (resolve) {\n          util.messageService.send(message, config.origin, resolve);\n        });\n      }\n    };\n\n    /**\n     * A callback equivalent to the {@link TPP_API.Event.NAVIGATION_CHANGED}.\n     * @public\n     * @since 1.1.0\n     * @callback TPP_API.Common~PreviewRequestHandler\n     * @param {string} previewId\n     **/\n    /**\n     * This can be used to register a handler in case in the ContentCreator a new PreviewElement is requested.\n     * This will be triggered for example if an element in a report or search will be triggered via click.\n     *\n     * How to handle this situation depends on the setup of the third party app. It could be ignored completely, a page\n     * reload could be triggered, or an internal re-route without a full page refresh could be triggered.\n     *\n     * Compare TPP to standard ContentCreator behavior.\n     *\n     * If TPP is not enabled:\n     * * The page change will be triggered by navigating in the preview page or by a click in a report.\n     * * The URL of the preview iframe will be changed.\n     * * The Page reloads.\n     * * The listener of {@link https://docs.e-spirit.com/odfs/template-develo/javascript-apis/contentcreator/common-function/index.html#auf_seitenwechsel_reagieren|WE_API.Common.addPreviewElementListener}\n     * * will be called with an FSID as parameter.\n     *\n     * If TPP is enabled:\n     * * The page change will be requested by the a click in a reporter.\n     * * The handler of {@link TPP_API.Common.addPreviewRequestHandler|this} very method will be called with a previewId.\n     * * The third party app can decide, how to react.\n     * * It could ignore the previewId, make a full page refresh, or change the route.\n     * * It could notify the ContentCreator that the preview element has changed by calling {@link TPP_API.Common.setPreviewElement}.\n     * * This would trigger the listener of {@link https://docs.e-spirit.com/odfs/template-develo/javascript-apis/contentcreator/common-function/index.html#auf_seitenwechsel_reagieren|WE_API.Common.addPreviewElementListener}.\n     *\n     * @name TPP_API.Common.addPreviewRequestHandler\n     * @public\n     * @since 1.1.0\n     * @param {TPP_API.Common~PreviewRequestHandler} callback\n     */\n    common.addPreviewRequestHandler = function (callback) {\n      if (util.isFunction(callback)) {\n        _previewRequestHandlers.push(callback);\n        util.log('Registered a new Preview Request Handler');\n      }\n    };\n\n\n    /**\n     * A callback equivalent to the {@link TPP_API.Event.NAVIGATION_CHANGED}.\n     * @public\n     * @since 1.1.0\n     * @callback TPP_API.Common~NavigationChangeCallback\n     * @param {string} [previewId] - if a new page ref is created the previewId of this PageRef will be send here.\n     **/\n    /**\n     * Callback is called when there are changes in the SiteStore triggered in the outer ContentCreator.\n     *\n     * @name TPP_API.Common.addNavigationChangeHandler\n     * @public\n     * @since 1.1.0\n     * @param {TPP_API.Common~NavigationChangeCallback} callback\n     */\n    common.addNavigationChangeHandler = function (callback) {\n      if (util.isFunction(callback)) {\n        _navigationChangeHandlers.push(callback);\n        util.log('Registered a new Navigation Request Handler');\n      }\n    };\n\n\n    /**\n     * A callback equivalent to the {@link TPP_API.Event.WORKFLOW_PROCESSED}.\n     * @public\n     * @callback TPP_API.Common~WorkflowProcessedCallback\n     * @param {{previewId, transitionId}} [info] - event info about transition, and the element it is processed on\n     **/\n    /**\n     * Callback is called every time a workflow step was triggered.\n     *\n     * @name TPP_API.Common.addWorkflowProcessedHandler\n     * @public\n     * @param {TPP_API.Common~WorkflowProcessedCallback} callback\n     */\n    common.addWorkflowProcessedHandler = function (callback) {\n      if (util.isFunction(callback)) {\n        _workflowProcessedHandlers.push(callback);\n        util.log('Registered a new Workflow Processed Handler');\n      }\n    };\n\n\n    /**\n     * @private internal test method; can be used to check backend and frontend API version\n     */\n    common.ping = function (callback) {\n\n      util.log('Sending PING from fs-tpp-api.js. Version: ' + FRONTEND_VERSION);\n\n      var callbackWrapper = function (result) {\n        util.log('Receiving PONG from fs-tpp-api-Module. Version: ' + (result.version || 'UNKNOWN'));\n        if (typeof callback === 'function') {\n          callback(result);\n        }\n      };\n\n      var message = {\n        tpp: {ping: true, version: FRONTEND_VERSION}\n      };\n\n      util.messageService.send(message, config.origin, callbackWrapper);\n    }\n  }\n\n\n  // noinspection JSUnusedLocalSymbols\n  /**\n   * Provides operations on store elements represented by previewIds.\n   * This contains operations to Create, Read, Edit, Delete, and to do workflow stuff on store elements.\n   * @name TPP_API.Operation\n   * @public\n   * @since 1.0.0\n   */\n  function Operation(api, util, config) {\n    //This constructor takes api, util and config for better testability\n\n    var operation = this;\n    var _project = { languages: [], previewUrl: location.href };\n\n    var EXECUTABLE = 'class:TppApi';\n\n    // All actions provided by class:TppApi\n    var Action = {\n      EDIT: 'EDIT',\n      EDIT_META_DATA: 'EDIT_META_DATA',\n      STATUS: 'STATUS',\n      DELETE: 'DELETE',\n      DELETE_WORKFLOW: 'DELETE_WORKFLOW',\n      RENDER: 'RENDER',\n      CREATE_PAGE: 'CREATE_PAGE',\n      CREATE_SIBLING_SECTION: 'CREATE_SIBLING_SECTION',\n      CREATE_CHILD_SECTION: 'CREATE_CHILD_SECTION',\n      CREATE_DATASET: 'CREATE_DATASET',\n      WORKFLOW_START: 'WORKFLOW_START',\n      WORKFLOW_PROCESS: 'WORKFLOW_PROCESS',\n      CROP_IMAGE: 'CROP_IMAGE',\n      TOGGLE_BOOKMARK: 'TOGGLE_BOOKMARK',\n      PROJECT_INFO: 'PROJECT_INFO',\n      TRANSLATION: 'TRANSLATION'\n    };\n\n\n    var createDetail = function (previewId, context, detailName, response) {\n      var detail = {\n        previewId: previewId || null,\n        context: context || null\n      };\n      detail[detailName] = response;\n      return detail;\n    };\n\n\n    var executeOperation = function (params) {\n      return api.Common.execute(EXECUTABLE, params).then(function (response) {\n        if (response.error) {\n          return Promise.reject(response.object);\n        } else {\n          return Promise.resolve(response.object);\n        }\n      });\n    };\n\n    executeOperation({ action: Action.PROJECT_INFO }).then(function(response) {\n      if(response){\n        _project.previewUrl = response.previewUrl;\n        response.languages.forEach(function(language) {\n          if (language.master) {\n            _project.languages.unshift(language.lang);\n          } else {\n            _project.languages.push(language.lang);\n          }\n        });\n      }\n    });\n\n    /**\n     * @name TPP_API.Operation.getAffectedWorkflowElements\n     * @protected\n     */\n    operation.getAffectedWorkflowElements = function (previewId) {\n      var params = {\n        action: 'GET_AFFECTED_WORKFLOW_ELEMENTS',\n        previewId: previewId,\n        workflowMode: config.workflowMode\n      };\n      return executeOperation(params);\n    };\n\n    /**\n     * Shows a ContentCreator EditDialog for the store element specified by the previewId.\n     * Produce a {@link #eventtpp_apieventstatus_changed|TPP_API.Event.STATUS_CHANGED} event on all elements annotated with the given previewId.\n     * Returns the changed content of the given store element as Promise result.\n     *\n     * @name TPP_API.Operation.showEditDialog\n     * @public\n     * @since 1.0.0\n     * @example\n     *\n     *  //Example 1: Edit and update DOM manually\n     *  var previewId = ...;\n     *  TPP_API.Operation\n     *    .showEditDialog(previewId)\n     *    .then(content => $(`[data-fs-preview-id=${previewId}]`).innerHTML( App.render(content) ));\n     *\n     *  //Example 2: Edit and Update via Event\n     *  $(document).on(TPP_API.Event.CONTENT_CHANGED, (e)=>{\n     *    //Merge content with external data\n     *    var productInfo = App.getProductInfo(e.context.productId);\n     *    App.render(e.target, e.detail.content, productInfo);\n     *  });\n     *\n     *  TPP_API.Operation\n     *    .showEditDialog(previewId, {productId: 23});\n     *\n     *\n     * @fires TPP_API.Event.CONTENT_CHANGED\n     * @param {string} previewId - The previewId of the store element\n     * @param {any} [context] - A custom context that will be passed to every fired event.\n     * @return {Promise} The rendered content.\n     */\n    operation.showEditDialog = function (previewId, context) {\n\n      var params = {\n        action: Action.EDIT,\n        previewId: previewId\n      };\n\n      return executeOperation(params)\n        .then(function (response) {\n          if (response !== null) {\n            // force refresh of preview element to reflect changed state\n            api.Common.setPreviewElement();\n\n            util.previewElements()\n              .filter(util.filter.byId(previewId))\n              .forEach(function ($target) {\n                var detail = createDetail(previewId, context, 'content', response);\n                util.emit(api.Event.CONTENT_CHANGED, detail, $target);\n              });\n          }\n          return response;\n        });\n\n    };\n\n    /**\n     * Shows a ContentCreator EditDialog for the MetaData of the store element specified by the previewId.\n     * Produce a {@link #eventtpp_apieventstatus_changed|TPP_API.Event.STATUS_CHANGED} event on all elements annotated with the given previewId.\n     * Returns the changed content of the given store element as Promise result.\n     *\n     * MetaData providing elements have to be configured. For the necessary steps in ContentCreator see https://docs.e-spirit.com/odfs/edocs/admi/firstspirit-ser/project-propert/contentcreator/index.html#text_bild_14.\n     *\n     * @name TPP_API.Operation.showMetaDialog\n     * @public\n     * @since 1.2.1\n     *\n     * @fires TPP_API.Event.CONTENT_CHANGED\n     * @param {string} previewId - The previewId of the store element\n     * @param {any} [context] - A custom context that will be passed to every fired event.\n     * @return {Promise} The rendered content.\n     */\n    operation.showMetaDataDialog = function (previewId, context) {\n\n      var params = {\n        action: Action.EDIT_META_DATA,\n        previewId: previewId\n      };\n\n      return executeOperation(params)\n        .then(function (response) {\n          if (response !== null) {\n            // force refresh of preview element to reflect changed state\n            api.Common.setPreviewElement();\n\n            util.previewElements()\n              .filter(util.filter.byId(previewId))\n              .forEach(function ($target) {\n                var detail = createDetail(previewId, context, 'content', response);\n                util.emit(api.Event.CONTENT_CHANGED, detail, $target);\n              });\n          }\n          return response;\n        });\n\n    };\n\n\n    /**\n     * Request the status of the store element specified by the previewId.\n     * Produce a {@link #eventtpp_apieventstatus_changed|TPP_API.Event.STATUS_CHANGED} event on all elements annotated with the given previewId.\n     * Returns a status object as Promise result.\n     *\n     * @name TPP_API.Operation.getElementStatus\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.STATUS_CHANGED\n     * @param {string} previewId - The previewId of the store element.\n     * @param {any} [context] - A custom context that will be passed to every fired event.\n     * @return {Promise} A status object (Currently unstable API)\n     */\n    operation.getElementStatus = function (previewId, context) {\n\n      var params = {\n        action: Action.STATUS,\n        previewId: previewId,\n        workflowMode: config.workflowMode\n      };\n\n      return executeOperation(params)\n        .then(function (response) {\n          util.previewElements()\n            .filter(util.filter.byId(previewId))\n            .forEach(function ($target) {\n              var detail = createDetail(previewId, context, 'status', response);\n              util.emit(api.Event.STATUS_CHANGED, detail, $target);\n            });\n          return response;\n        });\n\n    };\n\n    /**\n     * Request the content of the store element specified by the previewId.\n     * Produces a {@link TPP_API.Event.CONTENT_CHANGED} event on all elements with the given previewId.\n     * Gives the rendered Content as Promise-result.\n     *\n     * @name TPP_API.Operation.renderElement\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.CONTENT_CHANGED\n     * @param {string} previewId - The previewId of the store element.\n     * @param {any} [context] - A custom context that will be passed to every event fired.\n     * @return {Promise|*} The rendered content of the element as Promise result.\n     */\n    operation.renderElement = function (previewId, context) {\n\n      var params = {\n        action: Action.RENDER,\n        previewId: previewId\n      };\n\n      return executeOperation(params)\n        .then(function (response) {\n          util.previewElements()\n            .filter(util.filter.byId(previewId))\n            .forEach(function ($target) {\n              var detail = createDetail(previewId, context, 'content', response);\n              util.emit(api.Event.CONTENT_CHANGED, detail, $target);\n            });\n          return response;\n        });\n\n    };\n\n    /**\n     * Renders the start node of the project without knowing its previewId -\n     * as one possibility to fetch bootstrap information.\n     *\n     * This is a best practise approach but nothing more.\n     * The bootstrap process highly depends on your overall project architecture.\n     *\n     * Fires no event.\n     *\n     * @param {string} language - The language for the rendering.\n     * @return {Promise} The rendered content of the start node (root of site store) as Promise result.\n     * @name TPP_API.Operation.renderStartNode\n     */\n    operation.renderStartNode = function (language) {\n      return executeOperation({action: 'RENDER_START_NODE', language: language});\n    };\n\n    /**\n     * Deletes a store element specified by its previewId.\n     * Produces a {@link TPP_API.Event.ELEMENT_DELETED} event on all elements annotated with the given previewId.\n     * Returns a boolean to indicate success or failure as Promise result.\n     *\n     * @name TPP_API.Operation.deleteSection\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.ELEMENT_DELETED\n     * @param {string} previewId - The previewId of the store element\n     * @param {any} [context} - A custom context that will be passed to every fired event.\n     * @return {Promise} A boolean; true if delete was successful.\n     */\n    operation.deleteSection = function (previewId, context) {\n      var params = {\n        action: Action.DELETE,\n        previewId: previewId\n      };\n\n      return executeOperation(params)\n        .then(function (response) {\n          if (response === true) {\n            util.previewElements()\n              .filter(util.filter.byId(previewId))\n              .forEach(function ($target) {\n                var detail = createDetail(previewId, context, 'deleted', response);\n                util.emit(api.Event.ELEMENT_DELETED, detail, $target);\n              });\n          }\n          return response;\n        });\n    };\n\n    /**\n     * Starts a delete workflow for a page.\n     *\n     * @name TPP_API.Operation.deletePage\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.WORKFLOW_PROCESSED\n     * @param {string} previewId - The previewId of the store element\n     * @param {string} deleteWorkflowUID - Uid of the delete workflow.\n     * @param {any} [context} - A custom context that will be passed to every event fired.\n     * @return {Promise} A boolean; true if delete was successful.\n     */\n    operation.deletePage = function (previewId, deleteWorkflowUID, context) {\n      var params = {\n        action: Action.DELETE_WORKFLOW,\n        previewId: previewId,\n        workflowMode: config.workflowMode\n      };\n      if (config.deletePageWorkflow !== null) {\n        params[\"workflowUID\"] = config.deletePageWorkflow;\n      }\n\n\n      return executeOperation(params);\n\n    };\n\n    /**\n     * Shows a ContentCreator WorkflowDialog that can be used to start a certain workflow specified by\n     * its workflow id and based on the given previewId.\n     *\n     * If previewId addresses a page element, the workflow is started on that page element.\n     * If the previewId addresses a section element, the workflow is started on the page element that\n     * contains the section.\n     *\n     * Produces a {@link TPP_API.Event.WORKFLOW_PROCESSED} event on all elements annotated with the given previewId.\n     *\n     * Produces a {@link #eventtpp_apieventstatus_changed|TPP_API.Event.STATUS_CHANGED} event on all elements annotated with a previewId that are affected by the\n     * workflow. Affected by the workflow are the page and all sections contained in it (this includes the\n     * element addressed by the given previewId).\n     *\n     * Returns an array of status objects for all affected elements as Promise result.\n     *\n     * @name TPP_API.Operation.startWorkflow\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.WORKFLOW_PROCESSED\n     * @param {string} previewId - The previewId of the store element\n     * @param {string} workflow - The uid or id of the workflow to start\n     * @param {any} [context] - A custom context that will be passed to every fired event.\n     * @return {Promise} A WorkflowChanged object which holds a list of status elements -\n     *                      one for every element affected by the process.\n     */\n    operation.startWorkflow = function (previewId, workflow, context) {\n      var params = {\n        action: Action.WORKFLOW_START,\n        previewId: previewId,\n        workflow: workflow,\n        workflowMode: config.workflowMode\n      };\n      return executeOperation(params);\n      /**\n       *  Event Handling will be triggered by external event\n       *  See event Handler for TPP_WORKFLOW_ACTION {@link TppInternalEventHandler.TPP_WORKFLOW_ACTION}\n       */\n    };\n\n\n    /**\n     * Processes a running workflow specified by a transition and a store element's previewId.\n     *\n     * If previewId addresses a page element, then the workflow is continued on that page element.\n     * The previewId addresses a section element, then the workflow is continued on the page element that\n     * contains the section.\n     *\n     *\n     * Produces a {@link TPP_API.Event.WORKFLOW_PROCESSED} event on all element annotated with the given previewId.\n     *\n     * Produces a {@link #eventtpp_apieventstatus_changed|TPP_API.Event.STATUS_CHANGED} event on all element annotated with a previewId that is affected by the\n     * workflow. Affected by the workflow are the page and all contained sections (which includes the\n     * element addressed by the given previewId).\n     *\n     * Returns a object holding a list of status elements for all affected elements as Promise result.\n     *\n     *\n     * @name TPP_API.Operation.processWorkflow\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.WORKFLOW_PROCESSED\n     * @param {string} previewId - The previewId of the store element\n     * @param {string} transition - The uid or id of the transition to process as workflow step\n     * @param {any} [context] - A custom context that will be passed to every fired event.\n     * @return {Promise} A WorkflowChanged object which holds a list of status elements\n     *                      for every element that was affected by the process.\n     */\n    operation.processWorkflow = function (previewId, transition, context) {\n\n      var params = {\n        action: Action.WORKFLOW_PROCESS,\n        previewId: previewId,\n        transition: transition,\n        workflowMode: config.workflowMode\n      };\n\n      return executeOperation(params);\n      /**\n       *  Event Handling will be triggered by external event\n       *  See event Handler for TPP_WORKFLOW_ACTION {@link TppInternalEventHandler.TPP_WORKFLOW_ACTION}\n       */\n    };\n\n    /**\n     * @protected\n     * @typedef {Object} TppCreatePageConfig\n     * @property {string} path\n     * @property {string} template\n     * @property {string} language\n     */\n    /**\n     * Default way to create a new page.\n     *\n     * The signature is a little different from the other operations because we do not have\n     * a previewId for the element yet.\n     *\n     * The operation starts a page creation with the following behavior:\n     *  * An editor for the newly created page will be opened\n     *  * The language to edit, can be set optionally with config.language.\n     *  * A Page is created with the specified path, and the last path element is used as uid for the page\n     *    (for the page template see below).\n     *  * A PageRef referencing this Page is created with the same path as the page.\n     * The Template for the Page will be given by config.template, but can be overridden by the selectedTemplate\n     * parameter. The template is specified by its uid.\n     *\n     * @name TPP_API.Operation.createPage\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.ELEMENT_CREATED\n     * @param {HTMLElement} [$element] - The related element to fire the event on.\n     * @param {TppCreatePageConfig} config - Configures the creation of the page\n     * @param {string} [selectedTemplate] - Overrides the template given in config\n     * @return {Promise}\n     */\n    operation.createPage = function ($element, config, selectedTemplate) {\n      var path = util.path(config.path);\n      if (path === null) {\n        return Promise.reject('Path is not specified correctly in config ' + JSON.stringify(config));\n      }\n\n      var template = selectedTemplate || config.template;\n      var params = {\n        action: Action.CREATE_PAGE,\n        path: path.parent,\n        uid: path.name,\n        template: template,\n        language: config.language\n      };\n\n      return executeOperation(params)\n        .then(function (response) {\n          if ($element) {\n            var detail = createDetail(null, config, 'content', response);\n            util.emit(api.Event.ELEMENT_CREATED, detail, $element);\n          }\n          return response;\n        });\n    };\n\n\n    var createSectionParams = function (action, previewId, config, template) {\n      var params = {\n        action: action,\n        previewId: previewId,\n        template: template || config.template,\n        sectionName: config.sectionName,\n        position: config.position,\n        body: config.body || null\n      };\n      if (typeof(config.positionIndex) !== 'undefined') {\n        params.positionIndex = ''+config.positionIndex;\n        params.position = 'INDEX';\n      }\n      return params;\n    };\n\n\n    /**\n     * @public\n     * @since 1.0.0\n     * @typedef {Object} TppCreateChildSectionConfig\n     * @property {string} body - Name of the body to create the section in.\n     * @property {string} [sectionName] - Name the created section should get. Default value is the uid of the used template.\n     * @property {string} [template] - Uid of the section template to be used. If not given the CC template chooser dialog will be shown.\n     * @property {TPP_API.SectionPosition} [position] - The position of the new child section.\n     * @property {Number} [positionIndex] - If SectionPosition.INDEX was chosen, this gives the index of the newly created Section.\n     */\n    /**\n     * Creates a child section for the page specified by the provided previewId.\n     *\n     * @name TPP_API.Operation.createChildSection\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.ELEMENT_CREATED on the $element.\n     * @fires TPP_API.Event.CHILD_SECTION_CREATED on all elements specified by config.previewId.\n     * @param {string} previewId - Referencing the page to create a child for.\n     * @param {HTMLElement} [$element] - The related html element to fire the ELEMENT_CREATED event on.\n     *      This can be a placeholder for the section to create.\n     * @param {TppCreateChildSectionConfig} config - Config parameters for the creation of the section.\n     * @param {string} [template] - When provided this overrides the template specified in the config\n     * (this parameter can be used if the operation is used in a TppAction context).\n     * @return {Promise}\n     */\n    operation.createChildSection = function (previewId, $element, config, template) {\n      var params = createSectionParams(Action.CREATE_CHILD_SECTION, previewId, config, template);\n      return executeOperation(params)\n        .then(function (response) {\n          util.previewElements()\n            .filter(util.filter.byId(previewId))\n            .forEach(function ($target) {\n              var detail = createDetail(previewId, params, 'content', response);\n              util.emit(api.Event.CHILD_SECTION_CREATED, detail, $target);\n            });\n\n          if ($element) {\n            var detail = createDetail(null, config, 'content', response);\n            util.emit(api.Event.ELEMENT_CREATED, detail, $element);\n          }\n        });\n    };\n\n    /**\n     * @public\n     * @since 1.0.0\n     * @typedef {Object} TppCreateSiblingSectionConfig\n     * @property {string} [sectionName] - Name the created section should get. Default value is the uid of the used template.\n     * @property {string} [template] - Uid of the section template to be used. If not given the CC template chooser dialog will be shown.\n     * @property {TPP_API.SectionPosition} [position] - The position of the new child section.\n     * @property {Number} [positionIndex] - If SectionPosition.INDEX was chosen, this gives the index of the newly created Section.\n     */\n    /**\n     * Creates a section relative to another section specified by its previewId.\n     *\n     * @name TPP_API.Operation.createSiblingSection\n     * @public\n     * @since 1.0.0\n     * @fires TPP_API.Event.ELEMENT_CREATED on the $element.\n     * @fires TPP_API.Event.SIBLING_SECTION_CREATED on elements matching the previewId.\n     * @param {string} previewId - Referencing the section to create a sibling for.\n     * @param {HTMLElement} [$element] - The related html element to fire the ELEMENT_CREATED event on.\n     *    This can be a placeholder for the section to create.\n     * @param {TppCreateSiblingSectionConfig} config - Configures the creation of the section.\n     * @param {string} [template] - Override the template specified in the config.\n     * @return {Promise}\n     */\n    operation.createSiblingSection = function (previewId, $element, config, template) {\n      var params = createSectionParams(Action.CREATE_SIBLING_SECTION, previewId, config, template);\n      return executeOperation(params)\n        .then(function (response) {\n          util.previewElements()\n            .filter(util.filter.byId(previewId))\n            .forEach(function ($target) {\n              var detail = createDetail(previewId, params, 'content', response);\n              util.emit(api.Event.SIBLING_SECTION_CREATED, detail, $target);\n            });\n\n          if ($element) {\n            var detail = createDetail(null, params, 'content', response);\n            util.emit(api.Event.ELEMENT_CREATED, detail, $element);\n          }\n        });\n    };\n\n\n    /**\n     * @protected\n     * @typedef {Object} TppCreateDatasetConfig\n     * @property {string} template\n     * @property {string} language\n     */\n    /**\n     * Create a new Dataset.\n     *\n     * @name TPP_API.Operation.createDataset\n     * @public\n     * @since 1.2.0\n     * @fires TPP_API.Event.ELEMENT_CREATED\n     * @param {HTMLElement} [$element] - The related element to fire the event on\n     * @param {TppCreateDatasetConfig} config - Configures the creation of the dataset\n     * @return {Promise}\n     */\n    operation.createDataset = function ($element, config) {\n      var params = {\n        action: Action.CREATE_DATASET,\n        template: config.template,\n        language: config.language\n      };\n\n      return executeOperation(params)\n        .then(function (response) {\n          if ($element) {\n            var detail = createDetail(null, config, 'content', response);\n            util.emit(api.Event.ELEMENT_CREATED, detail, $element);\n          }\n          return response;\n        });\n    };\n\n\n    /**\n     * @name TPP_API.Operation.cropImage\n     * @public\n     * @since 1.1.0\n     * @param {string} previewId - PreviewId of a media element\n     * @param {string | Array.<string>} resolution - a single ResolutionUID or a an array of ResolutionUIDs\n     */\n    operation.cropImage = function (previewId, resolution) {\n      var params = {\n        action: Action.CROP_IMAGE,\n        previewId: previewId,\n        resolution: resolution\n      };\n      return executeOperation(params)\n        .then(function (response) {\n          if (response) {\n            util.previewElements()\n              .filter(util.filter.byId(previewId))\n              .forEach(function ($target) {\n                var detail = createDetail(previewId, params, 'reference', response);\n                util.emit(api.Event.IMAGE_CHANGED, detail, $target);\n              });\n          }\n        })\n    }\n\n\n    /**\n     * Toggles an element to be a bookmark (flagged as master) or not. Bookmarked elements will appear\n     * in creation dialogs, like {@link TPP_API.Operation.createChildSection} or {@link TPP_API.Operation.createPage}.\n     *\n     * @name TPP_API.Operation.toggleBookmark\n     * @public\n     * @since 1.1.6\n     * @param {string} previewId - The previewId of the store element.\n     * @return {Promise} Boolean which indicates if the element is now bookmarked or not.\n     */\n    operation.toggleBookmark = function (previewId) {\n      var params = {\n        action: Action.TOGGLE_BOOKMARK,\n        previewId: previewId\n      };\n\n      return executeOperation(params).then(function(response) {\n      \t// fires a StatusUpdate on registered DOM nodes via Operation.getElementStatus\n      \tapi.Operation.getElementStatus(previewId);\n      \treturn response;\n      });\n    };\n\n\n    /**\n     * Returns all project languages (abbreviations). The first language is always the master language.\n     *\n     * @name TPP_API.Operation.getLanguages\n     * @public\n     * @since 1.2.4\n     * @return {Array.<string>} - list of languages\n     */\n    operation.getLanguages = function () {\n      return _project.languages;\n    };\n\n\n    /**\n     * Returns the \"External Preview URL\" as set in FirstSpirit.\n     *\n     * @name TPP_API.Operation.getPreviewUrl\n     * @public\n     * @since 1.2.4\n     * @return {<string>} - the \"External Preview URL\"\n     */\n    operation.getPreviewUrl = function () {\n      return _project.previewUrl;\n    };\n\n\n    /**\n     * Shows the translation help dialogue.\n     *\n     * Returns the rendered content only if the current language is the same\n     * as the given `target` language.\n     *\n     * @name TPP_API.Operation.showTranslationDialog\n     * @public\n     * @since 1.2.4\n     * @fires TPP_API.Event.CONTENT_CHANGED\n     * @param {string} previewId - a PreviewId of DataProvider\n     * @param {string} source - the source language\n     * @param {string} target - the target language\n     * @return {Promise} The rendered content.\n     */\n    operation.showTranslationDialog = function (previewId, source, target) {\n\n      var params = {\n        action: Action.TRANSLATION,\n        previewId: previewId,\n        source: source,\n        target: target\n      };\n\n      return executeOperation(params)\n        .then(function (response) {\n          if (response !== null) {\n            // force refresh of preview element to reflect changed state\n            api.Common.setPreviewElement();\n\n            util.previewElements()\n              .filter(util.filter.byId(previewId))\n              .forEach(function ($target) {\n                var detail = createDetail(previewId, context, 'content', response);\n                util.emit(api.Event.CONTENT_CHANGED, detail, $target);\n              });\n          }\n          return response;\n        });\n\n    };\n\n\n  }\n\n  // noinspection JSUnusedLocalSymbols to provide same signature for each API component\n  /**\n   * This provides a UI to enrich html elements of the third party applications with a basic FirstSpirit style\n   * interface. It draws an interactive border around elements and provides a UI element to work with the\n   * {@link TPP_API.Operation}.\n   *\n   * @name TPP_API.Decorate\n   * @public\n   * @since 1.0.0\n   */\n  function Decorate(api, util, config) {\n    var decorate = this;\n\n    var initialized = false;\n\n    var ensureInit = function () {\n\n      if (!initialized) {\n        initialized = true;\n        // noinspection JSUndefinedPropertyAssignment\n        document.head.appendChild(document.createElement('style')).innerHTML = [\n          '.tpp-borders { position: fixed; z-index: 9999999999; opacity: 0; pointer-events: none; box-shadow: 0 0 3px rgba(0,0,0,.5), 0 0 3px rgba(0,0,0,.5) inset; border: 1px solid rgb(181,30,104); transition: opacity 300ms ease-in-out; }',\n          '.tpp-buttons-container { position: fixed; display: none; pointer-events: all;}',\n          '.tpp-buttons { position: absolute; top: 1px; right: 1px; background: linear-gradient(#626161, #424141); border: 1px solid #B5B5B5; display: inline-block; line-height: 23px; }',\n          '.tpp-button { display: block; width: 23px; height: 23px; line-height: 23px; cursor: pointer; position: relative; float:left; text-align: center; }',\n          '.tpp-button img {opacity: 0.7;}',\n          '.tpp-button:hover img { opacity: 1; }',\n          '.tpp-button.tpp-disabled { display : none; }',\n          '.tpp-button.tpp-edit { background: linear-gradient(#A9356B, #79053B); }',\n          '.tpp-workflow-flyout {font-family: Arial, Helvetica, sans-serif; font-size: 11px; overflow: hidden; cursor: pointer; color: lightgray; background: linear-gradient(#626161, #424141); position: absolute; top: 25px; width: 150px; height: 0px; transition: height .5s ease-out}',\n          '.tpp-workflow-flyout li:hover {color:white;}',\n          '.tpp-workflow-flyout.selected {height: auto;}',\n          '.tpp-workflow-flyout.selected ul {max-height: 300px;}',\n          '.tpp-workflow-flyout.selected ul:hover{ overflow-y: auto}',\n          '.tpp-workflow-flyout.selected ul::-webkit-scrollbar{ width: 6px; background-color: transparent;}',\n          '.tpp-workflow-flyout.selected ul::-webkit-scrollbar-track{ background-color: transparent;}',\n          '.tpp-workflow-flyout.selected ul::-webkit-scrollbar-thumb{ background-color: #B4B4B4;}',\n          '.tpp-workflow-flyout.selected ul::-webkit-scrollbar-thumb:hover{ background-color: lightgray;}',\n          '.tpp-workflow-flyout ul {padding-left: 10px; transition: max-height .5s; max-height: 0; overflow-y: hidden}',\n          '.tpp-workflow-flyout li {padding: 5px; display: block;}',\n          '.tpp-workflow-flyout li:before {content: \"\\\\00BB\";}',\n          '.tpp-workflow-grouptitle {font-weight: bold; padding: 5px; color: black; background-color: lightgray; margin-bottom: 8px;}'\n\n        ].join('');\n      }\n    };\n\n\n    var createActionBuilder = util.Types.createActionBuilder;\n\n\n    /**\n     * @protected\n     * @name ActionStore.CUSTOM\n     * @type {TppActionBuilder}\n     */\n    ActionStore.CUSTOM = createActionBuilder();\n\n    /**\n     * @protected\n     * @name ActionStore.CREATE_PAGE\n     * @type {TppActionBuilder}\n     */\n    ActionStore.CREATE_PAGE = createActionBuilder()\n      .name('create')\n      .label('Create a Page')\n      .icon(api.Icon.CREATE_PAGE)\n      .isEnabled(function (action) {\n        return !action.getStatus().id;\n      })\n      .execute(function (action, args) {\n        var selectedTemplate = (args.length > 0) ? args[0] : null;\n        return api.Operation.createPage(action.getElement(), action.getContext(), selectedTemplate);\n      });\n\n\n    //This should be used to create a section to given page.\n    //This can be attaches\n    ActionStore.CREATE_CHILD_SECTION = createActionBuilder()\n      .name('create_child_section')\n      .label('Create a Section')\n      .icon(api.Icon.CREATE_SECTION)\n      .isEnabled(function (action) {\n        return action.getStatus(\"elementType\") === \"Page\" || action.getStatus(\"elementType\") === \"Body\";\n      })\n      .execute(function (action, args) {\n        var selectedTemplate = (args.length > 0) ? args[0] : null;\n        var context = Object.assign({}, action.getContext(), {previewId: action.getPreviewId()});\n        return api.Operation.createChildSection(action.getPreviewId(), action.getElement(), context, selectedTemplate);\n      });\n\n    //This should be used to create a section as a sibling\n    //The can be attached as a button to every section of a listing\n    ActionStore.CREATE_SIBLING_SECTION = createActionBuilder()\n      .name('create_sibling_section')\n      .label('Create a Sibling-Section')\n      .icon(api.Icon.CREATE_SECTION)\n      .isEnabled(function (action) {\n        return action.getStatus(\"elementType\") === \"Section\";\n      })\n      .execute(function (action, args) {\n        var selectedTemplate = (args.length > 0) ? args[0] : null;\n        var context = Object.assign({}, action.getContext(), {previewId: action.getPreviewId()});\n        return api.Operation.createSiblingSection(action.getPreviewId(), action.getElement(), context, selectedTemplate);\n      });\n\n    /**\n     * @protected\n     * @name ActionStore.DEBUG_STATUS\n     * @type {TppActionBuilder}\n     */\n    ActionStore.DEBUG_STATUS = createActionBuilder()\n      .name('debugStatus')\n      .label('Turn on Debug-Mode')\n      .icon(api.Icon.DEBUG)\n      .isEnabled(util.log.isEnabled)\n      .execute(function (action) {\n        var previewId = action.getPreviewId();\n        api.Operation.getElementStatus(previewId).then(function (status) {\n          util.log(\"Status received\", previewId, status);\n        });\n      });\n\n\n    /**\n     * @protected\n     * @name ActionStore.DEBUG_STATUS\n     * @type {TppActionBuilder}\n     */\n    ActionStore.EDIT_ELEMENT = createActionBuilder()\n      .name('edit')\n      .label('Edit this Element')\n      .icon(api.Icon.EDIT)\n      .isEnabled(function (action) {\n        return action.getStatus(\"permissions.change\") &&\n          action.getStatus(\"elementType\") !== \"Body\" &&\n          action.getStatus(\"elementType\") !== \"Media\";\n      })\n      .execute(function (action) {\n        return api.Operation.showEditDialog(action.getPreviewId());\n      });\n\n\n    /**\n     * @protected\n     * @name ActionStore.DEBUG_STATUS\n     * @type {TppActionBuilder}\n     */\n    ActionStore.EDIT_META_DATA = createActionBuilder()\n      .name('editMetaData')\n      .label('Edit Meta Data')\n      .icon(api.Icon.EDIT_META_DATA)\n      .isEnabled(function (action) {\n        return action.getStatus(\"permissions.changeMeta\");\n      })\n      .execute(function (action) {\n        return api.Operation.showMetaDataDialog(action.getPreviewId());\n      });\n\n\n    /**\n     * @protected\n     * @name ActionStore.DELETE_SECTION\n     * @type {TppActionBuilder}\n     */\n    ActionStore.DELETE_SECTION = createActionBuilder()\n      .name('deleteSection')\n      .label('Delete this Section')\n      .icon(api.Icon.DELETE)\n      .isEnabled(function (action) {\n        return action.getStatus().elementType === \"Section\"\n          && action.getStatus(\"permissions.delete\");\n      })\n      .execute(function (action) {\n        return api.Operation.deleteSection(action.getPreviewId());\n      });\n\n    ActionStore.DELETE_PAGE = createActionBuilder()\n      .name('deletePage')\n      .label('Delete this Page')\n      .icon(api.Icon.DELETE)\n      .isEnabled(function (action) {\n        return action.getStatus().elementType === \"Page\"\n          && (action.getStatus().workflows.deleteWorkflow !== null || config.deletePageWorkflow !== null) && action.getStatus().workflows.current === null\n      })\n      .execute(function (action) {\n        return api.Operation.deletePage(action.getPreviewId(), getDeleteWorkflowUID(action.getStatus()), action.getContext())\n      });\n\n    var getDeleteWorkflowUID = function (status) {\n      if (config.deletePageWorkflow !== null) {\n        return config.deletePageWorkflow;\n      } else if (status.workflows.deleteWorkflow !== null) {\n        return status.workflows.deleteWorkflow.uid;\n      }\n      return null;\n    };\n\n    /**\n     * @protected\n     * @name ActionStore.START_WORKFLOW\n     * @type {TppActionBuilder}\n     */\n    ActionStore.START_WORKFLOW = createActionBuilder()\n      .name('startWorkflow')\n      .label('Start a Workflow:')\n      .icon(api.Icon.WORKFLOW)\n      .isEnabled(function (action) {\n        return action.getStatus(\"elementType\") !== \"Body\"\n          && action.getStatus(\"elementType\") !== \"Media\"\n          && action.getStatus().workflows\n          && action.getStatus().workflows.allowed\n          && action.getStatus().workflows.allowed.length > 0;\n      })\n      .getOptions(function (action) {\n        var _status = action.getStatus(), _workflows = _status.workflows;\n        if (_workflows && _workflows.allowed) {\n          var workflows = _workflows.allowed;\n\n          if (_status.storeType === 'PAGESTORE' || _status.storeType === 'SITESTORE') {\n            if (config.deletePageWorkflow !== null) {\n              workflows = workflows.filter(function(workflow) {\n                return workflow.uid !== config.deletePageWorkflow;\n              });\n            } else if (_workflows.deleteWorkflow !== null) {\n              workflows = workflows.filter(function(workflow) {\n                return workflow.id !== _workflows.deleteWorkflow.id;\n              });\n            }\n          }\n\n          return workflows.map(function(workflow) {\n            return { id: workflow.id, label: workflow.displayName };\n          });\n        } else {\n          return [];\n        }\n      })\n      .execute(function (action, args) {\n        var id = args[0];\n        return api.Operation.startWorkflow(action.getPreviewId(), id);\n      });\n\n    /**\n     * @protected\n     * @name ActionStore.PROCESS_WORKFLOW\n     * @type {TppActionBuilder}\n     */\n    ActionStore.PROCESS_WORKFLOW = createActionBuilder()\n      .name('processWorkflow')\n      .label('Process Workflow:')\n      .isEnabled(function (action) {\n        return action.getStatus(\"elementType\") !== \"Body\"\n          && action.getStatus(\"elementType\") !== \"Media\"\n          && action.getStatus().workflows && action.getStatus().workflows.current;\n      })\n      .getOptions(function (action) {\n        if (action.getStatus().workflows && action.getStatus().workflows.transitions) {\n          return action.getStatus().workflows.transitions.map(function (transition) {\n            var displayName = transition.displayName;\n            if (transition.target && transition.target.displayName) {\n              displayName = transition.target.displayName;\n            }\n            return {id: transition.id, label: displayName};\n          });\n        } else {\n          return [];\n        }\n      })\n      .execute(function (action, args) {\n        var id = args[0];\n        return api.Operation.processWorkflow(action.getPreviewId(), id);\n      });\n\n    /**\n     * @protected\n     * @name ActionStore.CROP_IMAGE\n     * @type {TppActionBuilder}\n     */\n    ActionStore.CROP_IMAGE = createActionBuilder()\n      .name('cropImage')\n      .label('Crop image')\n      .icon(api.Icon.CROP_IMAGE)\n      .isEnabled(function (action) {\n        return action.getStatus(\"elementType\") === 'Media'\n          && action.getStatus(\"permissions.change\");\n      })\n      .execute(function (action) {\n        var resolution = action.getContext('imageResolution') || action.getContext('imageResolutions') || 'ORIGINAL';\n        var resolutions = typeof(resolution) === 'string' ? resolution.split(/\\s*,\\s*/) : resolution;\n        var previewId = action.getPreviewId();\n        return api.Operation.cropImage(previewId, resolutions);\n      });\n\n    /**\n     * @protected\n     * @name ActionStore.ADD_BOOKMARK\n     * @type {TppActionBuilder}\n     */\n    ActionStore.ADD_BOOKMARK = createActionBuilder()\n      .name('addBookmark')\n      .label('Add bookmark')\n      .icon(api.Icon.ADD_BOOKMARK)\n      .isEnabled(function (action) {\n        return ['Section', 'Page', 'PageRef'].indexOf(action.getStatus('elementType')) !== -1 && !action.getStatus('bookmark');\n      })\n      .execute(function (action) {\n        var previewId = action.getPreviewId();\n        return api.Operation.toggleBookmark(previewId);\n      });\n\n    /**\n     * @protected\n     * @name ActionStore.DELETE_BOOKMARK\n     * @type {TppActionBuilder}\n     */\n    ActionStore.DELETE_BOOKMARK = createActionBuilder()\n      .name('deleteBookmark')\n      .label('Delete bookmark')\n      .icon(api.Icon.DELETE_BOOKMARK)\n      .isEnabled(function (action) {\n        return ['Section', 'Page', 'PageRef'].indexOf(action.getStatus('elementType')) !== -1 && action.getStatus('bookmark');\n      })\n      .execute(function (action) {\n        var previewId = action.getPreviewId();\n        return api.Operation.toggleBookmark(previewId);\n      });\n\n\n      /**\n       * @protected\n       * @name ActionStore.TRANSLATE\n       * @type {TppActionBuilder}\n       */\n      ActionStore.TRANSLATE = createActionBuilder()\n        .name('translate')\n        .label('Translate')\n        .icon(api.Icon.TRANSLATE)\n        .isEnabled(function (action) {\n          return ['Section', 'Page'].indexOf(action.getStatus('elementType')) !== -1 && api.Operation.getLanguages().length > 1;\n        })\n        .getOptions(function (action) {\n          var languages = api.Operation.getLanguages();\n          var options = [];\n\n          for (var i=0, ln=languages.length; i<ln; i++) {\n            for (var j=0; j<ln; j++) {\n              if (i !== j) {\n                options.push({ id: [languages[i], languages[j]], label: languages[i] + ' → ' + languages[j] });\n              }\n            }\n          }\n\n          return options;\n        })\n        .execute(function (action, args) {\n          return api.Operation.showTranslationDialog(action.getPreviewId(), args[0][0], args[0][1]);\n        });\n\n\n    /** @type {[TppActionBuilder]}*/\n    var INITIAL_DEFAULT_DECORATION_ACTIONS = [\n      ActionStore.DEBUG_STATUS,\n      ActionStore.EDIT_ELEMENT,\n      ActionStore.CREATE_CHILD_SECTION,\n      ActionStore.DELETE_SECTION,\n      ActionStore.DELETE_PAGE,\n      ActionStore.START_WORKFLOW,\n      ActionStore.PROCESS_WORKFLOW\n    ];\n\n\n    var defaultDecorationActions = INITIAL_DEFAULT_DECORATION_ACTIONS;\n\n\n    /**\n     * Set the list of default buttons added to every decorated element.\n     *\n     * This does not mean that each of this buttons will be enabled.\n     * Each button handle its visibility on its own. ({@link TppActionBuilder#isEnabled})\n     *\n     * This configuration is global, and should be set only once before decorating all elements.\n     *\n     * The initial list of default buttons is:\n     *     TPP_API.Button.DEBUG_STATUS,\n     *     TPP_API.Button.EDIT_ELEMENT,\n     *     TPP_API.Button.DELETE_SECTION,\n     *     TPP_API.Button.DELETE_PAGE,\n     *     TPP_API.Button.START_WORKFLOW,\n     *     TPP_API.Button.PROCESS_WORKFLOW\n     *\n\n     * @name TPP_API.Decorate.setDefaultButtons\n     * @public\n     * @since 1.1.2\n     * @param {[TppActionBuilder]} buttons.\n     * @example\n     *  // Example 1\n     *  // Workflows only accessible via ContentCreator menu bar,\n     *  // and every decorated Image has an additional crop button.\n     *  TPP_API.Decorate.setDefaultButtons([\n     *         TPP_API.Button.DEBUG_STATUS,\n     *         TPP_API.Button.EDIT_ELEMENT,\n     *         TPP_API.Button.DELETE_SECTION,\n     *         TPP_API.Button.DELETE_PAGE,\n     *         TPP_API.Button.CROP_IMAGE\n     *     ])\n     *\n     *  // Example 2\n     *  // No default buttons set.\n     *  // Add buttons on each element individually\n     *  TPP_API.Decorate.setDefaultButtons([]);\n     *  TPP_API.Decorate.element($el).addButton(TPP_API.Button.EDIT_ELEMENT);\n     *  TPP_API.Decorate.element($img).addButton(TPP_API.Button.CROP_IMAGE);\n     *  ...\n     */\n    decorate.setDefaultButtons = function (buttons) {\n      defaultDecorationActions = buttons || [];\n    };\n\n\n    /**\n     * Scans the entire document (or from a given $root) for elements with a data-preview-id attribute.\n     *\n     * It activates a UI for each of these elements with a mouse-over border and buttons in a\n     * ContentCreator like manner.\n     *\n     * @name TPP_API.Decorate.scan\n     * @public\n     * @since 1.0.0\n     * @param {HTMLElement} [$root=document] - An optional root to perform the search from.\n     */\n    decorate.scan = function ($root) {\n      util.previewElements($root)\n        .forEach(function ($el) {\n          util.log('[scan] found', $el);\n          decorate.element($el, $el.dataset.previewId);\n        });\n    };\n\n\n    /**\n     * @protected\n     * @param {HTMLElement} $el\n     * @param {string} previewId\n     * @return {string}\n     */\n    var initPreviewId = function ($el, previewId) {\n      previewId = previewId || $el.dataset.previewId;\n      if (previewId) {\n        $el.dataset.previewId = previewId;\n      }\n      return previewId;\n    };\n\n    /**\n     * Initialize context values that could be given\n     * via data-tpp-context-* fields on the given element.\n     * @protected\n     * @param $el\n     * @param context {object}\n     * @return {object}\n     */\n    var initContext = function ($el, context) {\n      var contextFromAttributes = Object.keys($el.dataset)\n        .filter(function (key) { return key.startsWith('tppContext'); })\n        .reduce(function (object, key) {\n          var name = key.substr('tppContext'.length);\n          name = name[0].toLowerCase() + name.slice(1);\n          object[name] = $el.dataset[key];\n          return object;\n        }, {});\n      return Object.assign({}, contextFromAttributes, context);\n    };\n\n    /**\n     * @protected\n     * @param {TppButtonDecorator} buttons\n     * @param {HTMLElement} $el\n     * @param {string} previewId\n     * @param {[TppActionBuilder]} customActions\n     * @param {object} context\n     * @return {void}\n     */\n    var updateDecoration = function (buttons, $el, previewId, customActions, context) {\n      buttons.clearButtons();\n      if (previewId) {\n        defaultDecorationActions.forEach(function (builder) {\n          buttons.addButton(builder\n                              .previewId(previewId)\n                              .element($el)\n                              .updateContext(context));\n        });\n        customActions.forEach(function (builder) {\n          buttons.addButton(builder\n                              .previewId(previewId)\n                              .element($el)\n                              .updateContext(context));\n          buttons.updateButtons({})\n        });\n        //initial status\n        // noinspection JSIgnoredPromiseFromCall\n        api.Operation.getElementStatus(previewId);\n      } else {\n        customActions.forEach(function (builder) {\n          buttons.addButton(builder\n                              .element($el)\n                              .updateContext(context));\n          buttons.updateButtons({})\n        });\n      }\n    };\n\n    /**\n     * Creates a blank TppActionBuilder.\n     *\n     * @name TPP_API.Decorate.createActionBuilder\n     * @return {TppActionBuilder}\n     */\n    decorate.createActionBuilder = util.Types.createActionBuilder;\n\n    /**\n     * Decorates a single element with a ContentCreator like UI.\n     *\n     * The UI provides an interactive border and a set of standard buttons.\n     *\n     * The previewId has either been annotated as a data-preview-id at this element, or can be given\n     * as a second parameter. In the latter case the attribute will be set by this function. The parameter\n     * takes precedence over the annotated 'data-preview-id' element.\n     *\n     * The context value can be uses to add context values to button. The context values will be merged using\n     * {@link TppActionBuilder#updateContext}. The context values can also be given as data-tpp-* attributes.\n     * Currently supported attributes are\n     *\n     * If no previewId is given, a decoration will be created with less functionality.\n     * To give a previewId later on use {@link TppDecorator.updatePreviewId}.\n     *\n     *\n     * @name TPP_API.Decorate.element\n     * @public\n     * @since 1.0.0\n     * @param {HTMLElement} $el -  The element to decorate.\n     * @param {string} [previewId] - The previewId assigned for the given element.\n     * @param {object} [context] - Context value that are assigned to every button.\n     * @return {TppDecorator} For adding custom functions.\n     */\n    decorate.element = function ($el, previewId, context) {\n\n      ensureInit();\n\n      /** @type {string} */\n      var _previewId = initPreviewId($el, previewId);\n\n      /** @type {object} */\n      var _context = initContext($el);\n\n      /** @type {[TppActionBuilder]} */\n      var _customActions = [];\n\n      var frameDecorator = util.ui.renderFrame($el);\n\n      /** @type {TppButtonDecorator} */\n      var buttons = util.ui.renderButtons(frameDecorator.getButtonContainer());\n\n      // Listen for element deletion to remove also the borders\n      var observer = new MutationObserver(function (mutations) {\n        mutations.forEach(function (mutation) {\n          var nodes = Array.from(mutation.removedNodes);\n          var directMatch = nodes.indexOf($el) > -1;\n          var parentMatch = nodes.some(function (parent) {return parent.contains($el);});\n          if (directMatch || parentMatch) {\n            frameDecorator.disposeBorders();\n          }\n        });\n      });\n      observer.observe(document.body, {\n        subtree: true,\n        childList: true\n      });\n\n      $el.addEventListener(api.Event.STATUS_CHANGED, function (event) {\n        if (_previewId && _previewId === event.detail.previewId) {\n          buttons.updateButtons(event.detail.status);\n        }\n      });\n\n      var _updateDecoration = function () {\n        updateDecoration(buttons, $el, _previewId, _customActions, _context);\n      };\n\n      _updateDecoration();\n\n      /**\n       * Fluent API to interact with the created decoration.\n       * It can be used to create user defined actions and give and update the corresponding previewId.\n       *\n       * @class\n       * @public\n       * @since 1.0.0\n       * @name TppDecorator\n       * @typedef {TppDecorator}\n       */\n      /**\n       * @type {TppDecorator}\n       */\n      var decorator = {\n        /**\n         * Adds a user defined button as an action builder to the elements UI.\n         *\n         * The action builder ({@link TppActionBuilder}) is used to create action instances ({@link TppAction})\n         * and render the buttons accordingly.\n         *\n         * The visibility of the button depends on the {@link TppActionBuilder#isEnabled} callback.\n         *\n         * Note that the methods {@link TppActionBuilder#previewId} and {@link TppActionBuilder#element}\n         * will be called internally by the decorator. So the resulting action has access to this information\n         * if available. You can access {@link TppAction#getPreviewId} and {@link TppAction#getElement} in\n         * the callbacks given to the action builder. This can be seen in the following example.\n         * Therefore the configured action is neither node- nor previewId-specific and\n         * can be reused for more than one element decoration.\n         *\n         * If the element is connected to FirstSpirit content by previewId, the {@link TppAction#getStatus} gives\n         * access to the current status of the content.\n         *\n         * The button can either be configured completely from scratch by using an empty action builder\n         * as in the following example -\n         * Or by configuring one of the predefined buttons under {@link TPP_API.Button}. See more examples there.\n         *\n         * @example\n         * const $el_A = ... ,$el_B = ... // Some divs containing an image\n         * const cropImage = TPP_API.Decorate.createActionBuilder();\n         *\n         * // 1. configure an crop image button\n         * cropImage\n         *    .name('cropImage')\n         *    .label('Crop image')\n         *    .context({\n         *      minWidth: 200,\n         *      imageSelector : 'div>img.avatar'\n         *     })\n         *    .isEnabled((action)=>{\n         *        return action.getStatus('permissions.change')\n         *    })\n         *    .execute((action)=>{\n         *\n         *        const params = {\n         *          previewId: action.getPreviewId(),\n         *          context: action.getContext()\n         *        }\n         *\n         *        TPP_API.Common\n         *          .execute('class:CropImage', params)\n         *          .then((result)=>{\n         *              MyApp.refreshElement(action.getElement(), result);\n         *          });\n         *    });\n         *\n         *\n         * TPP_API.Decorate.element($el_A)   // 2. Decorate the element\n         *       // 3a. Add the element\n         *       .addButton( cropImage )\n         *\n         *       // 3b. Alternative way to start with a blank action builder\n         *       .addButton(TPP_API.Button.CUSTOM.name('blurImage'). ... )\n         *\n         *       // 3c. It's also possible to give a callback\n         *       // that takes a blank action builder as parameter\n         *       // and returns a configured action builder\n         *       .addButton( builder => { return builder.name('rotateImage'). ... } );\n         *\n         *\n         * // 4. Reuse the action builder to decorate another element\n         * TPP_API.Decorate.element($el_B).addButton( cropImage );\n         *\n         *\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppDecorator.addButton\n         * @param {TppActionBuilder|TppActionBuilderCallback} actionSpec\n         * @return {TppDecorator}\n         */\n        addButton: function (actionSpec) {\n          var actionBuilder = util.Types.actionHelper.actionSpecToBuilder(actionSpec);\n          if (actionBuilder) {\n            _customActions.push(actionBuilder);\n            _updateDecoration();\n          } else {\n            util.log('actionSpec has to be of type TppActionBuilder');\n          }\n          return decorator;\n        },\n\n\n        /**\n         * Enrich the given decoration by a new previewId.\n         *\n         * This will trigger a refresh of all attached actions and fetch a new status for the given previewId.\n         * See {@link TppAction#getStatus} and {@link TPP_API.Operation.getElementStatus} for more information\n         *\n         *\n         *\n         * @public\n         * @since 1.0.0\n         * @name TppDecorator.updatePreviewId\n         * @param {string} previewId\n         * @return {TppDecorator}\n         */\n        updatePreviewId: function (previewId) {\n          _previewId = previewId;\n          $el.dataset.previewId = previewId;\n          _updateDecoration();\n          return decorator;\n        }\n      };\n      return decorator;\n    };\n  }\n\n  /**\n   * Utilities for debugging, testing and support.\n   * This not a stable API!!\n   *\n   * @protected\n   * @param api\n   * @param util\n   * @param config\n   * @constructor\n   */\n  function Debug(api, util, config) {\n    var debug = this;\n\n    debug.currentConfig = Object.assign({}, config);\n    debug.defaultConfig = Object.assign({}, DEFAULT_CONFIG);\n\n    debug.enableDebugLog = api.enableDebugLog;\n\n    debug.parsePreviewId = function (previewId) {\n      if (typeof previewId === 'string') {\n        try {\n          var raw = JSON.parse(atob(previewId));\n          var result = {};\n          ['data-fs-id', 'data-fs-attrs'].forEach(function (prop) {\n            var rawProp = raw[prop];\n            try {\n              result[prop] = JSON.parse(atob(rawProp));\n            } catch (e) {\n              //ignore\n            }\n          });\n\n          return result;\n        } catch (e) {\n          // console.error(previewId,e);\n          return null;\n        }\n      }\n      return null;\n    };\n\n    debug.apiInitialized = false;\n\n    debug.version = FRONTEND_VERSION;\n    debug.gitHash = GIT_HASH;\n\n    debug.getInfo = function () {\n      return {\n        version: debug.version,\n        gitHash: debug.gitHash,\n        config: debug.currentConfig\n      }\n    };\n\n    /**\n     * Check version of backend and frontend.\n     * Can be used to check communication with backend.\n     * It will log information to the console.\n     *\n     * @name TPP_API.Debug.checkVersions\n     * @param {Number} [timeout=5000] - Timeout to wait for the backend.\n     * @return {Promise} - Promise resolves to an object with version info.\n     *  Will be rejected if no connection to backend could be established.\n     */\n    debug.checkVersions = function (timeout) {\n      if (typeof timeout === 'undefined') {\n        timeout = 5000;\n      }\n\n      var pingBackend = function () {\n        return new Promise(function (resolve, reject) {\n          util.messageService.send({tpp: {ping: true, version: FRONTEND_VERSION}}, config.origin, resolve);\n          setTimeout(function () {\n            var message = \"No Response from Backend. Timeout [\" + timeout + \"ms]\";\n            reject(message)\n          }, timeout);\n        });\n      };\n\n      var mapResult = function (result) {\n        return {\n          backendVersion: result.version,\n          frontendVersion: FRONTEND_VERSION\n        };\n      };\n\n      var checkMissmatch = function (result) {\n        result['missmatch'] = (result.backendVersion !== result.frontendVersion);\n        return result;\n      };\n\n      return pingBackend()\n        .then(mapResult)\n        .then(checkMissmatch);\n    }\n\n  }\n\n\n  /**\n   * The global object or initial entry point to access the TPP_API.\n   * You need to initialize the API using {@link TPP_API.init}.\n   *\n   * @name TPP_API\n   * @public\n   * @since 1.0.0\n   *\n   * @example\n   * // Include the script\n   * <script src=\"$PATH_TO_MODULE$/lib/fs-tpp-api.js\" data-tpp-init></script>\n   *\n   * // Alternatively you can use e.g. [unpkg.com](https://unpkg.com) with an appropriate version specifier:\n   * <script src=\"https://unpkg.com/fs-tpp-api@1.2.0/fs-tpp-api.js\" data-tpp-init></script>\n   *\n   * // ES6 import\n   * import TPP_API from 'fs-tpp-api';\n   *\n   * // Node\n   * const TPP_API = require('fs-tpp-api');\n   */\n  var TPP_API = function () {\n    var api = {};\n\n    api.Event = {\n\n      /**\n       * @private\n       * @event TPP_API.Event.INIT\n       */\n      INIT: 'tpp-init',\n\n      /**\n       * @event TPP_API.Event.CONTENT_CHANGED\n       * @public\n       * @since 1.0.0\n       * @property {string} previewId\n       * @property {any} context\n       * @property {string} content\n       */\n      CONTENT_CHANGED: 'tpp-content-changed',\n\n\n      /**\n       * @event TPP_API.Event.IMAGE_CHANGED\n       * @public\n       * @since 1.1.0\n       * @property {string} previewId\n       * @property {any} context\n       * @property {string} reference\n       */\n      IMAGE_CHANGED: 'tpp-image-changed',\n\n      /**\n       * Fired when the status of the store element has changed.\n       *\n       * @event TPP_API.Event.STATUS_CHANGED\n       * @public\n       * @since 1.0.0\n       * @property {string} previewId\n       * @property {any} context\n       * @property {Object} status\n       */\n      STATUS_CHANGED: 'tpp-status-changed',\n\n      /**\n       * Fired when a workflow was started.\n       *\n       * This event is no longer used and is superseded by {@link TPP_API.Event.WORKFLOW_PROCESSED}.\n       *\n       * @event TPP_API.Event.WORKFLOW_STARTED\n       * @public\n       * @since 1.0.0\n       * @deprecated since version 1.1.0\n       * @property {string} previewId\n       * @property {any} context\n       * @property {string} workflowId\n       */\n      WORKFLOW_STARTED: 'tpp-wf-start',\n\n      /**\n       * Fired on every workflow step.\n       *\n       * @event TPP_API.Event.WORKFLOW_PROCESSED\n       * @public\n       * @since 1.0.0\n       * @property {string} previewId\n       * @property {any} context\n       * @property {string} workflowId\n       * @property {string} transitionId\n       */\n      WORKFLOW_PROCESSED: 'tpp-wf-process',\n\n      /**\n       * Fired when an element was deleted.\n       *\n       * @event TPP_API.Event.ELEMENT_DELETED\n       * @public\n       * @since 1.0.0\n       * @property {string} previewId\n       * @property {any} context\n       * @property {boolean} deleted\n       */\n      ELEMENT_DELETED: 'tpp-element-deleted',\n\n\n      /**\n       * @event TPP_API.Event.CHILD_SECTION_CREATED\n       * @public\n       * @since 1.0.0\n       * @property {string} previewId - the previewId of the parent page\n       * @property {TppCreateChildSectionConfig} context - creation context\n       * @property {any} content - the rendered content of the new section\n       */\n      CHILD_SECTION_CREATED: 'tpp-child-section-created',\n\n      /**\n       * @event TPP_API.Event.SIBLING_SECTION_CREATED\n       * @public\n       * @since 1.0.0\n       * @property {string} previewId - the previewId of the sibling page\n       * @property {TppCreateSiblingSectionConfig} context - creation context\n       * @property {string} content - the rendered content of the new section\n       */\n      SIBLING_SECTION_CREATED: 'tpp-sibling-section-created',\n\n      /**\n       * Fired when a FirstSpirit element was created.\n       *\n       * This event is different from the other events, as it does not contain a previewId.\n       * It is intended to be fired on a placeholder HTMLElement that stands for the newly created element.\n       *\n       * @event TPP_API.Event.ELEMENT_CREATED\n       * @public\n       * @since 1.0.0\n       * @property {TppCreateChildSectionConfig|TppCreateSiblingSectionConfig} context - creation context\n       * @property {any} content - the rendered content of the newly created element\n       */\n      ELEMENT_CREATED: 'tpp-element-created',\n\n\n      /**\n       * Fired when the outer content creator requests to show a certain element for example by clicking it in a report.\n       *\n       * @event TPP_API.Event.ELEMENT_REQUESTED\n       * @public\n       * @since 1.1.0\n       * @property {string} previewId - the preview\n       */\n      ELEMENT_REQUESTED: 'tpp-element-requested',\n\n\n      /**\n       * Fired when there are changes in the SiteStore triggered in the outer ContentCreator.\n       * Will be fired on document.body and on all elements annotated with the previewId (if one is set in the event).\n       *\n       * There are two cases in which this event is fired:\n       *  * 1. A new PageRef was created, then the previewId parameter is not null and provides the\n       *    previewId of this PageRef.\n       *  * 2. The order of sitestore element has changed, then the previewId parameter is null.\n       *\n       *  In both cases the navigation has to be rebuild and newly interpreted in the third party app.\n       *\n       * @event TPP_API.Event.NAVIGATION_CHANGED\n       * @public\n       * @since 1.1.0\n       * @property {string} [previewId] - If a new page ref is created the previewId of this PageRef will be send here.\n       *                                   Otherwise this is null.\n       */\n      NAVIGATION_CHANGED: 'tpp-navigation-changed'\n\n    };\n\n\n    /**\n     * String constants to define a child position.\n     * Used in {@link TPP_API.Operation.createChildSection}.\n     * @public\n     * @since 1.0.0\n     * @name TPP_API.SectionPosition\n     * @enum {string}\n     */\n    api.SectionPosition = {\n      /**\n       * Insert at first position.\n       * @name TPP_API.SectionPosition.FIRST\n       * @public\n       * @since 1.0.0\n       * */\n      FIRST: 'FIRST',\n      /**\n       * Insert at last position.\n       * @name TPP_API.SectionPosition.LAST\n       * @public\n       * @since 1.0.0\n       * */\n      LAST: 'LAST',\n      /**\n       * Insert before specified sibling.\n       * @name TPP_API.SectionPosition.BEFORE\n       * @public\n       * @since 1.0.0\n       */\n      BEFORE: 'BEFORE',\n      /**\n       * Insert after specified sibling.\n       * @name TPP_API.SectionPosition.AFTER\n       * @public\n       * @since 1.0.0\n       */\n      AFTER: 'AFTER',\n      /**\n       * Insert at a specified index.\n       * @name TPP_API.SectionPosition.INDEX\n       * @public\n       * @since 1.0.0\n       */\n      INDEX: 'INDEX'\n    };\n\n\n    /**\n     * The WorkflowMode is used to set the main store object the workflow is executed on.\n     *\n     * This is needed to harmonise the behaviour of the tpp workflow buttons and\n     * the buttons from the ContentEditor frame who triggers workflow actions.\n     *\n     * The mode is a global setting that will be given via {@link TPP_API.init}. The setting determines,\n     * how the internal buttons behave. So you need to know, how the ContentCreator is configured in your project, to\n     * configure the TPP_API accordingly.\n     *\n     * @public\n     * @since 1.1.0\n     * @name TPP_API.WorkflowMode\n     * @enum {string}\n     */\n    api.WorkflowMode = {\n      /**\n       * @name TPP_API.WorkflowMode.PAGE_DRIVEN\n       * @public\n       * @since 1.1.0\n       * The Workflow will be started on the current page object.\n       */\n      PAGE_DRIVE: 'PAGE_DRIVE',\n\n      /**\n       * The workflow will be started on the current pageref object.\n       * @name TPP_API.WorkflowMode.PAGE_REF_DRIVEN\n       * @public\n       * @since 1.1.0\n       */\n      PAGE_REF_DRIVEN: 'PAGE_REF_DRIVE'\n    }\n\n\n    api.Icon = {\n      /**\n       * @name TPP_API.Icon.EDIT\n       * @public\n       * @since 1.0.0\n       */\n      EDIT: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAACUef2IAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAAAyElEQVQ4T9WU4QqDMBCDRRBBhiAiyBiMgY/pu9dEWnFSe7mfFkJRz880XltVjx8hhNUSFtlCtWuxFpTPAZwi3MWmG774KcgPhiN5uCKRqSj0RqJEkWLSI7Ecw+XAGsw91MndIYCnVAPoSwbHH1LqigMcnWtwwXF/rZGcC+A/x55YrK7Igs1YSluaHcFOyK0K93/QCDXZfW6A9749g3G9QF9otrIuRXGAAXmfgOxp88TjccgiNv9V6WXOjEUCZqO5ucmPM8vbM3kDZGPFNvxi+34AAAAASUVORK5CYII=\",\n\n      /**\n       * @name TPP_API.Icon.EDIT_META_DATA\n       * @public\n       * @since 1.1.2\n       */\n      EDIT_META_DATA: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAAHjfs0eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpBOUQxQjhFMDAxNDhFMTExOTFGNDlEMUVCNkMxQkEwMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyNzgyNTE4RjYxMUMxMUUxQThBRUE5MTJEMzMyRDY1OCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNzgyNTE4RTYxMUMxMUUxQThBRUE5MTJEMzMyRDY1OCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCNzdCMUY2OUUwNDhFMTExOTFGNDlEMUVCNkMxQkEwMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBOUQxQjhFMDAxNDhFMTExOTFGNDlEMUVCNkMxQkEwMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlzLg4kAAADDSURBVHjaYvz//z8DDDAxIAEUDkAAMRKnDCCAkJXBGIwgggVJURaSAkaAAEIxGAZY0IwAG8OEZB4juspMJJX/0c0EWwQQQFgtwgVY0PjYdDLiUpyFxp8GcwJGQGIBKF5mIeBMRmQOQACR5EEmBhIAC7EhQZHJjKQozkSTm44cxsQ64z+xQYczKTNQNTQAAoykGCQ3mAkla4JeItt71HAx2S4lZHAWCemFkdqR9x+fL3C5OJOAodMJ+YBaLmakVuQRjEAA4Ow5e6ANBqwAAAAASUVORK5CYII=\",\n\n      /**\n       * @name TPP_API.Icon.DELETE\n       * @public\n       * @since 1.0.0\n       */\n      DELETE: \"data:image/png;base64,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\",\n      /**\n       * @name TPP_API.Icon.GROUPACTION\n       * @public\n       * @since 1.0.0\n       */\n      GROUPACTION: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAAGXljaGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjVFQkNGMTk4RTlCMjExRTBCQTc4Q0QxRkI0ODk1RjA0IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjVFQkNGMTk5RTlCMjExRTBCQTc4Q0QxRkI0ODk1RjA0Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUVCQ0YxOTZFOUIyMTFFMEJBNzhDRDFGQjQ4OTVGMDQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NUVCQ0YxOTdFOUIyMTFFMEJBNzhDRDFGQjQ4OTVGMDQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4j+SC7AAAApklEQVR42mL8//8/AwgwMUABQAAxAEX+Mz1+/JgBIIAYQXKfP38GKwAIIEYUhSBRuAhAAMEZv3//BjNYWVkZ4ea9f/8ejEEAIIBgKkEEI9wwoDa4VhYQ8ePHDwYo/R+s4vv372DMy8sLMfjnz58MYmJiYDMAAgxuPQj8+/cPzmFiYmKEsVkYkABINxIAa+Dk5GREUQSyDx0AFaGaBHMpCEhJScGtAwDOn1MNwUTjlwAAAABJRU5ErkJggg==\",\n      /**\n       * @name TPP_API.Icon.DEBUG\n       * @public\n       * @since 1.0.0\n       */\n      DEBUG: \"data:image/png;base64,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/GMzLdsAADr7aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzEzOCA3OS4xNTk4MjQsIDIwMTYvMDkvMTQtMDE6MDk6MDEgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChNYWNpbnRvc2gpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDEyLTAxLTEwVDA4OjI1OjU2KzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTctMTEtMTNUMTE6NTE6MzcrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE3LTExLTEzVDExOjUxOjM3KzAxOjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOklDQ1Byb2ZpbGU+c1JHQiBJRUM2MTk2Ni0yLjE8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPgogICAgICAgICAgICA8cmRmOkJhZz4KICAgICAgICAgICAgICAgPHJkZjpsaT54bXAuZGlkOjlFNjJBRUYyQTNDQjExRTE4MzU2ODM4NDZBOTVCODcyPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkJhZz4KICAgICAgICAgPC9waG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6OTIwOThiYTctNzExMi00MDc1LTkwMmItOTlhNzg2NWIyNjMxPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6MmQ2YjI0MTQtMDVjNy0xMTdiLTg0ZjUtOTUyOTYzZWVhN2Y0PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6NTE1MDE2ZTYtNTZmZi00NmYyLWE3ZDMtYzJmYjRhMjMyZWZjPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjUxNTAxNmU2LTU2ZmYtNDZmMi1hN2QzLWMyZmI0YTIzMmVmYzwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxMi0wMS0xMFQwODoyNTo1NiswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjkyMDk4YmE3LTcxMTItNDA3NS05MDJiLTk5YTc4NjViMjYzMTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNy0xMS0xM1QxMTo1MTozNyswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+OTYwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj45NjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+MTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MjI8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MTk8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PqsKpiEAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAJxJREFUeNpi+P//PwMtMMNAGcwKpf/TysXIBnPRyuDN1DBY6D8CnIeKvUGS5yTWYEY0L9+AGvoPKnbk////n9D09BLr4hv/MQEDFjEXfJGKLsCMI2yxGf4AajjZkUfI5SQZvPk/bsCAFO44LSAlueFyOUXp2IXYICDGYA40F7v8////BTUMZoLSq3GkFBZKszQjnuw9+IrNwWcwYADDQCIMDFepgwAAAABJRU5ErkJggg==\",\n      /**\n       * @name TPP_API.Icon.WORKFLOW\n       * @public\n       * @since 1.0.0\n       */\n      WORKFLOW: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAFoTx1HAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkE1MUVCNzBCMDE0NDExRTE4MTIwREU0NEQzOTMzM0Y4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkE1MUVCNzBDMDE0NDExRTE4MTIwREU0NEQzOTMzM0Y4Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTUxRUI3MDkwMTQ0MTFFMTgxMjBERTQ0RDM5MzMzRjgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QTUxRUI3MEEwMTQ0MTFFMTgxMjBERTQ0RDM5MzMzRjgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz65ABaxAAAAl0lEQVR42mL8//8/AwgwMUABQAAxYogABBBcBAhADEa4DIgDIgACCFkFWN9/ZA5cLxNMPYgGCCAUPcimI2v7j2YTmM+CLoAMAAIIm7EM2FyDbjyGJF6djLgk/+PS+R+JxggeRiQabjRAgOH1CnJooQMWfO5BE2fEpZEBi+nINqLYjjfscDkTXSMjthAiNkKItp2FFOchAwBEcygkEeR08gAAAABJRU5ErkJggg==\",\n      /**\n       * @name TPP_API.Icon.CREATE_PAGE\n       * @public\n       * @since 1.0.0\n       */\n      CREATE_PAGE: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAAHjfs0eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjdFMDhBMzA2NzI3ODExRTE5M0EzQTc5MUI3RjlEQzc2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjdFMDhBMzA3NzI3ODExRTE5M0EzQTc5MUI3RjlEQzc2Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6N0UwOEEzMDQ3Mjc4MTFFMTkzQTNBNzkxQjdGOURDNzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6N0UwOEEzMDU3Mjc4MTFFMTkzQTNBNzkxQjdGOURDNzYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz67EEkXAAAAv0lEQVR42mL8//8/AwwwQen/yBxGkABAADESpYwBIICQlf1HlmBiQAWMMAUAAYRiMDYL/qMLYlWJAliQbYYBgADCahEuwILG/4/F+fjdQKzJjHhsYmQhYBiKZoAAIsmDZLv5PwH34zX5P0XOoJpiRnSnsBARIf9xJWVsocFIrJtRbAMIMJJikJJEhzM+8EUsKQYTCkiCFrCQ4DtGIn1EeiKiRhgTG+44g4WFRIOQU/h/fBawkBnzjJS4mNQIRQEAAoouSwxwE+wAAAAASUVORK5CYII=\",\n      /**\n       * @name TPP_API.Icon.CREATE_SECTION\n       * @public\n       * @since 1.0.0\n       */\n      CREATE_SECTION: \"data:image/png;base64,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\",\n      /**\n       * @name TPP_API.Icon.CROP_IMAGE\n       * @public\n       * @since 1.1.0\n       */\n      CROP_IMAGE: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAACUef2IAAAABGdBTUEAAK/INwWK6QAAAAlwSFlzAAAOwgAADsIBFShKgAAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAAAgUlEQVQ4T2P4//8/Ay0wTQwFOXTQGRwJdNVMfEFIrosHr8FA3xINUHxPKChApk7BgncCxa6giZNlMLoDKA5jmItHqMGg8INhUFCAIgpZDMYmOYOANMAwyGBQ7COLIbNxpipikxshdRjyhDTgShWE9BEs3WhmMEGX4SrhyNZIqNYBAOWOEXeO7QWpAAAAAElFTkSuQmCC\",\n      /**\n       * @name TPP_API.Icon.ADD_BOOKMARK\n       * @public\n       * @since 1.1.6\n       */\n      ADD_BOOKMARK: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAAHjfs0eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI3N0ZBOUU5NjEzRTExRTJCNkRDODFGNjk4NDJCRDY3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI3N0ZBOUVBNjEzRTExRTJCNkRDODFGNjk4NDJCRDY3Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Mjc3RkE5RTc2MTNFMTFFMkI2REM4MUY2OTg0MkJENjciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Mjc3RkE5RTg2MTNFMTFFMkI2REM4MUY2OTg0MkJENjciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7EpoHcAAABGElEQVR42mL4//8/AxBLgGhGEAEDTAxIACCAcMugcAACiAFqmtl/CIiB8uGqTgFxLLIGgABCMRjdTJDMXyCOQTabE4h1YeayQFUGQ+nLOM0ECCB0QSEgfgsSZ8AC0BXDOIuAeDeS+BIQwYKmORaLgUvw+hcXYGIgAQAEELrJbED8i1iTXwGxGU6jYaENxB/+I8A05BhGj2kQ8EFiH4PSMcgGIwfdU1yRgcuDMfjCmVDQLSGYCKkSKSQpBggwQs6oAGJdII5mIBFgM7gOiL2B2ATNlY+B+A4QLwPiH9gCC1fKQMZ+/zFBHQ61WDELDvv4gfgzEG8H4k9QH5jhSAtYXY4vjGOIDM4l5EQe2YASFy+hJLnRxMUUAQDIWuXpcvA6lwAAAABJRU5ErkJggg==\",\n      /**\n       * @name TPP_API.Icon.DELETE_BOOKMARK\n       * @public\n       * @since 1.1.6\n       */\n      DELETE_BOOKMARK: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAAHjfs0eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjM3RDgzMUQ2NjEzRTExRTJBRTUzQTE0Qzg2NDBGMjZGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjM3RDgzMUQ3NjEzRTExRTJBRTUzQTE0Qzg2NDBGMjZGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MzdEODMxRDQ2MTNFMTFFMkFFNTNBMTRDODY0MEYyNkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MzdEODMxRDU2MTNFMTFFMkFFNTNBMTRDODY0MEYyNkYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6VnafPAAABG0lEQVR42mL4//8/AxBLgGhGEAEDTAxIACCAcMugcAACiAFqmtl/CIiB8hlgEgxIgiDAABBAKAajmwmS+QvEMchmcwKxLsw4FqjKYCh9CeRWrGYCBBC6oBAQvwWJM2AB6IphnEVAvBtJfAmIYEHTHIvFwCW4TMYLmBhIAAABhG4yGxD/ItbkV0BshtNopMj78B8BpiHHMAwjm+yDxD4GpWOQDUYOuqe4IgOXB2PwhTO+oFsMxf9pHykkKQYIMELOqABiXSCOZiARYDO4Doi9gdgEzZWPgfgOEC8D4h/ooYovZSBjv/+YoA6HWqyYBYd9/ED8GYi3A/EnqA/McKQFrC7HF8YxRAbnEnIij2xAjouXIKduZLMG3MUUAQB/1/qqz56eugAAAABJRU5ErkJggg==\",\n      /**\n       * @name TPP_API.Icon.TRANSLATE\n       * @public\n       * @since 1.2.4\n       */\n       TRANSLATE: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAACUef2IAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC41ZYUyZQAAAINJREFUOE+1kAEKgEAIBHtfnwr6uCXhsbetSWQLA96od9FiZr8gZQdSdiBlB1J2wGIHuJchd3DA4YEq2d7jr8DgWfVusMCXOei4Lr9YXbydRB/riNflxQjGz+tVTrUHdwYs+OUq2V568TREROIsd0bxAo/yE1J2IGUHUnYgZQdSfseWA4mZHgMwLO3eAAAAAElFTkSuQmCC\"\n    };\n\n    return api;\n  }();\n\n\n  function initButtonConstants(api) {\n    api.Button = {\n\n      /**\n       * A collection of predefined buttons.\n       * @public\n       * @since 1.0.0\n       * @name TPP_API.Button\n       */\n      /**\n       * Custom button.\n       * @public\n       * @since 1.0.0\n       * @name TPP_API.Button.CUSTOM\n       * @type {TppActionBuilder}\n       * @example\n       *\n       * TPP_API.Decorate.element($el).addButton(\n       *   TPP_API.Button.CUSTOM\n       *      .context({content_spot: \"banner\"})\n       *      .name(\"promote-banner\")\n       *      .label(\"Promote Banner\")\n       *      .context({\n       *            type: \"promote\",\n       *            content_spot: \"banner\"\n       *        })\n       *      .icon(\"/icons/promote.png\")\n       *      .isEnabled((action) =>\n       *           !isBannerPromoted( action.getPreviewId(), action.getContext().content_spot )\n       *      .execute((action) =>\n       *          promoteBanner( action.getPreviewId(), action.getContext().content_spot )\n       *        );\n       *\n       * TPP_API.Decorate.element($el).addButton(\n       *   TPP_API.Button.CUSTOM\n       *      .context({content_spot: \"carousel\"})\n       *      .name(\"theme-switch\")\n       *      .options(\n       *           (action) => {\n       *              var options = [{id:\"default\", label:\"Set default theme\"}];\n       *              if (contentSpotsSupportsTheme(action.getPreviewId(), \"dark\")) {\n       *                 options.push({id:\"dark\", label:\"Set dark theme\"});\n       *              }\n       *              if (contentSpotsSupportsTheme(action.getPreviewId(), \"light)) {\n       *                 options.push({id:\"light\", label:\"Set light theme\"});\n       *              }\n       *              return options;\n       *           }\n       *        )\n       *      .execute((action, args) =>\n       *          var theme = args[0];\n       *          setTheme(action.getPreviewId(), theme);\n       *        );\n       *\n       *\n       **/\n      CUSTOM: ActionStore.CUSTOM,\n\n      /**\n       * @public\n       * @since 1.0.0\n       * @name TPP_API.Button.CREATE_PAGE\n       * @example\n       *\n       * // Example A\n       *\n       * // 1. Create Placeholder\n       * // In case you have no data for a current slot on your page, you can render an element $el as a placeholder\n       * var $el = MyApp.createPlaceholder();\n       *\n       * // 2. Decorate it\n       * // * $el will be decorated with a border\n       * // * If $el has no data-preview-id attribute a CREATE_PAGE button will be rendered\n       * // * This Button opens an editor form for a page based on 'template_uid'\n       * // * If form is submitted\n       * //  + a Page will be create in the PageStore under 'path/to/element' with the uid 'uid_of_element'\n       * //  + a PageRef to this Page will be created in the SiteStore under 'path/to/element' with the uid 'uid_of_element'\n       * //  + if successful an ELEMENT_CREATED event will be fired\n       * var create = TPP_API.Button.CREATE_PAGE.context({\n       *                                      template: 'template_uid',\n       *                                      path: 'path/to/element/uid_of_element',\n       *                                      language: 'en'})\n       * var decorator = TPP_API.Decorate.element($el).addButton(create);\n       *\n       *\n       * // 3. Wait for creation\n       * $el.addEventListener(TPP_API.EVENT.ELEMENT_CREATED, function(e){\n       *\n       *    // 4. Fill your placeholder with real data\n       *    var contentData = e.detail.content;\n       *    $el.innerHTML = MyApp.render(contentData);\n       *\n       *    // 5. Update the decoration\n       *    // This will update the elements decoration and enable all previewId related buttons.\n       *    // (Currently the ELEMENT_CREATED event does not have a previewId property.\n       *    // You have to know where you put it in your content and extract it by yourself.)\n       *    var previewId = MyApp.extractPreviewId(contentData);\n       *    decorator.updatePreviewId( previewId );\n       *\n       * });\n       *\n       *\n       * // Example B\n       *\n       * // You can also add options to select the\n       * var create = Decorate.CREATE_PAGE\n       *                  .context({ path: 'path/to/element/uid_of_element', lang: 'en' })\n       *                  .options([{id : 'template_uid_1', label : 'Basic'}, {id: 'template_uid_2', label: 'Advanced'}])\n       *\n       * var decorator = Decorate.element($el).addButton(create);\n       *\n       *\n       */\n      CREATE_PAGE: ActionStore.CREATE_PAGE,\n\n\n      /**\n       * This button can be used to decorate a page element. It creates child sections for this page element.\n       * That means a new section will be added to the page within a given body/content area.\n       *\n       * The {@link TppActionBuilder#context} should be called with a parameter of type {@link TppCreateChildSectionConfig}.\n       *\n       * The section template can be selected in three different ways. Either by the standard ContentCreator dialog,\n       * given as a fixed value, or with the TPP buttons drop down capability ({@link TppActionBuilder#options}).\n       * See examples for more info about choosing the section template.\n       *\n       * To handle the creation of the section afterwards see {@link TPP_API.Event.CHILD_SECTION_CREATED} and\n       * {@link TPP_API.Event.ELEMENT_CREATED}.\n       *\n       * @public\n       * @since 1.0.0\n       * @name TPP_API.Button.CREATE_CHILD_SECTION\n       * @example\n       *\n       * // Assumption for every example:\n       * // An html element representing the page is given.\n       * // It is annotated with a data-preview-id of a page.\n       * // The page element should not be the body element of the whole page even if only on FirstSpirit page is rendered\n       * // as a whole page in the third party application.\n       * // Instead it could be a title or header element.\n       * var $pageElement = ...\n       *\n       *\n       * // Example 1 - Simple case\n       * // User is provided a dialog with all possible templates.\n       * // At least the name of the body (content area) has to be specified.\n       * // This dialog is a standard ContentCreator functionality.\n       * // The name of the section will be derived from the uid of the selected template.\n       * // The new section will be placed after the given section\n       * TPP_API.Decorate.element($pageElement).addButton(Decorate.CREATE_CHILD_SECTION.context({body : \"main\"}));\n       *\n       * // Example 2 - Preselect the given template.\n       * // The button can also be pre-configured to choose a specific section template.\n       * TPP_API.Decorate\n       *      .element($pageElement)\n       *      .addButton(TPP_API.Button.CREATE_CHILD_SECTION.context(\n       *        {\n       *          body: \"main\",\n       *          template : \"section_template_uid\"\n       *        }\n       *      ));\n       *\n       *\n       * // Example 3 - Give a static list of templates.\n       * // The section template can also be chosen from a fixed list of templates.\n       * // There for the drop down capability of the TppButtons can be used.\n       * TPP_API.Decorate\n       *      .element($pageElement)\n       *      .addButton(TPP_API.Button.CREATE_CHILD_SECTION\n       *        .context(\n       *          {\n       *            body: \"main\",\n       *            template : \"section_template_uid\"\n       *          }\n       *        )\n       *        .options(\n       *          [\n       *          {id: 'section_template_uid_1', label : 'Basic Section'},\n       *          {id: 'section_template_uid_2', label : 'Advanced Section'}\n       *          ]\n       *         }\n       *      );\n       *\n       * // Example 4 - Position and section name\n       * // The position and also the name of the new section can be set .\n       * // (If there are collisions in the section names a suffix will be appended.)\n       * // The object given to the context i\n       * TPP_API.Decorate\n       *      .element($pageElement)\n       *      .addButton(TPP_API.Button.CREATE_CHILD_SECTION.context(\n       *        {\n       *          body: \"left\",\n       *          template : \"section_template_uid\",\n       *          position: TPP_API.SectionPosition.LAST,\n       *          sectionName: \"teaser_entry\"\n       *        }\n       *      ));\n       */\n      CREATE_CHILD_SECTION: ActionStore.CREATE_CHILD_SECTION,\n\n\n      /**\n       * This button can be used to decorate a section. It creates siblings sections for it.\n       * That means a new section will be added to the same body within the same page.\n       *\n       * The {@link TppActionBuilder#context} should be called with a parameter of type {@link TppCreateSiblingSectionConfig}.\n       *\n       * The section template can be selected in three different ways. Either by the standard ContentCreator dialog,\n       * given as a fixed value, or with the TPP buttons drop down capability ({@link TppActionBuilder#options}).\n       * See examples for more info about choosing the section template.\n       *\n       * To handle the creation of the section afterwards see {@link TPP_API.Event.SIBLING_SECTION_CREATED} and\n       * {@link TPP_API.Event.ELEMENT_CREATED}.\n       *\n       * @public\n       * @since 1.0.0\n       * @name TPP_API.Button.CREATE_SIBLING_SECTION\n       * @example\n       *\n       * //In every example $section is an html element annotated with the data-preview-id of a section.\n       *\n       * // Example 1 - Simple case\n       * // User is provided a dialog with all possible templates.\n       * // This dialog is a standard ContentCreator functionality.\n       * // The name of the section will be derived from the uid of the selected template.\n       * // The new section will be placed after the given section\n       * TPP_API.Decorate\n       *      .element($section)\n       *      .addButton(TPP_API.Button.CREATE_SIBLING_SECTION);\n       *\n       *\n       * // Example 2 - Preselect the given template.\n       * // The button can also be pre-configured to choose a specific section template.\n       * TPP_API.Decorate\n       *      .element($section)\n       *      .addButton(TPP_API.Button.CREATE_SIBLING_SECTION.context(\n       *        { template : \"section_template_uid\" }\n       *      ));\n       *\n       *\n       * // Example 3 - Give a static list of templates.\n       * // The section template can also be chosen from a fixed list of templates.\n       * // There for the drop down capability of the TppButtons can be used.\n       * TPP_API.Decorate\n       *      .element($section)\n       *      .addButton(TPP_API.Button.CREATE_SIBLING_SECTION.options(\n       *        [\n       *          {id: 'section_template_uid_1', label : 'Basic Section'},\n       *          {id: 'section_template_uid_2', label : 'Advanced Section'}\n       *        ]\n       *      ));\n       *\n       * // Example 4 - Position and section name\n       * // The position relative to the given section can be set and the name of the section can also be set.\n       * // (If there are collisions in the section names a suffix will be appended.)\n       * // The object given to the context i\n       *  TPP_API.Decorate\n       *      .element($section)\n       *      .addButton(TPP_API.Button.CREATE_SIBLING_SECTION.context(\n       *        {\n       *          template: \"teaser_entry_template_uid\"\n       *          position: TPP_API.SectionPosition.AFTER,\n       *          sectionName: \"teaser_entry\"\n       *        }\n       *      ));\n       *\n       * // Example 5 - Full example, decorate every child section with a button.\n       * // This should be full example for a list of sibling sections\n       *\n       * // a) Assume you have given a list of section in your application.\n       * // Every section is annotated with its own previewId.\n       * <div data-slot=\"teaser\">\n       *   <div class=\"slot-entry\" data-preview-id=\"...\"/>\n       *   <div class=\"slot-entry\" data-preview-id=\"...\"/>\n       * </div>\n       *\n       * // b) Decorate each slot entry with a create sibling button.\n       * var $slotEntries = document.querySelectorAll('.slot-entry');\n       * [].forEach.call($slotEntries, ($section) => {\n       *      Decorate.element($section).addButton(Decorate.CREATE_SIBLING_SECTION);\n       * });\n       *\n       */\n      CREATE_SIBLING_SECTION: ActionStore.CREATE_SIBLING_SECTION,\n\n      /**\n       * This button adds the ability to edit the element given by the previewId.\n       * It supports Sections, Pages and PageRefs.\n       * Usually there is no further configuration needed.\n       * @public\n       * @since 1.1.2\n       * @name TPP_API.Button.EDIT_ELEMENT\n       *\n       */\n      EDIT_ELEMENT: ActionStore.EDIT_ELEMENT,\n\n      /**\n       * This button adds the ability to edit the meta data of the element given by the previewId.\n       * Usually there is no further configuration needed.\n       * @public\n       * @since NEXT_STABLE\n       * @name TPP_API.Button.EDIT_META_DATA\n       *\n       */\n      EDIT_META_DATA: ActionStore.EDIT_META_DATA,\n\n      /**\n       * This button adds the ability to delete the section given by a previewId.\n       * Usually there is no further configuration needed.\n       * @public\n       * @since 1.1.2\n       * @name TPP_API.Button.DELETE_SECTION\n       *\n       */\n      DELETE_SECTION: ActionStore.DELETE_SECTION,\n\n      /**\n       * Dropdown button that shows all available workflow that could currently been started.\n       * An element that is decorated with this button, should also be decorated with {@link TPP_API.Button.PROCESS_WORKFLOW}.\n       * Either one of them will be shown, depending on the elements workflow state.\n       * Usually there is no further configuration needed.\n       * @public\n       * @since 1.1.2\n       * @name TPP_API.Button.START_WORKFLOW\n       */\n      START_WORKFLOW: ActionStore.START_WORKFLOW,\n\n      /**\n       * Dropdown button that triggers the translation dialog\n       * @public\n       * @since 1.2.4\n       * @name TPP_API.Button.TRANSLATE\n       */\n      TRANSLATE: ActionStore.TRANSLATE,\n\n      /**\n       * Dropdown button that shows all available workflow steps that could currently been taken.\n       * An element that is decorated with this button, should also be decorated with {@link TPP_API.Button.START_WORKFLOW}.\n       * Either one of them will be shown, depending on the elements workflow state.\n       * Usually there is no further configuration needed.\n       * @public\n       * @since 1.1.2\n       * @name TPP_API.Button.PROCESS_WORKFLOW\n       */\n      PROCESS_WORKFLOW: ActionStore.PROCESS_WORKFLOW,\n\n\n      /**\n       * Open the crop image dialog for an image given as a previewId.\n       * The resolution has to be given as additional context value or will be derived from\n       * the decorated tab.\n       * @public\n       * @since 1.1.0\n       * @name TPP_API.Button.CROP_IMAGE\n       * @example\n       * //\n       * // Example 1 - decorate image tag, give previewId and resolution via data-fs-resolution\n       * // The previewId for the image can be rendered like this\n       * //\n       * $CMS_VALUE(previewId:\"fs_image\")$\n       *\n       * // Assume you have the following image tag\n       * <img src=\"...\" alt=\"...\" id=\"headerImage\" data-preview-id=\"...\" data-tpp-context-image-resolution=\"HEADER_640x150\">\n       * <img src=\"...\" alt=\"...\" id=\"headerImage\" data-preview-id=\"...\" data-tpp-context-image-resolutions=\"HEADER_640x150, HEADER_1280x300\">\n       *\n       * // Decorate the image tag\n       * var $image = document.getElementById('#headerImage');\n       * TPP_API.Decorate.element($image).addButton(TPP_API.Button.CROP_IMAGE);\n       *\n       * //\n       * // Example 2 - decorate image tag, give previewId and resolution via api.\n       * //\n       * // Assume you have the previewId and resolution fetched via the CaaS\n       * var imageResolution = ...;\n       * var previewId = ...;\n       *\n       * // Your image tag does not need the attributes now\n       * <img src=\"...\" alt=\"...\" id=\"headerImage\">\n       *\n       * // Decorate the image tag\n       * var $image = document.getElementById('#headerImage');\n       * var cropImageButton = TPP_API.Button.CROP_IMAGE.context({imageResolution: imageResolution});\n       * TPP_API.Decorate.element($image, previewId).addButton(cropImageButton);\n       *\n       */\n      CROP_IMAGE: ActionStore.CROP_IMAGE,\n\n      /**\n       * Adds bookmark for element.\n       * @public\n       * @since 1.1.6\n       * @name TPP_API.Button.ADD_BOOKMARK\n       */\n      ADD_BOOKMARK: ActionStore.ADD_BOOKMARK,\n\n      /**\n       * Removes bookmark for element.\n       * @public\n       * @since 1.1.6\n       * @name TPP_API.Button.DELETE_BOOKMARK\n       */\n      DELETE_BOOKMARK: ActionStore.DELETE_BOOKMARK,\n\n      /**\n       * This button prints debug information to the browser console.\n       * It's only visible when debug logging is enabled.\n       * {@link TPP_API.enableDebugLog}\n       * Usually there is no further configuration needed.\n       * @public\n       * @since 1.1.2\n       * @name TPP_API.Button.DEBUG_STATUS\n       **/\n      DEBUG_STATUS: ActionStore.DEBUG_STATUS\n    };\n\n  }\n\n  function checkForReceiver(util, common, timeout) {\n\n    var inIFrame = function () {\n      try {\n        return window.self !== window.top;\n      } catch (e) {\n        return true;\n      }\n    };\n    util.messageService.updateReceiverOverride();\n    return new Promise(function (resolve) {\n      if (typeof window !== 'undefined' && inIFrame()) {\n        util.log(\"This app runs in iframe and uses First Spirit TPP so we assume it is in edit mode. Try to connect with TPP-Api.\");\n        var pingResult = null;\n        common.ping(function (result) {\n          pingResult = result;\n          if (result.version !== FRONTEND_VERSION) {\n            util.log(\"WARNING: TPP-Module and TPP_API Version missmatch. \" +\n                       \"TPP_API version: \" + FRONTEND_VERSION + \" TPP-Module Version: \" + result.version);\n          }\n        });\n\n        setTimeout(function () {\n          if (!pingResult) {\n            util.log(\"WARNING: Could not reach TPP-Module receiver (TIMEOUT=\" + timeout + \"ms). The Module might not be installed or this app runs within an iframe but not in FirstSpirits ContentCreators.\");\n            resolve(false);\n          } else {\n            util.log(\"SUCCESS: Connection to TPP-Module could be established. \" +\n                       \"TPP_API version: \" + FRONTEND_VERSION + \" TPP-Module Version: \" + pingResult.version);\n            resolve(true);\n          }\n        }, timeout)\n\n      } else {\n        resolve(false);\n      }\n    });\n  }\n\n  function connectHandler(receiverFound, util, config) {\n    return new Promise(function (resolve) {\n      if (receiverFound) {\n        util.messageService.connectApi(config.origin, function () {\n          util.log(\"Message handler initialized\");\n          resolve(receiverFound);\n        });\n      } else {\n        resolve(receiverFound);\n      }\n    });\n  }\n\n\n  /**\n   * Added for better testability.\n   * Access to the three API-Parts as Constructor.\n   * Each of the three parts should not depend on global variables.\n   * The TPP_API, util, and config can be given as constructor argument.\n   * The iframe communication can be mocked be setting another message receiver,\n   * but DOM-Event will be emitted and received (can be partially mocked by changing util.emit);\n   * @private\n   */\n  TPP_API._internal = {\n    CommonConstructor: Common,\n    OperationConstructor: Operation,\n    DecorateConstructor: Decorate,\n    DebugConstructor: Debug,\n    util: util,\n    setMessageReceiver: function (receiver) {\n      messageReceiverOverride = receiver;\n      util.messageService.updateReceiverOverride();\n    }\n  };\n\n\n  /**\n   * Enables the debug log. Setting is stored in localStorage and survives reload.\n   * @name TPP_API.enableDebugLog\n   * @public\n   * @since 1.0.0\n   * @param {boolean} [enable=true]\n   */\n  TPP_API.enableDebugLog = function (enable) {\n    enable = typeof (enable) === 'undefined' || enable;\n    util.log.setEnabled(enable);\n  };\n\n\n  var initCalled = false;\n  /**\n   * The API has to be initialize either by calling TPP_API.init() or by adding a blank data-tpp-init attribute to the the script tag. You should use only one of these methods once.\n   * @name TPP_API.init\n   * @public\n   * @since 1.0.0\n   * @example\n   * // Default values\n   * TPP_API.init({\n   *     origin: \"*\",                                       // every origin allowed\n   *\n   *     autoScanDelay: null                                // disabled\n   *                                                        // This option is deprecated and might be replaced with a observer based solution)\n   *\n   *     alwaysDebug: false,                                // if true, debug will be enabled by default.\n   *                                                        // Otherwise debug has to be toggled manually\n   *\n   *     autoReload: false,                                 // disabled\n   *\n   *     deletePageWorkflow: null,                          // disabled, overrides the default delete workflow configured in project\n   *\n   *     workflowMode: TPP_API.WorkflowMode.PAGE_DRIVEN,    // Workflows will be started on PageRef.\n   *                                                        // This is TPPs initial approach\n   *   }\n   *\n   * // Reasonable alternative configuration\n   * TPP_API.init({\n   *     origin: \"https://dev.contentCreatorUrl.com:9000\",    // The domain of the outer ContentCreator window.\n   *                                                          // Restricts communication only to out frame with this domain.\n   *\n   *     autoScanDelay: 1000                                  // Scan every 1000ms\n   *                                                          // This option is deprecated and might be replaced\n   *                                                          // with a observer based solution.\n   *\n   *     alwaysDebug: true,                                   // Debug logging and PP_API.Button.DEBUG_STATUS action is enabled.\n   *\n   *     autoReload: true,                                    // Reloads the whole page on certain actions\n   *\n   *     deletePageWorkflow: null,                            // Disabled, overrides the default delete workflow configured in project\n   *\n   *     workflowMode: TPP_API.WorkflowMode.PAGE_REF_DRIVEN,  // Workflows will be started on PageRefs.\n   *                                                          // This is the approach more compatible with the actions\n   *                                                          // accessible the ContentCreator frame.\n   *\n   *   }\n   * );\n   *\n   * @example\n   * // Alternatively use data-tpp-* attributes\n   *\n   * <script src=\"$PATH_TO_MODULE$/lib/fs-tpp-api.js\"\n   *   data-tpp-init\n   *   data-tpp-auto-reload=\"true\"></script>\n   *\n   * // Note, that data-tpp-init has to be always present in the second method, that there is a data-tpp-* prefix and that the camelCase on one side is kebab-case on the other side.\n   *\n   *\n   * @param {Object} tppConfig\n   */\n  TPP_API.init = function (tppConfig) {\n    if (initCalled) {\n      console.error('TPP_API.init() was called twice. Please do only one of EITHER calling it directly OR using <script data-tpp-init>');\n    }\n    initCalled = true;\n\n    config = Object.assign({}, DEFAULT_CONFIG, tppConfig);\n\n    TPP_API.Common = new Common(TPP_API, util, config);\n    TPP_API.Operation = new Operation(TPP_API, util, config);\n    TPP_API.Decorate = new Decorate(TPP_API, util, config);\n    TPP_API.Debug = new Debug(TPP_API, util, config);\n\n    initButtonConstants(TPP_API);\n\n\n    if (config.autoScanDelay) {\n      setTimeout(TPP_API.Decorate.scan, parseInt(config.autoScanDelay, 10));\n    }\n\n    if (config.alwaysDebug) {\n      util.log.setEnabled(true);\n    }\n\n    if (config.autoReload) {\n      var reloadEvents = [TPP_API.Event.CONTENT_CHANGED, TPP_API.Event.ELEMENT_DELETED];\n      reloadEvents.forEach(function (eventName) {\n        document.body.addEventListener(eventName, self.location.reload.bind(self.location));\n      });\n    }\n\n    // deprecated - was used in old prototypes\n    TPP_API.Decorate.Action = TPP_API.Button;\n    TPP_API.Decorate.Icon = TPP_API.Icon;\n\n    //Connect with receiver\n    var timeout = 800;\n    checkForReceiver(util, TPP_API.Common, timeout)\n      .then(function (receiverFound) {\n        return connectHandler(receiverFound, util, config);\n      })\n      .then(function () {\n        TPP_API.Debug.apiInitialized = true;\n      });\n  };\n\n\n  (/**\n   * @private\n   * Script tag initialize\n   * @param {HTMLElement} $script\n   * param {{tppOrigin,tppAlwaysDebug,tppAutoScanDelay,tppAutoReload}} data\n   */\n  function ($script) {\n    if ($script) {\n\n      var data = $script.dataset;\n      var config = {};\n\n      var getTppCamelCase = function (str) {\n        return \"tpp\" + str[0].toUpperCase() + str.slice(1);\n      };\n\n      var setBoolean = function (config, key, data) {\n        var strValue = data[getTppCamelCase(key)];\n        if (typeof (strValue) !== 'undefined') {\n          config[key] = (strValue === 'true');\n        }\n      };\n\n      var setNumber = function (config, key, data) {\n        var strValue = data[getTppCamelCase(key)];\n        var value = Number.parseInt(strValue);\n        if (!Number.isNaN(value)) {\n          config[key] = value;\n        }\n      };\n\n      var setString = function (config, key, data) {\n        var strValue = data[getTppCamelCase(key)];\n        if (typeof (strValue) !== 'undefined') {\n          config[key] = strValue;\n        }\n      };\n\n      setString(config, 'origin', data);\n\n      setString(config, 'workflowMode', data);\n\n      setBoolean(config, 'alwaysDebug', data);\n\n      setNumber(config, 'autoScanDelay', data);\n\n      setBoolean(config, 'autoReload', data);\n\n      setBoolean(config, 'deleteSectionEnabled', data);\n\n      setString(config, 'deletePageWorkflow', data);\n\n      TPP_API.init(config);\n    }\n  })(typeof (document) !== 'undefined' && document.querySelector('script[data-tpp-init]'));\n\n  /**\n   * In setups where you can not control the load order of your scripts you can define this as a global callback.\n   * It will be called with TPP_API as parameter.\n   * The best way would be to avoid such situations and control the load order of your scripts.\n   * @private\n   * @name window.TPP_API_LOADED\n   *\n   * @example\n   * window.TPP_API_LOADED=function(TPP_API){\n   *   // You can use the TPP_API now.\n   *   // You should initialize and configure it as the first step\n   * }\n   */\n  if (typeof (window) !== 'undefined' && typeof window['TPP_API_LOADED'] === 'function') { // async / deferred usage\n    window['TPP_API_LOADED'](TPP_API);\n  }\n\n  util.log(\"TPP_API loaded.\");\n  if (typeof window === 'undefined') {\n    util.log(\"The API is not supposed to run on server side. It adds event listeners to the global window object.\");\n  }\n\n  return TPP_API;\n}))\n;\n","module.exports = { \"default\": require(\"core-js/library/fn/number/is-nan\"), __esModule: true };","require('../../modules/es6.number.is-nan');\nmodule.exports = require('../../modules/_core').Number.isNaN;\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number) {\n    // eslint-disable-next-line no-self-compare\n    return number != number;\n  }\n});\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/number/parse-int\"), __esModule: true };","require('../../modules/es6.number.parse-int');\nmodule.exports = require('../../modules/_core').Number.parseInt;\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n  var string = $trim(String(str), 3);\n  return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n  var exp = {};\n  var FORCE = fails(function () {\n    return !!spaces[KEY]() || non[KEY]() != non;\n  });\n  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n  if (ALIAS) exp[ALIAS] = fn;\n  $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n  string = String(defined(string));\n  if (TYPE & 1) string = string.replace(ltrim, '');\n  if (TYPE & 2) string = string.replace(rtrim, '');\n  return string;\n};\n\nmodule.exports = exporter;\n","module.exports = { \"default\": require(\"core-js/library/fn/array/from\"), __esModule: true };","require('../../modules/es6.string.iterator');\nrequire('../../modules/es6.array.from');\nmodule.exports = require('../../modules/_core').Array.from;\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n","module.exports = require('./_hide');\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n    var O = toObject(arrayLike);\n    var C = typeof this == 'function' ? this : Array;\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var index = 0;\n    var iterFn = getIterFn(O);\n    var length, result, step, iterator;\n    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for (result = new C(length); length > index; index++) {\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n  if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/object/keys\"), __esModule: true };","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/json/stringify\"), __esModule: true };","var core = require('../../modules/_core');\nvar $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });\nmodule.exports = function stringify(it) { // eslint-disable-line no-unused-vars\n  return $JSON.stringify.apply($JSON, arguments);\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/promise\"), __esModule: true };","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.promise');\nrequire('../modules/es7.promise.finally');\nrequire('../modules/es7.promise.try');\nmodule.exports = require('../modules/_core').Promise;\n","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n  'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n  var NAME = DOMIterables[i];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","module.exports = function () { /* empty */ };\n","module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n  try {\n    // correct subclassing with @@species support\n    var promise = $Promise.resolve(1);\n    var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n      exec(empty, empty);\n    };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function')\n      && promise.then(empty) instanceof FakePromise\n      // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n      // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n      // we can't detect it synchronously, so just check versions\n      && v8.indexOf('6.6') !== 0\n      && userAgent.indexOf('Chrome/66') === -1;\n  } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n  if (promise._n) return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function () {\n    var value = promise._v;\n    var ok = promise._s == 1;\n    var i = 0;\n    var run = function (reaction) {\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (promise._h == 2) onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // may throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (e) {\n        if (domain && !exited) domain.exit();\n        reject(e);\n      }\n    };\n    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if (isReject && !promise._h) onUnhandled(promise);\n  });\n};\nvar onUnhandled = function (promise) {\n  task.call(global, function () {\n    var value = promise._v;\n    var unhandled = isUnhandled(promise);\n    var result, handler, console;\n    if (unhandled) {\n      result = perform(function () {\n        if (isNode) {\n          process.emit('unhandledRejection', value, promise);\n        } else if (handler = global.onunhandledrejection) {\n          handler({ promise: promise, reason: value });\n        } else if ((console = global.console) && console.error) {\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if (unhandled && result.e) throw result.v;\n  });\n};\nvar isUnhandled = function (promise) {\n  return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n  task.call(global, function () {\n    var handler;\n    if (isNode) {\n      process.emit('rejectionHandled', promise);\n    } else if (handler = global.onrejectionhandled) {\n      handler({ promise: promise, reason: promise._v });\n    }\n  });\n};\nvar $reject = function (value) {\n  var promise = this;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if (!promise._a) promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function (value) {\n  var promise = this;\n  var then;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n    if (then = isThenable(value)) {\n      microtask(function () {\n        var wrapper = { _w: promise, _d: false }; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch (e) {\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch (e) {\n    $reject.call({ _w: promise, _d: false }, e); // wrap\n  }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor) {\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch (err) {\n      $reject.call(this, err);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected) {\n      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if (this._a) this._a.push(reaction);\n      if (this._s) notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject = ctx($reject, promise, 1);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === $Promise || C === Wrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    var $$reject = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x) {\n    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var values = [];\n      var index = 0;\n      var remaining = 1;\n      forOf(iterable, false, function (promise) {\n        var $index = index++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      forOf(iterable, false, function (promise) {\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  }\n});\n","module.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n  var un = that === undefined;\n  switch (args.length) {\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return fn.apply(that, args);\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n  var head, last, notify;\n\n  var flush = function () {\n    var parent, fn;\n    if (isNode && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (e) {\n        if (head) notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (isNode) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n  } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n    var toggle = true;\n    var node = document.createTextNode('');\n    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    var promise = Promise.resolve(undefined);\n    notify = function () {\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function (fn) {\n    var task = { fn: fn, next: undefined };\n    if (last) last.next = task;\n    if (!head) {\n      head = task;\n      notify();\n    } last = task;\n  };\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var hide = require('./_hide');\nmodule.exports = function (target, src, safe) {\n  for (var key in src) {\n    if (safe && target[key]) target[key] = src[key];\n    else hide(target, key, src[key]);\n  } return target;\n};\n","'use strict';\nvar global = require('./_global');\nvar core = require('./_core');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n  var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n  var C = speciesConstructor(this, core.Promise || global.Promise);\n  var isFunction = typeof onFinally == 'function';\n  return this.then(\n    isFunction ? function (x) {\n      return promiseResolve(C, onFinally()).then(function () { return x; });\n    } : onFinally,\n    isFunction ? function (e) {\n      return promiseResolve(C, onFinally()).then(function () { throw e; });\n    } : onFinally\n  );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n  var promiseCapability = newPromiseCapability.f(this);\n  var result = perform(callbackfn);\n  (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n  return promiseCapability.promise;\n} });\n","module.exports = { \"default\": require(\"core-js/library/fn/object/assign\"), __esModule: true };","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n","exports.f = Object.getOwnPropertySymbols;\n","exports.f = {}.propertyIsEnumerable;\n","module.exports = { \"default\": require(\"core-js/library/fn/object/create\"), __esModule: true };","require('../../modules/es6.object.create');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function create(P, D) {\n  return $Object.create(P, D);\n};\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n"],"sourceRoot":""}